From a892616db370b2185bc546a11c873df1137cc7e0 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期一, 01 九月 2025 09:44:01 +0800 Subject: [PATCH] 1、设备事故登记表以及三不放过原则分析报表导出及批量打印功能 2、调整首页看板及图表样式 --- src/views/dashboard/IndexSignage.vue | 294 ++++++++--------- src/components/page/GlobalFooter.vue | 2 src/views/eam/repair/EamReportAccidentsRegisterList.vue | 31 + src/views/eam/repair/EamReportThreeNoSpareList.vue | 154 +++++---- src/views/eam/repair/modules/EamAccidentsRegisterBatchPrintModal.vue | 273 +++++++++++++++++ src/views/eam/repair/modules/EamThreeNoSpareAnalysisBatchPrintModal.vue | 190 +++++++++++ src/components/page/GlobalLayout.vue | 2 7 files changed, 713 insertions(+), 233 deletions(-) diff --git a/src/components/page/GlobalFooter.vue b/src/components/page/GlobalFooter.vue index 9bb6f97..7527d2e 100644 --- a/src/components/page/GlobalFooter.vue +++ b/src/components/page/GlobalFooter.vue @@ -9,7 +9,7 @@ <!--<a href="https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/">Vue Antd</a>--> <!--</div>--> <div class="copyright" - :style="{background:$route.meta.title==='棣栭〉'?'#fff':''}"> + :style="{background:$route.meta.title==='棣栭〉'?'#FEFEFE':''}"> Copyright <a-icon type="copyright"/> 2024 <span>2015-2025 鐏电鏅鸿兘</span> diff --git a/src/components/page/GlobalLayout.vue b/src/components/page/GlobalLayout.vue index f389d43..341ba4e 100644 --- a/src/components/page/GlobalLayout.vue +++ b/src/components/page/GlobalLayout.vue @@ -70,7 +70,7 @@ <!-- layout content --> <a-layout-content - :style="{ height: '100%', paddingTop: fixedHeader ? '59px' : '0' ,background: $route.meta.title=='棣栭〉'?'#fff':''}"> + :style="{ height: '100%', paddingTop: fixedHeader ? '59px' : '0' ,background: $route.meta.title=='棣栭〉'?'#FEFEFE':''}"> <slot></slot> </a-layout-content> diff --git a/src/views/dashboard/IndexSignage.vue b/src/views/dashboard/IndexSignage.vue index a93745a..949d5f3 100644 --- a/src/views/dashboard/IndexSignage.vue +++ b/src/views/dashboard/IndexSignage.vue @@ -213,25 +213,37 @@ if (res.success && res.result) { this.techConditionData = [ { - value: res.result.jszt.find(item => item.code === 'QUALIFIED').value, + value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'QUALIFIED').value : 0, name: '鍚堟牸', technologyStatus: 'QUALIFIED' }, { - value: res.result.jszt.find(item => item.code === 'PROHIBITED').value, + value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'PROHIBITED').value : 0, name: '绂佺敤', technologyStatus: 'PROHIBITED' }, { - value: res.result.jszt.find(item => item.code === 'RESTRICTED').value, + value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'RESTRICTED').value : 0, name: '闄愮敤', technologyStatus: 'RESTRICTED' } ] this.warrantyMalfunctionData = [ - { value: res.result.bxqk.find(item => item.code === 'bx').value, name: '鎶ヤ慨', code: 'bx' }, - { value: res.result.bxqk.find(item => item.code === 'stop').value, name: '鍋滄満', code: 'stop' }, - { value: res.result.bxqk.find(item => item.code === 'run').value, name: '杩愯', code: 'run' } + { + value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'bx').value : 0, + name: '鎶ヤ慨', + code: 'bx' + }, + { + value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'stop').value : 0, + name: '鍋滄満', + code: 'stop' + }, + { + value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'run').value : 0, + name: '杩愯', + code: 'run' + } ] this.techConditionChartRequireFinished = true this.warrantyMalfunctionChartRequireFinished = true @@ -341,7 +353,7 @@ icon: 'roundRect', itemGap: 15, textStyle: { - color: 'inherit', + color: 'rgba(0,0,0,.45)', fontSize: 14, padding: [0, 0, 0, 0] }, @@ -360,13 +372,13 @@ color: [ '#686869', '#AA6349', - '#EAEA7C', + '#FFFF88', '#5D975D' ], label: { position: 'outside', show: true, - color: 'inherit', + color: 'rgba(0,0,0,.45)', // textBorderColor: 'inherit', // textBorderWidth: 1, fontSize: 16, @@ -379,7 +391,10 @@ labelLine: { show: true, length2: 10, - length: 10 + length: 10, + lineStyle: { + color: 'rgba(0,0,0,.45)' + } }, data: this.runningStateData } @@ -400,31 +415,20 @@ drawEfficiencyChart() { const colorArray = [ { - top: '#79CEAA', - bottom: '#79CEAA' + top: '#EA967B', + bottom: '#F8E18B' }, { - top: '#F589A2', - bottom: '#F589A2' + top: '#62AC75', + bottom: '#A8D07C' }, { - top: '#6FBF9D', - bottom: '#6FBF9D' + top: '#32ACBF', + bottom: '#7BCAC5' }, { - top: '#66DFE2', - bottom: '#66DFE2' - }, { - top: '#A7F0C1', - bottom: '#A7F0C1' - }, - { - top: '#FAE893', - bottom: '#FAE893' - }, - { - top: '#F7B7A0', - bottom: '#F7B7A0' + top: '#7196CE', + bottom: '#8DCCEF' } ] const data = this.efficiencyData @@ -629,7 +633,7 @@ icon: 'roundRect', itemGap: 15, textStyle: { - color: 'inherit', + color: 'rgba(0,0,0,.45)', fontSize: 14, padding: [0, 0, 0, 0] }, @@ -652,7 +656,7 @@ label: { position: 'outside', show: true, - color: 'inherit', + color: 'rgba(0,0,0,.45)', // textBorderColor: 'inherit', // textBorderWidth: 1, fontSize: 16, @@ -665,7 +669,10 @@ labelLine: { show: true, length2: 10, - length: 10 + length: 10, + lineStyle: { + color: 'rgba(0,0,0,.45)' + } }, data: this.techConditionData } @@ -715,7 +722,7 @@ icon: 'roundRect', itemGap: 15, textStyle: { - color: 'inherit', + color: 'rgba(0,0,0,.45)', fontSize: 14, padding: [0, 0, 0, 0] }, @@ -733,12 +740,12 @@ color: [ '#00CED1', '#B85B38', - '#EAEA7C' + '#FFFF88' ], label: { position: 'outside', show: true, - color: 'inherit', + color: 'rgba(0,0,0,.45)', // textBorderColor: 'inherit', // textBorderWidth: 1, fontSize: 16, @@ -751,7 +758,10 @@ labelLine: { show: true, length2: 10, - length: 10 + length: 10, + lineStyle: { + color: 'rgba(0,0,0,.45)' + } }, data: this.warrantyMalfunctionData } @@ -773,9 +783,9 @@ this.maintenanceConfig = { indexHeader: '搴忓彿', header: ['杞﹂棿', '鏃ユ湡', '鍐呭'], - headerBGC: '#266C86', - oddRowBGC: '#003B51', - evenRowBGC: '#0A2732', + headerBGC: '#46B7E3', + oddRowBGC: '#0383AF', + evenRowBGC: '#0395C9', data: this.twoMaintenanceChartData, index: true, columnWidth: [100, 300, 300, 300], @@ -785,7 +795,6 @@ /* 缁樺埗鍗曟煴鍥� */ drawBarChart() { - const colorArray = ['#79CEAA', '#F589A2', '#6FBF9D', '#66DFE2', '#A7F0C1', '#FAE893', '#F7B7A0'] const defaultData = [] const dataMax = this.barChartData.length > 0 ? +this.barChartData.sort((x, y) => +y.value - +x.value)[0].value : 0 let yAxisMax @@ -793,6 +802,9 @@ else yAxisMax = Math.ceil(dataMax / 5) * 5 // 璁剧疆鏌卞浘鑳屾櫙闃村奖榛樿鍊硷紝鎬濊矾涓烘暟鎹渶澶у�兼渶鎺ヨ繎鐨勮兘琚�5鏁撮櫎鐨勬暟瀛� const yAxisInterval = yAxisMax / 5 // 鍚屾椂灏嗗埢搴﹀�煎垎鎴�5浠� this.barChartData.forEach(item => defaultData.push(yAxisMax)) + console.log('bar', this.barChartData) + let barTopColor = ['#EA967B', '#62AC75', '#32ACBF', '#7196CE'] + let barBottomColor = ['#F8E18B', '#A8D07C', '#7BCAC5', '#8DCCEF'] const option = { title: { show: true, // 鏄惁鏄剧ず鏍囬锛岄粯璁や负true @@ -814,149 +826,124 @@ formatter: function(params) { return '<span style="font-weight:bolder;">' + params[0].name + '</span><br/>' + '<span style="display:inline-block; width:10px; height:10px; border-radius:100px; margin-right:5px; background:' + params[0].color + '"></span>' + ' OEE: ' + params[0].value + '%' - }, - // backgroundColor: 'rgba(9, 24, 48, 0.5)', - borderColor: 'rgba(75, 253, 238, 0.4)', - textStyle: { - // color: '#CFE3FC' - }, - borderWidth: 1 + } }, grid: { top: '15%', left: '10%' }, - xAxis: [{ - name: '', - nameLocation: 'middle', - nameGap: 40, // x杞磏ame涓庢í鍧愭爣杞寸嚎鐨勯棿璺� - type: 'category', - data: this.barChartData.map(item => item.productionId), + xAxis: { + data: this.barChartData.map(item => item.name), + axisTick: { + show: false + }, axisLine: { + show: true, lineStyle: { color: 'rgba(0,0,0,.45)' } }, axisLabel: { - show: true, // 鏄惁鏄剧ず鍒诲害鏍囩锛岄粯璁ゆ樉绀� - interval: 0, // 鍧愭爣杞村埢搴︽爣绛剧殑鏄剧ず闂撮殧锛屽湪绫荤洰杞翠腑鏈夋晥锛涢粯璁や細閲囩敤鏍囩涓嶉噸鍙犵殑绛栫暐闂撮殧鏄剧ず鏍囩锛涘彲浠ヨ缃垚0寮哄埗鏄剧ず鎵�鏈夋爣绛撅紱濡傛灉璁剧疆涓�1锛岃〃绀恒�庨殧涓�涓爣绛炬樉绀轰竴涓爣绛俱�忥紝濡傛灉鍊间负2锛岃〃绀洪殧涓や釜鏍囩鏄剧ず涓�涓爣绛撅紝浠ユ绫绘帹銆� - rotate: this.barChartData.length >= 6 ? -30 : 0, // 鍒诲害鏍囩鏃嬭浆鐨勮搴︼紝鍦ㄧ被鐩酱鐨勭被鐩爣绛炬樉绀轰笉涓嬬殑鏃跺�欏彲浠ラ�氳繃鏃嬭浆闃叉鏍囩涔嬮棿閲嶅彔锛涙棆杞殑瑙掑害浠�-90搴﹀埌90搴� - inside: false, // 鍒诲害鏍囩鏄惁鏈濆唴锛岄粯璁ゆ湞澶� - margin: 10, // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈 - formatter: value => { - return `${this.barChartData.find(item => item.productionId === value).name}` - }, - fontSize: 14 - }, - axisTick: { show: true, - alignWithLabel: true - } - }], - yAxis: [{ + rotate: 20, + margin: 25, + textStyle: { + fontSize: 14, + color: 'rgba(0,0,0,.45)', + align: 'center' + } + }, + interval: 0 + }, + yAxis: { name: '%', - min: 0, - max: yAxisMax, - interval: yAxisInterval, - axisLabel: { - formatter: '{value}', - fontSize: 14 + splitLine: { + show: false }, axisTick: { show: false }, axisLine: { - show: false, + show: true, lineStyle: { color: 'rgba(0,0,0,.45)' } }, - splitLine: { - show: false, - lineStyle: { - color: 'rgba(255,255,255,0.12)' + axisLabel: { + show: true, + margin: 10, + textStyle: { + fontSize: 14, + color: 'rgba(0,0,0,.45)' } } - }], + }, series: [ { - type: 'bar', - data: this.barChartData, - barWidth: this.barChartData.length > 5 ? '40%' : 30, + type: 'pictorialBar', + symbolSize: [26, 10], + symbolOffset: [0, -5], + z: 12, itemStyle: { color: function(params) { - let num = colorArray.length - return colorArray[params.dataIndex % num] + return barBottomColor[params.dataIndex % barBottomColor.length] } - // color: new echarts.graphic.LinearGradient( - // 0, 0, 0, 1, [{ - // offset: 0, - // color: '#83bff6' - // }, - // { - // offset: 0.5, - // color: '#188df0' - // }, - // { - // offset: 1, - // color: '#188df0' - // } - // ] - // ) }, - zlevel: 1, label: { - show: false, - lineHeight: 10, - formatter: params => { - if (+params.value === 0) return '' - else return params.value - }, + show: true, position: 'top', - textStyle: { - color: '#fff', - fontSize: 16 - } - } + fontSize: 12, + color: 'rgba(0,0,0,.45)' + }, + symbolPosition: 'end', + data: this.barChartData }, { - name: '鑳屾櫙', - type: 'bar', - barWidth: this.barChartData.length > 5 ? '40%' : 30, - barGap: '-100%', - data: defaultData, + type: 'pictorialBar', + symbolSize: [26, 10], + symbolOffset: [0, 5], + z: 12, itemStyle: { - color: 'rgba(0,0,0,.05)' - } + color: function(params) { + return barTopColor[params.dataIndex % barTopColor.length] + } + }, + data: this.barChartData + }, + { + type: 'bar', + itemStyle: { + color: function(params) { + return new echarts.graphic.LinearGradient( + 0, 0, 0, 1, + [{ + offset: 1, + color: barTopColor[params.dataIndex % barTopColor.length] + }, + { + offset: 0, + color: barBottomColor[params.dataIndex % barBottomColor.length] + } + ] + ) + }, + opacity: .9 + }, + z: 16, + barWidth: 26, + barGap: '-100%', + data: this.barChartData }] - // aria: { - // enabled: true, - // decal: { - // show: true, - // decals: [ - // { - // color: 'rgba(0,0,0,.2)', - // dashArrayX: [20, 0], - // dashArrayY: [1, 2], - // symbol: 'rect', - // rotation: Math.PI / 4 - // }, - // { - // symbol: 'none' - // } - // ] - // } - // } } + option.title.text = moment().subtract(1, 'months').format('M鏈�') + `OEE` this.barChart.setOption(option, true) this.barChart.hideLoading() this.barChart.on('click', params => { let productionId - // 鐐瑰嚮鐨勬槸鏌变綋鐨勫�硷紝鍚﹀垯鐐瑰嚮鐨勪负鏌变綋鑳屾櫙闃村奖 - if (params.seriesIndex === 0) productionId = params.data.productionId - else productionId = params.name + console.log('params', params) + productionId = params.data.productionId this.$router.push({ name: 'mdc-base-OEEAnalysis', @@ -968,7 +955,7 @@ /* 缁樺埗鍙屾煴鍥� */ drawDoubleBarChart() { const option = { - color: ['#4992FF', '#4DC0B1'], + color: ['#1890FF', '#2EC35C'], tooltip: { confine: true, formatter: function(params) { @@ -1077,30 +1064,32 @@ series: [{ type: 'bar', barWidth: 20, + barGap: '0%', itemStyle: { barBorderRadius: 4 }, name: 'OEE', data: this.doubleBarChartData.oeeList, label: { - show: false, + show: true, lineHeight: 10, formatter: params => { if (+params.value === 0) return '' else return params.value }, - position: 'inside', + position: 'top', textStyle: { - color: '#fff', - fontSize: 12 + color: 'rgba(0,0,0,.45)', + fontSize: 10 } } }, { type: 'bar', barWidth: 20, + barGap: '0%', itemStyle: { barBorderRadius: 4 }, name: 'TEEP', data: this.doubleBarChartData.utilizationList, label: { - show: false, + show: true, lineHeight: 10, formatter: params => { if (+params.value === 0) return '' @@ -1108,8 +1097,8 @@ }, position: 'inside', textStyle: { - color: '#fff', - fontSize: 12 + color: 'rgba(0,0,0,.45)', + fontSize: 10 } } } @@ -1124,13 +1113,13 @@ this.problemConfig = { indexHeader: '搴忓彿', header: ['鏃堕棿', '闂鍐呭'], - headerBGC: '#83B883', - oddRowBGC: '#556955', - evenRowBGC: '#556955', + headerBGC: '#A5CCE6', + oddRowBGC: '#6B9FCD', + evenRowBGC: '#5A7D9A', data: this.workshopProblemChartData, index: true, columnWidth: [100, 200, 300], - align: ['center'] + align: ['center', 'center', 'center'] } }, @@ -1152,7 +1141,6 @@ } else { this.pieChartRadius = this.normalPieChartRadius.map(item => item = (+item.slice(0, -1) * (clientWidth / this.firstEnterClientWidth)) + '%') } - console.log('pieChartRadius', this.pieChartRadius) this.$nextTick(() => { if (this.runningStateChartDataRequireFinished) this.drawRunningStateChart(this.currentPageProductionId) if (this.techConditionChartRequireFinished) this.drawTechConditionChart() diff --git a/src/views/eam/repair/EamReportAccidentsRegisterList.vue b/src/views/eam/repair/EamReportAccidentsRegisterList.vue index 9677555..a01df26 100644 --- a/src/views/eam/repair/EamReportAccidentsRegisterList.vue +++ b/src/views/eam/repair/EamReportAccidentsRegisterList.vue @@ -26,9 +26,22 @@ </a-form> </div> + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleBatchPrint" type="primary" icon="monitor" :disabled="selectedRowKeys.length===0">鎵归噺棰勮 + </a-button> + </div> + + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ + selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + <!-- table鍖哄煙-begin --> <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource" - :pagination="ipagination" :loading="loading" :scroll="{x:'max-content'}" @change="handleTableChange"> + :pagination="ipagination" :loading="loading" :scroll="{x:'max-content'}" @change="handleTableChange" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"> <!--鏄惁鏈夎澶囨搷浣滆瘉--> <template slot="operationCertificate" slot-scope="text"> @@ -89,6 +102,9 @@ <!--瀹℃壒绐楀彛--> <report-accidents-register-approval-modal ref="reportAccidentsRegisterApprovalModal" :selectShenpiData="selectedRowData"/> + + <!--鎵归噺鎵撳嵃绐楀彛--> + <eam-accidents-register-batch-print-modal ref="batchPrintModal"/> </a-card> </template> @@ -99,11 +115,13 @@ import { getAction } from '@/api/manage' import ReportAccidentsRegisterApprovalModal from '../../flowable/workflow/repairOrder/ReportAccidentsRegisterApprovalModal' + import EamAccidentsRegisterBatchPrintModal from './modules/EamAccidentsRegisterBatchPrintModal' export default { name: 'EamReportAccidentsRegisterList', mixins: [JeecgListMixin], components: { + EamAccidentsRegisterBatchPrintModal, ReportAccidentsRegisterApprovalModal, LxSearchEquipmentSelect, EamReportAccidentsRegisterModal @@ -202,19 +220,19 @@ title: '浜嬫晠鐜拌薄', align: 'center', dataIndex: 'accidentPhenomenon', - scopedSlots: {customRender: 'accidentPhenomenon'}, + scopedSlots: { customRender: 'accidentPhenomenon' } }, { title: '閲囧彇鎺柦', align: 'center', dataIndex: 'measure', - scopedSlots: {customRender: 'measure'}, + scopedSlots: { customRender: 'measure' } }, { title: '閫犳垚缁撴灉', align: 'center', dataIndex: 'causingResults', - scopedSlots: {customRender: 'causingResults'}, + scopedSlots: { customRender: 'causingResults' } }, { title: '鎿嶄綔宸�', @@ -409,6 +427,11 @@ }) }, + // 鎵归噺鎵撳嵃 + handleBatchPrint() { + this.$refs.batchPrintModal.handlePreview(this.selectedRowKeys.join()) + }, + /** * 鐐瑰嚮璇︽儏鏃惰Е鍙戞椂瑙﹀彂 * @param record diff --git a/src/views/eam/repair/EamReportThreeNoSpareList.vue b/src/views/eam/repair/EamReportThreeNoSpareList.vue index 6fd1953..cdea0ba 100644 --- a/src/views/eam/repair/EamReportThreeNoSpareList.vue +++ b/src/views/eam/repair/EamReportThreeNoSpareList.vue @@ -12,25 +12,26 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="鐘舵��"> - <j-dict-select-tag dict-code="report_three_no_spare_submit_status" placeholder="璇烽�夋嫨鐘舵��" v-model="queryParam.submitStatus"/> + <j-dict-select-tag dict-code="report_three_no_spare_submit_status" placeholder="璇烽�夋嫨鐘舵��" + v-model="queryParam.submitStatus"/> </a-form-item> </a-col> - <template v-if="toggleSearchStatus"> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鍘熷洜鍒嗘瀽"> - <a-input placeholder="璇疯緭鍏ュ師鍥犲垎鏋�" v-model="queryParam.causeAnalysis"></a-input> - </a-form-item> - </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鍩硅褰㈠紡"> - <a-input placeholder="璇疯緭鍏ュ煿璁舰寮�" v-model="queryParam.trainingFormat"></a-input> - </a-form-item> - </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鍩硅鍐呭"> - <a-input placeholder="璇疯緭鍏ュ煿璁唴瀹�" v-model="queryParam.trainingContent"></a-input> - </a-form-item> - </a-col> + <template v-if="toggleSearchStatus"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍘熷洜鍒嗘瀽"> + <a-input placeholder="璇疯緭鍏ュ師鍥犲垎鏋�" v-model="queryParam.causeAnalysis"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍩硅褰㈠紡"> + <a-input placeholder="璇疯緭鍏ュ煿璁舰寮�" v-model="queryParam.trainingFormat"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍩硅鍐呭"> + <a-input placeholder="璇疯緭鍏ュ煿璁唴瀹�" v-model="queryParam.trainingContent"></a-input> + </a-form-item> + </a-col> </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> @@ -49,27 +50,23 @@ <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> <div class="table-operator"> + <a-button @click="handleBatchPrint" type="primary" icon="monitor" :disabled="selectedRowKeys.length===0">鎵归噺棰勮 + </a-button> </div> <!-- table鍖哄煙-begin --> <div> - - <a-table - ref="table" - size="middle" - bordered - rowKey="id" - :columns="columns" - :dataSource="dataSource" - :pagination="ipagination" - :loading="loading" - :scroll="{x:'max-content'}" - @change="handleTableChange"> + <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource" + :pagination="ipagination" :loading="loading" :scroll="{x:'max-content'}" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + @change="handleTableChange"> <span slot="action" slot-scope="text, record"> <template> - <a v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" @click="handleFillIn(record)">濉姤</a> - <a-divider v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" type="vertical"/> - <a-popconfirm v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record.id)"> + <a v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" + @click="handleFillIn(record)">濉姤</a> + <a-divider v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" type="vertical"/> + <a-popconfirm v-if="record.submitStatus=='PENDING_SUBMIT'||record.submitStatus=='REJECTED'" title="纭畾鎻愪氦鍚�?" + @confirm="() => handleSubmit(record.id)"> <a>鎻愪氦</a> </a-popconfirm> </template> @@ -112,12 +109,13 @@ <!-- table鍖哄煙-end --> <!-- 琛ㄥ崟鍖哄煙 --> - <eamReportThreeNoSpare-modal ref="modalForm" @ok="modalFormOk"></eamReportThreeNoSpare-modal> + <eamReportThreeNoSpare-modal ref="modalForm" @ok="modalFormOk"/> <!--瀹℃壒绐楀彛--> - <report-threeNo-spare-approval-modal ref="reportThreeNoSpareApprovalModal" - :selectShenpiData="selectedRowData"/> + <report-threeNo-spare-approval-modal ref="reportThreeNoSpareApprovalModal" :selectShenpiData="selectedRowData"/> + <!--鎵归噺鎵撳嵃寮圭獥--> + <eam-three-no-spare-analysis-batch-print-modal ref="batchPrintModal"/> </a-card> </template> @@ -125,15 +123,17 @@ import '@/assets/less/TableExpand.less' import EamReportThreeNoSpareModal from './modules/EamReportThreeNoSpareModal' import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import {getAction} from "@api/manage"; - import LxSearchEquipmentSelect from "@views/eam/equipment/modules/LxSearchEquipmentSelect.vue"; + import { getAction } from '@api/manage' + import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' import ReportThreeNoSpareApprovalModal from '../../flowable/workflow/repairOrder/ReportThreeNoSpareApprovalModal' + import EamThreeNoSpareAnalysisBatchPrintModal from './modules/EamThreeNoSpareAnalysisBatchPrintModal' export default { - name: "EamReportThreeNoSpareList", - mixins:[JeecgListMixin], + name: 'EamReportThreeNoSpareList', + mixins: [JeecgListMixin], components: { + EamThreeNoSpareAnalysisBatchPrintModal, ReportThreeNoSpareApprovalModal, LxSearchEquipmentSelect, EamReportThreeNoSpareModal @@ -147,7 +147,7 @@ type: Object } }, - data () { + data() { return { description: '鈥滀笁涓嶆斁杩囩殑鍘熷垯鈥濆垎鏋愯〃绠$悊椤甸潰', disableMixinCreated: true, @@ -187,96 +187,97 @@ title: '鐘舵��', align: 'center', dataIndex: 'submitStatus_dictText', + fixed: 'left' }, { title: '浜嬫晠鐜拌薄', align: 'center', dataIndex: 'accidentPhenomenon', - scopedSlots: {customRender: 'accidentPhenomenon'}, + scopedSlots: { customRender: 'accidentPhenomenon' } }, { title: '閲囧彇鎺柦', align: 'center', dataIndex: 'measure', - scopedSlots: {customRender: 'measure'}, + scopedSlots: { customRender: 'measure' } }, { title: '閫犳垚缁撴灉', align: 'center', dataIndex: 'causingResults', - scopedSlots: {customRender: 'causingResults'}, + scopedSlots: { customRender: 'causingResults' } }, - { + { title: '鍘熷洜鍒嗘瀽', - align:"center", + align: 'center', dataIndex: 'causeAnalysis', - scopedSlots: {customRender: 'causeAnalysis'}, + scopedSlots: { customRender: 'causeAnalysis' } }, { title: '棰勯槻鎺柦', align: 'center', dataIndex: 'preventionMeasures', - scopedSlots: {customRender: 'preventionMeasures'}, + scopedSlots: { customRender: 'preventionMeasures' } }, { title: '鍩硅鏁欒偛', - align:"center", - dataIndex: 'isTrainingEducation_dictText', + align: 'center', + dataIndex: 'isTrainingEducation_dictText' }, { title: '鍩硅褰㈠紡', - align:"center", + align: 'center', dataIndex: 'trainingFormat', - scopedSlots: {customRender: 'trainingFormat'}, + scopedSlots: { customRender: 'trainingFormat' } }, { title: '鍩硅鍐呭', - align:"center", + align: 'center', dataIndex: 'trainingContent', - scopedSlots: {customRender: 'trainingContent'}, + scopedSlots: { customRender: 'trainingContent' } }, - { + { title: '鍩硅浜�', - align:"center", + align: 'center', dataIndex: 'trainingUser_dictText' }, - { + { title: '鍩硅鏃堕棿', - align:"center", + align: 'center', dataIndex: 'trainingUserTime' }, - { + { title: '鍗曚綅棰嗗', - align:"center", + align: 'center', dataIndex: 'unitLeader_dictText' }, - { + { title: '棰嗗鎰忚', - align:"center", + align: 'center', dataIndex: 'leaderOpinion' }, - { + { title: '棰嗗纭鏃堕棿', - align:"center", + align: 'center', dataIndex: 'leaderConfirmTime' }, { title: 'HF缂栫爜', align: 'center', dataIndex: 'hfCode' - }, + } ], selectedRowData: {}, url: { - list: "/eam/eamReportThreeNoSpare/list", - delete: "/eam/eamReportThreeNoSpare/delete", - deleteBatch: "/eam/eamReportThreeNoSpare/deleteBatch", - exportXlsUrl: "eam/eamReportThreeNoSpare/exportXls", - importExcelUrl: "eam/eamReportThreeNoSpare/importExcel", - submit:"eam/eamReportThreeNoSpare/submit" - }, - } - }, + list: '/eam/eamReportThreeNoSpare/list', + delete: '/eam/eamReportThreeNoSpare/delete', + deleteBatch: '/eam/eamReportThreeNoSpare/deleteBatch', + exportXlsUrl: 'eam/eamReportThreeNoSpare/exportXls', + importExcelUrl: 'eam/eamReportThreeNoSpare/importExcel', + submit: 'eam/eamReportThreeNoSpare/submit' + } + } + }, created() { if (!this.isDisplayOperation) this.queryParam = Object.assign({}, this.propsQueryParam) else { @@ -293,6 +294,11 @@ this.loadData(1) }, methods: { + // 鎵归噺鎵撳嵃 + handleBatchPrint() { + this.$refs.batchPrintModal.handlePreview(this.selectedRowKeys.join()) + }, + /** * 鐐瑰嚮濉姤鏃惰Е鍙� * @param record @@ -330,7 +336,7 @@ * @param record 琛ㄦ牸琛屼俊鎭� */ handleDetail(record) { - this.selectRepairOrderData = Object.assign({}, record) + this.selectedRowData = Object.assign({}, record) this.$refs.reportThreeNoSpareApprovalModal.visible = true this.$refs.reportThreeNoSpareApprovalModal.title = '璇︽儏' this.$refs.reportThreeNoSpareApprovalModal.disableSubmit = true diff --git a/src/views/eam/repair/modules/EamAccidentsRegisterBatchPrintModal.vue b/src/views/eam/repair/modules/EamAccidentsRegisterBatchPrintModal.vue new file mode 100644 index 0000000..584b727 --- /dev/null +++ b/src/views/eam/repair/modules/EamAccidentsRegisterBatchPrintModal.vue @@ -0,0 +1,273 @@ +<template> + <j-modal title="棰勮锛堜粎鍙瑙堝凡瀹屾垚宸ュ崟锛�" :width="948" :visible="visible" switchFullscreen centered + :mask-closable="false" @cancel="handleCancel" cancelText="鍏抽棴"> + <a-spin :spinning="spinning" style="height: 100%"> + <div id="dataTable"> + <div v-for="dataItem in dataSource" class="table-container"> + <div style="page-break-before:always"></div> + + <table class="import-table" :id="dataItem.equipmentCode"> + <thead> + <tr> + <td colspan="6" style="border: none"> + <div style="text-align: right">{{dataItem.hfCode}}</div> + </td> + </tr> + </thead> + + <tbody> + <tr style="height: 48px;"> + <th colspan="6" style="border: none;font-size: 20px">璁惧浜嬫晠鐧昏琛�</th> + </tr> + + <tr> + <td>鐢熶骇鍗曚綅</td> + <td>{{dataItem.factoryName}}</td> + <td>浜嬫晠鍙戠敓鏃堕棿</td> + <td>{{dataItem.faultStartTime}}</td> + <td>鎿嶄綔宸�</td> + <td>{{dataItem.confirmer_dictText}}</td> + </tr> + + <tr> + <td>缁熶竴缂栧彿</td> + <td>{{dataItem.equipmentCode}}</td> + <td>璁惧鍚嶇О</td> + <td>{{dataItem.equipmentName}}</td> + <td>璁惧鍨嬪彿</td> + <td>{{dataItem.equipmentModel}}</td> + </tr> + + <tr> + <td>搴熷搧浠跺彿</td> + <td>{{dataItem.scrapPartNumber}}</td> + <td>搴熷搧浠舵暟</td> + <td>{{dataItem.scrapPartQuantity}}</td> + <td>搴熷搧浠峰��</td> + <td>{{dataItem.scrapPartValue}}</td> + </tr> + + <tr> + <td colspan="6" style="padding: 5px"> + <div style="text-align: left">鎿嶄綔鑰呭~鍐欎簨鏁呭彂鐢熺粡杩囷細</div> + <div style="text-align: left">1.鏄惁鏈夎澶囨搷浣滆瘉锛歿{+dataItem.operationCertificate===1?'鏈夛紙鈭氾級鏃狅紙锛�':'鏈夛紙锛夋棤锛堚垰锛�'}} + </div> + <div style="text-align: left">2.浜嬫晠鍙戠敓鍚庤澶囨槸鍚︽柇鐢甸噸鍚細{{+dataItem.powerOffRestart===1?'鏄紙鈭氾級鍚︼紙锛�':'鏄紙锛夊惁锛堚垰锛�'}} + </div> + <div style="text-align: left">3.鍔犲伐闆朵欢鏄惁涓烘壒娆¢浠讹細{{+dataItem.batchFirstPiece===1?'鏄紙鈭氾級鍚︼紙锛�':'鏄紙锛夊惁锛堚垰锛�'}}</div> + <div style="text-align: left"> + 4.鍔犲伐杩囩▼涓殑鍙樺姩鍥犵礌锛堝~鍐欐槸鎴栧惁锛夛細鍒�鍏锋洿鎹紙{{setValueYesOrNot(dataItem,'tool_replacement')}}锛夊伐鑹烘洿鏀癸紙{{setValueYesOrNot(dataItem,'process_change')}}锛夊姞宸ョ▼搴忔洿鏀癸紙{{setValueYesOrNot(dataItem,'processing_program_update')}}锛夊垁鍏疯ˉ鍋垮�兼洿鏀癸紙{{setValueYesOrNot(dataItem,'tool_compensation_adjustment')}}锛夐浂鐐瑰亸缃�兼洿鏀癸紙{{setValueYesOrNot(dataItem,'zero_point_offset_value_change')}}锛夊弬鏁颁慨鏀癸紙{{setValueYesOrNot(dataItem,'parameter_modification')}}锛夊叾浠栧洜绱狅紙{{setValueYesOrNot(dataItem,'other_factors')}}锛� + </div> + <br/> + <div style="text-align: left">鍏蜂綋鏇存敼鍐呭锛�</div> + <div style="text-align: left">5.鍙戠敓浜嬫晠鏃舵墍鎵ц鐨勭▼搴忥細{{dataItem.executeNc}}</div> + <div style="text-align: left">6.璁惧鍙戠敓浜嬫晠鏃剁殑鐜拌薄锛�</div> + <div style="text-align: left" v-html="dataItem.accidentPhenomenon.replace(/\n/g,'<br/>')"></div> + <br/> + <div style="text-align: left">7.鎿嶄綔宸ラ噰鍙栦簡鍝簺鎺柦锛堟寜椤哄簭濉啓锛夛細</div> + <div style="text-align: left" v-html="dataItem.measure.replace(/\n/g,'<br/>')"></div> + <div style="text-align: left">8.浜嬫晠鎵�閫犳垚鐨勭粨鏋滐細</div> + <div style="text-align: left" v-html="dataItem.causingResults.replace(/\n/g,'<br/>')"></div> + <br/> + <div style="text-align: right">鎿嶄綔宸ワ細{{dataItem.confirmer_dictText}}</div> + <div style="text-align: right">{{dataItem.confirmTime.split('-')[0]}} 骞� {{dataItem.confirmTime.split('-')[1]}} 鏈� {{dataItem.confirmTime.split('-')[2]}} 鏃�</div> + </td> + </tr> + + <tr style="height: 35px;"> + <td>鍖洪暱</td> + <td colspan="2">{{dataItem.district_dictText}}</td> + <td>涓績涓讳换</td> + <td colspan="2">{{dataItem.centerDirector_dictText}}</td> + </tr> + + <tr> + <td colspan="6" style="padding: 5px"> + <div style="text-align: left">缁翠慨浜哄憳杩涜浜嬫晠鍒嗘瀽锛�</div> + <div style="text-align: left"> + 1.寮�濮嬫鏌ョ殑鏃堕棿锛歿{dataItem.reportStartTime.split('-')[0]}}骞磠{dataItem.reportStartTime.split('-')[1]}}鏈坽{dataItem.reportStartTime.split('-')[2]}}鏃� + </div> + <div style="text-align: left">2.鍙戠敓浜嬫晠鍚庤澶囩殑鐘舵�侊細{{dataItem.equipmentStatus}}</div> + <div style="text-align: left">3.缁翠慨浜哄憳瀵逛簨鏁呭師鍥犵殑鍒嗘瀽锛�</div> + <div style="text-align: left" v-html="dataItem.causeAnalysis.replace(/\n/g,'<br/>')"></div> + <br/> + <div style="text-align: left">4.妫�鏌ョ殑缁撴灉锛歿{dataItem.inspectionResults}}</div> + <div style="text-align: left">5.浜嬫晠鍘熷洜鍒嗘瀽杩囩▼涓墍閲囧彇鐨勭浉鍏宠涓猴細</div> + <div style="text-align: left">{{dataItem.takeSteps}}</div> + <br/> + <div style="text-align: left"> + 6.寤鸿閲囧彇鐨勬帾鏂藉強鏃堕棿鑺傜偣锛歿{dataItem.suggestionTakeStepsTime.split('-')[0]}}骞磠{dataItem.suggestionTakeStepsTime.split('-')[1]}}鏈坽{dataItem.suggestionTakeStepsTime.split('-')[2]}}鏃� + </div> + <div style="text-align: left" v-html="dataItem.suggestionTakeSteps.replace(/\n/g,'<br/>')"></div> + <br/> + <div style="text-align: right">缁翠慨浜哄憳锛歿{dataItem.repairConfirm_dictText}}</div> + <div style="text-align: right">{{dataItem.repairConfirmTime.split('-')[0]}} 骞� {{dataItem.repairConfirmTime.split('-')[1]}} 鏈� {{dataItem.repairConfirmTime.split('-')[2]}} 鏃�</div> + </td> + </tr> + + <tr style="height: 35px;"> + <td>缁翠慨璐熻矗浜�(缁勯暱)</td> + <td colspan="2">{{dataItem.repairGroupLeader_dictText}}</td> + <td>缁翠慨璐熻矗浜�(鍖洪暱)</td> + <td colspan="2">{{dataItem.repairDistrict_dictText}}</td> + </tr> + + <tr> + <td colspan="6" style="padding: 5px"> + <div style="text-align: left">璁惧鎶�鏈笓瀹舵剰瑙侊細</div> + <div style="text-align: left">1.浜嬫晠鍙戠敓鍘熷洜鍒嗘瀽鐨勬牳瀵癸細{{+dataItem.checkAgree===1?'鍚屾剰锛堚垰锛変笉鍚屾剰锛堬級':'鍚屾剰锛堬級涓嶅悓鎰忥紙鈭氾級'}}</div> + <div style="text-align: left">涓嶅悓鎰忕殑鍘熷洜鍙婂垎鏋愶細{{!dataItem.disagreeReason?'鏃�':dataItem.disagreeReason}}</div> + <br/> + <div style="text-align: left">2.鏁存敼鎺柦锛歿{dataItem.rectificationMeasures}}</div> + <br/> + <div style="text-align: left">3.浜嬫晠缁撹锛歿{dataItem.accidentConclusion}}</div> + <br/> + <div style="text-align: right">鎶�鏈礋璐d汉锛歿{dataItem.technicalDirector_dictText}}</div> + <div style="text-align: right">{{dataItem.technicalDirectorTime.split('-')[0]}} 骞� {{dataItem.technicalDirectorTime.split('-')[1]}} 鏈� {{dataItem.technicalDirectorTime.split('-')[2]}} 鏃�</div> + </td> + </tr> + + <tr style="height: 35px;"> + <td>鎶�鏈富绠″绾ч瀵�</td> + <td colspan="2">{{dataItem.technicalDirectorLeader_dictText}}</td> + <td>涓荤閮ㄧ骇棰嗗</td> + <td colspan="2">{{dataItem.technicalDirectorPart_dictText}}</td> + </tr> + + <tr> + <td colspan="6" style="border: none"> + 濉啓璇存槑锛氬璁惧浜嬫晠鏈�犳垚浜у搧璐ㄩ噺闂锛屽垯搴熷搧浠跺彿銆佸簾鍝佷欢鏁般�佸簾鍝佷环鍊兼爮濉啓鈥�/鈥濄�� + </td> + </tr> + </tbody> + </table> + </div> + </div> + </a-spin> + + <template slot="footer"> + <a-button @click="handleCancel">鍏抽棴</a-button> + <a-button type="primary" @click="handleExportToExcel">瀵煎嚭</a-button> + <a-button type="primary" v-print="'#dataTable'">鎵撳嵃</a-button> + </template> + </j-modal> +</template> + +<script> + import { getAction } from '@/api/manage' + import $ from 'jquery' + import '@/components/table2excel/table2excel' + + export default { + name: 'EamAccidentsRegisterBatchPrintModal', + data() { + return { + visible: false, + spinning: false, + dataSource: [], + url: { + list: '/eam/eamReportAccidentsRegister/batchExport' + } + } + }, + methods: { + /** + * 鎵归噺棰勮 + * @param ids String 涓婚〉闈㈠垪琛ㄥ嬀閫塱ds + */ + handlePreview(ids) { + this.visible = true + this.spinning = true + this.dataSource = [] + const that = this + getAction(this.url.list, { ids }) + .then(res => { + if (res.success) that.dataSource = res.result + }) + .finally(() => { + that.spinning = false + }) + }, + + // 瀵煎嚭鍒癊xcel + handleExportToExcel() { + document.querySelectorAll('table.import-table').forEach(element => { + console.log('element', element.id) + $(element).table2excel({ + exclude: '.noExl', + name: 'Excel Document Name', + filename: '璁惧浜嬫晠鐧昏琛�-' + element.id, + exclude_img: true, + fileext: '.xls', + exclude_links: true, + exclude_inputs: false + }) + }) + }, + + /** + * 璁剧疆鍙樺姩鍥犵礌鍊� + * @param dataItem 瀵瑰簲瀵硅薄 + * @param value 瀛楀吀鍊� + * @returns {string} 鏄�/鍚� + */ + setValueYesOrNot(dataItem, value) { + return dataItem.variableFactorsValue !== value ? '鍚�' : '鏄�' + }, + + handleCancel() { + this.close() + }, + + close() { + this.$emit('close') + this.visible = false + if (this.$refs.form) this.$refs.form.clearValidate() + } + } + } +</script> + +<style scoped lang="less"> + /deep/ .ant-modal { + height: 90%; + overflow: hidden; + + .ant-modal-content { + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; + + ::-webkit-scrollbar { + width: 8px; + height: 8px; + } + + .ant-modal-body { + flex: 1; + overflow: auto; + } + } + } + + .table-container:not(:last-child) { + margin-bottom: 20px; + } + + table { + width: 100%; + text-align: center; + table-layout: fixed; + + td, th { + border: 1px solid #000; + } + + td.vertical-display { + writing-mode: vertical-lr; + letter-spacing: 5px; + padding: 5px 0; + } + } +</style> \ No newline at end of file diff --git a/src/views/eam/repair/modules/EamThreeNoSpareAnalysisBatchPrintModal.vue b/src/views/eam/repair/modules/EamThreeNoSpareAnalysisBatchPrintModal.vue new file mode 100644 index 0000000..0c3e9d5 --- /dev/null +++ b/src/views/eam/repair/modules/EamThreeNoSpareAnalysisBatchPrintModal.vue @@ -0,0 +1,190 @@ +<template> + <j-modal title="棰勮锛堜粎鍙瑙堝凡瀹屾垚宸ュ崟锛�" :width="948" :visible="visible" switchFullscreen centered + :mask-closable="false" @cancel="handleCancel" cancelText="鍏抽棴"> + <a-spin :spinning="spinning" style="height: 100%"> + <div id="dataTable"> + + <div v-for="dataItem in dataSource" class="table-container"> + <div style="page-break-before:always"></div> + + <table class="import-table"> + <thead> + <tr> + <td colspan="10" style="border: none;"> + <div style="text-align: right">{{dataItem.hfCode}}</div> + </td> + </tr> + </thead> + + <tbody> + <tr style="height: 48px;"> + <th colspan="10" style="border: none;font-size: 20px">鈥滀笁涓嶆斁杩囩殑鍘熷垯鈥濆垎鏋愯〃</th> + </tr> + + <tr> + <th colspan="10" style="border: none;font-size: 20px;"> + <div style="text-align: left">鈥滀笁涓嶆斁杩囩殑鍘熷垯鈥濆垎鏋愶細</div> + <div style="text-align: left">1銆佷簨鏁呭師鍥犲垎鏋愪笉娓呬笉鏀捐繃銆�</div> + <div style="text-align: left">2銆佽矗浠昏�呭拰缇や紬鏈彈鍒版暀鑲蹭笉鏀捐繃銆�</div> + <div style="text-align: left">3銆佹病鏈夐槻鑼冩帾鏂戒笉鏀捐繃銆�</div> + </th> + </tr> + + <tr style="height: 35px"> + <td colspan="10"> + <div style="text-align: left">浜嬫晠鍘熷洜鍒嗘瀽锛歿{dataItem.causeAnalysis}}</div> + </td> + </tr> + + <tr> + <td colspan="10" style="padding: 5px"> + <div style="text-align: left"> + 鏄惁瀵规搷浣滆�呭強鐩稿叧璐d换浜鸿繘琛屽煿璁暀鑲诧細{{+dataItem.isTrainingEducation===1?'鏄紙鈭氾級鍚︼紙锛�':'鏄紙锛夊惁锛堚垰锛�'}} + </div> + <div style="text-align: left">鍩硅褰㈠紡锛歿{dataItem.trainingFormat}}</div> + <div style="text-align: left">鍩硅鍐呭鍖呮嫭锛�</div> + <div style="text-align: left" v-html="dataItem.trainingContent.replace(/\n/g,'<br/>')"></div> + <template v-for="item in 5-dataItem.trainingContent.split('\n').length"><br/></template> + <div style="text-align: left">鎺ュ彈鍩硅浜哄憳绛惧瓧锛歿{dataItem.trainingUser_dictText}}</div> + </td> + </tr> + + <tr> + <td colspan="10" style="padding: 5px"> + <div style="text-align: left">鐩墠宸插疄鏂斤紙锛夐璁″疄鏂斤紙锛夌殑棰勯槻鎺柦</div> + <div style="text-align: left" v-html="dataItem.preventionMeasures.replace(/\n/g,'<br/>')"></div> + <template v-for="item in 5-dataItem.preventionMeasures.split('\n').length"><br/></template> + </td> + </tr> + + <tr> + <td colspan="5" style="border: none"> + <div style="text-align: left">濉啓浜猴細{{dataItem.createBy_dictText}}</div> + </td> + <td colspan="5" style="border: none"> + <div style="text-align: right">鍗曚綅棰嗗锛歿{dataItem.unitLeader_dictText}}</div> + </td> + </tr> + </tbody> + </table> + </div> + </div> + </a-spin> + + <template slot="footer"> + <a-button @click="handleCancel">鍏抽棴</a-button> + <a-button type="primary" @click="handleExportToExcel">瀵煎嚭</a-button> + <a-button type="primary" v-print="'#dataTable'">鎵撳嵃</a-button> + </template> + </j-modal> +</template> + +<script> + import { getAction } from '@/api/manage' + import $ from 'jquery' + import '@/components/table2excel/table2excel' + + export default { + name: 'EamThreeNoSpareAnalysisBatchPrintModal', + data() { + return { + visible: false, + spinning: false, + dataSource: [], + url: { + list: '/eam/eamReportThreeNoSpare/batchExport' + } + } + }, + methods: { + /** + * 鎵归噺棰勮 + * @param ids String 涓婚〉闈㈠垪琛ㄥ嬀閫塱ds + */ + handlePreview(ids) { + this.visible = true + this.spinning = true + this.dataSource = [] + const that = this + getAction(this.url.list, { ids }) + .then(res => { + if (res.success) that.dataSource = res.result + }) + .finally(() => { + that.spinning = false + }) + }, + + // 瀵煎嚭鍒癊xcel + handleExportToExcel() { + document.querySelectorAll('table.import-table').forEach(item => { + $(item).table2excel({ + exclude: '.noExl', + name: 'Excel Document Name', + filename: '鈥滀笁涓嶆斁杩囩殑鍘熷垯鈥濆垎鏋愯〃-', + exclude_img: true, + fileext: '.xls', + exclude_links: true, + exclude_inputs: false + }) + }) + + }, + + handleCancel() { + this.close() + }, + + close() { + this.$emit('close') + this.visible = false + if (this.$refs.form) this.$refs.form.clearValidate() + } + } + } +</script> + +<style scoped lang="less"> + /deep/ .ant-modal { + height: 90%; + overflow: hidden; + + .ant-modal-content { + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; + + ::-webkit-scrollbar { + width: 8px; + height: 8px; + } + + .ant-modal-body { + flex: 1; + overflow: auto; + } + } + } + + .table-container:not(:last-child) { + margin-bottom: 20px; + } + + table { + width: 100%; + text-align: center; + table-layout: fixed; + + td, th { + border: 1px solid #000; + } + + td.vertical-display { + transform: rotate(360deg); + writing-mode: vertical-lr; + letter-spacing: 5px; + padding: 10px 0; + } + } +</style> \ No newline at end of file -- Gitblit v1.9.3