From e5454b769d44a34af423bf87ac8a740bf8c20341 Mon Sep 17 00:00:00 2001
From: Crunchy <3114200645@qq.com>
Date: 星期二, 29 四月 2025 13:25:29 +0800
Subject: [PATCH] Merge branch 'dev' into dev_tides
---
src/views/CNAS/resourceDemand/device/component/usageAuthorization.vue | 478 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 478 insertions(+), 0 deletions(-)
diff --git a/src/views/CNAS/resourceDemand/device/component/usageAuthorization.vue b/src/views/CNAS/resourceDemand/device/component/usageAuthorization.vue
new file mode 100644
index 0000000..d316543
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/usageAuthorization.vue
@@ -0,0 +1,478 @@
+<template>
+ <div>
+ <div class="search">
+ <el-button size="small" type="primary" @click="refreshTableList">鍒� 鏂�</el-button>
+ <el-button size="small" type="primary" @click="openDia('add')">鏂� 澧�</el-button>
+ </div>
+ <div>
+ <lims-table :tableData="tableData" :column="column"
+ height="calc(100vh - 20em)" @pagination="pagination"
+ :page="page" :tableLoading="tableLoading"></lims-table>
+ </div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="usageTableDia"
+ title="璁惧淇濆吇璁″垝琛�" width="80%" @close="closeDialog">
+ <div style="display: flex;align-items: center;">
+ <el-button size="small" type="primary" @click="addTableRow" v-if="operationType !== 'check'">娣诲姞</el-button>
+ <span style="width: 60px;margin-left: 10px">骞翠唤锛�</span>
+ <el-date-picker v-model="form.impowerYear" type="year" value-format="yyyy" clearable size="small" format="yyyy"
+ placeholder="閫夋嫨骞�" :disabled="operationType === 'check'">
+ </el-date-picker>
+ </div>
+ <div style="margin: 10px 0">
+ <el-table ref="deviceImpowerDetails" :data="deviceImpowerDetails" id="templateParamTable" row-key="deviceId"
+ :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
+ height="560px" style="width: 100% ;">
+ <el-table-column align="center" header-align="center" label="搴忓彿" type="index" width="60"></el-table-column>
+ <el-table-column label="璁惧鍚嶇О" min-width="170" prop="deviceName">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.deviceName" clearable
+ size="small" :disabled="operationType === 'check'"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column label="璁惧缂栧彿" min-width="140" prop="managementNumber">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.managementNumber" clearable
+ size="small" :disabled="operationType === 'check'"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column label="瑙勬牸鍨嬪彿" min-width="120" prop="specificationModel">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.specificationModel" clearable
+ size="small" :disabled="operationType === 'check'"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column label="妫�娴嬮」鐩�" min-width="120" prop="inspectionItem<">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.inspectionItem" clearable size="small"
+ :disabled="operationType === 'check'"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column label="琚巿鏉冧汉" min-width="160" prop="delegatee">
+ <template slot-scope="scope">
+ <el-select v-model="scope.row.delegatedUserArr"
+ clearable filterable multiple
+ :disabled="operationType === 'check'"
+ placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="80" align="center" v-if="operationType !== 'check'">
+ <template slot-scope="scope">
+ <el-button style="color: #f56c6c" type="text" @click="deleteRow(scope.$index)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeDialog">鍙� 娑�</el-button>
+ <el-button v-if="operationType !== 'check'" :loading="submitFormLoading" type="primary" @click="submitForm">纭</el-button>
+ <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary"
+ @click="checkStatus(0)">涓嶉�氳繃</el-button>
+ <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary"
+ @click="checkStatus(1)">閫氳繃</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="addEquipDia" title="娣诲姞璁惧"
+ width="50%">
+ <div style="display: flex;align-items: center;">
+ <span style="width: 90px;margin-left: 10px">琚巿鏉冧汉锛�</span>
+ <el-select v-model="delegatedUser" clearable filterable multiple
+ placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.name" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </div>
+ <el-table ref="multipleTable" :data="equipOptions" tooltip-effect="dark" height="500" style="width: 100%"
+ :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
+ @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column label="璁惧鍚嶇О" prop="label" width="190"></el-table-column>
+ <el-table-column prop="value" label="璁惧缂栧彿" width="130"></el-table-column>
+ <el-table-column prop="storagePoint" label="褰掑睘瀹為獙瀹�"></el-table-column>
+ </el-table>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="addEquipDia = false">鍙� 娑�</el-button>
+ <el-button :loading="submitFormLoading" type="primary" @click="changeMachineName">纭</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="notificationDia" title="鎻愪氦瀹℃牳" width="30%" @close="closeNotificationDia">
+ <span style="margin-top: 10px;display: inline-block">
+ 璇烽�夋嫨瀹℃牳浜猴細
+ <el-select v-model="auditId" clearable filterable size="small" style="width: 90%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="notificationLoading" @click="closeNotificationDia">鍙� 娑�</el-button>
+ <el-button :loading="notificationLoading" type="primary" @click="notification">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+ addImpower,
+ deleteImpower, deviceScopeSearch, getImpowerDetail, reviewImpowerStatus,
+ selectDeviceImpowerByPage, submitReviewImpowerStatus, updateImpower, exportDeviceImpower
+} from "@/api/cnas/resourceDemand/device";
+import {selectUserCondition} from "@/api/system/user";
+import {mapGetters} from "vuex";
+
+export default {
+ name: '',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {limsTable},
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ }
+ }
+ },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ outLoading: false,
+ tableData: [],
+ tableLoading: false,
+ page: {
+ total: 0,
+ size: 20,
+ current: 1
+ },
+ column: [
+ { label: '璁″垝骞翠唤', prop: 'impowerYear' },
+ { label: '缂栧埗浜�', prop: 'compiler' },
+ { label: '缂栧埗鏃堕棿', prop: 'datePreparation' },
+ { label: '鎺堟潈浜�', prop: 'audit' },
+ { label: '鎺堟潈鏃ユ湡', prop: 'auditDate' },
+ {
+ dataType: 'tag',
+ label: '鎺堟潈鐘舵��',
+ prop: 'status',
+ formatData: (params) => {
+ if (params === 1) {
+ return '宸叉巿鏉�'
+ } else if (params == 0) {
+ return '鏈巿鏉�'
+ } else {
+ return null
+ }
+ },
+ formatType: (params) => {
+ if (params == 1) {
+ return 'success'
+ } else if (params === 0) {
+ return 'danger'
+ } else {
+ return null
+ }
+ }
+ },
+ {
+ dataType: 'action',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openDia('edit', row);
+ },
+ disabled: (row) => {
+ return row.status === 1;
+ },
+ },
+ {
+ name: '瀹℃牳閫氱煡',
+ type: 'text',
+ clickFun: (row) => {
+ this.tellApprove(row.impowerId);
+ },
+ disabled: (row) => {
+ return row.status === 1;
+ },
+ },
+ {
+ name: '瀹℃牳',
+ type: 'text',
+ clickFun: (row) => {
+ this.openDia('check', row);
+ },
+ disabled: (row) => {
+ return row.status === 1 || this.userId !== row.auditId;
+ },
+ },
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.openHandleOut(row);
+ }
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDeleteClick(row);
+ },
+ disabled: (row) => {
+ return row.status === 1;
+ },
+ },
+ ]
+ }
+ ],
+ responsibleOptions: [],
+ operationType: '',
+ usageTableDia: false,
+ deviceImpowerDetails: [],
+ submitFormLoading: false,
+ addEquipDia: false,
+ equipOptions: [],
+ selectionRows: [],
+ form: {
+ impowerYear: ''
+ },
+ delegatedUser: [],
+ impowerId: '',
+ notificationDia: false,
+ auditId: '',
+ notificationLoading: false,
+ };
+ },
+ mounted() {
+ this.refreshTableList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鐐瑰嚮鍒锋柊
+ refreshTableList () {
+ this.page.current = 1;
+ this.getTableList()
+ },
+ // 鍒嗛〉鍒囨崲
+ pagination(page) {
+ this.page.size = page.limit
+ this.getTableList()
+ },
+ getTableList () {
+ this.tableLoading = true
+ selectDeviceImpowerByPage({
+ ...this.page
+ }).then(res => {
+ this.tableLoading = false
+ this.tableData = res.data.records
+ this.page.total = res.data.total
+ }).catch(err => {
+ this.tableLoading = false
+ })
+ },
+ // 鎵撳紑鎻愪氦鎵瑰噯寮规
+ tellApprove(impowerId) {
+ this.getUserList()
+ this.notificationDia = true
+ this.impowerId = impowerId
+ },
+ // 鎻愪氦鎵瑰噯閫氱煡
+ notification() {
+ if (!this.auditId) {
+ this.$message.warning('璇烽�夋嫨瀹℃牳浜�')
+ return
+ }
+ this.notificationLoading = true
+ submitReviewImpowerStatus({
+ auditId: this.auditId,
+ impowerId: this.impowerId,
+ }).then(res => {
+ this.notificationLoading = false
+ if (res.code == 200) {
+ this.closeNotificationDia()
+ this.refreshTableList()
+ }
+ }).catch(err => {
+ this.notificationLoading = false
+ })
+ },
+ // 鍏抽棴鎻愪氦鎵瑰噯寮规
+ closeNotificationDia() {
+ this.notificationDia = false
+ this.auditId = ''
+ },
+ // 鎵撳紑鎿嶄綔寮规
+ openDia (type, row) {
+ this.operationType = type
+ this.usageTableDia = true
+ this.form = {
+ impowerYear: '',
+ deviceImpowerDetails: [],
+ }
+ this.deviceImpowerDetails = []
+ if (row) {
+ this.impowerId = row.impowerId
+ getImpowerDetail({ impowerId: this.impowerId }).then(res => {
+ if (res.code === 200) {
+ this.form = res.data
+ this.deviceImpowerDetails = this.form.deviceImpowerDetails
+ this.deviceImpowerDetails.forEach(item => {
+ this.$set(item, 'delegatedUserArr', item.delegatedUser.split(','))
+ })
+ }
+ }).catch(error => {
+ console.error(error)
+ })
+ }
+ this.getEquipOptions()
+ this.getUserList()
+ },
+ closeDialog () {
+ this.usageTableDia = false
+ this.getTableList()
+ },
+ // 娣诲姞璁惧
+ addTableRow() {
+ this.addEquipDia = true
+ this.delegatedUser = this.responsibleOptions.map((item) => item.name);
+ this.getEquipOptions()
+ },
+ // 鍒犻櫎琛ㄦ牸琛�
+ deleteRow(index) {
+ this.deviceImpowerDetails.splice(index, 1)
+ },
+ // 鎻愪氦鏂板鍜屼慨鏀�
+ submitForm() {
+ this.form.deviceImpowerDetails = this.HaveJson(this.deviceImpowerDetails)
+ this.form.deviceImpowerDetails.forEach((item) => {
+ item.delegatedUser = item.delegatedUserArr.join(',')
+ })
+ this.submitFormLoading = true
+ if (this.operationType === 'add') {
+ addImpower(this.form).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鏂板鎴愬姛')
+ this.usageTableDia = false
+ this.refreshTableList()
+ }
+ this.submitFormLoading = false
+ }).catch(err => {
+ this.submitFormLoading = false
+ })
+ } else {
+ updateImpower(this.form).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇敼鎴愬姛')
+ this.usageTableDia = false
+ this.refreshTableList()
+ }
+ this.submitFormLoading = false
+ }).catch(err => {
+ this.submitFormLoading = false
+ })
+ }
+ },
+ // 鎻愪氦瀹℃牳
+ checkStatus(status) {
+ const params = {
+ status: status,
+ impowerId: this.impowerId
+ }
+ reviewImpowerStatus(params).then(res => {
+ if (res.code == 200) {
+ this.$message.success('瀹℃牳鎴愬姛')
+ this.usageTableDia = false
+ this.refreshTableList()
+ }
+ this.submitFormLoading = false
+ }).catch(err => {
+ this.submitFormLoading = false
+ })
+ },
+ handleSelectionChange(selection) {
+ this.selectionRows = selection
+ },
+ // 璧嬪�间华鍣ㄧ紪鍙�
+ changeMachineName() {
+ this.deviceMaintenancePlanDetails = []
+ this.selectionRows.map(val => {
+ this.deviceImpowerDetails.push({ deviceId: val.id, deviceName: val.label, managementNumber: val.value, specificationModel: val.specificationModel, delegatedUserArr: this.delegatedUser })
+ })
+ this.addEquipDia = false
+ },
+ // 鑾峰彇鎵�鏈夎澶�
+ getEquipOptions() {
+ this.equipOptions = []
+ deviceScopeSearch({ status: 0 }).then(res => {
+ if (res.code === 200 && res.data) {
+ this.equipOptions = res.data.map(m => {
+ m.value = m.managementNumber
+ m.label = m.deviceName
+ m.storagePoint = m.storagePoint
+ return m
+ })
+ }
+ }).catch(error => {
+ console.error(error)
+ })
+ },
+ openHandleOut (row) {
+ exportDeviceImpower({ impowerId: row.impowerId }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '璁惧浣跨敤鎺堟潈琛�' + '.docx')
+ })
+ },
+ handleDeleteClick(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteImpower({ impowerId: row.impowerId }).then(res => {
+ this.$message({
+ type: 'success',
+ message: '鍒犻櫎鎴愬姛!'
+ });
+ this.refreshTableList()
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
+ getUserList() {
+ selectUserCondition({type: 2}).then(res => {
+ if (res.code == 200) {
+ this.responsibleOptions = res.data
+ }
+ })
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.refreshTableList();
+ }
+ },
+ },
+ computed: {
+ ...mapGetters(["userId"]),
+ },
+};
+</script>
+
+<style scoped>
+.search {
+ height: 46px;
+ text-align: right;
+ margin-top: 10px;
+}
+</style>
--
Gitblit v1.9.3