From 10089fbb4958ff4780c33bf2e51ec6f04024e2b6 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期一, 11 八月 2025 15:55:23 +0800
Subject: [PATCH] feat: 接口对接

---
 apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue |  108 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 83 insertions(+), 25 deletions(-)

diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue
index 123fc38..46c8966 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue
@@ -1,22 +1,22 @@
 <template>
   <ContentScrollView :paddingH="false">
     <nut-form :model-value="form" ref="formRef" :rules="rules">
-      <nut-form-item label="璇佷功绫诲瀷:" class="bole-form-item" prop="type">
+      <nut-form-item label="璇佷功绫诲瀷:" class="bole-form-item" prop="typeCode">
         <ChooseInputWithPicker
-          v-model="form.type"
+          v-model="form.typeCode"
           placeholder="璇烽�夋嫨璇佷功绫诲瀷"
-          :value-enum="TaskStatusText"
+          :value-enum="certificateTypeList"
         />
       </nut-form-item>
-      <nut-form-item label="璇佷功缂栧彿:" class="bole-form-item" prop="certificateNumber">
-        <nut-input v-model="form.certificateNumber" type="number" placeholder="璇疯緭鍏�"> </nut-input>
+      <nut-form-item label="璇佷功缂栧彿:" class="bole-form-item" prop="code">
+        <nut-input v-model="form.code" type="number" placeholder="璇疯緭鍏�"> </nut-input>
       </nut-form-item>
       <nut-form-item
         label="姘镐箙璇佷功:"
         class="bole-form-item permanent-certificate"
-        prop="isPermanentCertificate"
+        prop="isForever"
       >
-        <nut-switch v-model="form.isPermanentCertificate" />
+        <nut-switch v-model="form.isForever" />
       </nut-form-item>
       <nut-form-item label="寮�濮嬫棩鏈�:" class="bole-form-item" prop="startDate">
         <ChooseInputWithDatePicker v-model="form.startDate"></ChooseInputWithDatePicker>
@@ -24,26 +24,26 @@
       <nut-form-item label="缁撴潫鏃ユ湡:" class="bole-form-item" prop="endDate">
         <ChooseInputWithDatePicker v-model="form.endDate"></ChooseInputWithDatePicker>
       </nut-form-item>
-      <nut-form-item label="鍙戣瘉鍗曚綅:" class="bole-form-item" prop="certificateNumber">
-        <nut-input v-model="form.certificateNumber" placeholder="璇疯緭鍏�"> </nut-input>
+      <nut-form-item label="鍙戣瘉鍗曚綅:" class="bole-form-item" prop="issueUnit">
+        <nut-input v-model="form.issueUnit" placeholder="璇疯緭鍏�"> </nut-input>
       </nut-form-item>
       <div class="certificate-upload">
         <div class="certificate-upload-title">涓婁紶璇佷功</div>
         <nut-form-item
           label="璇佷功姝i潰鐓х墖锛堣纭繚璇佷功鍙枫�佸ご鍍忕収鐗囩瓑娓呮櫚鍙锛�"
           class="bole-form-item"
-          prop="photo"
+          prop="img"
           label-position="top"
         >
-          <Uploader v-model:file-list="form.photo" :maximum="1" class="bole-uploader"> </Uploader>
+          <Uploader v-model:file-list="form.img" :maximum="1" class="bole-uploader"> </Uploader>
         </nut-form-item>
         <nut-form-item
           label="璇佷功鍙嶉潰鐓х墖锛堟垨鍏朵粬鏈夊唴瀹归〉锛�"
           class="bole-form-item"
-          prop="photo"
+          prop="backImg"
           label-position="top"
         >
-          <Uploader v-model:file-list="form.photo" :maximum="1" class="bole-uploader"> </Uploader>
+          <Uploader v-model:file-list="form.backImg" :maximum="1" class="bole-uploader"> </Uploader>
         </nut-form-item>
       </div>
     </nut-form>
@@ -54,13 +54,16 @@
 </template>
 
 <script setup lang="ts">
-import { useUser } from '@/hooks';
 import { ChooseInputWithPicker, ChooseInputWithDatePicker } from '@12333/components';
 import * as userResumeServices from '@12333/services/apiV2/userResume';
-import { TaskStatusText, TaskStatus } from '@/constants';
 import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
-import { useQuery } from '@tanstack/vue-query';
+import { useQuery, useQueryClient } from '@tanstack/vue-query';
 import Taro from '@tarojs/taro';
