From 3d6addd2c0817b30bd328605cb048ca9698742a6 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 28 二月 2025 16:50:17 +0800
Subject: [PATCH] 修复新建子任务时,未提前建立日任务的bug

---
 src/views/fysp/task/components/CompSubTaskSelect.vue                      |   66 ++-
 src/views/fysp/scene/CompSceneMixingPlantInfo.vue                         |  338 +++++++++++++++++++++
 src/components.d.ts                                                       |   22 +
 src/api/fysp/problemApi.js                                                |    2 
 src/views/fysp/task/components/CompTaskEdit.vue                           |    2 
 src/views/fysp/data-product/base-data-product/ProdMonitorTaskInfo.vue     |    4 
 src/views/fysp/scene/CompSceneWharfInfo.vue                               |  305 +++++++++++++++++++
 src/views/fysp/data-product/base-data-product/ProdScenseInfo.vue          |    4 
 src/views/fysp/data-product/base-data-product/ProdTreatmentDeviceInfo.vue |    4 
 src/views/fysp/task/components/CompDayTask.vue                            |    2 
 src/views/fysp/check/components/CompProblemAddOrUpd.vue                   |    2 
 src/views/fysp/check/components/ComChangeEdit.vue                         |    2 
 src/views/fysp/task/components/CompSubTaskList.vue                        |   11 
 src/views/fysp/check/components/CompProblemCard.vue                       |   13 
 src/views/fysp/task/TaskManage.vue                                        |   54 +++
 src/views/fysp/task/components/CompMonitorPlan.vue                        |    2 
 src/views/fysp/evaluation/EvalutationRecord.vue                           |   99 ++++-
 17 files changed, 862 insertions(+), 70 deletions(-)

diff --git a/src/api/fysp/problemApi.js b/src/api/fysp/problemApi.js
index 23b35f2..b5ed2fb 100644
--- a/src/api/fysp/problemApi.js
+++ b/src/api/fysp/problemApi.js
@@ -15,7 +15,7 @@
 
   fetchProblemType({ cityCode, districtCode, sceneTypeId }) {
     const params = `?taskTypeId=1&cityCode=${cityCode}&districtCode=${districtCode}&sceneTypeId=${sceneTypeId}`;
-    return $fysp.get(`problemtype/search${params}`).then((res) => res);
+    return $fysp.get(`problemtype/search${params}`).then((res) => res.data);
   },
 
   /**
diff --git a/src/components.d.ts b/src/components.d.ts
index 0ac0d9e..d9c2fb8 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -13,22 +13,32 @@
     CompGenericWrapper: typeof import('./components/CompGenericWrapper.vue')['default']
     CompQuickSet: typeof import('./components/search-option/CompQuickSet.vue')['default']
     Content: typeof import('./components/core/Content.vue')['default']
+    ElAffix: typeof import('element-plus/es')['ElAffix']
     ElAside: typeof import('element-plus/es')['ElAside']
     ElAvatar: typeof import('element-plus/es')['ElAvatar']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
     ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
     ElButton: typeof import('element-plus/es')['ElButton']
+    ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
+    ElCalendar: typeof import('element-plus/es')['ElCalendar']
     ElCard: typeof import('element-plus/es')['ElCard']
+    ElCascader: typeof import('element-plus/es')['ElCascader']
+    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
     ElCol: typeof import('element-plus/es')['ElCol']
     ElCollapse: typeof import('element-plus/es')['ElCollapse']
     ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
     ElContainer: typeof import('element-plus/es')['ElContainer']
+    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
     ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
     ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
     ElDialog: typeof import('element-plus/es')['ElDialog']
+    ElDivider: typeof import('element-plus/es')['ElDivider']
     ElDrawer: typeof import('element-plus/es')['ElDrawer']
+    ElDropdown: typeof import('element-plus/es')['ElDropdown']
+    ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
+    ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
     ElEmpty: typeof import('element-plus/es')['ElEmpty']
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
@@ -37,25 +47,37 @@
     ElImage: typeof import('element-plus/es')['ElImage']
     ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
+    ElLink: typeof import('element-plus/es')['ElLink']
     ElMain: typeof import('element-plus/es')['ElMain']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup']
     ElOption: typeof import('element-plus/es')['ElOption']
+    ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
+    ElPagination: typeof import('element-plus/es')['ElPagination']
+    ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
     ElPopover: typeof import('element-plus/es')['ElPopover']
+    ElRadio: typeof import('element-plus/es')['ElRadio']
+    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
+    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+    ElSegmented: typeof import('element-plus/es')['ElSegmented']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSpace: typeof import('element-plus/es')['ElSpace']
     ElStep: typeof import('element-plus/es')['ElStep']
     ElSteps: typeof import('element-plus/es')['ElSteps']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
+    ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
     ElTabPane: typeof import('element-plus/es')['ElTabPane']
     ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
     ElText: typeof import('element-plus/es')['ElText']
+    ElTooltip: typeof import('element-plus/es')['ElTooltip']
+    ElTransfer: typeof import('element-plus/es')['ElTransfer']
     ElTree: typeof import('element-plus/es')['ElTree']
     ElUpload: typeof import('element-plus/es')['ElUpload']
     Footer: typeof import('./components/core/Footer.vue')['default']
diff --git a/src/views/fysp/check/components/ComChangeEdit.vue b/src/views/fysp/check/components/ComChangeEdit.vue
index 9bf3d15..b8b5b27 100644
--- a/src/views/fysp/check/components/ComChangeEdit.vue
+++ b/src/views/fysp/check/components/ComChangeEdit.vue
@@ -126,7 +126,7 @@
   mounted() {},
   methods: {
     pictureValidate() {
-      if (this.changeType == 1 && this.fileList.length < 1) {
+      if (this.fileList.length < 1) {
         ElMessage({
           message: '鑷冲皯涓婁紶涓�寮犲浘鐗�',
           type: 'error'
diff --git a/src/views/fysp/check/components/CompProblemAddOrUpd.vue b/src/views/fysp/check/components/CompProblemAddOrUpd.vue
index f6570c1..b1e49ff 100644
--- a/src/views/fysp/check/components/CompProblemAddOrUpd.vue
+++ b/src/views/fysp/check/components/CompProblemAddOrUpd.vue
@@ -422,7 +422,7 @@
         districtCode: this.topTask.districtcode
       };
       problemApi.fetchProblemType(data).then((res) => {
-        this.problemTypeList = res.data;
+        this.problemTypeList = res;
 
         if (this.type == 1) {
           let currProName = String(this.problem.problemname);
diff --git a/src/views/fysp/check/components/CompProblemCard.vue b/src/views/fysp/check/components/CompProblemCard.vue
index 7d28540..afbeb8c 100644
--- a/src/views/fysp/check/components/CompProblemCard.vue
+++ b/src/views/fysp/check/components/CompProblemCard.vue
@@ -38,7 +38,7 @@
       >
     </el-descriptions>
 
-    <el-scrollbar>
+    <el-scrollbar style="width: 70%;">
       <el-descriptions
         title=" "
         :column="2"
@@ -423,6 +423,7 @@
   width: 240px;
   height: 250px;
   border-radius: 4px;
+  margin-bottom: 6px;
 }
 
 .d-index {
@@ -446,14 +447,14 @@
 .d-extra {
 }
 
-.descriptions-label-1 {
-  color: whitesmoke;
-  background: var(--el-color-danger-light-3);
+:deep(.descriptions-label-1) {
+  /* color: whitesmoke; */
+  /* background: var(--el-color-danger-light-3); */
 }
 
 .descriptions-label-2 {
-  color: whitesmoke;
-  background-color: var(--el-color-success-light-3);
+  /* color: whitesmoke; */
+  /* background-color: var(--el-color-success-light-3); */
 }
 </style>
 
