提交 f5946cb2 编写于 作者: changdi.hao's avatar changdi.hao

Merge branch 'release' into 'master'

Release

备份  release

See merge request !252
<template>
<el-form
ref="formData"
:model="formData"
:rules="rules"
label-width="180px"
label-suffix=":"
class="basic-form"
>
<p class="p-title">基础配置</p>
<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="请选择小圈"
filterable
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>
<p class="p-title">报名页配置</p>
<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>高度:不限</p>
<p>支持jpeg, png格式</p>
<p>招募中的活动对应的报名页显示该图片介绍活动</p>
</div>
</el-upload>
</el-form-item>
<p class="upload-message" v-if="uploadImgMessage2">报名介绍页图片</p>
</div>
<el-row>
<el-col :span="8">
<el-form-item label="立即报名按钮颜色" prop="backgroundColor2NotJoin">
<el-input
size="small"
v-model="formData.backgroundColor2NotJoin"
placeholder="例如#0D9078"
style="width:90%;"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="审核中按钮颜色" prop="backgroundColor2Joining">
<el-input
size="small"
v-model="formData.backgroundColor2Joining"
placeholder="例如#0D9078"
style="width:90%;"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参与活动按钮颜色" prop="backgroundColor2Joined">
<el-input
size="small"
v-model="formData.backgroundColor2Joined"
placeholder="例如#0D9078"
style="width:90%;"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="立即报名按钮文字颜色" prop="foregroundColor2NotJoin">
<el-input
size="small"
v-model="formData.foregroundColor2NotJoin"
placeholder="例如#FFFFFF"
style="width:90%;"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="审核中按钮文字颜色" prop="foregroundColor2Joining">
<el-input
size="small"
v-model="formData.foregroundColor2Joining"
placeholder="例如#FFFFFF"
style="width:90%;"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参与活动按钮文字颜色" prop="foregroundColor2Joined">
<el-input
size="small"
v-model="formData.foregroundColor2Joined"
placeholder="例如#FFFFFF"
style="width:90%;"
></el-input>
</el-form-item>
</el-col>
</el-row>
<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: {
backgroundColor2NotJoin:[
{ required: true, message: "请输入立即报名按钮颜色", trigger: "blur" },
{ pattern: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, message: ' 输入正确的十六进制' },
],
backgroundColor2Joining:[
{ required: true, message: "请输入审核中按钮颜色", trigger: "blur" },
{ pattern: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, message: ' 输入正确的十六进制' },
],
backgroundColor2Joined:[
{ required: true, message: "请输入参与活动按钮颜色", trigger: "blur" },
{ pattern: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, message: ' 输入正确的十六进制' },
],
foregroundColor2NotJoin:[
{ required: true, message: "请输入立即报名按钮文字颜色", trigger: "blur" },
{ pattern: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, message: ' 输入正确的十六进制' },
],
foregroundColor2Joining:[
{ required: true, message: "请输入审核中按钮文字颜色", trigger: "blur" },
{ pattern: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, message: ' 输入正确的十六进制' },
],
foregroundColor2Joined:[
{ required: true, message: "请输入参与活动按钮文字颜色", trigger: "blur" },
{ pattern: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, message: ' 输入正确的十六进制' },
],
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>
<template>
<el-dialog
title="查看视频"
:visible="showVideoDetail"
@close="handlerClose"
width="780px"
>
<div class="video-detail-container">
<el-form ref="searchForm" :model="detailObj" label-suffix=":" size="small" label-width="100px">
<el-form-item label="视频描述">
<div>{{detailObj.videoDesc}}</div>
<video ref="videoRef" :src="detailObj.resourceUrl" controls="controls" poster class="video-content">您的浏览器不支持 video 标签。</video>
</el-form-item>
<div style="width: 100%;height: 1px;background-color: #DCDFE6;"></div>
<p class="title">审核结果</p>
<el-form-item label="送审时间">
<div>{{detailObj.startCheckDate | liveDateFilter}}</div>
</el-form-item>
<el-form-item label="机审完成时间">
<div>{{detailObj.completeCheckDate | liveDateFilter}}</div>
</el-form-item>
<el-form-item label="审核结果">
<!-- <div>{{detailObj.status | videoStatusFilter}}</div>-->
<div>{{detailObj.checkResult}}</div>
</el-form-item>
<el-form-item label="审核说明">
<div>{{detailObj.checkExplain}}</div>
</el-form-item>
<el-form-item label="图片" class="image-check-video">
<div v-for="(item, index) in detailObj.liteAvImages" style="display: inline-block">
<el-image
style="width: 100px; height: 100px;margin-right: 25px"
:src="item.url"
:preview-src-list="setSrc(index)">
<div slot="error" class="image-slot err-icon-set">
<i class="el-icon-picture-outline" style="font-size: 40px;margin-top: 25px;"></i>
</div>
</el-image>
<p style="text-align: center;padding-right: 25px;">{{item.timePoint}}</p>
</div>
</el-form-item>
</el-form>
</div>
</el-dialog>
</template>
<script>
import { getVideoDetail } from '@/utils/shortvideo/videoApi';
export default {
data() {
return {
detailObj: {
resourceUrl: '',
videoDesc: '',
startCheckDate: '',
completeCheckDate: '',
status: 2,
checkResult: '',
checkExplain: '',
liteAvImages: []
},
}
},
props: {
showVideoDetail: {
type: Boolean,
default: false
},
id: {
type: Number | String,
default: 0,
}
},
watch: {
showVideoDetail(val) {
if (val) {
this.init(this.id)
}
},
// id(val){
// console.log('当前查看id',val);
// this.init(val)
// }
},
computed: {
setSrc(){
return function (index) {
let newArr = [];
let newItem = this.detailObj.liteAvImages[index];
newArr[0] = newItem.url;
return newArr;
}
},
},
mounted() {},
methods: {
init(id) {
getVideoDetail(id).then((res) => {
if(res.code == "000000") {
const { id, resourceUrl, videoDesc, liteAvCheckInfo } = res.data;
this.detailObj = res.data;
// this.resourceUrl = resourceUrl;//视频地址
// this.videoDesc = videoDesc;//视频描述
}
}).catch((error) => {
this.$message.error("请重试");
})
},
handlerClose() {
// console.log('视频制作',this.$refs.videoRef.play)
if (!this.$refs.videoRef.paused) {
this.$refs.videoRef.pause();
}
this.$emit('closeCheckDetail')
},
},
}
</script>
<style lang="scss" scoped>
.video-detail-container{
min-height: 500px;
.title{
line-height: 24px;
font-size: 18px;
color: #303133;
margin: 23px 0 15px;
}
.video-content{
max-height: 300px;
width: 100%;
margin-top: 20px;
}
}
</style>
<style lang="scss">
.image-check-video{
.err-icon-set{
width: 100px;
height: 100px;
background: #eee;
text-align: center;
vertical-align: middle;
}
}
</style>
......@@ -406,6 +406,7 @@
},
save(){
debugger
this.submitForm();
},
cancle(){
......
......@@ -2,6 +2,7 @@
<div class="member-management" id="screenSet">
<el-row type="flex" justify="space-around" class="mm-nav" align="middle">
<el-col :span="20">
<el-button :type="areabtn" round class="margin-l" @click="checkTab(0)" v-show='isAraeEdit' >可访问本圈的地区</el-button>
<el-button :type="orgbtn" round class="margin-l" @click="checkTab(1)">可访问本圈的机构 ({{orgTotal}})</el-button>
<el-button :type="plebtn" round class="margin-l" @click="checkTab(2)">可访问本圈的人员 ({{pleTotal}})</el-button>
<span class="text inlin" @click="goBalck">黑名单</span>
......@@ -11,6 +12,12 @@
</el-col>
</el-row>
<div class="member-main">
<region
v-show="tab == 0"
:circleId='circleId'
:roleType='roleType'
@setOrgAndPeople="setOrgAndPeople"
></region>
<org
v-show="tab == 1"
:circleId='circleId'
......@@ -26,6 +33,7 @@
@setPleTotal="setPleTotal"
ref='renyaun'
></renyaun>
</div>
</div>
</template>
......@@ -34,7 +42,8 @@
import * as commonUtil from "@/utils/utils";
import org from '@/components/yqrange/member-management/org'
import renyaun from '@/components/yqrange/member-management/renyuan'
import { getCircleRole } from '@/utils/yqrange/rangeApi'
import region from '@/components/yqrange/member-management/region'
import { getCircleRole, getTotalNumber } from '@/utils/yqrange/rangeApi'
export default {
props: {
circleId: {
......@@ -51,26 +60,57 @@ export default {
},
data() {
return {
tab: 1,
orgbtn: 'primary',
tab: 0,
areabtn: 'primary',
plebtn: '',
orgbtn:'',
orgTotal: 0,
pleTotal: 0,
role: 0
role: 0,
isAraeEdit:false,//是否显示可访问本圈的地区
}
},
components: {
org,
renyaun
renyaun,
region
},
created() {
this.getRole()
let idType = localStorage.getItem("storageIdType");
if(idType == 1){
//内部可以访问本圈的地区
this.isAraeEdit = true
this.tab = 0
this.areabtn = 'primary'
}else{
this.isAraeEdit = false
this.tab = 1
this.orgbtn = 'primary'
}
},
// 挂载到Dom完成时
mounted: function() {
// commonUtil.resizeHeight();
this.getTotalNum();
},
methods: {
getTotalNum(){
let param = {
circleId: this.circleId,
districtIds: '000',
idType: this.roleType,
}
getTotalNumber(param).then(res => {
if (res.code == '000000') {
const { orgTotal, peopleTotal } = res.data;
this.orgTotal = orgTotal;
this.pleTotal = peopleTotal;
}
}).catch(err => {
console.log('网络出现点儿问题,稍后重试')
})
},
getRole() {
getCircleRole(this.circleId).then((res) => {
if(res.code == '000000') {
......@@ -87,16 +127,27 @@ export default {
if (v == 1) {
this.orgbtn = 'primary'
this.plebtn = ''
} else {
this.areabtn = ''
}else if (v ==2) {
this.orgbtn = ''
this.plebtn = 'primary'
this.areabtn = ''
} else {
this.areabtn = 'primary'
this.orgbtn = ''
this.plebtn = ''
}
},
setOrgTotal(n) {
this.orgTotal = n
// this.orgTotal = n
},
setPleTotal(n) {
this.pleTotal = n
// this.pleTotal = n
},
//刷新机构和人员
setOrgAndPeople(){
this.$refs.org.initRange();
this.$refs.renyaun.initRange();
},
goManger() {
this.$router.push(`/admin-manage?circleId=${this.circleId}&circleName=${this.circleName}`)
......
......@@ -45,7 +45,7 @@
<el-button size="small" @click="resetOrgOrPerson()" :disabled="checked"huang>取消搜索</el-button>
</el-form-item>
</el-form>
<el-checkbox v-if="showSelectAll" v-model="checked" @change="handleCheckAllChange" >全部({{ totalOrganization }})</el-checkbox>
<!-- <el-checkbox v-if="showSelectAll" v-model="checked" @change="handleCheckAllChange" >全部({{ totalOrganization }})</el-checkbox> -->
<el-table class="rim" ref="multipleOrganization" :data="tableOrganization" tooltip-effect="dark" @select-all="selectAllOrganization" @select="selectOrganization" >
<el-table-column type="selection" :selectable="selectableTableList"></el-table-column>
<el-table-column prop="orgName" label="医院名称" align="center"></el-table-column>
......
......@@ -47,13 +47,14 @@
<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 prop="sourceName" 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">删除</el-button>
<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">
......
<template>
<div class="organization">
<el-row :gutter="20">
<el-col class="rim" :span="12">
<el-tree
default-expand-all
:data="treeData"
show-checkbox
node-key="regionId"
ref="tree"
highlight-current
:props="defaultProps"
@check="onChecked"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span>{{ node.label }}</span>
<span>
<el-button
v-if="node.level < 5"
type="text"
icon="el-icon-caret-bottom"
size="small"
@click="() => append(data,node)"
></el-button>
</span>
</span>
</el-tree>
</el-col>
</el-row>
<div style="margin-top: 60px;margin-left: 250px;">
<el-button type="primary" size="small" @click="save">保存</el-button>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "@/utils/utils";
import { doUpload, getFilePath } from "@/utils/qiniu-util";
import * as operationData from "@/utils/operation";
import { moRelSearch, morDeleteOrg } from '@/utils/yqrange/memberApi';
import { getOrgProvincesReq } from '@/utils/yqrange/rangeApi';
import { getCircleTree,postCircleTree } from '@/utils/yqrange/yqrangeApi';
let vm = null;
export default {
props: {
circleId: {
type: Number | String,
default: 1
},
roleType: {
type: Number | String,
default: 1
},
},
data() {
return {
allSelectedKeys: [],
updatedTree: false,
organizationRegion: [],
defaultProps: {
children: "children",
label: "name",
isLeaf: "isLeaf"
},
treeData: []
}
},
created() {
vm = this;
this.getAdministrative();
},
mounted() {
},
methods: {
//通过key设置tree
// setCheckedKeys(tagsRegion) {
// let treeKeyList = [];
// for (let index = 0; index < tagsRegion.length; index++) {
// treeKeyList[index] = tagsRegion].key;
// }
// this.$refs.tree.setCheckedKeys(treeKeyList);
// },
//初始化范围树
setTreeData(administrative) {
let treeIdList = [];
for (let i = 0; i < administrative.length; i++) {
treeIdList.push(administrative[i]);
}
console.log(treeIdList);
this.$refs.tree.setCheckedKeys(treeIdList);
},
//查询行政范围(树)
getAdministrative() {
let req = {
circleId: this.circleId//826,874,832
};
openLoading(vm);
getCircleTree(req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
let administrativeAll = res.data.regionTreeDto;
//获取已选的区域
let administrative = [];
res.data.provinceIds.forEach(element => {
administrative.push(element);
});
res.data.cityIds.forEach(element => {
administrative.push(element);
});
res.data.countryIds.forEach(element => {
administrative.push(element);
});
res.data.townIds.forEach(element => {
administrative.push(element);
});
// let administrative = res.data.administrative;
this.treeData = [];
this.treeData[0] = administrativeAll;
console.log("administrative",administrative);
this.setTreeData(administrative);
}
});
},
onChecked(node, data) {
console.log("11node",node);
console.log("11data",data);
vm.checkUpdate(node, data);
//重构归并树
let checkedTree = operationData.getSimpleCheckedNodes(
this.$refs.tree.store
);
console.log("checkedtree",checkedTree);
let halfCheckedTree = this.$refs.tree.getHalfCheckedKeys();
console.log("halfcheckedtree",halfCheckedTree);
let allSelectedKeys = operationData.setSelectedKeys(
checkedTree,
halfCheckedTree
);
//重构内容
this.allSelectedKeys = allSelectedKeys;
//处理原始数据
//1. 设置选中数据
let selectedData = data.checkedKeys;
let halfSelectedData = data.halfCheckedKeys;
let selectedAll = {};
selectedData.forEach(element => {
selectedAll[element] = 1;
});
//2.设置半选数据
halfSelectedData.forEach(element => {
selectedAll[element] = 2;
});
console.log("seledAll",selectedAll);
// selectedAll.forEach(element => {
//特殊处理全国选择状态
let allSelectRegionId = this.treeData[0].regionId;
let isExit = selectedAll[allSelectRegionId];
if(isExit){
this.treeData[0].checkStatus = isExit
}else{
this.treeData[0].checkStatus = 0;
}
this.dealOrgData(this.treeData[0].children,selectedAll);
},
// type 1:选中 2:半选
dealOrgData(orgData,selectedAll){
orgData.forEach(element => {
let type = selectedAll[element.regionId];
if(type){
//如果是在选中列表(包含半选)里面
console.log("elementregionid",type);
element.checkStatus = type;
if(element.children){
this.dealOrgData(element.children,selectedAll);
}
}else{
element.checkStatus = 0;
if(element.children){
this.dealOrgData(element.children,selectedAll);
}
}
});
},
checkUpdate(node, data) {
let flag = -1;
flag = data.checkedKeys.indexOf(node.regionId);
console.log("flag",flag);
if(flag >=0){
//选中
this.$refs.tree.setChecked(data,false)
}else{
//取消
}
// this.dealTreeData(flag,node,this.treeData[0].children,false);
// if (vm.status4Flag == 1 && flag >= 0) {
// console.log(node, data, flag, vm.status4Flag);
// vm.nowCheck = node;
// vm.warnType = 0;
// vm.dialogWarn = true;
// // this.$refs.tree.setChecked(data,false)
// }
},
//处理原始数据 isHaveFlag 是否直接赋值
dealTreeData(flag,node,orgTreeData,isHaveFlag){
orgTreeData.forEach(element => {
if(isHaveFlag){
element.checkStatus = flag >0 ? 1 : 0
}else{
if(element.regionId == node.regionId){
element.checkStatus = flag >0 ? 1 : 0
}
}
if(element.children){
//处理原始数据
this.dealTreeData(flag,node,element.children,true);
}
});
},
//1.如果选中父,子节点存在,全部选中
//子节点选中
appendCheck(administrative, checked) {
let checkList = [];
checkList = this.$refs.tree.getCheckedKeys();
if (checked) {
for (let i = 0; i < administrative.length; i++) {
checkList.push(administrative[i].regionId);
}
}
this.$nextTick(function() {
this.$refs.tree.setCheckedKeys(checkList);
});
},
//添加子节点
append(data, node) {
console.log("data:", data);
console.log("node:", node);
if (node.level-1 == 1) {
let req = {
provinceId: node.data.regionId
};
vm.GET("basic-data/position/cities", req).then(res => {
vm.setMoreOption(data,res.data.cityList, "cities",node);
});
} else if (node.level-1 == 2) {
let req = {
cityId: node.data.regionId
};
vm.GET("basic-data/position/counties", req).then(res => {
vm.setMoreOption(data,res.data.countyList, "counties",node);
//添加数据
});
} else if (node.level-1 == 3) {
let req = {
countyId: node.data.regionId
};
vm.GET("basic-data/position/towns", req).then(res => {
vm.setMoreOption(data,res.data.townList, "towns",node);
});
}
},
//设置数据
// data 父节点,newdata新节点
setMoreOption(data,newdata, type,node) {
if (data.children !=null) return;
let statusValue = 0;
if (node.checked == true) {
statusValue = 1;
}
let option = [];
for (let i = 0; i < newdata.length; i++) {
let obj = {};
if (type == "cities") {
obj.name = newdata[i].cityName;
obj.regionId =newdata[i].cityId;
} else if (type == "counties") {
obj.name = newdata[i].countyName;
obj.regionId = newdata[i].countyId;
// obj.leaf = true;
} else if (type == "towns") {
obj.name = newdata[i].townName;
obj.regionId = newdata[i].townId;
// obj.leaf = true;
}
obj.checkStatus = statusValue;
// obj.disabled = false;
obj.children = null;
obj.id = null
option.push(obj);
}
console.log("childrenlist:",option);
data.children = option;
vm.appendCheck(option,node.checked);
},
//保存
save(){
console.log("treedata",this.treeData[0]);
let res = this.treeData[0];
openLoading(vm);
postCircleTree(res).then(res => {
closeLoading(vm);
if (res.code == "000000") {
this.$message("保存成功");
this.$emit('setOrgAndPeople');
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
}
}
</script>
<style >
/*.organization .el-dialog {*/
/*max-height: 90%;*/
/*overflow: scroll;*/
/*}*/
</style>
<style lang="scss" >
.rim {
.el-icon-caret-right:before {
content: " "!important;
}
}
</style>
<style lang="scss" scoped>
.organization {
.add-organization {
margin-left: 36px;
line-height: 20px;
width: 120px;
cursor: pointer;
padding-top: 10px;
i {
font-size: 18px;
margin-right: 2px;
}
.rim {
border: 1px solid #dddddd;
}
}
}
</style>
......@@ -173,10 +173,15 @@
<span>1.下载模板,填写信息</span>
<br>
<div>
<el-button type="primary" size="small" style="float:left; margin-top: 30px;" @click="download1">下载模板</el-button>
<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: 40px;width: 1px;height: 100px; background: #c8cbd2;"></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>
......@@ -199,7 +204,7 @@ import * as operationData from "@/utils/operation";
import { openLoading, closeLoading } from "@/utils/utils";
import { doUpload, getFilePath } from "@/utils/qiniu-util";
import { mpRelSearch, mprDeleteOrg } from '@/utils/yqrange/memberApi';
import { uploadDoc } from '@/utils/yqrange/yqrangeApi';
import { doctorsByIdOrMobile } from '@/utils/yqrange/yqrangeApi';
import addMember from './addMember.vue'
let vm = null;
export default {
......@@ -257,7 +262,7 @@ export default {
value: 0
},
{
label: '可访问本圈的机构',
label: '可访问本圈的地区/机构',
value: 1
},
{
......@@ -457,7 +462,7 @@ export default {
// let files = new window.File();
uploadDoc(formData).then(res => {
doctorsByIdOrMobile(formData).then(res => {
closeLoading(vm);
if (res.code == "000000") {
......@@ -544,6 +549,11 @@ export default {
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;
......
......@@ -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 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 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')
......@@ -74,7 +77,10 @@ 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 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 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')
const videoManage = r => require.ensure([], () => r(require('../views/shortvideo/video-manage.vue')), 'video-manage')
export default [{
path: '/',
......@@ -239,6 +245,15 @@ export default [{
path: '/yq-range',
component: yqRange
},
{
path: '/activity-management',
component: activityManagement
},
{
path:'/create-activity',
component: createActivity
},
{
path: '/live-manage',
component: liveManage
......@@ -315,7 +330,18 @@ export default [{
path: '/order-detail',
component: orderDetail,
},
{
path: '/plaza-list',
component: plazaList,
},
{
path: '/activity-member',
component: activityMember,
},
{
path: 'video-manage',
component: videoManage,
},
// {
// path: '/followup',
......
......@@ -56,7 +56,7 @@ service.interceptors.request.use(config => {
// console.log('环境变量>>>> ', process.env.BUILD_ENV);
// config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6';
// config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291';
config.headers['token'] = 'AAAA3AA4233E45CCBE5CABD476C9D6F8';
config.headers['token'] = '00AB2FF7626D4F5FB627399EDF23F5DC';
}else{
config.headers['token'] = localStorage.getItem('storageToken')
}
......
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: '后台管理--专区活动成员导入',
})
};
......@@ -54,8 +54,9 @@ service.interceptors.request.use(config => {
}
if( process.env.BUILD_ENV == "development" ){ // 本地开发环境qgit
// console.log('环境变量>>>> ', process.env.BUILD_ENV);
config.headers['token'] = 'C5172D7D7825463CA46752A894236AC2';
// config.headers['token'] = localStorage.getItem('storageToken')
// config.headers['token'] = '00AB2FF7626D4F5FB627399EDF23F5DC';
config.headers['token'] = localStorage.getItem('storageToken')
}else{
config.headers['token'] = localStorage.getItem('storageToken')
}
......
......@@ -493,6 +493,17 @@ const vueFilter = {
else if(value == 2){
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:解散
rangeStatus: (value) => {
......@@ -512,7 +523,15 @@ const vueFilter = {
return '-'
}
},
liveStatusFilter: (value) => {
//活动发布状态 1 已经发布 2未发布
activityStatus:(value) => {
if (value == 1) {
return '已发布'
}else if (value == 2) {
return '未发布'
}
},
liveStatusFilter1: (value) => {
if (value == 1) {
return '预告'
}else if (value == 2) {
......@@ -551,6 +570,47 @@ 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;
},
videoStatusFilter: (value) => {
let obj = {
1: '机审中',
2: '机审通过已发布',
3: '疑似违规',
4: '机审通过待人审',
5: '机审拒绝',
6: '人审通过已发布',
7: '已下线',
8: '已删除',
}
return obj[value];
}
}
export default vueFilter
......@@ -13,6 +13,14 @@ export const getGoodsList = (params) => {
description: '商品列表查询',
})
};
export const getGoodDetails = (goodsId) => {
return fetch({
headers,
url: getBaseUrl(`store/goods/medical/service/detail/${goodsId}/-1`),
method: 'get',
description: '商品详情查询',
})
}
export const uploadExcel = data => {
// return utils.checkAuth(()=>{
return fetch({
......@@ -43,6 +51,15 @@ export const updateGoods = (params) => {
description: '创建/更新商品',
})
};
export const updateGoodsV2 = (params) => {
return fetch({
headers,
url: getBaseUrl(`store/goods/medical/service/upsert`),
method: 'post',
data: params,
description: '创建/更新商品',
})
};
///dosage/all
export const dosageAll = (parm) => {
return fetch({
......@@ -75,3 +92,24 @@ export const updateStock = (parm) => {
description: '增加/减少库存',
})
};
// http://dev-sc.yunqueyi.com/store/getHospitalInfoByStoreId?storeId=85
// GET header:token
export const getHospitalInfoByStoreId = (storeId) => {
return fetch({
headers,
url: getBaseUrl(`store/getHospitalInfoByStoreId?storeId=${storeId}`),
method: 'get',
description: '',
})
};
export const getCheckPackageIdList = (storeId) => {
return fetch({
headers,
url: getBaseUrl(`followup/templet/type?sourceType=9`),
method: 'post',
description: '',
})
};
\ No newline at end of file
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: '后台管理--待选专区列表',
})
};
......@@ -78,3 +78,16 @@ export const refundApply = (params) => {
description: '退货',
})
};
// 关闭医生店铺
export const closeShop = (storeId, status = 0) => {
return fetch({
headers,
url: getBaseUrl(`store/check/${storeId}/${status}`),
method: 'put',
data: {},
description: '关闭医生店铺',
})
};
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 getVideoList = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/liteav/admin/list`),
method: 'post',
data: params,
description: '获取短视频列表',
})
};
export const getSwitch = () => {
return fetch({
headers,
url: getBaseUrl(`circle/liteav/admin/switch`),
method: 'get',
description: '获取视频审核开关',
})
};
export const setSwitch = (btnVal) => {
return fetch({
headers,
url: getBaseUrl(`circle/liteav/admin/switch/set?button=${btnVal}`),
method: 'get',
description: '设置视频审核开关',
})
};
export const getVideoDetail = (id) => {
return fetch({
headers,
url: getBaseUrl(`circle/liteav/admin/detail/${id}`),
method: 'get',
description: '获取短视频详情',
})
};
export const manualCheck = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/liteav/admin/man/check`),
method: 'post',
data: params,
description: '短视频人工审核',
})
};
......@@ -69,3 +69,13 @@ export const getCircleRole = (circleId) => {
description: '根据圈子 获取人的角色',
})
};
export const getTotalNumber = (data) => {
return fetch({
headers,
url: getBaseUrl(`circle/memberSelect/orgPeopleTotal/related/search`),
method: 'post',
data: data,
description: '查询已选机构、人员',
})
};
......@@ -28,7 +28,7 @@ export const getRangeList = (params) => {
export const getCircleSettingList = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/app/${params.circleId}/list`),
url: getBaseUrl(`circle/v1/app/${params.circleId}/list`),
method: 'get',
description: '查看生态圈应用配置',
})
......@@ -37,7 +37,7 @@ export const getCircleSettingList = (params) => {
export const saveCircleSetting = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/app/save`),
url: getBaseUrl(`circle/v1/app/save`),
method: 'post',
data: params,
description: '保存生态圈应用配置',
......@@ -276,3 +276,52 @@ export const getExamAwardList = (params) => {
})
};
export const getCircleTree = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/region/tree/${params.circleId}`),
method: 'get',
data: params,
description: '根据圈子id获取树结构',
})
};
export const postCircleTree = (params) => {
return fetch({
headers,
url: getBaseUrl('circle/region/tree'),
method: 'post',
data: params,
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: '医生审核',
})
};
export const doctorsByIdOrMobile = (params) => {
return fetch({
headers,
url: getBaseUrl(`circle/import/doctorsByIdOrMobile`),
method: 'post',
data: params,
description: '批量导入人员',
})
};
<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">删除</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="确认删除"
: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="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: [],
activityDoctorModelList: [],
totalPeople: 10,
selectionList:[],
memberForm: {
hospitalName: '',
doctorName: '',
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.hospitalName = "";
this.memberForm.doctorName = "";
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;
} 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
},
handleClose() {
this.dialogOrg = false
},
// 批量导入
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: {},
backgroundColor2NotJoin:"#0D9078",//立即报名按钮颜色
backgroundColor2Joining:"#86C7BB",//审核中按钮颜色
backgroundColor2Joined:"#0D9078",//参与活动按钮颜色
foregroundColor2NotJoin:"#FFFFFF",//立即报名按钮文字颜色
foregroundColor2Joining:"#FFFFFF",//审核中按钮文字颜色
foregroundColor2Joined:"#FFFFFF",//参与活动按钮文字颜色
},
}
},
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>
......@@ -25,6 +25,7 @@
<el-input
size="small"
v-model="formData.name"
maxlength="20"
placeholder="请输入学科名称"
style="width:70%;"
></el-input>
......@@ -47,6 +48,7 @@
<el-input
size="small"
v-model="item.name"
maxlength="20"
placeholder="请输入二级分类名称"
style="width:70%;"
></el-input>
......@@ -61,6 +63,7 @@
<el-input
size="small"
v-model="item.code"
maxlength="8"
placeholder="请输入二级分类代码"
style="width:70%;"
></el-input>
......
......@@ -39,7 +39,6 @@
<el-input
type="textarea"
rows="4"
size="small"
v-model="formData.goodsDescription"
placeholder="请输入商品介绍"
......@@ -83,10 +82,11 @@
v-model="formData.goodsType"
placeholder="请选择商品类型"
size="small"
:disabled="isEdit"
@change="getGoodsTypes(formData.goodsType,2)">
<el-option
v-for="(item,index) in oneLever"
:key="index"
:key="item.categoryName+'-'+index"
:label="item.categoryName"
:value="item.id"
></el-option>
......@@ -94,37 +94,49 @@
</el-form-item>
<!-- <p class="upload-message" v-if="uploadImgMessage1">请上传商品头图</p> -->
</div>
</el-form>
<div class="basic-item-icon" v-if="isMedic">
<div class="part-tit">药品信息</div>
<el-form
ref="formData1"
:model="formData1"
:rules="rules1"
label-width="150px"
label-suffix=":"
class="basic-form"
>
<div class="basic-item-icon" v-show="!isCheckServe">
<div class="part-tit">基本信息</div>
<el-form-item label="条形码" prop="barCode">
<el-col :span="18">
<el-input
:disabled="barAndGoodsFlag"
size="small"
v-model="formData.barCode"
v-model="formData1.barCode"
placeholder="请输入条形码"
@input="changeBarCode"
></el-input>
<span class="fast-opt" @click="fastInput">快速录入</span>
<span class="word-num">(点击可快速录入下面的药品信息)</span>
<span class="fast-opt" @click="fastInput(1)">快速录入</span>
<span class="word-num">(点击可快速录入下面的基本信息)</span>
</el-col>
</el-form-item>
<el-form-item label="批准文号" prop="approvalNumber">
<el-col :span="18">
<el-input
size="small"
v-model="formData.approvalNumber"
v-model="formData1.approvalNumber"
placeholder="请输入批准文号"
style="width:50%;"
></el-input>
</el-col>
</el-form-item>
<el-form-item label="药品通用名称" prop="medicCommonName">
<el-form-item label="通用名称" prop="medicCommonName">
<el-col :span="13">
<el-input
:disabled="goodDisabled || barAndGoodsFlag"
size="small"
v-model="formData.medicCommonName"
placeholder="请输入药品通用名称"
v-model="formData1.medicCommonName"
placeholder="请输入通用名称"
style="width:70%;"
maxlength="60"
show-word-limit
......@@ -133,12 +145,12 @@
<!-- <span class="word-num">{{(formData.medicCommonName).replace(/\s+/g,"").length}}/60</span> -->
</el-col>
</el-form-item>
<el-form-item label="药品商品名称" prop="medicGoodsName">
<el-form-item label="商品名称" prop="medicGoodsName">
<el-col :span="13">
<el-input
size="small"
v-model="formData.medicGoodsName"
placeholder="请输入药品商品名称"
v-model="formData1.medicGoodsName"
placeholder="请输入商品名称"
maxlength="60"
show-word-limit
......@@ -147,12 +159,12 @@
<!-- <span class="word-num">{{(formData.medicGoodsName).replace(/\s+/g,"").length}}/60</span> -->
</el-col>
</el-form-item>
<el-form-item label="药品规格" prop="size">
<el-form-item label="规格" prop="size">
<el-col :span="13">
<el-input
size="small"
v-model="formData.size"
placeholder="请输入药品规格"
v-model="formData1.size"
placeholder="请输入规格"
style="width:70%;"
></el-input>
......@@ -162,13 +174,13 @@
<div class="inline">
<el-form-item label="是否是处方药" prop="otc1">
<el-col :span="24">
<el-radio size="mini" v-model="formData.otc1" label="1">处方药</el-radio>
<el-radio v-model="formData.otc1" label="0">非处方药</el-radio>
<el-radio size="mini" v-model="formData1.otc1" label="1">处方药</el-radio>
<el-radio v-model="formData1.otc1" label="0">非处方药</el-radio>
</el-col>
</el-form-item>
<el-form-item label="剂型" prop="dosageId">
<el-select
v-model="formData.dosageId"
v-model="formData1.dosageId"
placeholder="请选择药品剂型"
size="small"
clearable>
......@@ -185,7 +197,7 @@
<el-col :span="13">
<el-input
size="small"
v-model="formData.usage"
v-model="formData1.usage"
placeholder="请输入用法用量"
style="width:70%;"
></el-input>
......@@ -194,12 +206,12 @@
</el-col>
</el-form-item>
<el-form-item label="药品类型" prop="categoryIdLevel2">
<!-- <el-form-item label="药品类型" prop="categoryIdLevel2">
<el-select
v-model="formData.categoryIdLevel2"
v-model="formData1.categoryIdLevel2"
placeholder="请选择药品类型"
size="small"
@change="getLever(formData.categoryIdLevel2,3)"
@change="getLever(formData1.categoryIdLevel2,3)"
clearable
>
<el-option
......@@ -213,10 +225,10 @@
<div class="inline">
<el-form-item label="一级类目" prop="categoryIdLevel3" >
<el-select
v-model="formData.categoryIdLevel3"
v-model="formData1.categoryIdLevel3"
placeholder="请选择一级类目"
size="small"
@change="getLever(formData.categoryIdLevel3,4)"
@change="getLever(formData1.categoryIdLevel3,4)"
>
<el-option
v-for="(item,index) in threeLever"
......@@ -228,10 +240,10 @@
</el-form-item>
<el-form-item label="二级类目" prop="categoryIdLevel4" >
<el-select
v-model="formData.categoryIdLevel4"
v-model="formData1.categoryIdLevel4"
placeholder="请选择二级类目"
size="small"
@change="getLever(formData.categoryIdLevel4,5)"
@change="getLever(formData1.categoryIdLevel4,5)"
>
<el-option
v-for="(item,index) in fourLever"
......@@ -243,7 +255,7 @@
</el-form-item>
<el-form-item label="三级级类目" prop="categoryIdLevel5">
<el-select
v-model="formData.categoryIdLevel5"
v-model="formData1.categoryIdLevel5"
placeholder="请选择三级类目"
size="small"
>
......@@ -255,12 +267,12 @@
></el-option>
</el-select>
</el-form-item>
</div>
</div> -->
<el-form-item label="生产厂家" prop="manufacturer">
<el-col :span="13">
<el-input
size="small"
v-model="formData.manufacturer"
v-model="formData1.manufacturer"
placeholder="请输入生产厂家"
style="width:70%;"
></el-input>
......@@ -272,7 +284,7 @@
<el-form-item label="适用科室" prop="department">
<el-input
size="small"
v-model="formData.department"
v-model="formData1.department"
placeholder="请输入适用科室"
></el-input>
......@@ -294,7 +306,7 @@
<el-col :span="24">
<el-input
size="small"
v-model="formData.treatDisease"
v-model="formData1.treatDisease"
placeholder="请输入治疗疾病"
></el-input>
......@@ -308,7 +320,7 @@
<el-col :span="13">
<el-input
size="small"
v-model="formData.expiredTime"
v-model="formData1.expiredTime"
placeholder="请输入有效期"
style="width:70%;"
></el-input>
......@@ -323,7 +335,31 @@
<span class="word-num"></span>
</el-col>
</el-form-item>
<el-form-item label="药品说明书">
<el-form-item label="型号" prop="modelNo">
<el-col :span="13">
<el-input
size="small"
v-model="formData1.modelNo"
placeholder="请输入型号"
style="width:70%;"
></el-input>
<span class="word-num"></span>
</el-col>
</el-form-item>
<el-form-item label="执行标准号" prop="standardNo">
<el-col :span="13">
<el-input
size="small"
v-model="formData1.standardNo"
placeholder="请输入执行标准号"
style="width:70%;"
></el-input>
<span class="word-num"></span>
</el-col>
</el-form-item>
<el-form-item label="说明书">
<el-upload
class="bg-uploader"
......@@ -352,16 +388,269 @@
<p>支持jpeg, png格式</p>
</div>
</el-upload>
<p class="upload-message" v-if="!isSpecification_url">请上传药品说明书</p>
<p class="upload-message" v-if="!isSpecification_url">请上传说明书</p>
</el-form-item>
</div>
</el-form>
<!-- =========================================================调试新增检测服务 start=========================================================
=========================================================调试新增检测服务 start=========================================================
=========================================================调试新增检测服务 start========================================================= -->
<el-form
ref="formData2"
:model="formData2"
:rules="rules2"
label-width="150px"
label-suffix=":"
class="basic-form"
>
<div class="basic-item-icon" v-show="!isMedic && isCheckServe">
<div class="part-tit">服务信息</div>
<el-form-item label="条形码" prop="barCode">
<el-col :span="18">
<el-input
size="small"
v-model="formData2.barCode"
placeholder="请输入条形码"
></el-input>
</el-col>
</el-form-item>
<el-form-item label="检测登记表" prop="checkPackageId">
<el-select
v-model="formData2.checkPackageId"
placeholder="请选择"
:disabled="isEdit"
size="small"
>
<el-option
v-for="(item,index) in checkPackageIdList"
:key="index"
:label="item.name"
:value="item.content"
></el-option>
<!-- <el-option label="其他" value="0">其他</el-option> -->
</el-select>
</el-form-item>
<el-form-item label="检测名称" prop="checkName">
<el-col :span="13">
<el-input
size="small"
v-model="formData2.checkName"
placeholder="请输入检测名称"
show-word-limit
maxlength="60"
></el-input>
</el-col>
</el-form-item>
<el-form-item label="医疗机构名称" prop="hospitalName">
<el-col :span="13">
<el-input
size="small"
v-model="formData2.hospitalName"
placeholder="请输入医疗机构名称"
show-word-limit
></el-input>
</el-col>
</el-form-item>
<el-form-item label="医疗机构类型" prop="hospitalType">
<el-select
v-model="formData2.hospitalType"
placeholder="请选择"
size="small"
>
<el-option
v-for="(item,index) in hospitalTypeList"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="检测项目" prop="checkItem">
<el-col :span="13">
<el-input
type="textarea"
rows="4"
size="small"
v-model="formData2.checkItem"
placeholder="请输入检测项目"
maxlength="400"
show-word-limit
></el-input>
</el-col>
</el-form-item>
<el-form-item label="检测指标" prop="checkStandard">
<el-col :span="13">
<el-input
type="textarea"
rows="4"
size="small"
v-model="formData2.checkStandard"
placeholder="请输入检测指标"
maxlength="400"
show-word-limit
></el-input>
</el-col>
</el-form-item>
<el-form-item label="使用人数" prop="useCount" class="required-label">
<el-col :span="20">
<div class="stock-com">
<span class="sp sp-l" @click="formData2.useCount>0?formData2.useCount--:''" :class="{'opac':formData2.useCount == 0}"><i class="el-icon-minus"></i></span>
<span class="sp sp-c">
<el-input
type="number"
rows="4"
size="small"
v-model="formData2.useCount"
placeholder="请输入使用人数"
></el-input>
<!-- <input style="text-align:center;width:100%;height:100%;border:none;outline:none;" v-model="formData.useCount" type="text" placeholder="0"> -->
</span>
<span class="sp sp-r" @click="formData2.useCount++"><i class="el-icon-plus"></i></span>
</div>
<!-- <p class="error-message" v-if="formData.useCount<=0">使用人数必须大于0</p> -->
</el-col>
</el-form-item>
<el-form-item label="检测类型" prop="checkType">
<el-select
v-model="formData2.checkType"
placeholder="请选择"
size="small"
>
<el-option
v-for="(item,index) in checkTypeList"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="适用人群" prop="suitableArr">
<el-select
v-model="formData2.suitableArr"
:multiple="true"
placeholder="请选择"
size="small"
>
<el-option
v-for="(item,index) in suitableList"
:key="item+'_'+index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="附加服务" prop="accessorialService">
<el-col :span="13">
<el-input
type="textarea"
rows="4"
size="small"
v-model="formData2.accessorialService"
placeholder="请输入附加服务"
maxlength="400"
show-word-limit
></el-input>
</el-col>
</el-form-item>
<el-form-item label="商品使用日期" prop="endTime" class="required-label">
<el-date-picker
v-model="formData2.endTime"
size="small"
type="datetime"
placeholder="请选择商品使用日期"
value-format="yyyy-MM-dd HH:mm:ss.SSS"
format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item>
<!-- <el-form-item label="商品使用日期" prop="endTime">
<el-col :span="13">
<el-input
size="small"
v-model="formData2.endTime"
placeholder="请输入商品使用日期"
style="width:70%;"
></el-input>
<span class="word-num"></span>
</el-col>
</el-form-item> -->
<el-form-item label="检测说明" >
<el-upload
:file-list="goodsCheckList"
class="bg-uploader"
:show-file-list="isShowFileList"
action="#"
:before-upload="beforeUploadPic2"
>
<div class="file-pics" :key="index" v-for="(item,index) in goodsCheckList">
<img :src="item.url" @mouseover.stop="headIndex=index" class="bg-img"/>
<div
class="img-delete"
v-if="headIndex==index"
@click.stop="deleteImg(item,goodsCheckList)"
@mouseout.stop="headIndex=-1"
>
<i class="el-icon-delete"></i>
</div>
</div>
<img class="bg-img" src="../../assets/image/small.png" v-if="goodsCheckList.length <10"/>
<div class="limit-text">
<p>尺寸:686 * 高度不变</p>
<p>支持jpeg, png格式</p>
</div>
</el-upload>
<p class="upload-message" v-if="!isgoodsImages">请上传检测说明图</p>
</el-form-item>
</div>
</el-form>
<!-- =========================================================调试新增检测服务 start=========================================================
=========================================================调试新增检测服务 start=========================================================
=========================================================调试新增检测服务 start========================================================= -->
<el-form
ref="formData"
:model="formData"
:rules="rules"
label-width="150px"
label-suffix=":"
class="basic-form"
>
<div class="basic-item-icon">
<div class="part-tit">销售信息</div>
<div class="inline">
<el-form-item label="零售价" prop="optPrice">
<el-col :span="20">
<el-input
@input="$forceUpdate();"
size="small"
v-model="formData.optPrice"
placeholder="请输入零售价"
......@@ -443,33 +732,22 @@
let vm = null;
import { openLoading, closeLoading } from "../../utils/utils";
import { doUpload, getFilePath } from "../../utils/qiniu-util";
import { updateGoods ,updateStock,dosageAll,getDeparts,getGoodsList} from '@/utils/goods';
import { updateGoods ,updateStock,dosageAll,getDeparts,getGoodsList, getGoodDetails, updateGoodsV2, getHospitalInfoByStoreId, getCheckPackageIdList } from '@/utils/goods';
import Cropper from '@/components/common/cropper.vue'
import { mapGetters } from "vuex";
import { originRules1, originRules2, originRules } from './rules';
import { originForm1, originForm2, originForm } from './forms';
export default {
components: {
BreadCrumb,
Cropper
},
data(){
let checkProjectStr = (rule, value, callback) => {
if (value.indexOf("\\") != -1) {
//存在
callback(new Error("请勿输入字符“ \\ "));
} else if (value.indexOf(".") != -1) {
callback(new Error("请勿输入字符“ . "));
} else {
callback();
}
};
const checkBarcode = (rule, value, cb) => {
const valedBarcode = new RegExp("[\\u4E00-\\u9FFF]+","g");
if(value && valedBarcode.test(value)) cb(new Error('条形码不能输入中文'));
cb();
}
return{
barAndGoodsFlag: false, // 编辑时商品名称和条形码是否可以编辑
goodDisabled: false, // 商品通用名称是否可编辑
isEdit: false,
stock:{
title:'减少库存',
type:1,
......@@ -478,6 +756,7 @@
},
doseAll:[],
fileGoodsList:[],
goodsCheckList: [],
fileIntrList:[],
intrIndex:-1,
isShowFileList:false,
......@@ -516,44 +795,26 @@
label: '其他',
value: '3',
}],
formData: {
medicationId: 0,
optPrice:0,
id:'',
categoryId:'',
categoryIdLevel2: '',
categoryIdLevel3: '',
categoryIdLevel4: '',
categoryIdLevel5: '',
goodsName:'',
goodsDescription:'',
goodsImages:[],
goodsType:'',
medicCommonName:'',
medicGoodsName:'',
size:'',
dosageId:null,
usage:'',
otc:false,
otc1:'1',
approvalNumber:'',
manufacturer:'',
department:'',
expiredTime:'',
specification_url:'',
treatDisease:'',
barCode:'',
discountPrice:'',
stock:0,
goodsStock:0,
specificationImages:[],
goodsId:'',
costPrice:'',
decrStock:'',//减少库存
incrStock:'',//增加库存
checkPackageIdList: [{name:'其他',content:0}],
hospitalTypeList: [{label:'村卫生室',value:1},{label:'乡镇卫生院/中心',value:2}], // 医疗机构类型
checkTypeList: [{label:'常规检测',value:1}], // 检测类型
suitableList: [{label:'儿童',value:'1'},{label:'青年',value:'2'},{label:'中年',value:'4'},{label:'老年',value:'8'}], // 适用人群
// 不同类型服务的表单通用字段
// 不同类型服务的表单通用字段
// 不同类型服务的表单通用字段
formData: JSON.parse(JSON.stringify(originForm)), // 通用信息
formData1: JSON.parse(JSON.stringify(originForm1)), // 基本信息
formData2: JSON.parse(JSON.stringify(originForm2)),
rules: {},
rules1: {},
rules2: {},
goodsId: 0, // 新增时传0,更新时必需>0
goodsType: '',
storeId: '',
externalGoodsCode: '',
},
// 不同类型服务的表单通用字段
// 不同类型服务的表单通用字段
// 不同类型服务的表单通用字段
showCropper: false,
currentOption: {
offset_x: 120,
......@@ -572,93 +833,32 @@
slide2: {
oriUrl: '', // 原图
},
rules: {
goodsName: [
{ required: true, message: "请输入商品名称", trigger: "blur" },
{
// min: 2,
// max: 14,
//message: "输入长度为2-14的内容,可包含中英文、数字及特殊符号",
trigger: "blur"
},
{ validator: checkProjectStr, trigger: "blur" }
],
introduce: [
{ required: true, message: "请输入圈子介绍", trigger: "blur" },
{
min: 2,
max: 40,
message: "输入长度为2-40的内容,可包含中英文、数字及特殊符号",
trigger: "blur"
},
{ validator: checkProjectStr, trigger: "blur" }
],
goodsImages: [
{ required: true, message: "请上传商品头图", trigger: "blur" }
],
goodsType:[
{ required: true, message: "请选择商品类型", trigger: "change" }
],
medicCommonName:[
{ required: true, message: "请输入商品通用名称", trigger: "blur" }
],
size:[
{ required: true, message: "请输入商品规格", trigger: "blur" }
],
manufacturer:[
{ required: true, message: "请输入生产厂家", trigger: "blur" }
],
approvalNumber:[
{ required: true, message: "请输入批准文号", trigger: "blur" }
],
dosageId:[
{ required: true, message: "请选择剂型", trigger: "change" }
],
categoryIdLevel2:[
{ required: true, message: "请选择药品类型", trigger: "blur" }
],
categoryIdLevel3:[
{ required: true, message: "请选择一级类目", trigger: "blur" }
],
categoryIdLevel4:[
{ required: true, message: "请选择二级类目", trigger: "blur" }
],
categoryIdLevel5:[
{ required: true, message: "请选择三级类目", trigger: "blur" }
],
otc:[
{ required: true, message: "请选择是否是处方", trigger: "blur" }
],
specification_url:[
{ required: true, message: "请上传药品说明书", trigger: "blur" }
],
barCode: [
{ required: false, message: "请输入条形码", trigger: "blur" },
{ validator: checkBarcode, trigger: "blur" }
],
optPrice: [
{ required: true, message: "请输入零售价", trigger: "blur" },
],
dynamicFlag: [
{ required: true, message: "请选择内容发布权", trigger: "blur" },
]
},
imgMouseOver1: false,
uploadImgMessage1: false,//未上传图片,校验提示语
isMedic:false,
isMedic:false, // 商品类型选择【药品】时!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
isCheckServe: false, // 商品类型选择【检测服务】时!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
inputType: ''
}
},
computed: {
...mapGetters(["goodsInfo"])
},
created() {
vm = this;
const { id, storeId, goodsType, inputType } = this.$route.query;
this.goodsType = goodsType;
this.storeId = storeId;
this.inputType = inputType || '';
// this.formData = originForm;
// this.formData1 = originForm1;
// this.formData2 = originForm2;
this.rules = originRules;
this.rules1 = originRules1;
this.rules2 = originRules2;
// this.rules2.barCode = originRules.barCode;
const {id, storeId} = this.$route.query
this.jumPathThird = '/goods-manage?storeId='+storeId
//this.jumPathThird = '/create-good?id=add&storeId=46'
this.title = id == 'add' ? '新增商品' : '编辑商品'
this.curmbThird = this.title
this.title = id == 'add' ? '新增商品' : '编辑商品';
this.isEdit = id != 'add';
this.curmbThird = this.title;
this.formData.storeId = Number(storeId) || '';
this.getLever(0,1)
dosageAll().then((res)=>{
......@@ -669,25 +869,62 @@
this.allDeparts = res.data
})
if(id != 'add'){
// let goods = Object.assign(this.goodsInfo,{})
// this.formData = {...goods}
// console.log(goods)
this.getDetailByEdit(id)
this.getDetailByEdit(id, goodsType);
getCheckPackageIdList().then(res=>{
console.log(`getCheckPackageIdList`, res);
this.checkPackageIdList = res.data;
})
}
},
methods: {
//eidt状态
getDetailByEdit(id){
let parm = {
async getDetailByEdit(id, goodsType){
this.goodsId = id ;
if(goodsType == 337){
this.isCheckServe = true;
const res = await getGoodDetails(id);
console.log(`========================>`, res);
if(res.code != '000000'){
return this.$message({
message: res.message,
type: 'error'
});
};
closeLoading(this);
if(res.data == null){
return this.$message({
type: 'error'
});
};
const { goodsInfo, medicalService } = res.data;
this.formData = {...this.formData, ...goodsInfo};
this.formData2 = medicalService;
this.formData = { ...this.formData, ...this.formData2 };
this.$set(this.formData2, 'suitableArr', this.formData.suitable.split(','));
this.$set(this.formData, 'suitableArr', this.formData.suitable.split(','));
this.formData.optPrice = this.formData.costPrice/100;
this.formData.stock = this.formData.goodsStock;
this.fileGoodsList = this.getImges(goodsInfo.goodsHeaderImages,1);
this.goodsCheckList = this.getImges(medicalService.goodsCheckImages, goodsType);
this.rules = {
...this.rules,
...originRules
};
}else{
this.isMedic = goodsType == '5';
const res = await getGoodsList({
goodsIdList:[id],
goodsName :'',
goodsType :'',
pageNo:1,
pageSize: 10,
}
getGoodsList(parm).then((res)=>{
});
if(res.code != '000000'){
return this.$message({
message: res.message,
......@@ -697,38 +934,43 @@
closeLoading(this);
if(res.data == null){
return this.$message({
message: '数据加载失败',
type: 'error'
});
}
const {goodsList} = res.data
this.formData = Object.assign(this.formData,{...goodsList[0]})
const {goodsList} = res.data;
this.formData1 = goodsList[0];
this.formData = goodsList[0];
this.formData.optPrice = this.formData.costPrice/100;
this.fileGoodsList = this.getImges(goodsList[0].goodsImgList,1)
this.fileIntrList = this.getImges(goodsList[0].medicImgList,2)
this.isMedic = this.formData.goodsType == 5 ? true : false
this.formData.stock = this.formData.goodsStock
console.log(this.formData.otc)
this.formData.otc1 = this.formData.otc ? '1' : '0'
this.fileGoodsList = this.getImges(goodsList[0].goodsImgList,1);
this.fileIntrList = this.getImges(goodsList[0].medicImgList,2);
this.formData.stock = this.formData.goodsStock;
this.formData.otc1 = this.formData.otc ? '1' : '0';
if(this.isMedic){
this.getLever(5,2,1)
}else{
this.getLever(goodsType,1);
}
const {categoryIdLevel2,categoryIdLevel3,categoryIdLevel4,categoryIdLevel5} = this.formData
if(categoryIdLevel2 != -1){
if(categoryIdLevel2 && categoryIdLevel2 != -1){
this.getLever(categoryIdLevel2,3,1)
}
if(categoryIdLevel3 != -1){
if(categoryIdLevel3 && categoryIdLevel3 != -1){
this.getLever(categoryIdLevel3,4,1)
}
if(categoryIdLevel4 != -1){
if(categoryIdLevel4 && categoryIdLevel4 != -1){
this.getLever(categoryIdLevel4,5,1)
}
console.log(this.formData)
//this.totalRows = res.data.totalCount
})
},
this.rules = {
...this.rules,
...originRules
};
this.barAndGoodsFlag = this.formData1.medicalCategoryId ? true : false;
}
console.log(this.formData);
},
getImges(d,type){
let a = [];
if(d.length > 0){
......@@ -736,24 +978,31 @@
a.push({
url:type==1 ?d[i].goodsImgUrl :d[i].imageUrl,
imageUrl:type==1 ?d[i].goodsImgUrl :d[i].imageUrl,
goodsImgUrl:type==1 ?d[i].goodsImgUrl :d[i].imageUrl,
id: d[i].id,
imageSort: d[i].imageSort,
imgSort: d[i].imgSort,
imageType: type == 1 ? d[i].imgType : d[i].imageType,
})
}
}
return a;
},
// 修改条形码
changeBarCode(val) {
this.$refs.formData1.resetFields();
this.formData1.barCode = val;
this.goodDisabled = false;
},
//快速录入
fastInput(){
fastInput(type){
///medications/query/{approvalnumber}
if(this.formData.barCode == ''){
this.$refs.formData.validateField("barCode")
if(this.formData1.barCode == ''){
this.$refs.formData1.validateField("barCode")
return;
}
// this.GET("store/medications/query/"+this.formData.approvalNumber).then(res => {
this.GET(`store/medications/query/barcode/${this.formData.barCode}`).then(res => {
this.GET(`store/medications/query/barcode/${this.formData1.barCode}`).then(res => {
console.log(res)
if(res.code != '000000'){
return this.$message({
......@@ -768,8 +1017,8 @@
});
}
const {imageList,medicationInfo} = res.data
this.formData.medicationId = medicationInfo.id;
this.formData.approvalNumber = medicationInfo.approvalNumber;
this.formData1.medicationId = medicationInfo.id;
this.formData1.approvalNumber = medicationInfo.approvalNumber;
const {medicCommonName,
medicGoodsName,
dosageId,
......@@ -809,21 +1058,52 @@
if(categoryIdLevel4 != -1){
this.getLever(categoryIdLevel4,5,1)
}
this.formData = Object.assign(this.formData,fastParm)
this.formData1 = Object.assign(this.formData1,fastParm)
this.formData.otc1 = this.formData.otc ? '1' : '0'
this.formData1.otc1 = this.formData1.otc ? '1' : '0'
this.goodDisabled = medicationInfo.medicalCategoryId ? true : false
this.fileIntrList = this.getImges(imageList,2)
});
},
getGoodsTypes(id,type){
if(id == 5 ){
this.isMedic = true;
this.getLever(id,type)
}else{
getGoodsTypes(goodsType,type){
this.goodsType = goodsType;
// if(goodsType == 5){
// this.isMedic = true;
// this.isCheckServe = false;
// this.getLever(goodsType,type);
// } else if(goodsType == 337){
// this.isMedic = false;
// this.isCheckServe = true;
// getHospitalInfoByStoreId(this.storeId).then(({code,message,data})=>{
// this.formData2.hospitalName = data.hospital;
// })
// getCheckPackageIdList().then(res=>{
// console.log(`getCheckPackageIdList`, res);
// this.checkPackageIdList = res.data;
// })
// }else{
// this.isMedic = false;
// this.isCheckServe = false;
// };
if(goodsType == 337){
this.isMedic = false;
this.isCheckServe = true;
getHospitalInfoByStoreId(this.storeId).then(({code,message,data})=>{
this.formData2.hospitalName = data.hospital;
})
getCheckPackageIdList().then(res=>{
console.log(`getCheckPackageIdList`, res);
this.checkPackageIdList = res.data;
})
}else{
this.isMedic = goodsType == '5';
this.isCheckServe = false;
this.getLever(goodsType,type);
}
console.log(this.formData);
},
defaultArr(){
let a = [
......@@ -834,7 +1114,6 @@
]
return a
},
//获取分类
getLever(id,type,parm){
......@@ -849,7 +1128,7 @@
//this.twoLever = res.data || this.defaultArr()
res.data = res.data.length > 0 ? res.data.concat([{categoryName: "其他",id:-1}]) : this.defaultArr()
this.twoLever = res.data
console.log(this.twoLever)
// console.log(this.twoLever)
}else if(type == 3){
// res.data = res.data.push({categoryName: "其他",id:-1})
res.data = res.data.length > 0 ? res.data.concat([{categoryName: "其他",id:-1}]) : this.defaultArr()
......@@ -877,7 +1156,6 @@
}
});
},
updateStock(){
let r = /^\+?[1-9][0-9]*$/;
//造假 接口来了删掉
......@@ -912,8 +1190,6 @@
//this.formData.goodsStock = this.formData.stock
this.stockDio = false
},
changeStock(type){
if(this.formData.stock == 0 && type == 1){
return;
......@@ -929,16 +1205,16 @@
}
this.stockDio = true
},
complete() {
let formName = "formData";
// let goodsImgList = this.fileGoodsList.map((item, index) => {
// item.imageSort = index+1;
// })
// console.log(this.fileGoodsList)
// let specificationImgList = this.fileIntrList.map((item, index) => {
// item.imageSort = index+1;
// })
let formNameList = ['formData', 'formData1', 'formData2'];
// let formName = "formData";
if(this.goodsType == 337 ){
formNameList = ['formData', 'formData2'];
this.formData = { ...this.formData, ...this.formData2 };
}else{
formNameList = ['formData', 'formData1'];
this.formData = { ...this.formData, ...this.formData1 };
}
for(let i=0;i<this.fileGoodsList.length;i++){
this.fileGoodsList[i].imageSort = i+1
}
......@@ -946,52 +1222,74 @@
this.fileIntrList[j].imageSort = j+1
}
this.formData.goodsImages = this.fileGoodsList;
this.formData.specificationImages = this.fileIntrList;
this.isgoodsImages = this.formData.goodsImages.length == 0 ? false :true;
// this.isSpecification_url = this.formData.specificationImages.length == 0 ? false : true
this.formData.categoryId = this.formData.goodsType
this.formData.otc = this.formData.otc1 == 1 ? true : false
this.isgoodStock = this.formData.stock > 0 ? true : false
console.log(this.isgoodStock)
this.formData.goodsId = this.goodsId;
// console.log(this.isgoodStock);
this.formData.goodsImages = this.fileGoodsList;
this.formData.goodsHeaderImages = this.fileGoodsList;
this.formData.specificationImages = this.fileIntrList;
this.isgoodsImages = this.formData.goodsImages.length == 0 ? false :true;
// 如果是【药品】类型的商品
if(this.isMedic){
if(!this.isgoodsImages){
return;
}
// if(!this.isSpecification_url){
// return;
// }
}
// 如果是【检测服务】类型的商品
if(this.isCheckServe){
this.formData.goodsCheckImages = this.goodsCheckList;
const { suitableArr } = this.formData2;
this.formData2.suitable = this.formData.suitable = suitableArr.join(',');
this.formData.medicalServiceId = this.formData.medicationId;
}
if(!this.isgoodStock){
return;
}
this.$refs[formName].validate((valid) => {
if (valid) {
//alert('submit!');
this.updateGoodsInfo();
} else {
console.log('error submit!!');
let isTrue = false;
formNameList.map(item=>{
this.$refs[item].validate((valid) => {
isTrue = valid;
if (!valid) return false;
});
});
if(!isTrue){
return false;
}else{
this.formData.costPrice = this.formData.optPrice*100
this.formData.hasChanged = true;
this.formData.inputType = this.inputType;
this.updateGoodsInfo();
}
});
},
// this.$refs[formName].validate((valid) => {
// if (valid) {
// //alert('submit!');
// this.formData.costPrice = this.formData.optPrice*100
// this.formData.hasChanged = true;
// this.updateGoodsInfo();
// } else {
// console.log('error submit!!');
// return false;
// }
// });
},
//更新商品
updateGoodsInfo(){
//this.formData.incrStock = 1000
this.formData.costPrice = this.formData.optPrice*100
this.formData.hasChanged = true;
console.log('提交值',this.formData);
updateGoods(this.formData).then((res)=>{
const submieFn = this.isCheckServe ? updateGoodsV2 : updateGoods;
submieFn(this.formData).then((res)=>{
if (res.code !== '000000') {
// return this.$message.error(res.message);
return this.$message({
message: res.message,
type: 'error'
});
}
vm.$message.success("操作成功");
this.$router.push({
path: '/goods-manage',
......@@ -1012,12 +1310,7 @@
const isLt200k = file.size / 1024 < 200;
if (picTypes.indexOf(file.type) == -1) {
return this.$message.error("请上传jpeg或png格式的图片");
}
// if (!isLt200k) {
// return vm.$message.error("图片大小请控制在200kb以内");
// }
let _img = new FileReader();
_img.readAsDataURL(file);
......@@ -1028,39 +1321,50 @@
image.onload = function () {
let _this = this;
console.log(_this.width,_this.height)
// if (_this.width != fileLimit.width || _this.height != fileLimit.height) {
//if (_this.width == 750 && _this.height == 420) {
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;
// }
let len = vm.fileGoodsList.length;
vm.fileGoodsList.push({url:path.fullPath,imageUrl:path.fullPath,imageName:'',imageSort: len+1,imageType: 2,id: null,})
//vm.formData.goodsImages = path.fullPath
vm.fileGoodsList.push({ url: path.fullPath, goodsImgUrl: path.fullPath,imageUrl:path.fullPath, imgSort: len+1,imageSort: len+1, goodsId: vm.formData.goodsId });
// vm.fileGoodsList.push({url:path.fullPath,goodsImgUrl: path.fullPath,imageUrl:path.fullPath,imageName:'',imageSort: len+1,imageType: 2,id: null,})
vm.$message.success("上传成功");
});
// } else {
// return vm.$message.error("图片尺寸不符合规范,请根据规范上传图片");
// }
};
};
// openLoading(vm);
// doUpload(vm, file, getFilePath(file, null), "preview4", "progress1", 1).then(function (path) {
// closeLoading(vm);
// console.log('上传成功后路径', path);
// vm.formData.goodsImages = path.fullPath
// vm.$message.success("上传成功");
// });
},
// 上传检测说明图
beforeUploadPic2(file) {
if(this.fileGoodsList.length > 10){
return ;
}
let vm = this;
let picTypes = ['image/jpeg','image/png']
const isLt200k = file.size / 1024 < 200;
if (picTypes.indexOf(file.type) == -1) {
return this.$message.error("请上传jpeg或png格式的图片");
}
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;
console.log(_this.width,_this.height)
openLoading(vm);
doUpload(vm, file, getFilePath(file, null), "preview4", "progress1", 1).then(function (path) {
closeLoading(vm);
console.log('上传成功后路径', path);
let len = vm.goodsCheckList.length;
vm.goodsCheckList.push({ url: path.fullPath, imageUrl: path.fullPath, imageSort: len+1, id: vm.formData.goodsId });
vm.$message.success("上传成功");
});
};
};
},
//上传药品说明
beforeUploadPic1(file,type) {
......
const form1 = {
categoryIdLevel2: '',
categoryIdLevel3: '',
categoryIdLevel4: '',
categoryIdLevel5: '',
medicCommonName:'',
medicGoodsName:'',
size:'',
dosageId:null,
usage:'',
otc1:'1',
approvalNumber:'',
manufacturer:'',
department:'',
expiredTime:'',
specification_url:'',
treatDisease:'',
barCode: '',
modelNo: '', // 型号
standardNo: '', // 执行标准号
}
const form2 = {
checkPackageId: '', // 检测登记表,暂无,先隐藏!!!!!!!!!!!
checkName: '',
hospitalName: '',
hospitalType: '',
hospitalId: 0,
medicalServiceId: 0, // 新增时传0,更新时必需>0
goodsCheckImages: [],
checkItem: '',
checkStandard: '',
useCount: 1,
checkType: '',
suitable: '',
suitableArr: '',
accessorialService: '',
endTime: '',
barCode: '',
// medicalServiceId: ''
}
const form = {
// medicationId: 0,
// categoryId:'',
// otc:false,
// discountPrice:'',
// specificationImages:[],
// goodsId: 0, // 新增时传0,更新时必需>0
id: 0,
goodsName:'',
goodsDescription:'',
goodsHeaderImages:[],
goodsType:'',
barCode: '',
costPrice:0,
decrStock:0,//减少库存
incrStock:'',//增加库存
storeId: '',
optPrice:'',
goodsStock:0,
stock: 0,
externalGoodsCode: ''
};
export const originForm1 = form1;
export const originForm2 = form2;
export const originForm = form;
\ No newline at end of file
......@@ -40,7 +40,7 @@
<el-col :span="12" style="text-align: right">
<el-button type="primary" size="small" @click="exportOpt">批量导出商品</el-button>
<el-button type="primary" size="small" @click="batchOpt(3)">批量导入商品</el-button>
<el-button v-if="isSSO" type="primary" size="small" @click="batchOpt(3)">批量导入商品</el-button>
<el-button type="primary" size="small" @click="edit('add')">新建单个商品</el-button>
</el-col>
</el-row>
......@@ -57,7 +57,7 @@
<el-table-column prop="goodsName" label="商品名称" width="140" align="center" show-overflow-tooltip></el-table-column>
<el-table-column prop="type" label="商品类型" width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.goodsType | rangeType }}</span>
<span>{{ scope.row.goodsTypeStr }}</span>
</template>
</el-table-column>
<el-table-column prop="status" label="商品状态" width="100" align="center">
......@@ -192,7 +192,10 @@
},{
categoryName: "药品",
id: 5,
}]
},{
categoryName: "检测服务",
id: 337,
}];
export default {
components: {
BreadCrumb
......@@ -229,7 +232,8 @@
typeList: [],
//uploadUrl:getBaseUrl('store/goods/import'),
postData:{},
validateFailedList:[]
validateFailedList:[],
isSSO: 0, // 是否是sso后台管理员 1是 0否
}
},
created() {
......@@ -319,7 +323,7 @@
if(res.code != '000000'){
return self.$message({
message: '上传失败,请重新上传!',
message: res.message || '上传失败,请重新上传!',
type: 'error'
});
}
......@@ -339,12 +343,15 @@
}
}).catch(err => {
console.log(`上传报错`, err);
})
};
reader.readAsDataURL(file);
},
uploadTemp(){
let url = "https://file.yunqueyi.com/trade/store/goods_import_template.xlsx"
// let url = "https://file.yunqueyi.com/trade/store/goods_import_template.xlsx"
const url = 'https://file.yunqueyi.com/trade/store/20210129/goods_import_template.xlsx';
window.location.href = url
},
getLever(id=0){
......@@ -372,6 +379,7 @@
}
this.tableData = res.data.goodsList
this.totalRows = res.data.totalCount
this.isSSO = res.data.isSSO;
})
},
//获取商品id
......@@ -413,13 +421,14 @@
}
},
edit(row){
const { goodsType } = row;
let url = ''
if(row == 'add'){
url = `/create-good?id=add&storeId=${this.searchForm.storeId}`
url = `/create-good?id=add&storeId=${this.searchForm.storeId}&inputType=1`
}else{
url = `/create-good?id=${row.goodsId}&storeId=${this.searchForm.storeId}`
url = `/create-good?id=${row.goodsId}&storeId=${this.searchForm.storeId}&goodsType=${goodsType}`
}
this.$store.dispatch('goodsManage/changeGoodsInfo', {...row});
// this.$store.dispatch('goodsManage/changeGoodsInfo', {...row});
this.$router.push({
path: url
})
......
......@@ -213,7 +213,7 @@
@close="showTuiDialog = false"
width="385px"
>
<el-form ref="tuiForm" :model="tuiForm" label-width="120px">
<el-form ref="tuiForm" :rules="rules" :model="tuiForm" label-width="120px">
<el-form-item label="退款退货方式:">
<el-select v-model="tuiForm.type" placeholder="请选择退货方式">
<el-option
......@@ -228,6 +228,15 @@
<el-form-item label="退款金额" prop="name">
<el-input v-model="tuiForm.money" :disabled="true"></el-input>
</el-form-item>
<el-form-item label="退款对象" prop="userName">
<el-select v-model="userType" placeholder="请选择退款对象">
<el-option
v-for="item in userTypes"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="confirmTui">完成</el-button>
......@@ -286,6 +295,9 @@
orderNum: [
{ required: true, message: '请输入快递单号', trigger: "blur"},
],
userName: [
{ required: true, message: '请选择退款对象', trigger: "blur"},
],
},
showTuiDialog: false,
tuiForm: {
......@@ -309,10 +321,22 @@
value: 2,
disabled: true
}
],
userType: "", // 1.开单医生, 2.支付用户
userTypes: [
{
label: '开单医生',
value: 1,
},
{
label: '支付用户',
value: 2,
},
]
}
},
created() {
console.log("order created() : enter");
this.searchForm.storeId = this.$route.query.storeId || 0,
this.searchList();
},
......@@ -481,7 +505,11 @@
this.showTuiDialog = true;
},
confirmTui() {
refundApply({ orderId: this.tuiForm.order.id }).then(res => {
if (this.userType == null || this.userType == "") {
this.$message.error("请选择退款对象");
return;
}
refundApply({ orderId: this.tuiForm.order.id, userType: this.userType }).then(res => {
if (res.code == '000000') {
this.$message.success('操作成功');
this.showTuiDialog = false;
......
const checkBarcode = (rule, value, cb) => {
const valedBarcode = new RegExp("[\\u4E00-\\u9FFF]+","g");
if(value && valedBarcode.test(value)) cb(new Error('条形码不能输入中文'));
cb();
};
const checkNumber = (rule, value, cb) => {
const val = String(value);
const isInt = /^([1-9][0-9]*)$/;
if(val && !isInt.test(val)) cb(new Error('请输入正整数'));
cb();
};
const checkProjectStr = (rule, value, callback) => {
if (value.indexOf("\\") != -1) {
//存在
callback(new Error("请勿输入字符“ \\ "));
} else if (value.indexOf(".") != -1) {
callback(new Error("请勿输入字符“ . "));
} else {
callback();
}
};
const rules1 = {
barCode: [
{ required: true, message: "请输入条形码", trigger: "submit" },
{ validator: checkBarcode, trigger: "submit" }
],
medicCommonName:[
{ required: true, message: "请输入商品通用名称", trigger: "blur" }
],
// size:[
// { required: true, message: "请输入商品规格", trigger: "blur" }
// ],
// manufacturer:[
// { required: true, message: "请输入生产厂家", trigger: "blur" }
// ],
approvalNumber:[
{ required: true, message: "请输入批准文号", trigger: "blur" }
],
// dosageId:[
// { required: true, message: "请选择剂型", trigger: "change" }
// ],
categoryIdLevel2:[
{ required: true, message: "请选择药品类型", trigger: "blur" }
],
categoryIdLevel3:[
{ required: true, message: "请选择一级类目", trigger: "blur" }
],
categoryIdLevel4:[
{ required: true, message: "请选择二级类目", trigger: "blur" }
],
categoryIdLevel5:[
{ required: true, message: "请选择三级类目", trigger: "blur" }
],
specification_url:[
{ required: true, message: "请上传药品说明书", trigger: "blur" }
],
// otc:[
// { required: true, message: "请选择是否是处方", trigger: "blur" }
// ],
dynamicFlag: [
{ required: true, message: "请选择内容发布权", trigger: "blur" },
],
}
const rules2 = {
// barCode: [
// { required: true, message: "请输入条形码", trigger: "submit" },
// { validator: checkBarcode, trigger: "submit" }
// ],
checkName: [{ required: true, message: "请输入检测名称", trigger: "blur" }],
hospitalName: [{ required: true, message: "请输入医疗机构名称", trigger: "blur" }],
hospitalType: [{ required: true, message: "请选择医疗机构类型", trigger: "blur" }],
checkItem: [{ required: true, message: "请输入检测项目", trigger: "blur" }],
checkStandard: [{ required: true, message: "请输入检测指标", trigger: "blur" }],
useCount: [{ required: true, message: "请输入使用人数", trigger: "submit" },{validator: checkNumber, trigger: "submit"}],
checkType: [{ required: true, message: "请选择检测类型", trigger: "blur" }],
suitableArr: [{ required: true, message: "请选择适用人群", trigger: "blur" }],
endTime: [{ required: true, message: "请选择商品使用日期", trigger: "blur" }],
// goodsCheckImages: [
// { required: true, message: "请上传检测说明图", trigger: "blur" }
// ],
}
const rules = {
barCode: [
{ required: true, message: "请输入条形码", trigger: "submit" },
{ validator: checkBarcode, trigger: "submit" }
],
goodsName: [
{ required: true, message: "请输入商品名称", trigger: "submit" },
{ validator: checkProjectStr, trigger: "submit" }
],
goodsHeaderImages: [
{ required: true, message: "请上传商品头图", trigger: "blur" }
],
goodsType:[
{ required: true, message: "请选择商品类型", trigger: "change" }
],
optPrice: [
{ required: true, message: "请输入零售价", trigger: "blur" },
],
// introduce: [
// { required: true, message: "请输入圈子介绍", trigger: "blur" },
// {
// min: 2,
// max: 40,
// message: "输入长度为2-40的内容,可包含中英文、数字及特殊符号",
// trigger: "blur"
// },
// { validator: checkProjectStr, trigger: "blur" }
// ],
}
export const originRules1 = rules1;
export const originRules2 = rules2;
export const originRules = rules;
\ No newline at end of file
<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>
......@@ -7,7 +7,8 @@
<p class="title">新建店铺</p>
</el-col>
<el-col :span="4" style="text-align: right">
<el-button size="small" type="primary" @click="complete">完成</el-button>
<el-button size="small" type="primary" :disabled="storeData.tradeStore.storeType == 3" @click="complete">完成</el-button>
<el-button size="small" type="primary" @click="back">返回</el-button>
</el-col>
</el-row>
<el-form
......@@ -35,7 +36,7 @@
class="bg-img"
/>
<img v-if="!formData.storeLogo" class="bg-img" src="../../assets/image/small.png" />
<div
<div v-if="storeData.tradeStore.storeType == 3"
class="img-delete"
v-show="imgMouseOver1"
@click.stop="deleteImg('storeLogo')"
......@@ -55,6 +56,7 @@
<el-form-item label="店铺名称" prop="storeName">
<el-col :span="10">
<el-input
:disabled="storeData.tradeStore.storeType == 3"
size="small"
v-model="formData.storeName"
placeholder="请输入店铺名称"
......@@ -67,6 +69,7 @@
<el-form-item label="店铺简介" prop="storeDescription">
<el-col :span="10">
<el-input
:disabled="storeData.tradeStore.storeType == 3"
type="textarea"
rows="4"
maxlength="400"
......@@ -258,6 +261,7 @@
<el-col :span="10">
<el-form-item label="医生姓名" prop="docName" class="required-label">
<el-input
:disabled="storeData.tradeStore.storeType == 3"
type="text"
maxlength="50"
size="small"
......@@ -443,7 +447,7 @@
curmbFirst: '云鹊店铺',
curmbSecond: '新建店铺',
isDisabled: false,
storeData: {},
storeData: null,
typeList: [
{
label: '供货商',
......@@ -597,7 +601,7 @@
created() {
vm = this;
this.formData.storeId = this.$route.query.storeId || null;
this.storeData = this.$route.query.storeData || {};
this.storeData = this.$route.query.storeData || null;
if (this.formData.storeId) {
this.curmbSecond = '编辑店铺';
......@@ -719,6 +723,13 @@
})
}
},
// 返回
back() {
this.$router.push({
path: '/shop-list'
})
},
checkPhone(val) {
if(!(/^1[3456789]\d{9}$/.test(val))) {
return false;
......
......@@ -74,9 +74,10 @@
<el-table-column label="操作" min-width="230" align="center" fixed="right">
<template slot-scope="scope">
<div>
<el-button @click="editShop(scope.row)" type="text" size="small">编辑</el-button>
<el-button @click="editShop(scope.row)" type="text" size="small">{{scope.row.tradeStore.storeType == 3 ? '查看' : '编辑'}}</el-button>
<el-button @click="shopManage(scope.row)" type="text" size="small">商品管理</el-button>
<el-button @click="orderManage(scope.row)" type="text" size="small">订单管理</el-button>
<el-button v-if="storageIdType == 1 && (scope.row.tradeStore.storeType == 3 && scope.row.tradeStore.storeStatus == 1)" @click="closeShopAction(scope.row)" type="text" size="small">关闭店铺</el-button>
</div>
</template>
</el-table-column>
......@@ -99,7 +100,7 @@
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import { queryStore, queryShopAuth } from '@/utils/shop';
import { queryStore, queryShopAuth, closeShop } from '@/utils/shop';
export default {
components: {
BreadCrumb
......@@ -142,10 +143,15 @@
}, {
label: '医生小店',
value: 3,
}]
}],
idType: 0,
storageIdType: 0,
}
},
created() {
// this.idType = localStorage.getItem("storageIdType");
this.storageIdType = localStorage.getItem("storageIdType") - 0;
console.log(this.storageIdType);
this.getAddAuth();
this.searchList();
},
......@@ -238,6 +244,29 @@
this.searchForm.pageNo = val;
this.searchList();
},
// 关闭医生小店
closeShopAction(row) {
this.$confirm('确定要关闭店铺吗', '', {
confirmButtonText: '确 定',
cancelButtonText: '取 消',
type: 'warning'
}).then(() => {
closeShop(row.tradeStore.id).then(res => {
if (res.code == '000000') {
if(res.data.status == 0) {
this.$message.error(res.data.message);
} else {
this.searchList();
}
} else {
this.$message.error(res.message);
}
})
}).catch( () => {
// this.$message.error('操作失败');
})
},
},
filters: {
storeTypeFormat: function(value){
......
<template>
<div class="video-index-wrapper">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="yqrange-index-content screenSet">
<el-form ref="searchForm" :model="searchForm" label-suffix=":" :inline="true" size="small">
<el-row type="flex" style="margin-top: 10px">
<el-col :span="6">
<el-form-item label="圈子名称">
<el-input v-model="searchForm.circleName" clearable placeholder="请输入圈子名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="视频描述">
<el-input v-model="searchForm.desc" clearable placeholder="请输入视频描述"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发布者">
<el-input v-model="searchForm.publisherName" clearable placeholder="请输入发布者"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="视频状态">
<el-select
v-model="searchForm.statusVideo"
placeholder="请选择视频状态"
clearable
style="width: 180px">
<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-row>
<el-row style="margin-top: 10px;">
<el-col :span="24">
<el-form-item label="快捷查询">
<span class="search-btn" :class="{'active-search' : isActive1}" @click="fastSearch(1)">疑似违规({{breakRuleTotal}})</span>
<span class="search-btn" :class="{'active-search' : isActive2}" @click="fastSearch(2)">机审通过待人审({{humanCheckTotal}}</span>
</el-form-item>
<el-form-item label="发布开关">
<el-switch
class="switch-scope"
v-model="publishValue"
active-color="#449284"
inactive-color="#E6A23C"
active-text="机审通过发布"
inactive-text="人审通过发布"
:active-value="1"
:inactive-value="2"
@change="changeSwitch">
</el-switch>
</el-form-item>
<div class="switch-tip">
说明:“机审通过发布”状态时,机审通过即发布成功,公开视频;
<br/>切换为人审通过发布时,需人工审核通过后才可公开。
</div>
</el-col>
<el-col :span="24" 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="circleName" label="圈子名称" align="center"></el-table-column>
<el-table-column prop="desc" label="视频描述" align="center" min-width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="createdTime" label="上传时间" align="center">
<template slot-scope="scope">
<span>{{ scope.row.createdTime | liveDateFilter }}</span>
</template>
</el-table-column>
<el-table-column prop="publisherName" label="发布者" align="center"></el-table-column>
<el-table-column prop="publisherAddress" label="所在省市" align="center" min-width="100" show-overflow-tooltip></el-table-column>
<el-table-column prop="status" label="视频状态" align="center">
<template slot-scope="scope">
<span>{{ scope.row.status | videoStatusFilter }}</span>
</template>
</el-table-column>
<el-table-column prop="modifiedTime" label="更新时间" align="center">
<template slot-scope="scope">
<span>{{ scope.row.modifiedTime | liveDateFilter }}</span>
</template>
</el-table-column>
<el-table-column prop="reviserName" label="最后修改人" align="center"></el-table-column>
<el-table-column label="操作" min-width="200" align="center">
<template slot-scope="scope">
<el-button @click="visitDetail(scope.row)" type="text" size="small">查看</el-button>
<el-button @click="handlerVideo(scope.row,3)" v-if="scope.row.status == 2 || scope.row.status == 6" type="text" size="small">下线</el-button>
<el-button @click="handlerVideo(scope.row,1)" v-if="scope.row.status == 3 || scope.row.status == 4 || scope.row.status == 5" type="text" size="small">通过</el-button>
<el-button @click="handlerVideo(scope.row,2)" v-if="scope.row.status == 3 || scope.row.status == 4" 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>
</div>
<short-video-detail
:showVideoDetail="showVideoDetail"
:id="videoId"
@closeCheckDetail="handlerClose">
</short-video-detail>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import { getVideoList, getSwitch, setSwitch, manualCheck } from '@/utils/shortvideo/videoApi';
import ShortVideoDetail from '@/components/shortvideo/shortVideoDetail';
export default {
components: {
BreadCrumb,
ShortVideoDetail,
},
data(){
return{
curmbFirst: '短视频管理',
searchForm: {
circleName:"",//圈子名称
desc: '',//视频描述
publisherName: '',//发布人姓名
status: null,// 视频状态 1机审中 2机审通过已发布 3疑似违规 4机审通过待人审 5机审拒绝 6人审通过已发布 7已下线 8已删除
statusVideo: null,
pageNo: 1,
pageSize: 10,
},
publishValue: null,
publishValueCopy: null,
totalRows: 0,
tableData: [],
breakRuleTotal: 0,//疑似违规总数
humanCheckTotal: 0,//机审通过待人审总数
showVideoDetail: false,
statusList: [
{
value: 1,
label: "机审中"
},
{
value: 2,
label: "机审通过已发布"
},
{
value: 3,
label: "疑似违规"
},
{
value: 4,
label: "机审通过待人审"
},
{
value: 5,
label: "机审拒绝"
},
{
value: 6,
label: "人审通过已发布"
},
{
value: 7,
label: "已下线"
},
{
value: 8,
label: "已删除"
},
],
idType: "",
videoId: null,
isActive1: false,
isActive2: false,
}
},
created() {
this.search();
this.getSwitchStatus();
},
methods: {
changeSwitch(val) {
setSwitch(val).then((res) => {
if(res.code == "000000") {
if (res.data == 1) {
this.$message.success('操作成功,已切换为“机审通过发布”')
}else if (res.data == 2) {
this.$message.success('操作成功,已切换为“人审通过发布”')
}
this.publishValueCopy = res.data;
}else {
this.$message.error('状态切换失败')
this.publishValue = this.publishValueCopy;
}
}).catch((error) => {
this.$message.error("请重试");
this.publishValue = this.publishValueCopy;
})
},
search(){
this.searchForm.pageNo = 1;
if (this.isActive1 || this.isActive2) {
this.isActive1 = false;
this.isActive2 = false;
this.searchForm.status = null;
if (this.searchForm.statusVideo) {
this.searchForm.status = this.searchForm.statusVideo;//把搜索框里的视频状态置为空
}
}else {
if (this.searchForm.statusVideo) {
this.searchForm.status = this.searchForm.statusVideo;//把搜索框里的视频状态置为空
}else {
this.searchForm.status = null;
}
}
this.searchList();
},
getSwitchStatus() {
getSwitch().then((res) => {
if(res.code == "000000") {
// 1机审通过发布 2人审通过发布
this.publishValue = res.data;
this.publishValueCopy = res.data;
}
}).catch((error) => {
this.$message.error("请重试");
})
},
searchList() {
openLoading(this);
let params = this.searchForm;
getVideoList(params).then((res) => {
closeLoading(this);
if(res.code == "000000") {
this.tableData = res.data.liteAvList;
this.totalRows = res.data.total;
this.breakRuleTotal = res.data.breakRuleTotal;
this.humanCheckTotal = res.data.humanCheckTotal;
} else {
this.tableData = [];
}
}).catch((error) => {
this.$message.error("请重试");
})
},
//快捷查询
fastSearch(type) {//type 1疑似违规,2机审通过待人审
if (type == 1) {
if (!this.isActive1) {
this.searchForm.status = 3;
this.searchForm.statusVideo = null;
this.searchForm.circleName = "";
this.searchForm.desc = "";
this.searchForm.publisherName = "";
this.searchForm.pageNo = 1;
this.searchList();
this.isActive1 = true;
this.isActive2 = false;
}else {
this.resetForm();
}
}else if (type == 2) {
if (!this.isActive2) {
this.searchForm.status = 4;
this.searchForm.statusVideo = null;
this.searchForm.circleName = "";
this.searchForm.desc = "";
this.searchForm.publisherName = "";
this.searchForm.pageNo = 1;
this.searchList();
this.isActive1 = false;
this.isActive2 = true;
}else {
this.resetForm();
}
}
},
resetForm() {
this.searchForm.circleName = "";
this.searchForm.desc = "";
this.searchForm.publisherName = "";
this.searchForm.status = null;
this.searchForm.statusVideo = null;
this.search();
},
//查看
visitDetail(row) {
this.showVideoDetail = true;
this.videoId = row.id;
},
handlerClose() {
this.showVideoDetail = false;
},
//人工操作通过,拒绝,下线
handlerVideo(row, type) {//type:1通过,2拒绝,3下线
let typeContent = {
1: '确定审核通过该视频?',
2: '确定审核拒绝该视频?',
3: '确定下线该视频?'
};
let content = typeContent[type];
let setStatus = null;
if(type == 1) {
setStatus = 6;
}else if (type == 2 || type == 3) {
setStatus = 7;
}
let params = {
liteAvId: row.id,
status: setStatus,
};
this.$confirm(`${content}`, '', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
customClass: 'shortvideo-make-box',
}).then(() => {
this.updateVideoStatus(params,type);
// confirm
}).catch(() => {
// cancel
});
},
//更新审核状态
updateVideoStatus(params, type){
openLoading(this);
let successContent = {
1: '审核通过',
2: '审核拒绝',
3: '下线成功'
}
manualCheck(params).then((res) => {
closeLoading(this);
if(res.code == "000000"){
this.$message.success(successContent[type]);
this.searchForm.pageNo = 1;
this.searchList();
}else {
this.$message.error('操作失败');
}
}).catch((error) => {
this.$message.error("请重试");
}
)
},
handleSizeChange(val) {
this.searchForm.pageSize = val;
this.searchForm.pageNo = 1;
this.searchList();
},
handleNumChange(val) {
this.searchForm.pageNo = val;
this.searchList();
},
},
}
</script>
<style lang="scss">
.video-index-wrapper{
.yqrange-index-content{
background: #fff;
padding: 10px;
.header-title{
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
}
.search-btn{
margin-right: 25px;
color: #449284;
cursor: pointer;
padding: 3px 5px;
&.active-search{
background-color: #449284;
color: #ffffff;
}
}
.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;
}
}
}
.el-form-item .el-form-item__label{
font-size: 14px;
}
}
.el-switch__label.is-active{
color: #449284;
}
/* switch按钮样式 */
.switch-scope{
.el-switch__label {
position: absolute;
display: none;
color: #fff !important;
}
/*打开时文字位置设置*/
.el-switch__label--right {
z-index: 1;
}
/* 调整打开时文字的显示位子 */
.el-switch__label--right span{
/*margin-right: 9px;*/
margin-left: 11px;
}
/*关闭时文字位置设置*/
.el-switch__label--left {
z-index: 1;
}
/* 调整关闭时文字的显示位子 */
.el-switch__label--left span{
margin-left: 22px;
}
/*显示文字*/
.el-switch__label.is-active {
display: block;
}
}
/* 调整按钮的宽度 */
.switch-scope.el-switch .el-switch__core,
.el-switch .el-switch__label {
width: 120px !important;
margin: 0;
}
.switch-tip{
font-size: 12px;
color: #898989;
display: inline-block;
margin-top: 3px;
}
.shortvideo-make-box{
.el-message-box__btns{
margin-top: 30px;
}
}
</style>
......@@ -25,6 +25,23 @@
<!--<div class="second-step" v-else-if="active === 1">-->
<!--<organzation :formData="formData" ref="org"></organzation>-->
<!--</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>
</template>
......@@ -64,7 +81,9 @@
type: 0,
deptId: "",
allowShare: 1
}
},
confirmMessage: "",
confirmVisible: false,
}
},
created() {
......@@ -184,11 +203,32 @@
_this.$router.go(-1)
}, 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);
}
});
},
hideConfirm(){
vm.confirmVisible = false;
}
}
}
</script>
......
......@@ -49,7 +49,7 @@
<el-table-column prop="name" label="直播名称" min-width="100" align="center"></el-table-column>
<el-table-column prop="liveStatus" label="直播状态" min-width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.liveStatus | liveStatusFilter }}</span>
<span>{{ scope.row.liveStatus | liveStatusFilter1 }}</span>
</template>
</el-table-column>
<el-table-column prop="streamType" label="直播方式" min-width="100" align="center">
......
......@@ -4,41 +4,63 @@
<div class="yqrange-index-content" id="screenSet">
<!--<div class="header-title">云鹊小圈</div>-->
<el-form ref="settingForm" :model="settingForm"
<!-- <el-form ref="settingForm" :model="settingForm"
label-width="150px"
label-suffix=":"
class="basic-form">
<div v-for="(item, index) in settingForm.settingData" :key="index">
<el-form-item :label="item.appTagName">
<div v-for="(item, index) in settingForm.settingData" :key="index" display:inline>
<el-form-item :label="item.appType">
<el-radio-group size="small" v-model="item.showOff">
<el-radio :label="1">开启</el-radio>
<el-radio :label="0">关闭</el-radio>
</el-radio-group>
<el-input v-model="item.appName" style="width:120px;margin-left:40px;" size="small" placeholder="重命名"/>
<el-input v-model="item.seqNo" style="width:60px;margin-left:40px;" size="small" placeholder="序号"/>
</el-form-item>
</div>
</el-form> -->
</el-form>
<el-table :data="settingForm.settingData" class="customer-table" style="margin-left:70px;"
:header-cell-style="{background:'#ffffff'}">
<el-table-column label="" prop="appType" width="120"></el-table-column>
<el-table-column label="" width="180">
<template slot-scope="scope">
<el-radio-group size="small" v-model="scope.row.showOff">
<el-radio :label="1">开启</el-radio>
<el-radio :label="0">关闭</el-radio>
</el-radio-group>
</template>
</el-table-column>
<el-table-column label="重命名" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.appName" style="width:120px;" :maxlength="6" size="small" placeholder="重命名"/>
</template>
</el-table-column>
<el-table-column label="序号" width="200">
<template slot-scope="scope">
<el-input v-model="scope.row.seqNo" style="width:60px;" size="small" @blur="BlurText($event)" @placeholder="序号"/>
</template>
</el-table-column>
</el-table>
<div style="margin-top: 60px;margin-left: 150px;">
<el-button type="primary" @click="save()" center>保存</el-button>
<el-button type="primary" @click="checkSubmitData()" center>保存</el-button>
<!--<el-button @click="cancle()">取 消</el-button>-->
</div>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import { getRangeList,updateRangeStatus, getCircleSettingList, saveCircleSetting} from "../../utils/yqrange/yqrangeApi";
import { isEmptyUtils } from "../../utils/index";
export default {
components: {
BreadCrumb
......@@ -69,13 +91,11 @@ export default {
created() {
this.circleId = this.$route.query.id;
this.setting();
},
methods: {
// 应用配置
setting(){
let params = {
circleId: this.circleId
// circleId: 22
......@@ -85,87 +105,84 @@ export default {
closeLoading(this);
if(res.code == "000000") {
this.settingForm.settingData = res.data;
} else {
// this.$message.error(res.data.message);
this.settingForm.settingData = [];
}
if(this.settingForm.settingData == [] || this.settingForm.settingData.length == 0){
}).catch((error) => {
this.$message.error("请重试");
})
this.settingForm.settingData = [{
appTag: 1,
showOff: 1
},
{
appTag: 2,
showOff: 1
},
{
appTag: 3,
showOff: 1
},
{
appTag: 4,
showOff: 1
},
{
appTag: 5,
showOff: 0
}];
}
for(let i = 0; i < this.settingForm.settingData.length; i++){
if(this.settingForm.settingData[i].appTag == 1){
this.settingForm.settingData[i].appTagName = "教培"
checkSubmitData() {
for(let i=0; i<this.settingForm.settingData.length; i++) {
if (isEmptyUtils(this.settingForm.settingData[i].appName)) {
this.$message.error("重命名输入框中的值不可为空,请检查");
return;
}
else if(this.settingForm.settingData[i].appTag == 2){
this.settingForm.settingData[i].appTagName = "直播"
if (isEmptyUtils(this.settingForm.settingData[i].seqNo)) {
this.$message.error("序号不可为空,请检查");
return;
}
else if(this.settingForm.settingData[i].appTag == 3){
this.settingForm.settingData[i].appTagName = "继教课程"
const r = /^\+?[1-9][0-9]*$/; // 正整数
// 如果判断不符合正则,则不是正整数不能提交
if (!r.test(this.settingForm.settingData[i].seqNo)) {
return;
}
else if(this.settingForm.settingData[i].appTag == 4){
this.settingForm.settingData[i].appTagName = "职称培训"
if (this.settingForm.settingData[i].seqNo < 1 || this.settingForm.settingData[i].seqNo > 10) {
return;
}
else if(this.settingForm.settingData[i].appTag == 5){
this.settingForm.settingData[i].appTagName = "云鹊豆商城"
if (this.settingForm.settingData[i].seqNo > this.settingForm.settingData.length) {
this.$message.error("序号必须从1开始顺序排列,不能有跳序情况,请检查");
return;
}
for(let j=0; j<this.settingForm.settingData.length; j++) {
if (i == j) {
continue;
}
}).catch((error) => {
this.$message.error("请重试");
})
if (this.settingForm.settingData[i].seqNo == this.settingForm.settingData[j].seqNo) {
this.$message.error("序号不可重复,请检查");
return;
}
}
}
this.save();
},
// 保存
save(){
let params = {
apps: this.settingForm.settingData,
circleId: this.circleId
}
saveCircleSetting(params).then((res) => {
closeLoading(this);
if(res.code == "000000") {
this.$message.success("保存成功!");
// this.$router.go(-1);
this.setting();
}
}).catch((error) => {
this.$message.error("请重试");
})
},
cancle(){
this.$router.go(-1);
}
},
BlurText(e) {
console.log("BlurText() : e = " + e.target.value)
let b = new RegExp("^[1-9][0-9]*$").test(e.target.value)
if (e.target.value >= 10) {
b = false
}
if (!b) {
this.$message.warning('请输入 1~10 的正整数')
e.target.value = ''
}
}
},
}
</script>
......@@ -208,4 +225,36 @@ export default {
/*margin-top: 30px;*/
/*}*/
/*}*/
// 去掉表格单元格边框
.customer-table th{
border:none;
}
.customer-table td,.customer-table th.is-leaf {
border:none;
}
// 表格最外边框
.el-table--border, .el-table--group{
border: none;
}
// 头部边框
.customer-table thead tr th.is-leaf{
width: 0;
}
.customer-table thead tr th:nth-last-of-type(2){
width: 0;
}
// 表格最外层边框-底部边框
.el-table--border::after, .el-table--group::after{
width: 0;
}
.customer-table::before{
width: 0;
}
.customer-table .el-table__fixed-right::before,.el-table__fixed::before{
width: 0;
}
// 表格有滚动时表格头边框
.el-table--border th.gutter:last-of-type {
width: 0;
}
</style>
......@@ -118,6 +118,22 @@
</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 label="审核列表" name="second" v-if="showApplyFlag">
......@@ -168,7 +184,9 @@ export default {
circleId: null,
settingData: []
},
idType: ""
idType: "",
confirmMessage: "",
confirmVisible: false,
}
},
created() {
......@@ -321,7 +339,13 @@ export default {
this.$message.success("解散成功");
}
this.searchList();
} else {
}
else if(res.code == "224027") {
this.confirmMessage = `圈子已被加入广场中,请先至广场管理移除该圈子后再操作`;
this.confirmVisible = true;
}
else {
if(status == "40"){
this.$message.error("下线失败,请重试");
} else if(status == "30") {
......@@ -349,6 +373,10 @@ export default {
},
hideConfirm(){
this.confirmVisible = false;
},
rangeManage(row) {
this.$router.push({
path: '/range-manage',
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册