<!-- * @description: 编辑指标规则 * @fileName: EditRule * @author: 17076 * @date: 2024/6/14-上午10:43 * @version: V1.0.0 --> <template> <cs-drawer :drawer-option="drawerOption" @onReset="handleReset" @onSubmit="handleSubmit" > <div slot="content"> <el-steps :active="activeStep" align-center> <el-step title="指标基础信息" description="设置指标名称及原子指标项目" /> <el-step title="指标规则" description="模型按规则分析案件指标" /> </el-steps> <el-form v-if="activeStep === 0" ref="form" :model="ruleForm" :rules="rules" label-width="90px" style="margin-top: 20px" > <el-row :gutter="10"> <el-col :span="24"> <el-form-item label="指标名称" prop="name"> <el-input v-model="ruleForm['name']" placeholder="请输入指标名称" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="指标简称" prop="shortName"> <el-input v-model="ruleForm['shortName']" placeholder="请输入指标简称" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="指标分数" prop="indexScore"> <el-input v-model="ruleForm['indexScore']" placeholder="请输入指标分数" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="指标类型" prop="indexType"> <el-select v-model="ruleForm['indexType']" placeholder="请选择指标类型" @change="handleChange"> <el-option v-for="item in indexTypeOptions" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="案件类型" prop="caseType"> <el-select v-model="ruleForm['caseType']" placeholder="请选择案件类型" multiple> <el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="原子指标" prop="atomicIndexList"> <el-button type="primary" @click="handleSelectAtomic">请选择</el-button> <!-- <span v-if="ruleForm['atomicIndexList'] && ruleForm['atomicIndexList'].length > 0" style="margin-left: 10px; font-size: 12px; color: #0A4DF0" > {{ `已选中${ruleForm['atomicIndexList'].length}项原子指标` }} </span> --> <div v-if="ruleForm['atomicIndexList'] && ruleForm['atomicIndexList'].length > 0" class="select_list"> <div v-for="(item,index) in ruleForm['atomicIndexList']" :key="index" class="select_list_item"> <span>{{ item.name }}</span> <i class="el-icon-circle-close closed" style="margin-left: 12px;" @click="delItem(index)" /> </div> </div> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="指标说明" prop="remark"> <el-input v-model="ruleForm['remark']" type="textarea" :rows="5" placeholder="请输入指标说明" /> </el-form-item> </el-col> </el-row> <!-- <el-form-item label="判断逻辑" prop="judgeLogic">--> <!-- <template>--> <!-- <div class="flex-row">--> <!-- <el-select v-model="ruleForm['judgeLogic']" placeholder="请选择判断逻辑">--> <!-- <el-option--> <!-- v-for="item in judgmentLogicOptions"--> <!-- :key="item.value"--> <!-- :label="item.label"--> <!-- :value="item.value"--> <!-- />--> <!-- </el-select>--> <!-- <el-button type="primary" plain style="margin-left: 10px" @click="handleCustom">自定义</el-button>--> <!-- </div>--> <!-- <span style="color: #999999; font-size: 12px">支持原子指标的逻辑运算(and,or,not),并可自定义指标关系</span>--> <!-- </template>--> <!-- </el-form-item>--> <!-- <el-form-item label="指标规则" prop="indexRules">--> <!-- <el-checkbox-group v-model="ruleForm['indexRules']">--> <!-- <el-checkbox--> <!-- v-for="item in indexRulesOption"--> <!-- :key="item.value"--> <!-- :label="item.label"--> <!-- :true-label="1"--> <!-- :false-label="0"--> <!-- />--> <!-- </el-checkbox-group>--> <!-- </el-form-item>--> <!-- <el-form-item label="必要证据" prop="necessaryEvidence">--> <!-- <el-select v-model="ruleForm['necessaryEvidence']" placeholder="请选择必要证据" multiple>--> <!-- <el-option v-for="item in evidenceOptions" :key="item.value" :label="item.label" :value="item.value" />--> <!-- </el-select>--> <!-- </el-form-item>--> </el-form> <div v-if="activeStep === 1"> <p>{{ `[${indexTypeName}] ${ruleForm['name']}` }}</p> <custom-logic ref="custom" :is-change="isChange" :atomic-index-data="ruleForm['atomicIndexList']" :judge-logic="ruleForm['judgeLogic']" /> </div> <!--原子指标选择--> <select-atomic ref="select" @submit="handleAtomicSubmit" /> </div> <div slot="footer"> <el-button type="primary" plain style="width: 150px" @click="handleReset">重 置</el-button> <el-button v-if="activeStep === 0" type="primary" style="width: 150px" @click="nextStep">下一步</el-button> <el-button v-if="activeStep === 1" type="primary" plain style="width: 150px" @click="lastStep">上一步</el-button> <el-button v-if="activeStep === 1" type="primary" style="width: 150px" @click="handleSubmit">确 定</el-button> </div> </cs-drawer> </template> <script> import SelectAtomic from '@/views/ruleEngine/indexRule/components/SelectAtomic.vue' import CustomLogic from '@/views/ruleEngine/indexRule/components/CustomLogic.vue' import { addOrUpdIndex } from '@/api/indexRule' export default { name: 'EditRule', components: { CustomLogic, SelectAtomic }, data() { return { drawerOption: { show: false, width: '45%', title: '指标配置' }, // 当前激活的步骤 activeStep: 0, // 案件类型数据 caseTypeOptions: JSON.parse(sessionStorage.getItem('case_type')), // 指标类型数据 indexTypeOptions: JSON.parse(sessionStorage.getItem('index_type')), // 指标类型名称保存 indexTypeName: '', // 必要证据 evidenceOptions: [], // 判断逻辑 judgmentLogicOptions: JSON.parse(sessionStorage.getItem('judge_logic')), // 指标规则数据 indexRulesOption: [ { label: '证据判断', value: 'evidenceJudge' }, { label: '笔录判断', value: 'recordJudge' }, { label: '外部数据', value: 'externalData' } ], // 规则配置表单 ruleForm: {}, rules: { name: [{ required: true, message: '指标名称不能为空!', trigger: 'blur' }], caseType: [{ required: true, message: '案件类型不能为空!', trigger: 'blur' }], indexType: [{ required: true, message: '指标类型不能为空!', trigger: 'blur' }], indexScore: [{ required: true, message: '指标分数不能为空!', trigger: 'blur' }, { pattern: /^-?\d+(\.\d+)?$/, message: '请输入正确格式', trigger: 'change' }], // indexRules: [{ required: true, message: '指标规则不能为空!', trigger: 'blur' }], atomicIndex: [{ required: true, message: '原子指标不能为空!', trigger: 'blur' }], judgeLogic: [{ required: true, message: '指标说明不能为空!', trigger: 'blur' }] }, // 是否是编辑 isEdit: false, // 是否修改过 isChange: false } }, methods: { // 显示弹窗 show(data, isEdit) { this.isEdit = isEdit this.drawerOption.show = true this.isChange = false this.$nextTick(() => { const _this = this _this.ruleForm = isEdit ? JSON.parse(JSON.stringify(data)) : {} if (isEdit && _this.$baseLodash.isString(_this.ruleForm['caseType'])) { _this.ruleForm.caseType = _this.ruleForm.caseType.split(',') } if (_this.isEdit) { _this.indexTypeName = _this.ruleForm.indexTypeName } }) }, delItem(index) { this.ruleForm['atomicIndexList'].splice(index, 1) this.isChange = true }, // 指标类型选择 handleChange(val) { this.indexTypeName = this.indexTypeOptions.find(item => item.value === val).label }, // 选择原子指标 handleSelectAtomic() { this.$refs.select.show(this.ruleForm['atomicIndexList']) }, // 原子指标选择 handleAtomicSubmit(data) { this.$refs.form.clearValidate('atomicIndexList') this.$set(this.ruleForm, 'atomicIndexList', data) this.isChange = true }, // 重置 handleReset() { this.$refs.form.resetFields() this.$refs.form.clearValidate() }, // 下一步 nextStep() { this.$refs.form.validate(valid => { if (valid) { this.activeStep = 1 } }) }, // 上一步 lastStep() { this.activeStep = 0 }, // 确定 async handleSubmit() { // 拿到对应原子指标逻辑 const logicData = this.$refs.custom.validate() if (logicData) { this.$set(this.ruleForm, 'judgeLogic', JSON.stringify(logicData)) } if (this.$baseLodash.isArray(this.ruleForm['caseType'])) { this.ruleForm['caseType'] = this.ruleForm['caseType'].join(',') } const { code, msg } = await addOrUpdIndex(this.ruleForm) code === 200 ? (this.isEdit ? this.$baseMessage.success(msg || '编辑成功!') : this.$baseMessage.success(msg || '新增成功!')) : (this.isEdit ? this.$baseMessage.error(msg || '新增失败!') : this.$baseMessage.error(msg || '新增失败!')) this.drawerOption.show = false this.$emit('reloadData') } } } </script> <style scoped lang="scss"> ::v-deep { .el-select { width: 100%; } } .select_list { display: flex; flex-direction: column; .select_list_item { display: flex; align-items: center; .closed { cursor: pointer; } } } </style>