diff --git a/src/views/fysp/data-product/base-data-product/ProdMonitorTaskInfo.vue b/src/views/fysp/data-product/base-data-product/ProdMonitorTaskInfo.vue
index e69de29..dc19bf6 100644
--- a/src/views/fysp/data-product/base-data-product/ProdMonitorTaskInfo.vue
+++ b/src/views/fysp/data-product/base-data-product/ProdMonitorTaskInfo.vue
@@ -0,0 +1,4 @@
+<template>
+  1
+</template>
+<script></script>
\ No newline at end of file
diff --git a/src/views/fysp/data-product/base-data-product/ProdScenseInfo.vue b/src/views/fysp/data-product/base-data-product/ProdScenseInfo.vue
index e69de29..dc19bf6 100644
--- a/src/views/fysp/data-product/base-data-product/ProdScenseInfo.vue
+++ b/src/views/fysp/data-product/base-data-product/ProdScenseInfo.vue
@@ -0,0 +1,4 @@
+<template>
+  1
+</template>
+<script></script>
\ No newline at end of file
diff --git a/src/views/fysp/data-product/base-data-product/ProdTreatmentDeviceInfo.vue b/src/views/fysp/data-product/base-data-product/ProdTreatmentDeviceInfo.vue
index e69de29..dc19bf6 100644
--- a/src/views/fysp/data-product/base-data-product/ProdTreatmentDeviceInfo.vue
+++ b/src/views/fysp/data-product/base-data-product/ProdTreatmentDeviceInfo.vue
@@ -0,0 +1,4 @@
+<template>
+  1
+</template>
+<script></script>
\ No newline at end of file
diff --git a/src/views/fysp/evaluation/EvalutationRecord.vue b/src/views/fysp/evaluation/EvalutationRecord.vue
index ad93e21..c47440a 100644
--- a/src/views/fysp/evaluation/EvalutationRecord.vue
+++ b/src/views/fysp/evaluation/EvalutationRecord.vue
@@ -23,7 +23,11 @@
         v-model:value="formSearch.scenetype"
       ></FYOptionScene>
       <!-- 鏃堕棿 -->
-      <FYOptionTime :initValue="false" type="month" v-model:value="formSearch.time"></FYOptionTime>
+      <FYOptionTime
+        :initValue="false"
+        type="month"
+        v-model:value="formSearch.time"
+      ></FYOptionTime>
     </template>
     <template #buttons>
       <!-- <el-button icon="Download" size="default" type="success" @click="download"
@@ -43,9 +47,20 @@
     </template>
 
     <template #table-column="{ size }">
-      <el-table-column fixed="left" sortable="custom" prop="sceneIndex" label="缂栧彿" width="80">
+      <el-table-column
+        fixed="left"
+        sortable="custom"
+        prop="sceneIndex"
+        label="缂栧彿"
+        width="80"
+      >
       </el-table-column>
-      <el-table-column prop="sceneName" :show-overflow-tooltip="true" label="鍚嶇О" width="300">
+      <el-table-column
+        prop="sceneName"
+        :show-overflow-tooltip="true"
+        label="鍚嶇О"
+        width="300"
+      >
       </el-table-column>
       <el-table-column
         prop="subTaskTime"
@@ -54,10 +69,21 @@
         sortable="custom"
         :formatter="timeFormat"
       />
