|
|
|
<template>
|
|
|
|
<!-- 交易类 -->
|
|
|
|
<div class="content">
|
|
|
|
<div class="header">
|
|
|
|
<div>
|
|
|
|
<i class="back el-icon-arrow-left" @click="Back()" style="cursor:pointer">
|
|
|
|
<span>Back</span>
|
|
|
|
</i>
|
|
|
|
<span class="title">判分点设置</span>
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<el-button v-if="!isView" type="primary" size="mini" @click="saveAll">保存</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div>
|
|
|
|
<div class="form-con">
|
|
|
|
<div class="title">
|
|
|
|
<div class="black"></div>
|
|
|
|
<div>基本信息</div>
|
|
|
|
</div>
|
|
|
|
<div class="item">
|
|
|
|
<div class="label">判分点名称</div>
|
|
|
|
<el-input
|
|
|
|
v-model.trim="formData.lcJudgmentPoint.name"
|
|
|
|
:readonly="isView"
|
|
|
|
@blur="handleBlur"
|
|
|
|
placeholder="请输入内容"
|
|
|
|
clearable
|
|
|
|
style="width: 400px"
|
|
|
|
></el-input>
|
|
|
|
</div>
|
|
|
|
<div class="item">
|
|
|
|
<div class="label">实验要求</div>
|
|
|
|
<quill
|
|
|
|
v-model="formData.lcJudgmentPoint.experimentalRequirements"
|
|
|
|
:readonly="isView"
|
|
|
|
:border="true"
|
|
|
|
:minHeight="150"
|
|
|
|
:height="150"
|
|
|
|
style="width: 100%"
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="rule-con">
|
|
|
|
<div class="title-con">
|
|
|
|
<div class="title">
|
|
|
|
<div class="black"></div>
|
|
|
|
<div>判分规则</div>
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<el-button v-if="!isView" :disabled="isAddRule" type="primary" size="mini" @click="addRule">新增</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<el-card shadow="hover">
|
|
|
|
<el-table
|
|
|
|
:data="tableData"
|
|
|
|
:stripe="true"
|
|
|
|
:key="itemkey"
|
|
|
|
:cell-style="rowClass"
|
|
|
|
header-align="center"
|
|
|
|
:header-cell-style="headClass"
|
|
|
|
>
|
|
|
|
<el-table-column prop="indexNo" type="index" label="序号" width="80">
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="流程判分正确答案">
|
|
|
|
<template slot-scope="scope" v-if="scope.row.isSubject">
|
|
|
|
<p class="p">操作一致性规则:用户完成的功能操作与下方设置的操作点一致</p>
|
|
|
|
<div class="tree-con">
|
|
|
|
<div class="block1" :id="'divTree'+scope.$index">
|
|
|
|
<my-tree
|
|
|
|
:id="'depTree'+scope.$index"
|
|
|
|
class="action"
|
|
|
|
:ref="'tree-'+scope.$index"
|
|
|
|
:data="treeData"
|
|
|
|
:props="defaultProps"
|
|
|
|
default-expand-all
|
|
|
|
node-key="id"
|
|
|
|
show-checkbox
|
|
|
|
@check-change="(data, checked, indeterminate) => {
|
|
|
|
handleCheckChange(data, checked, indeterminate, scope.row, scope.$index);
|
|
|
|
}"
|
|
|
|
></my-tree>
|
|
|
|
</div>
|
|
|
|
<div v-show="scope.row.isDisabled" class="mask"></div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label=" " width="150">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<el-button
|
|
|
|
circle
|
|
|
|
type="primary"
|
|
|
|
v-if="scope.row.isSubject"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
@click="changeResult(scope.row)"
|
|
|
|
style="position: absolute; right: 55px"
|
|
|
|
>
|
|
|
|
{{ scope.row.resultOperation === 0 ? "且" : "或" }}
|
|
|
|
</el-button>
|
|
|
|
<el-button v-else type="primary" circle @click="changeRule(scope.row, scope.$index)">
|
|
|
|
{{ scope.row.ruleOperation === 0 ? "且" : "或" }}
|
|
|
|
</el-button>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="交易结果正确答案">
|
|
|
|
<template slot-scope="scope" v-if="scope.row.isSubject">
|
|
|
|
<p class="p" style="margin-top: 1px">交易结果一致性规则:用户交易结果需要与下面设置的交易结果指标要求一致</p>
|
|
|
|
<div class="block">
|
|
|
|
<!-- type: 题目类型(1选择 2判断 3填空 4问答 5指标结果) -->
|
|
|
|
<template v-if="scope.row.type == 1">
|
|
|
|
<div class="box">
|
|
|
|
<div class="line">
|
|
|
|
<div>{{ scope.row.name }}</div>
|
|
|
|
</div>
|
|
|
|
<div class="line">
|
|
|
|
<span class="label mini">正确答案</span>
|
|
|
|
<div class="action">
|
|
|
|
<!--multiple:多选-->
|
|
|
|
<el-select
|
|
|
|
v-model="scope.row.value1"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
size="mini"
|
|
|
|
style="width: 100%"
|
|
|
|
>
|
|
|
|
<el-option
|
|
|
|
v-for="(item, index) in scope.row.items"
|
|
|
|
:key="index"
|
|
|
|
:label="item.options"
|
|
|
|
:value="item.itemId"
|
|
|
|
></el-option>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<template v-else-if="scope.row.type == 2">
|
|
|
|
<div class="box">
|
|
|
|
<div class="line">
|
|
|
|
<div>{{ scope.row.name }}</div>
|
|
|
|
</div>
|
|
|
|
<div class="line">
|
|
|
|
<span class="label mini">正确答案</span>
|
|
|
|
<div class="action">
|
|
|
|
<el-select
|
|
|
|
v-model="scope.row.value1"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
size="mini"
|
|
|
|
style="width: 100%"
|
|
|
|
>
|
|
|
|
<el-option
|
|
|
|
v-for="(item, index) in scope.row.items"
|
|
|
|
:key="index"
|
|
|
|
:label="item.options"
|
|
|
|
:value="item.subjectId"
|
|
|
|
></el-option>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<template v-else-if="scope.row.type == 3">
|
|
|
|
<div class="box">
|
|
|
|
<div class="line" style="min-height: 100%;">
|
|
|
|
<span class="label">
|
|
|
|
<!--<el-checkbox v-model="scope.row.fieldOfReq" :disabled="isView || scope.row.isDisabled">字段要求</el-checkbox>-->
|
|
|
|
字段要求
|
|
|
|
</span>
|
|
|
|
<div class="action">
|
|
|
|
<el-input
|
|
|
|
class="mini-textarea"
|
|
|
|
type="textarea"
|
|
|
|
rows="6"
|
|
|
|
size="mini"
|
|
|
|
v-model.trim="scope.row.value1"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
placeholder="字段之间以逗号隔开"
|
|
|
|
></el-input>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<template v-else-if="scope.row.type == 4">
|
|
|
|
<div class="box">
|
|
|
|
<div class="line">
|
|
|
|
<span class="label">
|
|
|
|
<!--<el-checkbox v-model="scope.row.numOfWords" :disabled="isView || scope.row.isDisabled">字数要求</el-checkbox>-->
|
|
|
|
字数要求
|
|
|
|
</span>
|
|
|
|
<div class="action a-line">
|
|
|
|
<el-select
|
|
|
|
v-model="scope.row.value1"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
size="mini"
|
|
|
|
>
|
|
|
|
<el-option label=">" value=">"></el-option>
|
|
|
|
<el-option label="<" value="<"></el-option>
|
|
|
|
<el-option label="=" value="="></el-option>
|
|
|
|
<el-option label=">=" value=">="></el-option>
|
|
|
|
<el-option label="<=" value="<="></el-option>
|
|
|
|
<el-option label="无限制" value="无限制"></el-option>
|
|
|
|
</el-select>
|
|
|
|
<el-input
|
|
|
|
class="number-input"
|
|
|
|
v-model.trim="scope.row.value2"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
onkeyup="value=this.value.replace(/\D+/g,'')"
|
|
|
|
oninput="value=value.replace(/[^0-9.]/g,'')"
|
|
|
|
type="number"
|
|
|
|
min="1"
|
|
|
|
size="mini"
|
|
|
|
style="margin-left: 5px;"
|
|
|
|
></el-input>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="line">
|
|
|
|
<span class="label">
|
|
|
|
<!--<el-checkbox v-model="scope.row.fieldOfReq" :disabled="isView || scope.row.isDisabled">字段要求</el-checkbox>-->
|
|
|
|
字段要求
|
|
|
|
</span>
|
|
|
|
<div class="action">
|
|
|
|
<el-input
|
|
|
|
class="mini-textarea"
|
|
|
|
type="textarea"
|
|
|
|
rows="5"
|
|
|
|
size="mini"
|
|
|
|
v-model.trim="scope.row.value3"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
placeholder="字段之间以逗号隔开"
|
|
|
|
></el-input>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<template v-else-if="scope.row.type == 5">
|
|
|
|
<div class="box">
|
|
|
|
<div class="line">
|
|
|
|
<!--
|
|
|
|
<span class="label">选择指标</span>
|
|
|
|
<div class="action">
|
|
|
|
<el-select
|
|
|
|
v-model="scope.row.value1"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
size="mini"
|
|
|
|
>
|
|
|
|
<el-option
|
|
|
|
v-for="(item, index) in scope.row.items"
|
|
|
|
:key="index"
|
|
|
|
:label="item.options"
|
|
|
|
:value="item.itemId"
|
|
|
|
></el-option>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
-->
|
|
|
|
<div>{{ scope.row.name }}</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div class="line">
|
|
|
|
<span class="label">交易指标区间</span>
|
|
|
|
<div class="action">
|
|
|
|
<div class="inputs">
|
|
|
|
<el-select
|
|
|
|
v-model="scope.row.value2"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
size="mini"
|
|
|
|
>
|
|
|
|
<el-option label="(" value="("></el-option>
|
|
|
|
<el-option label="[" value="["></el-option>
|
|
|
|
</el-select>
|
|
|
|
<el-input
|
|
|
|
class="number-input"
|
|
|
|
v-model.trim="scope.row.value3"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
type="number"
|
|
|
|
size="mini"
|
|
|
|
></el-input>
|
|
|
|
<el-input
|
|
|
|
class="number-input"
|
|
|
|
v-model.trim="scope.row.value4"
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
type="number"
|
|
|
|
size="mini"
|
|
|
|
></el-input>
|
|
|
|
<el-select
|
|
|
|
:disabled="isView || scope.row.isDisabled"
|
|
|
|
v-model="scope.row.value5"
|
|
|
|
size="mini"
|
|
|
|
>
|
|
|
|
<el-option label=")" value=")"></el-option>
|
|
|
|
<el-option label="]" value="]"></el-option>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<template v-else>
|
|
|
|
<div style="line-height: 65px">{{ checkChange? '需点击' : '' }}</div>
|
|
|
|
</template>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="操作" width="300" v-if="!isView">
|
|
|
|
<template slot-scope="scope" v-if="scope.row.isSubject">
|
|
|
|
<el-button v-show="scope.row.isDisabled" size="mini" type="text" @click="handleEdit(scope.row)">编辑
|
|
|
|
</el-button>
|
|
|
|
<el-button v-show="!scope.row.isDisabled" size="mini" type="text"
|
|
|
|
@click="handleSave(scope.row, scope.$index)">保存
|
|
|
|
</el-button>
|
|
|
|
<el-button v-show="!scope.row.isDisabled" size="mini" type="text"
|
|
|
|
@click="handleCancel(scope.row, scope.$index)">取消
|
|
|
|
</el-button>
|
|
|
|
<el-button v-show="scope.row.isDisabled" size="mini" type="text"
|
|
|
|
@click="handleDelete(scope.row, scope.$index)">删除
|
|
|
|
</el-button>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table>
|
|
|
|
</el-card>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import quill from "@/components/quill";
|
|
|
|
import MyTree from "@/components/myTree/src/tree";
|
|
|
|
import {deepCopy} from "@/utils/deepCopy";
|
|
|
|
|
|
|
|
export default {
|
|
|
|
components: {quill, MyTree},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
checkChange: false,
|
|
|
|
|
|
|
|
lcId: "", // 流程类判分点id
|
|
|
|
isAdd: Boolean(this.$route.query.isAdd), // 添加
|
|
|
|
isEdit: Boolean(this.$route.query.isEdit), // 编辑
|
|
|
|
isView: Boolean(this.$route.query.isView), // 查看
|
|
|
|
isNameRepeat: false, // 名称是否重复
|
|
|
|
treeData: [], // 树结构数据
|
|
|
|
defaultProps: {
|
|
|
|
children: "children",
|
|
|
|
label: "name"
|
|
|
|
}, // 树结构配置项
|
|
|
|
currentNodeData: {}, // 当前选中的节点
|
|
|
|
formData: {
|
|
|
|
lcJudgmentPoint: {
|
|
|
|
name: "",
|
|
|
|
experimentalRequirements: "",
|
|
|
|
isDel: 0,
|
|
|
|
isOpen: 0,
|
|
|
|
projectId: "",
|
|
|
|
systemId: ""
|
|
|
|
},
|
|
|
|
lcJudgmentRuleList: []
|
|
|
|
}, // 表单参数
|
|
|
|
tableData: [], // 规则表格数据
|
|
|
|
tableDataCopy: [], // 规则表格数据备份
|
|
|
|
isAddRule: false, // 是否禁用新增规则按钮
|
|
|
|
itemkey:'',
|
|
|
|
judgePoints:false,//判断是否点了编辑
|
|
|
|
};
|
|
|
|
},
|
|
|
|
mounted() {
|
|
|
|
this.$route.query.token && this.$store.commit("setParam", {
|
|
|
|
token: atob(decodeURI(this.$route.query.token))
|
|
|
|
});
|
|
|
|
|
|
|
|
this.getTreeData();
|
|
|
|
if (this.$route.query.systemId) {
|
|
|
|
this.formData.lcJudgmentPoint.systemId = this.$route.query.systemId;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
getInfoData(lcId) { // 获取判分点详细信息
|
|
|
|
this.$get(`${this.api.queryJudgmentPointDetails}?lcId=${lcId}`).then(res => {
|
|
|
|
if (res.status === 200) {
|
|
|
|
let {judgmentPoint, judgmentRuleList} = res;
|
|
|
|
this.formData = {
|
|
|
|
lcJudgmentPoint: judgmentPoint,
|
|
|
|
lcJudgmentRuleList: judgmentRuleList
|
|
|
|
};
|
|
|
|
this.anewPosttingData(judgmentRuleList)
|
|
|
|
this.tableData.forEach(async (item, index) => {
|
|
|
|
// 勾选树节点
|
|
|
|
if (item.operationIds) {
|
|
|
|
this.$nextTick(() => {
|
|
|
|
this.$refs[`tree-${index}`].setCheckedKeys([item.operationIds]);
|
|
|
|
// let currentNode = this.$refs[`tree-${index}`].getNode([item]);
|
|
|
|
// while ( parentLevel>0)//包含一级节点,因为一级节点有多个,如果是一级节点有一个,那这个判断就是while ( 1!=parentLevel)
|
|
|
|
// let dom = document.querySelector("#divTree")
|
|
|
|
// let dom1 = document.querySelector("#depTree")
|
|
|
|
// //一个节点的高度是26px,这个值能否从对象中获取,等我把这个功能做好再考虑吧
|
|
|
|
// let nodeHight =26
|
|
|
|
// dom1.style.height = (nodeCount * nodeHight) + "px"
|
|
|
|
// let contHeight=(nodeIndex * nodeHight)+topHeight-300//总高度,盒子高度的一半
|
|
|
|
// dom.scrollTo(0, contHeight)
|
|
|
|
// this.scrollToDepTree(item.operationIds)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
// 根据题目id,获取题目信息
|
|
|
|
if (item.isSubject && item.type && item.type != 4 && item.emptyOne) {
|
|
|
|
await this.getSubjectData(item.emptyOne, index);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message);
|
|
|
|
}
|
|
|
|
}).catch(err => {
|
|
|
|
// console.log(err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
//计算此节点的距离思路1.计算出当前节点据顶部的高度+当前节点在树的位置的高度-盒子高度的一半
|
|
|
|
scrollToDepTree(deptCode){
|
|
|
|
|
|
|
|
},
|
|
|
|
// 重新封装数据
|
|
|
|
anewPosttingData(judgmentRuleList){
|
|
|
|
let length = judgmentRuleList.length;
|
|
|
|
let tempArr = [];
|
|
|
|
judgmentRuleList.forEach((item, index) => {
|
|
|
|
let obj = {
|
|
|
|
...item,
|
|
|
|
isSubject: true,
|
|
|
|
isDisabled: true, // 已禁用
|
|
|
|
isSave: true // 已保存
|
|
|
|
};
|
|
|
|
//题目类型(1选择 2判断 3填空 4问答 5指标结果)
|
|
|
|
if (item.type == 1 || item.type == 2) {
|
|
|
|
obj.subjectId = Number(item.emptyOne);
|
|
|
|
obj.value1 = item.itemId;
|
|
|
|
} else if (item.type == 3) {
|
|
|
|
obj.subjectId = Number(item.emptyOne);
|
|
|
|
obj.value1 = item.emptyTwo;
|
|
|
|
} else if (item.type == 4) {
|
|
|
|
// 需要提目id
|
|
|
|
if (item.emptyOne === "无限制") {
|
|
|
|
obj.value1 = item.emptyOne;
|
|
|
|
obj.value2 = "";
|
|
|
|
} else {
|
|
|
|
obj.value1 = item.emptyOne.substring(0, item.emptyOne.indexOf(","));
|
|
|
|
obj.value2 = item.emptyOne.substring(item.emptyOne.indexOf(",") + 1, item.emptyOne.length);
|
|
|
|
}
|
|
|
|
obj.value3 = item.emptyTwo;
|
|
|
|
} else if (item.type == 5) {
|
|
|
|
obj.subjectId = Number(item.emptyOne);
|
|
|
|
obj.value2 = item.emptyTwo[0];
|
|
|
|
obj.value3 = item.emptyTwo.substring(1, item.emptyTwo.indexOf("~"));
|
|
|
|
obj.value4 = item.emptyTwo.substring(item.emptyTwo.indexOf("~") + 1, item.emptyTwo.length - 1);
|
|
|
|
obj.value5 = item.emptyTwo[item.emptyTwo.length - 1];
|
|
|
|
}
|
|
|
|
tempArr.push(obj);
|
|
|
|
if (length > 1 && index !== (length - 1)) {
|
|
|
|
tempArr.push({ruleOperation: item.ruleOperation});
|
|
|
|
}
|
|
|
|
this.tableData = tempArr;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
getSubjectData(subjectId, index) { // 获取题目信息
|
|
|
|
this.$get(`${this.api.getSubjectInfo}?subject_id=${subjectId}`).then(res => {
|
|
|
|
if (res.status === 200) {
|
|
|
|
let item = {
|
|
|
|
...this.tableData[index],
|
|
|
|
...res.subject,
|
|
|
|
items: res.items
|
|
|
|
};
|
|
|
|
this.$set(this.tableData, index, item);
|
|
|
|
}
|
|
|
|
}).catch(err => {
|
|
|
|
// console.log(err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
handleCheckChange(data, checked, indeterminate, row, index) { // 处理勾选
|
|
|
|
console.log('=================')
|
|
|
|
let divTree = '#divTree'+index;
|
|
|
|
let dom = document.querySelector(divTree)
|
|
|
|
let depTree = '#depTree'+index;
|
|
|
|
let dom1 = document.querySelector(depTree)
|
|
|
|
let nodeHight =20
|
|
|
|
dom1.style.height = (data.number * nodeHight) + "px"
|
|
|
|
let contHeight=(data.number * nodeHight)//总高度,盒子高度的一半
|
|
|
|
console.log(contHeight)
|
|
|
|
dom.scrollTo(0, contHeight)
|
|
|
|
console.log(data)
|
|
|
|
console.log('=================')
|
|
|
|
this.checkChange = true
|
|
|
|
if (checked && data.isNode === 1) {
|
|
|
|
this.tableData[index].operationIds = data.id; // 操作id串
|
|
|
|
// for ()
|
|
|
|
row.value1 = "";
|
|
|
|
row.value2 = "";
|
|
|
|
row.value3 = "";
|
|
|
|
row.value4 = "";
|
|
|
|
row.value5 = "";
|
|
|
|
if (data.subjectId) { // 是否有题目id
|
|
|
|
this.currentNodeData = data;
|
|
|
|
this.$refs[`tree-${index}`].setCheckedNodes([data]);
|
|
|
|
this.getSubjectData(data.subjectId, index);
|
|
|
|
} else {
|
|
|
|
row.type = "";
|
|
|
|
this.currentNodeData = {};
|
|
|
|
this.$refs[`tree-${index}`].setCheckedNodes([data]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
getTreeData() { // 获取树结构数据
|
|
|
|
this.$get(this.api.getLcRecord).then(res => {
|
|
|
|
if (res.status == 200 && res.list.length>0) {
|
|
|
|
if (res.list.length>0) {
|
|
|
|
this.treeData = this.toTreeId(res.list, res.list[0].parentId);
|
|
|
|
if (this.$route.query.lcId) {
|
|
|
|
this.lcId = this.$route.query.lcId;
|
|
|
|
this.getInfoData(this.$route.query.lcId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message);
|
|
|
|
}
|
|
|
|
}).catch(err => {
|
|
|
|
// console.log(err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
toTreeId(data, parentId) { // id重新串连成(父+子+孙),已便达到树节点需要的key唯一性,且后面提交数据,需要传这个id串到后台
|
|
|
|
let result = [];
|
|
|
|
data.forEach(item => {
|
|
|
|
if (item.isNode === 0) {
|
|
|
|
item.disabled = true;
|
|
|
|
item.showCheckbox = false;
|
|
|
|
} else {
|
|
|
|
item.showCheckbox = true;
|
|
|
|
}
|
|
|
|
if (item.children && item.children.length) {
|
|
|
|
item.id = `${parentId},${item.id}`;
|
|
|
|
item.children = this.toTreeId(item.children, item.id);
|
|
|
|
} else {
|
|
|
|
item.id = `${parentId},${item.id}`;
|
|
|
|
}
|
|
|
|
result.push(item);
|
|
|
|
});
|
|
|
|
return result;
|
|
|
|
},
|
|
|
|
Back() { // 返回
|
|
|
|
this.$router.back();
|
|
|
|
},
|
|
|
|
handleBlur() { // 新增/编辑判分点名称判重
|
|
|
|
if (this.formData.lcJudgmentPoint.name) {
|
|
|
|
let params = {
|
|
|
|
lcId: this.lcId,
|
|
|
|
name: this.formData.lcJudgmentPoint.name
|
|
|
|
};
|
|
|
|
this.$post(this.api.queryNameIsExist, params).then(res => {
|
|
|
|
if (res.status === 200) {
|
|
|
|
this.isNameRepeat = false;
|
|
|
|
} else {
|
|
|
|
this.isNameRepeat = true;
|
|
|
|
}
|
|
|
|
}).catch(err => {
|
|
|
|
// console.log(err);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
saveAll() { // 保存判分点
|
|
|
|
if (!this.formData.lcJudgmentPoint.name) {
|
|
|
|
this.$message.warning(`判分点名称不能为空`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (this.isNameRepeat) {
|
|
|
|
this.$message.warning(`当前判分点名称已存在`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!this.formData.lcJudgmentPoint.experimentalRequirements) {
|
|
|
|
this.$message.warning(`实验要求不能为空`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!this.tableData.length) {
|
|
|
|
this.$message.warning(`请添加判分规则`);
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
for (let i = 0; i < this.tableData.length; i++) {
|
|
|
|
if (this.tableData[i].isSubject && !this.tableData[i].operationIds) {
|
|
|
|
this.$message.warning(`第${i + 1}项请选择操作点`);
|
|
|
|
return;
|
|
|
|
} else if (this.tableData[i].isSubject && !this.tableData[i].isSave) {
|
|
|
|
this.$message.warning(`第${i + 1}项,未保存`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let tempArr = [];
|
|
|
|
this.tableData.forEach(i => {
|
|
|
|
if (i.isSubject) {
|
|
|
|
let obj = {
|
|
|
|
emptyOne: "",
|
|
|
|
emptyTwo: "",
|
|
|
|
id: "",
|
|
|
|
lcId: i.lcId,
|
|
|
|
itemId:'',
|
|
|
|
type: i.type ? i.type : "",
|
|
|
|
operationIds: i.operationIds,
|
|
|
|
resultOperation: i.resultOperation,
|
|
|
|
ruleOperation: i.ruleOperation
|
|
|
|
};
|
|
|
|
//题目类型(1选择 2判断 3填空 4问答 5指标结果)
|
|
|
|
if (i.type == 1 || i.type == 2) {
|
|
|
|
obj.emptyOne = i.subjectId ? i.subjectId.toString() : "";
|
|
|
|
obj.itemId = i.value1 ? i.value1.toString() : "";
|
|
|
|
obj.emptyTwo = i.value1 ? i.value1.toString() : "";
|
|
|
|
} else if (i.type == 3) {
|
|
|
|
obj.emptyOne = i.subjectId ? i.subjectId.toString() : "";
|
|
|
|
obj.emptyTwo = i.value1;
|
|
|
|
} else if (i.type == 4) {
|
|
|
|
if (i.value1 === "无限制") {
|
|
|
|
obj.emptyOne = i.value1; // 问答题,传的不是题目id
|
|
|
|
} else if (i.value1 && i.value2) {
|
|
|
|
obj.emptyOne = `${i.value1},${i.value2}`; // 问答题,传的不是题目id
|
|
|
|
}
|
|
|
|
obj.emptyTwo = i.value3;
|
|
|
|
} else if (i.type == 5) {
|
|
|
|
// obj.emptyOne = i.value1; // 选择指标不传
|
|
|
|
obj.emptyOne = i.subjectId ? i.subjectId.toString() : "";
|
|
|
|
obj.emptyTwo = `${i.value2}${i.value3}~${i.value4}${i.value5}`;
|
|
|
|
}
|
|
|
|
tempArr.push(obj);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.formData.lcJudgmentRuleList = tempArr;
|
|
|
|
if (this.isAdd) { // 新增判分点
|
|
|
|
this.$post(this.api.addJudgmentPoint, this.formData).then(res => {
|
|
|
|
if (res.status === 200) {
|
|
|
|
this.$message.success("新增判分点成功");
|
|
|
|
this.Back();
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message);
|
|
|
|
}
|
|
|
|
}).catch(err => {
|
|
|
|
// console.log(err);
|
|
|
|
});
|
|
|
|
} else if (this.isEdit) { // 编辑判分点
|
|
|
|
this.$post(this.api.updateJudgmentPoint, this.formData).then(res => {
|
|
|
|
if (res.status === 200) {
|
|
|
|
this.$message.success("更新判分点成功");
|
|
|
|
this.Back();
|
|
|
|
} else {
|
|
|
|
this.$message.warning(res.message);
|
|
|
|
}
|
|
|
|
}).catch(err => {
|
|
|
|
// console.log(err);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
addRule() { // 新增规则
|
|
|
|
this.isAddRule = true;
|
|
|
|
// this.tableData.length && this.tableData.push({ruleOperation: 0, indexNo: ""});
|
|
|
|
if (this.tableData.length > 0){
|
|
|
|
this.tableData.push({
|
|
|
|
ruleOperation: 0
|
|
|
|
},{
|
|
|
|
indexNo: this.tableData.length +1,
|
|
|
|
isSubject: true,
|
|
|
|
isDisabled: false, // 不禁用
|
|
|
|
isSave: false, // 未保存
|
|
|
|
lcId: this.lcId,
|
|
|
|
resultOperation: 0,
|
|
|
|
ruleOperation: 0,
|
|
|
|
operationIds: "",
|
|
|
|
value1: "",
|
|
|
|
value2: "",
|
|
|
|
value3: "",
|
|
|
|
value4: "",
|
|
|
|
value5: ""
|
|
|
|
});
|
|
|
|
}else{
|
|
|
|
this.tableData.push({
|
|
|
|
indexNo: this.tableData.length +1,
|
|
|
|
isSubject: true,
|
|
|
|
isDisabled: false, // 不禁用
|
|
|
|
isSave: false, // 未保存
|
|
|
|
lcId: this.lcId,
|
|
|
|
resultOperation: 0,
|
|
|
|
ruleOperation: 0,
|
|
|
|
operationIds: "",
|
|
|
|
value1: "",
|
|
|
|
value2: "",
|
|
|
|
value3: "",
|
|
|
|
value4: "",
|
|
|
|
value5: ""
|
|
|
|
});
|
|
|
|
}
|
|
|
|
// anewPosttingData(judgmentRuleList)
|
|
|
|
},
|
|
|
|
changeResult(row) { // (左右)结果运算符(0:且 1:或 默认0)
|
|
|
|
row.resultOperation = row.resultOperation === 0 ? 1 : 0;
|
|
|
|
},
|
|
|
|
changeRule(row, index) { // (上下)规则运算符(0:且 1:或 默认0)
|
|
|
|
row.ruleOperation = row.ruleOperation === 0 ? 1 : 0;
|
|
|
|
this.tableData[index - 1].ruleOperation = row.ruleOperation;
|
|
|
|
},
|
|
|
|
handleEdit(row) { // 处理编辑规则
|
|
|
|
this.judgePoints = true
|
|
|
|
this.tableDataCopy = deepCopy(this.tableData); // 深拷贝
|
|
|
|
row.isDisabled = false;
|
|
|
|
row.isSave = false;
|
|
|
|
},
|
|
|
|
handleSave(row, index) { // 处理保存规则
|
|
|
|
let keys = this.$refs[`tree-${index}`].getCheckedKeys();
|
|
|
|
if (!keys.length || !row.operationIds) {
|
|
|
|
this.$message.warning(`请选择操作点`);
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
//题目类型(1选择 2判断 3填空 4问答 5指标结果)
|
|
|
|
if (row.type == 1 || row.type == 2) {
|
|
|
|
if (!row.value1) {
|
|
|
|
this.$message.warning(`请选择正确答案`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} else if (row.type == 3) {
|
|
|
|
if (!row.value1) {
|
|
|
|
this.$message.warning(`请输入字段要求`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} else if (row.type == 4) {
|
|
|
|
if (!row.value1) {
|
|
|
|
this.$message.warning(`请选择字数要求`);
|
|
|
|
return;
|
|
|
|
} else if (row.value1 !== "无限制" && !row.value2) {
|
|
|
|
this.$message.warning(`请输入字数要求`);
|
|
|
|
return;
|
|
|
|
} else if (!row.value3) {
|
|
|
|
this.$message.warning(`请输入字段要求`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} else if (row.type == 5) {
|
|
|
|
if (!row.value2 || !row.value5) {
|
|
|
|
this.$message.warning(`请选择交易指标区间`);
|
|
|
|
return;
|
|
|
|
} else if (!row.value3 || !row.value4) {
|
|
|
|
this.$message.warning(`请输入交易指标区间`);
|
|
|
|
} else if (row.value3 > row.value4) {
|
|
|
|
this.$message.warning(`第一个指标必须小于第二个指标`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
row.isSave = true;
|
|
|
|
row.isDisabled = true;
|
|
|
|
this.isAddRule = false;
|
|
|
|
},
|
|
|
|
handleCancel(row, index) { // 处理取消编辑规则
|
|
|
|
if (this.judgePoints == true) {
|
|
|
|
this.judgePoints = false
|
|
|
|
this.$set(this.tableData, index, this.tableDataCopy[index]);
|
|
|
|
if (!this.tableData[index].operationIds) {
|
|
|
|
this.$refs[`tree-${index}`].setCheckedKeys([]);
|
|
|
|
} else {
|
|
|
|
this.$refs[`tree-${index}`].setCheckedKeys([this.tableData[index].operationIds]);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
this.tableData.splice(index-1, 2);
|
|
|
|
// index ? this.tableData.splice(index - 1, 1) : this.tableData.splice(0, 1);
|
|
|
|
this.isAddRule = false;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
handleDelete(row, index) { // 处理删除规则
|
|
|
|
this.$confirm("此操作将永久删除该规则, 是否继续?", "提示", {
|
|
|
|
confirmButtonText: "确定",
|
|
|
|
cancelButtonText: "取消",
|
|
|
|
type: "warning",
|
|
|
|
center: true
|
|
|
|
}).then(() => {
|
|
|
|
// if(index+1 == this.tableData.length){
|
|
|
|
// index = index-1
|
|
|
|
// }
|
|
|
|
this.tableData.splice(index,2);
|
|
|
|
index ? this.tableData.splice(index - 1, 1) : this.tableData.splice(0, 1);
|
|
|
|
this.itemkey = Math.random()
|
|
|
|
this.tableData.forEach(async (item, index) => {
|
|
|
|
// 勾选树节点
|
|
|
|
if (item.operationIds) {
|
|
|
|
this.$nextTick(() => {
|
|
|
|
this.$refs[`tree-${index}`].setCheckedKeys([item.operationIds]);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
// 根据题目id,获取题目信息
|
|
|
|
if (item.isSubject && item.type && item.type != 4 && item.emptyOne) {
|
|
|
|
await this.getSubjectData(item.emptyOne, index);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.isAddRule = false;
|
|
|
|
}).catch(() => {
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// 表头样式设置
|
|
|
|
headClass() {
|
|
|
|
return "text-align: center;";
|
|
|
|
},
|
|
|
|
// 表格样式设置
|
|
|
|
rowClass() {
|
|
|
|
return "text-align: center;";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
.content {
|
|
|
|
position: relative;
|
|
|
|
top: 10px;
|
|
|
|
padding: 0 10px;
|
|
|
|
background-color: #ffffff;
|
|
|
|
|
|
|
|
.header {
|
|
|
|
border-bottom: 1px dashed #ccc;
|
|
|
|
height: 45px;
|
|
|
|
line-height: 45px;
|
|
|
|
font-size: 14px;
|
|
|
|
font-weight: 600;
|
|
|
|
//padding: 0 10px;
|
|
|
|
display: flex;
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
|
|
.back {
|
|
|
|
line-height: 3;
|
|
|
|
//padding-left: 10px;
|
|
|
|
|
|
|
|
span {
|
|
|
|
font-size: 14px;
|
|
|
|
font-weight: 600;
|
|
|
|
padding-left: 5px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.title {
|
|
|
|
font-weight: bold;
|
|
|
|
margin-left: 20px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 表单容器
|
|
|
|
.form-con {
|
|
|
|
padding-bottom: 24px;
|
|
|
|
border-bottom: 1px dashed #ccc;
|
|
|
|
|
|
|
|
.title {
|
|
|
|
padding: 10px 0;
|
|
|
|
border-bottom: 1px dashed #ccc;
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
.black {
|
|
|
|
width: 8px;
|
|
|
|
height: 18px;
|
|
|
|
background-color: #333;
|
|
|
|
margin-right: 10px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.item {
|
|
|
|
display: flex;
|
|
|
|
margin-top: 24px;
|
|
|
|
|
|
|
|
.label {
|
|
|
|
width: 200px;
|
|
|
|
text-align: right;
|
|
|
|
padding-right: 20px;
|
|
|
|
line-height: 35px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 规则容器
|
|
|
|
.rule-con {
|
|
|
|
padding-bottom: 60px;
|
|
|
|
|
|
|
|
.title-con {
|
|
|
|
height: 60px;
|
|
|
|
display: flex;
|
|
|
|
justify-content: space-between;
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
.title {
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
.black {
|
|
|
|
width: 8px;
|
|
|
|
height: 18px;
|
|
|
|
background-color: #333;
|
|
|
|
margin-right: 10px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 滚动条的宽度
|
|
|
|
/deep/ ::-webkit-scrollbar {
|
|
|
|
width: 6px; // 横向滚动条
|
|
|
|
height: 6px; // 纵向滚动条 必写
|
|
|
|
}
|
|
|
|
|
|
|
|
// 滚动条的滑块
|
|
|
|
/deep/ ::-webkit-scrollbar-thumb {
|
|
|
|
background-color: #9278ff;
|
|
|
|
border-radius: 3px;
|
|
|
|
-webkit-box-shadow: inset 0 0 5px #dddddd;
|
|
|
|
}
|
|
|
|
|
|
|
|
/deep/ ::-webkit-scrollbar-track {
|
|
|
|
/*滚动条里面轨道*/
|
|
|
|
-webkit-box-shadow: inset 0 0 5px #dddddd;
|
|
|
|
border-radius: 0;
|
|
|
|
background: #dddddd;
|
|
|
|
}
|
|
|
|
|
|
|
|
.tree-con {
|
|
|
|
height: 230px;
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
.mask {
|
|
|
|
width: 100%;
|
|
|
|
height: 100%;
|
|
|
|
position: absolute;
|
|
|
|
top: 0;
|
|
|
|
bottom: 0;
|
|
|
|
right: 10px;
|
|
|
|
cursor: not-allowed;
|
|
|
|
z-index: 99999;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@mixin block {
|
|
|
|
padding: 10px;
|
|
|
|
border: 1px solid #e4e7ed;
|
|
|
|
border-radius: 4px;
|
|
|
|
}
|
|
|
|
.block1 {
|
|
|
|
@include block;
|
|
|
|
height: 230px;
|
|
|
|
background-color: #fff;
|
|
|
|
overflow: auto;
|
|
|
|
}
|
|
|
|
.block {
|
|
|
|
@include block;
|
|
|
|
min-height: 220px;
|
|
|
|
background-color: #fff;
|
|
|
|
overflow: auto;
|
|
|
|
|
|
|
|
.box {
|
|
|
|
padding: 0 24px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.line {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
margin: 12px 0;
|
|
|
|
|
|
|
|
.label {
|
|
|
|
//width: 100px;
|
|
|
|
margin-right: 10px;
|
|
|
|
text-align: right;
|
|
|
|
font-size: 12px;
|
|
|
|
|
|
|
|
&.mini {
|
|
|
|
width: auto;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.action {
|
|
|
|
flex: 1;
|
|
|
|
text-align: left;
|
|
|
|
|
|
|
|
/deep/ .el-input {
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
|
|
|
|
&.steps {
|
|
|
|
@include block;
|
|
|
|
display: inline-flex;
|
|
|
|
flex-direction: column;
|
|
|
|
height: 150px;
|
|
|
|
font-size: 12px;
|
|
|
|
overflow: auto;
|
|
|
|
|
|
|
|
.radio-wrap {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
.child {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
margin-left: 15px;
|
|
|
|
}
|
|
|
|
|
|
|
|
/deep/ .el-radio {
|
|
|
|
margin: 3px 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.inputs {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
/deep/ .el-input {
|
|
|
|
width: 100px;
|
|
|
|
margin: 0 5px;
|
|
|
|
|
|
|
|
&:first-child {
|
|
|
|
margin-left: 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
&.a-line {
|
|
|
|
display: inline-flex;
|
|
|
|
}
|
|
|
|
|
|
|
|
.mini-textarea,
|
|
|
|
/deep/ .mini-textarea .el-textarea__inner {
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
|
|
|
|
.number-input {
|
|
|
|
/deep/ .el-input__inner {
|
|
|
|
padding-right: 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|