wupengfei
4 天以前 10089fbb4958ff4780c33bf2e51ec6f04024e2b6
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="证书正面照片(请确保证书号、头像照片等清晰可见)"
          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">