refactor(erp): 优化项目流程实例业务扩展字段及代码格式

- 调整erpProjectChange、erpProjectPlan中bizExt字段,项目变更和计划编码使用对应编号,标题使用项目名称
- 优化projectAcceptance和projectReceiving页面中el-select、el-date-picker及代码格式
- 统一import语句和变量声明的分号使用,提升代码一致性
- 实现相关表单增加字段校验和日期默认值初始化
- 细化表单提交逻辑,权限检查仅允许项目经理操作(超级管理员除外)
- 优化流程状态规范及审批流程相关逻辑,完善业务状态映射
- 细化流程提交和暂存时bizExt的title和code字段传递,确保流程准确追踪
- 统一代码风格和格式,提升可读性与维护性
dev
zangch@mesnac.com 1 month ago
parent 3efc9e7332
commit 5a7cf72a68

@ -491,10 +491,10 @@ const handleSave = async (action: 'draft' | 'submit') => {
deptHeadId: form.value.deptHeadId, deptHeadId: form.value.deptHeadId,
changeType: form.value.changeType changeType: form.value.changeType
}; };
// // 使使
form.value.bizExt = { form.value.bizExt = {
businessTitle: '项目计划变更申请', businessTitle: form.value.projectName,
businessCode: form.value.projectCode businessCode: form.value.projectChangeCode
}; };
await submitProjectChangeAndFlowStart(form.value); await submitProjectChangeAndFlowStart(form.value);
proxy?.$modal.msgSuccess('提交成功'); proxy?.$modal.msgSuccess('提交成功');

@ -648,9 +648,10 @@ const submitForm = async (status = 'draft') => {
projectName: project?.projectName, projectName: project?.projectName,
managerId: form.value.managerId managerId: form.value.managerId
}; };
// 使使
form.value.bizExt = { form.value.bizExt = {
businessTitle: '项目计划审批', businessTitle: project?.projectName,
businessCode: project?.projectName businessCode: form.value.projectPlanCode
}; };
form.value.projectPlanStatus = '2'; form.value.projectPlanStatus = '2';
form.value.flowStatus = 'waiting'; form.value.flowStatus = 'waiting';