+import { useDictionaryDataSelect } from '@12333/hooks';
+import { CategoryCode } from '@12333/constants';
+import { convertApi2FormUrlOnlyOne, Message, setOSSLink, FormValidator } from '@12333/utils';
+import dayjs from 'dayjs';
+import { goBack } from '@/utils';
 
 defineOptions({
   name: 'InnerPage',
@@ -69,14 +72,21 @@
 const router = Taro.useRouter();
 const id = router.params?.id as string;
 const isEdit = computed(() => !!id);
+const queryClient = useQueryClient();
+
+const { dictionaryDataList: certificateTypeList } = useDictionaryDataSelect({
+  categoryCode: CategoryCode.CertificateType,
+});
 
 const form = reactive({
-  type: TaskStatus.All,
-  certificateNumber: '',
+  typeCode: '',
+  code: '',
   startDate: '',
   endDate: '',
-  isPermanentCertificate: false,
-  photo: [],
+  issueUnit: '',
+  isForever: false,
+  img: [],
+  backImg: [],
 });
 
 const {
@@ -95,14 +105,37 @@
     );
   },
   placeholderData: () => ({} as API.GetUserResumeCredentialQueryResult),
-  enabled: isEdit.value,
+  enabled: computed(() => isEdit.value),
+  onSuccess(data) {
+    form.typeCode = data.typeCode;
+    form.code = data.code;
+    form.startDate = dayjs(data.startDate).format('YYYY-MM-DD 00:00:00');
+    form.endDate = dayjs(data.endDate).format('YYYY-MM-DD 23:59:59');
+    form.issueUnit = data.issueUnit;
+    form.isForever = data.isForever;
+    form.img = convertApi2FormUrlOnlyOne(setOSSLink(data.img));
+    form.backImg = convertApi2FormUrlOnlyOne(setOSSLink(data.backImg));
+  },
 });
 
 const rules = reactive<FormRules>({
-  type: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }],
+  typeCode: [{ required: true, message: '璇烽�夋嫨璇佷功绫诲瀷' }],
   startDate: [{ required: true, message: '璇烽�夋嫨寮�濮嬫棩鏈�' }],
-  endDate: [{ required: true, message: '璇烽�夋嫨缁撴潫鏃ユ湡' }],
-  photo: [{ required: true, message: '璇蜂笂浼犺瘉涔︽闈㈢収' }],
+  endDate: [
+    {
+      required: true,
+      message: '璇烽�夋嫨缁撴潫鏃ユ湡',
+      validator(value) {
+        if (!value) return Promise.reject('璇烽�夋嫨缁撴潫鏃ユ湡');
+        if (value <= form.startDate) return Promise.reject('缁撴潫鏃ユ湡涓嶈兘灏忎簬寮�濮嬫棩鏈�');
+        return Promise.resolve(true);
+      },
+    },
+  ],
+  img: [{ required: true, message: '璇蜂笂浼犺瘉涔︽闈㈢収', validator: FormValidator.validatorArray }],
+  backImg: [
+    { required: true, message: '璇蜂笂浼犺瘉涔﹀弽闈㈢収', validator: FormValidator.validatorArray },
+  ],
 });
 const formRef = ref<any>(null);
 function handleConfirm() {
@@ -114,7 +147,32 @@
   });
 }
 
-function confirm() {}
+async function confirm() {
+  try {
+    let params: API.SaveUserResumeCredentialCommand = {
+      typeCode: form.typeCode,
+      code: form.code,
+      isForever: form.isForever,
+      startDate: dayjs(form.startDate).format('YYYY-MM-DD 00:00:00'),
+      endDate: dayjs(form.endDate).format('YYYY-MM-DD 23:59:59'),
+      issueUnit: form.issueUnit,
+      img: form.img[0]?.path,
+      backImg: form.backImg[0]?.path,
+    };
+    if (isEdit.value) {
+      params.id = id;
+    }
+    let res = await userResumeServices.saveUserResumeCredential(params);
+    if (res) {
+      Message.success(isEdit ? '缂栬緫鎴愬姛' : '娣诲姞鎴愬姛', {
+        onClosed() {
+          goBack();
+          queryClient.invalidateQueries(['userResumeServices/getUserResumeCredentials']);
+        },
+      });
+    }
+  } catch (error) {}
+}
 </script>
 
 <style lang="scss">

--
Gitblit v1.9.1