Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp
已修改26个文件
已删除1个文件
已添加11个文件
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -----BEGIN RSA PRIVATE KEY----- |
| | | MIIEpQIBAAKCAQEAy7wtgTQmuEPpJDRPu2rkSpOyf4OabpFFRbrdBdnhERLswO67 |
| | | P3DzxFhi9PkReA0nwr6D/UrkmKSCA/Jao7wIv7Md4ZVe3feKYMKGIGpZEBdVzZNG |
| | | GplzpCYvkGpC+PO/cvnn+I7G4pMTq//A/XYV4MjlcIuZHbQKQ7Q+lGKv5rd3NsEA |
| | | tpH2OmFmHWmSTu5wJuNjK3P44CgCdc+bGMb4ik3zX8VKRpDJ7JCNe0fKv0f1vnhP |
| | | 0yRZENT4ag3dkMF+H6cztMXiBJxxgz2RI7xWuyEHkJcMf5MGUxHTlFNpbw6K4RxC |
| | | +clGv0/qgV//tLmdq4ArfFQqnzTrAQhfHOUYdwIDAQABAoIBAQCAtnYZNpVvvJfC |
| | | Y7orsbBg3UbcAIzEZcrZ7uBMHgZu/wHMMgbiYb3fwedi1SgQLF9+TVad437gYK4z |
| | | SB2za8wrMEIkjnXMzeMClmKegBGcdOGkavLTQzcn8WgDWN7O4U+GmBPRmIJWCo1X |
| | | ENEgUEYqKUGrBMbLWT9S3sDahi6TFxw2TH8nnOXPV5+p23A3t3hygsYyJ1Il/mLQ |
| | | g3KCUTN63QB5Xo2ZP11ypC03eoO1pmx57m+f7Sq48AUxnBWZxTfDosmZsnbSDbjj |
| | | va9zT5quImy7kn1PfbSgoDpSrSDqPVDwKITu5FUJU+ISlYElHeu7Ux2N3B0O3fvG |
| | | ln5qec/hAoGBAPZ2uX41Pycoj7GJpS9AOm3Kl00nHZswKuT461Z/+DSaaQAorDiC |
| | | bsDr5l/fNG57kywzKbC1DsJdcV9Fm16wTV6l0Y2dLuIZVeFINRQySK1exiF+yTXJ |
| | | BoGHFjtls8j1Q/9PDsc7ok3n+i29qdiNv+odH8HdIrsQHjW2KojADBUbAoGBANOe |
| | | N2gQ6qdsQUCf9yxntxmFp137Jwb4IN9ePB8qp06PHYpvqnMvtfb8QJ+NPPbpfuh0 |
| | | 9MkfVzxK5430FqVsHzvJ5pUfgO+Ewi4V2F1hDEtrEFB0MUFrRWOXmGa5nsnbK/HN |
| | | mRzsnZyICem8kQ6HHTYPCgTCU6vi6TwNl3GypCvVAoGBAITxn7cTU8B0oaX7gG3P |
| | | cHT+ncSRP+gRAGJIXvFmz+TYEaFzTwqgWMuZs8etJ6Qc5lMmOevGjnKLYvcoHdni |
| | | salHOpTv33U4g1mk0HTXdtqFz8wLjs+DYw4FZxmdD3Br1EToSSlw4mixpAJ+Vxqn |
| | | w4iuMw4okW5kEFearrDbHulXAoGBALP6KfFOAeRmg5Cs/BE+HFGOhGu/wM+ClKKk |
| | | iMmRAz4jJeKpWfQhLcdjfqqz+pecupyFa/Lpvs2+fvUSFXiXXnEBJCTL6GLNLED5 |
| | | v0ybz1MNOZDTYVjcHOW49prXX58Z0mQSkhgxfVK1uIicIVqTu1pQrBqkE3lqwSac |
| | | AKNoZYwJAoGACHsuxgMHOZ0fe+IG3x1wIM2EDdvQtJJG5LspfBVczGliCZOwCGLi |
| | | HRVxpTzzTYN/XTSNZYjkDL8S9i8R/BL8GHUzBrPDjrwpf1Mny/vIoeW4vlKKcGaf |
| | | VcWFjh8LDO85zl1yvcEI1erFT9ZNHCF+qtpCTVuDdMPKozJUAPehkjA= |
| | | -----END RSA PRIVATE KEY----- |
| | |
| | | return { |
| | | weapp: { |
| | | appid: config.appid, |
| | | privateKeyPath: `${projectPath}/ci/private.wx3669dd12a0915f7d.key`, |
| | | privateKeyPath: `${projectPath}/ci/private.wxc47d6f255e7d0566.key`, |
| | | robot: robot, |
| | | setting: { |
| | | minify: false, |
| | |
| | | 'addStandardOrder/addStandardOrder', |
| | | 'chooseSupplier/chooseSupplier', |
| | | 'chooseEnterpriseEmployee/chooseEnterpriseEmployee', |
| | | 'EnterpriseEmployeeDetail/EnterpriseEmployeeDetail', |
| | | 'supplierDetail/supplierDetail', |
| | | ], |
| | | }, |
| | | { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <ContentView style="background-color: transparent" class="job-detail-content"> |
| | | <FlexJobTopView |
| | | :avatar="avatar" |
| | | :name="name" |
| | | :age="age" |
| | | :isReal="isReal" |
| | | :gender="gender" |
| | | :personalIdentityContent="personalIdentityContent" |
| | | :educationalBackgroundContent="educationalBackgroundContent" |
| | | :taskCount="taskCount" |
| | | size="small" |
| | | class="job-detail-content-top" |
| | | /> |
| | | <div class="job-detail-content-contact-info"> |
| | | <div class="job-detail-content-contact-info-item"> |
| | | <div class="job-detail-content-contact-info-item-label">ææºå·ï¼</div> |
| | | <div class="job-detail-content-contact-info-item-text"> |
| | | {{ isCollapse ? contactPhoneNumber : 'ç«å³èç³»å坿¥ç' }} |
| | | </div> |
| | | </div> |
| | | <div class="job-detail-content-contact-info-item"> |
| | | <div class="job-detail-content-contact-info-item-label">身份è¯å·ï¼</div> |
| | | <div class="job-detail-content-contact-info-item-text"> |
| | | {{ isCollapse ? hiddenIDNumberForEnd4(identity) : 'ç«å³èç³»å坿¥ç' }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </ContentView> |
| | | <div style="flex: 1; min-height: 0"> |
| | | <ProTabs |
| | | v-model="tab" |
| | | name="job-detail-content-tab" |
| | | :showSmile="false" |
| | | class="job-detail-content-tabs" |
| | | isTransparent |
| | | title-gutter="8" |
| | | fullHeight |
| | | > |
| | | <ProTabPane :title="`ç®å`" pane-key="1"> |
| | | <curriculumView |
| | | :userExpectJobs="userExpectJobs" |
| | | :freeTime="freeTime" |
| | | :jobSeekingStatus="jobSeekingStatus" |
| | | :userCredentials="userCredentials" |
| | | :workSeniority="workSeniority" |
| | | :workExperience="workExperience" |
| | | :photos="photos" |
| | | :height="height" |
| | | :weight="weight" |
| | | :shoeSize="shoeSize" |
| | | :videos="videos" |
| | | /> |
| | | </ProTabPane> |
| | | <ProTabPane :title="`ç»å`" pane-key="2"> |
| | | <experienceView :taskInfoUsers="taskInfoUsers" /> |
| | | </ProTabPane> |
| | | </ProTabs> |
| | | </div> |
| | | |
| | | <PageFooter> |
| | | <slot name="footer"></slot> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { FlexJobTopView, ProTabs, ProTabPane } from '@12333/components'; |
| | | import { hiddenIDNumberForEnd4 } from '@12333/utils'; |
| | | import curriculumView from './components/curriculumView.vue'; |
| | | import experienceView from './components/experienceView.vue'; |
| | | import { EnumUserGender } from '@12333/constants'; |
| | | |
| | | defineOptions({ |
| | | name: 'JobDetailContent', |
| | | }); |
| | | |
| | | type Props = { |
| | | isCollapse: boolean; |
| | | |
| | | avatar?: string; |
| | | name?: string; |
| | | gender?: EnumUserGender; |
| | | age?: number; |
| | | isReal?: boolean; |
| | | personalIdentityContent?: string; |
| | | educationalBackgroundContent?: string; |
| | | taskCount?: number; |
| | | contactPhoneNumber?: string; |
| | | identity?: string; |
| | | |
| | | userExpectJobs?: API.GetUserResumeQueryResultExpectJob[]; |
| | | freeTime?: API.EnumPersonalFreeTime; |
| | | jobSeekingStatus?: API.EnumPersonalJobSeekingStatus; |
| | | userCredentials?: API.GetUserResumeQueryResultCredential[]; |
| | | workSeniority?: string; |
| | | workExperience?: string; |
| | | photos?: string[]; |
| | | videos?: string[]; |
| | | /** èº«é« */ |
| | | height?: number; |
| | | /** ä½é */ |
| | | weight?: number; |
| | | shoeSize?: number; |
| | | |
| | | taskInfoUsers?: API.GetUserResumeQueryResultExperience[]; |
| | | }; |
| | | |
| | | const tab = ref('1'); |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .job-detail-content-top { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .job-detail-content-contact-info { |
| | | padding-left: 130px; |
| | | margin-bottom: 78px; |
| | | |
| | | .job-detail-content-contact-info-item { |
| | | display: flex; |
| | | align-items: center; |
| | | font-weight: 400; |
| | | font-size: 24px; |
| | | line-height: 28px; |
| | | margin-bottom: 22px; |
| | | |
| | | &:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .job-detail-content-contact-info-item-label { |
| | | color: boleGetCssVar('text-color', 'secondary'); |
| | | margin-right: 8px; |
| | | } |
| | | |
| | | .job-detail-content-contact-info-item-text { |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | flex: 1; |
| | | min-width: 0; |
| | | @include ellipsis; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="curriculum-list-item"> |
| | | <div class="curriculum-list-item-label" :style="{ width: props.labelWidth }"> |
| | | {{ props.label }} |
| | | </div> |
| | | <div class="curriculum-list-item-text"> |
| | | <slot>{{ props.text }}</slot> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | defineOptions({ |
| | | name: 'CurriculumViewItem', |
| | | }); |
| | | |
| | | type Props = { |
| | | label?: string; |
| | | text?: string; |
| | | labelWidth?: number | string; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | labelWidth: 'auto', |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .job-detail-content-tabs { |
| | | .curriculum-list-item { |
| | | display: flex; |
| | | margin-bottom: 14px; |
| | | font-weight: 400; |
| | | font-size: 24px; |
| | | line-height: 36px; |
| | | |
| | | &:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .curriculum-list-item-label { |
| | | color: boleGetCssVar('text-color', 'secondary'); |
| | | } |
| | | |
| | | .curriculum-list-item-text { |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | flex: 1; |
| | | min-width: 0; |
| | | @include ellipsis; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <ContentScrollView> |
| | | <Cell :show-title="false"> |
| | | <!-- <CellChunk title="æ±èæå"> |
| | | <div class="curriculum-list"> |
| | | <CurriculumViewItem label="ææå²ä½ï¼"> |
| | | <div class="curriculum-position-list"> |
| | | <div |
| | | v-for="userExpectJob in userExpectJobs" |
| | | :key="userExpectJob.expectJobCode" |
| | | class="curriculum-position-list-item" |
| | | > |
| | | {{ userExpectJob.expectJobContent }} |
| | | </div> |
| | | </div> |
| | | </CurriculumViewItem> |
| | | <CurriculumViewItem label="ç©ºé²æ¶é´ï¼" :text="EnumPersonalFreeTimeText[freeTime]"> |
| | | </CurriculumViewItem> |
| | | <CurriculumViewItem |
| | | label="æ±èç¶æï¼" |
| | | :text="EnumPersonalJobSeekingStatusText[jobSeekingStatus]" |
| | | > |
| | | </CurriculumViewItem> |
| | | </div> |
| | | </CellChunk> --> |
| | | <CellChunk title="èµæ ¼è¯ä¹¦" v-if="_userCredentials.length > 0"> |
| | | <nut-grid square :column-num="3" :border="false" :gutter="20" class="pro-img-grid"> |
| | | <nut-grid-item |
| | | v-for="(item, index) in _userCredentials" |
| | | :key="item" |
| | | class="pro-img-grid-item" |
| | | > |
| | | <div class="pro-img-grid-img-item"> |
| | | <PreviewImage :src="item" class="pro-img-grid-img" :urls="_userCredentials" /> |
| | | </div> |
| | | </nut-grid-item> |
| | | </nut-grid> |
| | | </CellChunk> |
| | | <CellChunk title="å·¥ä½ç»éª"> |
| | | <CurriculumViewItem label="å·¥ä½å¹´éï¼" :text="workSeniority"> </CurriculumViewItem> |
| | | <CurriculumViewItem label="å·¥ä½ç»éªï¼" :text="workExperience"> </CurriculumViewItem> |
| | | </CellChunk> |
| | | <CellChunk title="详ç»ä¿¡æ¯"> |
| | | <CurriculumViewItem |
| | | label="身é«ï¼" |
| | | :text="height && `${height} cm`" |
| | | :label-width="labelWidth" |
| | | ></CurriculumViewItem> |
| | | <CurriculumViewItem |
| | | label="ä½éï¼" |
| | | :text="weight && `${weight} kg`" |
| | | :label-width="labelWidth" |
| | | ></CurriculumViewItem> |
| | | <CurriculumViewItem |
| | | label="éç ï¼" |
| | | :text="shoeSize && `${shoeSize} ç `" |
| | | :label-width="labelWidth" |
| | | ></CurriculumViewItem> |
| | | <CurriculumViewItem label="个人ç
§çï¼"> |
| | | <nut-grid |
| | | square |
| | | :column-num="2" |
| | | :border="false" |
| | | :gutter="20" |
| | | v-if="_photos.length > 0" |
| | | class="pro-img-grid" |
| | | > |
| | | <nut-grid-item v-for="(item, index) in _photos" :key="item" class="pro-img-grid-item"> |
| | | <div class="pro-img-grid-img-item"> |
| | | <PreviewImage :src="item" class="pro-img-grid-img" :urls="_photos" /> |
| | | </div> |
| | | </nut-grid-item> |
| | | </nut-grid> |
| | | </CurriculumViewItem> |
| | | <CurriculumViewItem label="个人è§é¢ï¼"> |
| | | <nut-grid |
| | | square |
| | | :column-num="2" |
| | | :border="false" |
| | | :gutter="20" |
| | | v-if="_photos.length > 0" |
| | | class="pro-img-grid" |
| | | > |
| | | <nut-grid-item v-for="(item, index) in _videos" :key="item" class="pro-img-grid-item"> |
| | | <div class="pro-img-grid-img-item"> |
| | | <video class="pro-img-grid-img" :src="item" /> |
| | | </div> |
| | | </nut-grid-item> |
| | | </nut-grid> |
| | | </CurriculumViewItem> |
| | | </CellChunk> |
| | | </Cell> |
| | | </ContentScrollView> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import CurriculumViewItem from './CurriculumViewItem.vue'; |
| | | import { PreviewImage, Cell, CellChunk } from '@12333/components'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { EnumPersonalFreeTimeText, EnumPersonalJobSeekingStatusText } from '@12333/constants'; |
| | | import { setOSSLink } from '@12333/utils'; |
| | | import { Video } from '@tarojs/components'; |
| | | |
| | | defineOptions({ |
| | | name: 'curriculumView', |
| | | }); |
| | | |
| | | type Props = { |
| | | userExpectJobs?: API.GetUserResumeQueryResultExpectJob[]; |
| | | freeTime?: API.EnumPersonalFreeTime; |
| | | jobSeekingStatus?: API.EnumPersonalJobSeekingStatus; |
| | | userCredentials?: API.GetUserResumeQueryResultCredential[]; |
| | | workSeniority?: string; |
| | | workExperience?: string; |
| | | photos?: string[]; |
| | | videos?: string[]; |
| | | /** èº«é« */ |
| | | height?: number; |
| | | /** ä½é */ |
| | | weight?: number; |
| | | shoeSize?: number; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | userExpectJobs: () => [], |
| | | userCredentials: () => [], |
| | | photos: () => [], |
| | | videos: () => [], |
| | | }); |
| | | |
| | | const _userCredentials = computed(() => props.userCredentials.map((x) => setOSSLink(x.img))); |
| | | const _photos = computed(() => props.photos.map((x) => setOSSLink(x))); |
| | | const _videos = computed(() => props.videos.map((x) => setOSSLink(x))); |
| | | |
| | | const labelWidth = Taro.pxTransform(120); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .job-detail-content-tabs { |
| | | .curriculum-position-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | column-gap: 24px; |
| | | row-gap: 16px; |
| | | |
| | | .curriculum-position-list-item { |
| | | font-weight: 500; |
| | | font-size: 24px; |
| | | color: boleGetCssVar('color', 'warning'); |
| | | line-height: 36px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <ContentScrollView> |
| | | <Cell title="å²ä½ç»å"> |
| | | <nut-steps |
| | | v-if="taskInfoUsers.length > 0" |
| | | direction="vertical" |
| | | progress-dot |
| | | :current="10000003" |
| | | class="job-detail-content-steps" |
| | | > |
| | | <nut-step |
| | | v-for="(taskInfoUser, index) in taskInfoUsers" |
| | | :key="index" |
| | | :title="dayjs(taskInfoUser.hireTime).format('YYYY.MM.DD')" |
| | | > |
| | | <template #content> |
| | | <p>å¨{{ taskInfoUser.enterpriseName }}ï¼</p> |
| | | <p>åè¿{{ taskInfoUser.name }}</p> |
| | | </template> |
| | | </nut-step> |
| | | </nut-steps> |
| | | <NoData v-else /> |
| | | </Cell> |
| | | </ContentScrollView> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import NoData from '../../NoData/NoData.vue'; |
| | | import dayjs from 'dayjs'; |
| | | import { Cell } from '@12333/components'; |
| | | |
| | | defineOptions({ |
| | | name: 'experienceView', |
| | | }); |
| | | |
| | | type Props = { |
| | | taskInfoUsers?: API.GetUserResumeQueryResultExperience[]; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | taskInfoUsers: () => [], |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .job-detail-content-tabs { |
| | | .job-detail-content-steps { |
| | | .nut-step-main { |
| | | margin-bottom: 40px; |
| | | } |
| | | |
| | | .nut-step:last-child { |
| | | .nut-step-main { |
| | | margin-bottom: 0; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | addStandardOrder = '/subpackages/sercice/addStandardOrder/addStandardOrder', |
| | | chooseSupplier = '/subpackages/sercice/chooseSupplier/chooseSupplier', |
| | | chooseEnterpriseEmployee = '/subpackages/sercice/chooseEnterpriseEmployee/chooseEnterpriseEmployee', |
| | | EnterpriseEmployeeDetail = '/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail', |
| | | supplierDetail = '/subpackages/sercice/supplierDetail/supplierDetail', |
| | | |
| | | extraPage = '/subpackages/extraPage/extraPage/extraPage', |
| | | } |
| | |
| | | }); |
| | | |
| | | const displayName = computed(() => |
| | | userDetail.value.enterpriseIsReal ? userDetail.value.enterpriseName : userDetail.value.name |
| | | userDetail.value?.enterpriseIsReal ? userDetail.value?.enterpriseName : userDetail.value?.name |
| | | ); |
| | | |
| | | return { |
| | |
| | | <ListItem :icon="IconCollect" title="æ¶è夹" @click="goMineCollectTask"></ListItem> |
| | | <ListItem |
| | | :icon="IconRecruit" |
| | | v-if="!userDetail.enterpriseIsReal" |
| | | v-if="!userDetail?.enterpriseIsReal" |
| | | title="å级ä¼ä¸ç" |
| | | @click="goCompanyInfo" |
| | | ></ListItem> |
| | |
| | | accessToken: wxMiniAppUserLoginRes.accessToken, |
| | | }); |
| | | res.accessToken = bindRes.accessToken; |
| | | this.loginSuccess(res); |
| | | } |
| | | this.loginSuccess(res); |
| | | return res; |
| | | } catch (error) { |
| | | console.log('error3: ', error); |
| | |
| | | }, |
| | | |
| | | setUserInfoAction(info: API.LoginCommandCallback) { |
| | | console.log('info: ', info); |
| | | this.userInfo = { |
| | | ...this.userInfo, |
| | | ...info, |
| | |
| | | type: AppLocalConfig.userType, |
| | | enterpriseType: AppLocalConfig.enterpriseType, |
| | | }; |
| | | wxMiniAppUserLoginRes.value = await authServices.wxmpLogin(params); |
| | | wxMiniAppUserLoginRes.value = await authServices.wxmpLogin(params, { |
| | | getResponse: true, |
| | | }); |
| | | if (wxMiniAppUserLoginRes.value?.isBindPhoneNumber) { |
| | | isAccount.value = true; |
| | | } |
| | |
| | | |
| | | const dataOptions = reactive({ |
| | | id: 'id', |
| | | addressDetail: 'addressDetail', |
| | | fullAddress: 'addressName', |
| | | addressName: 'name', |
| | | phone: 'contactPhoneNumber', |
| | | defaultAddress: 'isDefault', |
| | |
| | | <template> |
| | | <ContentScrollView :paddingH="false"> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules" label-position="top"> |
| | | <nut-form-item label="å§å:" class="bole-form-item" prop="name" required> |
| | | <nut-form-item label="å§å:" class="bole-form-item" prop="name"> |
| | | <nut-input v-model="form.name" placeholder="请è¾å
¥å§å"> </nut-input> |
| | | </nut-form-item> |
| | | <nut-form-item label="ææºå·:" class="bole-form-item" prop="contactPhoneNumber" required> |
| | |
| | | }); |
| | | |
| | | const rules = reactive<FormRules>({ |
| | | name: [{ required: true, message: '请è¾å
¥å§å' }], |
| | | // name: [{ required: true, message: '请è¾å
¥å§å' }], |
| | | contactPhoneNumber: [ |
| | | { required: true, message: '请è¾å
¥ææºå·' }, |
| | | { validator: FormValidator.validatorPhoneNumber, message: '请è¾å
¥æ£ç¡®çææºå·' }, |
| | |
| | | |
| | | // onMounted(() => { |
| | | // standardOrderServices.checkPayStandardOrder({ |
| | | // id: 'ca8c17a1-6c44-446e-2e88-08de443f2678', |
| | | // id: 'ac33ec5d-5972-45e0-63a5-08de46a118d9', |
| | | // }); |
| | | // }); |
| | | |
| | |
| | | <nut-form-item label="头å:" class="bole-form-item" prop="avatar"> |
| | | <Uploader v-model:file-list="form.avatar" :maximum="1" class="bole-uploader"> </Uploader> |
| | | </nut-form-item> |
| | | <nut-form-item label="å§å:" class="bole-form-item" prop="name" required> |
| | | <nut-form-item label="å§å:" class="bole-form-item" prop="name"> |
| | | <nut-input |
| | | v-model.trim="form.name" |
| | | placeholder="请è¾å
¥å§å" |
| | |
| | | }); |
| | | |
| | | const rules = reactive<FormRules>({ |
| | | name: [{ required: true, message: '请è¾å
¥å§å' }], |
| | | // name: [{ required: true, message: '请è¾å
¥å§å' }], |
| | | contactPhoneNumber: [ |
| | | { required: true, message: '请è¾å
¥ææºå·' }, |
| | | { validator: FormValidator.validatorPhoneNumber, message: '请è¾å
¥æ£ç¡®çææºå·' }, |
| | |
| | | <List> |
| | | <ListItem |
| | | title="å
¬å¸ä¿¡æ¯" |
| | | v-if="userDetail.enterpriseIsReal" |
| | | v-if="userDetail?.enterpriseIsReal" |
| | | @click="goCompanyInfo" |
| | | ></ListItem> |
| | | <ListItem title="个人信æ¯" v-else @click="goPersonalInfo"></ListItem> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <PageLayoutWithBg class="enterpriseEmployeeDetail-page-wrapper" title="æå¡äººå详æ
"> |
| | | <InnerPage /> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'EnterpriseEmployeeDetail', |
| | | }); |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> |
| | | <JobDetailContent |
| | | :avatar="userResumeInfo.avatar" |
| | | :name="userResumeInfo.name" |
| | | :age="userResumeInfo.age" |
| | | :isReal="userResumeInfo.isReal" |
| | | :gender="userResumeInfo.gender" |
| | | :personalIdentityContent="userResumeInfo.personalIdentityContent" |
| | | :educationalBackgroundContent="userResumeInfo.educationalBackgroundContent" |
| | | :taskCount="userResumeInfo.taskCount" |
| | | :contactPhoneNumber="userResumeInfo.contactPhoneNumber" |
| | | :identity="userResumeInfo.identity" |
| | | :isCollapse="isCollapse" |
| | | :userExpectJobs="userResumeInfo.userExpectJobs" |
| | | :freeTime="userResumeInfo.freeTime" |
| | | :jobSeekingStatus="userResumeInfo.jobSeekingStatus" |
| | | :userCredentials="userResumeInfo.userCredentials" |
| | | :workSeniority="userResumeInfo.workSeniority" |
| | | :workExperience="userResumeInfo.workExperience" |
| | | :photos="userResumeInfo.photos" |
| | | :height="userResumeInfo.height" |
| | | :weight="userResumeInfo.weight" |
| | | :shoeSize="userResumeInfo.shoeSize" |
| | | :videos="userResumeInfo.videos" |
| | | :taskInfoUsers="userResumeInfo.taskInfoUsers" |
| | | > |
| | | <template #footer> |
| | | <PageFooterAction |
| | | :icon="IconShare" |
| | | text="å享" |
| | | :isFlex="false" |
| | | openType="share" |
| | | ></PageFooterAction> |
| | | <!-- <PageFooterAction |
| | | :icon="userResumeInfo.isCollected ? IconAttentionActive : IconAttention" |
| | | text="æ¶è" |
| | | :isFlex="false" |
| | | @click="handleAttention" |
| | | ></PageFooterAction> --> |
| | | <PageFooterBtn type="primary" @click="handleContact">ç«å³èç³»</PageFooterBtn> |
| | | </template> |
| | | </JobDetailContent> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import { useToggle } from 'senin-mini/hooks'; |
| | | import { Message } from '@12333/utils'; |
| | | import { useUserResume } from '@12333/hooks'; |
| | | import { useAccessLogin } from '@/hooks'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import IconShare from '@/assets/flexJob/icon-share.png'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const router = Taro.useRouter(); |
| | | const enterpriseEmployeeId = router.params?.id ?? ''; |
| | | const userId = router.params?.userId ?? ''; |
| | | |
| | | const { isLoading, isError, userResumeInfo, refetch } = useUserResume({ |
| | | userId: userId, |
| | | }); |
| | | |
| | | const { isCollapse, toggle } = useToggle(); |
| | | |
| | | const handleContact = useAccessLogin(async () => { |
| | | try { |
| | | if (!isCollapse.value) { |
| | | await userResumeServices.contactUserResume({ id: userId }); |
| | | toggle(); |
| | | } else { |
| | | Taro.makePhoneCall({ |
| | | phoneNumber: userResumeInfo.value.contactPhoneNumber, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| | |
| | | ></ChooseInputWithSuppliers> |
| | | </nut-form-item> |
| | | <nut-form-item |
| | | label="æ¯ä»éé:" |
| | | class="bole-form-item" |
| | | prop="payAccess" |
| | | label-width="90px" |
| | | required |
| | | > |
| | | <ChooseInputWithPicker |
| | | v-model="form.payAccess" |
| | | placeholder="è¯·éæ©æ¯ä»éé" |
| | | :value-enum="EnumUserBankCardAccessTextFormStandard" |
| | | /> |
| | | </nut-form-item> |
| | | <nut-form-item |
| | | label="夿³¨:" |
| | | class="bole-form-item alignTop" |
| | | prop="remark" |
| | |
| | | List, |
| | | ListItem, |
| | | ChooseInputWithDatePicker, |
| | | ChooseInputWithPicker, |
| | | } from '@12333/components'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { RouterPath } from '@/constants'; |
| | |
| | | import * as standardOrderServices from '@12333/services/apiV2/standardOrder'; |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import dayjs from 'dayjs'; |
| | | import { EnumUserBankCardAccess } from '@12333/constants'; |
| | | import { EnumUserBankCardAccess, EnumUserBankCardAccessTextFormStandard } from '@12333/constants'; |
| | | import { Message } from '@12333/utils'; |
| | | |
| | | defineOptions({ |
| | |
| | | enterpriseEmployeeId: '', |
| | | enterpriseEmployeeName: '', |
| | | remark: '', |
| | | payAccess: EnumUserBankCardAccess.WeChatPay, |
| | | }); |
| | | |
| | | const nowDate = dayjs().toDate(); |
| | |
| | | beginTime: [{ required: true, message: 'è¯·éæ©æå¡å¼å§æ¶é´' }], |
| | | endTime: [{ required: true, message: 'è¯·éæ©æå¡ç»ææ¶é´' }], |
| | | enterpriseEmployeeId: [{ required: true, message: 'è¯·éæ©æå¡æºæ' }], |
| | | payAccess: [{ required: true, message: 'è¯·éæ©æ¯ä»éé' }], |
| | | }); |
| | | |
| | | const { isLoading, isError, detail, refetch } = useStandardServiceDetail({ |
| | |
| | | paySign: res.paySign, |
| | | }); |
| | | Message.success('æ¯ä»æå'); |
| | | Taro.redirectTo({ |
| | | url: `${RouterPath.mineOrderDetail}?id=${orderId}`, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | } catch (error) { |
| | | } finally { |
| | | Taro.redirectTo({ |
| | | url: `${RouterPath.mineOrderDetail}?id=${orderId}`, |
| | | }); |
| | | } |
| | | } |
| | | </script> |
| | | |
| | |
| | | :workExperience="item.workExperience" |
| | | > |
| | | <template #actions> |
| | | <nut-button type="primary" plain>æ¥ç详æ
</nut-button> |
| | | <nut-button type="primary" plain @click="goEnterpriseEmployeeDetail(item)" |
| | | >æ¥ç详æ
</nut-button |
| | | > |
| | | <nut-button type="primary" @click="handleChoose(item)">éæ©</nut-button> |
| | | </template> |
| | | </ChooseServerCard> |
| | |
| | | } as SelectEnterpriseEmployeeEvent); |
| | | goBack(2); |
| | | } |
| | | |
| | | function goEnterpriseEmployeeDetail(item: API.GetStandardServiceServersQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.EnterpriseEmployeeDetail}?id=${item.id}&userId=${item.userId}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | :serviceCount="item.serviceCount" |
| | | > |
| | | <template #actions> |
| | | <nut-button type="primary" plain>æ¥ç详æ
</nut-button> |
| | | <nut-button type="primary" plain @click="goSupplierDetail(item)">æ¥ç详æ
</nut-button> |
| | | <nut-button type="primary" @click="goEnterpriseEmployee(item)">éæ©</nut-button> |
| | | </template> |
| | | </ChooseSupplierCard> |
| | |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | function goSupplierDetail(item: API.GetStandardServiceSupplierEnterprisesQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.supplierDetail}?id=${item.id}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | <template> |
| | | <PageLayoutWithBg class="addStandardOrder-page-wrapper" title="éæ©æå¡æºæ"> |
| | | <PageLayoutWithBg class="chooseSupplier-page-wrapper" title="éæ©æå¡æºæ"> |
| | | <InnerPage /> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | |
| | | ]; |
| | | skuState.goods = { |
| | | skuId: SkuUtils.DefaultSkuSpecId, |
| | | price: toThousand(res.specs[0].price), |
| | | price: res.specs[0].price, |
| | | imagePath: setOSSLink(res.files[0]), |
| | | name: res.name, |
| | | }; |
| | |
| | | }); |
| | | }); |
| | | |
| | | async function handleAttention() { |
| | | const handleAttention = useAccessLogin(async () => { |
| | | try { |
| | | let params: API.CollectionStandardServiceCommand = { |
| | | ids: [id], |
| | |
| | | refetch({ type: 'inactive' }); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div></div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | // import CompanyDesc from '../components/CompanyDesc.vue'; |
| | | // import CompanyTaskList from '../components/CompanyTaskList.vue'; |
| | | // import CompanyInfo from '../components/CompanyInfo.vue'; |
| | | import { ProTabs, ProTabPane } from '@12333/components'; |
| | | // import { useEnterpriseDetail } from '@12333/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const router = Taro.useRouter(); |
| | | const enterpriseId = router.params?.id ?? ''; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <PageLayoutWithBg class="supplierDetail-page-wrapper" title="æå¡æºæè¯¦æ
"> |
| | | <InnerPage /> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'supplierDetail', |
| | | }); |
| | | </script> |
| | |
| | | REDIRECT = 9, |
| | | } |
| | | // ä¸å端约å®çååºæ°æ®æ ¼å¼ |
| | | interface ResponseStructure { |
| | | export interface ResponseStructure<TData = any> { |
| | | success: boolean; |
| | | data: any; |
| | | data: TData; |
| | | /** |
| | | * httpç¶æå |
| | | */ |
| | |
| | | "UnderTakeClient:staging:build": "pnpm run -C apps/underTakeMiniApp build:weapp:staging:upload", |
| | | "Housekeeping:build": "pnpm run -C apps/housekeepingMiniApp build:weapp:upload", |
| | | "Housekeeping:staging:build": "pnpm run -C apps/housekeepingMiniApp build:weapp:staging:upload", |
| | | "CStandard:build": "pnpm run -C apps/cStandardMiniApp build:weapp:upload", |
| | | "CStandard:staging:build": "pnpm run -C apps/cStandardMiniApp build:weapp:staging:upload", |
| | | "BStandard:build": "pnpm run -C apps/bStandardMiniApp build:weapp:upload", |
| | | "BStandard:staging:build": "pnpm run -C apps/bStandardMiniApp build:weapp:staging:upload", |
| | | "build:all": "pnpm run -r --parallel build:weapp:upload" |
| | | }, |
| | | "browserslist": [ |
| | |
| | | |
| | | export type Goods = { |
| | | imagePath: string; |
| | | price: string; |
| | | price: number; |
| | | skuId: string; |
| | | name: string; |
| | | }; |
| | |
| | | export enum EnumEnterpriseWalletTransactionType { |
| | | /**å
å¼ */ |
| | | Recharge = 10, |
| | | /**æ¶å
¥ */ |
| | | Income = 11, |
| | | /**转账 */ |
| | | Transfer = 20, |
| | | } |
| | |
| | | |
| | | export function useStandardServiceDetail({ id, onSuccess }: UseStandardServiceDetailOptions) { |
| | | const { data, refetch, isLoading, isError } = useQuery({ |
| | | queryKey: ['standardServiceServices/getStandardService', id], |
| | | queryKey: ['standardServiceServices/getOpenStandardService', id], |
| | | queryFn: async () => { |
| | | let params: API.APIgetStandardServiceParams = { |
| | | id: unref(id), |
| | | }; |
| | | |
| | | return await standardServiceServices.getStandardService(params, { |
| | | return await standardServiceServices.getOpenStandardService(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | |
| | | }); |
| | | |
| | | const minPrice = computed(() => { |
| | | if (!data.value?.specs?.length) { |
| | | return 0; |
| | | } else { |
| | | return Math.min(...data.value.specs.map((x) => x.price)); |
| | | } |
| | | // if (!data.value?.specs?.length) { |
| | | // return 0; |
| | | // } else { |
| | | // return Math.min(...data.value.specs.map((x) => x.price)); |
| | | // } |
| | | return data.value?.minSpecPrice ?? 0; |
| | | }); |
| | | |
| | | return { |
| | |
| | | import * as task from './task'; |
| | | import * as enterpriseWallet from './enterpriseWallet'; |
| | | import * as ocrUtils from './ocrUtils'; |
| | | import * as standardOrder from './standardOrder'; |
| | | import * as electronSign from './electronSign'; |
| | | import * as resource from './resource'; |
| | | import * as logRecords from './logRecords'; |
| | | import * as dictionary from './dictionary'; |
| | | import * as taskCheckReceive from './taskCheckReceive'; |
| | | import * as taskUser from './taskUser'; |
| | | import * as standardOrder from './standardOrder'; |
| | | import * as standardService from './standardService'; |
| | | import * as userResume from './userResume'; |
| | | import * as auth from './auth'; |
| | |
| | | task, |
| | | enterpriseWallet, |
| | | ocrUtils, |
| | | standardOrder, |
| | | electronSign, |
| | | resource, |
| | | logRecords, |
| | | dictionary, |
| | | taskCheckReceive, |
| | | taskUser, |
| | | standardOrder, |
| | | standardService, |
| | | userResume, |
| | | auth, |
| | |
| | | }); |
| | | } |
| | | |
| | | /** æ¥è¯¢æ å订åç»ç®è¯¦æ
GET /api/flexjob/standardOrder/getStandardOrderSettlement */ |
| | | export async function getStandardOrderSettlement( |
| | | // å å çæçParamç±»å (ébodyåæ°swaggeré»è®¤æ²¡æçæå¯¹è±¡) |
| | | params: API.APIgetStandardOrderSettlementParams, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<API.GetStandardOrderSettlementQueryResult>( |
| | | '/api/flexjob/standardOrder/getStandardOrderSettlement', |
| | | { |
| | | method: 'GET', |
| | | params: { |
| | | ...params, |
| | | }, |
| | | ...(options || {}), |
| | | } |
| | | ); |
| | | } |
| | | |
| | | /** æ¥è¯¢æ å订å详æ
GET /api/flexjob/standardOrder/getSureStandardOrder */ |
| | | export async function getSureStandardOrder( |
| | | // å å çæçParamç±»å (ébodyåæ°swaggeré»è®¤æ²¡æçæå¯¹è±¡) |
| | |
| | | scene?: EnumGetStandardOrdersQueryScene; |
| | | } |
| | | |
| | | interface APIgetStandardOrderSettlementParams { |
| | | /** 订åId */ |
| | | id?: string; |
| | | } |
| | | |
| | | interface APIgetStandardServiceParams { |
| | | /** Id */ |
| | | id?: string; |
| | |
| | | enum EnumEnterpriseWalletTransactionType { |
| | | /**å
å¼ */ |
| | | Recharge = 10, |
| | | /**æ¶å
¥ */ |
| | | Income = 11, |
| | | /**转账 */ |
| | | Transfer = 20, |
| | | } |
| | |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultGetStandardOrderSettlementQueryResult { |
| | | /** è·è¸ªId */ |
| | | traceId?: string; |
| | | /** ç¶æç */ |
| | | code?: number; |
| | | /** é误ç */ |
| | | errorCode?: string; |
| | | data?: GetStandardOrderSettlementQueryResult; |
| | | /** æ§è¡æå */ |
| | | success?: boolean; |
| | | /** éè¯¯ä¿¡æ¯ */ |
| | | msg?: any; |
| | | /** éå æ°æ® */ |
| | | extras?: any; |
| | | /** æ¶é´æ³ */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultGetStandardOrdersQueryResult { |
| | | /** è·è¸ªId */ |
| | | traceId?: string; |
| | |
| | | contactPhoneNumber?: string; |
| | | } |
| | | |
| | | interface GetStandardOrderSettlementQueryResult { |
| | | /** 订åId */ |
| | | id?: string; |
| | | /** 仿¬¾äººè´¦æ· */ |
| | | payerAccount?: string; |
| | | /** 仿¬¾äººåç§° */ |
| | | payerName?: string; |
| | | /** 仿¬¾äººå¼æ·è¡ */ |
| | | payerBank?: string; |
| | | /** 仿¬¾äººæ¯è¡ */ |
| | | payerBankBranch?: string; |
| | | /** æ¶æ¬¾äººå§å */ |
| | | receiveName?: string; |
| | | /** æ¶æ¬¾è´¦æ· */ |
| | | receiveAccount?: string; |
| | | /** æ¶æ¬¾äººå¼æ·è¡ */ |
| | | receiveBank?: string; |
| | | /** æ¶æ¬¾äººæ¯è¡ */ |
| | | receiveBankBranch?: string; |
| | | /** å¸ç§ */ |
| | | currency?: string; |
| | | /** å¸ç§ */ |
| | | currencyName?: string; |
| | | settlementStatus?: EnumStandardOrderSettlementStatus; |
| | | /** ç»ç®æ¶é´ */ |
| | | settlementTime?: string; |
| | | /** ç»ç®éé¢ */ |
| | | settlementAmount?: number; |
| | | /** çµåæ¶æ®ä¸è½½é¾æ¥ */ |
| | | ereceiptDownloadOssUrl?: string; |
| | | } |
| | | |
| | | interface GetStandardOrdersQuery { |
| | | scene?: EnumGetStandardOrdersQueryScene; |
| | | /** å
³é®åï¼è®¢åå·/æå¡åï¼ */ |
| | |
| | | partAEnterpriseOrderStatus?: EnumGetStandardOrdersQueryPartAEnterpriseOrderStatus; |
| | | supplierEnterpriseOrderStatus?: EnumGetStandardOrdersQuerySupplierEnterpriseOrderStatus; |
| | | settlementStatus?: EnumStandardOrderSettlementStatus; |
| | | taskCheckReceiveStatus?: EnumTaskCheckReceiveStatus; |
| | | pageModel?: PagedListQueryPageModel; |
| | | } |
| | | |
| | |
| | | id?: string; |
| | | /** 头å */ |
| | | avatar?: string; |
| | | /** ç¨æ·ID */ |
| | | userId?: string; |
| | | /** å§å */ |
| | | name?: string; |
| | | gender?: EnumUserGender; |
| | |
| | | |
| | | declare module '@/utils/request' { |
| | | export const request: IRequest; |
| | | export interface ResponseStructure<TData = any> { |
| | | success: boolean; |
| | | data: TData; |
| | | /** |
| | | * httpç¶æå |
| | | */ |
| | | code?: number; |
| | | /** |
| | | * é误ç |
| | | */ |
| | | errorCode?: string; |
| | | /** |
| | | * éè¯¯ä¿¡æ¯ |
| | | */ |
| | | msg?: string; |
| | | showType?: ErrorShowType; |
| | | traceId?: string; |
| | | } |
| | | } |