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