From e3f6244998e835635154bbab8754a1000b8ef815 Mon Sep 17 00:00:00 2001 From: 李林 <z1292839451@163.com> Date: 星期二, 02 一月 2024 03:35:10 +0800 Subject: [PATCH] 修订版本1.0 --- src/components/view/registrant-count.vue | 19 +++ src/components/tool/value-table.vue | 82 ++++++++++++++-- src/components/view/product-count.vue | 19 +++ src/main.js | 7 + src/components/view/data-reporting.vue | 147 +++++++++++++++++++++++++---- src/assets/api/controller.js | 7 + 6 files changed, 243 insertions(+), 38 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index b371575..8471639 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -30,6 +30,11 @@ upDataReporting: "/dataReporting/upDataReporting", //淇敼鏁版嵁涓婃姤 selectProductCountDtoPageList: "/dataReporting/selectProductCountDtoPageList", //鑾峰彇椤圭洰姹囨�诲垪琛� selectRegistrantCountDtoPageList: "/dataReporting/selectRegistrantCountDtoPageList", //鑾峰彇鐧昏浜烘眹鎬诲垪琛� + addDataReporting: "/dataReporting/addDataReporting", //娣诲姞鏁版嵁涓婃姤 + delDataReporting: "/dataReporting/delDataReporting", //鍒犻櫎鏁版嵁涓婃姤 + downDataReportingFile: "/dataReporting/downDataReportingFile", //瀵煎嚭鏁版嵁涓婃姤 + downProductCountFile: "/dataReporting/downProductCountFile", //瀵煎嚭椤圭洰鏁版嵁缁熻 + downRegistrantCountFile: "/dataReporting/downRegistrantCountFile", //瀵煎嚭鍛樺伐鏁版嵁缁熻 selectFansSubmitList: "/dataReporting/selectFansSubmitList", //鑾峰彇杩涚矇涓婃姤鍒楄〃 delFansSubmit: "/dataReporting/delFansSubmit", //鍒犻櫎杩涚矇涓婃姤淇℃伅 @@ -42,6 +47,8 @@ addFinanceSubmit: "/dataReporting/addFinanceSubmit", //娣诲姞璐㈠姟涓婃姤淇℃伅 getDataList: "/dataReporting/getDataList", //鑾峰彇棣栭〉鏁版嵁 + + inputCsv: "/dataReporting/inputCsv", //瀵煎叆 } const enums = { diff --git a/src/components/tool/value-table.vue b/src/components/tool/value-table.vue index d32ed04..e787e0b 100644 --- a/src/components/tool/value-table.vue +++ b/src/components/tool/value-table.vue @@ -16,6 +16,20 @@ text-align: right; margin-top: 10px; } + + .down-left { + width: 50%; + display: flex; + align-items: center; + justify-content: center; + } + + .down-right { + width: 50%; + display: flex; + align-items: center; + justify-content: center; + } </style> <template> @@ -74,10 +88,10 @@ </span> </el-dialog> <el-dialog title="鏂板" :visible.sync="addDia" width="500px"> - <div class="body" v-if="addDia"> + <div class="body" v-if="addDia" style="max-height: 600px;overflow-y: auto;"> <el-row v-for="(a, ai) in upHead" :key="ai" style="line-height: 50px;"> - <el-col :span="5" style="text-align: right;">{{a.value}}锛�</el-col> - <el-col :span="17" :offset="1"> + <el-col :span="6" style="text-align: right;">{{a.value}}锛�</el-col> + <el-col :span="16" :offset="1"> <el-input v-model="upData[a.label]" size="small" clearable :placeholder="`璇疯緭鍏�${a.value}`" v-if="showType(a.label, data.selectField) == null"></el-input> <el-select v-model="upData[a.label]" size="small" v-if="showType(a.label, data.selectField) != null" @@ -95,12 +109,13 @@ </el-dialog> <el-dialog title="瀵煎嚭" :visible.sync="downDia" width="400px"> <div style="display: flex;width: 100%;height: 100px;"> - <div class="down-left"></div> - <div class="down-right"></div> + <div class="down-left" @click="downFile(true)"> + <el-button>鏈〉瀵煎嚭</el-button> + </div> + <div class="down-right" @click="downFile(false)"> + <el-button>鍏ㄩ儴瀵煎嚭</el-button> + </div> </div> - <span slot="footer" class="dialog-footer"> - <el-button @click="downDia = false">鍙� 娑�</el-button> - </span> </el-dialog> </div> </template> @@ -120,6 +135,10 @@ default: () => null }, delUrl: { + type: String, + default: () => null + }, + downUrl: { type: String, default: () => null }, @@ -385,8 +404,10 @@ this.upHead = this.HaveJson(this.tableHead) this.upHead = this.upHead.filter(a => a.label != 'createTime' && a.label != 'updateTime') var val = this.data.do.filter(a => a.id == 'update')[0] - if(val == undefined) { - val = {field: []} + if (val == undefined) { + val = { + field: [] + } } val.field.forEach(a => { if (JSON.stringify(this.upData[a]) == undefined) { @@ -430,8 +451,47 @@ this.addLoad = false }) }, - openDownDia(){ + openDownDia() { this.downDia = true + }, + downFile(type) { + if (this.downUrl == null) { + this.$message.error('璇风粰瀵煎嚭璇锋眰鍦板潃') + return + } + var page = this.HaveJson(this.page) + if (!type) { + page.current = 0 + page.size = this.total + } + this.loading = true + this.$axios.post(this.downUrl, { + page: page, + entity: this.data.entity + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + if (res.code === 201) { + this.loading = false + return + } + this.downDia = false + this.loading = false + this.$message.success('瀵煎嚭鎴愬姛') + let eleLink = document.createElement('a') + eleLink.style.display = 'none' + eleLink.download = res.data + eleLink.href = this.javaApi + '/outPath/' + res.data + document.body.appendChild(eleLink) + eleLink.click() + document.body.removeChild(eleLink) + }).catch(e => { + console.log(e); + this.loading = false + this.$message.error('璇峰埛鏂伴〉闈㈠啀灏濊瘯') + }) } } } diff --git a/src/components/view/data-reporting.vue b/src/components/view/data-reporting.vue index e300894..ac2dd1b 100644 --- a/src/components/view/data-reporting.vue +++ b/src/components/view/data-reporting.vue @@ -36,21 +36,34 @@ } </style> <style> - .data_reporting .data_reporting_dia .el-dialog__body{ + .data_reporting .data_reporting_dia .el-dialog__body { padding: 15px 0; + } + + .data_reporting .el-upload { + width: 100%; + } + + .data_reporting .el-upload-dragger { + width: 100%; } </style> <template> - <div class="data_reporting"> + <div class="data_reporting" v-loading="uploading"> <div> <el-row class="title"> <el-col :span="12" style="padding-left: 20px;">鏁版嵁涓婃姤</el-col> <el-col :span="12" style="text-align: right;padding-right: 8px;"> - <el-button size="small" @click="$refs.ValueTable.openDownDia()"> + <el-button size="medium" @click="openUpload()" v-if="inPower"> + <i class="el-icon-upload2" style="color: #3A7BFA;"></i> + <span style="color: #3A7BFA;">瀵煎叆</span> + </el-button> + <el-button size="medium" @click="$refs.ValueTable.openDownDia()" v-if="outPower"> <i class="el-icon-download" style="color: #3A7BFA;"></i> <span style="color: #3A7BFA;">瀵煎嚭</span> </el-button> + <el-button size="medium" type="primary" @click="opeaAdd" v-if="addPower">鏂板</el-button> </el-col> </el-row> </div> @@ -58,13 +71,15 @@ <div class="search_thing"> <div class="search_label">绯荤粺鏃ユ湡锛�</div> <div class="search_input"> - <el-date-picker size="small" v-model="componentData.entity.updateTime" type="date" placeholder="閫夋嫨鏃ユ湡" value-format="yyyy-MM-dd HH:mm:ss" clearable></el-date-picker> + <el-date-picker size="small" v-model="componentData.entity.updateTime" type="date" placeholder="閫夋嫨鏃ユ湡" + value-format="yyyy-MM-dd HH:mm:ss" clearable></el-date-picker> </div> </div> <div class="search_thing"> <div class="search_label">鐧昏浜猴細</div> <div class="search_input"> - <el-input size="small" v-model="componentData.entity.registrant" clearable placeholder="鐧昏浜�" @keyup.enter.native="refreshTable()"></el-input> + <el-input size="small" v-model="componentData.entity.registrant" clearable placeholder="鐧昏浜�" + @keyup.enter.native="refreshTable()"></el-input> </div> </div> <div class="search_thing"> @@ -82,8 +97,8 @@ </div> </div> <div class="table"> - <ValueTable ref="ValueTable" :url="$api.dataReporting.selectDataReportingList" :componentData="componentData" - :key="upIndex" @upRole="upRole" /> + <ValueTable ref="ValueTable" :url="$api.dataReporting.selectDataReportingList" + :delUrl="$api.dataReporting.delDataReporting" :componentData="componentData" :key="upIndex" @upRole="upRole" :downUrl="$api.dataReporting.downDataReportingFile"/> </div> <el-dialog title="涓婃姤淇敼" :visible.sync="upDia" width="700px" class="data_reporting_dia"> <div class="body" v-if="upDia"> @@ -120,7 +135,7 @@ <el-row style="line-height: 50px;"> <el-col :span="4" style="text-align: right;padding-right: 8px;">灞曠幇閲�</el-col> <el-col :span="7"> - <el-input v-model="upData.show" size="small" disabled></el-input> + <el-input v-model="upData.showNum" size="small" disabled></el-input> </el-col> <el-col :span="4" style="text-align: right;padding-right: 8px;">鐐瑰嚮閲�</el-col> <el-col :span="7"> @@ -193,6 +208,20 @@ <el-button @click="upDia = false">鍙� 娑�</el-button> </span> </el-dialog> + <el-dialog title="鏁版嵁瀵煎叆" :visible.sync="uploadDia" width="500px"> + <div style="margin: 0 auto;"> + <el-upload ref="upload" drag :action="javaApi + $api.dataReporting.inputCsv" :headers="token" + :file-list="fileList" name="file" :auto-upload="false" accept=".csv" :limit="1" :on-change="beforeUpload" + :on-success="onSuccess" :on-error="onError"> + <i class="el-icon-upload"></i> + <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> + </el-upload> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="uploadDia = false">鍙� 娑�</el-button> + <el-button type="primary" @click="submitUpload()">涓� 浼�</el-button> + </span> + </el-dialog> </div> </template> @@ -218,11 +247,21 @@ showSelect: true, select: true, do: [{ + id: 'update', font: '缂栬緫', type: 'text', - method: 'upRole' + method: 'upRole', + field: ['createUserName', 'updateUserName', 'registrant', 'department', 'consumption', + 'rebateConsumption', 'discountedConsumption', 'profit', 'remark', 'actualCost' + ] + }, { + id: 'delete', + font: '鍒犻櫎', + type: 'text', + method: 'doDiy' }], - tagField: {} + tagField: {}, + selectField: {} }, entityCopy: {}, upIndex: 0, @@ -231,12 +270,22 @@ upLoad: false, upData: {}, product: [], + uploadDia: false, + fileList: [], + uploading: false, + addPower: true, + token: null, + inPower: true, + outPower: true } }, mounted() { this.entityCopy = this.HaveJson(this.componentData.entity) this.selectProductEnumList() this.getPower() + this.token = { + 'token': sessionStorage.getItem('token') + } }, methods: { refreshTable() { @@ -250,7 +299,7 @@ this.upData = this.HaveJson(row) this.upDia = true }, - saveUpData(){ + saveUpData() { this.upLoad = true delete this.upData.createTime delete this.upData.updateTime @@ -260,9 +309,9 @@ headers: { 'Content-Type': 'application/json' } - }).then(res=>{ + }).then(res => { this.upLoad = false - if(res.code == 201){ + if (res.code == 201) { return } this.$message.success('淇敼鎴愬姛') @@ -270,24 +319,82 @@ this.refreshTable() }) }, - selectProductEnumList(){ - this.$axios.get(this.$api.enums.selectProductEnumList).then(res=>{ + selectProductEnumList() { + this.$axios.get(this.$api.enums.selectProductEnumList).then(res => { this.product = res.data }) }, // 鏉冮檺鍒嗛厤 - getPower(){ + getPower() { let power = JSON.parse(sessionStorage.getItem('power')) let up = false + let del = false + let add = false + let inPower = false + let outPower = false for (var i = 0; i < power.length; i++) { - if(power[i].menuMethod=='upDataReporting'){ + if (power[i].menuMethod == 'upDataReporting') { up = true - break + } + if (power[i].menuMethod == 'delDataReporting') { + del = true + } + if (power[i].menuMethod == 'addDataReporting') { + add = true + } + if (power[i].menuMethod == 'inputCsv') { + inPower = true + } + if (power[i].menuMethod == 'downDataReportingFile') { + outPower = true } } - if(!up){ - this.componentData.do = [] + if (!del) { + this.componentData.do.splice(1, 1) } + if (!up) { + this.componentData.do.splice(0, 1) + } + this.addPower = add + this.inPower = inPower + this.outPower = outPower + }, + openUpload() { + this.uploadDia = true + }, + beforeUpload(file, fileList) { + if (file.raw.type != 'text/csv') { + this.$message.error('涓婁紶鏂囦欢鏍煎紡涓嶆纭�'); + this.$refs.upload.clearFiles() + return false; + } + }, + submitUpload() { + if (this.$refs.upload.uploadFiles.length == 0) { + this.$message.error('鏈�夋嫨鏂囦欢') + return + } + this.uploading = true + this.$refs.upload.submit(); + }, + onSuccess(response, file, fileList) { + this.$refs.upload.clearFiles() + this.uploadDia = false + this.uploading = false + if(response.code==201){ + this.$message.error(response.message) + return + } + this.$message.success('涓婁紶鎴愬姛') + this.refreshTable() + }, + onError(err, file, fileList) { + this.$message.success('涓婁紶澶辫触') + this.$refs.upload.clearFiles() + this.uploading = false + }, + opeaAdd() { + this.$refs.ValueTable.openAddDia(this.$api.dataReporting.addDataReporting); } } } diff --git a/src/components/view/product-count.vue b/src/components/view/product-count.vue index 6c57801..c5538d2 100644 --- a/src/components/view/product-count.vue +++ b/src/components/view/product-count.vue @@ -42,7 +42,7 @@ <el-row class="title"> <el-col :span="12" style="padding-left: 20px;">椤圭洰鏁版嵁缁熻</el-col> <el-col :span="12" style="text-align: right;"> - <el-button size="small" @click=""> + <el-button size="small" @click="$refs.ValueTable.openDownDia()" v-if="outPower"> <i class="el-icon-download" style="color: #3A7BFA;"></i> <span style="color: #3A7BFA;">瀵煎嚭</span> </el-button> @@ -77,7 +77,7 @@ </div> </div> <div class="table"> - <ValueTable ref="ValueTable" :url="$api.dataReporting.selectProductCountDtoPageList" :componentData="componentData" :key="upIndex"/> + <ValueTable ref="ValueTable" :url="$api.dataReporting.selectProductCountDtoPageList" :componentData="componentData" :key="upIndex" :downUrl="$api.dataReporting.downProductCountFile"/> </div> </div> </template> @@ -109,12 +109,14 @@ entityCopy: {}, upIndex: 0, addDia: false, - product: [] + product: [], + outPower: true } }, mounted() { this.entityCopy = this.HaveJson(this.componentData.entity) this.selectProductEnumList() + this.getPower() }, methods: { refreshTable() { @@ -128,6 +130,17 @@ this.$axios.get(this.$api.enums.selectProductEnumList).then(res=>{ this.product = res.data }) + }, + // 鏉冮檺鍒嗛厤 + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let outPower = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'downProductCountFile') { + outPower = true + } + } + this.outPower = outPower } } } diff --git a/src/components/view/registrant-count.vue b/src/components/view/registrant-count.vue index 882b39a..8a7fcc6 100644 --- a/src/components/view/registrant-count.vue +++ b/src/components/view/registrant-count.vue @@ -47,7 +47,7 @@ <el-row class="title"> <el-col :span="12" style="padding-left: 20px;">鍛樺伐鏁版嵁缁熻</el-col> <el-col :span="12" style="text-align: right;"> - <el-button size="small" @click=""> + <el-button size="small" @click="$refs.ValueTable.openDownDia()" v-if="outPower"> <i class="el-icon-download" style="color: #3A7BFA;"></i> <span style="color: #3A7BFA;">瀵煎嚭</span> </el-button> @@ -79,7 +79,7 @@ </div> </div> <div class="table"> - <ValueTable ref="ValueTable" :url="$api.dataReporting.selectRegistrantCountDtoPageList" :componentData="componentData" :key="upIndex"/> + <ValueTable ref="ValueTable" :url="$api.dataReporting.selectRegistrantCountDtoPageList" :componentData="componentData" :key="upIndex" :downUrl="$api.dataReporting.downRegistrantCountFile"/> </div> </div> </template> @@ -111,13 +111,15 @@ upIndex: 0, addDia: false, product: [], - custom:[] + custom:[], + outPower: true } }, mounted() { this.entityCopy = this.HaveJson(this.componentData.entity) this.selectProductEnumList() this.selectCustomEnumList() + this.getPower() }, methods: { refreshTable() { @@ -136,6 +138,17 @@ this.$axios.get(this.$api.enums.selectCustomEnumList).then(res=>{ this.custom = res.data }) + }, + // 鏉冮檺鍒嗛厤 + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let outPower = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'downRegistrantCountFile') { + outPower = true + } + } + this.outPower = outPower } } } diff --git a/src/main.js b/src/main.js index e495279..c3c10c4 100644 --- a/src/main.js +++ b/src/main.js @@ -11,11 +11,16 @@ import api from './assets/api/controller.js' import swal from 'sweetalert' -Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80"; //鍓嶇鏈湴绔彛 +//鏈湴 +Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80"; const javaApi = 'http://localhost:8001'; +//鑳滀簯鏈嶅姟鍣� +// Vue.prototype.LOCATIONVUE = "http://syxt.shxiao2.cn"; +// const javaApi = 'http://122.114.52.69:8001'; Vue.prototype.HaveJson = (val) => { return JSON.parse(JSON.stringify(val)) } +Vue.prototype.javaApi = javaApi Vue.use(VueAxios, axios) Vue.config.productionTip = false -- Gitblit v1.9.3