From af1d10f65a06adfac9bac35ead79c4522bb0ba13 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期二, 19 十一月 2024 13:32:44 +0800 Subject: [PATCH] 1. 修改模板,使表格之间有空行 2. 修复图片尺寸错误问题 --- src/views/fysp/data-product/ProdSceneReport.vue | 196 ++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 170 insertions(+), 26 deletions(-) diff --git a/src/views/fysp/data-product/ProdSceneReport.vue b/src/views/fysp/data-product/ProdSceneReport.vue index a6abc18..0c55424 100644 --- a/src/views/fysp/data-product/ProdSceneReport.vue +++ b/src/views/fysp/data-product/ProdSceneReport.vue @@ -13,12 +13,13 @@ <template #main> <el-scrollbar class="el-scrollbar" v-loading="mainLoading"> <CompSceneConstructionInfo - title="A銆佸伐鍦板熀鏈俊鎭�" + title="A銆佸熀鏈俊鎭�" + :scene="formScene" :form-info="formSubScene" /> <div><el-text type="">闄勫浘鐗囷細</el-text></div> <CompImgInfo - title="鏂藉伐閾墝" + v-model:title="imgTitle" :img-src="sceneImg.url" @change="anyPhotoDialog = true" ></CompImgInfo> @@ -29,31 +30,56 @@ v-for="(item, i) in deviceList" :key="i" down-title - :title="item._deviceTypeName" + v-model:title="item._deviceTypeName" :img-src="item._showStatusPic" - @change="showDevicePhotoDialog(item)" + @change="showDevicePhotoDialog(item, i)" ></CompImgInfo> </el-space> <el-divider /> <el-text tag="h1">C銆佺幇鍦烘薄鏌撻棶棰樹笌鏁存敼鎯呭喌</el-text> + <el-space wrap> + <CompProblemTable + v-for="(item, i) in curProList" + :key="i" + :problem="item" + @change="(value) => handleProPicSelect(value, i)" + ></CompProblemTable> + </el-space> + <el-divider /> + <el-text tag="h1">D銆佹壃灏樻薄鏌撻槻娌诲缓璁�</el-text> + <div class="p-b-8"> + 閽堝璇ュ伐鍦版湰鏈熷贰鏌ュ彂鐜扮殑闂锛岃瘎浼颁负鎵皹姹℃煋闃叉不 + <el-radio-group v-model="radioStandard" size="default"> + <el-radio value="瑙勮寖" border>瑙勮寖</el-radio> + <el-radio value="鍩烘湰瑙勮寖" border>鍩烘湰瑙勮寖</el-radio> + <el-radio value="涓嶈鑼�" border>涓嶈鑼�</el-radio> + <el-radio value="涓ラ噸涓嶈鑼�" border>涓ラ噸涓嶈鑼�</el-radio> + </el-radio-group> + 宸ュ湴锛屽缓璁宸ュ湴涓ユ牸鎸夌収銆婃壃灏橀槻娌绘柟妗堛�嬨�併�婃壃灏橀槻娌绘壙璇轰功銆嬨�併�婃枃鏄庢柦宸ョ鐞嗚鑼冦�嬨�併�婄簿缁嗗寲绠$悊鎸囨爣銆嬬瓑鐩稿叧鏂囦欢钀藉疄鏁存敼銆� + </div> + <el-row justify="center" style="height: 200px"> + <el-button + icon="Download" + type="primary" + :loading="docLoading" + :disabled="!sceneImg.url" + @click="genWord()" + > + 鐢熸垚鎶ュ憡 + </el-button> + </el-row> </el-scrollbar> </template> </BaseContentLayout> - <el-dialog - v-model="anyPhotoDialog" - width="66%" - title="浠绘剰鍥剧墖" - destroy-on-close - > - <ArbitraryPhoto - :max-select="1" - :readonly="false" - :subtask="curSubtask.data" - @selectByAnyPhonoEvent="handleSelectAnyPhoto" - :defaultFile="[sceneImg]" - > - </ArbitraryPhoto> - </el-dialog> + <ArbitraryPhoto + v-if="anyPhotoDialog" + v-model:dialog-visible="anyPhotoDialog" + :max-select="1" + :readonly="false" + :subtask="curSubtask.data" + @submit="handleSelectAnyPhoto" + :defaultFile="[sceneImg]" + ></ArbitraryPhoto> <el-dialog title="璁惧鍥剧墖" width="66%" @@ -74,13 +100,18 @@ import taskApi from '@/api/fysp/taskApi'; import sceneApi from '@/api/fysp/sceneApi'; import deviceApi from '@/api/fysp/deviceApi'; +import evaluateApi from '@/api/fysp/evaluateApi'; import { formatDeviceList } from '@/model/fysp/device'; import { enumDevice, toLabel } from '@/enum/device/device'; +import { exportDocx } from '@/utils/doc'; +import right_triangle from '@/assets/image/right_triangle.png'; import CompSceneConstructionInfo from '@/views/fysp/scene/CompSceneConstructionInfo.vue'; import ArbitraryPhoto from '@/views/fysp/check/components/ArbitraryPhoto.vue'; import CompDevicePhono from '@/views/fysp/check/components/CompDevicePhono.vue'; import CompImgInfo from '@/views/fysp/data-product/components/CompImgInfo.vue'; +import CompProblemTable from './components/CompProblemTable.vue'; +import dayjs from 'dayjs'; /************************* 宸︿晶宸℃煡浠诲姟閫夊崟 **********************************/ const curSubtask = ref({}); @@ -140,15 +171,20 @@ mainLoading.value = false; }); fetchDeviceList(s); - fetchProblems(s) + fetchProblems(s); + fetchEvaluation(s); } /************************* 鍦烘櫙鍩烘湰淇℃伅 **********************************/ +const imgTitle = ref('鏂藉伐閾墝'); +const formScene = ref({}); const formSubScene = ref({}); function fetchSceneInfo(sceneId) { + formSubScene.value = {}; + sceneImg.value = {}; return sceneApi.getSceneDetail(sceneId).then((res) => { //鍦烘櫙 - // if (res.data.scense) formScene = res.data.scense; + if (res.data.scense) formScene.value = res.data.scense; formSubScene.value = res.data.subScene ? res.data.subScene : {}; // if (res.data.sceneDevice) { // formSceneDevice = res.data.sceneDevice; @@ -166,19 +202,20 @@ function handleSelectAnyPhoto(data) { anyPhotoDialog.value = false; if (data.length > 0) { - sceneImg.value = { url: data[0].url }; + sceneImg.value = data[0]; } } /************************* 鍦烘櫙璁惧淇℃伅 **********************************/ // 璁惧鍥剧墖閫夋嫨瀵硅瘽妗� const deiveceImgDialog = ref(false); -const showDeviceImg = ref({}); +const showDeviceIndex = ref(0); const showDeviceImgList = ref([]); // 璁惧鍥剧墖鍒楄〃 const deviceList = ref([]); -function showDevicePhotoDialog(device) { +function showDevicePhotoDialog(device, index) { + showDeviceIndex.value = index; deiveceImgDialog.value = true; showDeviceImgList.value = []; let imgList = []; @@ -194,7 +231,7 @@ }) ); }); - console.log(imgList); + // console.log(imgList); showDeviceImgList.value = imgList; } @@ -202,7 +239,7 @@ function handleSelectDevicePhoto(data) { deiveceImgDialog.value = false; if (data.length > 0) { - showDeviceImg.value = { url: data[0].url }; + deviceList.value[showDeviceIndex.value]._showStatusPic = data[0]._picUrl; } } @@ -259,13 +296,120 @@ } } /************************* 鐜板満宸℃煡鎯呭喌锛堥棶棰樹笌鏁存敼锛� **********************************/ + +const problemDesc = ref(''); //褰撳墠浠诲姟鐨勯棶棰樺垪琛� const curProList = ref([]); +const month = ref(''); +const selectedProList = ref([]); function fetchProblems(s) { + curProList.value = []; taskApi.getProBySubtask(s.data.stGuid).then((res) => { curProList.value = res; + + // 鐢熸垚宸℃煡鎻忚堪鏂囨湰 + month.value = dayjs(s.data.stPlanTime).month() + 1; + const proCount = curProList.value.length; + problemDesc.value = `${month.value}鏈堝贰鏌ュ叡璁″彂鐜�${proCount}涓棶棰榒; + if (proCount > 0) { + problemDesc.value += '锛�'; + curProList.value.forEach((p, i) => { + problemDesc.value += `${i + 1}銆�${p.problemname}锛沗; + }); + problemDesc.value += '濡備笅鍥炬墍绀猴細'; + } else { + problemDesc.value += '銆�'; + } + + // 鐢熸垚閫変腑鐨勯棶棰樺拰鏁存敼鍥剧墖鎻忚堪 + selectedProList.value = curProList.value.map((v) => { + return {}; + }); }); } + +function handleProPicSelect(value, index) { + selectedProList.value[index] = value; +} /************************* 鎵皹闃叉不寤鸿 **********************************/ +const radioStandard = ref('瑙勮寖'); +function fetchEvaluation(s) { + evaluateApi.fetchItemEvaluation(s.data.stGuid).then((res) => { + radioStandard.value = res.data.grade; + }); +} + +/************************* 鐢熸垚鎶ュ憡 **********************************/ + +const docLoading = ref(false); +// 鐢熸垚word鎶ュ憡 +function genWord() { + const _deviceList = []; + for (let i = 0; i < deviceList.value.length; i += 2) { + const d1 = deviceList.value[i]; + const d2 = + i + 1 < deviceList.value.length ? deviceList.value[i + 1] : undefined; + _deviceList.push({ + _showStatusPic_1: d1._showStatusPic, + _deviceTypeName_1: d1._deviceTypeName, + // hasPic2: d2 ? true : false, + _showStatusPic_2: d2 ? d2._showStatusPic : right_triangle, + _deviceTypeName_2: d2 ? d2._deviceTypeName : '', + }); + } + const param = { + index: formScene.value.index, + sceneName: formScene.value.name, + projectType: formSubScene.value.csProjectType, + stage: formSubScene.value.siExtension1, + startTime: formSubScene.value.csStartTime, + endTime: formSubScene.value.csEndTime, + leftTime: formSubScene.value.csLeftTime, + location: formScene.value.location, + floorSpace: formSubScene.value.csFloorSpace, + constructionArea: formSubScene.value.csConstructionArea, + constructionAreaPerMonth: formSubScene.value.csConstructionAreaPerMonth, + contacts: formScene.value.contacts, + contactst: formScene.value.contactst, + securityOfficer: formSubScene.value.csSecurityOfficer, + securityOfficerTel: formSubScene.value.csSecurityOfficerTel, + constructionUnit: formSubScene.value.csConstructionUnit, + employerUnit: formSubScene.value.csEmployerUnit, + sceneType: formScene.value.type, + imgTitle: imgTitle.value, + imgTitle_url: sceneImg.value.url, + deviceList: _deviceList, + problemDesc: problemDesc.value, + problemList: selectedProList.value.map((v) => { + return { + month: month.value, + ...v + }; + }), + standard_1: radioStandard.value == '瑙勮寖', + standard_2: radioStandard.value == '鍩烘湰瑙勮寖', + standard_3: radioStandard.value == '涓嶈鑼�', + standard_4: radioStandard.value == '涓ラ噸瑙勮寖' + }; + for (const key in param) { + if (param[key] == undefined) { + param[key] = ''; + } + } + const date = dayjs(curSubtask.value.data.stPlanTime).format('MM鏈圖D鏃�'); + console.log(param); + + docLoading.value = true; + exportDocx( + '/鍗曚綋妯$増-v1.0.docx', + param, + `${param.sceneName}鍗曚綋锛�${date}锛�.docx`, + { + horizontalHeight: 368, + verticalWidth: 266, + scale: 1.367 + } + ).finally(() => (docLoading.value = false)); +} </script> -- Gitblit v1.9.3