From 3eea723d03c46cbed4fe47b538f3b725e79284a6 Mon Sep 17 00:00:00 2001
From: wjt <1797368093@qq.com>
Date: 星期二, 23 七月 2024 09:54:58 +0800
Subject: [PATCH] 添加异常菜单
---
src/views/infomanger/abnormal/component/details.vue | 238 +++++++++++++++++++++++++++++
src/views/infomanger/abnormal/index.vue | 197 ++++++++++++++++++++++++
2 files changed, 435 insertions(+), 0 deletions(-)
diff --git a/src/views/infomanger/abnormal/component/details.vue b/src/views/infomanger/abnormal/component/details.vue
new file mode 100644
index 0000000..e6a4d1c
--- /dev/null
+++ b/src/views/infomanger/abnormal/component/details.vue
@@ -0,0 +1,238 @@
+<template>
+ <el-dialog title="鎵ф硶璇︽儏" width="900px" v-model="dialogVisible" @close="closeDialog">
+ <div v-loading="loading">
+ <div class="title">鎵ф硶淇℃伅</div>
+ <div class="content">
+ <el-row>
+ <el-col :span="12">
+ <div class="label">鎵ф硶绫诲瀷</div>
+ <div class="value">{{ dispImgType(details.enforceType)}}</div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">鎵ф硶閮ㄩ棬</div>
+ <div class="value">{{ details.applyDeptName }}</div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">浼佷笟</div>
+ <div class="value">{{ details.companyName }}</div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">鎵ф硶浜哄憳</div>
+ <div class="value">{{ details.executeUser || details.applyUser }}</div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">闅忚浜哄憳</div>
+ <div class="value">
+ <div v-for="(item, index) in details.peers" :key="index">
+ {{ item.peerUser }} ({{ item.peerDeptName }})
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">鐢宠鏃堕棿</div>
+ <div class="value">{{ details.applyTime || "" }}</div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">鎵ф硶鏃堕棿</div>
+ <div class="value">{{ details.executeTime || details.planTime }}</div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">鐘舵��</div>
+ <div class="value">{{ status.orderStatusMap[details.orderStatus] }}</div>
+ </el-col>
+ <el-col :span="24">
+ <div class="label">鎵ф硶鍐呭</div>
+ <div class="value">{{ details.enforceContent || "--" }}</div>
+ </el-col>
+ </el-row>
+ </div>
+ <div v-if="details.orderStatus == 4">
+ <div class="title">鎵ф硶璁板綍</div>
+ <div class="content">
+ <el-row>
+ <el-col :span="12">
+ <div class="label">鎵ф硶涓婚</div>
+ <div class="value">{{ details.enforceReason || '' }}</div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">鏄惁閫氱煡浼佷笟</div>
+ <div class="value">{{ status.isNoticeCompany[details.isNoticeCompany] }}</div>
+ </el-col>
+ <el-col :span="24">
+ <div class="label">鎵ф硶杩囩▼</div>
+ <div class="value">
+ <div>
+ <img :src="baseUrl + item" alt="" class="image" v-for="(item, index) in details.regionImgs"
+ :key="index" />
+ </div>
+ <div>
+ {{ details.enforceContent }}
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">鎵ф硶缁撴灉</div>
+ <div class="value">
+ {{ status.regionStatus[details.regionStatus] }}
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </div>
+ <div v-if="details.orderStatus == 4 && details.evaluateVo">
+ <div class="title">鎵ф硶璇勪环</div>
+ <div class=" end-content" v-if="details.evaluateVo">
+ <!-- <el-row> -->
+ <div v-for="(item,index) in details.evaluateVo.questionList" :key="index">
+ <div class="label" >{{item.questionName}}</div>
+ <div class="value" v-if="item.questionType == 2"><el-rate v-model="item.getScore" disabled></el-rate></div>
+ <div class="value" v-if="item.questionType == 1" style="margin: 10px;">
+ <!-- <el-raido-group v-model="item.remark" >
+ <el-radio v-for="(ele,inde) in item.answerList" :key="inde" :value="ele.answerId">
+ {{ ele.answerName }} {{ele.answerId}} {{item.remark}}
+ </el-radio>
+ </el-raido-group> -->
+ {{ item.answerList.find((ele) => ele.answerId == item.remark).answerName }}
+ </div>
+
+ </div>
+ <!-- <el-col :span="12">
+ <div class="label">鎵ф硶鍚堢悊鎬�</div>
+ <div class="value">鍙告硶妫�鏌�</div>
+ </el-col>
+ <el-col :span="24">
+ <div class="label">鎵ф硶璁ょ湡绋嬪害</div>
+ <div class="value">鍙告硶妫�鏌�</div>
+ </el-col>
+ <el-col :span="12">
+ <div class="label">鎵ф硶缁撴灉婊℃剰搴�</div>
+ <div class="value">鍙告硶妫�鏌�</div>
+ </el-col> -->
+ <!-- </el-row> -->
+ </div>
+ </div>
+ </div>
+ <template #footer>
+ <el-button @click="closeDialog">鍏� 闂�</el-button>
+ </template>
+ </el-dialog>
+</template>
+
+<script setup lang="ts">
+import { getOrder } from '@/api/system/company/company'
+const dialogVisible = ref(false)
+const { proxy } = getCurrentInstance()
+const { enforce_type } = proxy.useDictPer("enforce_type");
+const details:any = ref({
+ evaluateVo: {
+ questionList: []
+ }
+})
+const loading = ref(false)
+const status = {
+ orderStatusMap: {
+ '-1': '鎷掔粷',
+ 0: '寰呮彁浜�',
+ 1: '宸叉彁浜�',
+ 2: '寰呮墽琛�',
+ 3: '寰呬笂鎶�',
+ 4: '宸茬粨鏉�',
+ },
+ regionStatus: {
+ 0: '姝e父',
+ 1: '鍋滀笟鏁撮】',
+ },
+ isNoticeCompany: {
+ 0: '鍚�',
+ 1: '鏄�',
+ }
+}
+const baseUrl = import.meta.env.VITE_APP_BASE_API
+function getDetails(orderId) {
+ getOrder({ orderId }).then(val => {
+ if (val.data.regionImgs) {
+ val.data.regionImgs = val.data.regionImgs.split(',')
+ }
+ if(val.data.evaluateVo && val.data.evaluateVo.questionList) {
+ val.data.evaluateVo.questionList.map(item => {
+ item.remark = Number(item.remark)
+ })
+ }
+ details.value = val.data
+ console.log(details.value)
+ loading.value = false
+ }).catch(err => {
+ loading.value = false
+ })
+}
+const dispImgType = (e: string) => {
+ return enforce_type.value.find((f: any) => f.value == e)?.label;
+};
+function openDialog(item: any) {
+ details.value = {}
+ loading.value = true
+ getDetails(item.orderId)
+ dialogVisible.value = true
+}
+
+
+function closeDialog() {
+ dialogVisible.value = false
+}
+defineExpose({ openDialog, closeDialog })
+</script>
+
+<style lang="scss" scoped>
+.title {
+ font-size: 16px;
+ background-color: #f6f6f6;
+ padding: 10px;
+ margin-bottom: 14px;
+}
+
+.el-col {
+ display: flex;
+ justify-content: flex-start;
+ align-items: flex-start;
+ margin-bottom: 15px
+}
+
+.content {
+ margin-bottom: 14px;
+
+ .label {
+ font-size: 14px;
+ color: #999;
+ width: 110px;
+ text-align: justify;
+ text-align-last: justify;
+ margin-right: 30px;
+ }
+
+ .value {
+ font-size: 14px;
+ color: #333;
+ width: calc(100% - 120px);
+ }
+}
+.end-content{
+ margin-bottom: 14px;
+ .label {
+ font-size: 14px;
+ color: #999;
+ margin-right: 30px;
+ }
+
+ .value {
+ font-size: 14px;
+ color: #333;
+ }
+}
+.image {
+ width: 80px;
+ height: 80px;
+ display: inline-block;
+ margin-right: 20px;
+ margin-bottom: 20px
+}
+</style>
\ No newline at end of file
diff --git a/src/views/infomanger/abnormal/index.vue b/src/views/infomanger/abnormal/index.vue
new file mode 100644
index 0000000..48b454b
--- /dev/null
+++ b/src/views/infomanger/abnormal/index.vue
@@ -0,0 +1,197 @@
+<template>
+ <div class="app-container">
+ <el-form inline class="evenly-distributed-labels" ref="formRef" :model="refValue.queryParams" label-width="80px">
+ <el-form-item label="鎵ф硶璁板綍" prop="enforceReason">
+ <el-input placeholder="璇疯緭鍏�" v-model="refValue.quparams.enforceReason" ></el-input>
+ </el-form-item>
+ <el-form-item label="鎵ф硶绫诲瀷" prop="enforceType">
+ <el-select v-model="refValue.quparams.enforceType" placeholder="璇烽�夋嫨" style="width: 170px;">
+ <el-option v-for="(item,index) in enforce_type" :label="item.label" :value="item.value" :key="index"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎵ф硶鏃堕棿" prop="enforceType">
+ <el-date-picker
+ v-model="refValue.quparams.pertime"
+ @change="timeChange"
+ format="YYYY-MM-DD"
+ value-format="YYYY-MM-DD"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ />
+ </el-form-item>
+ <el-form-item label="浼佷笟" prop="companyName">
+ <el-input placeholder="璇疯緭鍏�" v-model="refValue.quparams.companyName"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵ф硶閮ㄩ棬" prop="applyDeptName">
+ <el-input placeholder="璇疯緭鍏�" v-model="refValue.quparams.applyDeptName"></el-input>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="orderStatus">
+ <!-- <el-input placeholder="璇疯緭鍏�" ></el-input> -->
+ <el-select v-model="refValue.quparams.orderStatus" placeholder="璇烽�夋嫨" style="width: 170px;">
+ <el-option v-for="(item,index) in refValue.orderStatusMap" :value="index" :label="item">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎵ф硶缁撴灉" prop="regionStatus">
+ <el-select style="width: 170px;" v-model="refValue.quparams.regionStatus" placeholder="璇烽�夋嫨">
+ <el-option label="姝e父" value="0"></el-option>
+ <el-option label="鍋滀笟鏁撮】" value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鏄惁閫氱煡" prop="isNoticeCompany">
+ <el-select v-model="refValue.quparams.isNoticeCompany" placeholder="璇烽�夋嫨" style="width: 170px;">
+ <el-option label="鍚�" value="0"></el-option>
+ <el-option label="鏄�" value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+ <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
+ <!-- <el-row class="mt20 mb10">
+ <el-col>
+ <el-button icon="Download" type="primary" plain>瀵煎嚭</el-button>
+ </el-col>
+ </el-row> -->
+ <el-table :data="refValue.tableData">
+ <el-table-column label="浼佷笟" prop="companyName"></el-table-column>
+ <el-table-column label="鎵ф硶閮ㄩ棬" prop="applyDeptName"></el-table-column>
+ <el-table-column label="鎵ф硶浜�" prop="applyUser"></el-table-column>
+ <el-table-column label="鎵ф硶绫诲瀷" prop="enforceType">
+ <template #default="scope">
+ {{dispImgType(scope.row.enforceType)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="鎵ф硶涓婚" prop="enforceReason">
+ <template #default="scope">
+ <el-link type="primary" @click="openDetails(scope.row)">{{ scope.row.enforceReason }}</el-link>
+ </template>
+ </el-table-column>
+ <el-table-column label="鐢宠鏃堕棿" prop="applyTime" width="180"></el-table-column>
+ <el-table-column label="鐘舵��" prop="orderStatus" width="100">
+ <template #default="scope">
+ {{ refValue.orderStatusMap[scope.row.orderStatus] }}
+ </template>
+ </el-table-column>
+ <el-table-column label="寮傚父棰勮" prop="warnStatus" width="100">
+ <template #default="scope">
+ <div v-if="scope.row.warnStatus == 1" style="color: red;">寮傚父</div>
+ </template>
+ </el-table-column>
+ <el-table-column label="寮傚父鍘熷洜" prop="warnReason" width="180"></el-table-column>
+ </el-table>
+ <pagination v-show="refValue.quparams.total > 0" :total="refValue.quparams.total" v-model:page="refValue.quparams.pageNum" v-model:limit="refValue.quparams.pageSize" @pagination="getList" />
+ <detailsCom ref="refDetails"></detailsCom>
+ </div>
+</template>
+
+<script lang="ts" setup>
+import { companyListEnforce } from '@/api/system/company/company'
+import detailsCom from './component/details.vue'
+const formRef = ref()
+const refDetails = ref()
+const { proxy } = getCurrentInstance()
+const { enforce_type } = proxy.useDictPer("enforce_type");
+const time = ref("")
+const refValue: any = reactive({
+ tableData: [],
+ total: 1,
+ quparams: {
+ pageNum: 1,
+ pageSize: 10,
+ total: 1,
+ companyName: '',
+ enforceType: '',
+ applyDeptName: '',
+ orderStatus: "",
+ enforceReason: "",
+ isNoticeCompany: "",
+ enforceTime: "",
+ begineTime: "",
+ endTime: "",
+ warnStatus: 1
+ },
+ orderStatusMap: {
+ '-1': '鎷掔粷',
+ 0: '寰呮彁浜�',
+ 1: '宸叉彁浜�',
+ 2: '寰呮墽琛�',
+ 3: '寰呬笂鎶�',
+ 4: '宸茬粨鏉�',
+ },
+ regionStatus: {
+ 0: '姝e父',
+ 1: '鍋滀笟鏁撮】',
+ },
+ isNoticeCompany: {
+ 0: '鍚�',
+ 1: '鏄�',
+ }
+})
+const form = reactive({
+ queryParams: {
+ content: ''
+ }
+})
+const dispImgType = (e: string) => {
+ return enforce_type.value.find((f: any) => f.value == e)?.label;
+};
+function getList(e: { limit: number; page: number }) {
+ refValue.quparams.pageSize = e.limit
+ refValue.quparams.pageNum = e.page
+ companyListEnforceHandle()
+}
+function companyListEnforceHandle() {
+ companyListEnforce(refValue.quparams).then(res => {
+ refValue.tableData = res.rows
+ refValue.quparams.total = res.total
+ })
+}
+companyListEnforceHandle()
+function handleQuery() {
+ refValue.quparams.pageNum = 1
+ companyListEnforceHandle()
+}
+function timeChange(e: string[]) {
+ refValue.quparams.begineTime = e[0] + " " + "00:00:00"
+ refValue.quparams.endTime = e[1] + " " + "23:59:59"
+}
+function openDetails(item: any) {
+ refDetails.value.openDialog(item)
+}
+function resetQuery() {
+ refValue.quparams = {
+ pageNum: 1,
+ pageSize: 10,
+ total: 1,
+ companyName: '',
+ enforceType: '',
+ applyDeptName: '',
+ orderStatus: "",
+ enforceReason: "",
+ isNoticeCompany: "",
+ begineTime: "",
+ endTime: "",
+ }
+ formRef.value.resetFields()
+ companyListEnforceHandle()
+
+}
+</script>
+
+<style scoped lang="scss">
+.evenly-distributed-labels {
+ :deep(){
+ .el-form-item__label {
+ position: relative; /* 璁剧疆鐩稿瀹氫綅浣滀负鏄熷彿鐨勫畾浣嶅熀鍑� */
+ text-align: justify;
+ text-align-last: justify; /* 纭繚鏈�鍚庝竴琛屼篃涓ょ瀵归綈 */
+ padding-left: 10px; /* 涓烘槦鍙烽鐣欑┖闂� */
+ display: inline-block;
+ }
+ }
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.1