feat(erp): 新增验收和收货状态字段及其映射和展示

- 在ErpProjectAcceptance和ErpProjectReceiving的Mapper XML中新增acceptanceStatus和receivingStatus字段映射
- 在相关SQL查询中添加acceptance_status和receiving_status字段的查询和关联
- 在ErpProjectAcceptanceVo和ErpProjectReceivingVo中新增acceptanceStatus和receivingStatus属性
- 为新增状态字段添加Excel导出注解,支持状态信息展示
- 状态字段含义为项目状态,值包括1暂存、2审批中、3可用
dev
zangch@mesnac.com 1 month ago
parent 9ab3276697
commit 2482fbb29f

@ -18,8 +18,13 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="验收确认编号" prop="acceptanceCode">
<el-input v-model="form.acceptanceCode" placeholder="自动生成" disabled />
<el-button class="ml-2" type="primary" @click="generateAcceptanceCode" :disabled="formDisabled || isCodeGenerated">生成编号</el-button>
<el-input v-model="form.acceptanceCode" placeholder="自动生成" disabled>
<template #append>
<el-button type="primary" @click="generateAcceptanceCode" :disabled="formDisabled || isCodeGenerated">
生成编号
</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@ -88,6 +93,7 @@ import type { ProjectAcceptanceForm } from '@/api/oa/erp/projectAcceptance/types
import SubmitVerify from '@/components/Process/submitVerify.vue'
const { proxy } = getCurrentInstance() as any
const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status'))
const route = useRoute()
// path :acceptanceId query id
const routeParams = reactive<{ id?: string | number; type?: string; taskId?: string | number }>({
@ -132,15 +138,15 @@ const initFormData: ProjectAcceptanceForm = {
const form = ref<ProjectAcceptanceForm>({ ...initFormData })
const isCodeGenerated = ref(false)
//
const approvalStatus = computed(() => {
const s = form.value.flowStatus as any
if (!s || s === '草稿') return 'draft'
if (s === '审批中') return 'waiting'
if (s === '驳回') return 'back'
if (s === '撤销') return 'cancel'
return s
})
const normalizeFlowStatus = (status?: string) => {
if (!status) return 'draft'
const dictList = wf_business_status.value || []
const match = dictList.find((item: any) => item?.value === status || item?.label === status)
return match?.value || status
}
//
const approvalStatus = computed(() => normalizeFlowStatus(form.value.flowStatus as any))
const pageTypeForButton = computed(() => {
if (routeParams.taskId) {
@ -266,8 +272,8 @@ const handleApprovalRecord = () => {
}
const formDisabled = computed(() => {
const s = form.value.flowStatus as any
const byStatus = !!s && s !== '草稿' && s !== '驳回'
const status = normalizeFlowStatus(form.value.flowStatus as any)
const byStatus = !!status && status !== 'draft' && status !== 'back'
return pageTypeForButton.value === 'view' || pageTypeForButton.value === 'approval' || byStatus
})

@ -50,8 +50,8 @@
</template>
<el-table v-loading="loading" border :data="projectAcceptanceList" @selection-change="handleSelectionChange">
<el-table-column type="index" width="55" align="center" v-if="columns[0].visible" />
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" type="index" width="50" align="center" v-if="columns[0].visible"/>
<el-table-column label="验收确认编号" align="center" prop="acceptanceCode" v-if="columns[1].visible"/>
<el-table-column label="项目号" align="center" prop="projectCode" v-if="columns[2].visible"/>
<el-table-column label="项目名称" align="center" prop="projectName" v-if="columns[3].visible"/>
@ -74,7 +74,12 @@
<el-table-column label="部门负责人" align="center" prop="chargeName" v-if="columns[7].visible"/>
<el-table-column label="分管副总" align="center" prop="deputyName" v-if="columns[8].visible"/>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[9].visible"/>
<el-table-column label="流程状态" align="center" v-if="columns[10].visible">
<el-table-column label="业务状态" align="center" prop="acceptanceStatus" v-if="columns[10].visible">
<template #default="scope">
<dict-tag :options="acceptance_status" :value="scope.row.acceptanceStatus" />
</template>
</el-table-column>
<el-table-column label="流程状态" align="center" v-if="columns[11].visible">
<template #default="scope">
<dict-tag :options="wf_business_status" :value="scope.row.flowStatus || 'draft'" />
</template>
@ -102,7 +107,7 @@
<!-- 对话框逻辑已切换为编辑页流程
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>...</el-dialog>
-->
<ApprovalRecord ref="approvalRecordRef" />
</div>
</template>
@ -110,15 +115,17 @@
<script setup name="ProjectAcceptance" lang="ts">
import { listProjectAcceptance, getProjectAcceptance, delProjectAcceptance, addProjectAcceptance, updateProjectAcceptance, submitProjectAcceptanceAndFlowStart, prepareProjectAcceptanceByProjectId } from '@/api/oa/erp/projectAcceptance';
import { ProjectAcceptanceVO, ProjectAcceptanceQuery, ProjectAcceptanceForm } from '@/api/oa/erp/projectAcceptance/types';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { useRouter, useRoute } from 'vue-router';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const router = useRouter();
const route = useRoute();
const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status'));
const { wf_business_status, acceptance_status } = toRefs<any>(
proxy?.useDict('wf_business_status', 'acceptance_status')
);
const projectAcceptanceList = ref<ProjectAcceptanceVO[]>([]);
const buttonLoading = ref(false);
@ -142,7 +149,7 @@
const columns = ref<FieldOption[]>([
{ key: 0, label: `序号`, visible: true },
{ key: 1, label: `验收确认编号`, visible: true },
{ key: 2, label: `项目号`, visible: true },
{ key: 2, label: `项目号`, visible: false },
{ key: 3, label: `项目名称`, visible: true },
{ key: 4, label: `项目经理`, visible: true },
{ key: 5, label: `验收日期`, visible: true },
@ -150,7 +157,8 @@
{ key: 7, label: `部门负责人`, visible: true },
{ key: 8, label: `分管副总`, visible: true },
{ key: 9, label: `备注`, visible: true },
{ key: 10, label: `流程状态`, visible: true },
{ key: 10, label: `业务状态`, visible: true },
{ key: 11, label: `流程状态`, visible: false },
]);
const initFormData: ProjectAcceptanceForm = {
@ -190,7 +198,7 @@
const { queryParams, form, rules } = toRefs(data);
const acceptanceDateRange = ref<string[]>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
/** 查询项目验收确认列表 */
@ -313,7 +321,7 @@
getList();
});
const downloadOss = (ossId: string | number) => {
proxy?.$download.oss(ossId as any);

@ -18,8 +18,13 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="收货确认编号" prop="receivingCode">
<el-input v-model="form.receivingCode" placeholder="自动生成" disabled />
<el-button class="ml-2" type="primary" @click="generateReceivingCode" :disabled="formDisabled || isCodeGenerated">生成编号</el-button>
<el-input v-model="form.receivingCode" placeholder="自动生成" disabled>
<template #append>
<el-button type="primary" @click="generateReceivingCode" :disabled="formDisabled || isCodeGenerated">
生成编号
</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@ -87,6 +92,7 @@ import type { ProjectReceivingForm } from '@/api/oa/erp/projectReceiving/types'
import SubmitVerify from '@/components/Process/submitVerify.vue'
const { proxy } = getCurrentInstance() as any
const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status'))
const route = useRoute()
// path :receivingId query id
const routeParams = reactive<{ id?: string | number; type?: string; taskId?: string | number }>({
@ -132,15 +138,15 @@ const initFormData: ProjectReceivingForm = {
const form = ref<ProjectReceivingForm>({ ...initFormData })
const isCodeGenerated = ref(false)
//
const approvalStatus = computed(() => {
const s = form.value.flowStatus as any
if (!s || s === '草稿') return 'draft'
if (s === '审批中') return 'waiting'
if (s === '驳回') return 'back'
if (s === '撤销') return 'cancel'
return s
})
const normalizeFlowStatus = (status?: string) => {
if (!status) return 'draft'
const dictList = wf_business_status.value || []
const match = dictList.find((item: any) => item?.value === status || item?.label === status)
return match?.value || status
}
//
const approvalStatus = computed(() => normalizeFlowStatus(form.value.flowStatus as any))
const pageTypeForButton = computed(() => {
if (routeParams.taskId) {
@ -272,8 +278,8 @@ const handleApprovalRecord = () => {
}
const formDisabled = computed(() => {
const s = form.value.flowStatus as any
const byStatus = !!s && s !== '草稿' && s !== '驳回'
const status = normalizeFlowStatus(form.value.flowStatus as any)
const byStatus = !!status && status !== 'draft' && status !== 'back'
return pageTypeForButton.value === 'view' || pageTypeForButton.value === 'approval' || byStatus
})
@ -304,11 +310,12 @@ onMounted(async () => {
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.taskId = route.query.taskId as any
await loadDetail()
})
onMounted(async () => {
await preloadProjectList()
if (routeParams.type === 'add') setNowIfAdd()
await loadDetail()
if (routeParams.type === 'add') {
setNowIfAdd()
}
})
</script>

@ -50,8 +50,8 @@
</template>
<el-table v-loading="loading" border :data="projectReceivingList" @selection-change="handleSelectionChange">
<el-table-column type="index" width="55" align="center" v-if="columns[0].visible" />
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" type="index" width="50" align="center" v-if="columns[0].visible"/>
<el-table-column label="收货确认编号" align="center" prop="receivingCode" v-if="columns[1].visible"/>
<el-table-column label="项目号" align="center" prop="projectCode" v-if="columns[2].visible"/>
<el-table-column label="项目名称" align="center" prop="projectName" v-if="columns[3].visible"/>
@ -74,7 +74,12 @@
<el-table-column label="部门负责人" align="center" prop="chargeName" v-if="columns[7].visible"/>
<el-table-column label="分管副总" align="center" prop="deputyName" v-if="columns[8].visible"/>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[9].visible"/>
<el-table-column label="流程状态" align="center" v-if="columns[10].visible">
<el-table-column label="业务状态" align="center" prop="receivingStatus" v-if="columns[10].visible">
<template #default="scope">
<dict-tag :options="receiving_status" :value="scope.row.receivingStatus" />
</template>
</el-table-column>
<el-table-column label="流程状态" align="center" v-if="columns[11].visible">
<template #default="scope">
<dict-tag :options="wf_business_status" :value="scope.row.flowStatus || 'draft'" />
</template>
@ -113,7 +118,9 @@
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const router = useRouter();
const route = useRoute();
const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status'));
const { wf_business_status, receiving_status } = toRefs<any>(
proxy?.useDict('wf_business_status', 'receiving_status')
);
const projectReceivingList = ref<ProjectReceivingVO[]>([]);
const buttonLoading = ref(false);
@ -137,7 +144,7 @@
const columns = ref<FieldOption[]>([
{ key: 0, label: `序号`, visible: true },
{ key: 1, label: `收货确认编号`, visible: true },
{ key: 2, label: `项目号`, visible: true },
{ key: 2, label: `项目号`, visible: false },
{ key: 3, label: `项目名称`, visible: true },
{ key: 4, label: `项目经理`, visible: true },
{ key: 5, label: `到货日期`, visible: true },
@ -145,7 +152,8 @@
{ key: 7, label: `部门负责人`, visible: true },
{ key: 8, label: `分管副总`, visible: true },
{ key: 9, label: `备注`, visible: true },
{ key: 10, label: `流程状态`, visible: true },
{ key: 10, label: `业务状态`, visible: true },
{ key: 11, label: `流程状态`, visible: false },
]);
const initFormData: ProjectReceivingForm = {

Loading…
Cancel
Save