From 83acd1f42ed425b20f652c36ab1e5684cc232a56 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 19 八月 2025 14:59:43 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp

---
 apps/cMiniApp/src/subpackages/authentication/authenticationFace/InnerPage.vue                        |   41 ++++++
 apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue                    |  188 +++++++++++++++++++++++++++++++
 apps/cMiniApp/src/subpackages/authentication/authenticationFace/authenticationFace.config.ts         |    3 
 apps/cMiniApp/src/subpackages/authentication/authenticationRealName/authenticationRealName.config.ts |    3 
 apps/cMiniApp/src/subpackages/authentication/authenticationFace/authenticationFace.vue               |   14 ++
 apps/cMiniApp/src/subpackages/authentication/authenticationHome/InnerPage.vue                        |   35 ++---
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue                                |    4 
 apps/cMiniApp/src/constants/router.ts                                                                |    2 
 apps/cMiniApp/src/app.config.ts                                                                      |    2 
 apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue                                     |    1 
 apps/cMiniApp/src/subpackages/authentication/authenticationRealName/authenticationRealName.vue       |   14 ++
 11 files changed, 286 insertions(+), 21 deletions(-)

diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
index 8596c2d..0df3a1d 100644
--- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
@@ -74,6 +74,10 @@
     if (!isCollapse.value) {
       await userResumeServices.contactUserResume({ id: userId });
       toggle();
+    } else {
+      Taro.makePhoneCall({
+        phoneNumber: userResumeInfo.value.contactPhoneNumber,
+      });
     }
   } catch (error) {}
 });
diff --git a/apps/cMiniApp/src/app.config.ts b/apps/cMiniApp/src/app.config.ts
index 7c84b97..73865fd 100644
--- a/apps/cMiniApp/src/app.config.ts
+++ b/apps/cMiniApp/src/app.config.ts
@@ -64,6 +64,8 @@
         'authenticationFaRen/authenticationFaRen',
         'authenticationJBR/authenticationJBR',
         'authenticationResult/authenticationResult',
+        'authenticationRealName/authenticationRealName',
+        'authenticationFace/authenticationFace',
       ],
     },
     {
diff --git a/apps/cMiniApp/src/constants/router.ts b/apps/cMiniApp/src/constants/router.ts
index 54ddfd1..fda33b4 100644
--- a/apps/cMiniApp/src/constants/router.ts
+++ b/apps/cMiniApp/src/constants/router.ts
@@ -27,6 +27,8 @@
   authenticationResult = '/subpackages/authentication/authenticationResult/authenticationResult',
   authenticationFaRen = '/subpackages/authentication/authenticationFaRen/authenticationFaRen',
   authenticationJBR = '/subpackages/authentication/authenticationJBR/authenticationJBR',
+  authenticationRealName = '/subpackages/authentication/authenticationRealName/authenticationRealName',
+  authenticationFace = '/subpackages/authentication/authenticationFace/authenticationFace',
   citySelect = '/subpackages/city/citySelect/citySelect',
 
   mineSign = '/subpackages/mine/mineSign/mineSign',
diff --git a/apps/cMiniApp/src/subpackages/authentication/authenticationFace/InnerPage.vue b/apps/cMiniApp/src/subpackages/authentication/authenticationFace/InnerPage.vue
new file mode 100644
index 0000000..6c414e3
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/authentication/authenticationFace/InnerPage.vue
@@ -0,0 +1,41 @@
+<template>
+  <ContentScrollView :paddingH="false">
+    <nut-form :model-value="form" ref="formRef">
+      <nut-form-item label="鍒疯劯:" class="bole-form-item alignTop" prop="licenseUrl" required>
+      </nut-form-item>
+    </nut-form>
+  </ContentScrollView>
+  <PageFooter :isOnlyAction="false">
+    <PageFooterBtn type="primary" @click="handleSubmit()" :loading="loading"
+      >鍒疯劯璁よ瘉</PageFooterBtn
+    >
+  </PageFooter>
+</template>
+
+<script setup lang="ts">
+import Taro from '@tarojs/taro';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const form = reactive({
+  licenseUrl: [],
+});
+
+const formRef = ref<any>(null);
+const loading = ref(false);
+
+function handleSubmit() {
+  if (!formRef.value) return;
+  formRef.value.validate().then(({ valid, errors }: any) => {
+    if (valid) {
+      // submit();
+    }
+  });
+}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/cMiniApp/src/subpackages/authentication/authenticationFace/authenticationFace.config.ts b/apps/cMiniApp/src/subpackages/authentication/authenticationFace/authenticationFace.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/authentication/authenticationFace/authenticationFace.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/cMiniApp/src/subpackages/authentication/authenticationFace/authenticationFace.vue b/apps/cMiniApp/src/subpackages/authentication/authenticationFace/authenticationFace.vue
new file mode 100644
index 0000000..2e507b1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/authentication/authenticationFace/authenticationFace.vue
@@ -0,0 +1,14 @@
+<template>
+  <PageLayout title="瀹炰汉璁よ瘉" class="authenticationFace-page-wrapper" hasBorder developing>
+    <InnerPage />
+  </PageLayout>
+</template>
+
+<script setup lang="ts">
+import { PageLayout } from '@/components';
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'authenticationFace',
+});
+</script>
diff --git a/apps/cMiniApp/src/subpackages/authentication/authenticationHome/InnerPage.vue b/apps/cMiniApp/src/subpackages/authentication/authenticationHome/InnerPage.vue
index 8832814..80d894a 100644
--- a/apps/cMiniApp/src/subpackages/authentication/authenticationHome/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/authentication/authenticationHome/InnerPage.vue
@@ -2,26 +2,18 @@
   <ContentScrollView class="authenticationHome-page-view">
     <div class="authenticationHome-page-title">瀹炲悕璁よ瘉</div>
     <authenticationHomeItem
