From 83ac952bb66518e7ce190b08741fdef28edcfd4f Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期三, 20 十一月 2024 09:21:36 +0800 Subject: [PATCH] 1. 修复场景报告没有图片无法下载的问题 --- src/views/fysp/data-product/ProdSceneReport.vue | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 155 insertions(+), 25 deletions(-) diff --git a/src/views/fysp/data-product/ProdSceneReport.vue b/src/views/fysp/data-product/ProdSceneReport.vue index 0e94a8d..dd38e5c 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,9 +30,9 @@ 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 /> @@ -41,28 +42,44 @@ 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%" @@ -83,14 +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({}); @@ -151,16 +172,19 @@ }); fetchDeviceList(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; @@ -185,12 +209,13 @@ // 璁惧鍥剧墖閫夋嫨瀵硅瘽妗� 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 = []; @@ -206,7 +231,7 @@ }) ); }); - console.log(imgList); + // console.log(imgList); showDeviceImgList.value = imgList; } @@ -214,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; } } @@ -271,14 +296,119 @@ } } /************************* 鐜板満宸℃煡鎯呭喌锛堥棶棰樹笌鏁存敼锛� **********************************/ + +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 ? d1._showStatusPic : right_triangle, + _deviceTypeName_1: d1._deviceTypeName, + // hasPic2: d2 ? true : false, + _showStatusPic_2: d2 ? (d2._showStatusPic ? d2._showStatusPic : right_triangle) : 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鏃�'); + + 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