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