-      title="浼佷笟娉曚汉璁よ瘉"
+      title="涓汉瀹炲悕璁よ瘉"
       :icon="IconFaren"
-      :info="[['浼佷笟钀ヤ笟鎵х収鐓х墖', '娉曚汉韬唤璇佺収鐗�'], ['娉曚汉鎵嬫満鍙风爜(鎺ユ敹鐭俊楠岃瘉鐮佽繘琛岀煭淇℃牳楠�)']]"
-      @click="goFaRen"
+      :info="[['韬唤璇佺収鐗�'], ['鎵嬫満鍙风爜(鎺ユ敹鐭俊楠岃瘉鐮佽繘琛岀煭淇℃牳楠�)']]"
+      @click="goRealName"
     ></authenticationHomeItem>
     <authenticationHomeItem
-      title="浼佷笟缁忓姙浜鸿璇�"
+      title="瀹炰汉璁よ瘉"
       isJBR
       :icon="IconJBR"
-      :info="[
-        ['浼佷笟鎺堟潈涔�', '浼佷笟钀ヤ笟鎵х収鐓х墖', '缁忓姙浜鸿韩浠借瘉鐓х墖'],
-        ['缁忓姙浜烘墜鏈哄彿鐮�(鎺ユ敹鐭俊楠岃瘉鐮佽繘琛岀煭淇℃牳楠�)'],
-      ]"
-      @click="goJBR"
+      :info="[['瀹炰汉鎵劯璁よ瘉']]"
+      @click="goFace"
     >
-      <template #title-extra>
-        <div class="authenticationHome-page-title-btn" @click.stop="downloadPowerAttorneyTemplate">
-          涓嬭浇鎺堟潈涔︽ā鐗�
-        </div>
-      </template>
     </authenticationHomeItem>
   </ContentScrollView>
 </template>
@@ -31,21 +23,18 @@
 import IconFaren from '@/assets/authentication/icon-faren.png';
 import IconJBR from '@/assets/authentication/icon-jbr.png';
 import Taro from '@tarojs/taro';
-import { useDownloadPowerAttorneyTemplate } from '../hooks';
 
 defineOptions({
   name: 'InnerPage',
 });
 
