| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| | | <!-- <el-form-item label="状态" prop="status"> |
| | | <el-input |
| | | v-model="queryParams.status" |
| | | placeholder="请输入状态" |
| | | clearable |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="考核对象" prop="unitName"> |
| | | <el-input |
| | | v-model="queryParams.status" |
| | | placeholder="请输入考核对象" |
| | | clearable |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间"> |
| | | <el-date-picker |
| | | v-model="daterangeCreateTime" |
| | | style="width: 240px" |
| | | value-format="yyyy-MM-dd" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | ></el-date-picker> |
| | | </el-form-item> --> |
| | | <el-form style="margin-left :20px" :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| | | <el-form-item label="考核类型" prop="examineCategory"> |
| | | <el-select v-model="queryParams.status" placeholder="考核类型" clearable @keyup.enter.native="handleQuery"> |
| | | <el-select v-model="queryParams.examineCategory" placeholder="考核类型" clearable @keyup.enter.native="handleQuery"> |
| | | <el-option |
| | | v-for="dict in dict.type.platform_examine_category" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核标签" prop="examineTag"> |
| | | <el-select v-model="queryParams.examineTag" placeholder="考核标签" clearable @keyup.enter.native="handleQuery"> |
| | | <el-option |
| | | v-for="dict in dict.type.platform_examine_tag" |
| | | :key="parseInt(dict.value)" |
| | | :label="dict.label" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-row :gutter="10" style="margin-left :15px"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | |
| | | @click="handleDelete" |
| | | >删除</el-button> |
| | | </el-col> --> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | size="mini" |
| | | @click="handleExport" |
| | | >导出</el-button> |
| | | </el-col> |
| | | <!-- <el-col :span="1.5">--> |
| | | <!-- <el-button--> |
| | | <!-- type="warning"--> |
| | | <!-- plain--> |
| | | <!-- icon="el-icon-download"--> |
| | | <!-- size="mini"--> |
| | | <!-- @click="handleExport"--> |
| | | <!-- >导出</el-button>--> |
| | | <!-- </el-col>--> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | | <div class="card-container"> |
| | | <el-card class="box-card" v-for="item in checkTemplateList" :key="item"> |
| | | <div class="text item">模板名称:{{ item.templateName }}</div> |
| | | <div class="text item">考核类型:{{ item.examineCategory == 0 ? '省厅考核' : '市局考核' }}</div> |
| | | <div class="text item">考核对象:{{ item.deptId }}</div> |
| | | <div class="text item">使用状态:{{ item.status == 0 ? '启用' : '停用' }}</div> |
| | | <div class="text item">考核标签:{{ item.examineTag == 0 ? '省厅考核' : '市局考核' }}</div> |
| | | <div class="text item" style="display: flex"> |
| | | <span>考核类型:</span> |
| | | <dict-tag :options="dict.type.platform_examine_category" :value="item.examineCategory"/> |
| | | </div> |
| | | <div class="text item">考核频率:{{ item.frequency == 0 ? '月度考核' : '季度考核' }}</div> |
| | | <div class="text item" style="display: flex"> |
| | | <span>考核对象:</span> |
| | | <el-tooltip effect="dark" :content="translateDeptIdList(item.deptId)" placement="top"> |
| | | <div class="item" style="margin-bottom: 0" v-for = "(deptId,index) in item.deptId" :key = index> |
| | | {{ translateDeptIdList(item.deptId) }} |
| | | </div> |
| | | </el-tooltip> |
| | | </div> |
| | | <div class="text item" style="display: flex"> |
| | | <span style="padding: 3px 0;">使用状态:</span> |
| | | <dict-tag :options="dict.type.platform_use_state" :value="item.status"/> |
| | | </div> |
| | | <div class="bottom clearfix"> |
| | | <el-button type="text" class="button" @click="">启用</el-button> |
| | | <el-button type="text" class="button" @click="">复制</el-button> |
| | | <el-button type="text" class="button" @click="handleStatus(item)" v-show="item.status == 1" >启用</el-button> |
| | | <el-button type="text" class="button" @click="handleStatus(item)" v-show="item.status == 0" >停用</el-button> |
| | | <el-button type="text" class="button" @click="handleCopy(item)">复制</el-button> |
| | | <el-button type="text" class="button" @click="handleUpdate(item)">修改</el-button> |
| | | <el-button type="text" class="button" @click="handleDelete(item)">删除</el-button> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | |
| | | <el-form-item label="模板名称" prop="templateName"> |
| | | <el-input v-model="form.templateName" placeholder="请输入模板名称" /> |
| | | </el-form-item> |
| | | <el-form-item label="考核类型" prop="examineCategory"> |
| | | <el-select v-model="form.examineCategory" placeholder="考核类型"> |
| | | <el-form-item label="考核标签" prop="examineTag"> |
| | | <el-select v-model="form.examineTag" placeholder="考核类型"> |
| | | <el-option |
| | | v-for="dict in dict.type.platform_examine_category" |
| | | v-for="dict in dict.type.platform_examine_tag" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核频率" prop="frequency"> |
| | | <el-select v-model="form.frequency" placeholder="考核频率"> |
| | | <el-option |
| | | v-for="dict in dict.type.platform_examine_frequency" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="parseInt(dict.value)" |
| | |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核类型" prop="examineCategory"> |
| | | <el-select v-model="form.examineCategory" placeholder="考核类型" :disabled="tempRuleFormList.length > 0"> |
| | | <el-option |
| | | v-for="dict in dict.type.platform_examine_category" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核规则" prop="tempRuleFormList"> |
| | | <div class="row-warp"> |
| | | <div class="row" v-for="(form) in tempRuleFormList"> |
| | |
| | | <div class="margin-5"> |
| | | <el-select v-model="form.ruleId" placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in ruleList" |
| | | v-for="item in currentRuleList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.id"> |
| | | :label="item.ruleName" |
| | | :value="item.id" |
| | | :disabled="isRuleDisabled(item.id, index)" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | |
| | | <div class="row-right"> |
| | | <div>权重</div> |
| | | <div class="margin-5"> |
| | | <el-input type="number" v-model="form.weight"/> |
| | | <el-input type="number" v-model.number="form.weight" /> |
| | | </div> |
| | | </div> |
| | | <div class="item-op"> |
| | |
| | | </div> |
| | | </div> |
| | | <div style="margin-top: 25px"> |
| | | <el-button type="success" @click="nextAdd" size="mini" plain>添加</el-button> |
| | | <el-button type="success" @click="nextAdd()" size="mini" plain>添加</el-button> |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="报警分数" prop="alarmScore"> |
| | | <el-input v-model="form.alarmScore" placeholder="请输入报警分数" /> |
| | | </el-form-item> |
| | | <el-form-item label="调整系数" prop="adjustCoefficient"> |
| | | <el-input v-model="form.adjustCoefficient" placeholder="请输入系数值" /> |
| | |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="规则描述" prop="description"> |
| | | <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入规则描述"/> |
| | | </el-form-item> |
| | | <el-form-item label="状态" prop="status"> |
| | | <el-radio v-model="form.status" label="use">启用</el-radio> |
| | | <el-radio v-model="form.status" label="stop">停用</el-radio> |
| | | <el-radio v-model="form.status" label="0" >启用</el-radio> |
| | | <el-radio v-model="form.status" label="1" >停用</el-radio> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { listCheckTemplate, getCheckTemplate, delCheckTemplate, addCheckTemplate, updateCheckTemplate } from "@/api/platform/check-template"; |
| | | // import { ruleSelect } from '@/api/platform/check-rule' |
| | | import { listCheckTemplate, getCheckTemplate, delCheckTemplate, addCheckTemplate, updateCheckTemplate,copyCheckTemplate } from "@/api/platform/check-template"; |
| | | import { areaSelect } from '@/api/system/dept' |
| | | import { listCheckRule } from "../../../api/platform/check-rule"; |
| | | |
| | | export default { |
| | | name: "CheckTemplate", |
| | | dicts: ['platform_audit_state','platform_examine_category','platform_rule_category'], |
| | | dicts: ['platform_use_state','platform_examine_category','platform_rule_category','platform_examine_frequency','platform_examine_tag'], |
| | | data() { |
| | | return { |
| | | props: { multiple: true }, |
| | |
| | | areaList:[], |
| | | ruleList: [], |
| | | unitList: [], |
| | | // 临时规则表单 |
| | | tempRuleForm: {}, |
| | | selectedRuleIds: [], |
| | | examineCategory: null, |
| | | isExamineCategoryDisabled: false, |
| | | // 临时规则表单列表 |
| | | tempRuleFormList: [{"ruleId": null, "adjustCoefficient": null}], |
| | | tempRuleFormList: [], |
| | | // 最终 |
| | | ruleFormList: [], |
| | | // 遮罩层 |
| | |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | status: null, |
| | | createTime: null, |
| | | examineCategory: null, |
| | | examineTag: null |
| | | }, |
| | | // 表单参数 |
| | | form: {}, |
| | |
| | | templateName: [ |
| | | { required: true, message: "模板名称不能为空", trigger: "blur" } |
| | | ], |
| | | examineTag: [ |
| | | { required: true, message: "请选择考核标签", trigger: "change" } |
| | | ], |
| | | frequency: [ |
| | | { required: true, message: "请选择状态考核频率", trigger: "change" } |
| | | ], |
| | | deptId: [ |
| | | { required: true, message: "请至少选择一个考核对象", trigger: "change" } |
| | | ], |
| | | examineCategory: [ |
| | | { required: true, message: "请选择考核类型", trigger: "change" } |
| | | ], |
| | | adjustCoefficient: [ |
| | | { required: true, message: "调整系数不能为空", trigger: "blur" } |
| | | ], |
| | | adjustWay: [ |
| | | { required: true, message: "调整方式:乘除不能为空", trigger: "blur" } |
| | | { required: true, message: "请选择调整方式", trigger: "change" } |
| | | ], |
| | | } |
| | | status: [ |
| | | { required: true, message: "请选择状态", trigger: "change" } |
| | | ], |
| | | }, |
| | | }; |
| | | }, |
| | | computed: { |
| | | formattedDeptIds() { |
| | | // 使用map将数组元素转换为字符串,然后用join方法连接它们 |
| | | return this.item.deptId.map(deptId => deptId.toString()).join(', '); |
| | | }, |
| | | currentRuleList() { |
| | | // 根据当前考核类型返回相应的规则列表 |
| | | const ruleListKey = this.form.examineCategory; |
| | | // 有三个不同的规则列表 |
| | | const videoRules = this.ruleList['videoRules']; // 视频相关的规则集合 |
| | | const carRules = this.ruleList['carRules']; // 汽车相关的规则集合 |
| | | const faceRules = this.ruleList['faceRules']; // 人脸相关的规则集合 |
| | | |
| | | // 使用条件语句来选择规则列表 |
| | | if (ruleListKey == 0) { |
| | | return carRules; |
| | | } else if (ruleListKey == 1) { |
| | | return faceRules; |
| | | } else if (ruleListKey == 2) { |
| | | return videoRules; |
| | | } else { |
| | | // 默认返回一个空数组或备选方案 |
| | | return []; |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | handleChange(value) { |
| | | console.log(value); |
| | | isRuleDisabled(ruleId, index) { |
| | | // 检查规则是否已被添加到 tempRuleFormList 中并且不是当前遍历的项 |
| | | return this.tempRuleFormList.some(item => item.ruleId === ruleId && item !== this.tempRuleFormList[index]); |
| | | }, |
| | | removeRule(form) { |
| | | console.log(form) |
| | |
| | | this.tempRuleFormList = this.tempRuleFormList.filter(item => item !== form) |
| | | }, |
| | | nextAdd() { |
| | | // if (this.tempRuleFormList.length === 0) { |
| | | // this.tempRuleFormList.push({"ruleId": null, "weight": null}) |
| | | // } else { |
| | | // this.ruleFormList.push(this.tempRuleForm); |
| | | // this.tempRuleFormList.push(this.tempRuleForm); |
| | | // this.tempRuleForm = {}; |
| | | // } |
| | | this.tempRuleFormList.push({"ruleId": null, "weight": null}) |
| | | this.tempRuleFormList.push({"ruleId": null, "weight": null}); |
| | | }, |
| | | handleChange(value) { |
| | | console.log(value); |
| | | }, |
| | | // 考核规则下拉数据 |
| | | selectCheckRule() { |
| | | ruleSelect().then(res => { |
| | | listCheckRule().then(res => { |
| | | this.ruleList = res.data; |
| | | }) |
| | | }, |
| | | // 运维公司下拉数据 |
| | | // 区域下拉数据 |
| | | areaSelect() { |
| | | areaSelect().then(res => { |
| | | this.areaList = res.data; |
| | | }) |
| | | }, |
| | | translateDeptId(deptId) { |
| | | const department = this.areaList.find(dept => dept.id === deptId); |
| | | return department ? department.value : '未知'; |
| | | }, |
| | | translateDeptIdList(deptNames) { |
| | | return deptNames.map(this.translateDeptId).join(', '); |
| | | }, |
| | | /** 查询考核模板列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) { |
| | | this.queryParams["start"] = this.daterangeCreateTime[0]; |
| | | this.queryParams["end"] = this.daterangeCreateTime[1]; |
| | | } |
| | | console.log(this.queryParams) |
| | | listCheckTemplate(this.queryParams).then(response => { |
| | | this.checkTemplateList = response.rows; |
| | | this.total = response.total; |
| | |
| | | reset() { |
| | | this.form = { |
| | | id: null, |
| | | templateName: null, |
| | | examineTag: null, |
| | | frequency: null, |
| | | deptId: [], |
| | | examineCategory: null, |
| | | alarmScore: null, |
| | | adjustCoefficient: null, |
| | | adjustWay: null, |
| | | status: null, |
| | | description: null, |
| | | createTime: null, |
| | | updateTime: null, |
| | | deleted: null |
| | |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.selectedRuleIds = []; |
| | | this.tempRuleFormList = []; |
| | | this.open = true; |
| | | this.title = "添加考核模板"; |
| | | }, |
| | | /** 复制按钮操作 */ |
| | | handleCopy(row){ |
| | | copyCheckTemplate(row).then(response => { |
| | | this.$modal.msgSuccess("复制成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | }, |
| | | handleStatus(row){ |
| | | let text = row.status == 1 ? '启用' : '停用'; |
| | | const templateName = row.templateName; |
| | | this.$modal.confirm('是否确认' + text + '考核名为"' + templateName + '"的数据项?').then(function() { |
| | | row.status = row.status == 1 ? "0" : "1"; |
| | | return updateCheckTemplate(row); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess(text + "成功"); |
| | | }).catch(() => {}); |
| | | |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleUpdate(row) { |
| | |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | // 遍历表单中的每个权重字段 |
| | | for (let i = 0; i < this.tempRuleFormList.length; i++) { |
| | | const weight = this.tempRuleFormList[i].weight; |
| | | const ruleId = this.tempRuleFormList[i].ruleId; |
| | | // 如果权重为空,则显示错误提示,并阻止提交 |
| | | if (!weight || !ruleId) { |
| | | this.$message.error('规则或权重不能为空'); |
| | | return; |
| | | } |
| | | } |
| | | this.form.ruleFormList = this.tempRuleFormList; |
| | | if (this.form.id != null) { |
| | | updateCheckTemplate(this.form).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.tempRuleFormList = []; |
| | | this.form = {}; |
| | | this.getList(); |
| | | }); |
| | | } else { |
| | |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认删除考核模板编号为"' + ids + '"的数据项?').then(function() { |
| | | return delCheckTemplate(ids); |
| | | const id = row.id |
| | | this.$modal.confirm('是否确认删除考核模板名为"' + row.templateName + '"的数据项?').then(function() { |
| | | return delCheckTemplate(id); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | |
| | | } |
| | | |
| | | .item { |
| | | margin-bottom: 18px; |
| | | margin-bottom: 15px; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | |
| | | |
| | | .box-card { |
| | | width: 20%; |
| | | |
| | | margin-right: 80px; |
| | | margin-bottom: 30px; |
| | | } |
| | | .card-container { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | justify-content: flex-start; |
| | | align-items: stretch; |
| | | margin-top: 20px; |
| | | padding: 0 20px; |
| | | } |
| | | </style> |