提交 82e9bf06 编写于 作者: guangjun.yang's avatar guangjun.yang

Merge branch 'dev-mvp-20200331' of...

Merge branch 'dev-mvp-20200331' of 192.168.110.53:com.pica.cloud.education.frontend/pica.cloud.web-education-admin into dev-mvp-20200331

* 'dev-mvp-20200331' of 192.168.110.53:com.pica.cloud.education.frontend/pica.cloud.web-education-admin:
  完成基本的联调
......@@ -15,6 +15,7 @@
v-model="formData.openTemplateName"
placeholder="请输入模板名称"
style="width:70%;"
maxlength="24"
:disabled="disabled"
></el-input>
<span class="word-num">{{(formData.openTemplateName).replace(/\s+/g,"").length}}/24</span>
......@@ -38,17 +39,17 @@
<img @click="plusOrg(index)" class="edit-img" src="../../../assets/image/plus.png" />
<img @click="deleteOrg(index)" v-if="index >= 1" class="edit-img" src="../../../assets/image/trash.png" />
</el-col>
<el-popover
<!-- <el-popover
class="popover-content" :style="{'top': orgListIndex * 41 + 'px'}"
placement="bottom"
:content="organizationContent"
v-model="visibleName"
@click="checkDefault">
<p @click="checkDefault"> 我的机构: {{ organizationContent }} </p>
</el-popover>
</el-popover> -->
</el-form-item>
<el-form-item label="有效期:" prop="expireDay" v-if="!projectManger">
<el-form-item label="有效期:" prop="expireDay">
<el-col :span="13">
<el-input
size="small"
......@@ -62,49 +63,25 @@
</el-col>
</el-form-item>
<el-form-item label="项目时间:" required v-if="projectManger">
<el-col :span="5">
<el-form-item prop="projectBegintime">
<el-date-picker
v-model="formData.projectBegintime"
size="small"
type="datetime"
placeholder="请选择开始时间"
value-format="yyyy-MM-dd HH:mm:ss"
:picker-options="pickerOptions0"
style="width: 100%;"
:disabled="disabled"
></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="projectEndtime">
<el-date-picker
v-model="formData.projectEndtime"
size="small"
type="datetime"
placeholder="请选择结束时间"
value-format="yyyy-MM-dd HH:mm:ss"
:picker-options="pickerOptions1"
default-time="23:59:59"
style="width: 100%;"
:disabled="disabled"
></el-date-picker>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item label="所属学科" prop="subjectLevelList">
<el-form-item label="所属学科" prop="subjectId">
<el-col :span="13">
<el-cascader
<!-- <el-cascader
class="subject-slelct"
v-model="formData.subjectLevelList"
:options="options"
:props="{ checkStrictly: true }"
@change="handleChange"
:disabled="disabled"
></el-cascader>
></el-cascader> -->
<el-select v-model="formData.subjectId" placeholder="请选择" :disabled="disabled">
<el-option
v-for="item in options"
:key="item.key"
:label="item.value"
:value="item.id"
>
</el-option>
</el-select>
</el-col>
</el-form-item>
......@@ -210,7 +187,7 @@
</el-col>
</el-form-item>
<el-form-item label="项目详情" required prop="openTemplateDetail" v-if="!projectManger" :class="{ueitem: disabled}">
<el-form-item label="项目详情" required prop="openTemplateDetail" :class="{ueitem: disabled}">
<vue-ueditor-wrap
ref="ueditor"
v-model="formData.openTemplateDetail"
......@@ -232,15 +209,19 @@ import VueUeditorWrap from 'vue-ueditor-wrap'
let vm = null;
export default {
props: {
// formData: {
// type: Object,
// default:() => {
// return null
// }
// },
projectManger: {
messageObj: {
type: Object,
default:() => {
return null
}
},
isEditor: {
type: Boolean,
default: true
},
newBuild: {
type: Boolean,
default: false
default: true
}
},
data() {
......@@ -269,8 +250,6 @@ export default {
formData: {
id: "", //开放模板id 26
openTemplateName: "", //开放模板名称
projectBegintime: "", //模板开始时间
projectEndtime: "", //模板结束时间
openTemplateIntro: "", //开放模板简介
type: 1, //封面类型 1图片2视频
expireDay: "", // 开放有效期
......@@ -317,25 +296,6 @@ export default {
}
],
baseobj: {},
pickerOptions0: {
disabledDate: time => {
if (
vm.formData.projectEndtime != "" &&
vm.formData.projectEndtime != null
) {
return (
time.getTime() > new Date(vm.formData.projectEndtime).getTime()
);
}
}
},
pickerOptions1: {
disabledDate: time => {
return (
time.getTime() < new Date(vm.formData.projectBegintime).getTime()
); //减去一天的时间代表可以选择同一天;
}
},
imgMouseOver: false,
imgMouseOver2: false,
uploadImgMessage: false,
......@@ -390,21 +350,7 @@ export default {
{ required: true, message: "请输入有效期", trigger: "blur" },
{ validator: checkUserTime, trigger: "blur" }
],
projectBegintime: [
{
required: true,
message: "请选择时间",
trigger: "change"
}
],
projectEndtime: [
{
required: true,
message: "请选择时间",
trigger: "change"
}
],
subjectLevelList: { required: true, message: "请选择学科", trigger: "change" },
subjectId: { required: true, message: "请选择学科", trigger: "change" },
openTemplateIntro: [
{ required: true, message: "请填写项目简介", trigger: "blur" },
{ min: 1, max: 200, message: "超出可输入的最大长度", trigger: "blur" }
......@@ -421,28 +367,33 @@ export default {
},
created() {
vm = this;
vm.getSubjectList();
vm.getBaseMessage();
// 新建
if (vm.newBuild) {
vm.getSubjectList();
} else {
// 非新建但可编辑
if (vm.isEditor) {
vm.getSubjectList();
vm.setBaseMessage();
} else {
// 非新建不可编辑
vm.disabled = true;
vm.getSubjectList();
vm.setBaseMessage();
}
}
},
methods: {
// 获取已有的基本信息
getBaseMessage() {
let id = 26; // 开放模板id
// openLoading(vm);
vm.GET(`portal/openTemplate/getOpenTemplateInfo/${id}`).then(res => {
// closeLoading(vm);
if (res.code == "000000") {
this.formData = Object.assign(this.formData, res.data.portalOpenTemplateModel);
this.formData.attachmentUrl1 = res.data.attachmentData[0].attachmentUrl;
this.formData.attachmentMore1 = Object.assign(this.formData.attachmentMore1, res.data.attachmentData[0]);
this.formData.attachmentUrl2 = res.data.attachmentData[1].attachmentType == 1 ? res.data.attachmentData[1].attachmentUrl : '';
this.formData.attachmentUrl3 = res.data.attachmentData[1].attachmentType == 2 ? res.data.attachmentData[1].attachmentUrl : '';
this.formData.attachmentMore2 = Object.assign(this.formData.attachmentMore2, res.data.attachmentData[1]);
this.disabled = true;
} else {
vm.$message.info(res.message);
}
});
// 设置已有的基本信息
setBaseMessage() {
vm.formData = Object.assign(vm.formData, vm.messageObj.portalOpenTemplateModel);
vm.formData.attachmentUrl1 = vm.messageObj.attachmentData[0].attachmentUrl;
vm.formData.attachmentMore1 = Object.assign(vm.formData.attachmentMore1, vm.messageObj.attachmentData[0]);
// vm.formData.attachmentUrl2 = vm.messageObj.attachmentData[1].attachmentType == 1 ? vm.messageObj.attachmentData[1].attachmentUrl : '';
// vm.formData.attachmentUrl3 = vm.messageObj.attachmentData[1].attachmentType == 2 ? vm.messageObj.attachmentData[1].attachmentUrl : '';
vm.formData.attachmentUrl2 = vm.messageObj.attachmentData[1].attachmentUrl;
vm.formData.attachmentMore2 = Object.assign(vm.formData.attachmentMore2, vm.messageObj.attachmentData[1]);
vm.formData.type = vm.messageObj.attachmentData[1].attachmentType;
},
// 增加发起机构
plusOrg(index) {
......@@ -479,18 +430,19 @@ export default {
checkDefault() {
vm.formData.organizationNameList.splice(vm.orgListIndex-1, 1, vm.organizationContent);
vm.visibleName = false;
},
handleChange(value) {
},
//上传列表图片
beforeUploadListPic(file) {
let fileLimit = {
width: 48,
height: 48,
size: 0.5,
sizeText: "500K",
key: "attachmentUrl1",
more: "attachmentMore1",
show: "uploadImgMessage"
};
vm.beforeAvatarUpload(file, fileLimit);
},
//上传图片校验
......@@ -498,13 +450,17 @@ export default {
const isJPG = file.type === "image/jpeg";
const isPNG = file.type === "image/png";
const isLt2M = file.size / 1024 / 1024 < fileLimit.size;
// if (file.width != fileLimit.width || file.height != fileLimit.height) {
// vm.$message.error("图片不符合规范,请根据规范上传图片");
// return;
// }
if (!isJPG && !isPNG) {
vm.$message.error("图片不符合规范,请根据规范上传图片");
// return;
return;
}
if (!isLt2M) {
vm.$message.error("图片不符合规范,请根据规范上传图片 ");
// return;
return;
}
let _img = new FileReader();
_img.readAsDataURL(file);
......@@ -565,8 +521,8 @@ export default {
//上传封面图片
beforeUploadCoverPic(file) {
let fileLimit = {
// width: 750,
// height: 420,
width: 750,
height: 420,
size: 2,
sizeText: "2.0M",
key: "attachmentUrl2",
......@@ -623,18 +579,19 @@ export default {
} else {
vm.uploadImgMessage2 = false;
}
// if (vm.submitForm('formData') && flag) {
// vm.insertOrupdate();
// }
vm.insertOrupdate();
if (vm.submitForm('formData') && flag) {
vm.insertOrupdate();
}
// vm.insertOrupdate();
},
// 新增或者更新基本信息
insertOrupdate() {
vm.setSubjectId();
vm.formData.subjectName = vm.setSubjectName();
vm.setSubjectLevelList();
vm.setSubjectName();
// 图片或者视频地址
vm.formData.attachmentMore1.attachmentUrl = vm.formData.attachmentUrl1;
vm.formData.attachmentMore2.attachmentUrl = vm.formData.type == 1 ? vm.formData.attachmentUrl2 : vm.formData.attachmentUrl3;
// vm.formData.attachmentMore2.attachmentUrl = vm.formData.type == 1 ? vm.formData.attachmentUrl2 : vm.formData.attachmentUrl3;
vm.formData.attachmentMore2.attachmentUrl = vm.formData.attachmentUrl2;
// 封面类型
vm.formData.attachmentMore2.attachmentType = vm.formData.type;
vm.formData.attachmentMore2.kind = 2;
......@@ -648,7 +605,7 @@ export default {
closeLoading(vm);
if (res.code == "000000") {
// 将产生的模板id:openTemplateId传给下一步
this.$emit('next',res.data.openTemplateModel.id);
vm.$emit('next',res.data.openTemplateModel.id);
} else {
vm.$message.info(res.message);
}
......@@ -666,43 +623,15 @@ export default {
});
return flag;
},
// 保存富文本数据
setEditorMsge(msg) {
if (!msg) {
vm.$message.error('请将富文本填写完整!');
return;
}
vm.editData.openTemplateDetail = msg;
openLoading(vm);
let req = {
openTemplateDetail: vm.editData.openTemplateDetail,
id: vm.id
};
vm.$axios
.post(
localStorage.getItem("msUrl") + "v2/qualityContent/updateRichContent",
req
)
.then(function(res) {
closeLoading(vm);
if (res.data.code == '000000') {
vm.$message.success('保存富文本成功');
} else {
vm.$message.error(res.data.message);
}
})
.catch(function(error) {
closeLoading(vm);
vm.$message.error(error);
});
},
// 获取学科列表
getSubjectList() {
let req = {};
vm.GET("/portal/openTemplate/labelList", req).then(res => {
vm.GET("aggregate/cme/labelList", req).then(res => {
if (res.code == '000000') {
vm.changeName(res.data);
vm.options = res.data;
console.log('====================================');
console.log(vm.options);
console.log('====================================');
}
});
},
......@@ -720,29 +649,30 @@ export default {
// 获取学科对应的label
setSubjectName() {
for (const item of vm.options) {
if (item.value == vm.formData.subjectLevelList[0]) {
if (!vm.formData.subjectLevelList[1] || vm.formData.subjectLevelList[1] == 0) {
return item.label;
} else {
for (const j of item.children){
if (j.value == vm.formData.subjectLevelList[1]) {
return j.label;
}
}
}
if (item.id == vm.formData.subjectId) {
// if (!vm.formData.subjectLevelList[1] || vm.formData.subjectLevelList[1] == 0) {
// return item.label;
// } else {
// for (const j of item.children){
// if (j.value == vm.formData.subjectLevelList[1]) {
// return j.label;
// }
// }
// }
vm.formData.subjectName = item.value;
}
}
},
// 设置学科id
setSubjectId() {
vm.formData.subjectId = (vm.formData.subjectLevelList.length > 1)&& vm.formData.subjectLevelList[1] != 0 ? vm.formData.subjectLevelList[1] : vm.formData.subjectLevelList[0]
setSubjectLevelList() {
// vm.formData.subjectId = (vm.formData.subjectLevelList.length > 1)&& vm.formData.subjectLevelList[1] != 0 ? vm.formData.subjectLevelList[1] : vm.formData.subjectLevelList[0]
vm.formData.subjectLevelList = [vm.formData.subjectId];
}
}
}
</script>
<style >
.subject-slelct .el-input__inner {
.base-message-wrap .el-input__inner {
height: 32px;
line-height: 32px;
}
......@@ -764,14 +694,17 @@ export default {
}
.day-btn {
display: inline-block;
width: 50px;
width: 68px;
height: 32px;
line-height: 32px;
background: #838683;
background: #D5D3D3;
text-align: center;
margin-left: -3px;
border-radius: 0 4px 4px 0;
z-index: 100;
font-size: 14px;
color: #909399;
vertical-align: middle;
}
.basic-item-icon {
position: relative;
......@@ -873,4 +806,8 @@ export default {
top: 0;
left: 0;
}
.time-message {
margin: -19px 0 20px 150px;
font-size: 14px;
}
</style>
......@@ -9,8 +9,8 @@
center>
<p style="text-align: center;">{{dialogObj.message}}</p>
<span slot="footer" class="dialog-footer">
<el-button @click="confirm">确 定</el-button>
<el-button type="primary" @click="hide">取 消</el-button>
<el-button @click="confirm" v-if="dialogObj.confirmMsg">{{dialogObj.confirmMsg}}</el-button>
<el-button type="primary" @click="hide" v-if="dialogObj.hideMsg">{{dialogObj.hideMsg}}</el-button>
</span>
</el-dialog>
</div>
......
......@@ -28,7 +28,7 @@
</el-tree>
</el-col>
<el-col :span="11">
<p class="area-p" @click="getScope('administrative')">
<p class="area-p">
项目范围包含下列区域所有机构和人员({{ tagsRegion.length }})
</p>
<el-tag
......@@ -58,6 +58,12 @@ import {
} from "@/utils/education/educationApi";
import Sortable from "sortablejs";
export default {
props: {
projectId: {
type: String | Number,
default: ''
}
},
data() {
return {
scopeReq: {}, // 区域范围
......@@ -69,8 +75,7 @@ export default {
isLeaf: "isLeaf"
},
treeData: [],
tagsRegion: [],
projectId: 173
tagsRegion: []
}
},
created() {
......@@ -190,22 +195,6 @@ export default {
}
}
},
//行政范围改变更新设定机构
// updateOrganizationAndPerson(allSelectedKeys) {
// console.log('====================================');
// console.log(allSelectedKeys);
// console.log('====================================');
// console.log('=========================updateOrganizationAndPerson')
// this.tableOrganization = [];
// this.tablePerson = [];
// this.lookedOrganization = [];
// this.changedOrganization = [];
// this.changedOrganization2 = [];
// },
// getCheckedKeys() {
// console.log('=========================getCheckedKeys')
// console.log(this.$refs.tree.getCheckedKeys());
// },
//添加子节点
append(data, node) {
console.log('=========================append')
......@@ -267,15 +256,11 @@ export default {
console.log(treeKeyList);
this.$refs.tree.setCheckedKeys(treeKeyList);
},
//设定的行政范围内容
//设定的行政范围内容(传给设定机构的范围)
getScope(type) {
console.log('========================getScope');
let scope = "";
let arr = [];
for (let i = 0; i < this.tagsRegion.length; i++) {
scope += this.tagsRegion[i].key;
arr.push(this.tagsRegion[i].key)
if (i < this.tagsRegion.length - 1) {
scope += "|";
}
......@@ -283,9 +268,53 @@ export default {
if (scope == "") {
return null;
}
this.$emit('setRegion',arr);
return scope;
}
},
//设定的行政范围内容(完成或是暂存时传给后台的数据格式)
setScope(type) {
let noChangeTree = this.getTreeCheck();
let scope = "";
if (this.allSelectedKeys.length > 0) {
for (let i = 0; i < this.allSelectedKeys.length; i++) {
scope +=
this.allSelectedKeys[i].key + ":" + this.allSelectedKeys[i].type;
if (i < this.allSelectedKeys.length - 1) {
scope += "|";
}
}
} else {
// let noChangeTree = this.getTreeCheck();
console.log('noChangeTree值',noChangeTree);
if(noChangeTree.length > 0) {
for (let i = 0; i < noChangeTree.length; i++) {
scope += noChangeTree[i].key + ":" + noChangeTree[i].type;
if (i < noChangeTree.length - 1) {
scope += "|";
}
}
} else {
//选全国项目
if(this.tagsRegion.length > 0 && this.tagsRegion[0].key == '000') {
scope = '000:1';
console.log(this.tagsRegion,'scope',scope);
}
}
}
//console.log(scope);
if(scope == "") {
return null;
}
return scope;
},
getTreeCheck() {
//重构归并树
let checkedTree = operationData.getSimpleCheckedNodes(this.$refs.tree.store);
let halfCheckedTree = this.$refs.tree.getHalfCheckedKeys()
let allSelectedKeys = operationData.setSelectedKeys(checkedTree,halfCheckedTree);
vm.allSelectedKeys = allSelectedKeys;
//重构内容
return allSelectedKeys;
},
}
}
</script>
......
......@@ -19,6 +19,7 @@
style="width: 350px"
placeholder="请选择组件"
@change="changeValue"
:disabled="disabled"
>
<el-option
v-for="item in optionsComponent"
......@@ -48,7 +49,7 @@
<el-form-item required label="学习时长:" class="time-contrl">
<el-col :span="10">
<el-radio-group class="el-time-ctr" v-model="formComponent.courseRequire" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6">
<el-radio-group class="el-time-ctr" v-model="formComponent.courseRequire" :disabled="disabled">
<el-radio :label="1">是(必须达到课程配置的观看时长要求才算通过)</el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
......@@ -69,7 +70,7 @@
placeholder="请选择"
style="width: 350px"
@change="updateCertificateType"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
:disabled="disabled"
>
<el-option
v-for="item in certificateTypeList"
......@@ -82,7 +83,7 @@
</el-form-item>
<el-form-item required label="累计学习时长大于等于:" v-show="formExam.passType == 3" :class="customError.passTotalLearnTime.className">
<el-input placeholder="请输入" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6" v-model="formComponent.passTotalLearnTime" style="width:200px" @input="focusFun($event,'passTotalLearnTime')">
<el-input placeholder="请输入" :disabled="disabled" v-model="formComponent.passTotalLearnTime" style="width:200px" @input="focusFun($event,'passTotalLearnTime')">
<template slot="append">分钟</template>
</el-input>
<div class="el-form-item__error" v-if="customError.passTotalLearnTime.error != ''">{{customError.passTotalLearnTime.error}}</div>
......@@ -94,7 +95,7 @@
<div class="mini-source" style="overflow: hidden;">
<el-form-item label="项目中最高" label-width="80px" style="float: left;" :class="customError.passExamCount.className" class="min-label">
<div class="source-item">
<el-input placeholder="请输入数字" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6" size="mini" v-model="formComponent.passExamCount" style="width:150px" @input="focusFun($event,'passExamCount')">
<el-input placeholder="请输入数字" :disabled="disabled" size="mini" v-model="formComponent.passExamCount" style="width:150px" @input="focusFun($event,'passExamCount')">
<template slot="append"></template>
</el-input>
</div>
......@@ -103,7 +104,7 @@
<div style="float: left;padding:0 5px;line-height: 26px;font-size: 12px;color:#606266">考试成绩的平均分大于等于</div>
<el-form-item label="" label-width="0px" style="float: left;" :class="customError.passAverageScore.className" class="min-label">
<div class="source-item">
<el-input placeholder="请输入数字" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6" size="mini" v-model="formComponent.passAverageScore" style="width:150px" @input="focusFun($event,'passAverageScore')">
<el-input placeholder="请输入数字" :disabled="disabled" size="mini" v-model="formComponent.passAverageScore" style="width:150px" @input="focusFun($event,'passAverageScore')">
<template slot="append"></template>
</el-input>
</div>
......@@ -116,7 +117,7 @@
<el-form-item required label="配置证书:">
<el-col :span="10">
<el-radio-group class="el-configure" v-model="formComponent.configure" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6">
<el-radio-group class="el-configure" v-model="formComponent.configure" :disabled="disabled">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
......@@ -131,7 +132,7 @@
<div class="configure-item">
<el-form-item label="平均分:" label-width="65px" style="float: left;" :class="item.minClass" class="min-label">
<el-col :span="5">
<el-input :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6" placeholder="请输入数字" size="mini" v-model="item.rangeMin" style="width:215px" @input="focusFun($event,'rangeMin',index)">
<el-input :disabled="disabled" placeholder="请输入数字" size="mini" v-model="item.rangeMin" style="width:215px" @input="focusFun($event,'rangeMin',index)">
<template slot="append"></template>
</el-input>
</el-col>
......@@ -140,7 +141,7 @@
<div style="float: left;padding:0 5px;line-height: 26px;">~</div>
<el-form-item label-width="0" style="float: left;margin-left:0px;" :class="item.maxClass" class="min-label">
<el-col :span="5">
<el-input :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6" placeholder="请输入数字" size="mini" v-model="item.rangeMax" style="width:215px" @input="focusFun($event,'rangeMax',index)">
<el-input :disabled="disabled" placeholder="请输入数字" size="mini" v-model="item.rangeMax" style="width:215px" @input="focusFun($event,'rangeMax',index)">
<template slot="append"></template>
</el-input>
</el-col>
......@@ -155,7 +156,7 @@
size="mini"
style="width: 450px;"
@change="updateCertificate(index)"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
:disabled="disabled"
>
<el-option
v-for="item in optionsCertificate"
......@@ -168,8 +169,8 @@
</el-form-item>
</div>
<div class="configure-option">
<el-button size="mini" @click="addCertificate" icon="el-icon-plus" circle :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"></el-button>
<el-button size="mini" @click="reduceCertificate(index)" icon="el-icon-minus" circle :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"></el-button>
<el-button size="mini" @click="addCertificate" icon="el-icon-plus" circle :disabled="disabled"></el-button>
<el-button size="mini" @click="reduceCertificate(index)" icon="el-icon-minus" circle :disabled="disabled"></el-button>
</div>
</div>
</div>
......@@ -180,7 +181,7 @@
v-model="formComponent.certificate"
placeholder="请选择证书"
style="width: 350px"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
:disabled="disabled"
>
<el-option
v-for="item in optionsCertificate"
......@@ -209,6 +210,20 @@ export default {
openTemplateId: {
type: String | Number,
deault: 0
},
messageObj: {
type: Object,
default:() => {
return null
}
},
isEditor: {
type: Boolean,
default: true
},
newBuild: {
type: Boolean,
default: true
}
},
data() {
......@@ -302,7 +317,7 @@ export default {
],
showRules1: [{ required: true, message: "请输入门数", trigger: "blur" }]
},
disabled: true
disabled: false
};
},
computed: {
......@@ -310,8 +325,16 @@ export default {
},
created() {
vm = this;
this.getComponentInfo();
vm.idType = localStorage.getItem("storageIdType");
vm.getComponentInfo();
if (!vm.newBuild){
vm.setEditData(this.messageObj);
}
if (!vm.newBuild && !vm.isEditor) {
this.disabled = true;
} else {
this.disabled = false;
}
},
// 挂载到Dom完成时
mounted: function() {
......@@ -483,8 +506,67 @@ export default {
//console.log('this.tagsComponent',this.tagsComponent);
},
// 如有数据时 初始化
setEditData(editData) {
//设置选择项目组件页
let componentEdit = [];
let certificateEdit = 0;
for (let i = 0; i < editData.componentData.length; i++) {
componentEdit.push(editData.componentData[i].relevanceId);
}
this.formComponent.component = componentEdit;
this.initTags(componentEdit);
if (editData.certificateData.length > 0) {
this.formComponent.configure = 1;
this.formComponent.certificate =
editData.certificateData[0].relevanceId;
}
if (editData.certificateRule.length > 0) {
this.formComponent.configure = 1;
}
//初始化考试平均分配置数据
this.formExam.certificateType = editData.portalOpenTemplateModel.certificateType;
this.formExam.passType = editData.portalOpenTemplateModel.passType;
this.formExam.exam = editData.certificateRule;
if (this.formExam.exam.length > 0) {
for (let k = 0; k < this.formExam.exam.length; k++) {
this.formExam.exam[k].certClass = "";
this.formExam.exam[k].certError = "";
this.formExam.exam[k].minClass = "";
this.formExam.exam[k].minError = "";
this.formExam.exam[k].maxClass = "";
this.formExam.exam[k].maxError = "";
}
}
console.log(this.formExam.exam);
this.formComponent.passAverageScore =
editData.portalOpenTemplateModel.passAverageScore > 0
? editData.portalOpenTemplateModel.passAverageScore
: "";
this.formComponent.passExamCount =
editData.portalOpenTemplateModel.passExamCount > 0
? editData.portalOpenTemplateModel.passExamCount
: "";
this.formComponent.passTotalLearnTime =
editData.portalOpenTemplateModel.passTotalLearnTime;
if (this.formExam.exam.length == 0) {
this.formExam.exam = [
{
examCount: 1,
rangeMin: "",
rangeMax: "",
certificateId: "",
certificateName: "",
minClass: "",
minError: "",
maxClass: "",
maxError: "",
certClass: "",
certError: ""
}
];
}
},
initTags(value) {
console.log('=================initTags');
//console.log('value',value,'optionsComponent',this.optionsComponent);
this.tagsComponent = [];
let len = 0;
......
......@@ -177,8 +177,7 @@ export default {
formOrganization: {
name: "",
administrativeId: "0",
// administrativeIdList: ["0"],
administrativeIdList:[110],
administrativeIdList: ["0"],
level: "-1",
chechAll: true,
pageNum: 1,
......@@ -240,21 +239,21 @@ export default {
created() {
vm = this;
vm.idType = localStorage.getItem("storageIdType");
this.getOrganization();
// this.getOrganization();
this.getRegionOption();
this.listLevels();
},
methods: {
//查询机构列表
getOrganization() {
getOrganization(r) {
console.log('=========================getOrganization')
let req = {
projectId: this.projectId,
administrativeId: "",
hospitalLevel: "",
hospitalLevel: "",
// scope: '000',: this.getScope("administrative"),
scope: '000',
// scope: this.regio == '' ? null : this.regio,
scope: r ? r : null,
pageNum: this.formOrganization.pageNum,
pageSize: this.formOrganization.pageSize
};
......@@ -340,7 +339,6 @@ export default {
},
//获取地区select
getRegionOption() {
console.log('=========================getRegionOption')
let req = {};
openLoading(vm);
vm.GET("basic-data/position/provinces", req).then(res => {
......
......@@ -317,13 +317,12 @@ export default {
}
}
.box-right {
margin-right: 24px;
width:100px;
text-align: center;
width:98px;
height:50px;
font-size:14px;
font-family:PingFangSC-Regular,PingFang SC;
font-weight:400;
text-align: right;
color:rgba(68,146,132,1);
line-height:50px;
......@@ -334,6 +333,8 @@ export default {
.dialog-list-wrap {
.el-dialog {
width: 800px;
max-height: 1000px;
overflow: scroll;
}
.dialog-line {
width:750px;
......
<!--基础信息-->
<template>
<div class="base-message-wrap">
<el-form
ref="formData"
:model="formData"
:rules="rules"
label-width="150px"
class="basic-form"
>
<el-form-item label="项目名称:" prop="projectName">
<el-col :span="13">
<el-input
size="small"
v-model="formData.projectName"
placeholder="请输入项目名称"
style="width:70%;"
ref="projectName"
></el-input>
<span class="word-num">{{(formData.projectName).replace(/\s+/g,"").length}}/24</span>
</el-col>
</el-form-item>
<el-form-item label="发起机构名称:">
<el-col :span="13" v-for="(item, index) in formData.organizationNameList" :key="index">
<el-input
size="small"
v-model="formData.organizationNameList[index]"
placeholder="请输入发起机构名称"
style="width:70%;"
maxlength=16
@input="changeOrganizationName"
@blur = "blurName"
@focus = "focusName(index)"
></el-input>
<span class="word-num">{{(formData.organizationNameList[index]).replace(/\s+/g,"").length}}/16</span>
<img @click="plusOrg(index)" class="edit-img" src="../../../assets/image/plus.png" />
<img @click="deleteOrg(index)" v-if="index >= 1" class="edit-img" src="../../../assets/image/trash.png" />
</el-col>
<el-popover
class="popover-content" :style="{'top': orgListIndex * 41 + 'px'}"
placement="bottom"
:content="organizationContent"
v-model="visibleName"
@click="checkDefault">
<p @click="checkDefault"> 我的机构: {{ organizationContent }} </p>
</el-popover>
</el-form-item>
<div>
<el-form-item label="项目时间:" required>
<el-col :span="5">
<el-form-item prop="projectBegintime">
<el-date-picker
v-model="formData.projectBegintime"
size="small"
type="datetime"
placeholder="请选择开始时间"
value-format="yyyy-MM-dd HH:mm:ss"
:picker-options="pickerOptions0"
style="width: 100%;"
></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="projectEndtime">
<el-date-picker
v-model="formData.projectEndtime"
size="small"
type="datetime"
placeholder="请选择结束时间"
value-format="yyyy-MM-dd HH:mm:ss"
:picker-options="pickerOptions1"
default-time="23:59:59"
style="width: 100%;"
></el-date-picker>
</el-form-item>
</el-col>
</el-form-item>
<p class="time-message"><i class="el-icon-warning-outline"></i>项目有效期为{{formData.expireDay}}天,选择项目起止时间须在有效期内</p>
</div>
<div class="basic-item-icon">
<span class="require">*</span>
<el-form-item label="列表图片:">
<el-upload
v-model="formData.attachmentUrl1"
class="bg-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeUploadListPic"
:disabled="disabled"
>
<img v-if="formData.attachmentUrl1" @mouseover.stop="imgMouseOver=true" :src="formData.attachmentUrl1" class="bg-img">
<img
v-if="!formData.attachmentUrl1"
class="bg-img"
src="../../../assets/image/small.png"
>
<div class="img-delete" v-show="imgMouseOver && !disabled" @click.stop="deleteImg(1)" @mouseout.stop="imgMouseOver=false"><i class="el-icon-delete"></i></div>
<div class="limit-text">
<p>尺寸:48*48</p>
<p>限制大小: 500Kb</p>
<p>支持.jpg,.png格式</p>
</div>
</el-upload>
</el-form-item>
<p class="upload-message" v-if="uploadImgMessage">请选择列表图片</p>
</div>
<el-form-item label="封面类型:">
<el-radio-group
size="small"
v-model="formData.type"
@change="changeCover"
:disabled="disabled"
>
<el-radio :label="1">图片</el-radio>
<el-radio :label="2">视频</el-radio>
</el-radio-group>
</el-form-item>
<div class="basic-item-icon">
<span class="require">*</span>
<el-form-item label="封面文件:">
<el-upload
v-model="formData.attachmentUrl2"
class="bg-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeUploadCoverPic"
:disabled="disabled"
>
<img
v-if="formData.type == 1 && formData.attachmentUrl2"
:src="formData.attachmentUrl2"
@mouseover.stop="imgMouseOver2=true"
class="bg-img"
>
<video
v-if="formData.type == 2 && formData.attachmentUrl2"
width="100"
controls
class="bg-video"
@mouseover.stop="imgMouseOver2=true"
>
<source :src="formData.attachmentUrl2" type="video/mp4">浏览器不支持mp4
</video>
<img
v-if="!formData.attachmentUrl2"
class="bg-img"
src="../../../assets/image/small.png"
>
<div class="img-delete" v-show="imgMouseOver2 && !disabled" @click.stop="deleteImg(2)" @mouseout.stop="imgMouseOver2=false"><i class="el-icon-delete"></i></div>
<div v-show="formData.type == 1" class="limit-text">
<p>尺寸:750*420</p>
<p>限制大小: 2.0 Mb</p>
<p>支持.jpg,.png格式</p>
</div>
<div v-show="formData.type == 2" class="limit-text">
<p></p>
<p>限制大小: 500 Mb</p>
<p>支持.mp4</p>
</div>
</el-upload>
</el-form-item>
<p class="upload-message" v-if="uploadImgMessage2">请选择封面</p>
</div>
<el-form-item label="项目简介:" prop="projectIntro">
<el-col :span="13">
<el-input
size="small"
type="textarea"
:autosize="{ minRows: 5}"
placeholder="请输入项目简介"
v-model="formData.projectIntro"
style="width:83%;"
:disabled="disabled"
></el-input>
<span class="word-num">{{(formData.projectIntro).replace(/\s+/g,"").length}}/200</span>
</el-col>
</el-form-item>
</el-form>
<dialog-componet :dialogObj="dialogObj" @confirm="confirm" @hide="hide"></dialog-componet>
</div>
</template>
<script>
import { doUpload, getFilePath } from "../../../utils/qiniu-util";
import { openLoading, closeLoading } from "../../../utils/utils";
import dialog from "./dialog";
let vm = null;
export default {
props: {
openTemplateId: {
type: String | Number,
default: ''
},
projectId: {
type: String | Number,
default: ''
},
editor: {
type: Boolean,
default: false
}
},
data() {
let checkProjectStr = (rule, value, callback) => {
if (value.indexOf("\\") != -1) {
//存在
callback(new Error("请勿输入字符“ \\ "));
} else if (value.indexOf(".") != -1) {
callback(new Error("请勿输入字符“ . "));
} else {
callback();
}
};
let checkUserTime= (rule, value, callback) => {
if (value> 1000 || value < 1) {
callback(new Error("输入长度为1-1000的有效期"));
} else {
callback();
}
};
return {
visibleName: false, //是否显示机构提示
orgListIndex: 1,
organizationContent: 'hcd',//机构名称
formData: {
id: "", //项目 id 26
projectName: "", //开放模板名称
projectBegintime: "", //模板开始时间
projectEndtime: "", //模板结束时间
projectIntro: "", //开放模板简介
type: 1, //封面类型 1图片2视频
projectStatus: 3, //1.草稿 2.未上架 3.审核中/待审核 4.已上架 5.已下架 6.已拒绝/未上架
expireDay: 1, //模板有效期(天)
attachmentUrl1: "",
attachmentUrl2: "",
attachmentUrl3: "",
attachmentMore1: {
attachmentExt: "",
attachmentName: "",
attachmentSize: 0
},
attachmentMore2: {
attachmentExt: "",
attachmentName: "",
attachmentSize: 0
},
organizationName: "", // 发起机构名称(多个机构拼接
organizationNameList: [''] //发起机构列表
},
attachmentModel:[ //基础信息的图片视频
{
attachmentExt: '',// 附件格式
attachmentName: '',//附件名称
attachmentSize:'',//附件大小,
attachmentType: 1,//1:图片 2:视频 3:pdf
attachmentUrl: '',//附件链接
id: '', //关联唯一ID
kind: 1, //1:列表图片 2:封面配置 3:附件配置
openTemplateId: ''//开放模板id
},
{
attachmentExt: '',// 附件格式
attachmentName: '',//附件名称
attachmentSize:'',//附件大小,
attachmentType: 1,//1:图片 2:视频 3:pdf
attachmentUrl: '',//附件链接
id: '', //关联唯一ID
kind: 1, //1:列表图片 2:封面配置 3:附件配置
openTemplateId: ''//开放模板id
}
],
pickerOptions0: {
disabledDate: time => {
if (
vm.formData.projectEndtime != "" &&
vm.formData.projectEndtime != null
) {
return (
time.getTime() > new Date(vm.formData.projectEndtime).getTime()
);
}
}
},
pickerOptions1: {
disabledDate: time => {
return (
time.getTime() < new Date(vm.formData.projectBegintime).getTime() || time.getTime() > new Date(vm.formData.projectBegintime).getTime() + 1000 * 60 * 60 * 24 * vm.formData.expireDay
); //减去一天的时间代表可以选择同一天;
}
},
imgMouseOver: false,
imgMouseOver2: false,
uploadImgMessage: false,
uploadImgMessage2: false,
rules: {
projectName: [
{ required: true, message: "请输入项目名称" },
{
min: 2,
max: 24,
message: "输入长度为2-24的内容,可包含中英文、数字及特殊符号",
trigger: "blur"
},
{ validator: checkProjectStr, trigger: "blur" }
],
projectBegintime: [
{
required: true,
message: "请选择时间",
trigger: "change"
}
],
projectEndtime: [
{
required: true,
message: "请选择时间",
trigger: "change"
}
],
projectIntro: [
{ required: true, message: "请填写项目简介", trigger: "blur" },
{ min: 1, max: 200, message: "超出可输入的最大长度", trigger: "blur" }
]
},
disabled: true,
dialogObj: {
visible: false,
title: '该项目模版已下架',
message: '模版已下架,请重新选择其他项目模版',
confirmMsg: '取消',
hideMsg: '重新选择'
},
}
},
components: {
dialogComponet:dialog
},
created() {
vm = this;
if (vm.editor) {
// 编辑时
vm.disabled = false;
vm.getEditorMessage()
} else{
// 创建时
vm.disabled = true;
vm.getMessage();
}
},
methods: {
// 设置已有的基本信息
setBaseMessage(data) {
this.formData = Object.assign(this.formData, data.projectData);
this.formData.attachmentUrl1 = data.attachmentData[0].attachmentUrl;
this.formData.attachmentMore1 = Object.assign(this.formData.attachmentMore1, data.attachmentData[0]);
this.formData.projectBegintime = this.formData.projectBegintime ? new Date(this.formData.projectBegintime) : '';
this.formData.projectEndtime = this.formData.projectBegintime ? new Date(this.formData.projectEndtime) : '';
if (data.attachmentData[1]) {
// this.formData.attachmentUrl2 = data.attachmentData[1].attachmentType == 1 ? data.attachmentData[1].attachmentUrl : '';
// this.formData.attachmentUrl3 = data.attachmentData[1].attachmentType == 2 ? data.attachmentData[1].attachmentUrl : '';
this.formData.attachmentUrl2 = data.attachmentData[1].attachmentUrl;
this.formData.type = data.attachmentData[1].attachmentType;
this.formData.attachmentMore2 = Object.assign(this.formData.attachmentMore2, data.attachmentData[1]);
}
},
// 获取选择模板后的基本信息
getMessage() {
openLoading(vm);
vm.GET(`portal/openTemplateProject/getOpenTemplateInfoForCreate/${vm.openTemplateId}`)
.then(res => {
closeLoading(vm);
if (res.code == "000000") {
this.setBaseMessage(res.data);
} else {
vm.$message.info(res.message);
}
})
.catch((err) => {
closeLoading(vm);
vm.$message.warning('请稍后重试');
});
},
// 获取编辑时的信息
getEditorMessage() {
openLoading(vm);
vm.GET(`portal/portalInfo/getProjectInfo/${vm.projectId}`)
.then(res => {
closeLoading(vm);
if (res.code == "000000") {
this.setBaseMessage(res.data)
} else {
vm.$message.info(res.message);
}
})
.catch((err) => {
closeLoading(vm);
vm.$message.warning('请稍后重试');
});
},
// 增加发起机构
plusOrg(index) {
vm.formData.organizationNameList.splice(index + 1, 0, '');
},
// 删除发起机构
deleteOrg(index) {
vm.formData.organizationNameList.splice(index, 1);
},
// 机构名称输入
changeOrganizationName() {
let textLength = vm.formData.organizationName.length;
// 机构输入提示显示与否
vm.visibleName = textLength == 0;
},
// 离开机构名称焦点
blurName() {
vm.visibleName = false;
setTimeout(() => {
vm.submitForm("formData");
}, 200);
},
// 机构名称聚焦
focusName(index) {
let textLength = vm.formData.organizationNameList[index].length;
if (textLength == 0) {
vm.orgListIndex = index + 1;
vm.visibleName = true;
} else {
vm.visibleName = false;
}
},
// 机构选择默认值
checkDefault() {
vm.formData.organizationNameList.splice(vm.orgListIndex-1, 1, vm.organizationContent);
vm.visibleName = false;
},
//上传列表图片
beforeUploadListPic(file) {
let fileLimit = {
width: 48,
height: 48,
size: 0.5,
sizeText: "500K",
key: "attachmentUrl1",
more: "attachmentMore1",
show: "uploadImgMessage"
};
vm.beforeAvatarUpload(file, fileLimit);
},
//上传图片校验
beforeAvatarUpload(file, fileLimit) {
const isJPG = file.type === "image/jpeg";
const isPNG = file.type === "image/png";
const isLt2M = file.size / 1024 / 1024 < fileLimit.size;
// if (file.width != fileLimit.width || file.height != fileLimit.height) {
// vm.$message.error("图片不符合规范,请根据规范上传图片");
// return;
// }
if (!isJPG && !isPNG) {
vm.$message.error("图片不符合规范,请根据规范上传图片");
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;
image.onload = function() {
let _vm = vm;
if ( false
// _vm.width != fileLimit.width ||
// _vm.height != fileLimit.height
) {
vm.$message.error("图片不符合规范,请根据规范上传图片");
} else {
openLoading(vm);
doUpload(
vm,
file,
getFilePath(file, null),
"preview4",
"progress1",
1
).then(function(path) {
closeLoading(vm);
console.log(path);
if (fileLimit.show == "uploadImgMessage") {
vm.uploadImgMessage = 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.attachmentUrl1 = "";
vm.imgMouseOver = false;
} else {
vm.formData.attachmentUrl2 = "";
vm.imgMouseOver2 = false;
}
},
//改变封面类型
changeCover(radio) {
vm.formData.attachmentUrl2 = "";
},
//上传封面图片
beforeUploadCoverPic(file) {
let fileLimit = {
width: 750,
height: 420,
size: 2,
sizeText: "2.0M",
key: "attachmentUrl2",
more: "attachmentMore2",
show: "uploadImgMessage2"
};
if (vm.formData.type == 1) {
vm.beforeAvatarUpload(file, fileLimit);
} else {
vm.beforeUploadMp4(file);
}
},
//上传mp4
beforeUploadMp4(file) {
console.log(file);
const isMP4 = file.type === "video/mp4";
const isLt = file.size / 1024 / 1024 < 500;
if (!isLt) {
vm.$message.error("视频不符合规范,请根据规范上传视频");
return;
}
if (!isMP4) {
vm.$message.error("视频不符合规范,请根据规范上传视频");
} else {
openLoading(vm);
doUpload(
vm,
file,
getFilePath(file, null),
"preview4",
"progress1",
""
).then(function(path) {
closeLoading(vm);
console.log(path);
vm.uploadImgMessage2 = false;
vm.formData.attachmentUrl2 = path.fullPath;
vm.$message.success("上传成功");
});
}
},
// 点击下一步
nextStep() {
let flag = true;
if (!vm.formData.attachmentUrl1) {
vm.uploadImgMessage = true;
flag = false;
} else {
vm.uploadImgMessage = false;
}
if (!vm.formData.attachmentUrl2) {
vm.uploadImgMessage2 = true;
flag = false;
} else {
vm.uploadImgMessage2 = false;
}
if (vm.submitForm('formData') && flag) {
vm.insertOrupdate(3);
}
},
// 暂存
save() {
if (this.$refs['formData'].projectName == '') {
this.$refs['formData'].validateField('projectName')
} else {
vm.insertOrupdate(1);
};
},
// 新增或者更新基本信息
insertOrupdate(status) {
// 暂存为1 下一步为3
vm.formData.projectStatus = status;
// 图片或者视频地址
vm.formData.attachmentMore1.attachmentUrl = vm.formData.attachmentUrl1;
vm.formData.attachmentMore2.attachmentUrl = vm.formData.attachmentUrl2;
// 封面类型
vm.formData.attachmentMore2.attachmentType = vm.formData.type;
vm.formData.attachmentMore2.kind = 2;
//整合图片视频
vm.attachmentModel[0] = Object.assign(vm.attachmentModel[0],vm.formData.attachmentMore1);
vm.attachmentModel[1] = Object.assign(vm.attachmentModel[1],vm.formData.attachmentMore2);
let baseobj = {};
baseobj.projectModel = JSON.stringify(vm.formData);
baseobj.attachmentModel = JSON.stringify(vm.attachmentModel);
baseobj.attachmentPDFModel= null;
baseobj.notifyData= null;
openLoading(vm);
vm.POST("portal/portalInfo/insertOrUpdate", baseobj).then(res => {
closeLoading(vm);
if (res.code == "000000" && status == 3) {
// 下一步,并将项目id传递
this.$emit('next',res.data.id);
} else if (res.code == "213061") {
vm.dialogObj.visible = true;
} else {
vm.$message.info(res.message);
}
});
},
//表单校验
submitForm(formName) {
let flag = null;
vm.$refs[formName].validate(valid => {
if (valid) {
flag = true;
} else {
flag = false;
}
});
return flag;
},
confirm() {
vm.dialogObj.visible = false;
},
hide() {
vm.dialogObj.visible = false;
this.$emit('backSelectVue')
}
}
}
</script>
<style >
.subject-slelct .el-input__inner {
height: 32px;
line-height: 32px;
}
</style>
<style lang="scss" scoped>
.base-message-wrap {
padding-top: 80px;
.p_label {
margin-left: 56px;
font-size: 12px;
color: #606266;
}
.edit-img {
width: 20px;
height: 20px;
vertical-align: middle;
margin-left: 10px;
}
.day-btn {
display: inline-block;
width: 50px;
height: 32px;
line-height: 32px;
background: #838683;
text-align: center;
margin-left: -3px;
border-radius: 0 4px 4px 0;
z-index: 100;
}
.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 {
img {
float: left;
}
.bg-img {
width: 84px;
height: 100px;
}
.bg-video {
float: left;
width: 84px;
height: 100px;
}
.limit-text {
float: left;
margin-left: 10px;
margin-top: -10px;
p {
font-size: 12px;
color: #999;
}
}
}
.el-upload__tip {
position: absolute;
top: -6px;
left: 130px;
}
.choose-button {
background: #fff;
color: #409eff;
border: 1px solid #409eff;
}
.el-popover--plain {
padding: 18px 20px;
top: 40px;
}
.ueitem {
position: relative;
}
.ue-warp {
position: absolute;
width: 80%;
height: 100%;
background: #F5F7FA;
opacity: 0.5;
top: 0;
z-index: 1000;
}
}
.el-form-item__content {
width: 100%;
height: 100%;
background: red;
}
.popover-content {
position: relative;
top: 0;
left: 0;
}
.time-message {
margin: -6px 0 20px 150px;
font-size: 14px;
}
</style>
<template>
<div class="template-editor-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" :curmbThird="curmbThird"></bread-crumb>
<div class="add-content screenSet" id="screenSet" v-if="editor">
<div class="top-lin"></div>
<step-content
......@@ -9,41 +10,46 @@
@nextStep="nextStep"
@complete="complete"
/>
<!-- 基础组件 -->
<base-message
ref="baseMessage"
v-if="active == 0 && formData"
:projectManger="projectManger"
v-if="active == 0 && ((!newBuild && editor && messageObj.portalOpenTemplateModel) || newBuild)"
:isEditor="editor"
:messageObj="messageObj"
:newBuild="newBuild"
@next="next"
/>
<!-- 选择项目组件 -->
<select-template
ref="selectTemplate"
v-if="active == 1"
v-if="active == 1 && ((!newBuild && editor && messageObj.portalOpenTemplateModel) || newBuild)"
:isEditor="editor"
:openTemplateId="openTemplateId"
:messageObj="messageObj"
:newBuild="newBuild"
/>
<!-- 选择行政区 -->
<!-- <select-region v-if="active == 1"></select-region> -->
<!-- 设定机构 -->
<!-- <set-Organization v-if="active == 0"></set-Organization> -->
</div>
<div class="add-content screenSet" id="screenSet" v-else>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="基础信息" name="first">
<base-message
v-if="messageObj.portalOpenTemplateModel"
ref="baseMessage"
:projectManger="projectManger"
:isEditor="editor"
:messageObj="messageObj"
:newBuild="newBuild"
@next="next"
/>
</el-tab-pane>
<el-tab-pane label="选中组件" name="second">
<select-template
v-if="messageObj.portalOpenTemplateModel"
ref="selectTemplate"
:isEditor="editor"
:openTemplateId="openTemplateId"
:messageObj="messageObj"
:newBuild="newBuild"
/>
</el-tab-pane>
</el-tabs>
......@@ -58,6 +64,7 @@ import baseMessage from "../../components/education/template/baseMessage";
import selectTemplate from "../../components/education/template/selectTemplate";
import selectRegion from "../../components/education/template/selectRegion";
import setOrganization from "../../components/education/template/setOrganization";
import { openLoading, closeLoading } from "../../utils/utils";
export default {
data() {
return {
......@@ -65,57 +72,12 @@ export default {
curmbSecond: "模板管理",
curmbThird: '新建项目模板',
active: 0,
fished: false,
projectManger: false,
formData: {
openTemplateName: "", //开放模板名称
projectBegintime: "", //模板开始时间
projectEndtime: "", //模板结束时间
openTemplateIntro: "", //开放模板简介
type: 1, //封面类型 1图片2视频
expireDay: "", // 开放有效期
subjectId: "", //开放模板所属学科ID
subjectName: "", //开放模板所属学科名称
attachmentUrl1: "",
attachmentUrl2: "",
attachmentUrl3: "",
attachmentMore1: {},
attachmentMore2: {},
organizationName: "", // 发起机构名称(多个机构拼接
organizationNameList: [''], //发起机构列表
openTemplateDetail: '' //开放模板详情
},
attachmentModel:[ //基础信息的图片视频
{
attachmentExt: '',// 附件格式
attachmentName: '',//附件名称
attachmentSize:'',//附件大小,
attachmentType: 1,//1:图片 2:视频 3:pdf
attachmentUrl: '',//附件链接
id: '', //关联唯一ID
kind: 1, //1:列表图片 2:封面配置 3:附件配置
openTemplateId: ''//开放模板id
},
{
attachmentExt: '',// 附件格式
attachmentName: '',//附件名称
attachmentSize:'',//附件大小,
attachmentType: 1,//1:图片 2:视频 3:pdf
attachmentUrl: '',//附件链接
id: '', //关联唯一ID
kind: 1, //1:列表图片 2:封面配置 3:附件配置
openTemplateId: ''//开放模板id
}
],
baseobj: {},
formTemplate: {
component: [],
configure: 2,
certificate: ""
},
openTemplateId: 26,
fished: false, // 是到到最后一步
messageObj: {},
openTemplateId: '',
activeName: 'first',
editor: true // 是否为编辑状态
editor: true, // 是否为编辑状态 还是查看状态
newBuild: true // 是否为新建状态
}
},
components: {
......@@ -127,7 +89,22 @@ export default {
setOrganization
},
created() {
this.fished = this.active == 0 ? false : true
if (!this.$route.query.id) {
this.newBuild = true;
this.editor = true;
} else if (this.$route.query.isEdit == 1) {
this.openTemplateId = this.$route.query.id;
this.newBuild = false;
this.editor = true;
} else {
this.openTemplateId = this.$route.query.id;
this.newBuild = false;
this.editor = false;
}
this.fished = this.active == 0 ? false : true;
if (!this.newBuild) {
this.getBaseMessage()
}
},
methods: {
//用于存储基本信息
......@@ -148,8 +125,19 @@ export default {
this.$refs.selectTemplate.componentDraft(3);
},
handleClick() {
}
},
// 获取已有的基本信息
getBaseMessage() {
openLoading(this);
this.GET(`portal/openTemplate/getOpenTemplateInfo/${this.openTemplateId}`).then(res => {
closeLoading(this);
if (res.code == "000000") {
this.messageObj = res.data
} else {
this.$message.info(res.message);
}
});
},
}
}
</script>
......
......@@ -16,47 +16,53 @@
</el-steps>
</el-col>
<el-col :span="5" :offset="5">
<el-button v-if="!canNext" size="small" type="info" plain>下一步</el-button>
<div v-if="!canNext" class="dis-btn">下一步</div>
<el-button v-if="active!=0" size="small" @click="save">暂存</el-button>
<el-button v-if="active!==2 && canNext" size="small" type="primary" @click="nextStep">下一步</el-button>
<el-button v-if="active==2" size="small" type="primary" @click="complete">完成</el-button>
</el-col>
</el-row>
<!-- 模板列表 -->
<div v-if="active == 0" class="tpl-main">
<template-list @checkFn="checkFn"></template-list>
</div>
<!-- 模板列表 -->
<!-- 填写项目信息-->
<base-message
ref="baseMessage"
v-if="active == 1 && formData"
:formData="formData"
:projectManger="projectManger"
<template-message
ref="templateMessage"
v-if="active == 1"
:openTemplateId="openTemplateId"
:projectId="projectId"
:editor="editor"
@next="next"
@backSelectVue="backSelectVue"
/>
<!-- 选择学员 -->
<div class="three-step" v-else-if="active === 2">
<div class="three-step" v-if="active === 2">
<el-tabs v-model="activeName" @tab-click="handleClickTabs">
<el-tab-pane label="设定行政范围" name="first">
<select-region @setRegion="setRegion"></select-region>
<select-region ref="selectRegion" :projectId="projectId"></select-region>
</el-tab-pane>
<el-tab-pane label="设定机构" name="second">
<set-Organization ></set-Organization>
<set-organization ref="setOrganization"></set-organization>
</el-tab-pane>
</el-tabs>
</div>
</div>
<dialog-componet :dialogObj="dialogObj" @hide="hide"></dialog-componet>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import baseMessage from "../../components/education/template/baseMessage";
import templateMessage from "../../components/education/template/templateMessage";
import selectTemplate from "../../components/education/template/selectTemplate";
import selectRegion from "../../components/education/template/selectRegion";
import setOrganization from "../../components/education/template/setOrganization";
import templateList from "../../components/education/template/templateList";
import dialog from "../../components/education/template/dialog";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
let vm = null;
......@@ -67,32 +73,6 @@ export default {
curmbSecond: "项目管理",
curmbThird: '发起项目',
active: 0,
fished: false,
projectManger: true,
formData: {
projectName: "",
projectBegintime: "",
projectEndtime: "",
projectIntro: "",
type: 1,
useTime: "",
xueke: "",
attachmentUrl1: "",
attachmentUrl2: "",
attachmentUrl3: "",
attachmentMore1: {},
attachmentMore2: {},
scopeType: 0,
organizationName: "",
organizationNameList: [''],
sendOption: 1,
receiveOption: 1,
visibleFlag: 1,
learnableFlag: 2,
authorityType: 1,
allowLearn: 2,
richContent: ''
},
formTemplate: {
component: [],
configure: 2,
......@@ -100,17 +80,53 @@ export default {
},
activeName: "first",
canNext: false,
openTemplateId: '',
r: []//设定行政范围和设定机构相互影响的行政范围
openTemplateId: 0, // 开放模板ID
projectId: '', // 项目id
status: 10, // 0正常10没有加入机构11审核中12审核失败20存在进行中项目21数量已达上限
editor: false, // 是否为编辑状态
dialogObj: {
visible: false,
title: '',
message: '',
hideMsg: ''
},
statusObj: {
status_10: {
title: '您暂未加入机构',
message: '请前往云鹊医App-个人中心完善机构信息,加入机构后,可创建项目',
hideMsg: '我知道了'
},
status_11: {
title: '您创建的机构正在审核中',
message: '请前往云鹊医App-个人中心查看审核进度,审核通过后,可创建机构',
hideMsg: '我知道了'
},
status_12: {
title: '您创建的机构审核不通过',
message: '请前往云鹊医App-个人中心完善机构信息,加入机构后,可创建项目',
hideMsg: '我知道了'
},
status_20: {
title: '该项目正在进行中',
message: '不能重复创建,请选择其他模版或者下架正在进行中的项目',
hideMsg: '确定'
},
status_21: {
title: '该项目创建数量已上限',
message: '本年度免费创建数已达',
hideMsg: '确定'
}
}
}
},
components: {
BreadCrumb,
baseMessage,
templateMessage,
selectTemplate,
selectRegion,
setOrganization,
templateList
templateList,
dialogComponet:dialog
},
created() {
vm = this;
......@@ -121,21 +137,83 @@ export default {
methods: {
// 下一步
nextStep() {
// let flag = this.$refs.baseMessage.nextStep();
// if (!flag) {
// return;
// }
this.active++;
if (this.active == 0) {
// let flag = this.checkSelectTemplate();
let flag = true;
if (flag) {
this.active = 1;
}
return;
}
if (this.active == 1) {
this.fished = true;
this.$refs.templateMessage.nextStep();
return;
}
},
// 填写项目信息组件的下一步回调
next(id) {
this.projectId = id;
this.active = 2;
},
// 暂存
save() {
if (this.active == 1) {
this.$refs.templateMessage.save();
} else if (this.active == 2) {
this.regionComplete();
}
},
// 完成
complete() {
console.log('完成');
this.regionComplete(this.changeStatus());
},
// 选择学元范围暂存
regionComplete(fishFn) {
let req = {
projectId: this.projectId,
scopeOfAdministrative: this.$refs.selectRegion.setScope(),
scopeOfDepartment: 99999999,
flag: fishFn ? 3 : 1, //0:下一步 1:暂存
};
openLoading(vm);
vm.POST("portal/new/scope", req).then(res => {
closeLoading(vm);
if(res.code == '000000' && fishFn) {
fishFn();
}
if (!fishFn) {
vm.$message({
type: "info",
message: res.message
});
}
});
},
// 完成后更改状态
changeStatus() {
let req = {
projectId: this.projectId,
changeStatus: 3 //待审核
};
vm.POST("portal/portalInfo/changeStatus", req)
.then(res => {
vm.$message({
type: "info",
message: res.message
});
})
.catch(() => {
vm.$message({
type: "warning",
message: res.message
});
})
},
//切换tabs
handleClickTabs(tab, event) {
// this.activeName = tab.name;
if (tab.name == 'second') {
this.setRegion();
}
},
// 模板列表选中
checkFn(id) {
......@@ -149,7 +227,13 @@ export default {
.then(res => {
closeLoading(vm);
if (res.code == "000000") {
console.log()
if (res.data.status == 0) {
return true;
} else {
this.dialogObj = Object.assign(this.dialogObj, this.statusObj[`status_${res.data.status}`]);
this.dialogObj.visible = true;
return false;
}
} else {
vm.$message.info(res.message);
}
......@@ -159,12 +243,21 @@ export default {
vm.$message.warning('请稍后重试');
});
},
// 设定行政范围和设定机构范围相互影响
setRegion(r) {
this.r = r;
console.log('====================================');
console.log(r);
console.log('====================================');
// 隐藏弹框
hide() {
this.dialogObj.visible = false;
},
// 获取行政范围
setRegion() {
this.getOrganizationList(this.$refs.selectRegion.getScope());
},
// 查询行政范围的设定机构列表
getOrganizationList(r) {
this.$refs.setOrganization.getOrganization(r);
},
// 返回选择模板页
backSelectVue() {
this.active = 0;
}
}
}
......@@ -240,6 +333,19 @@ export default {
color: #449284;
border: 1px solid #449284 !important;
}
.dis-btn {
width:78px;
height:34px;
background:rgba(240,242,245,1);
border-radius:3px;
font-size:14px;
font-family:PingFangSC-Regular,PingFang SC;
font-weight:400;
color:rgba(144,147,153,1);
line-height:34px;
text-align: center;
cursor: pointer;
}
}
.add-content {
background: #fff;
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册