From 9a61e46d96536f3299e57f7259ae1c9972256ec6 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期二, 30 九月 2025 09:42:09 +0800
Subject: [PATCH] 1. 隐藏未完成的账户匹配页面 2. 根据第三方新的接口文档修改接口url地址
---
src/views/fysp/data-product/ProdSceneReport.vue | 238 +++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 199 insertions(+), 39 deletions(-)
diff --git a/src/views/fysp/data-product/ProdSceneReport.vue b/src/views/fysp/data-product/ProdSceneReport.vue
index a6abc18..d9d626d 100644
--- a/src/views/fysp/data-product/ProdSceneReport.vue
+++ b/src/views/fysp/data-product/ProdSceneReport.vue
@@ -5,6 +5,7 @@
</template>
<template #aside>
<SideList
+ legend
:items="subtasks"
:loading="sideLoading"
@item-click="chooseSubtask"
@@ -12,13 +13,15 @@
</template>
<template #main>
<el-scrollbar class="el-scrollbar" v-loading="mainLoading">
+ <div></div>
<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,32 +32,65 @@
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>
- <el-dialog
+ <ArbitraryPhoto
+ v-if="anyPhotoDialog"
+ v-model:dialog-visible="anyPhotoDialog"
+ :max-select="1"
+ :readonly="false"
+ :subtask="curSubtask.data"
+ @submit="handleSelectAnyPhoto"
+ :defaultFile="[sceneImg]"
+ ></ArbitraryPhoto>
+ <FYImageSelectDialog
+ v-model:dialog-visible="deiveceImgDialog"
+ title="璁惧鍥剧墖"
+ :max-select="1"
+ :typeList="showDeviceTypeList"
+ :typeImgMap="showDeviceImgMap"
+ @submit="handleSelectDevicePhoto"
+ ></FYImageSelectDialog>
+ <!-- <el-dialog
title="璁惧鍥剧墖"
width="66%"
v-model="deiveceImgDialog"
@@ -62,25 +98,31 @@
>
<CompDevicePhono
@selectPhonoEvent="handleSelectDevicePhoto"
- :imgPathsDataSource="showDeviceImgList"
+ :imgPathsDataSource="showDeviceImgMap"
>
</CompDevicePhono>
- </el-dialog>
+ </el-dialog> -->
</template>
<script setup>
import { ref, computed } from 'vue';
import { $fysp } from '@/api/index';
+import problemApi from '@/api/fysp/problemApi';
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 ProCheckProxy from '@/views/fysp/check/ProCheckProxy';
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({});
@@ -115,8 +157,9 @@
taskApi.getSubtaskSummary(param).then((res) => {
const list = [];
res.forEach((s) => {
- const t = getSubtaskType(s);
+ const t = ProCheckProxy.getSubtaskType(s);
list.push({
+ status: s.subtask.status,
type: t,
title: s.stName,
categoly: s.stPlanTime.split('T')[0],
@@ -140,15 +183,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,43 +214,45 @@
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 showDeviceImgList = ref([]);
+const showDeviceIndex = ref(0);
+const showDeviceTypeList = ref([]);
+const showDeviceImgMap = ref(new Map());
// 璁惧鍥剧墖鍒楄〃
const deviceList = ref([]);
-function showDevicePhotoDialog(device) {
+function showDevicePhotoDialog(device, index) {
+ showDeviceIndex.value = index;
deiveceImgDialog.value = true;
- showDeviceImgList.value = [];
+ showDeviceTypeList.value = [
+ { typeId: device.topTypeId, typeName: device._deviceTypeName }
+ ];
+ showDeviceImgMap.value.clear();
let imgList = [];
device._status
.map((s) => s._picUrls)
.forEach((pics) => {
imgList = imgList.concat(
pics.map((p) => {
- return {
- topTypeId: device.topTypeId,
- _picUrl: p
- };
+ return { url: p };
})
);
});
- console.log(imgList);
+ // console.log(imgList);
- showDeviceImgList.value = imgList;
+ showDeviceImgMap.value.set(device.topTypeId, imgList);
}
function handleSelectDevicePhoto(data) {
deiveceImgDialog.value = false;
if (data.length > 0) {
- showDeviceImg.value = { url: data[0].url };
+ deviceList.value[showDeviceIndex.value]._showStatusPic = data[0].url;
}
}
@@ -259,13 +309,123 @@
}
}
/************************* 鐜板満宸℃煡鎯呭喌锛堥棶棰樹笌鏁存敼锛� **********************************/
+
+const problemDesc = ref('');
//褰撳墠浠诲姟鐨勯棶棰樺垪琛�
const curProList = ref([]);
+const month = ref('');
+const selectedProList = ref([]);
function fetchProblems(s) {
- taskApi.getProBySubtask(s.data.stGuid).then((res) => {
+ curProList.value = [];
+ problemApi.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