-      <el-table-column prop="evaluation.resultscorebef" label="寰楀垎" width="90" sortable="custom" />
-      <el-table-column prop="evaluation.resultscorebef" label="鐜俊鐮�" width="100">
+      <el-table-column
+        prop="evaluation.resultscorebef"
+        label="寰楀垎"
+        width="90"
+        sortable="custom"
+      />
+      <el-table-column
+        prop="evaluation.resultscorebef"
+        label="鐜俊鐮�"
+        width="100"
+      >
         <template #default="{ row }">
-          <span :style="`color: ${toCode(row).color};`">{{ toCode(row).name }}</span>
+          <span :style="`color: ${toCode(row).color};`">{{
+            toCode(row).name
+          }}</span>
         </template>
       </el-table-column>
 
@@ -112,12 +138,18 @@
             :loading="updateLoading"
             >涓婁紶</el-button
           >
-          <el-button v-show="scoreShow" size="small" type="error" @click="scoreShow = false"
+          <el-button
+            v-show="scoreShow"
+            size="small"
+            type="error"
+            @click="scoreShow = false"
             >鍙栨秷</el-button
           >
         </template>
         <template #default="{ row }">
-          <el-button type="primary" size="small" @click="editRow(row)">鏌ョ湅</el-button>
+          <el-button type="primary" size="small" @click="editRow(row)"
+            >鏌ョ湅</el-button
+          >
         </template>
       </el-table-column>
     </template>
@@ -135,12 +167,25 @@
 
 export default {
   setup() {
-    const { cellClick, cellClassName, handlePaste, setTableData, addRefreshEvent, tableData } =
-      useTablePaste({
-        score1: 8,
-        score2: 9
-      });
-    return { cellClick, cellClassName, handlePaste, setTableData, addRefreshEvent, tableData };
+    const {
+      cellClick,
+      cellClassName,
+      handlePaste,
+      setTableData,
+      addRefreshEvent,
+      tableData
+    } = useTablePaste({
+      score1: 8,
+      score2: 9
+    });
+    return {
+      cellClick,
+      cellClassName,
+      handlePaste,
+      setTableData,
+      addRefreshEvent,
+      tableData
+    };
   },
   components: { CompReport },
   data() {
@@ -248,17 +293,21 @@
         if (res.data.length > 0) {
           this.evaluationRule = res.data[0];
           // 鑾峰彇鍏蜂綋瀛愯鍒�
-          return evaluateApi.getSubRules(this.evaluationRule.guid).then((res) => {
-            this.evaluationSubRule = res.data;
-            // 鏌ユ壘鍙鍏ュ緱鍒嗙殑瑙勫垯id
-            for (const key in this.ruleName) {
-              const value = this.ruleName[key];
-              const subrule = this.evaluationSubRule.find((v) => {
-                return v.itemname == value.name;
-              });
-              value.id = subrule.guid;
-            }
-          });
+          return evaluateApi
+            .getSubRules(this.evaluationRule.guid)
+            .then((res) => {
+              this.evaluationSubRule = res.data;
+              // 鏌ユ壘鍙鍏ュ緱鍒嗙殑瑙勫垯id
+              for (const key in this.ruleName) {
+                const value = this.ruleName[key];
+                const subrule = this.evaluationSubRule.find((v) => {
+                  return v.itemname == value.name;
+                });
+                if (subrule) {
+                  value.id = subrule.guid;
+                }
+              }
+            });
         }
       });
     },
