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 | 432 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 430 insertions(+), 2 deletions(-)
diff --git a/src/views/fysp/data-product/ProdSceneReport.vue b/src/views/fysp/data-product/ProdSceneReport.vue
index 906fad3..d9d626d 100644
--- a/src/views/fysp/data-product/ProdSceneReport.vue
+++ b/src/views/fysp/data-product/ProdSceneReport.vue
@@ -1,3 +1,431 @@
<template>
- 鍦烘櫙鎶ュ憡绠$悊
-</template>
\ No newline at end of file
+ <BaseContentLayout>
+ <template #header>
+ <SearchBar @on-submit="search"> </SearchBar>
+ </template>
+ <template #aside>
+ <SideList
+ legend
+ :items="subtasks"
+ :loading="sideLoading"
+ @item-click="chooseSubtask"
+ ></SideList>
+ </template>
+ <template #main>
+ <el-scrollbar class="el-scrollbar" v-loading="mainLoading">
+ <div></div>
+ <CompSceneConstructionInfo
+ title="A銆佸熀鏈俊鎭�"
+ :scene="formScene"
+ :form-info="formSubScene"
+ />
+ <div><el-text type="">闄勫浘鐗囷細</el-text></div>
+ <CompImgInfo
+ v-model:title="imgTitle"
+ :img-src="sceneImg.url"
+ @change="anyPhotoDialog = true"
+ ></CompImgInfo>
+ <el-divider />
+ <el-text tag="h1">B銆佷富瑕佹薄鏌撻槻娌昏鏂�</el-text>
+ <el-space wrap>
+ <CompImgInfo
+ v-for="(item, i) in deviceList"
+ :key="i"
+ down-title
+ v-model:title="item._deviceTypeName"
+ :img-src="item._showStatusPic"
+ @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>
+ <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"
+ destroy-on-close
+ >
+ <CompDevicePhono
+ @selectPhonoEvent="handleSelectDevicePhoto"
+ :imgPathsDataSource="showDeviceImgMap"
+ >
+ </CompDevicePhono>
+ </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 CompImgInfo from '@/views/fysp/data-product/components/CompImgInfo.vue';
+import CompProblemTable from './components/CompProblemTable.vue';
+import dayjs from 'dayjs';
+
+/************************* 宸︿晶宸℃煡浠诲姟閫夊崟 **********************************/
+const curSubtask = ref({});
+const subtasks = ref([]);
+const sideLoading = ref(false);
+const mainLoading = ref(false);
+//鑾峰彇浠诲姟闂鐨勫鏍告儏鍐�
+function getSubtaskType(s) {
+ let type = 0;
+ if (s.proNum == 0) {
+ type = 2;
+ } else if (s.proCheckedNum == 0) {
+ type = 0;
+ } else if (s.proCheckedNum < s.proNum) {
+ type = 1;
+ } else {
+ type = 2;
+ }
+ return type;
+}
+//鏌ヨ瀛愪换鍔$粺璁′俊鎭�
+function search(formSearch) {
+ // this.topTask = formSearch.topTask;
+ sideLoading.value = true;
+ mainLoading.value = true;
+ // this.curProList = [];
+ curSubtask.value = {};
+ const param = {
+ topTaskId: formSearch.topTask.tguid,
+ sceneTypeId: formSearch.sceneTypeId
+ };
+ taskApi.getSubtaskSummary(param).then((res) => {
+ const list = [];
+ res.forEach((s) => {
+ const t = ProCheckProxy.getSubtaskType(s);
+ list.push({
+ status: s.subtask.status,
+ type: t,
+ title: s.stName,
+ categoly: s.stPlanTime.split('T')[0],
+ data: s
+ });
+ });
+ subtasks.value = list;
+ if (list.length == 0) {
+ sideLoading.value = false;
+ mainLoading.value = false;
+ }
+ });
+}
+//鐐瑰嚮宸︿晶鑿滃崟浠诲姟浜嬩欢
+function chooseSubtask(s) {
+ sideLoading.value = false;
+ mainLoading.value = true;
+ curSubtask.value = s;
+
+ fetchSceneInfo(s.data.sceneId).finally(() => {
+ mainLoading.value = false;
+ });
+ 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.value = res.data.scense;
+ formSubScene.value = res.data.subScene ? res.data.subScene : {};
+ // if (res.data.sceneDevice) {
+ // formSceneDevice = res.data.sceneDevice;
+ // } else {
+ // formSceneDevice = {
+ // sGuid: formScene.guid,
+ // };
+ // }
+ });
+}
+
+// 浠绘剰鎷嶅浘鐗囬�夋嫨瀵硅瘽妗�
+const anyPhotoDialog = ref(false);
+const sceneImg = ref({});
+function handleSelectAnyPhoto(data) {
+ anyPhotoDialog.value = false;
+ if (data.length > 0) {
+ sceneImg.value = data[0];
+ }
+}
+/************************* 鍦烘櫙璁惧淇℃伅 **********************************/
+
+// 璁惧鍥剧墖閫夋嫨瀵硅瘽妗�
+const deiveceImgDialog = ref(false);
+const showDeviceIndex = ref(0);
+const showDeviceTypeList = ref([]);
+const showDeviceImgMap = ref(new Map());
+// 璁惧鍥剧墖鍒楄〃
+const deviceList = ref([]);
+
+function showDevicePhotoDialog(device, index) {
+ showDeviceIndex.value = index;
+ deiveceImgDialog.value = true;
+ 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 { url: p };
+ })
+ );
+ });
+ // console.log(imgList);
+
+ showDeviceImgMap.value.set(device.topTypeId, imgList);
+}
+
+function handleSelectDevicePhoto(data) {
+ deiveceImgDialog.value = false;
+ if (data.length > 0) {
+ deviceList.value[showDeviceIndex.value]._showStatusPic = data[0].url;
+ }
+}
+
+const deviceTopTypes = [
+ { id: 0, label: '鐩戞帶璁惧' },
+ { id: 1, label: '娌荤悊璁惧' }
+ // { id: 2, label: '鐢熶骇璁惧' }
+];
+
+function fetchDeviceList(s) {
+ deviceList.value = [];
+ for (const deviceTopTypeElement of deviceTopTypes) {
+ const topTypeId = deviceTopTypeElement.id;
+ deviceApi
+ .fetchDevices(s.data.sceneId, topTypeId)
+ .then((res) => {
+ return formatDeviceList(res.data);
+ })
+ .then((result) => {
+ result.forEach((r) => {
+ const param = {
+ deviceId: r.id,
+ sceneId: r.sceneGuid,
+ deviceTypeId: topTypeId
+ };
+ deviceApi
+ .fetchDeviceStatus(param)
+ .then((res) => {
+ res.data.forEach((e) => {
+ if (e.dlPicUrl && e.dlPicUrl.trim() != '') {
+ e._picUrls = e.dlPicUrl
+ .split(';')
+ .map((v) => $fysp.imgUrl + v);
+ } else {
+ e._picUrls = [];
+ }
+ });
+ return res;
+ })
+ .then((res) => {
+ if (res.data.length > 0 && res.data[0]._picUrls.length > 0) {
+ r._showStatusPic = res.data[0]._picUrls[0];
+ }
+ r._status = res.data;
+ r.topTypeId = topTypeId;
+ r._deviceTypeName = toLabel(r.sceneTypeId, topTypeId, [
+ r.typeId,
+ r.subtypeId
+ ]).join('-');
+ deviceList.value.push(r);
+ });
+ });
+ });
+ }
+}
+/************************* 鐜板満宸℃煡鎯呭喌锛堥棶棰樹笌鏁存敼锛� **********************************/
+
+const problemDesc = ref('');
+//褰撳墠浠诲姟鐨勯棶棰樺垪琛�
+const curProList = ref([]);
+const month = ref('');
+const selectedProList = ref([]);
+
+function fetchProblems(s) {
+ 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