|
|
|
|
@ -76,7 +76,8 @@
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="项目计划状态" prop="projectPlanStatus">
|
|
|
|
|
<el-select v-model="form.projectPlanStatus" placeholder="请选择项目计划状态" :disabled="!isBasicEditable">
|
|
|
|
|
<!-- <el-select v-model="form.projectPlanStatus" placeholder="请选择项目计划状态" :disabled="!isBasicEditable"> -->
|
|
|
|
|
<el-select v-model="form.projectPlanStatus" placeholder="请选择项目计划状态" :disabled="true">
|
|
|
|
|
<el-option v-for="dict in project_plan_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
@ -169,7 +170,7 @@
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup lang="ts" name="ErpProjectPlanEdit">
|
|
|
|
|
import { ref, reactive, onMounted, getCurrentInstance, watch, computed } from 'vue';
|
|
|
|
|
import { ref, reactive, onMounted, onActivated, getCurrentInstance, watch, computed } from 'vue';
|
|
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
|
|
import { getErpProjectPlan, addErpProjectPlan, updateErpProjectPlan, projectPlanSubmitAndFlowStart } from '@/api/oa/erp/erpProjectPlan';
|
|
|
|
|
import { ErpProjectPlanForm } from '@/api/oa/erp/erpProjectPlan/types';
|
|
|
|
|
@ -187,6 +188,7 @@ const { project_plan_status , project_phases, collection_stage } = toRefs<any>(
|
|
|
|
|
const route = useRoute();
|
|
|
|
|
const router = useRouter();
|
|
|
|
|
const userStore = useUserStore();
|
|
|
|
|
const refreshFlagKey = 'erpProjectPlanListShouldRefresh';
|
|
|
|
|
|
|
|
|
|
// 审批相关组件引用
|
|
|
|
|
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
|
|
|
|
|
@ -206,12 +208,6 @@ const syncRouteParams = () => {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
syncRouteParams();
|
|
|
|
|
watch(
|
|
|
|
|
() => route.fullPath,
|
|
|
|
|
() => {
|
|
|
|
|
syncRouteParams();
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// approvalButton组件的pageType(将'edit'转换为'update')
|
|
|
|
|
const approvalPageType = computed(() => {
|
|
|
|
|
@ -295,8 +291,9 @@ const projectInfoList = ref<any[]>([]);
|
|
|
|
|
const userList = ref<any[]>([]);
|
|
|
|
|
const contractInfoList = ref<any[]>([]);
|
|
|
|
|
const contractTotalPrice = ref<number>(0);
|
|
|
|
|
const baseDataLoaded = ref(false);
|
|
|
|
|
|
|
|
|
|
const form = ref<ErpProjectPlanForm>({
|
|
|
|
|
const createEmptyForm = (): ErpProjectPlanForm => ({
|
|
|
|
|
projectPlanId: undefined,
|
|
|
|
|
projectId: undefined,
|
|
|
|
|
managerId: undefined,
|
|
|
|
|
@ -309,11 +306,22 @@ const form = ref<ErpProjectPlanForm>({
|
|
|
|
|
planStageList: []
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const form = ref<ErpProjectPlanForm>(createEmptyForm());
|
|
|
|
|
|
|
|
|
|
const rules = reactive({
|
|
|
|
|
projectId: [{ required: true, message: '请选择项目', trigger: 'change' }],
|
|
|
|
|
managerId: [{ required: true, message: '请选择项目经理', trigger: 'change' }]
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const notifyListRefresh = () => {
|
|
|
|
|
sessionStorage.setItem(refreshFlagKey, Date.now().toString());
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const resetForm = () => {
|
|
|
|
|
form.value = createEmptyForm();
|
|
|
|
|
contractTotalPrice.value = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 获取项目列表 */
|
|
|
|
|
const getProjectInfoList = async () => {
|
|
|
|
|
const res = await getErpProjectInfoList({});
|
|
|
|
|
@ -332,6 +340,14 @@ const getContractInfoList = async () => {
|
|
|
|
|
contractInfoList.value = res.data;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const initBaseData = async () => {
|
|
|
|
|
if (baseDataLoaded.value) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
await Promise.all([getProjectInfoList(), getUserList(), getContractInfoList()]);
|
|
|
|
|
baseDataLoaded.value = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 添加阶段 */
|
|
|
|
|
const handleAddStage = () => {
|
|
|
|
|
const newStage = {
|
|
|
|
|
@ -470,6 +486,7 @@ const submitForm = async (status = 'draft') => {
|
|
|
|
|
form.value = res.data;
|
|
|
|
|
buttonLoading.value = false;
|
|
|
|
|
proxy?.$modal.msgSuccess('操作成功');
|
|
|
|
|
notifyListRefresh();
|
|
|
|
|
proxy?.$tab.closePage();
|
|
|
|
|
router.go(-1);
|
|
|
|
|
} else {
|
|
|
|
|
@ -485,6 +502,7 @@ const submitForm = async (status = 'draft') => {
|
|
|
|
|
}
|
|
|
|
|
buttonLoading.value = false;
|
|
|
|
|
proxy?.$modal.msgSuccess('暂存成功');
|
|
|
|
|
notifyListRefresh();
|
|
|
|
|
proxy?.$tab.closePage();
|
|
|
|
|
router.go(-1);
|
|
|
|
|
}
|
|
|
|
|
@ -536,6 +554,7 @@ const saveLimited = () => {
|
|
|
|
|
}
|
|
|
|
|
await updateErpProjectPlan(form.value);
|
|
|
|
|
proxy?.$modal.msgSuccess('保存成功');
|
|
|
|
|
notifyListRefresh();
|
|
|
|
|
proxy?.$tab.closePage();
|
|
|
|
|
router.go(-1);
|
|
|
|
|
} finally {
|
|
|
|
|
@ -544,54 +563,76 @@ const saveLimited = () => {
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 审批对话框 */
|
|
|
|
|
const approvalVerifyOpen = async () => {
|
|
|
|
|
await submitVerifyRef.value?.openDialog(routeParams.value.taskId);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const loadFormData = async () => {
|
|
|
|
|
await initBaseData();
|
|
|
|
|
|
|
|
|
|
syncRouteParams();
|
|
|
|
|
const projectPlanId = routeParams.value.projectPlanId;
|
|
|
|
|
draftLoading.value = false;
|
|
|
|
|
submitLoading.value = false;
|
|
|
|
|
buttonLoading.value = false;
|
|
|
|
|
|
|
|
|
|
if (projectPlanId && projectPlanId !== '0') {
|
|
|
|
|
const res = await getErpProjectPlan(projectPlanId as string);
|
|
|
|
|
form.value = res.data;
|
|
|
|
|
if (!form.value.flowStatus) {
|
|
|
|
|
form.value.flowStatus = 'draft';
|
|
|
|
|
}
|
|
|
|
|
if (!form.value.planStageList) {
|
|
|
|
|
form.value.planStageList = [];
|
|
|
|
|
}
|
|
|
|
|
if (form.value.contractId) {
|
|
|
|
|
const contract = contractInfoList.value.find(c => c.contractId === form.value.contractId);
|
|
|
|
|
if (contract) {
|
|
|
|
|
contractTotalPrice.value = contract.totalPrice || 0;
|
|
|
|
|
} else {
|
|
|
|
|
contractTotalPrice.value = 0;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
contractTotalPrice.value = 0;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
resetForm();
|
|
|
|
|
form.value.flowStatus = 'draft';
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 返回列表 */
|
|
|
|
|
const goBack = () => {
|
|
|
|
|
router.back();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 初始化数据 */
|
|
|
|
|
const initData = async () => {
|
|
|
|
|
await Promise.all([getProjectInfoList(), getUserList(), getContractInfoList()]);
|
|
|
|
|
|
|
|
|
|
syncRouteParams();
|
|
|
|
|
const projectPlanId = routeParams.value.projectPlanId;
|
|
|
|
|
if (projectPlanId && projectPlanId !== '0') {
|
|
|
|
|
const res = await getErpProjectPlan(projectPlanId as string);
|
|
|
|
|
form.value = res.data;
|
|
|
|
|
|
|
|
|
|
// 确保flowStatus有默认值(用于approvalButton组件显示)
|
|
|
|
|
if (!form.value.flowStatus) {
|
|
|
|
|
form.value.flowStatus = 'draft';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取合同总价用于计算回款金额
|
|
|
|
|
if (form.value.contractId) {
|
|
|
|
|
const contract = contractInfoList.value.find(c => c.contractId === form.value.contractId);
|
|
|
|
|
if (contract) {
|
|
|
|
|
contractTotalPrice.value = contract.totalPrice || 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 审批
|
|
|
|
|
const approvalVerifyOpen = async () => {
|
|
|
|
|
await submitVerifyRef.value?.openDialog(routeParams.value.taskId);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 审批记录
|
|
|
|
|
/** 审批记录 */
|
|
|
|
|
const handleApprovalRecord = () => {
|
|
|
|
|
approvalRecordRef.value?.init(form.value.projectPlanId);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 提交回调
|
|
|
|
|
const submitCallback = async () => {
|
|
|
|
|
notifyListRefresh();
|
|
|
|
|
await proxy?.$tab.closePage(route);
|
|
|
|
|
router.go(-1);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
watch(
|
|
|
|
|
() => route.fullPath,
|
|
|
|
|
() => {
|
|
|
|
|
loadFormData();
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
initData();
|
|
|
|
|
loadFormData();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
onActivated(() => {
|
|
|
|
|
loadFormData();
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|