diff --git a/src/views/fysp/scene/CompSceneMixingPlantInfo.vue b/src/views/fysp/scene/CompSceneMixingPlantInfo.vue
new file mode 100644
index 0000000..602a35f
--- /dev/null
+++ b/src/views/fysp/scene/CompSceneMixingPlantInfo.vue
@@ -0,0 +1,338 @@
+<!-- 鎼呮媽绔欎笓灞炰俊鎭紪杈� -->
+<template>
+  <BaseSceneInfo ref="baseSceneInfo" :scene="scene" :formInfo="formInfo" :scene-type="sceneType">
+    <template #form-items>
+      <el-form
+        v-show="showStyle == 'form'"
+        :inline="false"
+        :model="formObj"
+        ref="formRef"
+        :rules="rules"
+        label-position="right"
+        label-width="150px"
+      >
+        <!-- <el-form-item label="杩愯惀鐘舵��" prop="mpStatus">
+      <el-select v-model="formObj.mpStatus" placeholder="杩愯惀鐘舵��">
+        <el-option
+          v-for="s in status"
+          :key="s.value"
+          :label="s.label"
+          :value="s.value"
+        />
+      </el-select>
+    </el-form-item> -->
+        <el-form-item label="鍗犲湴闈㈢Н" prop="mpFloorSpace">
+          <el-input
+            clearable
+            v-model="formObj.mpFloorSpace"
+            placeholder="鍗犲湴闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="瑙勫垝闈㈢Н" prop="mpPlanningArea">
+          <el-input
+            clearable
+            v-model="formObj.mpPlanningArea"
+            placeholder="瑙勫垝闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="涓氫富鍗曚綅" prop="mpEmployerUnit">
+          <el-input
+            clearable
+            v-model="formObj.mpEmployerUnit"
+            placeholder="涓氫富鍗曚綅"
+          />
+        </el-form-item>
+        <el-form-item label="涓氫富鍗曚綅鑱旂郴浜�" prop="mpEmployerContacts">
+          <el-input
+            clearable
+            v-model="formObj.mpEmployerContacts"
+            placeholder="涓氫富鍗曚綅鑱旂郴浜�"
+          />
+        </el-form-item>
+        <el-form-item
+          label="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+          prop="mpEmployerContactsTel"
+          class="input-with-select"
+        >
+          <el-input
+            clearable
+            type="tel"
+            v-model="formObj.mpEmployerContactsTel"
+            placeholder="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+          >
+            <template #prepend>
+              <el-icon><Iphone /></el-icon>
+            </template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鏄惁涓虹豢鑹茬幆淇濈珯鍘�" prop="mpGreenPlant">
+          <el-select
+            v-model="formObj.mpGreenPlant"
+            placeholder="鏄惁涓虹豢鑹茬幆淇濈珯鍘�"
+          >
+            <el-option
+              v-for="s in [
+                { value: false, label: '鍚�' },
+                { value: true, label: '鏄�' }
+              ]"
+              :key="s.value"
+              :label="s.label"
+              :value="s.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鏄惁涓烘枃鏄庡満绔�" prop="mpCivillyPlant">
+          <el-select
+            v-model="formObj.mpCivillyPlant"
+            placeholder="鏄惁涓烘枃鏄庡満绔�"
+          >
+            <el-option
+              v-for="s in [
+                { value: false, label: '鍚�' },
+                { value: true, label: '鏄�' }
+              ]"
+              :key="s.value"
+              :label="s.label"
+              :value="s.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            :disabled="!edit"
+            type="primary"
+            @click="onSubmit"
+            :loading="loading"
+            >鎻愪氦</el-button
+          >
+          <el-button :disabled="!edit" @click="onReset">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
+    </template>
+    <template #description-items>
+      <el-descriptions
+        v-show="showStyle == 'descriptions'"
+        :column="2"
+        :size="fontSize"
+        direction="horizontal"
+        border
+      >
+        <template #title>
+          <el-text tag="h1">{{ title }}</el-text>
+        </template>
+        <template #extra>
+          <el-button
+            :size="fontSize"
+            type="primary"
+            @click="onSubmit"
+            :loading="loading"
+            >鎻愪氦</el-button
+          >
+          <el-button
+            :size="fontSize"
+            :disabled="!edit && !ignoreEdit"
+            @click="onReset"
+            >閲嶇疆</el-button
+          >
+        </template>
+        <el-descriptions-item label="鍗犲湴闈㈢Н"
+            ><el-input
+              :size="fontSize"
+              clearable
+              v-model="formObj.mpFloorSpace"
+              placeholder="鍗犲湴闈㈢Н"
+            >
+              <template #append>銕�</template>
+            </el-input></el-descriptions-item
+          >
+          <el-descriptions-item label="瑙勫垝闈㈢Н"
+            ><el-input
+              :size="fontSize"
+              clearable
+              v-model="formObj.mpPlanningArea"
+              placeholder="瑙勫垝闈㈢Н"
+            >
+              <template #append>銕�</template>
+            </el-input></el-descriptions-item
+          >
+          <el-descriptions-item label="涓氫富鍗曚綅">
+            <el-input
+              clearable
+              v-model="formObj.mpEmployerUnit"
+              placeholder="涓氫富鍗曚綅"
+            />
+          </el-descriptions-item>
+          <el-descriptions-item label="涓氫富鍗曚綅鑱旂郴浜�">
+            <el-input
+              clearable
+              v-model="formObj.mpEmployerContacts"
+              placeholder="涓氫富鍗曚綅鑱旂郴浜�"
+            />
+          </el-descriptions-item>
+          <el-descriptions-item
+            label="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+            prop="mpEmployerContactsTel"
+            class="input-with-select"
+            :span="2"
+          >
+            <el-input
+              clearable
+              type="tel"
+              v-model="formObj.mpEmployerContactsTel"
+              placeholder="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+            >
+              <template #prepend>
+                <el-icon><Iphone /></el-icon>
+              </template>
+            </el-input>
+          </el-descriptions-item>
+
+          <el-descriptions-item label="鏄惁涓虹豢鑹茬幆淇濈珯鍘�">
+            <el-select
+              v-model="formObj.mpGreenPlant"
+              placeholder="鏄惁涓虹豢鑹茬幆淇濈珯鍘�"
+            >
+              <el-option
+                v-for="s in [
+                  { value: false, label: '鍚�' },
+                  { value: true, label: '鏄�' }
+                ]"
+                :key="s.value"
+                :label="s.label"
+                :value="s.value"
+              />
+            </el-select>
+          </el-descriptions-item>
+          <el-descriptions-item label="鏄惁涓烘枃鏄庡満绔�">
+            <el-select
+              v-model="formObj.mpCivillyPlant"
+              placeholder="鏄惁涓烘枃鏄庡満绔�"
+            >
+              <el-option
+                v-for="s in [
+                  { value: false, label: '鍚�' },
+                  { value: true, label: '鏄�' }
+                ]"
+                :key="s.value"
+                :label="s.label"
+                :value="s.value"
+              />
+            </el-select>
+          </el-descriptions-item>
+          <el-descriptions-item label="鏂藉伐鍦板潃" span="2"
+            ><el-input
+              clearable
+              v-model="sceneObj.location"
+              placeholder="鏂藉伐鍦板潃"
+              :size="fontSize"
+          /></el-descriptions-item>
+          <el-descriptions-item label="椤圭洰璐熻矗浜�"
+            ><el-input
+              :size="fontSize"
+              clearable
+              v-model="sceneObj.contacts"
+              placeholder="椤圭洰璐熻矗浜�"
+          /></el-descriptions-item>
+          <el-descriptions-item label="椤圭洰璐熻矗浜虹數璇�"
+            ><el-input
+              :size="fontSize"
+              clearable
+              type="tel"
+              v-model="sceneObj.contactst"
+              placeholder="椤圭洰璐熻矗浜虹數璇�"
+            >
+              <template #prepend>
+                <el-icon><Iphone /></el-icon>
+              </template> </el-input
+          ></el-descriptions-item>
+      </el-descriptions>
+    </template>
+  </BaseSceneInfo>
+</template>
+<script setup>
+import { reactive, ref, watch, computed } from 'vue';
+import { useFormConfirm } from '@/composables/formConfirm';
+import BaseSceneInfo from './BaseSceneInfo.vue';
+const props = defineProps({
+  scene: Object,
+  //宸ュ湴棰濆淇℃伅
+  formInfo: Object,
+  //鍦烘櫙绫诲瀷锛氬伐鍦�
+  sceneType: {
+    type: Number,
+    default: 1
+  },
+  // 灞曠ず鏍峰紡 form锛氳〃鍗曪紱descriptions锛氭弿杩板垪琛�
+  showStyle: {
+    type: String,
+    default: 'descriptions'
+    // default:'form'
+  },
+  title: String
+});
+const fontSize = ref('small');
+const emit = defineEmits([
+  'onSubmit',
+  'onCancel',
+  'update:scene',
+  'update:formInfo'
+]);
+const sceneObj = ref({});
+const { formObj, formRef, edit, onSubmit, onReset } = useFormConfirm({
+  submit: {
+    do: submit
+  },
+  cancel: {
+    do: cancel
+  }
+});
+const ignoreEdit = computed(() => props.showStyle == 'descriptions');
+
+const loading = ref(false);
+const status = reactive([]);
+const rules = reactive({});
+
+const baseSceneInfo = ref(null);
+function submit() {
+  return baseSceneInfo.value.submit()
+}
+
+function cancel() {
+  emit('onCancel');
+}
+
+watch(
+  () => props.formInfo,
+  (nValue) => {
+    if (nValue) {
+      formObj.value = nValue;
+    }
+  },
+  { deep: false, immediate: true }
+);
+
+watch(
+  () => props.scene,
+  (nValue) => {
+    if (nValue) {
+      sceneObj.value = nValue;
+    }
+  },
+  { deep: false, immediate: true }
+);
+</script>
+
+<style>
+/* .input-with-select .el-input-group__prepend {
+  background-color: var(--el-fill-color-blank);
+} */
+.sub-title {
+  font-size: var(--el-font-size-large);
+  margin-bottom: 20px;
+  margin-left: 20px;
+}
+</style>
diff --git a/src/views/fysp/scene/CompSceneWharfInfo.vue b/src/views/fysp/scene/CompSceneWharfInfo.vue
new file mode 100644
index 0000000..d37487f
--- /dev/null
+++ b/src/views/fysp/scene/CompSceneWharfInfo.vue
@@ -0,0 +1,305 @@
+<!-- 鐮佸ご涓撳睘淇℃伅缂栬緫 -->
+<template>
+  <BaseSceneInfo ref="baseSceneInfo" :scene="scene" :formInfo="formInfo" :scene-type="sceneType">
+    <template #form-items>
+      <el-form
+        v-show="showStyle == 'form'"
+        :inline="false"
+        :model="formObj"
+        ref="formRef"
+        :rules="rules"
+        label-position="right"
+        label-width="150px"
+      >
+        <el-form-item label="绫诲瀷" prop="wProjectType">
+          <el-input
+            clearable
+            v-model="formObj.wProjectType"
+            placeholder="绫诲瀷"
+          />
+        </el-form-item>
+        <!-- <el-form-item label="杩愯惀鐘舵��" prop="wStatus">
+      <el-select v-model="formObj.wStatus" placeholder="杩愯惀鐘舵��">
+        <el-option
+          v-for="s in status"
+          :key="s.value"
+          :label="s.label"
+          :value="s.value"
+        />
+      </el-select>
+    </el-form-item> -->
+        <el-form-item label="涓氫富鍗曚綅" prop="wEmployerUnit">
+          <el-input
+            clearable
+            v-model="formObj.wEmployerUnit"
+            placeholder="涓氫富鍗曚綅"
+          />
+        </el-form-item>
+        <el-form-item label="涓氫富鍗曚綅鑱旂郴浜�" prop="wEmployerContacts">
+          <el-input
+            clearable
+            v-model="formObj.wEmployerContacts"
+            placeholder="涓氫富鍗曚綅鑱旂郴浜�"
+          />
+        </el-form-item>
+        <el-form-item
+          label="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+          prop="wEmployerContactsTel"
+          class="input-with-select"
+        >
+          <el-input
+            clearable
+            type="tel"
+            v-model="formObj.wEmployerContactsTel"
+            placeholder="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+          >
+            <template #prepend>
+              <el-icon><Iphone /></el-icon>
+            </template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="绉熻祦鍗曚綅" prop="wRentUnit">
+          <el-input
+            clearable
+            v-model="formObj.wRentUnit"
+            placeholder="绉熻祦鍗曚綅"
+          />
+        </el-form-item>
+        <el-form-item label="绉熻祦鍗曚綅鑱旂郴浜�" prop="wRentContacts">
+          <el-input
+            clearable
+            v-model="formObj.wRentContacts"
+            placeholder="绉熻祦鍗曚綅鑱旂郴浜�"
+          />
+        </el-form-item>
+        <el-form-item label="绉熻祦鍗曚綅鑱旂郴浜虹數璇�" prop="wRentContactsTel">
+          <el-input
+            clearable
+            type="tel"
+            v-model="formObj.wRentContactsTel"
+            placeholder="绉熻祦鍗曚綅鑱旂郴浜虹數璇�"
+          >
+            <template #prepend>
+              <el-icon><Iphone /></el-icon>
+            </template>
+          </el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            :disabled="!edit"
+            type="primary"
+            @click="onSubmit"
+            :loading="loading"
+            >鎻愪氦</el-button
+          >
+          <el-button :disabled="!edit" @click="onReset">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
+    </template>
+    <template #description-items>
+      <el-descriptions
+        v-show="showStyle == 'descriptions'"
+        :column="2"
+        :size="fontSize"
+        direction="horizontal"
+        border
+      >
+        <template #title>
+          <el-text tag="h1">{{ title }}</el-text>
+        </template>
+        <template #extra>
+          <el-button
+            :disabled="!edit && !ignoreEdit"
+            :size="fontSize"
+            type="primary"
+            @click="onSubmit"
+            :loading="loading"
+            >鎻愪氦</el-button
+          >
+          <el-button
+            :size="fontSize"
+            :disabled="!edit && !ignoreEdit"
+            @click="onReset"
+            >閲嶇疆</el-button
+          >
+        </template>
+        <el-descriptions-item label="绫诲瀷" :span="2"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.wProjectType"
+            placeholder="绫诲瀷"
+        /></el-descriptions-item>
+        <el-descriptions-item label="鍗犲湴闈㈢Н"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.wFloorSpace"
+            placeholder="鍗犲湴闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input></el-descriptions-item
+        >
+        <el-descriptions-item label="瑙勫垝闈㈢Н"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.wPlanningArea"
+            placeholder="瑙勫垝闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input></el-descriptions-item
+        >
+        <el-descriptions-item label="涓氫富鍗曚綅">
+          <el-input
+            clearable
+            v-model="formObj.wEmployerUnit"
+            placeholder="涓氫富鍗曚綅"
+          />
+        </el-descriptions-item>
+        <el-descriptions-item label="涓氫富鍗曚綅鑱旂郴浜�">
+          <el-input
+            clearable
+            v-model="formObj.wEmployerContacts"
+            placeholder="涓氫富鍗曚綅鑱旂郴浜�"
+          />
+        </el-descriptions-item>
+        <el-descriptions-item
+          label="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+          prop="mpEmployerContactsTel"
+          class="input-with-select"
+          :span="2"
+        >
+          <el-input
+            clearable
+            type="tel"
+            v-model="formObj.wEmployerContactsTel"
+            placeholder="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+          >
+            <template #prepend>
+              <el-icon><Iphone /></el-icon>
+            </template>
+          </el-input>
+        </el-descriptions-item>
+        <el-descriptions-item label="鏂藉伐鍦板潃" span="2"
+          ><el-input
+            clearable
+            v-model="sceneObj.location"
+            placeholder="鏂藉伐鍦板潃"
+            :size="fontSize"
+        /></el-descriptions-item>
+        <el-descriptions-item label="椤圭洰璐熻矗浜�"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="sceneObj.contacts"
+            placeholder="椤圭洰璐熻矗浜�"
+        /></el-descriptions-item>
+        <el-descriptions-item label="椤圭洰璐熻矗浜虹數璇�"
+          ><el-input
+            :size="fontSize"
+            clearable
+            type="tel"
+            v-model="sceneObj.contactst"
+            placeholder="椤圭洰璐熻矗浜虹數璇�"
+          >
+            <template #prepend>
+              <el-icon><Iphone /></el-icon>
+            </template> </el-input
+        ></el-descriptions-item>
+        <el-descriptions-item label="绉熻祦鍗曚綅"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.wRentUnit"
+            placeholder="绉熻祦鍗曚綅"
+        /></el-descriptions-item>
+      </el-descriptions>
+    </template>
+  </BaseSceneInfo>
+</template>
+<script setup>
+import { reactive, ref, watch, computed } from 'vue';
+import { useFormConfirm } from '@/composables/formConfirm';
+import BaseSceneInfo from './BaseSceneInfo.vue';
+
+const props = defineProps({
+  scene: Object,
+  //宸ュ湴棰濆淇℃伅
+  formInfo: Object,
+  //鍦烘櫙绫诲瀷锛氬伐鍦�
+  sceneType: {
+    type: Number,
+    default: 1
+  },
+  // 灞曠ず鏍峰紡 form锛氳〃鍗曪紱descriptions锛氭弿杩板垪琛�
+  showStyle: {
+    type: String,
+    default: 'descriptions'
+    // default:'form'
+  },
+  title: String
+});
+const fontSize = ref('small');
+const emit = defineEmits([
+  'onSubmit',
+  'onCancel',
+  'update:scene',
+  'update:formInfo'
+]);
+
+const sceneObj = ref({});
+const { formObj, formRef, edit, onSubmit, onReset } = useFormConfirm({
+  submit: {
+    do: submit
+  },
+  cancel: {
+    do: cancel
+  }
+});
+const ignoreEdit = computed(() => props.showStyle == 'descriptions');
+
+const loading = ref(false);
+const status = reactive([]);
+const rules = reactive({});
+
+const baseSceneInfo = ref(null);
+function submit() {
+  return baseSceneInfo.value.submit()
+}
+
+function cancel() {
+  emit('onCancel');
+}
+
+watch(
+  () => props.formInfo,
+  (nValue) => {
+    if (nValue) {
+      formObj.value = nValue;
+    }
+  },
+  { deep: false, immediate: true }
+);
+
+watch(
+  () => props.scene,
+  (nValue) => {
+    if (nValue) {
+      sceneObj.value = nValue;
+    }
+  },
+  { deep: false, immediate: true }
+);
+</script>
+
+<style>
+/* .input-with-select .el-input-group__prepend {
+  background-color: var(--el-fill-color-blank);
+} */
+.sub-title {
+  font-size: var(--el-font-size-large);
+  margin-bottom: 20px;
+  margin-left: 20px;
+}
+</style>
diff --git a/src/views/fysp/task/TaskManage.vue b/src/views/fysp/task/TaskManage.vue
index 2e01f89..f844b5e 100644
--- a/src/views/fysp/task/TaskManage.vue
+++ b/src/views/fysp/task/TaskManage.vue
@@ -51,8 +51,9 @@
                     create
                     v-model="curSubTaskList"
                     :loading="subTaskLoading"
