From 19e559358b907cff913d7aa277fa04496b7fe0a6 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 19 四月 2024 15:55:16 +0800 Subject: [PATCH] 考核模板 --- src/api/platform/check-rule.js | 14 - src/api/platform/check-template.js | 10 + src/views/system/rule/index.vue | 15 -- src/views/system/template/index.vue | 293 ++++++++++++++++++++++++++++++++++-------------- 4 files changed, 223 insertions(+), 109 deletions(-) diff --git a/src/api/platform/check-rule.js b/src/api/platform/check-rule.js index 6deb1ef..3a44b68 100644 --- a/src/api/platform/check-rule.js +++ b/src/api/platform/check-rule.js @@ -4,8 +4,8 @@ export function listCheckRule(query) { return request({ url: '/check/rule/list', - method: 'post', - data: query + method: 'get', + params: query }) } @@ -26,6 +26,8 @@ }) } + + // 淇敼鑰冩牳瑙勫垯 export function updateCheckRule(data) { return request({ @@ -43,10 +45,4 @@ }) } -// 鑾峰彇涓嬫媺鍒楄〃 -export function ruleSelect() { - return request({ - url: '/check-rule/list', - method: 'get' - }) -} + diff --git a/src/api/platform/check-template.js b/src/api/platform/check-template.js index 620fd8f..fd8dee2 100644 --- a/src/api/platform/check-template.js +++ b/src/api/platform/check-template.js @@ -5,7 +5,7 @@ return request({ url: '/check/template/list', method: 'get', - data: query + params: query }) } @@ -26,6 +26,14 @@ }) } +// 澶嶅埗鑰冩牳瑙勫垯 +export function copyCheckTemplate(data) { + return request({ + url: '/check/template/copy', + method: 'post', + data: data + }) +} // 淇敼鑰冩牳妯℃澘 export function updateCheckTemplate(data) { return request({ diff --git a/src/views/system/rule/index.vue b/src/views/system/rule/index.vue index 75d534d..fdc5ca9 100644 --- a/src/views/system/rule/index.vue +++ b/src/views/system/rule/index.vue @@ -14,7 +14,6 @@ <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i> <div style="font-size:12px; text-align: center; height: 25px;">{{ item.name }} </div> <div class="bottom clearfix"> - <el-button type="text" class="button" @click="handleAudit(item)">瀹℃牳</el-button> <el-button type="text" class="button" @click="handleUpdate(item)">淇敼</el-button> </div> </el-card> @@ -36,7 +35,6 @@ <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i> <div style="font-size:12px; text-align: center; height: 25px;">{{ item.name }} </div> <div class="bottom clearfix"> - <el-button type="text" class="button" @click="handleAudit(item)">瀹℃牳</el-button> <el-button type="text" class="button" @click="handleUpdate(item)">淇敼</el-button> </div> </el-card> @@ -58,7 +56,6 @@ <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i> <div style="font-size:12px; text-align: center; height: 25px;">{{ item.name }} </div> <div class="bottom clearfix"> - <el-button type="text" class="button" @click="handleAudit(item)">瀹℃牳</el-button> <el-button type="text" class="button" @click="handleUpdate(item)">淇敼</el-button> </div> </el-card> @@ -160,7 +157,7 @@ import { templateSelect} from "@/api/platform/check-template" export default { name: "CheckRule", - dicts: ['platform_audit_state','platform_examine_category','platform_rule_category'], + dicts: ['platform_audit_state','platform_rule_category'], data() { return { // 閬僵灞� @@ -193,7 +190,6 @@ createTime: null, ruleCategory: null, templateId: null, - examineCategory: 1, }, videoData: [ { name: '骞冲彴鍦ㄧ嚎鐜�', icon: 'el-icon-connection', ruleDescription: '鐪佸巺瀵瑰競绾у叡浜拰鑱旂綉骞冲彴杩涜瀹炴椂鐩戞祴锛屽競绾у叡浜�/鑱旂綉骞冲彴姣忔湀绂荤嚎鎬绘椂闀垮湪30鍒嗛挓浠ュ唴鐨勫钩鍙板湪绾跨巼涓�100%锛屾瘡瓒呰繃30鍒嗛挓鎵�10涓櫨鍒嗙偣锛屾墸瀹屼负姝€��' + @@ -248,7 +244,7 @@ }; }, created() { - + this.getList(); }, methods: { groupData(data) { @@ -259,12 +255,7 @@ } return groupedData; }, - /** 鑰冩牳妯℃澘涓嬫媺鍒楄〃 */ - getTemplateSelect() { - templateSelect().then((res) => { - this.templateList = res.data; - }) - }, + /** 鏌ヨ鑰冩牳瑙勫垯鍒楄〃 */ getList() { this.loading = true; diff --git a/src/views/system/template/index.vue b/src/views/system/template/index.vue index e1480c5..2f4a281 100644 --- a/src/views/system/template/index.vue +++ b/src/views/system/template/index.vue @@ -1,35 +1,8 @@ <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" @@ -38,13 +11,23 @@ /> </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-select> + </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button> </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" @@ -74,30 +57,47 @@ @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 ? '鏈堝害鑰冩牳' : '瀛e害鑰冩牳' }}</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" @@ -113,10 +113,20 @@ <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)" @@ -133,6 +143,16 @@ </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"> @@ -141,10 +161,12 @@ <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> @@ -152,7 +174,7 @@ <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"> @@ -160,9 +182,12 @@ </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="璇疯緭鍏ョ郴鏁板��" /> @@ -179,9 +204,12 @@ </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"> @@ -193,13 +221,13 @@ </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 }, @@ -207,10 +235,11 @@ areaList:[], ruleList: [], unitList: [], - // 涓存椂瑙勫垯琛ㄥ崟 - tempRuleForm: {}, + selectedRuleIds: [], + examineCategory: null, + isExamineCategoryDisabled: false, // 涓存椂瑙勫垯琛ㄥ崟鍒楄〃 - tempRuleFormList: [{"ruleId": null, "adjustCoefficient": null}], + tempRuleFormList: [], // 鏈�缁� ruleFormList: [], // 閬僵灞� @@ -237,8 +266,8 @@ queryParams: { pageNum: 1, pageSize: 10, - status: null, - createTime: null, + examineCategory: null, + examineTag: null }, // 琛ㄥ崟鍙傛暟 form: {}, @@ -247,14 +276,55 @@ 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灏嗘暟缁勫厓绱犺浆鎹负瀛楃涓诧紝鐒跺悗鐢╦oin鏂规硶杩炴帴瀹冧滑 + 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(); @@ -265,8 +335,9 @@ } }, 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) @@ -274,34 +345,34 @@ 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; @@ -317,9 +388,16 @@ 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 @@ -346,8 +424,30 @@ /** 鏂板鎸夐挳鎿嶄綔 */ 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) { @@ -365,13 +465,21 @@ 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 { @@ -386,9 +494,9 @@ }, /** 鍒犻櫎鎸夐挳鎿嶄綔 */ 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("鍒犻櫎鎴愬姛"); @@ -434,7 +542,7 @@ } .item { - margin-bottom: 18px; + margin-bottom: 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -442,5 +550,16 @@ .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> -- Gitblit v1.8.0