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

Merge branch 'dev-question-bank-0916' into release

* dev-question-bank-0916:
  前端题库名称长度校验字段修改
  前端题库名称长度校验修改
  面包屑文案修改
  字段为空处理
  学科简介字符长度限制
  学科配置题数校验
  学科配置收费字段调整
  新建项目增加卡类型级联菜单
  学科配置头图尺寸判断
  项目配置和题库配置未选置空
  学科配置开发与联调

# Conflicts:
#	src/utils/fetch.js
...@@ -54,9 +54,8 @@ service.interceptors.request.use(config => { ...@@ -54,9 +54,8 @@ service.interceptors.request.use(config => {
} }
if( process.env.BUILD_ENV == "development" ){ // 本地开发环境qgit if( process.env.BUILD_ENV == "development" ){ // 本地开发环境qgit
// console.log('环境变量>>>> ', process.env.BUILD_ENV); // console.log('环境变量>>>> ', process.env.BUILD_ENV);
// config.headers['token'] = '9098AE0A1DCE4F7B86178A9A8A1BFFCC'; config.headers['token'] = '993044B5B767489286106A32032F076C';
// config.headers['token'] = localStorage.getItem('storageToken')
config.headers['token'] = localStorage.getItem('storageToken')
}else{ }else{
config.headers['token'] = localStorage.getItem('storageToken') config.headers['token'] = localStorage.getItem('storageToken')
} }
......
...@@ -89,8 +89,10 @@ ...@@ -89,8 +89,10 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<el-col :span="13">
<el-form-item label="项目时间:" required> <el-form-item label="项目时间:" required>
<el-col :span="5"> <el-col :span="10">
<el-form-item prop="projectBegintime"> <el-form-item prop="projectBegintime">
<el-date-picker <el-date-picker
v-model="formData.projectBegintime" v-model="formData.projectBegintime"
...@@ -121,6 +123,19 @@ ...@@ -121,6 +123,19 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="卡类型:" prop="cardType">
<el-cascader
size="small"
:options="optionsPro"
v-model="formData.cardType"
:props="{ value: 'goodsType', label: 'goodsTypeName', children: 'cardsList', expandTrigger: 'hover' }"
@change="handleProChange"
placeholder="请选择卡类型"></el-cascader>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="项目简介:" prop="projectIntro"> <el-form-item label="项目简介:" prop="projectIntro">
<el-col :span="13"> <el-col :span="13">
<el-input <el-input
...@@ -1392,6 +1407,7 @@ export default { ...@@ -1392,6 +1407,7 @@ export default {
cmeType: 1, cmeType: 1,
cmeCredit: '', cmeCredit: '',
examBtnUrl: '', examBtnUrl: '',
cardType: "",
}, },
checkCredit: 1, checkCredit: 1,
pickerOptions0: { pickerOptions0: {
...@@ -1784,8 +1800,12 @@ export default { ...@@ -1784,8 +1800,12 @@ export default {
], ],
examBtnUrl: [ examBtnUrl: [
{ required: true, validator: checkExamBtnUrl, trigger: "change" } { required: true, validator: checkExamBtnUrl, trigger: "change" }
] ],
} cardType: [
{ required: true, message: "请选择卡类型", trigger: "change" }
],
},
optionsPro: [],
}; };
}, },
computed: { computed: {
...@@ -1814,12 +1834,34 @@ export default { ...@@ -1814,12 +1834,34 @@ export default {
if (vm.idType == 2) { if (vm.idType == 2) {
this.activeName = "second"; this.activeName = "second";
} }
this.getGoodsTypeList();
}, },
// 挂载到Dom完成时 // 挂载到Dom完成时
mounted: function() { mounted: function() {
commonUtil.resizeHeight(); commonUtil.resizeHeight();
}, },
methods: { methods: {
//获取商品分类
getGoodsTypeList() {
openLoading(this);
this.GET("trade/goods/manager/queryGoodsType").then(res => {
closeLoading(this);
if (res.code == "000000") {
this.optionsPro = this.getProSelect(res.data);
}
});
},
getProSelect(data) {
for (let i = 0; i < data.length; i++) {
data[i].cardsList.map(item => {
this.$set(item, "goodsType", item.cardType);
this.$set(item, "goodsTypeName", item.cardTypeName);
this.$set(item, "leaf", true);
});
}
return data;
},
focusFun(ev, parm, index) { focusFun(ev, parm, index) {
if (index != undefined) { if (index != undefined) {
if (parseInt(ev) < 0 || !this.checkIntFun(ev)) { if (parseInt(ev) < 0 || !this.checkIntFun(ev)) {
...@@ -2120,6 +2162,8 @@ export default { ...@@ -2120,6 +2162,8 @@ export default {
cmeType: this.formData.cmeType, cmeType: this.formData.cmeType,
cmeCredit: this.formData.cmeCredit, cmeCredit: this.formData.cmeCredit,
examBtnUrl: this.formData.examBtnUrl, examBtnUrl: this.formData.examBtnUrl,
goodsType: this.formData.cardType[0],
cardType: this.formData.cardType[1],
}; };
let attachmentModel = [ let attachmentModel = [
{ {
......
...@@ -126,14 +126,21 @@ ...@@ -126,14 +126,21 @@
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="卡类型:" prop="cardType"> <el-form-item label="卡类型:" prop="cardType">
<el-select size="small" v-model="formData.cardType" placeholder="请选择卡类型"> <!-- <el-select size="small" v-model="formData.cardType" placeholder="请选择卡类型">
<el-option <el-option
v-for="item in cardTypeList" v-for="item in cardTypeList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select> -->
<el-cascader
size="small"
:options="optionsPro"
v-model="formData.cardType"
:props="{ value: 'goodsType', label: 'goodsTypeName', children: 'cardsList', expandTrigger: 'hover' }"
@change="handleProChange"
placeholder="请选择卡类型"></el-cascader>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -1810,7 +1817,8 @@ export default { ...@@ -1810,7 +1817,8 @@ export default {
examBtnUrl: [ examBtnUrl: [
{ required: true, validator: checkExamBtnUrl, trigger: "change" } { required: true, validator: checkExamBtnUrl, trigger: "change" }
] ]
} },
optionsPro: [],
}; };
}, },
computed: { computed: {
...@@ -1839,12 +1847,41 @@ export default { ...@@ -1839,12 +1847,41 @@ export default {
if (vm.idType == 2) { if (vm.idType == 2) {
this.activeName = "second"; this.activeName = "second";
} }
this.getGoodsTypeList();
}, },
// 挂载到Dom完成时 // 挂载到Dom完成时
mounted: function() { mounted: function() {
commonUtil.resizeHeight(); commonUtil.resizeHeight();
}, },
methods: { methods: {
//获取商品分类
getGoodsTypeList() {
openLoading(this);
this.GET("trade/goods/manager/queryGoodsType").then(res => {
closeLoading(this);
if (res.code == "000000") {
// this.copyLockList = deepCopy(res.data);
// let data = res.data;
this.optionsPro = this.getProSelect(res.data);
// this.optionsPro = res.data;
}
});
},
getProSelect(data) {
for (let i = 0; i < data.length; i++) {
data[i].cardsList.map(item => {
this.$set(item, "goodsType", item.cardType);
this.$set(item, "goodsTypeName", item.cardTypeName);
this.$set(item, "leaf", true);
});
}
return data;
},
handleProChange(value) {
console.log("handleProChange() : value = " + value);
},
focusFun(ev, parm, index) { focusFun(ev, parm, index) {
if (index != undefined) { if (index != undefined) {
if (parseInt(ev) < 0 || !this.checkIntFun(ev)) { if (parseInt(ev) < 0 || !this.checkIntFun(ev)) {
...@@ -2139,7 +2176,9 @@ export default { ...@@ -2139,7 +2176,9 @@ export default {
projectType: this.projectType, projectType: this.projectType,
projectNo: this.formData.projectNo, projectNo: this.formData.projectNo,
projectLevel: this.formData.projectLevel, projectLevel: this.formData.projectLevel,
cardType: this.formData.cardType, // cardType: this.formData.cardType,
goodsType: this.formData.cardType[0],
cardType: this.formData.cardType[1],
projectLeaderId: this.formData.projectLeaderId, projectLeaderId: this.formData.projectLeaderId,
projectSubject: this.formData.projectSubject, projectSubject: this.formData.projectSubject,
mustKnow: this.formData.mustKnow || '', mustKnow: this.formData.mustKnow || '',
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
</el-col> </el-col>
</el-row> </el-row>
<template v-for="(item, index) in formData.titleTestSubjectSecondModelList"> <template v-for="(item, index) in formData.titleTestSubjectSecondModelList">
<h4 style="margin-top:10px;font-weight: 600">{{ index+1 }}个二级分类:</h4>
<div class="list-block" :key="index"> <div class="list-block" :key="index">
<el-form-item <el-form-item
label="二级分类名称:" label="二级分类名称:"
...@@ -66,6 +67,14 @@ ...@@ -66,6 +67,14 @@
<span class="word-num">{{(item.code).replace(/\s+/g,"").length}}/8</span> <span class="word-num">{{(item.code).replace(/\s+/g,"").length}}/8</span>
</el-col> </el-col>
</el-form-item> </el-form-item>
<div class="checkbox-item">
<el-checkbox
v-model="item.checkedCourse"
@change="changeCourse(item.checkedCourse, index)"
style="margin-left: 15px;">配置课程</el-checkbox>
</div>
<div class="list-block-item" v-if="item.checkedCourse">
<p class="item-title">配置课程</p>
<el-form-item <el-form-item
label="是否已在项目配置课程:" label="是否已在项目配置课程:"
:prop="`titleTestSubjectSecondModelList.${index}.openFlag`" :prop="`titleTestSubjectSecondModelList.${index}.openFlag`"
...@@ -103,7 +112,160 @@ ...@@ -103,7 +112,160 @@
placeholder="选择月"> placeholder="选择月">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<i class="el-icon-delete icon-delete" @click="deleteCourseConfig(index)"></i>
</div>
<div class="checkbox-item">
<el-checkbox
v-model="item.checkedQue"
@change="changeQue(item.checkedQue, index)"
style="margin-left: 15px;"
>配置题库</el-checkbox>
</div>
<div class="list-block-item" v-if="item.checkedQue">
<p class="item-title">题库通用信息</p>
<el-row>
<el-col :span="11">
<el-form-item label="题库配图:">
<el-upload
v-model="item.directoryImageUrl"
class="bg-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeUploadPic"
>
<img
v-if="item.directoryImageUrl"
@mouseover.stop="item.imgMouseOver=true"
:src="item.directoryImageUrl"
class="bg-img"
>
<img
v-if="!item.directoryImageUrl"
class="bg-img"
src="../../assets/image/small.png"
@click="getCurrentIndex(index)"
>
<div
class="img-delete"
v-show="item.imgMouseOver"
@click.stop="deleteImg(item.directoryImageUrl,index)"
@mouseout.stop="item.imgMouseOver=false">
<i class="el-icon-delete"></i>
</div>
<div class="limit-text">
<p>尺寸:686*160</p>
<p>限制大小: 500Kb</p>
<p>支持.jpg,.png格式</p>
</div>
</el-upload>
</el-form-item>
</el-col>
<el-col :span="13">
<el-form-item label="题库介绍:">
<el-input
size="small"
type="textarea"
:autosize="{ minRows: 5}"
placeholder="请输入入口简介"
v-model="item.directoryIntro"
maxlength="200"
style="width:83%;"
></el-input>
<span class="word-num">{{(item.directoryIntro).replace(/\s+/g,"").length}}/200</span>
</el-form-item>
</el-col>
</el-row>
<el-form-item
label="可解锁商品:"
:prop="`titleTestSubjectSecondModelList.${index}.nolockPro`"
:rules="{ required: true, message: '请选择可解锁商品', trigger: 'change'}"
>
<el-cascader
v-model="item.nolockPro"
:options="options"
:props="{ value: 'goodsType', label: 'goodsTypeName', children: 'cardsList'}"
size="small"></el-cascader>
</el-form-item>
<i class="el-icon-delete icon-delete" @click="deleteQC(index)"></i>
<el-row>
<el-col :span="13">
<el-button type="primary" icon="el-icon-plus" size="small" @click="addQuestionS(index)" :disabled="item.directoryList.length>=4">新增子题库</el-button>
</el-col>
</el-row>
<div v-for="(item2, index2) in item.directoryList" :key="index2">
<div class="list-block-item set-bg">
<p class="item-title">配置子题库</p>
<el-row>
<el-col :span="11">
<el-form-item
label="选择题库:"
:prop="`titleTestSubjectSecondModelList.${index}.directoryList.${index2}.resourceId`"
:rules="{ required: true, message: '请选择题库', trigger: 'change'}"
>
<el-select
v-model="item2.resourceId"
filterable
size="small"
clearable
placeholder="请选择题库"
:popper-append-to-body="false"
@change="changeQBValue(item2.resourceId,index2,index)"
>
<el-option
v-for="(directory, d) in secondDirectoryList"
:key="directory.id"
:label="directory.directoryName"
:value="directory.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="13">
<el-form-item
label="前端题库名称:"
:prop="`titleTestSubjectSecondModelList.${index}.directoryList.${index2}.content1`"
:rules="directoryNameRules"
>
<el-input
v-model="item2.content1"
type="text"
placeholder="默认取关联题库的名称,可修改"
size="small"
style="width: 80%"
maxlength="25">
</el-input>
<span class="word-num">{{(item2.content1).replace(/\s+/g,"").length}}/25</span>
</el-form-item>
</el-col>
</el-row>
<el-form-item
label="收费:"
:prop="`titleTestSubjectSecondModelList.${index}.directoryList.${index2}.freeFlag`"
:rules="{ required: true, message: '请选择收费项', trigger: 'change'}"
>
<el-radio-group v-model="item2.freeFlag">
<el-radio label="0">免费</el-radio>
<el-radio label="1">收费</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label="可免费体验题数:"
v-if="item2.freeFlag == 1"
:prop="`titleTestSubjectSecondModelList.${index}.directoryList.${index2}.content2`"
:rules="freeContentRules"
>
<el-input
type="number"
v-model="item2.content2"
placeholder="请输入自然数"
style="width: 200px;">
<template slot="append"></template>
</el-input>
</el-form-item>
<i v-show="index2 !== 0" class="el-icon-delete icon-delete" @click="deleteSecondQB(item2,index2,index)"></i>
</div>
</div>
</div>
<i v-show="index !== 0" class="el-icon-delete icon-delete" @click="deleteSecondList(index)"></i> <i v-show="index !== 0" class="el-icon-delete icon-delete" @click="deleteSecondList(index)"></i>
</div> </div>
</template> </template>
...@@ -121,6 +283,8 @@ ...@@ -121,6 +283,8 @@
import BreadCrumb from "@/components/breadcrumb.vue"; import BreadCrumb from "@/components/breadcrumb.vue";
import { openLoading, closeLoading, deepCopy } from "@/utils/utils"; import { openLoading, closeLoading, deepCopy } from "@/utils/utils";
import * as commonUtil from "@/utils/utils"; import * as commonUtil from "@/utils/utils";
import {doUpload, getFilePath} from "../../utils/qiniu-util";
// import { checkNormalInt } from '@/utils/followup/followupUtils/checkField';
let checkProjectStr = (rule, value, callback) => { let checkProjectStr = (rule, value, callback) => {
if (value.indexOf("\\") != -1) { if (value.indexOf("\\") != -1) {
...@@ -132,7 +296,16 @@ let checkProjectStr = (rule, value, callback) => { ...@@ -132,7 +296,16 @@ let checkProjectStr = (rule, value, callback) => {
callback(); callback();
} }
}; };
let checkNormalInt = (rule, value, callback) => {
const val = parseFloat(value);
const isInteger = Number.isInteger(val);
// if((isInteger && val > 0) || checkNeedRule(val)){
if( !value || (isInteger && val >= 0) ){
callback()
}else{
callback(new Error(`请输入大于等于0的正整数`))
}
}
export default { export default {
components: { components: {
BreadCrumb BreadCrumb
...@@ -162,19 +335,43 @@ export default { ...@@ -162,19 +335,43 @@ export default {
seqNo: 1, seqNo: 1,
subjectFirstId: '', subjectFirstId: '',
projectId: '', projectId: '',
checkedCourse: false,//新增字段-配置课程
checkedQue: false,//新增字段-配置题库
directoryImageUrl: '',//新增字段-题库配图
directoryIntro: '',//新增字段-题库介绍
nolockPro: [],//新增字段-可解锁商品
goodsType: 0,//新增字段-商品类型
cardType: 0,//新增字段-卡类型
imgMouseOver: false,//新增字段
titleTestSubjectSecondResourceModelList: [{ titleTestSubjectSecondResourceModelList: [{
// deleteFlag: 0, // deleteFlag: 0,
id: 0, id: 0,
resourceId: 0, resourceId: 0,
seqNo: 1, seqNo: 1,
subjectSecondId: 0, subjectSecondId: 0,
type: 0 type: 1
}] }],
directoryList: [
{
type: 2,//关联资源类型,1项目,2题库
subjectSecondId: 0,//二级分类id
seqNo: 1,
resourceId: '',//关联资源id
id: 0,
freeFlag: '1',//题库是否免费:0免费1收费
content1: '',//题库分类名称
content2: '',//表示免费体检题数
}
],
} }
], ],
}, },
gradeList: [], // 职称列表 gradeList: [], // 职称列表
projectList: [], // 项目列表 projectList: [], // 项目列表
copyLockList: [],
options: [],
secondDirectoryList: [],//题库列表
activeIndexImg: null,
rules: { rules: {
titleCode: [ titleCode: [
{ required: true, message: "请输入选择职称", trigger: "change" }, { required: true, message: "请输入选择职称", trigger: "change" },
...@@ -190,6 +387,14 @@ export default { ...@@ -190,6 +387,14 @@ export default {
{ min: 1, max: 20, message: "输入长度为1-20的二级分类名称", trigger: "blur" }, { min: 1, max: 20, message: "输入长度为1-20的二级分类名称", trigger: "blur" },
{ validator: checkProjectStr, trigger: "blur" } { validator: checkProjectStr, trigger: "blur" }
], ],
freeContentRules: [
{ required: true, message: '请输入免费体验题数', trigger: ['blur','change']},
{ validator: checkNormalInt, trigger: ['blur','change'] }
],
directoryNameRules: [
{ required: true, message: '请输入前端题库名称', trigger: ['blur','change']},
{ min: 1, max: 25, message: "输入长度为1-25的前端题库名称", trigger: ['blur','change'] },
],
// secondCodeRules: [ // secondCodeRules: [
// // { required: true, message: "请输入二级分类代码", trigger: "blur" }, // // { required: true, message: "请输入二级分类代码", trigger: "blur" },
// // { min: 1, max: 8, message: "输入长度为1-8的二级分类代码", trigger: "blur" }, // // { min: 1, max: 8, message: "输入长度为1-8的二级分类代码", trigger: "blur" },
...@@ -199,10 +404,13 @@ export default { ...@@ -199,10 +404,13 @@ export default {
created() { created() {
const { id } = this.$route.query; const { id } = this.$route.query;
if (id) { if (id) {
this.curmbThird = '编辑学科';
this.getSubjectDetail(id); this.getSubjectDetail(id);
} }
this.getGradeList(); this.getGradeList();
this.getProjectList(); this.getProjectList();
this.getGoodsTypeList();
this.getsecondDirectoryList();
}, },
mounted() { mounted() {
commonUtil.resizeHeight(); commonUtil.resizeHeight();
...@@ -241,9 +449,41 @@ export default { ...@@ -241,9 +449,41 @@ export default {
} }
}); });
}, },
//获取商品分类
getGoodsTypeList() {
openLoading(this);
this.GET("trade/goods/manager/queryGoodsType").then(res => {
closeLoading(this);
if (res.code == "000000") {
this.copyLockList = deepCopy(res.data);
let data = res.data;
this.options = this.getProSelect(data);
}
});
},
getProSelect(data) {
for (let i = 0; i < data.length; i++) {
data[i].cardsList.map(item => {
this.$set(item, "goodsType", item.cardType);
this.$set(item, "goodsTypeName", item.cardTypeName);
this.$set(item, "leaf", true);
});
}
return data;
},
//获取题库列表
getsecondDirectoryList() {
openLoading(this);
this.GET(`onlineexam/brushExamTitleDirectory?directoryType=1`).then(res => {
closeLoading(this);
if (res.code == "000000") {
this.secondDirectoryList = res.data;
}
});
},
// 添加二级分类 // 添加二级分类
addSecondList() { addSecondList() {
this.formData.titleTestSubjectSecondModelList.push({ let item = {
code: '', code: '',
// deleteFlag: 0, // deleteFlag: 0,
id: 0, id: 0,
...@@ -253,15 +493,36 @@ export default { ...@@ -253,15 +493,36 @@ export default {
seqNo: 1, seqNo: 1,
subjectFirstId: '', subjectFirstId: '',
projectId: '', projectId: '',
checkedCourse: false,//新增字段-配置课程
checkedQue: false,//新增字段-配置题库
directoryImageUrl: '',//新增字段-题库配图
directoryIntro: '',//新增字段-题库介绍
nolockPro: [],//新增字段-可解锁商品
goodsType: 0,//新增字段-商品类型
cardType: 0,//新增字段-卡类型
imgMouseOver: false,//新增字段
titleTestSubjectSecondResourceModelList: [{ titleTestSubjectSecondResourceModelList: [{
// deleteFlag: 0, // deleteFlag: 0,
id: 0, id: 0,
resourceId: 0, resourceId: 0,
seqNo: 1, seqNo: 1,
subjectSecondId: 0, subjectSecondId: 0,
type: 0 type: 1
}] }],
}); directoryList: [
{
type: 2,//关联资源类型,1项目,2题库
subjectSecondId: 0,//二级分类id
seqNo: 1,
resourceId: '',//关联资源id
id: 0,
freeFlag: '1',//题库是否免费:0免费1收费
content1: '',//题库分类名称
content2: '',//表示免费体检题数
}
],
}
this.formData.titleTestSubjectSecondModelList.push(item);
}, },
// 删除二级分类 // 删除二级分类
deleteSecondList(index) { deleteSecondList(index) {
...@@ -274,25 +535,53 @@ export default { ...@@ -274,25 +535,53 @@ export default {
}).catch(() => { }).catch(() => {
}); });
}, },
//提交
onSubmit() { onSubmit() {
this.$refs['formData'].validate((valid) => { this.$refs['formData'].validate((valid) => {
if (!valid) { if (!valid) {
return false; return false;
} }
const params = deepCopy(this.formData); const params = deepCopy(this.formData);
// for (let item of params.titleTestSubjectSecondModelList) {
let item = {}; let item = {};
for (let i = 0; i < params.titleTestSubjectSecondModelList.length; i ++) { for (let i = 0; i < params.titleTestSubjectSecondModelList.length; i ++) {
item = params.titleTestSubjectSecondModelList[i]; item = params.titleTestSubjectSecondModelList[i];
//新增处理-配置课程
if (!item.checkedCourse) {
item.openFlag = 0;
item.projectId = '';
item.predictTime = '';
item.titleTestSubjectSecondResourceModelList = [];
}else {
let id = item.projectId; let id = item.projectId;
item.titleTestSubjectSecondResourceModelList[0]['resourceId'] = id || 0; item.titleTestSubjectSecondResourceModelList[0]['resourceId'] = id || 0;
delete item.projectId;
}
//新增处理-配置题库
if (!item.checkedQue) {
item.directoryImageUrl = '';
item.directoryIntro = '';
item.nolockPro = [];
item.goodsType = 0;
item.cardType = 0;
item.directoryList = [];
}else {
item.goodsType = item.nolockPro[0];
item.cardType = item.nolockPro[1];
for (let item2 of item.directoryList) {
if (item2.freeFlag == 0) {
item2.content2 = '';
}
if (!item2) {
item2.resourceId = 0;
}
}
}
// 添加或重置排序字段 // 添加或重置排序字段
item.seqNo = i + 1; item.seqNo = i + 1;
delete item.projectId;
} }
// params.createdName = this.$store.state.reservationManage.userName; // params.createdName = this.$store.state.reservationManage.userName;
openLoading(this); openLoading(this);
this.POST("portal/titleTest/insertOrUpdate", params).then(res => { this.POST("portal/titleTest/insertOrUpdate", params).then(res => {
...@@ -316,20 +605,35 @@ export default { ...@@ -316,20 +605,35 @@ export default {
const modelList = []; const modelList = [];
for (let item of result.secondSubjectModelList) { for (let item of result.secondSubjectModelList) {
if (item.resourceModelList && item.resourceModelList[0]) { if (item.resourceModelList && item.resourceModelList[0]) {
item.projectId = item.resourceModelList[0]['resourceId'] item.projectId = item.resourceModelList[0]['resourceId'];
item.titleTestSubjectSecondResourceModelList = item.resourceModelList; item.titleTestSubjectSecondResourceModelList = item.resourceModelList;
delete item.resourceModelList; delete item.resourceModelList;
} else { } else {
item.projectId = 0; item.projectId = '';
item.titleTestSubjectSecondResourceModelList = [{ item.titleTestSubjectSecondResourceModelList = [{
// deleteFlag: 0, // deleteFlag: 0,
id: 0, id: 0,
resourceId: 0, resourceId: 0,
seqNo: 1, seqNo: 1,
subjectSecondId: 0, subjectSecondId: 0,
type: 0 type: 1
}] }]
} }
//新增处理逻辑
item.checkedCourse = false;
item.checkedQue = false;
item.nolockPro = [];
if (item.projectId || item.predictTime) {
item.checkedCourse = true;
}else {
item.openFlag = 1;
}
if (item.goodsType && item.cardType) {
item.nolockPro = [Number(item.goodsType),Number(item.cardType)];
item.checkedQue = true;
}
item.imgMouseOver = false;
modelList.push(item); modelList.push(item);
} }
result.titleTestSubjectSecondModelList = modelList; result.titleTestSubjectSecondModelList = modelList;
...@@ -354,19 +658,188 @@ export default { ...@@ -354,19 +658,188 @@ export default {
seqNo: 1, seqNo: 1,
subjectFirstId: '', subjectFirstId: '',
projectId: '', projectId: '',
checkedCourse: false,//新增字段-配置课程
checkedQue: false,//新增字段-配置题库
directoryImageUrl: '',//新增字段-题库配图
directoryIntro: '',//新增字段-题库介绍
nolockPro: [],//新增字段-可解锁商品
goodsType: 0,//新增字段-商品类型
cardType: 0,//新增字段-卡类型
imgMouseOver: false,//新增字段
titleTestSubjectSecondResourceModelList: [{ titleTestSubjectSecondResourceModelList: [{
// deleteFlag: 0, // deleteFlag: 0,
id: 0, id: 0,
resourceId: 0, resourceId: 0,
seqNo: 1, seqNo: 1,
subjectSecondId: 0, subjectSecondId: 0,
type: 0 type: 1
}] }],
directoryList: [
{
type: 2,//关联资源类型,1项目,2题库
subjectSecondId: 0,//二级分类id
seqNo: 1,
resourceId: '',//关联资源id
id: 0,
freeFlag: '1',//题库是否免费:0免费1收费
content1: '',//题库分类名称
content2: '',//表示免费体检题数
} }
], ],
} }
],
}
}
},
changeCourse(value, indexL0) {
if (!value) {
this.deleteCourseConfig(indexL0);
}
},
changeQue(value, indexL0) {
if (!value) {
this.deleteQC(indexL0);
}
},
//课程配置的删除操作
deleteCourseConfig(indexL0) {
this.$confirm('确定删除当前二级分类的课程配置吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.formData.titleTestSubjectSecondModelList[indexL0].checkedCourse = false;
}).catch(() => {
this.formData.titleTestSubjectSecondModelList[indexL0].checkedCourse = true;
});
},
//题库配置的删除操作
deleteQC(indexL0) {
this.$confirm('确定删除当前二级分类的题库配置吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.formData.titleTestSubjectSecondModelList[indexL0].checkedQue = false;
}).catch(() => {
this.formData.titleTestSubjectSecondModelList[indexL0].checkedQue = true;
});
},
getCurrentIndex(indexL0) {
this.activeIndexImg = indexL0;
},
beforeUploadPic(file) {
let fileLimit = {
width: 686,
height: 160,
size: 0.5,
sizeText: "500Kb",
key: "directoryImageUrl",
more: "directoryImageUrl",
show: "uploadImgMessage1"
};
this.beforeAvatarUpload(file, fileLimit);
},
//上传图片校验
beforeAvatarUpload(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) {
this.$message.error("图片不符合规范,请根据规范上传图片");
// return;
}
if (!isLt2M) {
this.$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 _this = this;
if (
// false
_this.width != fileLimit.width ||
_this.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);
vm.formData.titleTestSubjectSecondModelList[vm.activeIndexImg][fileLimit.key] = path.fullPath;
// vm.formData[fileLimit.more] = {
// attachmentName: path.name,
// attachmentExt: path.ext,
// attachmentSize: path.size
// };
vm.$message.success("上传成功");
});
}
};
};
return isJPG && isLt2M;
},
//删除图片
deleteImg(img, indexL0) {
this.formData.titleTestSubjectSecondModelList[indexL0].directoryImageUrl = '';
this.formData.titleTestSubjectSecondModelList[indexL0].imgMouseOver = false;
},
//新增子题库
addQuestionS(activeIndex) {
let seqLength = this.formData.titleTestSubjectSecondModelList[activeIndex].directoryList.length;
let obj = {
type: 2,//关联资源类型,1项目,2题库
subjectSecondId: 0,//二级分类id
seqNo: seqLength+1,
resourceId: '',//关联资源id
id: 0,
freeFlag: '1',//题库是否免费:0免费,1收费
content1: '',//题库分类名称
content2: '',//表示免费体检题数
} }
if (seqLength >=4) {
this.$message.warning('最多只能增加4个子题库')
return;
} }
this.formData.titleTestSubjectSecondModelList[activeIndex].directoryList.push(obj)
},
formatDirectory(value) {
let directoryName = '';
for (let i=0; i<this.secondDirectoryList.length; i++) {
if (this.secondDirectoryList[i].id == value) {
directoryName = this.secondDirectoryList[i].directoryName;
}
}
return directoryName;
},
changeQBValue(value,indexL1,indexL0) {
let directoryName = this.formatDirectory(value);
this.formData.titleTestSubjectSecondModelList[indexL0].directoryList[indexL1].content1 = directoryName;
},
//删除子题库
deleteSecondQB(obj1,indexL1, indexL0) {
this.$confirm('确定删除此子题库吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.formData.titleTestSubjectSecondModelList[indexL0].directoryList.splice(indexL1, 1);
}).catch(() => {
});
},
}, },
} }
</script> </script>
...@@ -383,10 +856,36 @@ export default { ...@@ -383,10 +856,36 @@ export default {
} }
.list-block{ .list-block{
position: relative; position: relative;
padding: 20px 10px 0px; padding: 20px 10px 10px;
border: 1px solid #cdcdcd; border: 1px solid #cdcdcd;
border-radius: 5px; border-radius: 5px;
margin-top: 25px; margin-top: 25px;
margin-bottom: 20px;
}
.checkbox-item{
margin-bottom: 22px;
}
.list-block-item{
position: relative;
padding: 10px;
border: 1px solid #cdcdcd;
border-radius: 5px;
margin-top: 15px;
margin-bottom: 15px;
.icon-delete{
position: absolute;
right: 20px;
top: 10px;
font-size: 30px;
color: red;
cursor: pointer;
}
.item-title{
margin: 5px 0 15px;
}
&.set-bg{
background-color: #f1f1f1;
}
} }
.icon-delete{ .icon-delete{
position: absolute; position: absolute;
...@@ -396,4 +895,57 @@ export default { ...@@ -396,4 +895,57 @@ export default {
color: red; color: red;
cursor: pointer; cursor: pointer;
} }
.bg-uploader {
img {
float: left;
}
.bg-img {
width: 84px;
height: 100px;
}
.bg-video {
float: left;
width: 84px;
height: 100px;
}
.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;
}
}
.limit-text {
float: left;
margin-left: 10px;
margin-top: -10px;
p {
font-size: 12px;
color: #999;
}
}
}
</style>
<style>
.el-checkbox__input.is-checked+.el-checkbox__label{
color: #449284;
}
.el-checkbox__input.is-checked .el-checkbox__inner,
.el-checkbox__input.is-indeterminate .el-checkbox__inner{
background-color: #449284;
border-color: #449284;
}
.required-label .el-form-item__label::before {
content: "*";
color: #f56c6c;
margin-right: 4px;
}
</style> </style>
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册