+                    :create-loading="daytaskLoading"
                     height="56vh"
-                    @add="subTaskDrawer = true"
+                    @add="handleAddSubtask"
                     @submit="handleSubtaskSubmit"
                   ></CompSubTaskList>
                 </el-col>
@@ -115,6 +116,9 @@
 </template>
 
 <script>
+import { unref } from 'vue';
+import { useCloned } from '@vueuse/core';
+import dayjs from 'dayjs';
 import taskApi from '@/api/fysp/taskApi';
 import CompMonitorObj from './components/CompMonitorObj.vue';
 import CompMonitorPlan from './components/CompMonitorPlan.vue';
@@ -181,11 +185,18 @@
       subTaskDrawer: false,
       // 褰撳墠閫夋嫨鐨勬棩浠诲姟
       curDayTask: {},
+      curDay: undefined,
+      daytaskLoading: false,
       // 褰撳墠閫夋嫨鐨勬棩浠诲姟涓嬬殑瀛愪换鍔�
       curSubTaskList: undefined,
       subTaskLoading: false,
       // 鎬讳换鍔℃柊澧炲脊鍑烘
       topTaskAddVisible: false
+    };
+  },
+  provide() {
+    return {
+      topTask: this.curTask
     };
   },
   computed: {
@@ -273,7 +284,8 @@
         }
       });
     },
