¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <a-card :bordered="false"> |
| | | <!-- æ¥è¯¢åºå --> |
| | | <div class="table-page-search-wrapper"> |
| | | <a-form layout="inline" @keyup.enter.native="searchQuery"> |
| | | <a-row :gutter="24"> |
| | | <a-col :xl="6" :lg="7" :md="8" :sm="24"> |
| | | <a-form-item label="æä»¶åç§°"> |
| | | <j-input placeholder="请è¾å
¥æä»¶åç§°" v-model="queryParam.fileName"></j-input> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :xl="6" :lg="7" :md="8" :sm="24"> |
| | | <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">éç½®</a-button> |
| | | </span> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form> |
| | | </div> |
| | | <!-- æ¥è¯¢åºå-END --> |
| | | |
| | | <!-- æä½æé®åºå --> |
| | | <div class="table-operator"> |
| | | <a-button @click="handleAdd()" type="primary" icon="import">ä¸ä¼ </a-button> |
| | | |
| | | <a-table |
| | | ref="table" |
| | | size="middle" |
| | | |
| | | :scroll="{x:true}" |
| | | bordered |
| | | rowKey="id" |
| | | :columns="columns" |
| | | :dataSource="dataSource" |
| | | :pagination="ipagination" |
| | | :loading="loading" |
| | | :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" |
| | | @change="handleTableChange"> |
| | | |
| | | <span slot="action" slot-scope="text, record"> |
| | | <a @click="handleDownload(record)">ä¸è½½</a> |
| | | <a-divider type="vertical" /> |
| | | <a-popconfirm title="ç¡®å®å é¤å?" @confirm="() => handleDelete(record.id)"> |
| | | <a>å é¤</a> |
| | | </a-popconfirm> |
| | | </span> |
| | | </a-table> |
| | | </div> |
| | | <file-import-module ref="fileImportModule" @ok="getTreeDataByApi" /> |
| | | </a-card> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | import '@/assets/less/TableExpand.less' |
| | | import { mixinDevice } from '@/utils/mixin' |
| | | import { JeecgListMixin } from '@/mixins/JeecgListMixin' |
| | | import { downFile } from '@/api/manage' |
| | | import FileImportModule from '@views/base/modules/file/FileImportModule' |
| | | |
| | | export default { |
| | | name: 'FileDownAndImport', |
| | | mixins:[JeecgListMixin, mixinDevice], |
| | | components: { |
| | | FileImportModule |
| | | }, |
| | | data () { |
| | | return { |
| | | description: 'æä»¶å表', |
| | | // 表头 |
| | | columns: [ |
| | | { |
| | | title: '#', |
| | | dataIndex: '', |
| | | key:'rowIndex', |
| | | width:60, |
| | | align:"center", |
| | | customRender:function (t,r,index) { |
| | | return parseInt(index)+1; |
| | | } |
| | | }, |
| | | { |
| | | title:'æä»¶åç§°', |
| | | align:"center", |
| | | dataIndex: 'fileName' |
| | | }, |
| | | { |
| | | title:'ææ¡£åç¼', |
| | | align:"center", |
| | | dataIndex: 'fileSuffix' |
| | | }, |
| | | { |
| | | title:'ä¸ä¼ 人', |
| | | align:"center", |
| | | dataIndex: 'createBy_dictText' |
| | | }, |
| | | { |
| | | title:'ä¸ä¼ æ¶é´', |
| | | align:"center", |
| | | dataIndex: 'createTime' |
| | | }, |
| | | { |
| | | title: 'æä½', |
| | | dataIndex: 'action', |
| | | align:"center", |
| | | fixed:"right", |
| | | width:147, |
| | | scopedSlots: { customRender: 'action' } |
| | | } |
| | | ], |
| | | url: { |
| | | list: "/nc/doc/list", |
| | | delete: "/nc/doc/delete", |
| | | download: "/nc/doc/download", |
| | | }, |
| | | dictOptions:{}, |
| | | superFieldList:[], |
| | | } |
| | | }, |
| | | created() { |
| | | this.getSuperFieldList(); |
| | | }, |
| | | computed: { |
| | | importExcelUrl: function(){ |
| | | return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; |
| | | }, |
| | | }, |
| | | methods: { |
| | | initDictConfig(){ |
| | | }, |
| | | handleOk() { |
| | | this.loadData(); |
| | | }, |
| | | getSuperFieldList(){ |
| | | let fieldList=[]; |
| | | fieldList.push({type:'string',value:'fileName',text:'æä»¶åç§°',dictCode:''}) |
| | | this.superFieldList = fieldList |
| | | }, |
| | | // ä¸è½½å½åå³é®éä¸ææ¡£ |
| | | handleDownload(record) { |
| | | const that = this |
| | | downFile(this.url.download, { id: record.id }) |
| | | .then(res => { |
| | | if (!res) { |
| | | this.$message.warning('æä»¶ä¸è½½å¤±è´¥') |
| | | return |
| | | } else { |
| | | let fileName = record.fileName + "." + record.fileSuffix; |
| | | 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) //éæ¾æblob对象 |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | handleAdd() { |
| | | this.$refs.fileImportModule.upload(); |
| | | this.$refs.fileImportModule.title="导å
¥" |
| | | }, |
| | | getTreeDataByApi(){ |
| | | this.loadData(); |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | @import '~@assets/less/common.less'; |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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" :disabled="uploading"> |
| | | <a-icon type="import"/> |
| | | éåæä»¶ |
| | | </a-button> |
| | | </a-upload> |
| | | |
| | | <template slot="footer"> |
| | | <a-button @click="handleModalClose">åæ¶</a-button> |
| | | <a-button |
| | | id="custom-upload-button" |
| | | type="primary" |
| | | :disabled="fileList.length === 0" |
| | | :loading="uploading" |
| | | @click="handleUpload" |
| | | > |
| | | 确认 |
| | | </a-button> |
| | | </template> |
| | | |
| | | </a-modal> |
| | | </template> |
| | | |
| | | <script> |
| | | import JUpload from '@/components/jeecg/JUpload' |
| | | import { getAction, postAction, uploadAction } from '@/api/manage' |
| | | |
| | | export default { |
| | | name: 'FileImportModule', |
| | | components: { |
| | | JUpload, |
| | | }, |
| | | data() { |
| | | return { |
| | | visible: false, |
| | | title: '', |
| | | id:'', |
| | | fileList: [], |
| | | uploadParams: {}, |
| | | uploading: false, |
| | | isUploadMultiple: true, |
| | | currentDeviceDocClassCode: 'SEND', |
| | | currentTitleAfterClass: '', |
| | | |
| | | url: { |
| | | add: "/nc/doc/add", |
| | | } |
| | | } |
| | | }, |
| | | |
| | | created() { |
| | | }, |
| | | methods: { |
| | | |
| | | /** |
| | | * 鿩好æä»¶ç¹å»ç¡®å®å |
| | | * @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 |
| | | }, |
| | | |
| | | /** |
| | | * å 餿件å表项æ¶è§¦å |
| | | * @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 = [] |
| | | }, |
| | | |
| | | upload(){ |
| | | this.isUploadMultiple = true |
| | | this.visible = true |
| | | }, |
| | | handleUpload() { |
| | | const { fileList, $notification, handleModalClose} = this |
| | | this.uploading = true |
| | | let uploadedFileCount = 0 |
| | | let uploadSuccessFileCount = 0 |
| | | if (this.fileList.length === 0) { |
| | | this.$message.info("请ä¸ä¼ æä»¶") |
| | | this.uploading = false; |
| | | } |
| | | fileList.forEach((file, index) => { |
| | | const formData = new FormData() |
| | | formData.append('file', file) |
| | | uploadAction(this.url.add, formData).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) { |
| | | if (uploadSuccessFileCount > 0) { |
| | | this.$emit('ok') |
| | | } |
| | | // 彿件å
¨é¨ä¸ä¼ 宿å |
| | | if (uploadSuccessFileCount === fileList.length) { |
| | | handleModalClose(); |
| | | } |
| | | this.uploading = false |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | /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; |
| | | } |
| | | } |
| | | </style> |