From dedbadd96ab7e1533572b25511fd201678c64dad Mon Sep 17 00:00:00 2001 From: ludc Date: 星期四, 17 十月 2024 09:56:18 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS-WEB/src/components/file/main.vue | 414 +++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 301 insertions(+), 113 deletions(-) diff --git a/Source/UBCS-WEB/src/components/file/main.vue b/Source/UBCS-WEB/src/components/file/main.vue index 04d3498..fbfd11e 100644 --- a/Source/UBCS-WEB/src/components/file/main.vue +++ b/Source/UBCS-WEB/src/components/file/main.vue @@ -1,72 +1,82 @@ <template> <basic-container> - <avue-crud :option="option" - :table-loading="loading" + <avue-crud ref="crud" + v-model="form" + :before-open="beforeOpen" :data="data" + :option="option" :page.sync="page" :permission="permissionList" - :before-open="beforeOpen" - v-model="form" - ref="crud" + :table-loading="loading" @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange" + @row-click="selectedRowClick" @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"> <template slot="menuLeft"> - <el-button type="primary" - size="small" + <el-button v-if="hasUpload" icon="el-icon-upload2" plain - icon="el-icon-upload2" + size="small" + type="primary" @click="handleUpload">涓� 浼� </el-button> - <el-button type="primary" - size="small" + <el-button v-if="hasEdit" icon="el-icon-edit" plain - icon="el-icon-edit" + size="small" + type="primary" @click="handleEdit">淇� 鏀� </el-button> - <el-button type="danger" - size="small" - icon="el-icon-delete" + <el-button v-if="hasDownload" icon="el-icon-download" plain + size="small" + type="primary" + @click="handleDownload">涓� 杞� + </el-button> + <el-button v-if="hasDel" icon="el-icon-delete" + plain + size="small" + type="danger" @click="handleDelete">鍒� 闄� </el-button> </template> - <template slot-scope="scope" slot="menu"> - <el-button type="text" - icon="el-icon-download" + <template slot="menu" slot-scope="scope"> + <el-button v-if="hasDownload" icon="el-icon-download" size="small" + type="text" @click="handleDownload(scope.row)">涓嬭浇 </el-button> </template> </avue-crud> - <el-dialog title="涓婁紶闄勪欢鍒楄〃" + <el-dialog :visible.sync="attachBox" append-to-body - :visible.sync="attachBox" + title="闄勪欢绠$悊" width="555px"> - <avue-form ref="form" :option="attachOption" v-model="attachForm" :upload-before="uploadBefore" :upload-after="uploadAfter" :upload-error="uploadError"> + <avue-form ref="form" v-model="attachForm" :option="attachOption" :upload-after="uploadAfter" + :upload-before="uploadBefore" :upload-error="uploadError"> </avue-form> </el-dialog> </basic-container> </template> <script> -import {getList, getFile,upload,update, remove,download} from "@/api/resource/file"; +import {getList, getFile, upload, update, remove, download} from "@/api/resource/file"; import {mapGetters} from "vuex"; -import {dateFormat} from "@/util/date"; +import {validatenull} from "@/util/validate"; +import func from "@/util/func"; export default { - props: ["options","visible"], + props: ["options", "visible", "ownbizOid"], data() { return { form: {}, query: {}, - params:{}, + params: {}, loading: false, + hasPage: this.options.hasPage || false, page: { pageSize: 10, currentPage: 1, @@ -74,15 +84,21 @@ }, attachBox: false, selectionList: [], + //榛樿涓簄ull鍏ㄩ儴鏄痶rue + hasUpload: validatenull(this.options.hasUpload) ? true : this.options.hasUpload, + hasEdit: validatenull(this.options.hasEdit) ? true : this.options.hasEdit, + hasDel: validatenull(this.options.hasDel) ? true : this.options.hasDel, + hasDownload: validatenull(this.options.hasDownload) ? true : this.options.hasDownload, option: { - height: 'auto', + height: (this.options.tableHeight ? this.options.tableHeight : '300'), calcHeight: 30, tip: false, - searchShow: true, + searchShow: false, searchMenuSpan: 6, border: true, index: true, viewBtn: true, + refreshBtn: false, selection: true, dialogClickModal: false, column: [ @@ -102,34 +118,26 @@ { label: "鏂囦欢澶у皬", prop: "fileSize", - formatter:function(d){ - if(!d.fileSize || d.fileSize == null || d.fileSize*1 == 0 || isNaN(d.fileSize*1) ){ + formatter: function (d) { + if (!d.fileSize || d.fileSize == null || d.fileSize * 1 == 0 || isNaN(d.fileSize * 1)) { return "鏈煡澶у皬"; - }else{ + } else { //鍘熷澶у皬鏄疊 - var filesize = d.fileSize*1; - if(filesize>1024*1024*1024*1024){ - return parseInt(filesize/(1024*1024*1024*1024)) + "TB"; - }else if(filesize> 1024*1024*1024){ - return parseInt(filesize/(1024*1024*1024)) + "GB"; - }else if(filesize> 1024*1024){ - return parseInt(filesize/(1024*1024)) + "MB"; - }else if(filesize> 1024){ - return parseInt(filesize/1024) + "KB"; - }else { + var filesize = d.fileSize * 1; + if (filesize > 1024 * 1024 * 1024 * 1024) { + return parseInt(filesize / (1024 * 1024 * 1024 * 1024)) + "TB"; + } else if (filesize > 1024 * 1024 * 1024) { + return parseInt(filesize / (1024 * 1024 * 1024)) + "GB"; + } else if (filesize > 1024 * 1024) { + return parseInt(filesize / (1024 * 1024)) + "MB"; + } else if (filesize > 1024) { + return parseInt(filesize / 1024) + "KB"; + } else { return filesize + "B"; } } } }, - /*{ - label: "瀵嗙骇", - prop: "secretGradeText" - }, - { - label: "鏂囨。绫诲埆", - prop: "fileDocClassifyName" - },*/ { label: "鍒涘缓鑰�", prop: "creator" @@ -140,42 +148,58 @@ }, ] }, - data: [{ - btmname: "fileobject", - createTime: "2023-06-14 16:08:50.002", - creator: "1", - fileDocClassify: "undefined", - fileDocClassifyName: null, - fileExtension: "png", - filePath: "VolumnFactoryService:/f87a4c92-ce6e-458b-aad0-0c76bd5eeb35\\54120082-76aa-4092-abbf-b13cb40606c5", - fileSize: 858, - id: "assignRole", - name: "assignRole", - nameOid: "9FF4C05D-4EFA-F00B-0080-5ABB50257D4E", - oid: "54120082-76aa-4092-abbf-b13cb40606c5", - ownBtmname: "wupin", - ownbizOid: "6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9", - owner: "1", - secretGrade: null, - secretGradeText: null - }], + columnType: { + text: "input", + combox: "select", + truefalse: "switch", + number: "number", + textarea: "textarea", + datetime: "datetime", + date: "date", + refer: "refer", + }, + data: [], attachForm: {}, attachOption: { - submitBtn: true, - emptyBtn: true, - column: [ - { - label: '闄勪欢涓婁紶', - prop: 'attachFile', - type: 'upload', - dragFile: true, - loadText: '鏂囦欢涓婁紶涓紝璇风◢绛�', - span: 24, - propsHttp: { - res: 'data' - }, - action: "/api/ubcs-resource/fileController/uploadFile" - } + submitBtn: false, + emptyBtn: false, + column: [{ + prop: 'fileDocClassify', + label: '鏂囦欢绫诲瀷', + props: { + label: 'value', + value: 'key' + }, + change: () => { + (!!this.options.fileDocClassifyCombox) && this.changeFun('fileDocClassify'); + }, + blur: () => { + (!this.options.fileDocClassifyCombox) && this.changeFun('fileDocClassify'); + }, + value: this.options.fileDocClassify || "ADMIN_SHARE", + type: (!this.options.fileDocClassifyCombox) ? 'input' : 'select', + dicData: (this.options.fileDocClassifyCombox || []),//[{key: 'text', value: '鏂囨湰妗�'}] + display: (!!this.options.fileDocClassifyCombox) + }, { + label: '闄勪欢涓婁紶', + prop: 'attachFile', + type: 'upload', + dragFile: true, + showFileList: false, + accept: this.options.uploadAccept || 'file', + loadText: '鏂囦欢涓婁紶涓紝璇风◢绛�', + span: 24, + propsHttp: { + res: 'data' + }, + data: { + ownbizOid: this.options.ownbizOid || "share", + ownBtmName: this.options.ownbizBtm || "share", + fileDocClassify: this.options.fileDocClassify || "ADMIN_SHARE", + fileDocClassifyName: this.options.fileDocClassifyName || "绠$悊鍛樺叡浜枃浠�" + }, + action: "/api/ubcs-resource/fileController/uploadFile" + } ] } }; @@ -185,53 +209,190 @@ permissionList() { return { addBtn: false, - editBtn: false, viewBtn: false, - delBtn: this.vaildData(this.permission.attach_delete, false) + delBtn: this.vaildData(this.permission.attach_delete, false), + editBtn: false }; }, - ids() { - let ids = []; + oids() { + let oids = []; this.selectionList.forEach(ele => { - ids.push(ele.id); + oids.push(ele.oid); }); - return ids.join(","); + return oids.join(","); } }, + created() { + this.setFormItem(); + this.setParams() + }, + mounted() { + + }, + watch: { + ownbizOid(val) { + this.setParams() + this.refreshChange() + }, + }, methods: { - setParams(){ - var params={ - ownbizOid:options.ownbizOid || '6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9', - ownbizBtm:options.ownbizBtm || 'wupin', - fileDocClassify:options.fileDocClassify || '!=processAuditSuggest' + setFormItem() { + /*this.options.formItems=[{ + field: 'fileDocClassify11', + title: '鏂囦欢绫诲瀷', + type: 'combox', + data: [{key: 'text', value: '鏂囨湰妗�'},{key: 'number', value: '鏁板瓧妗�'}] + }]*/ + if (this.options && this.options.formItems) { + this.options.formItems.forEach(item => { + // 璁剧疆琛ㄥ崟鏍¢獙鐨勮鍒欙紝鏂囨湰 + let message = "璇烽�夋嫨"; + let trigger = "change"; + if (item.type === "text") { + message = "璇疯緭鍏�"; + trigger = "blur"; + } + this.attachOption.column.push({ + ...item, + label: item.title, + prop: item.field, + display: !item.hidden, + value: item.defaultValue, + disabled: item.readOnly, + type: this.columnType[item.type], + dicData: this.getDataList(item.type, item.data), + change: () => { + if (item.type !== "text" && item.type !== "number" && item.type !== "textarea") { + this.changeFun(item.field); + } + }, + blur: () => { + if (item.type == "text" || item.type == "number" || item.type == "textarea") { + this.changeFun(item.field); + } + }, + rules: [ + { + required: item.required, + message: `璇�${message}${item.title}`, + trigger, + }, + { + // 濡傛灉娌℃湁姝e垯鍒欏尮閰嶄换浣曞瓧绗� + pattern: item.verify ? item.verify : /[\s\S.]*/g, + message: item.tooltips, + trigger, + }, + ], + props: { + label: 'value', + value: 'key' + } + }) + }) } - this.params=params; + }, + changeFun(prop) { + this.attachOption.column[1].data[prop] = this.attachForm[prop] + }, + getDataList(type, dicData) { + if (type === "truefalse") { + return [ + { + key: false, + value: "鍚�", + }, + { + key: true, + value: "鏄�", + }, + ]; + } else if (type === "combox") { + return dicData; + } + return []; + }, + setParams() { + var queryMap = { + currentButtonKey: 'VIEW', + ownbizOid: this.options.ownbizOid || "share", + ownBtmName: this.options.ownbizBtm || "share", + fileDocClassify: this.options.fileDocClassify || "ADMIN_SHARE", + fileDocClassifyName: this.options.fileDocClassifyName || "绠$悊鍛樺叡浜枃浠�" + }; + if (this.options.where) { + Object.assign(queryMap, this.options.where); + } + this.params = queryMap; + + if (!this.options.pageObject) { + this.options.pageObject = { + limit: 10, + page: 1 + }; + } + this.page.pageSize = this.options.pageObject.limit; + this.page.currentPage = this.options.pageObject.page; + + this.attachOption.column[1].data.ownbizOid = this.options.ownbizOid || "share"; + this.attachOption.column[1].data.ownBtmName = this.options.ownbizBtm || "share"; + this.attachOption.column[1].data.fileDocClassify = this.options.fileDocClassify || "ADMIN_SHARE"; + this.attachOption.column[1].data.fileDocClassifyName = this.options.fileDocClassifyName || "绠$悊鍛樺叡浜枃浠�" + }, handleUpload() { + this.attachOption.column[1].data.fileOid = ''; + delete this.attachOption.column[1].data.oid; + delete this.attachOption.column[1].data.updateFileFlag; this.attachBox = true; }, handleEdit() { + if (this.selectionList.length == 0) { + this.$message.warning('璇烽�夋嫨闇�瑕佷慨鏀圭殑鏂囦欢') + return false; + } else if (this.selectionList.length > 1) { + this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹�') + return false; + } + this.attachOption.column[1].data.fileOid = this.oids; + this.attachOption.column[1].data.oid = this.oids; + this.attachOption.column[1].data.updateFileFlag = true this.attachBox = true; }, - uploadBefore(file, done, loading,column) { - console.log(file,column) - //濡傛灉浣犳兂淇敼file鏂囦欢,鐢变簬涓婁紶鐨刦ile鏄彧璇绘枃浠讹紝蹇呴』澶嶅埗鏂扮殑file鎵嶅彲浠ヤ慨鏀瑰悕瀛楋紝瀹屽悗璧嬪�煎埌done鍑芥暟閲�,濡傛灉涓嶄慨鏀圭殑璇濈洿鎺ュ啓done()鍗冲彲 - var newFile = new File([file], '1234', { type: file.type }); - done(newFile) - this.$message.success('涓婁紶鍓嶇殑鏂规硶') + uploadBefore(file, done, loading, column) { + done(); }, uploadAfter(res, done, loading, column) { - window.console.log(column); this.attachBox = false; + this.$message.success('鏂囦欢涓婁紶鎴愬姛') this.refreshChange(); done(); }, uploadError(error, column) { - this.$message.success('涓婁紶澶辫触鍥炶皟') - console.log(error, column) + this.$message.error(error || '涓婁紶鏂囦欢鍑虹幇浜嗗紓甯�') }, handleDownload(row) { - window.open(`${row.link}`); + //window.open(`${row.link}`); + let data = new FormData(); + if (row && row.oid) { + data.append('fileOids', row.oid) + this.downloadFile(data); + } else { + if (this.selectionList.length === 0) { + this.$message.warning("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�"); + return; + } + data.append('fileOids', this.oids) + this.downloadFile(data); + } + }, + downloadFile(data) { + download(data).then(res => { + console.log(res); + if (res) { + func.downloadFileByBlobHandler(res); + } + }); }, rowDel(row) { this.$confirm("纭畾灏嗛�夋嫨鏂囦欢鍒犻櫎?", { @@ -240,7 +401,7 @@ type: "warning" }) .then(() => { - return remove(row.id); + return remove([row.oid]); }) .then(() => { this.onLoad(this.page); @@ -261,7 +422,7 @@ type: "warning" }) .then(() => { - return remove(this.ids); + return remove(this.oids.split(',')); }) .then(() => { this.onLoad(this.page); @@ -287,11 +448,18 @@ searchChange(params, done) { this.query = params; this.page.currentPage = 1; - this.onLoad(this.page, params); + this.onLoad(this.page); done(); }, selectionChange(list) { this.selectionList = list; + this.$refs.crud.setCurrentRow(this.selectionList[list.length - 1]); + }, + selectedRowClick(row) { + this.selectionList = row; + this.$refs.crud.toggleSelection(); + this.$refs.crud.setCurrentRow(row); + this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛� }, selectionClear() { this.selectionList = []; @@ -304,18 +472,38 @@ this.page.pageSize = pageSize; }, refreshChange() { - this.onLoad(this.page, this.query); + this.onLoad(this.page); }, - onLoad(page, params) { - //this.loading = true; - params=this.params || {} - /*getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { + onLoad(page, params = {}) { + this.loading = true; + var query = {} + if (this.query) { + for (var key in this.query) { + query['conditionMap["' + key + '"]'] = this.query[key]; + } + } + getList(page.currentPage, page.pageSize, Object.assign(params, this.params, query, this.query)).then(res => { const data = res.data.data; this.page.total = data.total; - this.data = data.records; + if (this.options.fileDocClassifyCombox) { + this.data = data.records.map(item => { + if (validatenull(item.fileDocClassifyName) && !validatenull(item.fileDocClassify)) { + item.fileDocClassifyName = this.options.fileDocClassifyCombox[item.fileDocClassify] || ''; + } + return { + ...item + } + }) + } else { + this.data = data.records; + } + this.loading = false; this.selectionClear(); - });*/ + }).catch(error => { + this.$message.error(error); + this.loading = false; + }); } } }; -- Gitblit v1.9.3