-    onDateChange(dayTask) {
+    onDateChange(dayTask, day) {
+      this.curDay = day;
       if (dayTask) {
         this.subTaskLoading = true;
         // this.subTaskDrawer = true;
@@ -286,6 +298,7 @@
           .finally(() => (this.subTaskLoading = false));
       } else {
         this.curSubTaskList = [];
+        this.curDayTask = {};
       }
     },
     navToTaskCreate(value) {
@@ -302,6 +315,43 @@
       this.$refs.planRef
         .fetchDayTasks()
         .finally(() => (this.subTaskLoading = false));
+    },
+    handleAddSubtask() {
+      // 鍒ゆ柇褰撴棩鏄惁鏈夋棩浠诲姟锛岃嫢娌℃湁锛屽厛鍒涘缓鍦ㄨ烦杞瓙浠诲姟鍒涘缓鐣岄潰
+      if (this.curDayTask.guid) {
+        this.subTaskDrawer = true;
+      } else {
+        const _dayTask = useCloned(this.curTask.data).cloned.value;
+        const taskDate = dayjs(this.curDay);
+        _dayTask.tsguid = _dayTask.tguid;
+        _dayTask.tguid = null;
+        _dayTask.levelnum = null;
+        _dayTask.name = `${taskDate.format('YYYY骞碝M鏈圖D鏃�')}${
+          _dayTask.cityname
+        }${_dayTask.districtname}${_dayTask.typename}浠诲姟`;
+        _dayTask.starttime = taskDate.startOf('day').toDate();
+        _dayTask.endtime = taskDate.endOf('day').millisecond(0).toDate();
+        _dayTask.settime = dayjs().toDate();
+        _dayTask.t1stverifytime = dayjs().toDate();
+        _dayTask.runingstatus = '鏈墽琛�';
+        this.daytaskLoading = true;
+        taskApi
+          .putTask(_dayTask)
+          .then((res) => {
+            this.curDayTask = {
+              guid: res.data.tguid,
+              tsGuid: res.data.tsguid,
+              changedTaskNum: 0,
+              check: true,
+              completeTaskNum: 0,
+              date: res.data.starttime,
+              totalTaskNum: 0
+            };
+            this.subTaskDrawer = true;
+            this.handleSubtaskSubmit();
+          })
+          .finally(() => (this.daytaskLoading = false));
+      }
     }
   },
   mounted() {
diff --git a/src/views/fysp/task/components/CompDayTask.vue b/src/views/fysp/task/components/CompDayTask.vue
index 15a2797..678b26f 100644
--- a/src/views/fysp/task/components/CompDayTask.vue
+++ b/src/views/fysp/task/components/CompDayTask.vue
@@ -47,7 +47,7 @@
   </el-row>
 </template>
 <script setup>
-import { ref, watch, onMounted } from 'vue';
+import { ref, watch, onMounted, inject } from 'vue';
 import { useCloned } from '@vueuse/core';
 import { useRoute, useRouter } from 'vue-router';
 import { ElMessage, ElNotification, ElMessageBox } from 'element-plus';
diff --git a/src/views/fysp/task/components/CompMonitorPlan.vue b/src/views/fysp/task/components/CompMonitorPlan.vue
index 5b86666..3294472 100644
--- a/src/views/fysp/task/components/CompMonitorPlan.vue
+++ b/src/views/fysp/task/components/CompMonitorPlan.vue
@@ -135,7 +135,7 @@
   if (isDayEnable(e)) {
     const day = dayjs(e).format('YYYY-MM-DD');
     const t = computeDayTask(day);
-    emit('dateChange', t);
+    emit('dateChange', t, day);
   }
 }
 