@ -23,8 +23,21 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目名称" prop="projectName"> <el-form-item label="项目名称" prop="projectName">
<el-select v-model="selectedProjectId" filterable clearable placeholder="请选择项目" :disabled="routeParams.type !== 'add'" :remote-method="remoteSearchProject" @change="onProjectChange"> <el-select
<el-option v-for="item in projectOptions" :key="item.projectId" :label="item.projectName + ' / ' + item.projectCode" :value="item.projectId" /> v-model="selectedProjectId"
filterable
clearable
placeholder="请选择项目"
:disabled="routeParams.type !== 'add'"
:remote-method="remoteSearchProject"
@change="onProjectChange"
>
<el-option
v-for="item in projectOptions"
:key="item.projectId"
:label="item.projectName + ' / ' + item.projectCode"
:value="item.projectId"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -41,7 +54,13 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="验收日期" prop="acceptanceDate"> <el-form-item label="验收日期" prop="acceptanceDate">
<el-date-picker v-model="form.acceptanceDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择验收日期" clearable /> <el-date-picker
v-model="form.acceptanceDate"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择验收日期"
clearable
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -71,43 +90,48 @@
<ApprovalRecord ref="approvalRecordRef" /> <ApprovalRecord ref="approvalRecordRef" />
<SubmitVerify ref="submitVerifyRef" @submit-callback="submitCallback" /> <SubmitVerify ref="submitVerifyRef" @submit-callback="submitCallback" />
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import ApprovalButton from '@/components/Process/approvalButton.vue' import ApprovalButton from '@/components/Process/approvalButton.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue' import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import FileUpload from '@/components/FileUpload/index.vue' import FileUpload from '@/components/FileUpload/index.vue';
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router';
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user';
import { getErpProjectInfoList } from '@/api/oa/erp/projectInfo' import { getErpProjectInfoList } from '@/api/oa/erp/projectInfo';
import { getProjectAcceptance, addProjectAcceptance, updateProjectAcceptance, submitProjectAcceptanceAndFlowStart, prepareProjectAcceptanceByProjectId } from '@/api/oa/erp/projectAcceptance' import {
import type { ProjectAcceptanceForm } from '@/api/oa/erp/projectAcceptance/types' addProjectAcceptance,
import SubmitVerify from '@/components/Process/submitVerify.vue' getProjectAcceptance,
prepareProjectAcceptanceByProjectId,
submitProjectAcceptanceAndFlowStart,
updateProjectAcceptance
} from '@/api/oa/erp/projectAcceptance';
import type { ProjectAcceptanceForm } from '@/api/oa/erp/projectAcceptance/types';
import SubmitVerify from '@/components/Process/submitVerify.vue';
const { proxy } = getCurrentInstance() as any const { proxy } = getCurrentInstance() as any;
const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status')) const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status'));
const route = useRoute() const route = useRoute();
// path :acceptanceId query id // path :acceptanceId query id
const routeParams = reactive<{ id?: string | number; type?: string; taskId?: string | number }>({ const routeParams = reactive<{ id?: string | number; type?: string; taskId?: string | number }>({
id: (route.params.acceptanceId || route.query.id) as any, id: (route.params.acceptanceId || route.query.id) as any,
type: (route.query.type as any) || 'add', type: (route.query.type as any) || 'add',
taskId: route.query.taskId as any taskId: route.query.taskId as any
}) });
const userStore = useUserStore() const userStore = useUserStore();
const isSuperAdmin = computed(() => { const isSuperAdmin = computed(() => {
const roles = userStore.roles || [] const roles = userStore.roles || [];
return roles.includes('admin') || roles.includes('superadmin') return roles.includes('admin') || roles.includes('superadmin');
}) });
const buttonLoading = ref(false) const buttonLoading = ref(false);
const formRef = ref<ElFormInstance>() const formRef = ref<ElFormInstance>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>() const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>() const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const projectOptions = ref<any[]>([]) const projectOptions = ref<any[]>([]);
const selectedProjectId = ref<any>() const selectedProjectId = ref<any>();
const initFormData: ProjectAcceptanceForm = { const initFormData: ProjectAcceptanceForm = {
acceptanceId: undefined, acceptanceId: undefined,
@ -126,165 +150,173 @@ const initFormData: ProjectAcceptanceForm = {
flowCode: 'OAPA', flowCode: 'OAPA',
variables: {}, variables: {},
bizExt: {} bizExt: {}
} };
const form = ref<ProjectAcceptanceForm>({ ...initFormData }) const form = ref<ProjectAcceptanceForm>({ ...initFormData });
const normalizeFlowStatus = (status?: string) => { const normalizeFlowStatus = (status?: string) => {
if (!status) return 'draft' if (!status) return 'draft';
const dictList = wf_business_status.value || [] const dictList = wf_business_status.value || [];
const match = dictList.find((item: any) => item?.value === status || item?.label === status) const match = dictList.find((item: any) => item?.value === status || item?.label === status);
return match?.value || status return match?.value || status;
} };
// //
const approvalStatus = computed(() => normalizeFlowStatus(form.value.flowStatus as any)) const approvalStatus = computed(() => normalizeFlowStatus(form.value.flowStatus as any));
const pageTypeForButton = computed(() => { const pageTypeForButton = computed(() => {
if (routeParams.taskId) { if (routeParams.taskId) {
return 'approval' return 'approval';
} }
return routeParams.type return routeParams.type;
}) });
const rules = { const rules = {
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }], projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
projectCode: [{ required: true, message: '项目号不能为空', trigger: 'blur' }], projectCode: [{ required: true, message: '项目号不能为空', trigger: 'blur' }],
acceptanceDate: [{ required: true, message: '验收日期不能为空', trigger: 'change' }] acceptanceDate: [{ required: true, message: '验收日期不能为空', trigger: 'change' }]
} as any } as any;
const ossIdString = computed({ const ossIdString = computed({
get() { get() {
const v = form.value.ossId as any const v = form.value.ossId as any;
return v === undefined || v === null ? '' : String(v) return v === undefined || v === null ? '' : String(v);
}, },
set(val: string) { set(val: string) {
form.value.ossId = val || undefined as any form.value.ossId = val || (undefined as any);
} }
}) });
const preloadProjectList = async () => { const preloadProjectList = async () => {
const res = await getErpProjectInfoList({}) const res = await getErpProjectInfoList({});
projectOptions.value = res.data || [] projectOptions.value = res.data || [];
} };
const remoteSearchProject = async (query: string) => { const remoteSearchProject = async (query: string) => {
const res = await getErpProjectInfoList({ projectName: query }) const res = await getErpProjectInfoList({ projectName: query });
projectOptions.value = res.data || [] projectOptions.value = res.data || [];
} };
const onProjectChange = async (val: any) => { const onProjectChange = async (val: any) => {
if (!val) return if (!val) return;
const { data } = await prepareProjectAcceptanceByProjectId(val) const { data } = await prepareProjectAcceptanceByProjectId(val);
Object.assign(form.value, data) Object.assign(form.value, data);
form.value.projectId = val form.value.projectId = val;
applyLeaderFromManager() applyLeaderFromManager();
} };
const applyLeaderFromManager = () => {
}
const applyLeaderFromManager = () => {};
const loadDetail = async () => { const loadDetail = async () => {
if (!routeParams.id || Number(routeParams.id) === 0) return if (!routeParams.id || Number(routeParams.id) === 0) return;
const res = await getProjectAcceptance(routeParams.id as any) const res = await getProjectAcceptance(routeParams.id as any);
Object.assign(form.value, res.data) Object.assign(form.value, res.data);
selectedProjectId.value = form.value.projectId selectedProjectId.value = form.value.projectId;
} };
const submitForm = (status: string, mode: boolean) => { const submitForm = (status: string, mode: boolean) => {
formRef.value?.validate(async (valid: boolean) => { formRef.value?.validate(async (valid: boolean) => {
if (!valid) return if (!valid) return;
// //
if (!form.value.managerId) { if (!form.value.managerId) {
proxy?.$modal.msgError('请先选择项目') proxy?.$modal.msgError('请先选择项目');
return return;
} }
if (!isSuperAdmin.value && userStore.userId !== form.value.managerId) { if (!isSuperAdmin.value && userStore.userId !== form.value.managerId) {
proxy?.$modal.msgError('只有项目经理才能提交或暂存项目验收确认') proxy?.$modal.msgError('只有项目经理才能提交或暂存项目验收确认');
return return;
} }
buttonLoading.value = true buttonLoading.value = true;
try { try {
if (status === 'draft') { if (status === 'draft') {
// draft // draft
form.value.flowStatus = 'draft' as any form.value.flowStatus = 'draft' as any;
form.value.acceptanceStatus = '1' // form.value.acceptanceStatus = '1'; //
if (form.value.acceptanceId) { if (form.value.acceptanceId) {
await updateProjectAcceptance(form.value) await updateProjectAcceptance(form.value);
} else { } else {
await addProjectAcceptance(form.value) await addProjectAcceptance(form.value);
} }
proxy?.$modal.msgSuccess('暂存成功') proxy?.$modal.msgSuccess('暂存成功');
proxy?.$tab.closePage(proxy.$route) proxy?.$tab.closePage(proxy.$route);
proxy?.$router.go(-1) proxy?.$router.go(-1);
} else { } else {
const variables: any = { managerId: form.value.managerId, managerName: form.value.projectManagerName } const variables: any = { managerId: form.value.managerId, managerName: form.value.projectManagerName };
const payload: ProjectAcceptanceForm = { ...form.value, flowCode: 'OAPA', variables, bizExt: { businessCode: form.value.acceptanceCode } } as any const payload: ProjectAcceptanceForm = {
await submitProjectAcceptanceAndFlowStart(payload) ...form.value,
proxy?.$modal.msgSuccess('已提交并发起流程') flowCode: 'OAPA',
proxy?.$tab.closePage(proxy.$route) variables,
proxy?.$router.go(-1) bizExt: { businessCode: form.value.acceptanceCode, businessTitle: form.value.projectName }
} as any;
await submitProjectAcceptanceAndFlowStart(payload);
proxy?.$modal.msgSuccess('已提交并发起流程');
proxy?.$tab.closePage(proxy.$route);
proxy?.$router.go(-1);
} }
} finally { } finally {
buttonLoading.value = false buttonLoading.value = false;
}
})
} }
});
};
const submitCallback = async () => { const submitCallback = async () => {
await proxy?.$tab.closePage(proxy.$route) await proxy?.$tab.closePage(proxy.$route);
proxy?.$router.go(-1) proxy?.$router.go(-1);
} };
const approvalVerifyOpen = async () => { const approvalVerifyOpen = async () => {
await submitVerifyRef.value?.openDialog(routeParams.taskId as any) await submitVerifyRef.value?.openDialog(routeParams.taskId as any);
} };
const submitAndStartFlow = async () => { const submitAndStartFlow = async () => {
formRef.value?.validate(async (valid: boolean) => { formRef.value?.validate(async (valid: boolean) => {
if (!valid) return if (!valid) return;
buttonLoading.value = true buttonLoading.value = true;
try { try {
const payload: ProjectAcceptanceForm = { ...form.value, flowCode: 'OAPA', variables: {}, bizExt: { businessCode: form.value.acceptanceCode } } as any const payload: ProjectAcceptanceForm = {
await submitProjectAcceptanceAndFlowStart(payload) ...form.value,
proxy?.$modal.msgSuccess('已提交并发起流程') flowCode: 'OAPA',
variables: {},
bizExt: { businessCode: form.value.acceptanceCode, businessTitle: form.value.projectName }
} as any;
await submitProjectAcceptanceAndFlowStart(payload);
proxy?.$modal.msgSuccess('已提交并发起流程');
} finally { } finally {
buttonLoading.value = false buttonLoading.value = false;
}
})
} }
});
};
const handleApprovalRecord = () => { const handleApprovalRecord = () => {
if (form.value.acceptanceId) { if (form.value.acceptanceId) {
approvalRecordRef.value?.init(form.value.acceptanceId) approvalRecordRef.value?.init(form.value.acceptanceId);
}
} }
};
const formDisabled = computed(() => { const formDisabled = computed(() => {
const status = normalizeFlowStatus(form.value.flowStatus as any) const status = normalizeFlowStatus(form.value.flowStatus as any);
const byStatus = !!status && status !== 'draft' && status !== 'back' const byStatus = !!status && status !== 'draft' && status !== 'back';
return pageTypeForButton.value === 'view' || pageTypeForButton.value === 'approval' || byStatus return pageTypeForButton.value === 'view' || pageTypeForButton.value === 'approval' || byStatus;
}) });
onMounted(async () => { onMounted(async () => {
// ID使 path :acceptanceId使 query.id // ID使 path :acceptanceId使 query.id
routeParams.id = (route.params.acceptanceId || route.query.id) as any routeParams.id = (route.params.acceptanceId || route.query.id) as any;
routeParams.type = (route.query.type as any) || (routeParams.id && Number(routeParams.id) !== 0 ? 'update' : 'add') routeParams.type = (route.query.type as any) || (routeParams.id && Number(routeParams.id) !== 0 ? 'update' : 'add');
routeParams.taskId = route.query.taskId as any routeParams.taskId = route.query.taskId as any;
// //
await preloadProjectList() await preloadProjectList();
// //
await loadDetail() await loadDetail();
// //
if (routeParams.type === 'add') { if (routeParams.type === 'add') {
const d = new Date() const d = new Date();
const s = `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')} ${String(d.getHours()).padStart(2,'0')}:${String(d.getMinutes()).padStart(2,'0')}:${String(d.getSeconds()).padStart(2,'0')}` const s = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')} ${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}:${String(d.getSeconds()).padStart(2, '0')}`;
form.value.acceptanceDate = s as any form.value.acceptanceDate = s as any;
} }
}) });
</script> </script>

