From e4bb381c896015c4b87faa002ba6875c06a2fd16 Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期四, 26 十二月 2024 14:33:10 +0800 Subject: [PATCH] 同步检测中心cnas修改 --- src/components/view/b1-expenses.vue | 538 +++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 359 insertions(+), 179 deletions(-) diff --git a/src/components/view/b1-expenses.vue b/src/components/view/b1-expenses.vue index a3e946d..62fd65a 100644 --- a/src/components/view/b1-expenses.vue +++ b/src/components/view/b1-expenses.vue @@ -1,202 +1,382 @@ <style scoped> - .title { - height: 60px; - line-height: 60px; - } + .title { + height: 60px; + line-height: 60px; + } - .search { - background-color: #fff; - height: 80px; - display: flex; - align-items: center; - } + .search { + background-color: #fff; + height: 80px; + display: flex; + align-items: center; + } - .search_thing { - display: flex; - align-items: center; - height: 50px; - } + .search_thing { + display: flex; + align-items: center; + height: 50px; + } - .search_label { - width: 120px; - font-size: 14px; - text-align: right; - } + .search_label { + width: 120px; + font-size: 14px; + text-align: right; + } - .search_input { - width: calc(100% - 120px); - } + .search_input { + width: calc(100% - 120px); + } - .table { - margin-top: 10px; - background-color: #fff; - width: calc(100% - 40px); - height: calc(100% - 60px - 80px - 10px - 40px); - padding: 20px; - } + .table { + margin-top: 10px; + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 80px - 10px - 40px); + padding: 20px; + } - .el-form-item { - margin-bottom: 16px; - } + .el-form-item { + margin-bottom: 16px; + } + + >>>.el-table tbody tr:hover>td { + background-color: transparent !important; + } </style> <template> - <div class="inspection_order"> - <div style="width: 100%;height: 100%;"> - <div> - <el-row class="title"> - <el-col :span="12" style="padding-left: 20px;">璐圭敤缁熻</el-col> + <div class="inspection_order"> + <div style="width: 100%;height: 100%;"> + <div> + <el-row class="title"> + <el-col :span="12" style="padding-left: 20px;text-align: left;">璐圭敤缁熻</el-col> <el-col :span="12" style="text-align: right;"> - <el-button size="small" type="primary">OA鎺ㄩ��</el-button> - </el-col> - </el-row> - </div> - <div class="search"> + <el-button size="small" type="primary">OA鎺ㄩ��</el-button> + </el-col> + </el-row> + </div> + <div class="search"> <div class="search_thing"> - <div class="search_label">鏃堕棿鑼冨洿锛�</div> - <div class="search_input"> - <el-date-picker - v-model="componentData.entity.sample" - type="datetimerange" - range-separator="鑷�" - format="yyyy-MM-dd HH:mm:ss" - start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡"> + <div class="search_label">鏃堕棿鑼冨洿锛�</div> + <div class="search_input"> + <el-date-picker v-model="dates" type="daterange" range-separator="鑷�" format="yyyy-MM-dd" + value-format="yyyy-MM-dd" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" size="small" + @change="datesChange" :key="index2"> </el-date-picker> </div> - </div> - <div class="search_thing"> - <div class="search_label">鏍峰搧鍚嶇О锛�</div> - <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable - v-model="componentData.entity.sample" @keyup.enter.native="refreshTable()"></el-input></div> - </div> - <div class="search_thing"> - <div class="search_label">鐘舵�侊細</div> - <div class="search_input"> - <el-select v-model="componentData.entity.status" placeholder="鍏ㄩ儴" size="small"> - <el-option - v-for="item in statusList" - :key="item.value" - :label="item.label" - :value="item.value"> - </el-option> - </el-select> + </div> + <div class="search_thing" style="width: 340px"> + <div class="search_label">濮旀墭鍗曚綅锛�</div> + <div class="search_input"> +<!-- <el-input size="small" placeholder="璇疯緭鍏�" clearable--> +<!-- @keyup.enter.native="refreshTable()"></el-input>--> + <el-select @focus="getCompanyOptions" @change="refreshTable()" clearable + size="small" v-model="componentData.entity.company" style="width: 100%"> + <el-option v-for="item in companyOptions" :key="item.value" + :label="item.label" :value="item.label"> + </el-option> + </el-select> </div> - </div> - <div class="search_thing" style="padding-left: 30px;"> - <el-button size="small" @click="refresh()">閲� 缃�</el-button> - <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> - </div> - </div> - <div class="table"> - <ValueTable ref="ValueTable" :url="$api.insOrder.selectInsOrderParameter" :componentData="componentData" - :key="upIndex" @handleWeave="handleWeave"/> - </div> - </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + <div class="search_thing" style="padding-left: 70px;">鎬讳环锛歿{total}}</div> + <div class="search_thing" style="padding-left: 70px;"> + <el-button size="small" type="primary" @click="handleDown" :loading="outLoading" v-if="isExport">瀵煎嚭</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.insOrder.costStatistics" + :componentData="componentData" :key="upIndex" + @handleWeave="handleWeave" :column-min-width="'140'"/> + </div> + </div> <el-dialog title="鍦ㄧ嚎缂栧埗" :visible.sync="claimVisible" width="70%" :modal-append-to-body="false"> - <Word style="height:70vh" v-if="claimVisible" ref="Word"/> - <span slot="footer" class="dialog-footer"> - <el-button @click="claimVisible = false">鍙� 娑�</el-button> - <el-button type="primary" @click="confirmClaim">纭� 瀹�</el-button> - </span> - </el-dialog> - </div> + <Word style="height:70vh" v-if="claimVisible" ref="Word" /> + <span slot="footer" class="dialog-footer"> + <el-button @click="claimVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="confirmClaim">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> </template> <script> - import ValueTable from '../tool/value-table.vue' - import Word from '../tool/word.vue' - export default { - components: { - ValueTable, - Word, - }, - data() { - return { - componentData: { - entity: { - entrustCode: null, - sample: null, - state: 1, - orderBy: { - field: 'id', - order: 'asc' - } - }, - isIndex: true, - showSelect: false, - select: false, - do: [], - linkEvent:{}, - tagField: { - type: { - select: [{ - value: 0, - type: 'success', - label: '鏅��' - }, { - value: 1, - type: 'warning', - label: '浼樺厛' - }, { - value: 2, - type: 'danger', - label: '绱ф��' - }] - }, - createUser: { - select: [] - } - }, - selectField: {}, - requiredAdd: [], - requiredUp: [] - }, - entityCopy: {}, - upIndex: 0, - statusList:[], - claimVisible:false - } - }, - mounted() { - this.entityCopy = this.HaveJson(this.componentData.entity) - this.getPower() - }, - methods: { - refreshTable() { - this.$refs['ValueTable'].selectList() - }, - refresh() { - this.componentData.entity = this.HaveJson(this.entityCopy) - this.upIndex++ - }, - handleWeave(){ + import ValueTable from '../tool/value-table.vue' + export default { + components: { + ValueTable, + }, + data() { + return { + componentData: { + entity: { + company: null, + dates: null, + orderBy: { + field: 'id', + order: 'asc' + } + }, + init: false, + isIndex: true, + showSelect: false, + select: false, + highlight: false, + do: [], + linkEvent: {}, + spanConfig: { + //鍚堝苟琛� + rows: [{ + name: 'createTime', + index: 1 + }, + { + name: 'entrustCode', + index: 2 + }, + /* { + name: 'sample', + index: 3 + }, + { + name: 'model', + index: 4 + }, */ + { + name: 'company', + index: 8 + }, + { + name: 'name', + index: 9 + }, + ], + // 鐗规畩鐨勫悎骞惰锛屾牴鎹甿ain鍜宺ows鐨刵ame鏉ュ悎骞� + /* special: { + main: 'entrustCode', + rows: [{ + name: 'sample', + index: 3 + }, + { + name: 'model', + index: 4 + }, + { + name: 'num', + index: 5 + }, + { + name: 'price', + index: 6 + }, + ] + } */ + }, + tagField: { + type: { + select: [{ + value: 0, + type: 'success', + label: '鏅��' + }, { + value: 1, + type: 'warning', + label: '浼樺厛' + }, { + value: 2, + type: 'danger', + label: '绱ф��' + }] + }, + createUser: { + select: [] + } + }, + selectField: {}, + requiredAdd: [], + requiredUp: [], + needSort: ['createTime', 'sample'], + }, + entityCopy: {}, + upIndex: 0, + claimVisible: false, + dates: [], + index2: 0, + total: 0, + companyOptions: [], // 濮旀墭鍗曚綅鏋氫妇鍊� + entity: { + orderBy: { + field: 'id', + order: 'asc' + } + }, + page: { + current: -1, + size: -1, + }, + outLoading:false, + isExport:false + } + }, + mounted() { + this.getDates() + this.refreshTable() + this.entityCopy = this.HaveJson(this.componentData.entity) + this.getPower() + }, + methods: { + handleDown(){ + let entity = {...this.componentData.entity} + // entity.dates = JSON.stringify(entity.dates) + delete entity.orderBy + this.outLoading = true + this.$axios.post(this.$api.insOrder.export,{ + entity:entity + },{ + headers: { + 'Content-Type': 'application/json' + } + ,responseType: "blob"}).then(res => { + this.outLoading = false + const blob = new Blob([res],{ type: 'application/octet-stream' }); + //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆 + let reader = new FileReader(); + reader.readAsText(blob, 'utf-8'); + reader.onload = () => { + try { + let result = JSON.parse(reader.result); + if (result.message) { + this.$message.error(result.message); + } else { + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + let date = JSON.parse(entity.dates) + link.download = (entity.company?entity.company+' ':'')+date[0]+' - '+date[1]+'璐圭敤缁熻.xlsx'; + link.click(); + this.$message.success('瀵煎嚭鎴愬姛') + } + } catch (err) { + console.log(err); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + let date = JSON.parse(entity.dates) + link.download = (entity.company?entity.company+' ':'')+date[0]+' - '+date[1]+'璐圭敤缁熻.xlsx'; + link.click(); + this.$message.success('瀵煎嚭鎴愬姛') + } + } + }) + }, + getTotal(){ + this.$axios.post(this.$api.insOrder.costStatistics2, { + entity:this.componentData.entity + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.total = res.data.total + }) + }, + getDates(){ + //褰撳墠鏈堢涓�澶� + var y = new Date().getFullYear(); //鑾峰彇骞翠唤 + var m = new Date().getMonth() + 1; //鑾峰彇鏈堜唤 + var d = "01"; + m = m < 10 ? "0" + m : m; //鏈堜唤琛� 0 + let startDate = [y, m, d].join("-"); + //褰撳墠鏈堟渶鍚庝竴澶� + var y = new Date().getFullYear(); //鑾峰彇骞翠唤 + var m = new Date().getMonth() + 1; //鑾峰彇鏈堜唤 + var d = new Date(y, m, 0).getDate(); //鑾峰彇褰撴湀鏈�鍚庝竴鏃� + m = m < 10 ? "0" + m : m; //鏈堜唤琛� 0 + d = d < 10 ? "0" + d : d; //鏃ユ暟琛� 0 + let endDate = [y, m, d].join("-"); + this.dates = [startDate, endDate] + this.index2++ + this.componentData.entity.dates = `["${startDate}","${endDate}"]` + }, + getCompanyOptions () { + this.$axios.post(this.$api.user.selectCustomPageList, { + page: this.page, + entity: this.entity + }, { + headers: { + 'Content-Type': 'application/json' + } + } + ).then(res => { + if (res.code === 200) { + const list = res.data.body.records + this.companyOptions = [] + list.map((item) => { + const obj = Object.assign({ + value: item.id, + label: item.company, + }) + this.companyOptions.push(obj) + }) + } + }).catch(e => { + this.$message.error('鏌ヨ澶辫触') + }) + }, + refreshTable() { + this.$refs['ValueTable'].selectList() + this.getTotal() + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + this.componentData.init = true + this.getDates() + this.getTotal() + this.upIndex++ + }, + handleWeave() { this.claimVisible = true; }, - // 鏉冮檺鍒嗛厤 - getPower(radio) { - let power = JSON.parse(sessionStorage.getItem('power')) - let up = false - let del = false - let add = false - for (var i = 0; i < power.length; i++) { - if (power[i].menuMethod == 'upInsOrder') { - up = true - } - if (power[i].menuMethod == 'addInsOrder') { - add = true - } - } - if (!up) { - this.componentData.do.splice(4, 1) - } - }, - handleClose() { - this.upLoad = false; - }, - confirmClaim(){ - console.log(11111111111,this.$refs.Word.getValue()) + // 鏉冮檺鍒嗛厤 + getPower(radio) { + let power = JSON.parse(sessionStorage.getItem('power')) + let up = false + let del = false + let add = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'upInsOrder') { + up = true + } + if (power[i].menuMethod == 'addInsOrder') { + add = true + } + // + if (power[i].menuMethod == 'export') { + this.isExport = true + } + } + if (!up) { + this.componentData.do.splice(4, 1) + } + }, + handleClose() { + this.upLoad = false; + }, + confirmClaim() { + console.log(11111111111, this.$refs.Word.getValue()) + }, + datesChange(val){ + if(val == null){ + return + } + this.componentData.entity.dates = JSON.stringify(val) + this.$refs['ValueTable'].selectList() + this.getTotal() } - } - } + } + } </script> -- Gitblit v1.9.3