-function goFaRen() {
-  Taro.navigateTo({ url: RouterPath.authenticationFaRen });
+function goRealName() {
+  Taro.navigateTo({ url: RouterPath.authenticationRealName });
 }
 
-function goJBR() {
-  Taro.navigateTo({ url: RouterPath.authenticationJBR });
+function goFace() {
+  Taro.navigateTo({ url: RouterPath.authenticationFace });
 }
-
-const { downloadPowerAttorneyTemplate } = useDownloadPowerAttorneyTemplate();
 </script>
 
 <style lang="scss">
@@ -55,6 +44,10 @@
   .authenticationHome-page-view {
     padding-top: 48px;
     background-color: transparent;
+
+    .authentication-home-item-info {
+      flex-direction: column;
+    }
   }
 
   .authenticationHome-page-title {
diff --git a/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue b/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue
new file mode 100644
index 0000000..2b4b5d1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue
@@ -0,0 +1,188 @@
+<template>
+  <ContentScrollView :paddingH="false">
+    <nut-form :model-value="form" ref="formRef" :rules="rules">
+      <ProFormItemCell label="韬唤璇佺収鐗�:" required>
+        <div class="id-imgUrl-wrapper">
+          <nut-form-item
+            label=" "
+            class="bole-form-item"
+            prop="legalPersonIdFrontImgUrl"
+            label-width="0px"
+          >
+            <Uploader
+              v-model:file-list="form.legalPersonIdFrontImgUrl"
+              :maximum="1"
+              :limitFileSize="10"
+              class="bole-uploader nopaddingtop"
+              @my-success="handleFrontImgUrlChange"
+            >
+              <template #upload-icon>
+                <div class="photograph-wrapper">
+                  <Photograph color="#808080" />
+                  <div>韬唤璇佷汉鍍忛潰</div>
+                </div>
+              </template>
+            </Uploader>
+          </nut-form-item>
+          <nut-form-item
+            label=" "
+            class="bole-form-item"
+            prop="legalPersonIdBackImgUrl"
+            label-width="0px"
+          >
+            <Uploader
+              v-model:file-list="form.legalPersonIdBackImgUrl"
+              :maximum="1"
+              :limitFileSize="10"
+              class="bole-uploader nopaddingtop"
+            >
+              <template #upload-icon>
+                <div class="photograph-wrapper">
+                  <Photograph color="#808080" />
+                  <div>韬唤璇佸浗寰介潰</div>
+                </div>
+              </template>
+            </Uploader>
+          </nut-form-item>
+        </div>
+
+        <div class="pro-form-item-tips">
+          璇蜂笂浼犺韩浠借瘉鐨勬鍙嶉潰鐓х墖锛岀‘淇濊韩浠借瘉娓呮櫚鍙锛屾敮鎸乸ng/jpg/jpeg鏍煎紡锛屾枃浠跺ぇ灏忎笉瓒呰繃10MB
+        </div>
+      </ProFormItemCell>
+      <nut-form-item label="濮撳悕:" class="bole-form-item" prop="name" required>
+        <nut-input
+          v-model.trim="form.name"
+          class="nut-input-text bole-input-text"
+          placeholder="璇峰~鍐欏鍚�"
+          type="text"
+        />
+      </nut-form-item>
+      <nut-form-item label="韬唤璇佸彿:" class="bole-form-item" prop="idNumber" required>
+        <nut-input
+          v-model.trim="form.idNumber"
+          class="nut-input-text bole-input-text"
+          placeholder="璇峰~鍐欒韩浠借瘉鍙风爜"
+          type="text"
+        />
+      </nut-form-item>
+      <nut-form-item label="鎵嬫満鍙�:" class="bole-form-item" prop="contactPhone" required>
+        <nut-input
+          v-model.trim="form.contactPhone"
+          class="nut-input-text bole-input-text"
+          placeholder="璇峰~鍐欐墜鏈哄彿鐮�"
+          type="text"
+        >
+          <template #right>
+            <ProFormCaptcha
+              :onGetCaptcha="() => onGetCaptcha(form.contactPhone)"
+              :phonePropName="['contactPhone', 'name', 'idNumber']"
+              :validateField="formRef?.validate"
+            ></ProFormCaptcha>
+          </template>
+        </nut-input>
+      </nut-form-item>
+      <nut-form-item label="鐭俊楠岃瘉鐮�:" class="bole-form-item" prop="verificationCode" required>
+        <nut-input
+          v-model.trim="form.verificationCode"
+          class="nut-input-text bole-input-text"
+          placeholder="璇疯緭鍏ラ獙璇佺爜"
+          type="number"
+        />
+      </nut-form-item>
+    </nut-form>
+  </ContentScrollView>
+  <PageFooter :isOnlyAction="false">
+    <PageFooterBtn type="primary" @click="handleSubmit()" :loading="loading"
+      >鎻愪氦璁よ瘉</PageFooterBtn
+    >
+  </PageFooter>
+</template>
+
+<script setup lang="ts">
+import { VerificationCodeBusinessType } from '@12333/constants';
+import { ProFormCaptcha, ProFormItemCell } from 'senin-mini/components';
+import * as commonServices from '@12333/services/api/Common';
+import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type';
+import { Photograph } from '@nutui/icons-vue-taro';
+import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
+import { FormValidator } from '@12333/utils';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const form = reactive({
+  legalPersonIdFrontImgUrl: [] as FileItem[],
+  legalPersonIdBackImgUrl: [] as FileItem[],
+  name: '',
+  idNumber: '',
+  contactPhone: '',
+  verificationCode: '',
+});
+
+const formRef = ref<any>(null);
+const loading = ref(false);
+
+const rules: FormRules = {
+  name: [{ required: true, message: '璇峰~鍐欏鍚�' }],
+  legalPersonIdFrontImgUrl: [
+    { required: true, message: '璇蜂笂浼犺韩浠借瘉浜哄儚闈�', validator: FormValidator.validatorArray },
+  ],
+  legalPersonIdBackImgUrl: [
+    { required: true, message: '璇蜂笂浼犺韩浠借瘉鍥藉窘闈�', validator: FormValidator.validatorArray },
+  ],
+  idNumber: [
+    { required: true, message: '璇峰~鍐欒韩浠借瘉鍙风爜' },
+    { message: '璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�', validator: FormValidator.validatorIDCard },
+  ],
+  legalPersonContactPhone: [
+    { required: true, message: '璇峰~鍐欐墜鏈哄彿鐮�' },
+    { message: '璇疯緭鍏ユ纭殑鎵嬫満鍙风爜', validator: FormValidator.validatorPhoneNumber },
+  ],
+  verificationCode: [{ required: true, message: '璇疯緭鍏ラ獙璇佺爜' }],
+};
+
+async function onGetCaptcha(phoneNumber: string) {
+  await commonServices.sendPhoneCertificationVerificationCode(
+    {
+      name: form.name,
+      identity: form.idNumber,
+      mobile: form.contactPhone,
+      businessType: VerificationCodeBusinessType.UserCertificationPhoneCertification,
+    },
+    { showLoading: false }
+  );
+}
+
+function handleFrontImgUrlChange(response: FileItem) {
+  // userCredentialVerifyOcrIDCard(response, {
+  //   onSuccess(res) {
+  //     if (res.realName) form.legalPersonName = res.realName;
+  //     if (res.idcardNum) form.legalPersonIdNumber = res.idcardNum;
+  //   },
+  // });
+}
+
+function handleSubmit() {
+  if (!formRef.value) return;
+  formRef.value.validate().then(({ valid, errors }: any) => {
+    if (valid) {
+      // submit();
+    }
+  });
+}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.authenticationRealName-page-wrapper {
+  .photograph-wrapper {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+  }
+}
+</style>
diff --git a/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/authenticationRealName.config.ts b/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/authenticationRealName.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/authenticationRealName.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/authenticationRealName.vue b/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/authenticationRealName.vue
new file mode 100644
index 0000000..1dc69e3
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/authenticationRealName.vue
@@ -0,0 +1,14 @@
+<template>
+  <PageLayout title="瀹炲悕璁よ瘉" class="authenticationRealName-page-wrapper" hasBorder>
+    <InnerPage />
+  </PageLayout>
+</template>
+
+<script setup lang="ts">
+import { PageLayout } from '@/components';
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'authenticationRealName',
+});
+</script>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
index 0d5db2f..39bcc63 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
@@ -21,6 +21,7 @@
         :benefits="item.benefits"
         :show-actions="true"
         :release-status="item.releaseStatus"
+        :hireStatus="item.hireStatus"
         @apply="goTaskDetail"
       >
       </TaskCard>

--
Gitblit v1.9.1