diff --git a/src/views/fysp/task/components/CompSubTaskList.vue b/src/views/fysp/task/components/CompSubTaskList.vue
index ef20ca8..03ef062 100644
--- a/src/views/fysp/task/components/CompSubTaskList.vue
+++ b/src/views/fysp/task/components/CompSubTaskList.vue
@@ -44,7 +44,11 @@
       <div v-else>
         <el-empty description="鏃犱换鍔¤褰�" />
         <el-row v-if="create" justify="center">
-          <el-button type="success" size="small" @click="add"
+          <el-button
+            type="success"
+            size="small"
+            :loading="createLoading"
+            @click="add"
             >娣诲姞浠诲姟</el-button
           >
         </el-row>
@@ -81,7 +85,8 @@
   },
   // 鏄惁鏄剧ず娣诲姞浠诲姟鎸夐挳
   create: Boolean,
-  loading: Boolean
+  loading: Boolean,
+  createLoading:Boolean,
 });
 
 const dialogVisible = ref(false);
@@ -100,7 +105,7 @@
       return subtaskApi.deleteSubtask(item.stguid).then(res=>{
         if (res == 1) {
           const index = data.value.indexOf(item);
-          data.value.splice(index, 1); 
+          data.value.splice(index, 1);
 
           emit('update:modelValue', data.value);
           emit('remove', item);
diff --git a/src/views/fysp/task/components/CompSubTaskSelect.vue b/src/views/fysp/task/components/CompSubTaskSelect.vue
index 53a4e03..738df23 100644
--- a/src/views/fysp/task/components/CompSubTaskSelect.vue
+++ b/src/views/fysp/task/components/CompSubTaskSelect.vue
@@ -70,16 +70,12 @@
 /**
  * 宸℃煡瀛愪换鍔″垱寤�
  */
-import { ref, reactive, watch, computed, onMounted } from 'vue';
+import { ref, reactive, watch, computed, onMounted, inject } from 'vue';
 import { ElMessageBox, ElNotification, ElMessage } from 'element-plus';
 import taskApi from '@/api/fysp/taskApi';
 import TaskProxy from '../TaskProxy';
 
-onMounted(() => {
-  // if (props.height) {
-  //   scrollHeight.value =
-  // }
-});
+// const topTask = inject('topTask');
 
 const props = defineProps({
   // 瀛愪换鍔¢泦鍚�
@@ -122,12 +118,16 @@
   } else {
     success();
     // 灏嗕换鍔℃墽琛屼汉鏍煎紡鍖栧苟浼犻��
-    const param = TaskProxy.getExecutors(v.value.executor, executors.value)
-    emit('submit', param)
+    const param = TaskProxy.getExecutors(v.value.executor, executors.value);
+    emit('submit', param);
   }
 }
 
 /************************* 浠诲姟鎵ц浜轰笅鎷夐�夋 *******************************/
+// onMounted(() => {
+//   getExecutors(topTask.value);
+// });
+
 const executors = ref([]);
 // 鏄惁鍏ㄩ��
 const checkAll = ref(false);
@@ -142,36 +142,46 @@
     formInfo.value.executor = [];
   }
 }
+
+function getExecutors(t) {
+  const ids = t.executorguids.split('#');
+  const userNames = t.executorusernames.split('#');
+  const realNames = t.executorrealnames.split('#');
+  const list = [];
+  ids.forEach((e, i) => {
+    if (i < userNames.length && i < realNames.length) {
+      list.push({
+        label: realNames[i],
+        value: e,
+        data: {
+          id: e,
+          userName: userNames[i],
+          realName: realNames[i]
+        }
+      });
+    }
+  });
+
+  executors.value = list;
+}
+// watch(topTask, (nV, oV) => {
+//   if (nV != oV) {
+//     getExecutors(nV);
+//   }
+// });
+
 watch(
   () => props.dayTask,
   (nV, oV) => {
     if (nV != oV) {
       taskApi.fetchTaskById(nV.guid).then((res) => {
-        const ids = res.executorguids.split('#');
-        const userNames = res.executorusernames.split('#');
-        const realNames = res.executorrealnames.split('#');
-        const list = [];
-        ids.forEach((e, i) => {
-          if (i < userNames.length && i < realNames.length) {
-            list.push({
-              label: realNames[i],
-              value: e,
-              data: {
-                id: e,
-                userName: userNames[i],
-                realName: realNames[i]
-              }
-            });
-          }
-        });
-
-        executors.value = list;
+        getExecutors(res);
       });
     }
   },
   { immediate: true }
 );
-//
+
 watch(
   () => formInfo.value.executor,
   (val) => {
diff --git a/src/views/fysp/task/components/CompTaskEdit.vue b/src/views/fysp/task/components/CompTaskEdit.vue
index 6833d9f..dafaeff 100644
--- a/src/views/fysp/task/components/CompTaskEdit.vue
+++ b/src/views/fysp/task/components/CompTaskEdit.vue
@@ -216,7 +216,7 @@
 }
 
 function genTaskName() {
-  let name = dayjs(formRef.value.formObj._timeArr[0]).format('YYYY骞碝M鏈�');
+  let name = dayjs(formRef.value.formObj._timeArr[0]).format('YYYY骞碝鏈�');
   name += locationText(formRef.value.formObj._locations);
   name += formRef.value.formObj._type.text;
   name += '浠诲姟';

--
Gitblit v1.9.3