From 34feb4908ec7b7e5b51adf6355603978c67bd3a4 Mon Sep 17 00:00:00 2001 From: cuijian <cuijian@xalxzn.com> Date: 星期四, 05 六月 2025 09:53:14 +0800 Subject: [PATCH] 申请单入库 --- src/views/dnc/common/ImportFileModal.vue | 290 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 206 insertions(+), 84 deletions(-) diff --git a/src/views/dnc/common/ImportFileModal.vue b/src/views/dnc/common/ImportFileModal.vue index 13aee43..475b8b4 100644 --- a/src/views/dnc/common/ImportFileModal.vue +++ b/src/views/dnc/common/ImportFileModal.vue @@ -1,13 +1,13 @@ <template> <a-modal :title="title" :visible="visible" @cancel="handleModalClose" :maskClosable="false"> <a-upload :multiple="true" :file-list="fileList" :remove="handleRemove" :before-upload="beforeUpload"> - <a-button type="primary"> + <a-button type="primary" :disabled="uploading"> <a-icon type="import"/> 閫夊彇鏂囦欢 </a-button> </a-upload> - <div style="margin-top: 16px">宸查�夋嫨{{fileList.length}}涓枃浠�</div> + <div style="margin-top: 16px">宸查�夋嫨{{ fileList.length }}涓枃浠�</div> <template slot="footer"> <a-button @click="handleModalClose">鍙栨秷</a-button> @@ -26,98 +26,220 @@ </template> <script> - export default { - name: 'ImportFileModal', - components: {}, - data() { - return { - visible: false, - title: '', - fileList: [], - uploading: false +import dncApi from '@/api/dnc' + +export default { + name: 'ImportFileModal', + components: {}, + data() { + return { + visible: false, + title: '', + fileList: [], + uploadParams: {}, + uploading: false, + isUploadMultiple: true, + currentDeviceDocClassCode: 'SEND', + currentTitleAfterClass: '' + } + }, + created() { + this.$bus.$on('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod) + this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod) + }, + methods: { + /** + * 鐐瑰嚮瀵煎叆NC绋嬪簭鏃惰Е鍙� + * @param treeNodeInfo 鐐瑰嚮鏍戣妭鐐瑰彸閿彍鍗曞鍏ョ▼搴忔椂浼犲叆鏍戣妭鐐逛俊鎭� + * @param tableRowInfo 鍙抽敭琛ㄦ牸琛屾椂浼犲叆琛屼俊鎭� + * @param modalTitle 寮圭獥鏍囬 + */ + handleNcImport(treeNodeInfo, tableRowInfo, modalTitle) { + this.isUploadMultiple = true + let attributionId // 鏂囨。鎵�灞炲眰绾d + let attributionType // 鏂囨。鎵�灞炲眰绾х被鍨� + let docClassCode // 鏂囨。绫诲瀷 + if (treeNodeInfo) { + attributionId = treeNodeInfo.treeKey + attributionType = treeNodeInfo.type + if(treeNodeInfo.param==='SEND'|| treeNodeInfo.param==='REC') docClassCode = treeNodeInfo.param + else docClassCode = 'NC' + } else { + // 鑻ュ伐搴忓強宸ユ灞傜骇涓嬫湁璁惧绫绘椂鍒欏鍏C鐨勫弬鏁伴渶瑕佽皟鏁� + attributionId = tableRowInfo.param === 'deviceCustomType' ? tableRowInfo.id : tableRowInfo.attributionId + attributionType = tableRowInfo.attributionType + if(tableRowInfo.param==='SEND'|| tableRowInfo.param==='REC') docClassCode = tableRowInfo.param + else docClassCode = 'NC' + } + this.setModalTitle(modalTitle, docClassCode) + this.uploadParams = Object.assign({}, { attributionId, attributionType, docClassCode }) + console.log('NC=======uploadParams=====================', this.uploadParams) + this.visible = true + }, + + /** + * 鐐瑰嚮瀵煎叆鍏朵粬鏂囨。鏃惰Е鍙� + * @param treeNodeInfo 鐐瑰嚮鏍戣妭鐐瑰彸閿彍鍗曞鍏ョ▼搴忔椂浼犲叆鏍戣妭鐐逛俊鎭� + * @param tableRowInfo 鍙抽敭琛ㄦ牸琛屾椂浼犲叆琛屼俊鎭� + * @param modalTitle 寮圭獥鏍囬 + */ + handleOtherImport(treeNodeInfo, tableRowInfo, modalTitle){ + this.isUploadMultiple = true + let attributionId // 鏂囨。鎵�灞炲眰绾d + let attributionType // 鏂囨。鎵�灞炲眰绾х被鍨� + const docClassCode= 'OTHER' // 鏂囨。绫诲瀷 + if (treeNodeInfo) { + attributionId = treeNodeInfo.treeKey + attributionType = treeNodeInfo.type + } else { + attributionId = tableRowInfo.attributionId + attributionType = tableRowInfo.attributionType + } + this.uploadParams = Object.assign({}, { attributionId, attributionType, docClassCode }) + console.log('OTHER======uploadParams=====================', this.uploadParams) + this.visible = true + }, + + /** + * 鐐瑰嚮鏂囨。鐢熷懡鍛ㄦ湡鐨勫叆搴撴椂瑙﹀彂 + * @param _ + * @param tableRowInfo 鍙抽敭琛ㄦ牸琛屾椂浼犲叆琛屼俊鎭� + */ + handlePush(_, tableRowInfo) { + this.isUploadMultiple = false + const { docId, attributionId, attributionType, param } = tableRowInfo + this.uploadParams = Object.assign({}, { + docId, + attributionId, + attributionType, + docClassCode: param + }) + this.visible = true + }, + + /** + * 閫夋嫨濂芥枃浠剁偣鍑荤‘瀹氬悗 + * @param file 鏂囦欢瀵硅薄 + */ + beforeUpload(file) { + if (this.isUploadMultiple) { + if (!this.fileList.find(item => item.name === file.name)) this.fileList = [...this.fileList, file] + } else this.fileList.splice(0, 1, file) + return false + }, + + // 鐐瑰嚮涓婁紶鑷虫湇鍔″櫒鎸夐挳鏃惰Е鍙� + handleUpload() { + const { fileList, $notification, isUploadMultiple, uploadParams, $bus, handleModalClose } = this + this.uploading = true + let uploadedFileCount = 0 + let uploadSuccessFileCount = 0 + let apiMethod,params + + fileList.forEach((file, index) => { + const formData = new FormData() + formData.append('file', file) + file.status = 'uploading' + // 鐩墠鏍规嵁鏄惁涓婁紶澶氫釜鏂囦欢鍒ゆ柇涓や釜鍔熻兘锛岃嫢鍚庣画澧炲姞鍔熻兘鎴栬皟鏁撮渶姹傚垯璋冩暣鍒ゆ柇鏉′欢 + if (isUploadMultiple) { + apiMethod = dncApi.importDocumentFromLocalApi + params = Object.assign({}, { params: uploadParams, formData }) + } else { + apiMethod = dncApi.documentVersionUpdateApi + params = Object.assign({}, { docId: uploadParams.docId, formData }) + } + apiMethod(params) + .then(res => { + if (res.success) { + file.status = 'done' + uploadSuccessFileCount++ + $notification.success({ + message: '娑堟伅', + description: res.message + }) + } else { + file.status = 'error' + $notification.error({ + message: '娑堟伅', + description: res.message + }) + } + }) + .catch(err => { + file.status = 'error' + }) + .finally(() => { + uploadedFileCount++ + fileList.splice(index, 1, file) + // 褰撴枃浠跺叏閮ㄤ笂浼犲畬鎴愬悗 + if (uploadedFileCount === fileList.length) { + // 鑷冲皯鏈変竴涓枃浠朵笂浼犳垚鍔熷悗灏遍渶瑕侀噸鏂板姞杞芥枃妗e垪琛� + if (uploadSuccessFileCount > 0) { + $bus.$emit('reloadDocumentListData', uploadParams) + if (!isUploadMultiple) { + $bus.$emit('reloadMainBottomTableData', 'documentVersion') + handleModalClose() //鏃犳硶杩炵画鍏ュ簱澶氫釜鐗堟湰鍥犳鍏ュ簱鎴愬姛鍚庡嵆鍙��鍑虹獥鍙� + } + } + this.uploading = false + } + }) + }) + }, + + /** + * 鍒犻櫎鏂囦欢鍒楄〃椤规椂瑙﹀彂 + * @param file 鏂囦欢瀵硅薄 + */ + handleRemove(file) { + const index = this.fileList.indexOf(file) + const newFileList = this.fileList.slice() + newFileList.splice(index, 1) + this.fileList = newFileList + }, + + // 鎺у埗鏂囦欢涓婁紶绐楀彛鍏抽棴骞舵竻绌烘枃浠跺垪琛� + handleModalClose() { + this.visible = false + this.fileList = [] + }, + + /** + * 璁剧疆寮圭獥鏍囬 + * @param modalTitle 寮圭獥鏍囬 + * @param docClassCode 鏂囨。绫诲瀷 + */ + setModalTitle(modalTitle, docClassCode) { + switch (docClassCode) { + case 'SEND': + this.title = modalTitle + '锛堝彂閫侊級' + break + case 'REC': + this.title = modalTitle + '锛堟帴鏀讹級' + break } }, - created() { - this.$bus.$on('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod) - this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod) - }, - methods: { - handleImport(modalTitle) { - this.handleModalOpen(modalTitle) - }, - handleRemove(file) { - const index = this.fileList.indexOf(file) - const newFileList = this.fileList.slice() - newFileList.splice(index, 1) - this.fileList = newFileList - }, - - beforeUpload(file) { - this.fileList = [...this.fileList, file] - return false - }, - - handleUpload() { - const { fileList } = this - const formData = new FormData() - fileList.forEach(file => { - formData.append('files[]', file) - }) - this.uploading = true - - // You can use any AJAX library you like - request({ - url: 'https://www.mocky.io/v2/5cc8019d300000980a055e76', - method: 'post', - processData: false, - data: formData, - success: () => { - this.fileList = [] - this.uploading = false - this.$message.success('upload successfully.') - }, - error: () => { - this.uploading = false - this.$message.error('upload failed.') - } - }) - }, - - /** - * 鎺у埗鏂囦欢涓婁紶绐楀彛寮�鍚苟璁剧疆绐楀彛鏍囬 - * @param modalTitle 绐楀彛鏍囬 - */ - handleModalOpen(modalTitle) { + triggerCorrespondingMethod({ methodName, modalTitle, treeNodeInfo, tableRowInfo }) { + if (this[methodName]) { this.title = modalTitle - this.visible = true - }, - - /** - * 鎺у埗鏂囦欢涓婁紶绐楀彛鍏抽棴骞舵竻绌烘枃浠跺垪琛� - */ - handleModalClose() { - this.visible = false - this.fileList = [] - }, - - triggerCorrespondingMethod({ methodName, modalTitle }) { - if (this[methodName]) this[methodName](modalTitle) + this[methodName](treeNodeInfo, tableRowInfo, modalTitle) } } } +} </script> <style scoped lang="less"> - /deep/ .ant-btn-primary#custom-upload-button { - color: #fff; - background-color: #67C23A; - border-color: #67C23A; +/deep/ .ant-btn-primary#custom-upload-button { + color: #fff; + background-color: #67C23A; + border-color: #67C23A; - &[disabled] { - color: rgba(0, 0, 0, 0.25); - background-color: #f5f5f5; - border-color: #d9d9d9; - } + &[disabled] { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; } +} </style> \ No newline at end of file -- Gitblit v1.9.3