From 8f3255956f85af1df98170fb05e6551cea12e9b0 Mon Sep 17 00:00:00 2001
From: hcong <1050828145@qq.com>
Date: 星期二, 12 十一月 2024 15:54:57 +0800
Subject: [PATCH] 场景报告-码头搅拌站场景基本信息

---
 src/views/fysp/data-product/ProdSceneReport.vue                |   42 +
 src/views/fysp/scene/CompSceneMixingPlantInfo.vue              |  338 +++++++++++++
 src/views/fysp/scene/CompSceneWharfInfo.vue                    |  305 ++++++++++++
 src/views/fysp/scene/CompSceneConstructionInfo.vue             |  692 +++++++++++++--------------
 src/components.d.ts                                            |   18 
 src/views/fysp/evaluation/components/precheck/CompPreCheck.vue |    2 
 src/views/fysp/scene/BaseSceneInfo.vue                         |   91 +++
 7 files changed, 1,100 insertions(+), 388 deletions(-)

diff --git a/src/components.d.ts b/src/components.d.ts
index 7d97466..e0da7cd 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -12,18 +12,13 @@
     BasePanelLayout: typeof import('./components/core/BasePanelLayout.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']
@@ -35,9 +30,6 @@
     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']
@@ -45,37 +37,27 @@
     ElIcon: typeof import('element-plus/es')['ElIcon']
     ElImage: typeof import('element-plus/es')['ElImage']
     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/data-product/ProdSceneReport.vue b/src/views/fysp/data-product/ProdSceneReport.vue
index 1274d47..239545e 100644
--- a/src/views/fysp/data-product/ProdSceneReport.vue
+++ b/src/views/fysp/data-product/ProdSceneReport.vue
@@ -13,10 +13,27 @@
     <template #main>
       <el-scrollbar class="el-scrollbar" v-loading="mainLoading">
         <CompSceneConstructionInfo
+          v-if="curSubtask.data && curSubtask.data.sceneType == '宸ュ湴'"
           title="A銆佸熀鏈俊鎭�"
           :scene="formScene"
           :form-info="formSubScene"
+          :scene-type="1"
         />
+        <CompSceneWharfInfo
+          v-else-if="curSubtask.data && curSubtask.data.sceneType == '鐮佸ご'"
+          title="A銆佸熀鏈俊鎭�"
+          :scene="formScene"
+          :form-info="formSubScene"
+          :scene-type="2"
+        />
+        <CompSceneMixingPlantInfo
+          v-else-if="curSubtask.data && curSubtask.data.sceneType == '鎼呮媽绔�'"
+          title="A銆佸熀鏈俊鎭�"
+          :scene="formScene"
+          :form-info="formSubScene"
+          :scene-type="3"
+        />
+        <div v-else><el-text tag="h1">A銆佸熀鏈俊鎭�</el-text></div>
         <div><el-text type="">闄勫浘鐗囷細</el-text></div>
         <CompImgInfo
           v-model:title="imgTitle"
@@ -71,21 +88,16 @@
       </el-scrollbar>
     </template>
   </BaseContentLayout>
-  <el-dialog
-    v-model="anyPhotoDialog"
-    width="66%"
-    title="浠绘剰鍥剧墖"
-    destroy-on-close
+  <ArbitraryPhoto
+    v-if="anyPhotoDialog"
+    v-model:dialog-visible="anyPhotoDialog"
+    :max-select="1"
+    :readonly="false"
+    :subtask="curSubtask.data"
+    @selectByAnyPhonoEvent="handleSelectAnyPhoto"
+    :defaultFile="[sceneImg]"
   >
-    <ArbitraryPhoto
-      :max-select="1"
-      :readonly="false"
-      :subtask="curSubtask.data"
-      @selectByAnyPhonoEvent="handleSelectAnyPhoto"
-      :defaultFile="[sceneImg]"
-    >
-    </ArbitraryPhoto>
-  </el-dialog>
+  </ArbitraryPhoto>
   <el-dialog
     title="璁惧鍥剧墖"
     width="66%"
