From 1fc6fb99de36cc345e23f8ca5a6cbb9bc1828c07 Mon Sep 17 00:00:00 2001 From: WXL <1785969728@qq.com> Date: 星期一, 04 九月 2023 13:50:23 +0800 Subject: [PATCH] 11 --- src/views/project/fund/applyDetail/index.vue | 191 +++++++++++++++++++++------ src/main.js | 2 src/views/project/travelexpenseapply/travelexpensedetail/index.vue | 129 ++++++++++++++---- package.json | 1 src/utils/drag.js | 87 ++++++++++++ 5 files changed, 338 insertions(+), 72 deletions(-) diff --git a/package.json b/package.json index d9095d4..3ac9e75 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "js-beautify": "1.13.0", "js-cookie": "2.2.1", "jsencrypt": "3.0.0-rc.1", + "lodash": "^4.17.21", "moment": "^2.29.3", "nprogress": "0.2.0", "prettier": "^1.8.1", diff --git a/src/main.js b/src/main.js index 91d7ef6..6900a03 100644 --- a/src/main.js +++ b/src/main.js @@ -45,6 +45,8 @@ //鐪佸競鍖洪�夋嫨缁勪欢 // import li_area_select from '@components/Address' import moment from "moment" +import '@/utils/drag.js'; + Vue.prototype.$moment = moment; // 鍏ㄥ眬鏂规硶鎸傝浇 diff --git a/src/utils/drag.js b/src/utils/drag.js new file mode 100644 index 0000000..d9f10ac --- /dev/null +++ b/src/utils/drag.js @@ -0,0 +1,87 @@ +import Vue from 'vue'; + +/* + +* 浣跨敤鏂规硶锛� + +* 灏嗕互涓嬩唬鐮佸鍒跺埌涓�涓猨s鏂囦欢涓紝鐒跺悗鍦ㄥ叆鍙f枃浠秏ain.js涓璱mport寮曞叆鍗冲彲锛� + +* 缁檈lementUI鐨刣ialog涓婂姞涓� v-dialogDrags + +* 缁檇ialog璁剧疆 :close-on-click-modal="false" , 绂佹鐐瑰嚮閬僵灞傚叧闂脊鍑哄眰 + +*/ + +// 鍏煎ie,璋锋瓕 +// v-dialogDrags: 寮圭獥鎷栨嫿灞炴�� 锛堥噸鐐癸紒锛侊紒 缁欐ā鎬佹娣诲姞杩欎釜灞炴�фā鎬佹灏辫兘鎷栨嫿浜嗭級 +Vue.directive('dialogDrags', { // 灞炴�у悕绉癲ialogDrags锛屽墠闈㈠姞v- 浣跨敤 + bind(el, binding, vnode, oldVnode) { + const dialogHeaderEl = el.querySelector('.el-dialog__header'); + const dragDom = el.querySelector('.el-dialog'); + dialogHeaderEl.style.cssText += ';cursor:move;'; + + // 鑾峰彇鍘熸湁灞炴�� ie dom鍏冪礌.currentStyle 鐏嫄璋锋瓕 window.getComputedStyle(dom鍏冪礌, null); + const sty = (function () { + if (window.document.currentStyle) { + return (dom, attr) => dom.currentStyle[attr]; + } else { + return (dom, attr) => getComputedStyle(dom, false)[attr]; + } + })(); + + dialogHeaderEl.onmousedown = (e) => { + // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂� + const disX = e.clientX - dialogHeaderEl.offsetLeft; + const disY = e.clientY - dialogHeaderEl.offsetTop; + + const screenWidth = document.body.clientWidth; // body褰撳墠瀹藉害 + const screenHeight = document.documentElement.clientHeight; // 鍙鍖哄煙楂樺害(搴斾负body楂樺害锛屽彲鏌愪簺鐜涓嬫棤娉曡幏鍙�) + + const dragDomWidth = dragDom.offsetWidth; // 瀵硅瘽妗嗗搴� + const dragDomheight = dragDom.offsetHeight; // 瀵硅瘽妗嗛珮搴� + + // 鑾峰彇鍒扮殑鍊煎甫px 姝e垯鍖归厤鏇挎崲 + let styL = sty(dragDom, 'left'); + let styT = sty(dragDom, 'top'); + + // 娉ㄦ剰鍦╥e涓� 绗竴娆¤幏鍙栧埌鐨勫�间负缁勪欢鑷甫50% 绉诲姩涔嬪悗璧嬪�间负px + if (styL.includes('%')) { + styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100); + styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100); + } else { + styL = +styL.replace(/\px/g, ''); + styT = +styT.replace(/\px/g, ''); + }; + + document.onmousemove = function (e) { + // 閫氳繃浜嬩欢濮旀墭锛岃绠楃Щ鍔ㄧ殑璺濈 + let left = e.clientX - disX + styL; + let top = e.clientY - disY + styT; + + // // 杈圭晫澶勭悊 + // if (left < 0) { + // left = 0; + // } + + // if (left > screenWidth - dragDomWidth) { + // left = screenWidth - dragDomWidth; + // } + + // if (top < 0) { + // top = 0; + // } + // if (top > screenHeight - dragDomheight) { + // top = screenHeight - dragDomheight; + // } + + // 绉诲姩褰撳墠鍏冪礌 + dragDom.style.cssText += `;left:${left}px;top:${top}px;`; + }; + + document.onmouseup = function (e) { + document.onmousemove = null; + document.onmouseup = null; + }; + }; + } +}); diff --git a/src/views/project/fund/applyDetail/index.vue b/src/views/project/fund/applyDetail/index.vue index 3f8f8a1..e6ef7ec 100644 --- a/src/views/project/fund/applyDetail/index.vue +++ b/src/views/project/fund/applyDetail/index.vue @@ -158,6 +158,7 @@ <el-table :data="rbDetails" v-loading="loading" + max-height="400" border highlight-current-row > @@ -183,7 +184,7 @@ > <template slot-scope="scope"> <el-select - v-model="scope.row.applytype" + v-model="scope.row.applytypename" placeholder="鏈嶅姟绫诲瀷" @change="verifyFeeItemType(scope.row)" > @@ -204,7 +205,7 @@ > <template slot-scope="scope"> <el-select - v-model="scope.row.itemid" + v-model="scope.row.itemname" placeholder="鏈嶅姟椤圭洰" filterable @change="verifyFeeItem(scope.row)" @@ -620,8 +621,8 @@ @click="submitForm" v-if=" operationType == 'add' || - operationType == 'update' || - ismanager == true + operationType == 'update' || + ismanager == true " >鎻愪氦淇濆瓨</el-button > @@ -841,7 +842,14 @@ > </span> </el-dialog> - <el-dialog :title="pdftitle" :visible.sync="pdfVisible" width="50%"> + <el-dialog + v-dialogDrags + :modal="false" + :close-on-click-modal="false" + :title="pdftitle" + :visible.sync="pdfVisible" + width="60%" + > <div class="pdfimg"> <div class="box-pdf"> <div> @@ -850,7 +858,9 @@ class="upload-demo" :action="uploadFileUrl" :file-list="fileListto" + :show-file-list="false" multiple + drag :limit="20" :headers="headers" :on-success=" @@ -864,13 +874,61 @@ :on-remove="remove" accept="image/*,.pdf" > - <el-button - :disabled="operationType == 'detail'" - size="small" - type="primary" - >涓婁紶绁ㄦ嵁</el-button - > + <i class="el-icon-upload"></i> + <div class="el-upload__text"> + 灏嗙エ鎹嫋鍒版澶勶紝鎴� + <em + ><el-button + :disabled="operationType == 'detail'" + size="small" + type="primary" + >鐐瑰嚮涓婁紶</el-button + ></em + > + </div> + <!-- <div class="el-upload__tip" slot="tip"> + 鍙兘涓婁紶jpg/png鏂囦欢锛屼笖涓嶈秴杩�500kb + </div> --> </el-upload> + <el-table + :data="fileListto" + @row-click="downFile" + style="width: 100%" + > + <el-table-column + prop="name" + :show-overflow-tooltip="true" + label="鍚嶇О" + > + <template slot-scope="scope"> + <i style="color:#409EFF" class=" el-icon-s-order" />{{ + scope.row.name + }} + </template> + </el-table-column> + + <el-table-column + prop="name" + width="180" + :show-overflow-tooltip="true" + label="鍔熻兘" + > + <template slot-scope="scope"> + <el-button + type="primary" + size="mini" + @click.native.prevent="deletedowfile(scope.row)" + >鍒犻櫎</el-button + > + <el-button + type="primary" + size="mini" + @click.native.prevent="moveupdowfile(scope.row)" + >涓婄Щ</el-button + > + </template> + </el-table-column> + </el-table> </div> <!-- <div class="pdftit" @@ -919,7 +977,7 @@ listDonatebaseinfo, getDonatebaseinfo } from "@/api/project/donatebaseinfo"; - +import debounce from "lodash/debounce"; import { onelistFund, listFund, @@ -1077,6 +1135,8 @@ rowfeeblocks: [], fundflowList: [], + // 闅忔満鏁� + randomnumber: "", //涓撳/鍗曚綅閫夋嫨锛歟xpert/unit selectionType: "", @@ -1608,9 +1668,24 @@ }); }); }, - + generateRandomString(length) { + const characters = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + let randomString = ""; + for (let i = 0; i < length; i++) { + randomString += characters.charAt( + Math.floor(Math.random() * characters.length) + ); + } + return randomString; + }, /** 鎻愪氦鎸夐挳 */ - submitForm() { + submitForm: debounce(function() { + if (!this.randomnumber) { + this.randomnumber = this.generateRandomString(9); + this.form.randomnumber = this.randomnumber; + } + console.log(this.randomnumber); this.$refs["form"].validate(valid => { if (valid) { this.formData = this.form; @@ -1846,7 +1921,7 @@ this.$router.go(-1); } }); - }, + }, 500), //瀹℃壒鎻愪氦 checksubmit() { @@ -2229,6 +2304,10 @@ }, // 鎺ュ彈鎻愰啋绔嬪埢淇濆瓨 Savenow() { + if (!this.randomnumber) { + this.randomnumber = this.generateRandomString(9); + this.form.randomnumber = this.randomnumber; + } this.Savereminder = false; this.Reminderquantity = 0; this.totalquantity = 0; @@ -2513,10 +2592,10 @@ rowfeeblocks: [], annexfiles: null }; - if (this.Reminderquantity >= 5) { - this.Savereminder = true; - return; - } + // if (this.Reminderquantity >= 5) { + // this.Savereminder = true; + // return; + // } if (rowIndex == undefined || rowIndex == null || rowIndex < 0) { this.rbDetails.push(rowData); } else { @@ -2673,14 +2752,14 @@ handleUploadError() {}, /** 涓嬭浇鏂囦欢鎸夐挳鎿嶄綔 */ - downFile(item) { - const url = process.env.VUE_APP_BASE_API + item.url; - var a = document.createElement("a"); - var event = new MouseEvent("click"); - a.download = item.name; - a.href = url; - a.dispatchEvent(event); - }, + // downFile(item) { + // const url = process.env.VUE_APP_BASE_API + item.url; + // var a = document.createElement("a"); + // var event = new MouseEvent("click"); + // a.download = item.name; + // a.href = url; + // a.dispatchEvent(event); + // }, // remove(file) { // this.fileList.splice(this.fileList.indexOf(file), 1) @@ -2714,8 +2793,10 @@ this.form.filename = file.raw.name; this.$modal.msgSuccess(response.msg); - // this.fileListto.push({ name: file.name, url: response.fileName }); - this.fileListto.push({ name: file.name, url: response.url }); + this.fileListto.push({ name: file.name, url: response.fileName }); + // this.fileListto.push({ name: file.name, url: response.url }); + // this.pdfimgsrcList.push(response.url); + this.rbDetails[this.atpresent].annexfilesList = this.fileListto; } else { console.log(response.msg); @@ -2728,10 +2809,14 @@ this.pdfVisible = true; if (this.rbDetails[index].annexfilesList) { this.fileListto = this.rbDetails[index].annexfilesList; - // this.pdfimg = this.Networkheader + "/prod-api" + this.fileListto[0].url; - this.pdfimg = this.fileListto[0].url; + this.pdfimg = this.Networkheader + "/prod-api" + this.fileListto[0].url; + // this.pdfimg = this.fileListto[0].url; this.pdfimgsrcList = []; - this.pdfimgsrcList.push(this.pdfimg); + this.fileListto.forEach(item => { + this.pdfimgsrcList.push(this.Networkheader + "/prod-api" + item.url); + }); + console.log(this.pdfimgsrcList); + console.log(this.pdfimg); } else { this.fileListto = []; @@ -2739,23 +2824,29 @@ this.pdftitle = ""; } }, + fnrowclick(row) { + console.log(row); + }, // 鐐瑰嚮宸蹭笂浼犳枃浠� - downFile(item) { - this.pdftitle = item.name; - let name = item.name.split("."); + downFile(row) { + console.log(row); + + this.pdftitle = row.name; + let name = row.name.split("."); if (name[1] == "pdf") { this.$modal.msgWarning("褰撳墠鏂囦欢鏆備笉鏀寔棰勮"); this.previewpdf = false; this.hintitle = "褰撳墠鏂囦欢鏆備笉鏀寔棰勮"; } else if (name[1] == "jpg" || "png") { this.previewpdf = true; - if (item.url) { - this.pdfimg = this.Networkheader + "/prod-api" + item.url; - this.pdfimgsrcList = []; - this.pdfimgsrcList.push(this.pdfimg); + if (row.url) { + this.pdfimg = this.Networkheader + "/prod-api" + row.url; + // this.pdfimg = row.url; + // this.pdfimgsrcList = []; + // this.pdfimgsrcList.push(this.pdfimg); console.log(this.pdfimg); } else { - this.pdfimg = this.Networkheader + "/prod-api" + item.response.url; + this.pdfimg = this.Networkheader + "/prod-api" + row.url; } } else { this.hintitle = "褰撳墠鏂囦欢鏆備笉鏀寔棰勮"; @@ -2763,7 +2854,23 @@ this.previewpdf = false; } }, - + getIndexInArray(arr, obj) { + return arr.indexOf(obj); + }, + // 鐐瑰嚮鍒犻櫎 + deletedowfile(row) { + console.log(this.fileListto); + console.log(row); + const index = this.getIndexInArray(this.fileListto, row); + this.fileList = this.fileListto.splice(index, 1); + console.log(index); + }, + // 鐐瑰嚮涓婄Щ + moveupdowfile(row) { + const index = this.getIndexInArray(this.fileListto, row); + const item = this.fileListto.splice(index, 1)[0]; // 绉婚櫎鎸囧畾绱㈠紩澶勭殑鍏冪礌锛屽苟淇濆瓨鍒癷tem鍙橀噺涓� + this.fileListto.splice(index - 1, 0, item); // 灏唅tem鎻掑叆鍒扮储寮曚綅缃殑鍓嶄竴浣� + }, //涓撳/鍖荤枟鏈烘瀯/璐圭敤鎶ラ攢鏈烘瀯閫夋嫨 ShowDetailDialog(spoce, showType) { this.selectionType = showType; @@ -2981,7 +3088,7 @@ height: 600px; .box-pdf { - width: 200px; + width: 400px; padding-top: 20px; margin-right: 30px; border: 1px solid #dcdfe6; diff --git a/src/views/project/travelexpenseapply/travelexpensedetail/index.vue b/src/views/project/travelexpenseapply/travelexpensedetail/index.vue index 9670383..95d53df 100644 --- a/src/views/project/travelexpenseapply/travelexpensedetail/index.vue +++ b/src/views/project/travelexpenseapply/travelexpensedetail/index.vue @@ -216,6 +216,7 @@ :data="rbDetails" ref="table" border + max-height="400" highlight-current-row :summary-method="getSummaries" show-summary @@ -658,6 +659,7 @@ <el-table :data="rbPayees" border + max-height="400" highlight-current-row :summary-method="getSummaries" show-summary @@ -916,7 +918,14 @@ </div> </div> - <el-dialog :title="pdftitle" :visible.sync="pdfVisible" width="50%"> + <el-dialog + v-dialogDrags + :modal="false" + :close-on-click-modal="false" + :title="pdftitle" + :visible.sync="pdfVisible" + width="60%" + > <div class="pdfimg"> <div class="box-pdf"> <div> @@ -925,7 +934,9 @@ class="upload-demo" :action="uploadFileUrl" :file-list="fileListto" + :show-file-list="false" multiple + drag :limit="20" :headers="headers" :on-success=" @@ -939,22 +950,59 @@ :on-remove="remove" accept="image/*,.pdf" > - <el-button - :disabled="operationType == 'detail'" - size="small" - type="primary" - >涓婁紶</el-button - > + <i class="el-icon-upload"></i> + <div class="el-upload__text"> + 灏嗙エ鎹嫋鍒版澶勶紝鎴� + <em + ><el-button + :disabled="operationType == 'detail'" + size="small" + type="primary" + >鐐瑰嚮涓婁紶</el-button + ></em + > + </div> </el-upload> + <el-table + :data="fileListto" + @row-click="downFile" + style="width: 100%" + > + <el-table-column + prop="name" + :show-overflow-tooltip="true" + label="鍚嶇О" + > + <template slot-scope="scope"> + <i style="color:#409EFF" class=" el-icon-s-order" />{{ + scope.row.name + }} + </template> + </el-table-column> + + <el-table-column + prop="name" + width="180" + :show-overflow-tooltip="true" + label="鍔熻兘" + > + <template slot-scope="scope"> + <el-button + type="primary" + size="mini" + @click.native.prevent="deletedowfile(scope.row)" + >鍒犻櫎</el-button + > + <el-button + type="primary" + size="mini" + @click.native.prevent="moveupdowfile(scope.row)" + >涓婄Щ</el-button + > + </template> + </el-table-column> + </el-table> </div> - <!-- <div - class="pdftit" - @click="pdffn(item)" - v-for="item in fileList" - :key="item.name" - > - {{ item.name }} - </div> --> </div> <div v-if="this.previewpdf" class="pdfimgmin"> @@ -1029,6 +1077,7 @@ import { getSubsidy } from "@/api/project/travelcity"; import { listReportname, listUser } from "@/api/project/organization"; import { getToken } from "@/utils/auth"; +import debounce from "lodash/debounce"; export default { components: { Treeselect, @@ -1301,9 +1350,12 @@ this.fileListto = this.rbDetails[index].annexfilesList; console.log(this.fileListto); this.pdfimg = this.Networkheader + "/prod-api" + this.fileListto[0].url; - console.log(this.pdfimg); this.pdfimgsrcList = []; - this.pdfimgsrcList.push(this.pdfimg); + this.fileListto.forEach(item => { + this.pdfimgsrcList.push(this.Networkheader + "/prod-api" + item.url); + }); + console.log(this.pdfimgsrcList); + console.log(this.pdfimg); } else { this.fileListto = []; this.pdfimg = ""; @@ -1324,8 +1376,8 @@ this.previewpdf = true; if (item.url) { this.pdfimg = this.Networkheader + "/prod-api" + item.url; - this.pdfimgsrcList = []; - this.pdfimgsrcList.push(this.pdfimg); + // this.pdfimgsrcList = []; + // this.pdfimgsrcList.push(this.pdfimg); console.log(this.pdfimg); } else { this.pdfimg = this.Networkheader + "/prod-api" + item.response.url; @@ -1335,6 +1387,23 @@ this.$modal.msgWarning("褰撳墠鏂囦欢鏆備笉鏀寔棰勮"); this.previewpdf = false; } + }, + getIndexInArray(arr, obj) { + return arr.indexOf(obj); + }, + // 鐐瑰嚮鍒犻櫎 + deletedowfile(row) { + console.log(this.fileListto); + console.log(row); + const index = this.getIndexInArray(this.fileListto, row); + this.fileList = this.fileListto.splice(index, 1); + console.log(index); + }, + // 鐐瑰嚮涓婄Щ + moveupdowfile(row) { + const index = this.getIndexInArray(this.fileListto, row); + const item = this.fileListto.splice(index, 1)[0]; // 绉婚櫎鎸囧畾绱㈠紩澶勭殑鍏冪礌锛屽苟淇濆瓨鍒癷tem鍙橀噺涓� + this.fileListto.splice(index - 1, 0, item); // 灏唅tem鎻掑叆鍒扮储寮曚綅缃殑鍓嶄竴浣� }, /** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */ @@ -1962,7 +2031,7 @@ }, /** 鎻愪氦淇濆瓨鎸夐挳 */ - submitForm() { + submitForm: debounce(function(data) { this.$refs["form"].validate(valid => { if (valid) { // idisabled=true; @@ -2113,7 +2182,7 @@ } } }); - }, + }, 500), /** 鍒犻櫎鎸夐挳鎿嶄綔 */ handleDelete(row) { @@ -2284,10 +2353,10 @@ personname: null, destination: null }; - if (this.Reminderquantity >= 5) { - this.Savereminder = true; - return; - } + // if (this.Reminderquantity >= 5) { + // this.Savereminder = true; + // return; + // } if (rowIndex == undefined || rowIndex == null || rowIndex < 0) { this.rbDetails.push(rowData); } else { @@ -2313,10 +2382,10 @@ personname: null, amount: null }; - if (this.Reminderquantity >= 5) { - this.Savereminder = true; - return; - } + // if (this.Reminderquantity >= 5) { + // this.Savereminder = true; + // return; + // } if (rowIndex == undefined || rowIndex == null || rowIndex <= 0) { this.rbPayees.push(rowData); } else { @@ -2720,7 +2789,7 @@ height: 600px; .box-pdf { - width: 200px; + width: 400px; padding-top: 20px; margin-right: 30px; border: 1px solid #dcdfe6; -- Gitblit v1.9.3