diff --git a/src/views/oa/erp/projectAcceptance/edit.vue b/src/views/oa/erp/projectAcceptance/edit.vue
index b24801d..cb5607d 100644
--- a/src/views/oa/erp/projectAcceptance/edit.vue
+++ b/src/views/oa/erp/projectAcceptance/edit.vue
@@ -21,25 +21,27 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
@@ -47,11 +49,11 @@
@@ -62,19 +64,23 @@
:limit="5"
:fileSize="20"
:fileType="['doc', 'docx', 'pdf', 'xls', 'xlsx', 'png', 'jpg', 'jpeg']"
- :disabled="formDisabled"
+ :disabled="isFormDisabled"
:isShowTip="true"
/>
-
+
+
+
-
+
+
+
@@ -83,8 +89,8 @@
v-model="form.remark"
type="textarea"
:rows="3"
- placeholder="确认该项目达到客户验收节点,可以进行发货款收取(如设计)。"
- :disabled="formDisabled"
+ placeholder="确认该项目达到客户验收节点,可以进行验收。"
+ :disabled="isFormDisabled"
/>
@@ -117,6 +123,7 @@ import {
import type { ProjectAcceptanceForm } from '@/api/oa/erp/projectAcceptance/types';
import { FlowCodeEnum } from '@/enums/OAEnum';
import SubmitVerify from '@/components/Process/submitVerify.vue';
+import { getUserList } from '@/api/system/user';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const route = useRoute();
@@ -167,12 +174,52 @@ const initFormData: ProjectAcceptanceForm = {
const form = ref({ ...initFormData });
+/** 用户下拉(与项目信息 devEdit 一致) */
+const userList = ref([]);
+const getUserSelectList = async () => {
+ const res = await getUserList({} as any);
+ userList.value = res.data || [];
+};
+
+/** 根据当前 ID 从 userList 同步流程变量用的姓名字段;下拉未包含该用户时保留表单已有姓名 */
+const syncPersonNamesFromIds = () => {
+ const nick = (id: string | number | undefined, fallback: string | undefined) => {
+ if (id === undefined || id === null || id === '') return '';
+ const u = userList.value.find((x) => String(x.userId) === String(id));
+ if (u) return String(u.nickName || u.userName || '').trim();
+ return String(fallback ?? '').trim();
+ };
+ form.value.projectManagerName = nick(form.value.managerId, form.value.projectManagerName) as any;
+ form.value.chargeName = nick(form.value.chargeId, form.value.chargeName) as any;
+ form.value.deputyName = nick(form.value.deputyId, form.value.deputyName) as any;
+};
+
const rules = {
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
projectCode: [{ required: true, message: '项目号不能为空', trigger: 'blur' }],
- acceptanceDate: [{ required: true, message: '验收日期不能为空', trigger: 'change' }]
+ acceptanceDate: [{ required: true, message: '验收日期不能为空', trigger: 'change' }],
+ ossId: [
+ {
+ required: true,
+ validator: (_rule: any, _value: any, callback: (e?: Error) => void) => {
+ const v = form.value.ossId;
+ if (v === undefined || v === null || String(v).trim() === '') {
+ callback(new Error('请上传验收单附件'));
+ } else {
+ callback();
+ }
+ },
+ trigger: 'change'
+ }
+ ]
} as any;
+/** 验收日期设为当天(yyyy-MM-dd) */
+const setAcceptanceDateToday = () => {
+ const d = new Date();
+ form.value.acceptanceDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}` as any;
+};
+
const ossIdString = computed({
get() {
const v = form.value.ossId as any;
@@ -185,7 +232,6 @@ const ossIdString = computed({
/** 打开项目选择弹窗 */
const openProjectSelect = () => {
- if (routeParams.value.type !== 'add') return;
projectSelectRef.value?.open();
};
@@ -194,10 +240,11 @@ const projectInfoSelectCallBack = async (data: ProjectInfoVO[]) => {
if (data && data.length > 0) {
const project = data[0];
form.value.projectId = project.projectId;
- form.value.projectName = project.projectName || '';
- form.value.projectCode = project.projectCode || '';
- // 调用 onProjectChange 填充其他关联字段
- await onProjectChange(project.projectId);
+ form.value.projectCode = project.projectCode;
+ form.value.projectName = project.projectName;
+ form.value.managerId = project.managerId;
+ form.value.chargeId = project.chargeId;
+ form.value.deputyId = project.deputyId;
}
};
@@ -206,18 +253,14 @@ const onProjectChange = async (val: any) => {
const { data } = await prepareProjectAcceptanceByProjectId(val);
Object.assign(form.value, data);
form.value.projectId = val;
- applyLeaderFromManager();
+ syncPersonNamesFromIds();
};
-const applyLeaderFromManager = () => {};
-
const loadDetail = async () => {
- console.log('loadDetail start');
if (!routeParams.value.id) return;
const res = await getProjectAcceptance(routeParams.value.id);
- console.log('loadDetail res:', res);
Object.assign(form.value, res.data);
- console.log('loadDetail end');
+ syncPersonNamesFromIds();
};
const submitForm = (status: string, mode: boolean) => {
@@ -253,7 +296,7 @@ const submitForm = (status: string, mode: boolean) => {
};
form.value.bizExt = {
businessCode: form.value.acceptanceCode,
- businessTitle: form.value.projectName
+ businessTitle: form.value.projectName + '验收确认'
};
await submitProjectAcceptanceAndFlowStart(form.value);
proxy?.$modal.msgSuccess('操作成功');
@@ -264,7 +307,6 @@ const submitForm = (status: string, mode: boolean) => {
// 暂存:显式设置流程状态为 draft
form.value.flowStatus = 'draft' as any;
form.value.acceptanceStatus = '1'; // 业务状态:暂存
-
if (form.value.acceptanceId) {
await updateProjectAcceptance(form.value);
} else {
@@ -296,38 +338,34 @@ const handleApprovalRecord = () => {
}
};
-// 表单禁用逻辑(与项目信息保持一致,且只有草稿状态可编辑)
-const formDisabled = computed(() => {
+/** 表单是否禁用:查看/审批模式,或非暂存业务状态 */
+const isFormDisabled = computed(() => {
if (routeParams.value.type === 'view' || routeParams.value.type === 'approval') {
return true;
}
- // 仅草稿状态(acceptanceStatus === '1')允许编辑,其余状态只读
+ // 仅暂存(acceptanceStatus === '1')可编辑,其余只读
if (!form.value.acceptanceStatus) {
return false;
}
return form.value.acceptanceStatus !== '1';
});
-const setNowIfAdd = () => {
- 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')}`;
- form.value.acceptanceDate = s as any;
-};
-
const loadFormData = async () => {
// 获取路由参数(与项目信息保持一致)
routeParams.value = route.query;
+ await getUserSelectList();
// 重置表单
form.value = { ...initFormData };
await loadDetail();
if (routeParams.value.type === 'add') {
- setNowIfAdd();
+ setAcceptanceDateToday();
// 如果传递了projectId参数,自动加载项目信息
const projectId = routeParams.value.projectId;
if (projectId) {
await onProjectChange(projectId);
+ setAcceptanceDateToday();
}
}
};
diff --git a/src/views/oa/erp/projectAcceptance/index.vue b/src/views/oa/erp/projectAcceptance/index.vue
index 02c81f0..13ee1d9 100644
--- a/src/views/oa/erp/projectAcceptance/index.vue
+++ b/src/views/oa/erp/projectAcceptance/index.vue
@@ -54,69 +54,48 @@
-
-
-
-
-
+
+
+
+
+
{{ scope.row.projectManagerName }}
-
+
- {{ parseTime(scope.row.acceptanceDate, '{y}-{m}-{d} {h}:{i}:{s}') }}
+ {{ parseTime(scope.row.acceptanceDate, '{y}-{m}-{d}') }}
-
+
暂无附件
-
-
-
-
+
+
+
-
+
+
-
+
-
+
-
-
-
-
+
@@ -166,7 +145,7 @@ const dialog = reactive({
// 列显隐信息
const columns = ref([
- { key: 0, label: `序号`, visible: true },
+ { key: 0, label: `序号`, visible: false },
{ key: 1, label: `验收确认编号`, visible: true },
{ key: 2, label: `项目号`, visible: false },
{ key: 3, label: `项目名称`, visible: true },
@@ -220,6 +199,18 @@ const acceptanceDateRange = ref();
const approvalRecordRef = ref>();
const refreshFlagKey = 'projectAcceptanceListShouldRefresh';
+/** 业务状态为暂存(1)或未赋值:可修改、删除(与字典 acceptance_status 一致) */
+const isAcceptanceDraft = (row: ProjectAcceptanceVO) => {
+ const s = row.acceptanceStatus;
+ return s === undefined || s === null || s === '' || s === '1';
+};
+
+/** 已非暂存(审批中、可用等):仅查看、审批记录 */
+const isAcceptanceNotDraft = (row: ProjectAcceptanceVO) => {
+ const s = row.acceptanceStatus;
+ return s !== undefined && s !== null && s !== '' && s !== '1';
+};
+
/** 查询项目验收确认列表 */
const getList = async () => {
loading.value = true;
@@ -307,6 +298,19 @@ const handleView = (row: ProjectAcceptanceVO) => {
/** 删除按钮操作 */
const handleDelete = async (row?: ProjectAcceptanceVO) => {
+ if (row) {
+ if (!isAcceptanceDraft(row)) {
+ proxy?.$modal.msgWarning('仅暂存状态可删除');
+ return;
+ }
+ } else {
+ const rows = projectAcceptanceList.value.filter((r) => ids.value.includes(r.acceptanceId as any));
+ if (rows.some((r) => !isAcceptanceDraft(r))) {
+ proxy?.$modal.msgWarning('仅暂存状态的记录可删除,请重新选择');
+ return;
+ }
+ if (!ids.value.length) return;
+ }
const _acceptanceIds = row?.acceptanceId || ids.value;
await proxy?.$modal.confirm('是否确认删除项目验收确认编号为"' + _acceptanceIds + '"的数据项?').finally(() => (loading.value = false));
await delProjectAcceptance(_acceptanceIds);