提交 e76d0da3 编写于 作者: bo.dang's avatar bo.dang

Merge branch 'dev-circle-nine-20201231' into 'release'

专区管理,code review:bo.dang



See merge request !237
<template>
<el-form
ref="formData"
:model="formData"
:rules="rules"
label-width="150px"
label-suffix=":"
class="basic-form"
>
<el-form-item label="后台标题" prop="titleManager">
<el-col :span="13">
<el-input
size="small"
v-model="formData.titleManager"
placeholder="请输入后台显示的活动标题"
style="width:70%;"
@change="returnTypeData('titleManager')"
></el-input>
<span class="word-num">{{(formData.titleManager).replace(/\s+/g,"").length}}/30</span>
</el-col>
</el-form-item>
<el-form-item label="前台主标题" prop="titleViewMain">
<el-col :span="13">
<el-input
size="small"
v-model="formData.titleViewMain"
placeholder="请输入前台显示的活动主标题"
style="width:70%;"
@change="returnTypeData('titleViewMain')"
></el-input>
<span class="word-num">{{(formData.titleViewMain).replace(/\s+/g,"").length}}/30</span>
</el-col>
</el-form-item>
<el-form-item label="前台副标题" prop="titleViewSub">
<el-col :span="13">
<el-input
size="small"
v-model="formData.titleViewSub"
placeholder="请输入前台显示的活动副标题"
style="width:70%;"
@change="returnTypeData('titleViewSub')"
></el-input>
<span class="word-num">{{(formData.titleViewSub).replace(/\s+/g,"").length}}/30</span>
</el-col>
</el-form-item>
<el-form-item label="关联小圈" prop="circleId" class="required-label">
<el-select
v-model="formData.circleId"
@change="returnTypeData('circleId')"
placeholder="请选择小圈"
size="small">
<el-option
v-for="(item,index) in circleList"
:key="index"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目时间:" required>
<el-col :span="5">
<el-form-item prop="beginTime">
<el-date-picker
v-model="formData.beginTime"
size="small"
type="datetime"
placeholder="请选择开始时间"
style="width: 100%;"
:picker-options="pickerOptions0"
></el-date-picker>
</el-form-item>
</el-col>
<el-col class="line" :span="1">~</el-col>
<el-col :span="5">
<el-form-item label prop="endTime">
<el-date-picker
v-model="formData.endTime"
size="small"
type="datetime"
placeholder="请选择结束时间"
default-time="23:59:59"
style="width: 100%;"
:picker-options="pickerOptions1"
></el-date-picker>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item label="活动链接模块" v-if="formData.appModuleDto.linkType == 4" class="required-label">
<el-col :span="18">
<el-select filterable v-model="formData.appModuleDto.name" @change="moduleChange" placeholder="请选择模块" style="width:88%">
<el-option
v-for="item2 in moduleArray.nameList"
:key="item2.id"
:label="item2.name"
:value="item2.name">
</el-option>
</el-select>
</el-col>
</el-form-item>
<div v-for="(i,j) in formData.appModuleDto.paramList2" :key="j" class="required-label" v-if="formData.appModuleDto.linkType == 4">
<el-form-item label="选择参数" v-if="formData.appModuleDto.paramFlag == 1">
<el-col :span="18">
<el-select v-model="formData.appModuleDto.paramList[j].value" filterable placeholder="请选择参数" style="width:88%">
<el-option
v-for="(item3,index3) in i"
:key="index3"
:label="item3.name"
:value="item3.id + '&'+ item3.name">
</el-option>
</el-select>
</el-col>
</el-form-item>
</div>
<el-form-item label="报名需审核" class="required-label">
<el-radio-group v-model="formData.auditFlag" @change="" size="small" class="required-label">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
</el-form-item>
<div class="basic-item-icon">
<el-form-item label="活动列表页图片" class="required-label">
<el-upload
v-model="formData.listImage"
class="bg-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeUploadPic1"
>
<img
v-if="formData.listImage"
:src="formData.listImage"
@mouseover.stop="imgMouseOver1=true"
class="bg-img"
/>
<img v-if="!formData.listImage" class="bg-img" src="../../assets/image/small.png" />
<div
class="img-delete"
v-show="imgMouseOver1"
@click.stop="deleteImg(1)"
@mouseout.stop="imgMouseOver1=false"
>
<i class="el-icon-delete"></i>
</div>
<div class="limit-text">
<p>限制大小: 500kb</p>
<p>尺寸:112*112</p>
<p>支持jpeg, png格式</p>
</div>
</el-upload>
</el-form-item>
<p class="upload-message" v-if="uploadImgMessage1">活动列表页图片</p>
</div>
<div class="basic-item-icon">
<el-form-item label="报名页介绍图片" class="required-label">
<el-upload
v-model="formData.introImage"
class="bg-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeUploadPic2"
>
<img
v-if="formData.introImage"
:src="formData.introImage"
@mouseover.stop="imgMouseOver2=true"
class="bg-img"
/>
<img v-if="!formData.introImage" class="bg-img" src="../../assets/image/small.png" />
<div
class="img-delete"
v-show="imgMouseOver2"
@click.stop="deleteImg(2)"
@mouseout.stop="imgMouseOver2=false"
>
<i class="el-icon-delete"></i>
</div>
<div class="limit-text">
<p>限制大小: 500kb</p>
<p>宽度:750px</p>
<p>支持jpeg, png格式</p>
</div>
</el-upload>
</el-form-item>
<p class="upload-message" v-if="uploadImgMessage2">报名介绍页图片</p>
</div>
<div style="margin-top: 60px;margin-left: 250px;">
<el-button type="primary" @click="save()" center>保存</el-button>
<el-button @click="cancle()">取 消</el-button>
</div>
<el-dialog
class="dialog-title-border-old"
title="图片裁剪"
:visible.sync="showCropper"
:width="currentOption.cropDialogWidth"
center>
<div slot="title" style="text-align: left;">
<span style="font-weight: 700;">图片裁剪</span>
</div>
<div v-if="showCropper" style="margin-bottom: 20px;">
<Cropper
:cropOption="currentOption"
@getCropImg="getCropImg(arguments)"
:originImg="slide2.oriUrl"
/>
</div>
</el-dialog>
</el-form>
</template>
<script>
let vm = null;
import { openLoading, closeLoading } from "../../utils/utils";
import { doUpload, getFilePath } from "../../utils/qiniu-util";
import { getOnlineCircleList } from "../../utils/activitymanagement/activitymanagementApi";
import {getLinkType,getModuleData,getParamData} from "../../utils/yqrange/yqrangeApi";
import Cropper from '@/components/common/cropper.vue'
export default {
name: "baseinfo",
components: {
Cropper
},
props: {
formData: {
default: () => {
return {}
}
}
},
created() {
vm = this;
vm.getCircleList();//可以放在自组件优化
},
data() {
let checkProjectStr = (rule, value, callback) => {
if (value.indexOf("\\") != -1) {
//存在
callback(new Error("请勿输入字符“ \\ "));
} else if (value.indexOf(".") != -1) {
callback(new Error("请勿输入字符“ . "));
} else {
callback();
}
};
return {
showCropper: false,
currentOption: {
offset_x: 120,
offset_y: 185,
width: 160,
height: 120,
cvWidth: 1000,
cvHeight: 800,
uploadType: 1,
cropDialogWidth: '900px',
cropBoxResizable: true,
minCropBoxWidth: 100,
minCropBoxHeight: 100,
aspectRatio: 16/9
},
slide2: {
oriUrl: '', // 原图
},
rules: {
titleManager: [
{ required: true, message: "请输入后台显示的活动标题", trigger: "blur" },
{
min: 1,
max: 30,
message: "输入长度为1-30的内容,可包含中英文、数字及特殊符号",
trigger: "blur"
},
{ validator: checkProjectStr, trigger: "blur" }
],
titleViewMain:[
{ required: true, message: "请输入前台显示的活动主标题", trigger: "blur" },
{
min: 1,
max: 30,
message: "输入长度为1-30的内容,可包含中英文、数字及特殊符号",
trigger: "blur"
},
{ validator: checkProjectStr, trigger: "blur" }
],
titleViewSub:[
{ required: true, message: "请输入前台显示的活动副标题", trigger: "blur" },
{
min: 1,
max: 30,
message: "输入长度为1-30的内容,可包含中英文、数字及特殊符号",
trigger: "blur"
},
{ validator: checkProjectStr, trigger: "blur" }
],
beginTime: [
{
required: true,
message: "请选择开始时间",
trigger: "change"
}
],
endTime: [
{
required: true,
message: "请选择结束时间",
trigger: "change"
}
],
listImage: [
{ required: true, message: "请选择活动列表页图片", trigger: "blur" }
],
type: [
{ required: true, message: "请选择圈子类型", trigger: "blur" },
],
circleId: [
{ required: true, message: "请选择小圈", trigger: "blur" }
]
},
imgMouseOver1: false,
imgMouseOver2:false,
uploadImgMessage2: false,
uploadImgMessage1: false,//未上传图片,校验提示语
circleList: [
],
pickerOptions0: {
disabledDate: time => {
if (
this.formData.endTime != "" &&
this.formData.endTime != null
) {
return (
time.getTime() > new Date(this.formData.endTime).getTime()
);
}
}
},
pickerOptions1: {
disabledDate: time => {
return (
time.getTime() < new Date(this.formData.beginTime).getTime()
); //减去一天的时间代表可以选择同一天;
}
},
moduleArray: [],
shareFlag: false
}
},
methods: {
// 获取模块下拉数据
getModuleData() {
getModuleData().then(function (res) {
if(res.code == "000000") {
vm.moduleArray = JSON.parse(JSON.stringify(res.data));
for(let j = 0;j < vm.moduleArray.nameList.length; j++) {
if(vm.formData.appModuleDto.name == vm.moduleArray.nameList[j].name){// 通过name找到对应的id
vm.getParamData(vm.moduleArray.nameList[j].id,vm.formData.appModuleDto.paramFlag,j,1)
}
}
}
}).catch(function (error) {
vm.$message.error(error);
});
},
// 获取参数下拉数据
getParamData(id,flag,index,a) {
if(flag != 1) return; // 判断是否有参数选择
let req = {
id: id
}
getParamData(req).then(function (res) {
if(res.code == "000000") {
vm.paramArray = res.data.paramList;
vm.paramConfig = res.data.config;
// for(let i=0;i<vm.tabContent.length;i++) {
// if(i == index) {
vm.formData.appModuleDto.paramFlag = 1
vm.formData.appModuleDto.paramList2 = vm.paramArray
if(a == 2) { // 判断是初始化还是改变module调的获取参数接口
vm.formData.appModuleDto.paramList = [];
for(let j = 0 ;j < vm.paramArray.length; j++) {
vm.formData.appModuleDto.paramList.push({
id: vm.paramConfig[j].id,
seqNo: vm.paramConfig[j].seqNo, // 选择参数的索引值
value: '',
key: vm.paramConfig[j].paramKey,
type: vm.paramConfig[j].type // 通过选择参数中获取
// status: 2
})
}
}else{
//for(let k = 0;k < vm.paramConfig.length; k++) {
// vm.formData.paramList[k].seqNo = vm.paramConfig[k].seqNo
// vm.formData.paramList[k].key = vm.paramConfig[k].paramKey
// vm.formData.paramList[k].type = vm.paramConfig[k].type
// vm.formData.paramList.push({
// seqNo: vm.paramConfig[k].seqNo,
// key: vm.paramConfig[k].paramKey,
// type: vm.paramConfig[k].type
// })
let arr = vm.formData.appModuleDto.paramList;
vm.formData.appModuleDto.paramList = [];
if(arr.length < vm.paramConfig.length) {
for(let k = 0;k < arr.length; k++) {
vm.formData.appModuleDto.paramList.push({
id: vm.paramConfig[k].id,
seqNo: vm.paramConfig[k].seqNo,
key: vm.paramConfig[k].paramKey,
type: vm.paramConfig[k].type,
value: arr[k].value
})
}
for(let j = arr.length;j < vm.paramConfig.length;j++) {
vm.formData.appModuleDto.paramList.push({
id: vm.paramConfig[j].id,
seqNo: vm.paramConfig[j].seqNo,
key: vm.paramConfig[j].paramKey,
type: vm.paramConfig[j].type,
value: ''
})
}
}else {
for(let k = 0;k < vm.paramConfig.length; k++) {
console.log("id: " + vm.paramConfig[k].id);
console.log("value: " + arr[k].value);
vm.formData.appModuleDto.paramList.push({
id: vm.paramConfig[k].id,
seqNo: vm.paramConfig[k].seqNo,
key: vm.paramConfig[k].paramKey,
type: vm.paramConfig[k].type,
value: arr[k].value
})
}
}
// }
}
// break
// }
// }
}
}).catch(function (error) {
vm.$message.error(error);
})
},
// change模块选择数据
moduleChange(value) {
for(let i = 0; i < vm.moduleArray.nameList.length; i++) {
if(value == vm.moduleArray.nameList[i].name) {
vm.getCodeAndType(vm.moduleArray.nameList[i].code,vm.moduleArray.nameList[i].type,vm.moduleArray.nameList[i].paramFlag)
vm.getParamData(vm.moduleArray.nameList[i].id,vm.moduleArray.nameList[i].paramFlag,vm.moduleIndexValue,2)
}
}
},
getCodeAndType(code,type,paramFlag) {
// for(let i = 0; i < vm.tabContent.length; i++) {
// if(vm.moduleIndexValue == i) {
vm.formData.appModuleDto.code = code
vm.formData.appModuleDto.type = type
vm.formData.appModuleDto.paramFlag = paramFlag
// }
// }
},
returnTypeData(name) {
this.$emit('returnTypeData', {
name: name,
val: this.formData[name]
})
},
checkName(){
if(vm.formData.appModuleDto.linkType == 4 && vm.formData.appModuleDto.name == ""){
vm.$message.error("请选择模块!");
return false;
}
else {
return true;
}
},
checkParamList(){
if(vm.formData.appModuleDto.linkType == 4
&& vm.formData.appModuleDto.name != ""
&& vm.formData.appModuleDto.paramFlag == 1){
if(vm.formData.appModuleDto.paramList.length == 0){
vm.$message.error("请选择参数!");
return false;
}
else {
for(let i = 0; i < vm.formData.appModuleDto.paramList.length; i++){
if(vm.formData.appModuleDto.paramList[i].value == ""){
vm.$message.error("请选择参数!");
return false;
}
}
}
return true;
}
else {
return true;
}
},
//表单校验
submitForm() {
if(!vm.checkName()){
return;
}
if(!vm.checkParamList()){
return;
}
let formName = "formData";
let flag = null;
if (!this.formData.listImage){
this.uploadImgMessage1 = true;
}
if (!this.formData.introImage){
this.uploadImgMessage2 = true;
}
this.$refs[formName].validate(valid => {
if (valid && vm.formData.listImage!=""&& vm.formData.introImage!="") {
flag = true;
} else {
console.log("error submit!!");
flag = false;
}
});
this.$emit('returnIsNext', flag);
},
//上传活动列表页图片
beforeUploadPic1(file) {
this.currentOption.aspectRatio = 1/1;
this.currentOption.cropBoxResizable = true;
this.currentOption.minCropBoxWidth = 112;
this.currentOption.minCropBoxHeight = 112;
let fileLimit = {
width: 112,
height: 112,
size: 0.5,
sizeText: "500K",
key: "listImage",
more: "imgUrl1More",
show: "uploadImgMessage1"
};
this.beforeUpload(file, fileLimit);
},
//上传报名页介绍图片
beforeUploadPic2(file) {
this.currentOption.aspectRatio = 1/1;
this.currentOption.cropBoxResizable = true;
this.currentOption.minCropBoxWidth = 750;
// this.currentOption.minCropBoxHeight = 160;
let fileLimit = {
width: 750,
height: 0, //不限制
size: 0.5,
sizeText: "500K",
key: "introImage",
more: "imgUrl1More",
show: "uploadImgMessage2"
};
this.beforeUpload(file, fileLimit);
},
//上传图片
beforeUpload(file, fileLimit) {
let vm = this;
const isJPG = file.type === "image/jpeg";
const isPNG = file.type === "image/png";
const isLt2M = file.size / 1024 / 1024 < fileLimit.size;
if (!isJPG && !isPNG) {
vm.$message.error("图片必须是jpegpng格式,同时长宽尺寸和图片大小需符合要求");
return;
}
if (!isLt2M) {
vm.$message.error("图片大小不符合规范,请根据规范上传图片 ");
return;
}
let _img = new FileReader();
_img.readAsDataURL(file);
_img.onload = function (theFile) {
let image = new Image()
image.src = theFile.target.result
vm.slide2.oriUrl = theFile.target.result;
image.onload = function () {
let _this = this;
if (fileLimit.key == "introImage"){
//表示不限制高度
if (_this.width != fileLimit.width){
vm.$message.error("图片必须是jpegpng格式,同时长宽尺寸和图片大小需符合要求");
return;
}
}
if (fileLimit.key == "listImage"){
if (_this.width != fileLimit.width || _this.height != fileLimit.height) {
vm.$message.error("图片必须是jpegpng格式,同时长宽尺寸和图片大小需符合要求");
return;
}
}
// else if(_this.width > fileLimit.width || _this.height > fileLimit.height){
// vm.showCropper = true;
// vm.currentOption.cvWidth = _this.width;
// vm.currentOption.cvHeight = _this.height;
// return;
// }
// else {
openLoading(vm);
doUpload(vm, file, getFilePath(file, null), "preview4", "progress1", 1).then(function (path) {
closeLoading(vm);
console.log('上传成功后路径', path);
if (fileLimit.show == "uploadImgMessage1") {
vm.uploadImgMessage1 = false;
} else if (fileLimit.show == "uploadImgMessage2") {
vm.uploadImgMessage2 = false;
}
vm.formData[fileLimit.key] = path.fullPath;
vm.formData[fileLimit.more] = {
attachmentName: path.name,
attachmentExt: path.ext,
attachmentSize: path.size
};
vm.$message.success("上传成功");
});
// }
};
};
return isJPG && isLt2M;
},
//删除图片
deleteImg(type) {
if (type == 1) {
vm.formData.listImage = "";
vm.imgMouseOver1 = false;
}else if (type ==2) {
vm.formData.introImage= ""
vm.imgMouseOver2 = false;
}
},
// 获取裁剪的图片数据
getCropImg(argument) {
this.showCropper = false;
this.cropData = argument[1]
vm.doUploadQiNiu(argument[2])
argument[3] && argument[3].destroy();
// vm.slide2.oriUrl = "";
},
// 上传七牛
doUploadQiNiu(file){
doUpload(this,file, getFilePath(file,null), 'preview4', 'uploadProgress1', '').then(function (path) {
vm.formData.listImage = path.fullPath;
vm.$message.success('上传成功');
});
},
save(){
this.submitForm();
},
cancle(){
const _this = this;
setTimeout(function () {
_this.$router.go(-1)
}, 100);
},
changeType(){
if(vm.formData.type == 1 || vm.formData.type == 2){
vm.shareFlag = true;
}
else {
vm.shareFlag = false;
}
},
getCircleList(){
openLoading(vm);
getOnlineCircleList().then(res => {
closeLoading(vm);
if (res.code == "000000") {
vm.circleList = res.data
vm.getModuleData();
}
}).catch(err => {
this.$message.error('请求失败');
});
}
}
}
</script>
<style lang="less">
.first-step {
margin-top: 20px;
.p-title {
padding-left: 10px;
margin-bottom: 15px;
}
.basic-item-icon {
position: relative;
.require {
position: absolute;
left: 67px;
top: 11px;
color: #f56c6c;
}
.upload-message {
position: absolute;
left: 160px;
top: 105px;
font-size: 12px;
color: #f56c6c;
}
.img-delete {
position: absolute;
left: 0px;
top: 0px;
width: 84px;
height: 100px;
background: #000;
opacity: 0.7;
z-index: 999;
i {
color: #fff;
margin-top: 39px;
margin-left: 0px;
}
}
}
.word-num {
font-size: 12px;
color: #999;
padding-top: 5px;
}
.line {
margin-left: 10px;
width: 20px;
}
.bg-uploader {
.bg-img {
float: left;
width: 84px;
height: 100px;
}
.limit-text {
float: left;
margin-left: 10px;
margin-top: -10px;
p {
font-size: 12px;
color: #999;
text-align: left;
}
}
}
.el-upload__tip {
position: absolute;
top: -6px;
left: 130px;
}
}
.required-label .el-form-item__label::before {
content: "*";
color: #f56c6c;
margin-right: 4px;
}
.label-type {
width: 100%;
margin-top: 10px;
}
</style>
...@@ -406,6 +406,7 @@ ...@@ -406,6 +406,7 @@
}, },
save(){ save(){
debugger
this.submitForm(); this.submitForm();
}, },
cancle(){ cancle(){
......
...@@ -57,6 +57,9 @@ const editSimpleAdvert = r => require.ensure([], () => r(require('../views/educa ...@@ -57,6 +57,9 @@ const editSimpleAdvert = r => require.ensure([], () => r(require('../views/educa
const noticeEditor = r => require.ensure([], () => r(require('../views/education/notice-editor.vue')), 'notice-editor') const noticeEditor = r => require.ensure([], () => r(require('../views/education/notice-editor.vue')), 'notice-editor')
const activityManagement = r => require.ensure([], () => r(require('../views/activitymanagement/activity-management.vue')), 'activity-management')
const createActivity = r => require.ensure([], () => r(require('../views/activitymanagement/create-activity.vue')), 'create-activity')
const yqRange = r => require.ensure([], () => r(require('../views/yqrange/yq-range.vue')), 'yq-range') const yqRange = r => require.ensure([], () => r(require('../views/yqrange/yq-range.vue')), 'yq-range')
const liveManage = r => require.ensure([], () => r(require('../views/yqrange/live-manage.vue')), 'live-manage') const liveManage = r => require.ensure([], () => r(require('../views/yqrange/live-manage.vue')), 'live-manage')
const roleManage = r => require.ensure([], () => r(require('../views/yqrange/role-manage.vue')), 'role-manage') const roleManage = r => require.ensure([], () => r(require('../views/yqrange/role-manage.vue')), 'role-manage')
...@@ -74,6 +77,8 @@ const goodsManage = r => require.ensure([], () => r(require('../views/goods/good ...@@ -74,6 +77,8 @@ const goodsManage = r => require.ensure([], () => r(require('../views/goods/good
const createGood = r => require.ensure([], () => r(require('../views/goods/create-good.vue')), 'create-good') const createGood = r => require.ensure([], () => r(require('../views/goods/create-good.vue')), 'create-good')
const orderManage = r => require.ensure([], () => r(require('../views/goods/order-manage.vue')), 'order-manage') const orderManage = r => require.ensure([], () => r(require('../views/goods/order-manage.vue')), 'order-manage')
const orderDetail = r => require.ensure([], () => r(require('../views/goods/order-detail.vue')), 'order-detail') const orderDetail = r => require.ensure([], () => r(require('../views/goods/order-detail.vue')), 'order-detail')
const plazaList = r => require.ensure([], () => r(require('../views/plaza/plaza-list.vue')), 'plaza-list')
const activityMember = r => require.ensure([], () => r(require('../views/activitymanagement/activity-member.vue')), 'activity-member')
export default [{ export default [{
...@@ -239,6 +244,15 @@ export default [{ ...@@ -239,6 +244,15 @@ export default [{
path: '/yq-range', path: '/yq-range',
component: yqRange component: yqRange
}, },
{
path: '/activity-management',
component: activityManagement
},
{
path:'/create-activity',
component: createActivity
},
{ {
path: '/live-manage', path: '/live-manage',
component: liveManage component: liveManage
...@@ -315,7 +329,14 @@ export default [{ ...@@ -315,7 +329,14 @@ export default [{
path: '/order-detail', path: '/order-detail',
component: orderDetail, component: orderDetail,
}, },
{
path: '/plaza-list',
component: plazaList,
},
{
path: '/activity-member',
component: activityMember,
},
// { // {
// path: '/followup', // path: '/followup',
......
import fetch from '../fetch';
import { getBaseUrl, getSaasDomain, getSaasApiDomain } from '@/utils/index'
let headers = {
'Content-Type': 'application/json;charset=UTF-8',
token: localStorage.getItem('storageToken'),
};
export const getOnlineCircleList = () => {
return fetch({
headers,
url: getBaseUrl(`circle/v1/online/list`),
method: 'get',
description: '获取所有已上线的圈子列表',
})
};
export const getActivityInfoReq = (activityId) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/activity/info/${activityId}`),
method: 'get',
description: '后台管理--专区活动信息(查看)',
})
};
export const getActivityList = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/activity/list`),
method: 'get',
params: params,
description: '专区活动列表与搜索',
})
};
export const removeActivity = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/activity/remove`),
method: 'delete',
data: params,
description: '后台管理--专区活动删除',
})
};
export const updateActivityStatus = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/activity/deploy`),
method: 'post',
data: params,
description: '后台管理--专区活动上下线',
})
};
export const getActivityDocList = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/activity/doctor/list`),
method: 'get',
params: params,
description: '后台管理--专区活动成员列表与搜索',
})
};
export const removeDoc = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/activity/doctor/remove`),
method: 'post',
data: params,
description: '后台管理--专区活动成员移除',
withCredentials: true
})
};
export const importDoc = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/activity/doctor/import`),
method: 'post',
data: params,
description: '后台管理--专区活动成员导入',
})
};
...@@ -493,6 +493,17 @@ const vueFilter = { ...@@ -493,6 +493,17 @@ const vueFilter = {
else if(value == 2){ else if(value == 2){
return '已通过' return '已通过'
} }
},
auditApplyStatus: (value) => {
if (value == 0) {
return '-'
} else if (value == 1) {
return '待审核'
} else if (value == 2) {
return '已通过'
} else if (value == 3) {
return '已拒绝'
}
}, },
// 圈子状态 0:暂存 10:待发布(已保存) 20:已发布(已提交待审核、审核被拒绝) 30:已上架(审核通过)40:下架 50:解散 // 圈子状态 0:暂存 10:待发布(已保存) 20:已发布(已提交待审核、审核被拒绝) 30:已上架(审核通过)40:下架 50:解散
rangeStatus: (value) => { rangeStatus: (value) => {
...@@ -512,6 +523,14 @@ const vueFilter = { ...@@ -512,6 +523,14 @@ const vueFilter = {
return '-' return '-'
} }
}, },
//活动发布状态 1 已经发布 2未发布
activityStatus:(value) => {
if (value == 1) {
return '已发布'
}else if (value == 2) {
return '未发布'
}
},
liveStatusFilter: (value) => { liveStatusFilter: (value) => {
if (value == 1) { if (value == 1) {
return '预告' return '预告'
...@@ -551,6 +570,34 @@ const vueFilter = { ...@@ -551,6 +570,34 @@ const vueFilter = {
} }
}, },
circleTypeFilter: (value) => {
if(value == 0){
return "封闭"
}
else if(value == 1){
return "半开放"
}
else if(value == 2){
return "开放"
}
},
tagsFilter: (value) => {
let text = "";
if(value != null && value.length > 0){
for (let i = 0; i < value.length; i++) {
if(i == 0){
text = text + value[i].name;
}
else {
text = text + "、" + value[i].name;
}
}
}
return text;
}
} }
export default vueFilter export default vueFilter
import fetch from '../fetch';
import { getBaseUrl, getSaasDomain, getSaasApiDomain } from '@/utils/index'
let headers = {
'Content-Type': 'application/json;charset=UTF-8',
token: localStorage.getItem('storageToken'),
};
export const getDiseaseList = () => {
return fetch({
headers,
url: getBaseUrl(`sticker/disease/listAll`),
method: 'get',
description: '疾病标签列表(所有)',
})
};
export const getDeptList = () => {
return fetch({
headers,
url: getBaseUrl(`sticker/subject/childListAll`),
method: 'get',
description: '科室列表-所有二级',
})
};
export const getSubjectList = () => {
return fetch({
headers,
url: getBaseUrl(`sticker/subject/listAll`),
method: 'get',
description: '学科列表-所有2级',
})
};
export const getPlazaList = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/square/list`),
method: 'post',
data: params,
description: '后台管理--广场内专区列表与搜索',
})
};
export const savePlaza = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/square/save`),
method: 'post',
data: params,
description: '后台管理--新增编辑广场内专区和标签',
})
};
export const delPlaza = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/square/remove`),
method: 'delete',
params: params,
description: '后台管理--广场内专区移除',
withCredentials: true
})
};
export const getPlaza = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/square/info?id=${params.id}`),
method: 'get',
data: params,
description: '后台管理--广场内专区信息(查看)',
withCredentials: true
})
};
export const getSelectPlazaList = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/square/circle/list/${params.businessId}`),
method: 'get',
description: '后台管理--待选专区列表',
})
};
...@@ -294,3 +294,23 @@ export const postCircleTree = (params) => { ...@@ -294,3 +294,23 @@ export const postCircleTree = (params) => {
description: '保存区域', description: '保存区域',
}) })
}; };
export const auditList = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/sso/activity/doctor/audit/list?doctorName=${params.doctorName}&titleManager=${params.titleManager}&auditStatus=${params.auditStatus}&pageNo=${params.pageNo}&pageSize=${params.pageSize}`),
method: 'get',
data: params,
description: '医生审核列表',
})
};
export const auditOperation = (params) => {
return fetch({
headers,
url: getBaseUrl('circle/sso/activity/doctor/audit'),
method: 'post',
data: params,
description: '医生审核',
})
};
\ No newline at end of file
<template>
<div class="yqrange-index-wrapper">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="yqrange-index-content screenSet">
<el-tabs v-model="activeName" @tab-click="tabChangeHandler">
<el-tab-pane label="活动管理" name="first" v-if="showAllFlag">
<el-form ref="searchForm" :model="searchForm" label-suffix=":" :inline="true">
<el-row type="flex" style="margin-top: 10px">
<el-col :span="5">
<el-form-item label="活动ID">
<el-input v-model="searchForm.activityId" size="mini" placeholder="请输入活动ID"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="后台标题">
<el-input v-model="searchForm.titleManager" size="small" placeholder="请输入后台标题"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="前台主标题">
<el-input v-model="searchForm.titleViewMain" size="small" placeholder="请输入前台主标题"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="状态">
<el-select
v-model="searchForm.status"
placeholder="请选择"
size="mini"
style="width: 100px;">
<el-option
v-for="item in statusList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4" style="text-align: right">
<el-button type="primary" size="small" @click="search">搜索</el-button>
<el-button type="default" size="small" @click="resetForm" style="margin-left:0;">取消搜索</el-button>
</el-col>
</el-row>
<el-row>
<el-col :span="24" style="text-align: right">
<el-button type="primary" size="small" @click="createActivity" >新建活动</el-button>
</el-col>
</el-row>
</el-form>
<el-table :data="tableData" class="item-table" style="width: 100%;margin-top: 10px;">
<el-table-column prop="activityId" label="活动ID" align="center"></el-table-column>
<el-table-column prop="titleManager" label="后台标题" width="175" align="center" show-overflow-tooltip></el-table-column>
<el-table-column prop="titleViewMain" label="前台主标题" width="175" align="center" show-overflow-tooltip></el-table-column>
<el-table-column prop="createdName" label="创建者" align="center"></el-table-column>
<el-table-column prop="modifiedName" label="最后修改" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" min-width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.createdTime | liveDateFilter }}</span>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" align="center">
<template slot-scope="scope">
<span>{{ scope.row.status | activityStatus }}</span>
</template>
</el-table-column>
<el-table-column prop="doctorCount" label="活动成员数" min-width="100" align="center"></el-table-column>
<el-table-column label="操作" min-width="370" align="center">
<template slot-scope="scope">
<el-button @click="editRange(scope.row)" type="text" size="small">编辑</el-button>
<el-button @click="deleteActivity(scope.row)" type="text" size="small">删除</el-button>
<el-button @click="publishRange(scope.row)" v-if="scope.row.status == 2" type="text" size="small">发布</el-button>
<el-button @click="unPublishRange(scope.row)" v-if="scope.row.status == 1" type="text" size="small">下线</el-button>
<el-button @click="activityManage(scope.row)" type="text" size="small">活动成员管理</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleNumChange"
:current-page="searchForm.pageNo"
:page-sizes="[10, 30, 50, 100, 200]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</el-tab-pane>
<el-tab-pane label="报名审核列表" name="second" v-if="showAllFlag">
<range-apply></range-apply>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import { getActivityList,removeActivity,updateActivityStatus} from '@/utils/activitymanagement/activitymanagementApi';
import ElTabPane from "element-ui/packages/tabs/src/tab-pane";
import RangeApply from "./range-apply";
export default {
components: {
RangeApply,
ElTabPane,
BreadCrumb
},
data(){
return{
curmbFirst: '活动管理',
activeName: 'first',
showAllFlag: false,
searchForm: {
activityId:"",//活动id
titleManager: '',//后台标题方便管理
titleViewMain: '',//前端主标题
titleViewSub: '',//前端副标题
createdTime: '',
// endTime: '',
userType: "", // 用户标识 1:内部用户 2:外部用户,
status: "",
pageNo: 1,
pageSize: 10,
},
totalRows: 0,
tableData: [],
statusList: [
{
value: 1,
label: "已发布"
},
{
value: 2,
label: "未发布"
},
],
idType: ""
}
},
created() {
this.initPrivilege();
this.search();
},
methods: {
tabChangeHandler(tab) {},
initPrivilege(){
this.idType = localStorage.getItem('storageIdType');
this.searchForm.userType = this.idType;
// 内部用户:运营人员
if(this.idType == "1"){
this.showAllFlag = true;
}
},
// 搜索
search(){
this.searchForm.pageNo = 1;
this.searchList();
},
searchList() {
openLoading(this);
let params = this.searchForm;
getActivityList(params).then((res) => {
closeLoading(this);
if(res.code == "000000") {
this.tableData = res.data.activityModelList;
this.totalRows = res.data.total;
} else {
this.tableData = [];
}
}).catch((error) => {
this.$message.error("请重试");
})
},
//删除活动
removeActivity(activityId){
let params = {
"activityId": activityId
}
openLoading(this);
removeActivity(params).then((res) => {
closeLoading(this);
if(res.code == "000000"){
this.$message.success("删除成功");
this.searchList();
}
}).catch((error) => {
this.$message.error("请重试");
}
)
},
resetForm() {
this.searchForm.activityId = "";
this.searchForm.titleManager = "";
this.searchForm.titleViewMain = "";
this.searchForm.status = "";
this.search();
},
//新建活动
createActivity() {
let enterType = 1;//1:add 2 edit
this.$router.push({
path: `/create-activity?enterType=${enterType}`
})
},
//发布
publishRange(row) {
this.updateStatus(row.activityId, 1);
},
//下线
unPublishRange(row) {
var content = '';
if (row.doctorCount == 0){
content = '确认要下线该活动吗?'
}else if (row.doctorCount > 0){
content = '该活动的' + row.doctorCount + '个成员将无法参与活动,确认下线吗?'
}
this.$confirm(`${content}`, '', {
confirmButtonText: '下线',
cancelButtonText: '取消',
type: 'warning',
customClass: 'range-make-box',
}).then(() => {
this.updateStatus(row.activityId, 2);
// confirm
}).catch(() => {
// cancel
});
},
// 更新活动状态(上线,下线)
updateStatus(id, status){
let params = {"activityId": id, "deployFlag": status};
updateActivityStatus(params).then((res) => {
closeLoading(this);
if(res.code == "000000") {
if(status == 2){
this.$message.success("下线成功");
} else if(status == 1) {
this.$message.success("发布成功!");
}
this.searchList();
} else {
if(status == 2){
this.$message.error("下线失败,请重试");
} else if(status == 1) {
this.$message.error("发布失败,请重试");
}
}
}).catch((error) => {
if(status == 2){
this.$message.error("下线失败,请重试");
} else if(status == 1) {
this.$message.error("发布失败,请重试");
}
})
},
deleteActivity(row) {
var content = '';
if (row.doctorCount == 0){
content = '确认要删除该活动吗?'
}else if (row.doctorCount > 0){
content = '该活动的' + row.doctorCount + '个成员将无法参与活动,确认删除吗?'
}
this.$confirm(`${content}`, '', {
confirmButtonText: '删除',
cancelButtonText: '取消',
type: 'warning',
customClass: 'range-make-box',
}).then(() => {
this.removeActivity(row.activityId);
// confirm
}).catch(() => {
// cancel
});
},
//编辑
editRange(row) {
let enterType = 2;//1:add 2 edit
this.$router.push({
path: `/create-activity?enterType`,
query:{
id:row.activityId,
enterType:enterType,
roleType: row.roleId
}
})
},
activityManage(row){
this.$router.push({
path: '/activity-member',
query: {
id: row.activityId,
name: row.titleViewMain,
activeName: 'first',
}
})
},
handleSizeChange(val) {
this.searchForm.pageSize = val;
this.search();
},
handleNumChange(val) {
this.searchForm.pageNo = val;
this.searchList();
},
},
}
</script>
<style lang="scss">
.yqrange-index-wrapper{
.yqrange-index-content{
background: #fff;
padding: 10px;
.header-title{
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
}
.el-button--text{
color: #449284;
font-size: 14px;
&::after{
content: '';
position: relative;
height: 14px;
/*border-right: 1px solid #EBEEF5;*/
border-right: 1px solid #aaaaaa;
padding-right: 10px;
}
&:last-of-type{
&::after{
content: '';
position: relative;
width: 1px;
height: 14px;
border-right: none;
}
}
}
}
/*.range-make-box{*/
/*.el-message-box__btns{*/
/*margin-top: 30px;*/
/*}*/
/*}*/
</style>
<template>
<div class="yqrange-index-wrapper">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" :curmbThird="curmbThird" :jumPathThird="jumPathThird"></bread-crumb>
<div class="yqrange-index-content screenSet" id="screenSet">
<el-row type="flex" class="row-bg">
<el-col class="add-organization" v-if="showImportFlag">
<!--<el-upload-->
<!--class="bg-uploader"-->
<!--action="#"-->
<!--:show-file-list="false"-->
<!--:before-upload="beforeUploadDoc">-->
<i class="el-icon-document-add"></i>
<i class="text" @click="batchImport()">批量导入</i>
<!--</el-upload>-->
</el-col>
<el-col class="organization-search">
<el-form :inline="true" :model="memberForm" class="demo-form-inline" >
<el-form-item label="机构:">
<el-input style="width:140px;" size="small" v-model="memberForm.hospitalName" placeholder="请输入机构名称"></el-input>
</el-form-item>
<el-form-item label="姓名:">
<el-input style="width:140px;" size="small" v-model="memberForm.doctorName" placeholder="请输入人员姓名"></el-input>
</el-form-item>
<el-form-item>
<el-button size="small" type="primary" @click="serch()">搜索</el-button>
</el-form-item>
<el-form-item>
<el-button size="small" @click="reset()">取消搜索</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-table class="rim" ref="multipleOrganization" :data="activityDoctorModelList" tooltip-effect="dark" style="width: 100%">
<el-table-column prop="doctorName" label="人员" min-width="100" align="center"></el-table-column>
<el-table-column prop="departmentName" label="所属科室" align="center"></el-table-column>
<el-table-column prop="hospitalName" label="所属医院" align="center"></el-table-column>
<el-table-column prop="provinceName" label="所属省份" align="center"></el-table-column>
<el-table-column prop="cityName" label="所属城市" align="center"></el-table-column>
<el-table-column prop="countyName" label="所属区县" align="center"></el-table-column>
<el-table-column prop="townName" label="所属街道" align="center"></el-table-column>
<el-table-column
fixed="right"
label="操作"
align="center"
width="140">
<template slot-scope="scope">
<el-button @click="detel(scope.row)" type="text" size="small" style="color:red" v-if="scope.row.source != 1">删除</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有人员信息</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination background @size-change="handleSizeOrganization" @current-change="handleCurrentOrganization"
:current-page="memberForm.pageNum" :page-sizes="[10, 30, 50, 100, 200]" :page-size="memberForm.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="totalPeople"></el-pagination>
</div>
<el-dialog
title="添加人员"
:visible.sync="dialogOrg"
width="80%"
top="5vh"
:before-close="handleClose">
<add-member
v-if="dialogOrg"
:circleId='circleId'
:roleType='roleType'
@addPeople="addPeople"
@handleClose="handleClose">
</add-member>
</el-dialog>
<!-- 删除 弹窗 -->
<el-dialog
title="确认删除"
:show-close="false"
:visible.sync="deleteVisible"
:close-on-click-modal="false"
width="600px"
center
>
<p style="text-align: center;">{{detelMessage}}</p>
<span slot="footer" class="dialog-footer">
<el-button @click="hideDeleteFrom">取 消</el-button>
<el-button type="primary" @click="confirmDelete">确定</el-button>
</span>
</el-dialog>
<!--<el-dialog-->
<!--title="导入错误提示"-->
<!--:visible.sync="dialogVisible"-->
<!--width="500px"-->
<!--:close-on-click-modal="false"-->
<!--@close="handleErrorClose"-->
<!--center-->
<!--&gt;-->
<!--<el-table :data="dialogErrorData" align="center">-->
<!--<el-table-column property="rowNumber" label="行数" align="center"></el-table-column>-->
<!--<el-table-column property="wrongData" label="错误提示" align="center"></el-table-column>-->
<!--</el-table>-->
<!--</el-dialog>-->
<el-dialog
:title="dialogTitle"
:visible.sync="dialogVisible"
width="500px"
:close-on-click-modal="false"
@close="handleErrorClose"
center>
<!--<el-table :data="dialogErrorData" align="center">-->
<!--<el-table-column property="rowNumber" label="行数" align="center"></el-table-column>-->
<!--<el-table-column property="wrongData" label="错误提示" align="center"></el-table-column>-->
<!--</el-table>-->
<div v-if="importSuccessFlag" style="text-align: center;">
<div>本次成功导入<span style="color: green;">&nbsp;{{importNum}}条&nbsp;</span>数据</div>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="handleErrorClose" style="margin-top: 20px;">关闭</el-button>
</span>
</div>
<div v-if="!importSuccessFlag" style="text-align: center;">
<div v-if="importNum == 0">数据不符合格式要求,请修正后再次导入</div>
<div v-if="importNum != 0"><span style="color: red;">&nbsp;{{importNum}}条&nbsp;</span>数据不符合格式要求,请修正后再次导入</div>
<br>
<div>
<span>
<el-button @click="downloadFile" type="text" size="small" style="color: #449284 !important;">下载错误数据></el-button>
<!--<a @click="downloadFile">下载错误数据</a>-->
</span>
</div>
<div style="margin-top: 20px;">
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="handleErrorClose" style="float: left;margin-left: 130px;">取 消</el-button>
<el-upload
class="bg-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeUploadDoc">
<el-button type="primary" size="small" style="margin-left: -100px;">重新导入</el-button>
</el-upload>
</span>
</div>
</div>
</el-dialog>
<el-dialog
title="批量导入"
:visible.sync="dialogImportVisible"
width="650px"
:close-on-click-modal="false"
@close="handleImportClose"
center>
<div style="float:left;width: 250px;">
<span>1.下载模板,填写信息</span>
<br>
<div>
<el-button type="primary" size="small" style="float:left; margin-top: 30px;" @click="download1">下载模板1</el-button>
<span style="float:left; margin-top: 72px;margin-left: -90px;">填写人员明细导入</span>
</div>
<div>
<el-button type="primary" size="small" style="margin-top: 30px;margin-left: 48px;" @click="download2">下载模板2</el-button>
<span style="float: right;margin-top:10px;">填写人员ID导入</span>
</div>
</div>
<div style="float:left;margin-left: 90px;width: 1px;height: 100px; background: #c8cbd2;"></div>
<div style="margin-left: 400px;height: 130px;">
<span>2.上传填写好的文件</span>
<br>
<el-upload
class="bg-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeUploadDoc">
<el-button type="primary" size="small" style="margin-top: 30px;">上传文件</el-button>
</el-upload>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import BreadCrumb from "@/components/yqrange/breadcrumb-range.vue";
import { openLoading, closeLoading } from "@/utils/utils";
import { doUpload, getFilePath } from "@/utils/qiniu-util";
import { getActivityDocList, removeDoc, importDoc } from '@/utils/activitymanagement/activitymanagementApi';
let vm = null;
export default {
components: {
BreadCrumb
},
props: {
circleId: {
type: Number | String,
default: 1
},
roleType: {
type: Number | String,
default: 1
},
},
data() {
return {
curmbFirst: '活动管理',
// curmbSecond: '直播管理',
curmbThird: '',// /live-manage?id=
jumPathThird: '/activity-management',
administrativeValue: "",
optionsRegion: [],
sourceList: [
{
label: '全部',
value: 0
},
{
label: '可访问本圈的地区/机构',
value: 1
},
{
label: '手动添加',
value: 2
},
],
activityDoctorModelList: [],
totalPeople: 10,
selectionList:[],
memberForm: {
name: '',
orgName: '',
source: 0,
pageNum: 1,
pageSize: 10
},
dialogOrg:false,
deleteVisible: false,
detelMessage: '',
dialogVisible: false,
dialogErrorData: [],
showImportFlag: true,
dialogImportVisible: false,
importMsg: "",
importSuccessFlag: false,
importNum: 0,
dialogTitle: "",
errorFileUrl: ""
}
},
created() {
vm = this;
this.id = this.$route.query.id;
this.name = this.$route.query.name;
this.curmbSecond = "活动成员管理-" + this.name;
this.curmbThird = this.curmbSecond;
//Idtype:1,内部 2.外部
vm.idType = localStorage.getItem("storageIdType");
this.init();
},
mounted() {
},
methods: {
init() {
this.memberForm.pageNum = 1;
this.memberForm.name = "";
this.memberForm.orgName = "";
this.memberForm.source = 0
this.getList(1)
},
serch() {
this.memberForm.pageNum = 1;
this.getList()
},
getList(first) {
let req = {
activityId: this.id,
hospitalName: this.memberForm.hospitalName,
doctorName: this.memberForm.doctorName,
pageNo: this.memberForm.pageNum,
pageSize: this.memberForm.pageSize
};
openLoading(vm);
getActivityDocList(req).then(res => {
if (!first) {
closeLoading(vm);
}
if (res.code == "000000") {
this.activityDoctorModelList = res.data.activityDoctorModelList;
this.totalPeople = res.data.total;
this.setPleTotal()
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
//重置机构、人员查询
reset() {
this.memberForm.hospitalName = "";
this.memberForm.doctorName = "";
this.init()
},
//机构table修改
handleSizeOrganization(val) {
console.log(`每页 ${val} 条`);
this.memberForm.pageSize = val;
this.getList();
},
handleCurrentOrganization(val) {
//console.log(`当前页: ${val}`);
this.memberForm.pageNum = val;
this.getList();
},
detel(item) {
this.detelMessage = `删除后 "${item.doctorName}" 将无法看到该活动, 确定删除么?`
this.deleteVisible = true
this.clickItem = item
},
confirmDelete() {
let params = {
// activityDoctorRemoveReq: {
activityId: this.id,
removeDoctorId: this.clickItem.doctorId
// }
}
removeDoc(params).then((res) => {
this.$message({
type: 'success',
message: '删除成功!'
});
this.deleteVisible = false
this.memberForm.pageNum = 1;
this.getList()
}).catch(() => {
this.$message.error('删除失败,请稍后重试');
})
},
hideDeleteFrom() {
this.deleteVisible = false
this.detelMessage = ''
this.clickItem = null
},
setPleTotal() {
this.$emit('setPleTotal',this.totalPeople)
},
dialogMemberFn() {
this.dialogOrg = true
},
handleClose() {
this.dialogOrg = false
},
addPeople() {
this.dialogOrg = false
this.init()
},
// 批量导入
beforeUploadDoc(file) {
// // 人员数已超10000,无法导入机构
// if(vm.totalPeople > 10000){
// this.$message.warning('人员数已超10000,无法导入机构');
// return;
// }
let name = file.name;
let type = name.substring(name.lastIndexOf('.') + 1);
if (type !== 'xls' && type !== 'xlsx') {
vm.$message({
message: '上传文件只能是 xls、xlsx格式!',
type: 'warning'
});
return;
}
openLoading(vm);
let formData = new FormData();
formData.append("activityId", vm.id);
formData.append("file", file);
// let files = new window.File();
importDoc(formData).then(res => {
closeLoading(vm);
if (res.code == "000000") {
vm.dialogImportVisible = false;
// 导入成功
if(res.data.status){
vm.dialogVisible = true;
vm.dialogTitle = "导入成功";
vm.importSuccessFlag = true;
vm.importNum = res.data.successNum;
vm.init();
// vm.searchOrganization();
// vm.$emit('refreshRenYuan');
}
else {
vm.dialogVisible = true;
vm.dialogTitle = "导入失败";
vm.importSuccessFlag = false;
vm.importNum = res.data.failNum;
vm.errorFileUrl = res.data.file;
}
}
else {
this.$message({
type: 'error',
message: res.message
});
}
});
},
handleErrorClose() {
this.dialogVisible = false;
},
// 批量导入
batchImport(){
this.dialogImportVisible = true;
},
handleImportClose(){
this.dialogImportVisible = false;
},
// 下载模板1
download1(){
const url = "https://files.yunqueyi.com/template/import_people_by_name_mobile.xlsx";
window.location.href = url;
},
// 下载模板2
download2(){
const url = "https://files.yunqueyi.com/template/import_doctor_by_id.xlsx";
window.location.href = url;
},
// 下载错误数据文件
downloadFile(){
window.location.href = vm.errorFileUrl;
}
}
}
</script>
<style lang="scss" scoped>
.add-organization {
margin-left: 20px;
line-height: 20px;
width: 100px;
cursor: pointer;
padding-top: 10px;
i {
font-size: 18px;
margin-right: 2px;
}
}
.organization-search {
flex: 1;
margin-right: 10px;
text-align: right;
}
</style>
<template>
<div class="yqrange-index-wrapper">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" :curmbThird="curmbThird" :jumPathThird="jumPathThird"></bread-crumb>
<div class="yqrange-index-content screenSet" id="screenSet">
<el-row class="step-content">
<el-col :span="14">
<p class="p-title">{{curmbSecond}}</p>
</el-col>
</el-row>
<div class="first-step" v-if="active === 0">
<base-info :formData="formData" @returnTypeData="returnTypeData" @returnIsNext="returnIsNext" ref="child">
</base-info>
</div>
</div>
</div>
</template>
<script>
let vm = null;
import BreadCrumb from "@/components/yqrange/breadcrumb-range.vue";
import { openLoading, closeLoading } from "../../utils/utils";
import BaseInfo from '@/components/activitymanagement/baseinfo.vue';
import { getActivityInfoReq} from '@/utils/activitymanagement/activitymanagementApi';
import {getMemberSelectOrgSaveReq} from "../../utils/yqrange/yqrangeApi";
export default {
name: "create-range",
components: {
BreadCrumb,
BaseInfo
},
data() {
return {
id: null,
enterType: 1,//1.creat 2.edit
curmbFirst: '活动管理',
curmbSecond: '新建活动',
curmbThird:'',
jumPathThird: '/activity-management',
jumPathFouth:'',
active: 0,
//页面展示位置
stepData: [true, false],
formData: {
activityId: 0,//活动ID,新增时为空
titleManager: '',//后台标题方便管理
titleViewMain: '',//前端主标题
titleViewSub: '',//前端副标题
circleId: "",//圈子ID
beginTime:'',//开始时间
endTime:'',//结束时间
appModuleDto: {
linkType: 4, // 跳转类型:1 链接,4 模块, 8 无跳转
name: "", // 模块名称
paramFlag: 0, // 是否有参数标志1为有2为没有参数
paramList: [
{
id: "",
seqNo: '', // 选择参数的索引值
value: '',
key: '', // 参数名称,默认param
type:'' // 模块参数类型:1 int类型字符串 4String类型 8时间戳类型字符串
}
],
paramList2: [],
type: 0 // 类型:1 列表页,4 详情页
},
auditFlag:2,
listImage: '',//活动列表页图片
introImage:'',//介绍页图片url
imgUrl1More: {},
imgUrl2More: {},
},
}
},
created() {
vm = this;
// 根据ID是否有值判断编辑还是create
// debugger
const { enterType, id, roleType } = this.$route.query;
this.id = id;
this.enterType = enterType;
this.roleType = roleType;
if(this.enterType == 2){
this.curmbSecond = "编辑活动"
}
this.curmbThird = this.curmbSecond;
if(roleType == null || roleType == undefined){
let highMainManager = localStorage.getItem('highMainManager');
let mainManager = localStorage.getItem('mainManager');
let manager = localStorage.getItem('manager');
let ordinary = localStorage.getItem('ordinary');
if(highMainManager == 1){
this.roleType = 4;
}
else if(mainManager == 1){
this.roleType = 2;
}
else if(manager == 1){
this.roleType = 1;
}
else if(ordinary == 1){
this.roleType = 0;
}
}
this.formData.roleType = this.roleType;
//edit
if (this.enterType == 2 && this.id != null) {
this.getActivityInfo();
}
},
methods: {
//下一步
nextStep() {
// debugger
this.$refs.child.submitForm();
},
//完成
complete() {
console.log(this.formData.id);
let req = {
circleId: this.formData.id,
};
openLoading(vm);
getMemberSelectOrgSaveReq(req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
this.$message.success('操作成功');
const _this = this;
setTimeout(function () {
_this.$router.go(-1)
}, 2000);
// vm.$router.push({ path: "yq-range" });
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
// 修改编辑基础信息
returnIsNext(flag) {
if (flag == true) {
vm.commitActivityInfo();
}
},
returnTypeData(item) {
vm.formData[item.name] = item.val
},
//获取活动详情
getActivityInfo() {
getActivityInfoReq(this.id).then(res => {
// closeLoading(this);
if (res.code == "000000") {
this.formData = { ...this.formData, ...res.data };
} else {
vm.$message(res.message);
}
}).catch(err => {
vm.$message.error('请求失败');
});
},
//更新活动信息
commitActivityInfo() {
let req = vm.formData;
vm.POST("circle/sso/activity/save", req).then(res => {
if (res.code == "000000") {
this.$message.success('保存成功');
const _this = this;
setTimeout(function () {
_this.$router.go(-1)
}, 100);
} else {
this.$message(res.message);
}
});
},
}
}
</script>
<style lang="scss">
.yqrange-index-wrapper {
.yqrange-index-content {
background: #fff;
padding: 10px;
.step-content {
overflow: hidden;
height: 60px;
padding: 15px 0 50px 0;
border-bottom: 1px solid #efefef;
.is-text {
display: none;
}
.el-steps--simple {
background: #fff;
padding: 10px 8%;
}
.step-num {
display: block;
margin-top: 1.5px;
font-size: 12px;
border: 1px solid #999 !important;
border-radius: 50%;
width: 25px;
height: 18px;
line-height: 15px;
text-align: center;
color: #999;
}
.el-step__title.is-wait {
color: #999;
}
.el-step__title.is-process {
color: #449284;
}
.is-finish {
color: #999 !important;
}
.on-step {
color: #449284;
border: 1px solid #449284 !important;
}
}
}
}
</style>
<template>
<div class="yqrange-index-wrapper">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="yqrange-index-content">
<el-form ref="searchForm" :model="searchForm" label-width="75px" label-suffix=":" :inline="true">
<el-row :gutter="30" type="flex" style="margin-top: 10px">
<el-col :span="8">
<el-input v-model="searchForm.doctorName" size="small" placeholder="请输入报名人姓名"></el-input>
</el-col>
<el-col :span="9">
<el-input v-model="searchForm.titleManager" size="small" placeholder="请输入活动后台标题"></el-input>
</el-col>
<el-col :span="9">
<el-select
v-model="searchForm.auditStatus"
placeholder="全部审核状态"
size="small">
<el-option
v-for="item in statusList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-col>
<el-col :span="7" style="text-align: right">
<el-button type="primary" size="small" @click="search">搜索</el-button>
<el-button type="default" size="small" @click="resetForm" style="margin-left:0;">取消搜索</el-button>
</el-col>
</el-row>
</el-form>
<el-table :data="tableData" class="item-table" style="width: 100%;margin-top: 10px;">
<el-table-column prop="doctorName" label="报名人" min-width="100" align="center"></el-table-column>
<el-table-column prop="activityName" label="报名参加活动" min-width="150" align="center"></el-table-column>
<el-table-column prop="departmentName" label="所属科室" min-width="100" align="center"></el-table-column>
<el-table-column prop="hospitalName" label="所属医院" min-width="100" align="center"></el-table-column>
<el-table-column prop="provinceName" label="所属省份" min-width="100" align="center"></el-table-column>
<el-table-column prop="cityName" label="所属城市" min-width="100" align="center"></el-table-column>
<el-table-column prop="countyName" label="所属区县" min-width="100" align="center"></el-table-column>
<el-table-column prop="townName" label="所属街道" min-width="100" align="center"></el-table-column>
<el-table-column prop="auditStatus" label="审核状态" min-width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.auditStatus | auditApplyStatus }}</span>
</template>
</el-table-column>
<el-table-column label="操作" min-width="200" align="center">
<template slot-scope="scope"> <!-- 0全部 1待审核 2已通过 3已拒绝 -->
<div>
<el-button @click="approve(scope.row)" type="text" size="small" v-if="scope.row.auditStatus == 1">通过</el-button>
<el-button @click="reject(scope.row)" type="text" size="small" v-if="scope.row.auditStatus == 1">拒绝</el-button>
</div>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleNumChange"
:current-page="searchForm.pageNo"
:page-sizes="[10, 30, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import { auditList, auditOperation, applyList, applyUpdate} from "../../utils/yqrange/yqrangeApi";
export default {
components: {
BreadCrumb
},
data(){
return{
curmbFirst: '审核列表',
showAllFlag: false,
showNewFlag: false,
searchForm: {
doctorName: '',
titleManager: '',
// endTime: '',
auditStatus: 0,
pageNo: 1,
pageSize: 10,
},
totalRows: 0,
tableData: [],
dialogSettingVisible: false,
settingForm:{
circleId: null,
settingData: []
},
statusList: [
{
value: 0,
label: "全部"
},
{
value: 1,
label: "待审核"
},
{
value: 2,
label: "已通过"
},
{
value: 3,
label: "已拒绝"
},
],
dialogVisible: false
}
},
created() {
// this.initPrivilege();
this.search(1);
},
methods: {
initPrivilege(){
let idType = localStorage.getItem('storageIdType');
// if(idType == null || idType == ""){
// idType = 2;
// localStorage.setItem('storageIdType', idType);
// }
// this.searchForm.userType = idType;
// 内部用户:运营人员
if(idType == "1"){
this.showAllFlag = true;
this.showNewFlag = true;
}
// 外部用户
else if(idType == "2"){
this.showAllFlag = false;
setTimeout(() => {
this.getUserAuth();
},1500)
}
},
// 外部用户权限
getUserAuth(){
let highMainManager = localStorage.getItem('highMainManager');
let mainManager = localStorage.getItem('mainManager');
let manager = localStorage.getItem('manager');
if(highMainManager == "1" || mainManager == "1"){
this.showNewFlag = true;
}
else if(manager == "1"){
this.showNewFlag = false;
}
// localStorage.setItem('ordinary', vm.setStoreData(ordinary))
},
// 搜索
search(first){
this.searchForm.pageNo = 1;
this.searchList(first);
},
searchList(first) {
if(!first) {
console.log('查询圈子')
openLoading(this);
}
let params = this.searchForm;
console.log("searchList() : params = " + JSON.stringify(params))
auditList(params).then((res) => {
closeLoading(this);
if(res.code == "000000") {
this.tableData = res.data.activityDoctorAuditModelList;
this.totalRows = res.data.total;
} else {
this.tableData = [];
}
}).catch((error) => {
// this.$message({
// message: error,
// type: 'error'
// });
this.$message.error("请重试");
})
},
resetForm() {
this.searchForm.doctorName = "";
this.searchForm.titleManager = "";
this.searchForm.auditStatus = 0;
console.log('重置')
this.search();
},
// 更新圈子状态(上线,下线)
updateStatus(params){
console.log("updateStatus() : params = " + JSON.stringify(params));
auditOperation(params).then((res) => {
closeLoading(this);
if(res.code == "000000") {
this.$message.success("成功");
this.searchList();
} else {
this.$message.success("失败");
}
}).catch((error) => {
// this.$message({
// message: error,
// type: 'error'
// });
this.$message.error("请重试");
})
},
// 1:待审核,2.通过,3:拒绝
approve(row){
let params = {
"accept": true,
"auditRecordId": row.auditRecordId,
};
this.updateStatus(params);
},
//拒绝
reject(row) {
let params = {
"accept": false,
"auditRecordId": row.auditRecordId,
};
this.$confirm(`拒绝后"${row.doctorName}"将无法访问"${row.activityName}"`, `确认拒绝`, {
confirmButtonText: '拒绝',
cancelButtonText: '取消',
type: 'warning',
customClass: 'range-make-box',
}).then(() => {
// confirm
this.updateStatus(params);
}).catch(() => {
// cancel
});
},
// 关闭
handleSettingClose(){
this.dialogSettingVisible = false;
},
handleSizeChange(val) {
this.searchForm.pageSize = val;
this.search();
},
handleNumChange(val) {
this.searchForm.pageNo = val;
this.searchList();
},
},
}
</script>
<style lang="scss">
.yqrange-index-wrapper{
.yqrange-index-content{
background: #fff;
padding: 10px;
.header-title{
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
}
.el-button--text{
color: #449284;
font-size: 14px;
&::after{
content: '';
position: relative;
height: 14px;
/*border-right: 1px solid #EBEEF5;*/
border-right: 1px solid #aaaaaa;
padding-right: 10px;
}
&:last-of-type{
&::after{
content: '';
position: relative;
width: 1px;
height: 14px;
border-right: none;
}
}
}
}
/*.range-make-box{*/
/*.el-message-box__btns{*/
/*margin-top: 30px;*/
/*}*/
/*}*/
</style>
<template>
<div class="yqrange-index-wrapper">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<!--<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>-->
<div class="yqrange-index-content screenSet">
<div class="header-title">广场管理</div>
<el-form
ref="searchForm"
:model="searchForm"
label-width="75px"
label-suffix=":"
:inline="true"
>
<el-row :gutter="30" type="flex" style="margin-top: 10px">
<el-col :span="9">
<el-form-item label="专区名称">
<el-input v-model="searchForm.squareName" size="small" placeholder="请输入专区名称" style="margin-left:20px;height: 32px;line-height: 32px;"></el-input>
</el-form-item>
</el-col>
<el-col :span="9" style="padding-left: 0px;">
<el-form-item label="疾病标签">
<el-select multiple :multiple-limit="5"
v-model="searchForm.diseaseIdList"
id="statusSelector"
placeholder="请选择疾病标签"
filterable
clearable
style="margin-left:20px;height: 32px;line-height: 32px;"
>
<el-option
v-for="item in diseaseList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30" type="flex" style="margin-top: 10px">
<el-col :span="9">
<el-form-item label="科室标签">
<el-select multiple :multiple-limit="5"
v-model="searchForm.deptIdList"
id="statusSelector"
placeholder="请选择科室标签"
clearable
filterable
style="margin-left:20px;height: 32px;line-height: 32px;"
>
<el-option
v-for="item in deptList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="学科标签">
<el-select multiple :multiple-limit="5"
v-model="searchForm.subjectIdList"
id="statusSelector"
placeholder="请选择学科标签"
filterable
clearable
style="margin-left:20px;height: 32px;line-height: 32px;"
>
<el-option
v-for="item in subjectList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7" style="text-align: right">
<el-button type="primary" size="small" @click="search">搜索</el-button>
<el-button type="default" size="small" @click="resetForm" style="margin-left:0;">取消搜索</el-button>
</el-col>
</el-row>
<el-row>
<el-col :span="24" style="text-align: right">
<el-button type="primary" size="small" @click="createPlaza">添加专区</el-button>
</el-col>
</el-row>
</el-form>
<el-table :data="tableData" class="item-table" style="width: 100%;margin-top: 10px;">
<el-table-column prop="squareName" label="专区名称" min-width="100" align="center"></el-table-column>
<el-table-column prop="type" label="专区类型" min-width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.type | circleTypeFilter }}</span>
</template>
</el-table-column>
<el-table-column prop="diseaseTags" label="疾病标签" min-width="150" align="center">
<template slot-scope="scope">
<span>{{ scope.row.diseaseTags | tagsFilter }}</span>
</template>
</el-table-column>
<el-table-column prop="deptTags" label="科室标签" min-width="150" align="center">
<template slot-scope="scope">
<span>{{ scope.row.deptTags | tagsFilter }}</span>
</template>
</el-table-column>
<el-table-column prop="subjectTags" label="学科标签" min-width="150" align="center">
<template slot-scope="scope">
<span>{{ scope.row.subjectTags | tagsFilter }}</span>
</template>
</el-table-column>
<el-table-column prop="createdTime" label="添加时间" min-width="70" align="center">
<template slot-scope="scope">
<span>{{ scope.row.createdTime | liveDateFilter }}</span>
</template>
</el-table-column>
<el-table-column label="操作" min-width="100" align="center">
<template slot-scope="scope">
<el-button @click="editPlaza(scope.row)" type="text" size="small">编辑</el-button>
<el-button @click="delPlaza(scope.row)" type="text" size="small">移除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleNumChange"
:current-page="searchForm.pageNo"
:page-sizes="[10, 30, 50, 100, 200]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
<el-dialog
:title="title"
:visible.sync="dialogVisible"
width="700px"
:close-on-click-modal="false"
@close="handleClose"
center
>
<el-form ref="plazaForm" :model="plazaForm" :rules="rules" label-suffix=":">
<el-form-item label="专区名称" class="required-label" prop="businessId">
<el-col :span="20">
<el-select
v-model="plazaForm.businessId"
id="statusSelector"
placeholder="请选择专区名称"
filterable
clearable
style="margin-left:20px;height: 32px;line-height: 32px;width: 450px;"
:disabled="editFlag"
>
<el-option
v-for="item in selectPlazaList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-col>
</el-form-item>
<el-form-item label="疾病标签" class="required-label">
<el-col :span="20">
<el-select multiple :multiple-limit="5"
v-model="plazaForm.diseaseIdList"
id="statusSelector"
placeholder="请选择疾病标签"
filterable
clearable
style="margin-left:20px;height: 32px;line-height: 32px;width: 450px;"
>
<el-option
v-for="item in diseaseList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-col>
</el-form-item>
<el-form-item label="科室标签" class="required-label">
<el-col :span="20">
<el-select multiple :multiple-limit="5"
v-model="plazaForm.deptIdList"
id="statusSelector"
placeholder="请选择科室标签"
filterable
clearable
style="margin-left:20px;height: 32px;line-height: 32px;width: 450px;"
>
<el-option
v-for="item in deptList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-col>
</el-form-item>
<el-form-item label="学科标签" class="required-label">
<el-col :span="25">
<el-select multiple :multiple-limit="5"
v-model="plazaForm.subjectIdList"
id="statusSelector"
placeholder="请选择学科标签"
filterable
clearable
style="margin-left:20px;height: 32px;line-height: 32px;width: 450px;"
>
<el-option
v-for="item in subjectList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-col>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer" style="text-align: center;">
<el-button type="default" @click="cancle()" left>取消</el-button>
<el-button type="primary" @click="savePlaza()" right>确定</el-button>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import {openLoading, closeLoading} from "../../utils/utils";
import DownloadJS from "@/utils/download/download4";
let vm = null;
import BreadCrumb from "@/components/breadcrumb.vue";
import { getDiseaseList, getDeptList, getSubjectList, getPlazaList, savePlaza, delPlaza, getPlaza, getSelectPlazaList} from "../../utils/plaza/plazaApi";
import { doUpload, getFilePath, unsubscribe } from "../../utils/qiniu-util";
import QRCode from "qrcodejs2"
import ElLink from "element-ui/packages/link/src/main";
export default {
components: {
ElLink,
BreadCrumb,
QRCode
},
data() {
return {
rtcId: null,
curmbFirst: "广场管理",
// curmbSecond: "直播管理",
dialogStatisticsVisible: false,
dialogLivelinkVisible: false,
dialogLivePlaybackVisible: false,
// closePlaybackVisible: false,
playbackSetFlag: 1,
canPlayback: "1",
uploadFlag: false,
selectFlag: true,
numberShowFlag: false,
videoNumber: 0,
playbackUrl: "",
searchForm: {
squareName: "",
deptIdList: [],
diseaseIdList: [],
subjectIdList: [],
pageNo: 1,
pageSize: 10
},
totalRows: 0,
tableData: [
// {
// liveName: "浙江医学大会第二场",
// scope: 1, //直播范围 1-非公开 2-公开
// liveStatus: 1, //直播状态 1-未开始 2-直播中 3-暂停中 4-已结束 5-回放中目前只能用到1,2,4
// createTime: "",
// startTime: "",
// endTime: "",
// rtcId: 0
// }
],
dialogStatisticsData: [
{
peopleNum: 0,
liveDuration: "",
signNum: 0
}
],
scope: 1,
liveStatus: 1,
lecturerUrl: "",
guestUrl: "",
audienceUrl: "",
plazaForm: {
id:'',
businessId: "",
diseaseTagIds: [],
deptTagIds: [],
subjectTagIds: []
},
disabledOpenFlag: false, // 开启回放是否可点
downloadVideoFlag: true,// 拉流直播不显示下载
videoNumber: 0,
uploadProgress1: 0,
fileName: "",
fileSize: 0,
fileFlag: true,
deleteFileFlag: false,
circleId: null,
streamType: 1,
downloadSuccessStatus: 1,
videoSize: 0,
link: '',//预览的链接
qrcodeBox: null,
dialogVisible: false,
isSign: 0, // 是否签到
diseaseList: [],
deptList: [],
subjectList: [],
selectPlazaList: [],
editFlag: false,
title: "",
rules: {
businessId: [
{required: true, message: "请输入专区名称", trigger: "blur"}
],
}
};
},
props:{
circleName: {
type: String
}
},
created() {
vm = this;
this.circleId = this.$route.query.id;
console.log("circleName: " + this.circleName);
vm.getDiseaseList();
vm.getDeptList();
vm.getSubjectList();
vm.getPlazaList("", "");
},
methods: {
// 搜索按钮
search(){
this.searchForm.pageNo = 1;
this.searchList();
},
getDiseaseList(){
getDiseaseList().then(res => {
if (res.code == "000000") {
vm.diseaseList = res.data;
}
});
},
getDeptList(){
getDeptList().then(res => {
if (res.code == "000000") {
vm.deptList = res.data;
}
});
},
getSubjectList(){
getSubjectList().then(res => {
if (res.code == "000000") {
vm.subjectList = res.data;
}
});
},
getSelectPlazaList(businessId){
let params = {
businessId: businessId
};
getSelectPlazaList(params).then(res => {
if (res.code == "000000") {
vm.selectPlazaList = res.data;
}
});
},
searchList() {
console.log("查询");
this.getPlazaList("", "");
},
resetForm() {
vm.searchForm.squareName = "";
vm.searchForm.deptIdList = [];
vm.searchForm.diseaseIdList = [];
vm.searchForm.subjectIdList = [];
this.search();
},
//添加专区
createPlaza() {
vm.plazaForm.businessId = "";
vm.dialogVisible = true;
vm.title = "添加专区";
vm.editFlag = false;
vm.plazaForm = {
id:'',
businessId: "",
diseaseTagIds: [],
deptTagIds: [],
subjectTagIds: []
},
vm.getSelectPlazaList(0);
},
//关闭直播链接弹窗
handleClose() {
vm.dialogVisible = false;
},
checkBusinessId(){
if(vm.plazaForm.businessId == ""){
this.$message.warning("请选择专区名称!");
return false;
}
return true;
},
checkDiseaseIdList(){
if(vm.plazaForm.diseaseIdList == "" || vm.plazaForm.diseaseIdList.length == 0){
this.$message.warning("请选择疾病标签!");
return false;
}
return true;
},
checkDeptIdList(){
if(vm.plazaForm.deptIdList == "" || vm.plazaForm.deptIdList.length == 0){
this.$message.warning("请选择科室标签!");
return false;
}
return true;
},
checkSubjectIdList(){
if(vm.plazaForm.subjectIdList == "" || vm.plazaForm.subjectIdList.length == 0){
this.$message.warning("请选择学科标签!");
return false;
}
return true;
},
// 保存
savePlaza(){
if(!vm.checkBusinessId()){
return;
}
if(!vm.checkDiseaseIdList()){
return;
}
if(!vm.checkDeptIdList()){
return;
}
if(!vm.checkSubjectIdList()){
return;
}
let params = {
id: vm.plazaForm.id,
businessId: vm.plazaForm.businessId,
diseaseIdList: vm.plazaForm.diseaseIdList,
deptIdList: vm.plazaForm.deptIdList,
subjectIdList: vm.plazaForm.subjectIdList
};
openLoading(this);
savePlaza(params).then((res) => {
closeLoading(this);
if(res.code == "000000") {
if(vm.editFlag){
this.$message.success("编辑成功!");
}
else {
this.$message.success("添加成功!");
}
vm.dialogVisible = false;
vm.resetForm();
} else {
this.$message.error("添加失败,请重试");
}
}).catch((error) => {
this.$message.error("请重试");
})
},
cancle(){
vm.dialogVisible = false;
},
//编辑专区
editPlaza(row) {
vm.editFlag = true;
vm.plazaForm.id = row.id;
let params = {
id:row.id
}
openLoading(this);
getPlaza(params).then((res) => {
closeLoading(this);
if(res.code == "000000") {
vm.dialogVisible = true;
vm.plazaForm = res.data;
vm.title = "编辑专区";
vm.getSelectPlazaList(vm.plazaForm.businessId);
} else {
this.$message.error("添加失败,请重试");
}
}).catch((error) => {
this.$message.error("请重试");
})
},
//删除专区
delPlaza(row) {
this.$confirm(`移除专区后,用户将无法在广场中看到,但不会删除专区本身,确定移除?`, "", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
// customClass: 'range-make-box',
})
.then(() => {
let params = {
id: row.id
}
// confirm
delPlaza(params).then(res => {
if (res.code == "000000") {
vm.$message({
type: "success",
message: "删除成功"
});
this.getPlazaList("", "");
} else {
vm.$message({
type: "warning",
message: res.message
});
}
});
})
.catch(() => {});
},
// //编辑直播
// editLive(row) {
// this.$router.push({
// path: "/create-live",
// query: {
// // rtcId: "16"
// rtcId: row.id,
//
// }
// });
// },
handleSizeChange(val) {
this.searchForm.pageSize = val;
this.searchForm.pageNo = 1;
this.searchList();
},
handleNumChange(val) {
this.searchForm.pageNo = val;
this.searchList();
},
//查询直播列表
getPlazaList(name, status) {
let req = {
squareName: vm.searchForm.squareName,
deptIdList: vm.searchForm.deptIdList,
diseaseIdList: vm.searchForm.diseaseIdList,
subjectIdList: vm.searchForm.subjectIdList,
pageNo: this.searchForm.pageNo,
pageSize: this.searchForm.pageSize
};
getPlazaList(req).then(res => {
if (res.code == "000000") {
// console.log(res);
let listData = [];
if (res.data.list == null) {
return;
}
this.tableData = res.data.list;
this.totalRows = res.data.total;
} else {
this.tableData = [];
}
});
},
copyTxt(type) {
let txt = document.getElementById("copyInput");
if (type == 1) {
txt.value = this.lecturerUrl;
} else if (type == 2) {
txt.value = this.guestUrl;
} else {
txt.value = this.audienceUrl;
}
// if (navigator.userAgent.match(/(iPhone|iPod|iPad|Mac);?/i)) {
if (navigator.userAgent.indexOf("Safari") > -1 && navigator.userAgent.indexOf("Chrome") < 1) {
var el = document.createElement('input');
el.value = txt.value;//要复制的内容
el.style.opacity = '0';
document.body.appendChild(el);
var editable = el.contentEditable;
var readOnly = el.readOnly;
el.contentEditable = true;
el.readOnly = false;
const range = document.createRange();
range.selectNodeContents(el);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
el.setSelectionRange(0, 999999);
el.contentEditable = editable;
el.readOnly = readOnly;
var ret = document.execCommand('copy');
el.blur();
}
else {
txt.select(); //选择对象
document.execCommand("copy");
}
vm.$message({
type: "success",
message: "分享链接已复制,快分享给好友吧"
});
},
//预览二维码
previewQrcode() {
vm.link = this.audienceUrl;
vm.dialogVisible = true;
vm.$nextTick ( () => {
vm.qrcode();
})
},
// 生成二维码
qrcode () {
if (vm.qrcodeBox) {
vm.qrcodeBox.makeCode(vm.link);
return;
}
vm.qrcodeBox = new QRCode('qrcode', {
width: 400,
height: 400,
text: vm.link, // 二维码内容
// render: 'canvas' , // 设置渲染方式(有两种方式 table和canvas,默认是canvas)
// background: '#f0f', // 背景色
// foreground: '#ff0' // 前景色
})
},
// 关闭预览弹框
handleClose() {
vm.dialogVisible = false;
},
downlodExcel(){
let params = {
rtcId: this.rtcId
// rtcId: 372
};
downloadSigninfo(params).then((res) => {
// vm.GET(`rtc/liveAdmin/download/signInfo/` + params.rtcId, { responseType: 'blob' }).then((res) => {
closeLoading(this);
// const aLink = document.createElement("a");
// let blob = new Blob([res], {type: "application/vnd.ms-excel;charset=utf-8"});
// // let downloadUrl = URL.createObjectURL(blob);
// // window.location.href = downloadUrl;
// aLink.href = URL.createObjectURL(blob);
// aLink.setAttribute('download', '123' + '.xlsx'); // 设置下载文件名称
// aLink.click();
// this.$refs.loadElement.appendChild(aLink);
// setTimeout(() => {
// window.open(downloadUrl);
// }, 500);
if(res.code == "000000") {
this.downloadExcelFile(res.data);
this.$message.success("下载成功");
// vm.getLiveList("", "");
} else {
this.$message.error("下载失败,请重试");
}
}).catch((error) => {
this.$message.error("请重试");
})
},
/* 文件下载*/
downloadExcelFile(base64) {
let a = document.createElement('a');
vm.uploadHref = 'data:application/xls;base64,' + base64;
a.setAttribute('href',vm.uploadHref);
a.setAttribute('download','签到人数统计' + new Date().getTime() + '.xlsx');
// if (flag && flag == 2) {
// a.setAttribute('download',vm.exportFileName);
// } else {
// a.setAttribute('download',vm.uploadFileName);
// }
a.click();
},
jumpUrl(type) {
var url;
if (type == 1) {
url = this.lecturerUrl;
} else if (type == 2) {
url = this.guestUrl;
}
window.open(url);
},
/*
* 使用download.js 强制浏览器下载图片、视频等文件
* @param {any} url url链接地址
* @param {any} strFileName 文件名
* @param {any} strMimeType 文件类型
*/
downloadfile(url, strFileName, strMimeType) {
let xmlHttp = null;
if (window.ActiveXObject) {
// IE6, IE5 浏览器执行代码
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlHttp = new XMLHttpRequest();
}
//2.如果实例化成功,就调用open()方法:
if (xmlHttp != null) {
xmlHttp.open("get", url, true);
xmlHttp.responseType = 'blob';//关键
xmlHttp.send();
xmlHttp.onreadystatechange = doResult; //设置回调函数
}
vm.downloadSuccessStatus = 3;// 下载中...
function doResult() {
if (xmlHttp.readyState == 4) { //4表示执行完成
if (xmlHttp.status == 200) { //200表示执行成功
DownloadJS(xmlHttp.response, strFileName, strMimeType);
vm.downloadSuccessStatus = 5;// 下载成功
vm.$message.success("下载成功");
vm.downloadSuccessStatus = 1;// 重置
}
// else {
// vm.$message.error("下载失败");
// }
}
}
},
getFileName(url){
const urlArray = url.split("/");
const length = urlArray.length;
const fileName = urlArray[length-1];
return fileName;
},
getFileType(fileName) {
// 后缀获取
let suffix = '';
// 获取类型结果
let result = '';
try {
const flieArr = fileName.split('.');
suffix = flieArr[flieArr.length - 1];
} catch (err) {
suffix = '';
}
// fileName无后缀返回 false
if (!suffix) { return false; }
suffix = suffix.toLocaleLowerCase();
// 图片格式
const imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif'];
// 进行图片匹配
result = imglist.find(item => item === suffix);
if (result) {
return 'image';
}
// 匹配txt
const txtlist = ['txt'];
result = txtlist.find(item => item === suffix);
if (result) {
return 'txt';
}
// 匹配 excel
const excelist = ['xls', 'xlsx'];
result = excelist.find(item => item === suffix);
if (result) {
return 'excel';
}
// 匹配 word
const wordlist = ['doc', 'docx'];
result = wordlist.find(item => item === suffix);
if (result) {
return 'word';
}
// 匹配 pdf
const pdflist = ['pdf'];
result = pdflist.find(item => item === suffix);
if (result) {
return 'pdf';
}
// 匹配 ppt
const pptlist = ['ppt', 'pptx'];
result = pptlist.find(item => item === suffix);
if (result) {
return 'ppt';
}
// 匹配 视频
const videolist = ['mp4', 'm2v', 'mkv', 'rmvb', 'wmv', 'avi', 'flv', 'mov', 'm4v'];
result = videolist.find(item => item === suffix);
if (result) {
return 'video';
}
// 匹配 音频
const radiolist = ['mp3', 'wav', 'wmv'];
result = radiolist.find(item => item === suffix);
if (result) {
return 'radio';
}
// 其他 文件类型
return 'other';
}
}
};
</script>
<style lang="scss">
.yqrange-index-wrapper {
.yqrange-index-content {
background: #fff;
padding: 10px;
.header-title {
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
}
.el-button--text {
color: #449284;
font-size: 14px;
&::after {
content: "";
position: relative;
height: 14px;
/*border-right: 1px solid #EBEEF5;*/
border-right: 1px solid #aaaaaa;
padding-right: 10px;
}
&:last-of-type {
&::after {
content: "";
position: relative;
width: 1px;
height: 14px;
border-right: none;
}
}
}
}
.live_url_style {
display: flex;
padding: 10px;
}
.href_outer_border {
margin-top: 10px;
}
.href_style {
width: 1500px;
background-color: #d8d8d8;
padding:10px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.href_button_style {
margin-left: 35px;
}
.hidden-input {
height: 0;
}
.qrcode-wrap {
width: 400px;
height: 400px;
margin: 0 auto;
}
.el-select .el-input__inner {
height: 32px;
line-height: 32px;
}
/*.el-select__tags {*/
/*margin-top: 15px;*/
/*}*/
.required-label .el-form-item__label::before {
content: '*';
color: #F56C6C;
margin-right: 4px;
}
</style>
...@@ -25,6 +25,23 @@ ...@@ -25,6 +25,23 @@
<!--<div class="second-step" v-else-if="active === 1">--> <!--<div class="second-step" v-else-if="active === 1">-->
<!--<organzation :formData="formData" ref="org"></organzation>--> <!--<organzation :formData="formData" ref="org"></organzation>-->
<!--</div>--> <!--</div>-->
<el-dialog
title=""
:show-close="false"
:visible.sync="confirmVisible"
:close-on-click-modal="false"
width="600px"
center
>
<p style="text-align: center;">{{confirmMessage}}</p>
<span slot="footer" class="dialog-footer">
<!--<el-button @click="confirmDelete">删 除</el-button>-->
<el-button type="primary" @click="hideConfirm">确定</el-button>
</span>
</el-dialog>
</div> </div>
</div> </div>
</template> </template>
...@@ -64,7 +81,9 @@ ...@@ -64,7 +81,9 @@
type: 0, type: 0,
deptId: "", deptId: "",
allowShare: 1 allowShare: 1
} },
confirmMessage: "",
confirmVisible: false,
} }
}, },
created() { created() {
...@@ -184,11 +203,32 @@ ...@@ -184,11 +203,32 @@
_this.$router.go(-1) _this.$router.go(-1)
}, 100); }, 100);
} else { }
else if(res.code == "224027"){
vm.confirmMessage = `圈子已被加入广场中,请先至广场管理移除该圈子后再操作`;
vm.confirmVisible = true;
// this.$confirm(`圈子已被加入广场中,请先至广场管理移除该圈子后再操作`, '', {
// confirmButtonText: '确定',
// type: 'warning',
// customClass: 'range-make-box',
// }).then(() => {
// // confirm
// }).catch(() => {
// // cancel
// });
}
else {
this.$message(res.message); this.$message(res.message);
} }
}); });
}, },
hideConfirm(){
vm.confirmVisible = false;
}
} }
} }
</script> </script>
......
...@@ -118,6 +118,22 @@ ...@@ -118,6 +118,22 @@
</el-dialog> </el-dialog>
<el-dialog
title=""
:show-close="false"
:visible.sync="confirmVisible"
:close-on-click-modal="false"
width="600px"
center
>
<p style="text-align: center;">{{confirmMessage}}</p>
<span slot="footer" class="dialog-footer">
<!--<el-button @click="confirmDelete">删 除</el-button>-->
<el-button type="primary" @click="hideConfirm">确定</el-button>
</span>
</el-dialog>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="审核列表" name="second" v-if="showApplyFlag"> <el-tab-pane label="审核列表" name="second" v-if="showApplyFlag">
...@@ -168,7 +184,9 @@ export default { ...@@ -168,7 +184,9 @@ export default {
circleId: null, circleId: null,
settingData: [] settingData: []
}, },
idType: "" idType: "",
confirmMessage: "",
confirmVisible: false,
} }
}, },
created() { created() {
...@@ -321,7 +339,13 @@ export default { ...@@ -321,7 +339,13 @@ export default {
this.$message.success("解散成功"); this.$message.success("解散成功");
} }
this.searchList(); this.searchList();
} else { }
else if(res.code == "224027") {
this.confirmMessage = `圈子已被加入广场中,请先至广场管理移除该圈子后再操作`;
this.confirmVisible = true;
}
else {
if(status == "40"){ if(status == "40"){
this.$message.error("下线失败,请重试"); this.$message.error("下线失败,请重试");
} else if(status == "30") { } else if(status == "30") {
...@@ -349,6 +373,10 @@ export default { ...@@ -349,6 +373,10 @@ export default {
}, },
hideConfirm(){
this.confirmVisible = false;
},
rangeManage(row) { rangeManage(row) {
this.$router.push({ this.$router.push({
path: '/range-manage', path: '/range-manage',
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册