@ -23,8 +23,21 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目名称" prop="projectName"> <el-form-item label="项目名称" prop="projectName">
<el-select v-model="selectedProjectId" filterable clearable placeholder="请选择项目" :disabled="routeParams.type !== 'add'" :remote-method="remoteSearchProject" @change="onProjectChange"> <el-select
<el-option v-for="item in projectOptions" :key="item.projectId" :label="item.projectName + ' / ' + item.projectCode" :value="item.projectId" /> v-model="selectedProjectId"
filterable
clearable
placeholder="请选择项目"
:disabled="routeParams.type !== 'add'"
:remote-method="remoteSearchProject"
@change="onProjectChange"
>
<el-option
v-for="item in projectOptions"
:key="item.projectId"
:label="item.projectName + ' / ' + item.projectCode"
:value="item.projectId"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -74,39 +87,45 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import ApprovalButton from '@/components/Process/approvalButton.vue' import ApprovalButton from '@/components/Process/approvalButton.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue' import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import FileUpload from '@/components/FileUpload/index.vue' import FileUpload from '@/components/FileUpload/index.vue';
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router';
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user';
import { getErpProjectInfoList } from '@/api/oa/erp/projectInfo' import { getErpProjectInfoList } from '@/api/oa/erp/projectInfo';
import { getProjectReceiving, addProjectReceiving, updateProjectReceiving, submitProjectReceivingAndFlowStart, prepareProjectReceivingByProjectId } from '@/api/oa/erp/projectReceiving' import {
import type { ProjectReceivingForm } from '@/api/oa/erp/projectReceiving/types' addProjectReceiving,
import SubmitVerify from '@/components/Process/submitVerify.vue' getProjectReceiving,
prepareProjectReceivingByProjectId,
submitProjectReceivingAndFlowStart,
updateProjectReceiving
} from '@/api/oa/erp/projectReceiving';
import type { ProjectReceivingForm } from '@/api/oa/erp/projectReceiving/types';
import SubmitVerify from '@/components/Process/submitVerify.vue';
const { proxy } = getCurrentInstance() as any const { proxy } = getCurrentInstance() as any;
const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status')) const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status'));
const route = useRoute() const route = useRoute();
// path :receivingId query id // path :receivingId query id
const routeParams = reactive<{ id?: string | number; type?: string; taskId?: string | number }>({ const routeParams = reactive<{ id?: string | number; type?: string; taskId?: string | number }>({
id: (route.params.receivingId || route.query.id) as any, id: (route.params.receivingId || route.query.id) as any,
type: (route.query.type as any) || 'add', type: (route.query.type as any) || 'add',
taskId: route.query.taskId as any taskId: route.query.taskId as any
}) });
const userStore = useUserStore() const userStore = useUserStore();
const isSuperAdmin = computed(() => { const isSuperAdmin = computed(() => {
const roles = userStore.roles || [] const roles = userStore.roles || [];
return roles.includes('admin') || roles.includes('superadmin') return roles.includes('admin') || roles.includes('superadmin');
}) });
const buttonLoading = ref(false) const buttonLoading = ref(false);
const formRef = ref<ElFormInstance>() const formRef = ref<ElFormInstance>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>() const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>() const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const projectOptions = ref<any[]>([]) const projectOptions = ref<any[]>([]);
const selectedProjectId = ref<any>() const selectedProjectId = ref<any>();
const initFormData: ProjectReceivingForm = { const initFormData: ProjectReceivingForm = {
receivingId: undefined, receivingId: undefined,
@ -126,165 +145,173 @@ const initFormData: ProjectReceivingForm = {
flowCode: 'OAPR', flowCode: 'OAPR',
variables: {}, variables: {},
bizExt: {} bizExt: {}
} };
const form = ref<ProjectReceivingForm>({ ...initFormData }) const form = ref<ProjectReceivingForm>({ ...initFormData });
const normalizeFlowStatus = (status?: string) => { const normalizeFlowStatus = (status?: string) => {
if (!status) return 'draft' if (!status) return 'draft';
const dictList = wf_business_status.value || [] const dictList = wf_business_status.value || [];
const match = dictList.find((item: any) => item?.value === status || item?.label === status) const match = dictList.find((item: any) => item?.value === status || item?.label === status);
return match?.value || status return match?.value || status;
} };
// //
const approvalStatus = computed(() => normalizeFlowStatus(form.value.flowStatus as any)) const approvalStatus = computed(() => normalizeFlowStatus(form.value.flowStatus as any));
const pageTypeForButton = computed(() => { const pageTypeForButton = computed(() => {
if (routeParams.taskId) { if (routeParams.taskId) {
return 'approval' return 'approval';
} }
return routeParams.type return routeParams.type;
}) });
const rules = { const rules = {
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }], projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
projectCode: [{ required: true, message: '项目号不能为空', trigger: 'blur' }], projectCode: [{ required: true, message: '项目号不能为空', trigger: 'blur' }],
arrivalDate: [{ required: true, message: '到货日期不能为空', trigger: 'change' }] arrivalDate: [{ required: true, message: '到货日期不能为空', trigger: 'change' }]
} as any } as any;
const ossIdString = computed({ const ossIdString = computed({
get() { get() {
const v = form.value.ossId as any const v = form.value.ossId as any;
return v === undefined || v === null ? '' : String(v) return v === undefined || v === null ? '' : String(v);
}, },
set(val: string) { set(val: string) {
form.value.ossId = val || undefined as any form.value.ossId = val || (undefined as any);
} }
}) });
const remoteSearchProject = async (query: string) => { const remoteSearchProject = async (query: string) => {
const res = await getErpProjectInfoList({ projectName: query }) const res = await getErpProjectInfoList({ projectName: query });
projectOptions.value = res.data || [] projectOptions.value = res.data || [];
} };
const preloadProjectList = async () => { const preloadProjectList = async () => {
const res = await getErpProjectInfoList({}) const res = await getErpProjectInfoList({});
projectOptions.value = res.data || [] projectOptions.value = res.data || [];
} };
const setNowIfAdd = () => { const setNowIfAdd = () => {
const d = new Date() const d = new Date();
const s = `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')} ${String(d.getHours()).padStart(2,'0')}:${String(d.getMinutes()).padStart(2,'0')}:${String(d.getSeconds()).padStart(2,'0')}` const s = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')} ${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}:${String(d.getSeconds()).padStart(2, '0')}`;
form.value.arrivalDate = s as any form.value.arrivalDate = s as any;
} };
const onProjectChange = async (val: any) => { const onProjectChange = async (val: any) => {
if (!val) return if (!val) return;
const { data } = await prepareProjectReceivingByProjectId(val) const { data } = await prepareProjectReceivingByProjectId(val);
Object.assign(form.value, data) Object.assign(form.value, data);
form.value.projectId = val as any form.value.projectId = val as any;
applyLeaderFromManager() applyLeaderFromManager();
} };
const applyLeaderFromManager = () => {
}
const applyLeaderFromManager = () => {};
const loadDetail = async () => { const loadDetail = async () => {
if (!routeParams.id || Number(routeParams.id) === 0) return if (!routeParams.id || Number(routeParams.id) === 0) return;
const res = await getProjectReceiving(routeParams.id as any) const res = await getProjectReceiving(routeParams.id as any);
Object.assign(form.value, res.data) Object.assign(form.value, res.data);
selectedProjectId.value = form.value.projectId selectedProjectId.value = form.value.projectId;
} };
const submitForm = (status: string, mode: boolean) => { const submitForm = (status: string, mode: boolean) => {
formRef.value?.validate(async (valid: boolean) => { formRef.value?.validate(async (valid: boolean) => {
if (!valid) return if (!valid) return;
// //
if (!form.value.managerId) { if (!form.value.managerId) {
proxy?.$modal.msgError('请先选择项目') proxy?.$modal.msgError('请先选择项目');
return return;
} }
if (!isSuperAdmin.value && userStore.userId !== form.value.managerId) { if (!isSuperAdmin.value && userStore.userId !== form.value.managerId) {
proxy?.$modal.msgError('只有项目经理才能提交或暂存项目收货确认') proxy?.$modal.msgError('只有项目经理才能提交或暂存项目收货确认');
return return;
} }
buttonLoading.value = true buttonLoading.value = true;
try { try {
if (status === 'draft') { if (status === 'draft') {
// draft // draft
form.value.flowStatus = 'draft' as any form.value.flowStatus = 'draft' as any;
form.value.receivingStatus = '1' // form.value.receivingStatus = '1'; //
if (form.value.receivingId) { if (form.value.receivingId) {
await updateProjectReceiving(form.value) await updateProjectReceiving(form.value);
} else { } else {
await addProjectReceiving(form.value) await addProjectReceiving(form.value);
} }
proxy?.$modal.msgSuccess('暂存成功') proxy?.$modal.msgSuccess('暂存成功');
proxy?.$tab.closePage(proxy.$route) proxy?.$tab.closePage(proxy.$route);
proxy?.$router.go(-1) proxy?.$router.go(-1);
} else { } else {
const variables: any = { managerId: form.value.managerId, managerName: form.value.projectManagerName } const variables: any = { managerId: form.value.managerId, managerName: form.value.projectManagerName };
const payload: ProjectReceivingForm = { ...form.value, flowCode: 'OAPR', variables, bizExt: { businessCode: form.value.receivingCode } } as any const payload: ProjectReceivingForm = {
await submitProjectReceivingAndFlowStart(payload) ...form.value,
proxy?.$modal.msgSuccess('已提交并发起流程') flowCode: 'OAPR',
proxy?.$tab.closePage(proxy.$route) variables,
proxy?.$router.go(-1) bizExt: { businessCode: form.value.receivingCode, businessTitle: form.value.projectName }
} as any;
await submitProjectReceivingAndFlowStart(payload);
proxy?.$modal.msgSuccess('已提交并发起流程');
proxy?.$tab.closePage(proxy.$route);
proxy?.$router.go(-1);
} }
} finally { } finally {
buttonLoading.value = false buttonLoading.value = false;
}
})
} }
});
};
const submitCallback = async () => { const submitCallback = async () => {
await proxy?.$tab.closePage(proxy.$route) await proxy?.$tab.closePage(proxy.$route);
proxy?.$router.go(-1) proxy?.$router.go(-1);
} };
const approvalVerifyOpen = async () => { const approvalVerifyOpen = async () => {
await submitVerifyRef.value?.openDialog(routeParams.taskId as any) await submitVerifyRef.value?.openDialog(routeParams.taskId as any);
} };
const submitAndStartFlow = async () => { const submitAndStartFlow = async () => {
formRef.value?.validate(async (valid: boolean) => { formRef.value?.validate(async (valid: boolean) => {
if (!valid) return if (!valid) return;
buttonLoading.value = true buttonLoading.value = true;
try { try {
const payload: ProjectReceivingForm = { ...form.value, flowCode: 'OAPR', variables: {}, bizExt: { businessCode: form.value.receivingCode } } as any const payload: ProjectReceivingForm = {
await submitProjectReceivingAndFlowStart(payload) ...form.value,
proxy?.$modal.msgSuccess('已提交并发起流程') flowCode: 'OAPR',
variables: {},
bizExt: { businessCode: form.value.receivingCode, businessTitle: form.value.projectName }
} as any;
await submitProjectReceivingAndFlowStart(payload);
proxy?.$modal.msgSuccess('已提交并发起流程');
} finally { } finally {
buttonLoading.value = false buttonLoading.value = false;
}
})
} }
});
};
const handleApprovalRecord = () => { const handleApprovalRecord = () => {
if (form.value.receivingId) { if (form.value.receivingId) {
approvalRecordRef.value?.init(form.value.receivingId) approvalRecordRef.value?.init(form.value.receivingId);
}
} }
};
const formDisabled = computed(() => { const formDisabled = computed(() => {
const status = normalizeFlowStatus(form.value.flowStatus as any) const status = normalizeFlowStatus(form.value.flowStatus as any);
const byStatus = !!status && status !== 'draft' && status !== 'back' const byStatus = !!status && status !== 'draft' && status !== 'back';
return pageTypeForButton.value === 'view' || pageTypeForButton.value === 'approval' || byStatus return pageTypeForButton.value === 'view' || pageTypeForButton.value === 'approval' || byStatus;
}) });
onMounted(async () => { onMounted(async () => {
// ID使 path :receivingId使 query.id // ID使 path :receivingId使 query.id
routeParams.id = (route.params.receivingId || route.query.id) as any routeParams.id = (route.params.receivingId || route.query.id) as any;
routeParams.type = (route.query.type as any) || (routeParams.id && Number(routeParams.id) !== 0 ? 'update' : 'add') routeParams.type = (route.query.type as any) || (routeParams.id && Number(routeParams.id) !== 0 ? 'update' : 'add');
routeParams.taskId = route.query.taskId as any routeParams.taskId = route.query.taskId as any;
await preloadProjectList() await preloadProjectList();
await loadDetail() await loadDetail();
if (routeParams.type === 'add') { if (routeParams.type === 'add') {
setNowIfAdd() setNowIfAdd();
} }
}) });
</script> </script>

Loading…
Cancel
Save