From db42ca9313417e301735f256549977ff72de5aee Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期四, 17 四月 2025 10:32:21 +0800 Subject: [PATCH] art: 设备管理-设备台账-设备文档添加 --- src/views/eam/equipment/modules/EamEquipmentAttachmentModal.vue | 138 +++++++++++++++++++++++ src/views/eam/equipment/EamEquipmentAttachmentList.vue | 185 ++++++++++++++++++++++++++++++ src/views/eam/equipment/EamEquipmentList.vue | 9 + 3 files changed, 330 insertions(+), 2 deletions(-) diff --git a/src/views/eam/equipment/EamEquipmentAttachmentList.vue b/src/views/eam/equipment/EamEquipmentAttachmentList.vue new file mode 100644 index 0000000..074fabb --- /dev/null +++ b/src/views/eam/equipment/EamEquipmentAttachmentList.vue @@ -0,0 +1,185 @@ +<template> + <a-card :bordered="false"> + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button v-if="queryParam.equipmentId" @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"> + <a-icon type="delete" /> + 鍒犻櫎 + </a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 + <a-icon type="down" /> + </a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a + style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handlePreview(record)">棰勮</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾涓嬭浇鏂囦欢鍚�?" @confirm="() => handleDownload(record)"> + <a>涓嬭浇</a> + </a-popconfirm> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + <!-- table鍖哄煙-end --> + + <!-- 琛ㄥ崟鍖哄煙 --> + <eamEquipmentAttachment-modal ref="modalForm" @ok="modalFormOk" :equipmentId="queryParam.equipmentId"></eamEquipmentAttachment-modal> + <lx-file-preview ref="lxFilePreview" :fileUrl="fileUrl"></lx-file-preview> + </a-card> +</template> + +<script> +import '@/assets/less/TableExpand.less' +import EamEquipmentAttachmentModal from './modules/EamEquipmentAttachmentModal' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import { downFile } from '@api/manage' + +export default { + name: 'EamEquipmentAttachmentList', + mixins: [JeecgListMixin], + components: { + EamEquipmentAttachmentModal + }, + data() { + return { + description: '璁惧鏂囨。鍙拌处浣跨敤绠$悊椤甸潰', + disableMixinCreated: true, + fileUrl: '', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '鏂囦欢鍔犲瘑鍚�', + align: 'center', + dataIndex: 'fileEncodeName', + ellipsis: true, + }, + { + title: '鏂囦欢鍚嶇О', + align: 'center', + dataIndex: 'fileName', + ellipsis: true, + }, + { + title: '鏂囦欢璺緞', + align: 'center', + dataIndex: 'filePath', + ellipsis: true, + }, + { + title: '鏂囦欢鍚庣紑鍚�', + align: 'center', + dataIndex: 'fileSuffix' + }, + { + title: '鏂囦欢澶у皬', + align: 'center', + dataIndex: 'fileSize' + }, + { + title: '鎻忚堪', + align: 'center', + dataIndex: 'description', + ellipsis: true, + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/eam/equipmentAttachment/list', + delete: '/eam/equipmentAttachment/delete', + deleteBatch: '/eam/equipmentAttachment/deleteBatch', + download: '/eam/equipmentAttachment/downloadFile', + } + } + }, + computed: { + }, + methods: { + handleDownload(record) { + downFile(this.url.download, { id: record.id }).then((res) => { + if (!res) { + this.$message.warning('鏂囦欢涓嬭浇澶辫触') + return + } else { + let fileName = record.fileName; + if (typeof window.navigator.msSaveBlob !== 'undefined') { + window.navigator.msSaveBlob(new Blob([res]), fileName); + } else { + let url = window.URL.createObjectURL(new Blob([res])); + let link = document.createElement('a'); + link.style.display = 'none'; + link.href = url; + link.setAttribute('download', fileName); + document.body.appendChild(link); + link.click() + document.body.removeChild(link) //涓嬭浇瀹屾垚绉婚櫎鍏冪礌 + window.URL.revokeObjectURL(url) //閲婃斁鎺塨lob瀵硅薄 + } + } + }) + }, + handlePreview: function (record) { + this.$refs.lxFilePreview.preview(record.filePath); + }, + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/eam/equipment/EamEquipmentList.vue b/src/views/eam/equipment/EamEquipmentList.vue index f830daa..c609332 100644 --- a/src/views/eam/equipment/EamEquipmentList.vue +++ b/src/views/eam/equipment/EamEquipmentList.vue @@ -167,7 +167,9 @@ <!-- table鍖哄煙-end --> <a-tabs v-model="activeTabKey" @change="handleTabChange"> - <a-tab-pane tab="璁惧鏂囨。" :key="1">璁惧鏂囨。</a-tab-pane> + <a-tab-pane tab="璁惧鏂囨。" :key="1"> + <eam-equipment-attachment-list ref="tabPaneTableListRef1" /> + </a-tab-pane> <a-tab-pane tab="鐐规宸ュ崟" :key="2"> <eam-inspection-order-list ref="tabPaneTableListRef2" :isDisplayOperation="false"/> </a-tab-pane> @@ -200,6 +202,7 @@ import EamMaintenanceStandardList from '@views/eam/base/EamMaintenanceStandardList.vue' import EamRepairOrderList from '../repair/EamRepairOrderList' import EamInspectionOrderList from '../maintenance/EamInspectionOrderList' + import EamEquipmentAttachmentList from '@views/eam/equipment/EamEquipmentAttachmentList.vue' export default { name: 'EamEquipmentList', @@ -210,7 +213,8 @@ EamMaintenanceStandardList, ResumeDrawer, NameplateModal, - EamEquipmentModal + EamEquipmentModal, + EamEquipmentAttachmentList }, data() { return { @@ -557,6 +561,7 @@ onSelectChange(selectedRowKeys, selectionRows) { this.selectedRowKeys = selectedRowKeys this.selectionRows = selectionRows + this.$refs['tabPaneTableListRef' + this.activeTabKey].queryParam.equipmentId = null; this.$refs['tabPaneTableListRef' + this.activeTabKey].dataSource = [] this.$refs['tabPaneTableListRef' + this.activeTabKey].onClearSelected() if (selectedRowKeys.length === 1) this.loadTabPaneTableData(selectedRowKeys[0]) diff --git a/src/views/eam/equipment/modules/EamEquipmentAttachmentModal.vue b/src/views/eam/equipment/modules/EamEquipmentAttachmentModal.vue new file mode 100644 index 0000000..bf170cc --- /dev/null +++ b/src/views/eam/equipment/modules/EamEquipmentAttachmentModal.vue @@ -0,0 +1,138 @@ +<template> + <j-modal + :title="title" + :width="800" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-form-model-item + label="涓婁紶" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + v-if="!editable" + prop="fileList"> + <lx-upload :returnUrl="false" + :isMultiple="false" + v-model="model.fileList" + biz="test"> + </lx-upload> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fileName" label="鏂囦欢鍚嶇О" v-if="editable"> + <a-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="model.fileName" /> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="description" label="鎻忚堪"> + <a-textarea placeholder="璇疯緭鍏ユ弿杩�" v-model="model.description" /> + </a-form-model-item> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> +import { httpAction } from '@/api/manage' + +export default { + name: "EamEquipmentAttachmentModal", + props: { + equipmentId: { + type: String, + required: true, + default: '-1' + } + }, + data () { + return { + title:"鎿嶄綔", + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + + confirmLoading: false, + validatorRules:{ + fileName: [ + { required: true, message: '璇疯緭鍏ユ枃浠跺悕绉�!' } + ] + }, + url: { + add: "/eam/equipmentAttachment/add", + edit: "/eam/equipmentAttachment/edit", + }, + editable: false, + } + }, + created () { + }, + methods: { + add () { + this.editable = false; + //鍒濆鍖栭粯璁ゅ�� + this.model = {}; + this.visible = true + }, + edit (record) { + this.editable = true; + this.model = Object.assign({}, record) + this.visible = true + }, + close () { + this.$emit('close'); + this.visible = false; + this.$refs.form.clearValidate(); + }, + handleOk () { + const that = this; + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true; + let httpurl = ''; + let method = ''; + if(!this.model.id){ + httpurl+=this.url.add; + method = 'post'; + }else{ + httpurl+=this.url.edit; + method = 'put'; + } + that.model.equipmentId = that.equipmentId; + httpAction(httpurl, that.model, method).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.$emit('ok'); + that.close(); + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + }) + }else{ + return false; + } + }) + }, + handleCancel () { + this.close() + }, + + + } + } +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file -- Gitblit v1.9.3