@@ -113,6 +125,8 @@
 import right_triangle from '@/assets/image/right_triangle.png';
 
 import CompSceneConstructionInfo from '@/views/fysp/scene/CompSceneConstructionInfo.vue';
+import CompSceneWharfInfo from '@/views/fysp/scene/CompSceneWharfInfo.vue';
+import CompSceneMixingPlantInfo from '@/views/fysp/scene/CompSceneMixingPlantInfo.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';
diff --git a/src/views/fysp/evaluation/components/precheck/CompPreCheck.vue b/src/views/fysp/evaluation/components/precheck/CompPreCheck.vue
index 3bb8745..582f1f7 100644
--- a/src/views/fysp/evaluation/components/precheck/CompPreCheck.vue
+++ b/src/views/fysp/evaluation/components/precheck/CompPreCheck.vue
@@ -76,7 +76,7 @@
         online: true,
         sourceType: v.sourceType
       };
-      this.$refs.refSource.startCheck(a);
+      this.$.refSource.startCheck(a);
     },
     onDataSourceChange(val) {
       this.dataSource = val;
diff --git a/src/views/fysp/scene/BaseSceneInfo.vue b/src/views/fysp/scene/BaseSceneInfo.vue
new file mode 100644
index 0000000..ed621bd
--- /dev/null
+++ b/src/views/fysp/scene/BaseSceneInfo.vue
@@ -0,0 +1,91 @@
+<template>
+  <slot name="form-items"></slot>
+  <slot name="description-items"></slot>
+</template>
+<script setup>
+import { reactive, ref, watch, computed } from 'vue';
+import { useDateFormat } from '@vueuse/core';
+import sceneApi from '@/api/fysp/sceneApi';
+expose({
+  submit
+});
+const props = defineProps({
+  scene: Object,
+  //宸ュ湴棰濆淇℃伅
+  formInfo: Object,
+  //鍦烘櫙绫诲瀷锛氬伐鍦�
+  sceneType: {
+    type: Number,
+    default: 1
+  },
+});
+const emit = defineEmits([
+  'onSubmit',
+  'onCancel',
+  'update:scene',
+  'update:formInfo'
+]);
+const loading = ref(false);
+const formObj = ref({});
+const sceneObj = ref({});
+// 鍒涘缓鎴栨洿鏂板満鏅鎯�
+function createOrupdateSubScene() {
+  loading.value = true;
+
+  if (formObj.value._timeRange && formObj.value._timeRange.length == 2) {
+    const t = formObj.value._timeRange;
+    formObj.value.csStartTime = useDateFormat(t[0], 'YYYY-MM-DD');
+    formObj.value.csEndTime = useDateFormat(t[1], 'YYYY-MM-DD');
+  }
+  return sceneApi
+    .updateSubScene(props.sceneType, formObj.value)
+    .then((res) => {
+      emit('onSubmit', formObj);
+      emit('update:formInfo', formObj);
+      return res.data;
+    })
+    .finally(() => {
+      loading.value = false;
+    });
+}
+
+// 鏇存柊鍦烘櫙
+function updateScene() {
+  return sceneApi.updateScene(sceneObj.value).then(() => {
+    emit('update:scene', sceneObj);
+  });
+}
+
+function submit() {
+  updateScene();
+  return createOrupdateSubScene();
+}
+
+function cancel() {
+  emit('onCancel');
+}
+
+watch(
+  () => props.formInfo,
+  (nValue) => {
+    if (nValue) {
+      formObj.value = nValue;
+      formObj.value._timeRange = [
+        new Date(formObj.value.csStartTime),
+        new Date(formObj.value.csEndTime)
+      ];
+    }
+  },
+  { deep: false, immediate: true }
+);
+
+watch(
+  () => props.scene,
+  (nValue) => {
+    if (nValue) {
+      sceneObj.value = nValue;
+    }
+  },
+  { deep: false, immediate: true }
+);
+</script>
diff --git a/src/views/fysp/scene/CompSceneConstructionInfo.vue b/src/views/fysp/scene/CompSceneConstructionInfo.vue
index 65d98bd..ca21b75 100644
--- a/src/views/fysp/scene/CompSceneConstructionInfo.vue
+++ b/src/views/fysp/scene/CompSceneConstructionInfo.vue
@@ -1,325 +1,334 @@
 <!-- 宸ュ湴涓撳睘淇℃伅缂栬緫 -->
 <template>
-  <el-form
-    v-show="showStyle == 'form'"
-    :inline="false"
-    :model="formObj"
-    ref="formRef"
-    :rules="rules"
-    label-position="right"
-    label-width="150px"
+  <BaseSceneInfo
+    ref="baseSceneInfo"
+    :scene="scene"
+    :formInfo="formInfo"
+    :scene-type="sceneType"
   >
-    <el-form-item label="宸ョ▼绫诲瀷" prop="csProjectType">
-      <el-input
-        clearable
-        v-model="formObj.csProjectType"
-        placeholder="宸ョ▼绫诲瀷"
-      />
-    </el-form-item>
-    <el-form-item label="寤鸿鐘舵��" prop="csStatus">
-      <el-select v-model="formObj.csStatus" 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="siExtension1">
-      <el-select v-model="formObj.siExtension1" placeholder="鏂藉伐闃舵">
-        <el-option
-          v-for="s in stage"
-          :key="s.value"
-          :label="s.label"
-          :value="s.value"
-        />
-      </el-select>
-    </el-form-item>
-    <el-form-item label="鏂藉伐鏃堕棿" prop="_timeRange">
-      <el-date-picker
-        v-model="formObj._timeRange"
-        type="daterange"
-        range-separator="鑷�"
-        start-placeholder="寮�宸ユ椂闂�"
-        end-placeholder="瀹屽伐鏃堕棿"
-      />
-    </el-form-item>
-    <el-form-item label="鍓╀綑宸ユ湡" prop="csLeftTime">
-      <el-input
-        clearable
-        v-model="formObj.csLeftTime"
-        placeholder="鍓╀綑宸ユ湡锛屼緥濡傚嚑骞淬�佸嚑鏈堛�佸嚑鍛ㄣ�佸嚑澶╃瓑"
-      />
-    </el-form-item>
-    <el-form-item label="鍗犲湴闈㈢Н" prop="csFloorSpace">
-      <el-input clearable v-model="formObj.csFloorSpace" placeholder="鍗犲湴闈㈢Н">
-        <template #append>銕�</template>
-      </el-input>
-    </el-form-item>
-    <el-form-item label="鏂藉伐闈㈢Н" prop="csConstructionArea">
-      <el-input
-        clearable
-        v-model="formObj.csConstructionArea"
-        placeholder="鏂藉伐闈㈢Н"
+    <template #form-items>
+      <el-form
+        v-show="showStyle == 'form'"
+        :inline="false"
+        :model="formObj"
+        ref="formRef"
+        :rules="rules"
+        label-position="right"
+        label-width="150px"
       >
-        <template #append>銕�</template>
-      </el-input>
-    </el-form-item>
-    <el-form-item label="姣忔湀鏂藉伐闈㈢Н" prop="csConstructionAreaPerMonth">
-      <el-input
-        clearable
-        v-model="formObj.csConstructionAreaPerMonth"
-        placeholder="姣忔湀鏂藉伐闈㈢Н"
-      >
-        <template #append>銕�</template>
-      </el-input>
-    </el-form-item>
-    <el-form-item label="涓氫富鍗曚綅" prop="csEmployerUnit">
-      <el-input
-        clearable
-        v-model="formObj.csEmployerUnit"
-        placeholder="涓氫富鍗曚綅"
-      />
-    </el-form-item>
-    <el-form-item label="涓氫富鍗曚綅鑱旂郴浜�" prop="csEmployerContacts">
-      <el-input
-        clearable
-        v-model="formObj.csEmployerContacts"
-        placeholder="涓氫富鍗曚綅鑱旂郴浜�"
-      />
-    </el-form-item>
-    <el-form-item
-      label="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
-      prop="csEmployerContactsTel"
-      class="input-with-select"
-    >
-      <el-input
-        clearable
-        type="tel"
-        v-model="formObj.csEmployerContactsTel"
-        placeholder="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
-      >
-        <template #prepend>
-          <el-icon><Iphone /></el-icon>
-        </template>
-      </el-input>
-    </el-form-item>
-    <el-form-item label="鏂藉伐鍗曚綅" prop="csConstructionUnit">
-      <el-input
-        clearable
-        v-model="formObj.csConstructionUnit"
-        placeholder="鏂藉伐鍗曚綅"
-      />
-    </el-form-item>
-    <el-form-item label="鏂藉伐鍗曚綅鑱旂郴浜�" prop="csConstructionContacts">
-      <el-input
-        clearable
-        v-model="formObj.csConstructionContacts"
-        placeholder="鏂藉伐鍗曚綅鑱旂郴浜�"
-      />
-    </el-form-item>
-    <el-form-item label="鏂藉伐鍗曚綅鑱旂郴鐢佃瘽" prop="csConstructionContactsTel">
-      <el-input
-        clearable
-        type="tel"
-        v-model="formObj.csConstructionContactsTel"
-        placeholder="鏂藉伐鍗曚綅鑱旂郴鐢佃瘽"
-      >
-        <template #prepend>
-          <el-icon><Iphone /></el-icon>
-        </template>
-      </el-input>
-    </el-form-item>
-    <el-form-item label="瀹夊叏鍛�" prop="csSecurityOfficer">
-      <el-input
-        clearable
-        v-model="formObj.csSecurityOfficer"
-        placeholder="瀹夊叏鍛�"
-      />
-    </el-form-item>
-    <el-form-item label="瀹夊叏鍛樼數璇�" prop="csSecurityOfficerTel">
-      <el-input
-        clearable
-        type="tel"
-        v-model="formObj.csSecurityOfficerTel"
-        placeholder="瀹夊叏鍛樼數璇�"
-      >
-        <template #prepend>
-          <el-icon><Iphone /></el-icon>
-        </template>
-      </el-input>
-    </el-form-item>
+        <el-form-item label="宸ョ▼绫诲瀷" prop="csProjectType">
+          <el-input
+            clearable
+            v-model="formObj.csProjectType"
+            placeholder="宸ョ▼绫诲瀷"
+          />
+        </el-form-item>
+        <el-form-item label="寤鸿鐘舵��" prop="csStatus">
+          <el-select v-model="formObj.csStatus" 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="siExtension1">
+          <el-select v-model="formObj.siExtension1" placeholder="鏂藉伐闃舵">
+            <el-option
+              v-for="s in stage"
+              :key="s.value"
+              :label="s.label"
+              :value="s.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鏂藉伐鏃堕棿" prop="_timeRange">
+          <el-date-picker
+            v-model="formObj._timeRange"
+            type="daterange"
+            range-separator="鑷�"
+            start-placeholder="寮�宸ユ椂闂�"
+            end-placeholder="瀹屽伐鏃堕棿"
+          />
+        </el-form-item>
+        <el-form-item label="鍓╀綑宸ユ湡" prop="csLeftTime">
+          <el-input
+            clearable
+            v-model="formObj.csLeftTime"
+            placeholder="鍓╀綑宸ユ湡锛屼緥濡傚嚑骞淬�佸嚑鏈堛�佸嚑鍛ㄣ�佸嚑澶╃瓑"
+          />
+        </el-form-item>
+        <el-form-item label="鍗犲湴闈㈢Н" prop="csFloorSpace">
+          <el-input
+            clearable
+            v-model="formObj.csFloorSpace"
+            placeholder="鍗犲湴闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鏂藉伐闈㈢Н" prop="csConstructionArea">
+          <el-input
+            clearable
+            v-model="formObj.csConstructionArea"
+            placeholder="鏂藉伐闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="姣忔湀鏂藉伐闈㈢Н" prop="csConstructionAreaPerMonth">
+          <el-input
+            clearable
+            v-model="formObj.csConstructionAreaPerMonth"
+            placeholder="姣忔湀鏂藉伐闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="涓氫富鍗曚綅" prop="csEmployerUnit">
+          <el-input
+            clearable
+            v-model="formObj.csEmployerUnit"
+            placeholder="涓氫富鍗曚綅"
+          />
+        </el-form-item>
+        <el-form-item label="涓氫富鍗曚綅鑱旂郴浜�" prop="csEmployerContacts">
+          <el-input
+            clearable
+            v-model="formObj.csEmployerContacts"
+            placeholder="涓氫富鍗曚綅鑱旂郴浜�"
+          />
+        </el-form-item>
+        <el-form-item
+          label="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+          prop="csEmployerContactsTel"
+          class="input-with-select"
+        >
+          <el-input
+            clearable
+            type="tel"
+            v-model="formObj.csEmployerContactsTel"
+            placeholder="涓氫富鍗曚綅鑱旂郴鐢佃瘽"
+          >
+            <template #prepend>
+              <el-icon><Iphone /></el-icon>
+            </template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鏂藉伐鍗曚綅" prop="csConstructionUnit">
+          <el-input
+            clearable
+            v-model="formObj.csConstructionUnit"
+            placeholder="鏂藉伐鍗曚綅"
+          />
+        </el-form-item>
+        <el-form-item label="鏂藉伐鍗曚綅鑱旂郴浜�" prop="csConstructionContacts">
+          <el-input
+            clearable
+            v-model="formObj.csConstructionContacts"
+            placeholder="鏂藉伐鍗曚綅鑱旂郴浜�"
+          />
+        </el-form-item>
+        <el-form-item label="鏂藉伐鍗曚綅鑱旂郴鐢佃瘽" prop="csConstructionContactsTel">
+          <el-input
+            clearable
+            type="tel"
+            v-model="formObj.csConstructionContactsTel"
+            placeholder="鏂藉伐鍗曚綅鑱旂郴鐢佃瘽"
+          >
+            <template #prepend>
+              <el-icon><Iphone /></el-icon>
+            </template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="瀹夊叏鍛�" prop="csSecurityOfficer">
+          <el-input
+            clearable
+            v-model="formObj.csSecurityOfficer"
+            placeholder="瀹夊叏鍛�"
+          />
+        </el-form-item>
+        <el-form-item label="瀹夊叏鍛樼數璇�" prop="csSecurityOfficerTel">
+          <el-input
+            clearable
+            type="tel"
+            v-model="formObj.csSecurityOfficerTel"
+            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>
-
-  <el-descriptions
-    v-show="showStyle == 'descriptions'"
-    :column="2"
-    :size="fontSize"
-    direction="horizontal"
-    border
-  >
-    <template #title>
-      <el-text tag="h1">{{ title }}</el-text>
+        <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 #extra>
-      <el-button
-        :disabled="!edit && !ignoreEdit"
+    <template #description-items>
+      <el-descriptions
+        v-show="showStyle == 'descriptions'"
+        :column="2"
         :size="fontSize"
-        type="primary"
-        @click="onSubmit"
-        :loading="loading"
-        >鎻愪氦</el-button
+        direction="horizontal"
+        border
       >
-      <el-button
-        :size="fontSize"
-        :disabled="!edit && !ignoreEdit"
-        @click="onReset"
-        >閲嶇疆</el-button
-      >
-    </template>
-    <el-descriptions-item label="宸ョ▼绫诲瀷"
-      ><el-input
-        :size="fontSize"
-        clearable
-        v-model="formObj.csProjectType"
-        placeholder="宸ョ▼绫诲瀷"
-    /></el-descriptions-item>
-    <!-- <el-descriptions-item label="寤鸿鐘舵��"
-      ><el-select
-        v-model="formObj.csStatus"
-        placeholder="寤鸿鐘舵��"
-      >
-        <el-option
-          v-for="s in status"
-          :key="s.value"
-          :label="s.label"
-          :value="s.value"
-        /> </el-select
-    ></el-descriptions-item> -->
-    <el-descriptions-item label="鏂藉伐闃舵"
-      ><el-select
-        v-model="formObj.siExtension1"
-        placeholder="鏂藉伐闃舵"
-        :size="fontSize"
-      >
-        <el-option
-          v-for="s in stage"
-          :key="s.value"
-          :label="s.label"
-          :value="s.value"
-        /> </el-select
-    ></el-descriptions-item>
-    <el-descriptions-item label="鏂藉伐鏃堕棿"
-      ><el-date-picker
-        :size="fontSize"
-        v-model="formObj._timeRange"
-        type="daterange"
-        range-separator="鑷�"
-        start-placeholder="寮�宸ユ椂闂�"
-        end-placeholder="瀹屽伐鏃堕棿"
-    /></el-descriptions-item>
-    <el-descriptions-item label="鍓╀綑宸ユ湡"
-      ><el-input
-        :size="fontSize"
-        clearable
-        v-model="formObj.csLeftTime"
-        placeholder="鍓╀綑宸ユ湡锛屼緥濡傚嚑骞淬�佸嚑鏈堛�佸嚑鍛ㄣ�佸嚑澶╃瓑"
-    /></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="鍗犲湴闈㈢Н" rowspan="2"
-      ><el-input
-        :size="fontSize"
-        clearable
-        v-model="formObj.csFloorSpace"
-        placeholder="鍗犲湴闈㈢Н"
-      >
-        <template #append>銕�</template>
-      </el-input></el-descriptions-item
-    >
-    <el-descriptions-item label="鏂藉伐闈㈢Н"
-      ><el-input
-        :size="fontSize"
-        clearable
-        v-model="formObj.csConstructionArea"
-        placeholder="鏂藉伐闈㈢Н"
-      >
-        <template #append>銕�</template>
-      </el-input></el-descriptions-item
-    >
-    <el-descriptions-item label="姣忔湀鏂藉伐闈㈢Н"
-      ><el-input
-        :size="fontSize"
-        clearable
-        v-model="formObj.csConstructionAreaPerMonth"
-        placeholder="姣忔湀鏂藉伐闈㈢Н"
-      >
-        <template #append>銕�</template>
-      </el-input></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.csSecurityOfficer"
-        placeholder="瀹夊叏鍛�"
-    /></el-descriptions-item>
-    <el-descriptions-item label="瀹夊叏鍛樼數璇�"
-      ><el-input
-        :size="fontSize"
-        clearable
-        type="tel"
-        v-model="formObj.csSecurityOfficerTel"
-        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.csConstructionUnit"
-        placeholder="鎬诲寘鍗曚綅"
-    /></el-descriptions-item>
-    <!-- <el-descriptions-item label="鏂藉伐鍗曚綅鑱旂郴浜�"
+        <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="宸ョ▼绫诲瀷"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.csProjectType"
+            placeholder="宸ョ▼绫诲瀷"
+        /></el-descriptions-item>
+        <el-descriptions-item label="寤鸿鐘舵��"
+          ><el-select v-model="formObj.csStatus" placeholder="寤鸿鐘舵��">
+            <el-option
+              v-for="s in status"
+              :key="s.value"
+              :label="s.label"
+              :value="s.value"
+            /> </el-select
+        ></el-descriptions-item>
+        <el-descriptions-item label="鏂藉伐闃舵"
+          ><el-select
+            v-model="formObj.siExtension1"
+            placeholder="鏂藉伐闃舵"
+            :size="fontSize"
+          >
+            <el-option
+              v-for="s in stage"
+              :key="s.value"
+              :label="s.label"
+              :value="s.value"
+            /> </el-select
+        ></el-descriptions-item>
+        <el-descriptions-item label="鏂藉伐鏃堕棿"
+          ><el-date-picker
+            :size="fontSize"
+            v-model="formObj._timeRange"
+            type="daterange"
+            range-separator="鑷�"
+            start-placeholder="寮�宸ユ椂闂�"
+            end-placeholder="瀹屽伐鏃堕棿"
+        /></el-descriptions-item>
+        <el-descriptions-item label="鍓╀綑宸ユ湡"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.csLeftTime"
+            placeholder="鍓╀綑宸ユ湡锛屼緥濡傚嚑骞淬�佸嚑鏈堛�佸嚑鍛ㄣ�佸嚑澶╃瓑"
+        /></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="鍗犲湴闈㈢Н" rowspan="2"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.csFloorSpace"
+            placeholder="鍗犲湴闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input></el-descriptions-item
+        >
+        <el-descriptions-item label="鏂藉伐闈㈢Н"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.csConstructionArea"
+            placeholder="鏂藉伐闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input></el-descriptions-item
+        >
+        <el-descriptions-item label="姣忔湀鏂藉伐闈㈢Н"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.csConstructionAreaPerMonth"
+            placeholder="姣忔湀鏂藉伐闈㈢Н"
+          >
+            <template #append>銕�</template>
+          </el-input></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.csSecurityOfficer"
+            placeholder="瀹夊叏鍛�"
+        /></el-descriptions-item>
+        <el-descriptions-item label="瀹夊叏鍛樼數璇�"
+          ><el-input
+            :size="fontSize"
+            clearable
+            type="tel"
+            v-model="formObj.csSecurityOfficerTel"
+            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.csConstructionUnit"
+            placeholder="鎬诲寘鍗曚綅"
+        /></el-descriptions-item>
+        <!-- <el-descriptions-item label="鏂藉伐鍗曚綅鑱旂郴浜�"
       ><el-input
         clearable
         v-model="formObj.csConstructionContacts"
@@ -336,14 +345,14 @@
           <el-icon><Iphone /></el-icon>
         </template> </el-input
     ></el-descriptions-item> -->
-    <el-descriptions-item label="寤鸿鍗曚綅"
-      ><el-input
-        :size="fontSize"
-        clearable
-        v-model="formObj.csEmployerUnit"
-        placeholder="寤鸿鍗曚綅"
-    /></el-descriptions-item>
-    <!-- <el-descriptions-item label="涓氫富鍗曚綅鑱旂郴浜�"
+        <el-descriptions-item label="寤鸿鍗曚綅"
+          ><el-input
+            :size="fontSize"
+            clearable
+            v-model="formObj.csEmployerUnit"
+            placeholder="寤鸿鍗曚綅"
+        /></el-descriptions-item>
+        <!-- <el-descriptions-item label="涓氫富鍗曚綅鑱旂郴浜�"
       ><el-input
         clearable
         v-model="formObj.csEmployerContacts"
@@ -360,15 +369,16 @@
           <el-icon><Iphone /></el-icon>
         </template> </el-input
     ></el-descriptions-item> -->
-  </el-descriptions>
+      </el-descriptions>
+    </template>
+  </BaseSceneInfo>
 </template>
 
 <script setup>
 import { reactive, ref, watch, computed } from 'vue';
-import { useDateFormat } from '@vueuse/core';
 import { enumStatusNA, enumStageNA } from '@/enum/construction';
-import sceneApi from '@/api/fysp/sceneApi';
 import { useFormConfirm } from '@/composables/formConfirm';
+import BaseSceneInfo from './BaseSceneInfo.vue';
 
 const props = defineProps({
   scene: Object,
@@ -433,37 +443,9 @@
   ]
 });
 
-// 鍒涘缓鎴栨洿鏂板満鏅鎯�
-function createOrupdateSubScene() {
-  loading.value = true;
-
-  if (formObj.value._timeRange && formObj.value._timeRange.length == 2) {
-    const t = formObj.value._timeRange;
-    formObj.value.csStartTime = useDateFormat(t[0], 'YYYY-MM-DD');
-    formObj.value.csEndTime = useDateFormat(t[1], 'YYYY-MM-DD');
-  }
-  return sceneApi
-    .updateSubScene(props.sceneType, formObj.value)
-    .then((res) => {
-      emit('onSubmit', formObj);
-      emit('update:formInfo', formObj);
-      return res.data;
-    })
-    .finally(() => {
-      loading.value = false;
-    });
-}
-
-// 鏇存柊鍦烘櫙
-function updateScene() {
-  return sceneApi.updateScene(sceneObj.value).then(() => {
-    emit('update:scene', sceneObj);
-  });
-}
-
+const baseSceneInfo = ref(null);
 function submit() {
-  updateScene();
-  return createOrupdateSubScene();
+  return baseSceneInfo.value.submit();
 }
 
 function cancel() {
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>

--
Gitblit v1.9.3