From fe2d6627b8f1002af7a31b08f6f43bec034d04ee Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期三, 21 十月 2026 18:29:07 +0800
Subject: [PATCH] feat: 完善课题、会员、财务、企微页面并新增资产/用车/采购
---
src/views/research/application/modules/form.vue | 38 ++++++++++++++++++++++++++++++++++----
1 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/src/views/research/application/modules/form.vue b/src/views/research/application/modules/form.vue
index a7e2a95..5b02f26 100644
--- a/src/views/research/application/modules/form.vue
+++ b/src/views/research/application/modules/form.vue
@@ -21,7 +21,8 @@
getPublishedGuidelineList,
} from '#/api/research/guideline';
-import { useFormSchema } from '../data';
+import { toSubmitMembers, useFormSchema } from '../data';
+import MemberTable from './member-table.vue';
defineOptions({ name: 'ResearchApplicationForm' });
@@ -30,6 +31,9 @@
const formType = ref<FormType>('create');
/** 渚涖�屾墍灞炶棰樻寚鍗椼�嶄笅鎷変笌绫诲埆甯﹀嚭浣跨敤 */
const guidelines = ref<ResearchGuidelineApi.Guideline[]>([]);
+/** 鎴愬憳琛ㄦ牸鍥炴樉鏁版嵁婧愶細鍙湪鎵撳紑寮圭獥鏃惰祴鍊硷紝澧炲垹鏀瑰彧閫氳繃 emit 鍗曞悜娴佸埌琛ㄥ崟鍊� */
+const initialMembers = ref<ResearchApplicationApi.ApplicationMember[]>([]);
+const memberTableRef = ref<InstanceType<typeof MemberTable>>();
const getTitle = computed(() => {
if (formType.value === 'create') {
@@ -67,7 +71,7 @@
jobTitle: values.jobTitle,
contactPhone: values.contactPhone,
contactEmail: values.contactEmail,
- teamMembers: values.teamMembers,
+ members: toSubmitMembers(values.members),
budgetAmount: values.budgetAmount,
planContent: values.planContent,
remark: values.remark,
@@ -81,6 +85,12 @@
async onConfirm() {
const { valid } = await formApi.validate();
if (!valid) {
+ return;
+ }
+ try {
+ memberTableRef.value?.validate();
+ } catch (error) {
+ message.error((error as Error).message || '璇鹃缁勬垚鍛樻牎楠屽け璐�');
return;
}
modalApi.lock();
@@ -112,6 +122,8 @@
schema: useFormSchema(formType.value, formApi, guidelines.value),
});
formApi.setDisabled(formType.value === 'detail');
+ // 鎴愬憳瀛愯〃鍥炴樉锛氫繚鐣欏師 id 渚涜〃鏍艰 key 浣跨敤锛屾彁浜ゆ椂鍐嶅墺绂�
+ initialMembers.value = application.members ?? [];
// 宸叉湁闄勪欢杞垚涓婁紶缁勪欢鍙瘑鍒殑鏂囦欢瀵硅薄锛屾彁浜ゆ椂鎸� valueKey=id 鎻愬彇涓� blobId
const blobIds = (application.attachmentList ?? []).map((item) => ({
uid: String(item.id),
@@ -120,13 +132,21 @@
status: 'done',
id: item.id,
}));
- await formApi.setValues({ ...application, blobIds }, false);
+ await formApi.setValues(
+ {
+ ...application,
+ members: toSubmitMembers(application.members),
+ blobIds,
+ },
+ false,
+ );
} else {
guidelines.value = await getPublishedGuidelineList();
formApi.setState({
schema: useFormSchema(formType.value, formApi, guidelines.value),
});
formApi.setDisabled(false);
+ initialMembers.value = [];
await formApi.resetForm();
}
} finally {
@@ -159,6 +179,16 @@
:close-on-click-modal="false"
:show-confirm-button="formType !== 'detail'"
>
- <Form class="mx-3" />
+ <Form class="mx-3">
+ <template #members>
+ <MemberTable
+ ref="memberTableRef"
+ :members="initialMembers"
+ :disabled="formType === 'detail'"
+ class="w-full"
+ @update:members="(members) => formApi.setValues({ members }, false)"
+ />
+ </template>
+ </Form>
</Modal>
</template>
--
Gitblit v1.9.3