| | |
| | | "DirectiveBinding": true, |
| | | "MaybeRef": true, |
| | | "MaybeRefOrGetter": true, |
| | | "TabBarPageRouterList": true |
| | | "TabBarPageRouterList": true, |
| | | "APP_ENV": true, |
| | | "NODE_ENV": true |
| | | } |
| | | } |
| | |
| | | // Generated by unplugin-auto-import |
| | | export {} |
| | | declare global { |
| | | const APP_ENV: typeof import('./src/constants/app')['APP_ENV'] |
| | | const AppLocalConfig: typeof import('./src/constants/app')['AppLocalConfig'] |
| | | const BackType: typeof import('./src/constants/enum')['BackType'] |
| | | const EffectScope: typeof import('vue')['EffectScope'] |
| | |
| | | const EnumUserStatus: typeof import('./src/constants/apiEnum')['EnumUserStatus'] |
| | | const EnumUserType: typeof import('./src/constants/apiEnum')['EnumUserType'] |
| | | const HomeOrderType: typeof import('./src/hooks/task')['HomeOrderType'] |
| | | const NODE_ENV: typeof import('./src/constants/app')['NODE_ENV'] |
| | | const OssAssets: typeof import('./src/constants/img')['OssAssets'] |
| | | const RouterPath: typeof import('./src/constants/router')['RouterPath'] |
| | | const TabBarPageRouter: typeof import('./src/constants/tabBar')['TabBarPageRouter'] |
| | |
| | | import { UnwrapRef } from 'vue' |
| | | declare module 'vue' { |
| | | interface ComponentCustomProperties { |
| | | readonly APP_ENV: UnwrapRef<typeof import('./src/constants/app')['APP_ENV']> |
| | | readonly AppLocalConfig: UnwrapRef<typeof import('./src/constants/app')['AppLocalConfig']> |
| | | readonly BackType: UnwrapRef<typeof import('./src/constants/enum')['BackType']> |
| | | readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']> |
| | | readonly NODE_ENV: UnwrapRef<typeof import('./src/constants/app')['NODE_ENV']> |
| | | readonly OssAssets: UnwrapRef<typeof import('./src/constants/img')['OssAssets']> |
| | | readonly RouterPath: UnwrapRef<typeof import('./src/constants/router')['RouterPath']> |
| | | readonly TabBarPageRouter: UnwrapRef<typeof import('./src/constants/tabBar')['TabBarPageRouter']> |
| | |
| | | "miniprogram": { |
| | | "list": [ |
| | | { |
| | | "name": "灵工详情", |
| | | "pathName": "subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask", |
| | | "query": "enterpriseEmployeeId=304f7e38-b973-478c-88aa-08ddf02e3176&id=ddecb887-8273-449b-6bcd-08de20009bf4&taskInfoId=ec3f301e-fa95-47a1-b8ee-08de1da3c153", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "待验收-验收详情", |
| | | "pathName": "subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail", |
| | | "query": "id=546401cc-c148-47d0-c647-08de1e75af01&date=2025-11-28&taskInfoId=5a22c18b-0b49-4540-6658-08de1da80d7c", |
| | |
| | | clientType: EnumClientType.Wxmp, |
| | | enterpriseType: EnumEnterpriseType.PartyA, |
| | | }; |
| | | |
| | | export const APP_ENV = process.env.APP_ENV; |
| | | export const NODE_ENV = process.env.NODE_ENV; |
| | |
| | | return userDetail.value?.enterpriseIsReal; |
| | | }); |
| | | |
| | | const isBindWechat = computed(() => { |
| | | return userDetail.value?.bindWxmpId; |
| | | }); |
| | | |
| | | return { |
| | | user: userInfo, |
| | | userDetail: userDetail, |
| | | updateUserInfo, |
| | | isCertified, |
| | | locationCity, |
| | | isBindWechat, |
| | | }; |
| | | } |
| | | |
| | |
| | | async loginByPassword(params: API.PasswordLoginCommand) { |
| | | let res = await authServices.passwordLogin( |
| | | { |
| | | code: params.code, |
| | | userName: params.userName, |
| | | password: params.password, |
| | | // password: md5Encrypt(params.password), |
| | |
| | | object-fit: cover; |
| | | } |
| | | } |
| | | |
| | | .dialog-form-wrapper { |
| | | width: 600px; |
| | | |
| | | .dialog-form-footer { |
| | | padding: 10px 20px; |
| | | text-align: center; |
| | | |
| | | .nut-button--plain { |
| | | border-width: 1px; |
| | | } |
| | | |
| | | .nut-button { |
| | | min-width: 100px; |
| | | } |
| | | |
| | | .nut-button + .nut-button { |
| | | margin-left: 20px; |
| | | } |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | <template> |
| | | <nut-popup v-model:visible="visible"> |
| | | <div class="dialog-form-wrapper"> |
| | | <nut-form :model-value="form" ref="formRef" label-position="top"> |
| | | <nut-form-item |
| | | label="谢绝原因:" |
| | | class="bole-form-item alignTop" |
| | | prop="remark" |
| | | label-width="90px" |
| | | > |
| | | <nut-textarea v-model="form.remark" rows="4" placeholder="请输入谢绝原因"> </nut-textarea> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | <div class="dialog-form-footer"> |
| | | <nut-button @click="visible = false" plain>取消</nut-button> |
| | | <nut-button type="primary" @click="handleConfirm">确认</nut-button> |
| | | </div> |
| | | </div> |
| | | </nut-popup> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | defineOptions({ |
| | | name: 'RefuseDialog', |
| | | }); |
| | | |
| | | type Form = { |
| | | remark: string; |
| | | }; |
| | | |
| | | const form = defineModel<Form>('form'); |
| | | |
| | | const visible = defineModel<boolean>(); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'onConfirm'): void; |
| | | }>(); |
| | | |
| | | const formRef = ref<any>(null); |
| | | |
| | | function handleConfirm() { |
| | | if (!formRef.value) return; |
| | | formRef.value.validate().then(({ valid, errors }: any) => { |
| | | if (valid) { |
| | | emit('onConfirm'); |
| | | } |
| | | }); |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .payroll-form-wrapper { |
| | | width: 600px; |
| | | } |
| | | </style> |
| | |
| | | <PageFooterBtn |
| | | type="primary" |
| | | plain |
| | | @click="setTaskUserHire(EnumTaskUserHireStatus.Refuse)" |
| | | @click="handleAdd()" |
| | | v-if="taskUserHireStatusResult.hireStatus === EnumTaskUserHireStatus.Wait" |
| | | >谢绝</PageFooterBtn |
| | | > |
| | |
| | | > |
| | | </template> |
| | | </JobDetailContent> |
| | | <RefuseDialog v-bind="dialogProps" /> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import * as taskUserServices from '@12333/services/apiV2/taskUser'; |
| | | import { Message } from '@12333/utils'; |
| | | import { useUserResume } from '@12333/hooks'; |
| | | import { useUserResume, useFormDialog } from '@12333/hooks'; |
| | | import { EnumTaskUserHireStatus } from '@12333/constants'; |
| | | import RefuseDialog from '../components/RefuseDialog.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | placeholderData: () => ({} as API.GetTaskUserHireStatusQueryResult), |
| | | }); |
| | | |
| | | async function setTaskUserHire(hireStatus: EnumTaskUserHireStatus) { |
| | | const { dialogProps, handleAdd, editForm } = useFormDialog({ |
| | | onConfirm: handleRefuse, |
| | | defaultFormParams: { |
| | | remark: '', |
| | | }, |
| | | }); |
| | | |
| | | async function handleRefuse() { |
| | | setTaskUserHire(EnumTaskUserHireStatus.Refuse, editForm.remark); |
| | | } |
| | | |
| | | async function setTaskUserHire(hireStatus: EnumTaskUserHireStatus, remark?: string) { |
| | | try { |
| | | let params: API.SetTaskUserHireCommand = { |
| | | id: id, |
| | | hireStatus: hireStatus, |
| | | hireRemark: remark, |
| | | }; |
| | | let res = await taskUserServices.setTaskUserHire(params); |
| | | if (res) { |
| | |
| | | import IconCaptcha from '@/assets/login/icon-btn-captcha.png'; |
| | | import IconPassword from '@/assets/login/icon-btn-password.png'; |
| | | import { LoginFormTabs } from '../constants'; |
| | | import { subscribeMessageTemplateIdsForB } from '@12333/constants'; |
| | | import * as authServices from '@12333/services/apiV2/auth'; |
| | | |
| | | defineOptions({ |
| | |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleLoginSuccess() { |
| | | try { |
| | | if (!Taro.requestSubscribeMessage) { |
| | | await Message.confirm({ message: '你的微信版本过低,不支持订阅消息,是否继续报名' }); |
| | | } |
| | | const res = await Taro.getSetting({ |
| | | withSubscriptions: true, |
| | | }); |
| | | let setting: boolean[] = []; |
| | | if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings) { |
| | | setting = subscribeMessageTemplateIdsForB |
| | | .map((id) => res.subscriptionsSetting.itemSettings[id] !== 'accept') |
| | | .filter(Boolean); |
| | | } |
| | | if (setting.length > 0) { |
| | | Taro.requestSubscribeMessage({ |
| | | tmplIds: subscribeMessageTemplateIdsForB, |
| | | success: function (res) { |
| | | console.log('res: ', res); |
| | | }, |
| | | }); |
| | | } |
| | | Message.success('授权登录成功', { |
| | | onClosed: () => { |
| | | jump(); |
| | | }, |
| | | }); |
| | | } catch (error) {} |
| | | function handleLoginSuccess() { |
| | | Message.success('授权登录成功', { |
| | | onClosed: () => { |
| | | jump(); |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | function goLoginByForm(tab = LoginFormTabs.VerificationCodeLogin) { |
| | |
| | | <template> |
| | | <div class="verification-code-login-form-wrapper"> |
| | | <nut-form class="verification-code-login-form" ref="formRef" :model-value="form" :rules="rules"> |
| | | <nut-form-item label="" class="bole-form-item" prop="userName" required> |
| | | <nut-input |
| | | v-model.trim="form.userName" |
| | | class="bole-input-text" |
| | | placeholder="请输入账号/手机号/邮箱" |
| | | type="text" |
| | | /> |
| | | </nut-form-item> |
| | | <nut-form-item label="" class="bole-form-item" prop="userPassword" required> |
| | | <nut-input |
| | | v-model.trim="form.userPassword" |
| | | class="bole-input-text" |
| | | placeholder="请输入密码" |
| | | :type="isShowPassword ? 'text' : 'password'" |
| | | :key="isShowPassword ? 'text' : 'password'" |
| | | > |
| | | <template #right> |
| | | <div class="password-icon-wrapper" @click="isShowPassword = !isShowPassword"> |
| | | <Eye v-if="isShowPassword"></Eye> |
| | | <Marshalling v-else></Marshalling> |
| | | </div> |
| | | </template> |
| | | </nut-input> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | <LargeButton class="login-btn" @click="handleLogin" :loading="form.loading">登录</LargeButton> |
| | | <nut-button |
| | | v-if="isAccount" |
| | | type="primary" |
| | | class="authorization-page-wechat-wrapper" |
| | | @click="handleLoginByHasAccount" |
| | | > |
| | | <div class="authorization-page-wechat">手机号快速登录</div></nut-button |
| | | > |
| | | <template v-else> |
| | | <nut-form |
| | | class="verification-code-login-form" |
| | | ref="formRef" |
| | | :model-value="form" |
| | | :rules="rules" |
| | | > |
| | | <nut-form-item label="" class="bole-form-item" prop="userName" required> |
| | | <nut-input |
| | | v-model.trim="form.userName" |
| | | class="bole-input-text" |
| | | placeholder="请输入账号/手机号/邮箱" |
| | | type="text" |
| | | /> |
| | | </nut-form-item> |
| | | <nut-form-item label="" class="bole-form-item" prop="userPassword" required> |
| | | <nut-input |
| | | v-model.trim="form.userPassword" |
| | | class="bole-input-text" |
| | | placeholder="请输入密码" |
| | | :type="isShowPassword ? 'text' : 'password'" |
| | | :key="isShowPassword ? 'text' : 'password'" |
| | | > |
| | | <template #right> |
| | | <div class="password-icon-wrapper" @click="isShowPassword = !isShowPassword"> |
| | | <Eye v-if="isShowPassword"></Eye> |
| | | <Marshalling v-else></Marshalling> |
| | | </div> |
| | | </template> |
| | | </nut-input> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | <LargeButton class="login-btn" @click="handleLogin" :loading="form.loading">登录</LargeButton> |
| | | </template> |
| | | |
| | | <!-- <AccessOpenTypeButton |
| | | type="primary" |
| | | class="authorization-page-wechat-wrapper" |
| | | open-type="getPhoneNumber" |
| | | :access="policyChecked" |
| | | @noAccess="noAccess" |
| | | @getphonenumber="handleLogin" |
| | | > |
| | | <div class="authorization-page-wechat">登录</div> |
| | | </AccessOpenTypeButton> --> |
| | | <!-- <div class="go-register-btn" @click="goRegister">立即注册</div> --> |
| | | </div> |
| | | </template> |
| | |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { Eye, Marshalling } from '@nutui/icons-vue-taro'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as authServices from '@12333/services/apiV2/auth'; |
| | | |
| | | defineOptions({ |
| | | name: 'AccountLoginForm', |
| | |
| | | const isShowPassword = ref(false); |
| | | |
| | | const formRef = ref(null); |
| | | const isAccount = ref(false); |
| | | const wxMiniAppUserLoginRes = ref<API.LoginCommandCallback>(); |
| | | |
| | | const form = reactive({ |
| | | loading: false, |
| | |
| | | userPassword: [{ required: true, message: '请输入密码' }], |
| | | }); |
| | | |
| | | async function handleLoginByHasAccount() { |
| | | try { |
| | | if (props.policyChecked) { |
| | | userStore.loginSuccess(wxMiniAppUserLoginRes.value); |
| | | Message.success('登录成功', { |
| | | onClosed: () => { |
| | | jump(); |
| | | }, |
| | | }); |
| | | } else { |
| | | noAccess(); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleLogin() { |
| | | try { |
| | | let loginRes = await Taro.login(); |
| | | if (props.policyChecked) { |
| | | const { valid } = await formRef.value.validate(); |
| | | if (valid) { |
| | |
| | | await userStore.loginByPassword({ |
| | | userName: form.userName, |
| | | password: form.userPassword, |
| | | code: loginRes.code, |
| | | }); |
| | | jump(); |
| | | } |
| | |
| | | url: RouterPath.registerForm, |
| | | }); |
| | | } |
| | | |
| | | onMounted(async () => { |
| | | try { |
| | | let loginRes = await Taro.login(); |
| | | const params: API.WxmpLoginCommand = { |
| | | code: loginRes.code, |
| | | type: AppLocalConfig.userType, |
| | | enterpriseType: AppLocalConfig.enterpriseType, |
| | | }; |
| | | wxMiniAppUserLoginRes.value = await authServices.wxmpLogin(params, { |
| | | skipErrorHandler: true, |
| | | }); |
| | | if (wxMiniAppUserLoginRes.value?.isBindPhoneNumber) { |
| | | isAccount.value = true; |
| | | } |
| | | } catch (error) { |
| | | if (error?.info?.errorCode == 's401') { |
| | | isAccount.value = false; |
| | | } |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | font-size: 28px; |
| | | } |
| | | } |
| | | |
| | | .authorization-page-wechat-wrapper { |
| | | width: 100%; |
| | | height: 88px; |
| | | } |
| | | |
| | | .authorization-page-wechat { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | font-weight: 400; |
| | | font-size: 32px; |
| | | color: #ffffff; |
| | | line-height: 44px; |
| | | |
| | | .authorization-page-wechat-icon { |
| | | width: 44px; |
| | | height: 36px; |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | </ListItem> --> |
| | | <ListItem title="用户协议" @click="goMineUserPolicy"></ListItem> |
| | | <ListItem title="隐私政策" @click="goPrivacyPolicy"></ListItem> |
| | | <ListItem title="微信解绑" @click="handleUnbindWechat"></ListItem> |
| | | <ListItem title="退出登录" @click="handleLoginout"></ListItem> |
| | | </List> |
| | | </PageLayout> |
| | |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { useQueryClient } from '@tanstack/vue-query'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as authServices from '@12333/services/apiV2/auth'; |
| | | |
| | | defineOptions({ |
| | | name: 'setting', |
| | | }); |
| | | |
| | | const userStore = useUserStore(); |
| | | const { isBindWechat, updateUserInfo } = useUser(); |
| | | const queryClient = useQueryClient(); |
| | | |
| | | const userAccount = computed(() => { |
| | | return addStarForString(userStore?.userDetail?.userName, 4, 8); |
| | | return addStarForString(userStore?.userDetail?.name, 4, 8); |
| | | }); |
| | | |
| | | function goMineUserPolicy() { |
| | |
| | | queryClient.removeQueries(); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleUnbindWechat() { |
| | | try { |
| | | if (!isBindWechat) { |
| | | Message.error('您还没有绑定微信'); |
| | | return; |
| | | } |
| | | await Message.confirm({ message: '确定要解绑微信吗?' }); |
| | | let params: API.UnBindUserWxmpIdCommand = {}; |
| | | let res = await authServices.unBindUserWxmpId(params); |
| | | if (res) { |
| | | Message.success('解绑成功'); |
| | | updateUserInfo(); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | :showFooterLeft="false" |
| | | > |
| | | <template #footerRight> |
| | | <nut-button v-if="showQueryState" type="primary" @click.stop="handleArrange(item)" |
| | | >安排</nut-button |
| | | > |
| | | <template v-if="showQueryState"> |
| | | <nut-button type="primary" @click.stop="handleArrange(item)">安排</nut-button> |
| | | <nut-button type="primary" @click.stop="setTaskUserHire(item)">取消录用</nut-button> |
| | | </template> |
| | | |
| | | <div v-else class="batch-task-card-status">已安排</div> |
| | | </template> |
| | | </FlexJobCard> |
| | |
| | | EnumTaskUserArrangeStatus, |
| | | EnumPagedListOrder, |
| | | EnumGetArrangeTaskUsersQueryApplyStatus, |
| | | EnumTaskUserHireStatus, |
| | | } from '@12333/constants'; |
| | | import * as taskUserServices from '@12333/services/apiV2/taskUser'; |
| | | import _ from 'lodash'; |
| | |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function setTaskUserHire(row: API.GetArrangeTaskUsersQueryResultItem) { |
| | | try { |
| | | let params: API.SetTaskUserHireCommand = { |
| | | id: row.id, |
| | | hireStatus: EnumTaskUserHireStatus.Cancel, |
| | | }; |
| | | let res = await taskUserServices.setTaskUserHire(params); |
| | | if (res) { |
| | | Message.success('已取消录用'); |
| | | invalidateQueries(); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | >人员安排</nut-button |
| | | > |
| | | <nut-button |
| | | v-if="item.status === EnumTaskStatus.Wait" |
| | | type="primary" |
| | | class="dark-btn" |
| | | :color="Colors.Info" |
| | | @click.stop="goBatchTaskList(item, EnumTaskUserArrangeStatus.Wait)" |
| | | >取消录用</nut-button |
| | | > |
| | | <nut-button |
| | | v-if="item.status === EnumTaskStatus.Complete" |
| | | type="primary" |
| | | :color="Colors.Info" |
| | |
| | | "miniprogram": { |
| | | "list": [ |
| | | { |
| | | "name": "任务详情-谢绝", |
| | | "pathName": "subpackages/task/taskDetail/taskDetail", |
| | | "query": "id=bbc3f370-5c4f-417e-1999-08de316fce01&from=sign", |
| | | "scene": null, |
| | | "launchMode": "default" |
| | | }, |
| | | { |
| | | "name": "收入详情", |
| | | "pathName": "subpackages/wallet/incomeDetailInfo/incomeDetailInfo", |
| | | "query": "id=7899c603-f237-4505-949d-08de234155c4", |
| | |
| | | <nut-badge |
| | | class="mine-order-list-item" |
| | | top="8" |
| | | :value="userDetail?.taskCount ?? 0" |
| | | :dot="userDetail?.taskCount > 0" |
| | | @click="goMineSign" |
| | | > |
| | | <img :src="IconOrderSign" class="mine-order-list-icon" /> |
| | |
| | | <nut-badge |
| | | class="mine-order-list-item" |
| | | top="8" |
| | | :value="userDetail?.hirePassTaskCount ?? 0" |
| | | :dot="userDetail?.hirePassTaskCount > 0" |
| | | @click="goMineHired" |
| | | > |
| | | <img :src="IconOrderHire" class="mine-order-list-icon" /> |
| | |
| | | <nut-badge |
| | | class="mine-order-list-item" |
| | | top="8" |
| | | :value="userDetail?.arrangeCompleteTaskCount ?? 0" |
| | | :dot="userDetail?.arrangeCompleteTaskCount > 0" |
| | | @click="goMineHire" |
| | | > |
| | | <img :src="IconOrderHire" class="mine-order-list-icon" /> |
| | |
| | | :service-fee="item.serviceFee" |
| | | :settlement-cycle="item.settlementCycle" |
| | | :address-name="item.addressName" |
| | | :unRead="item.unRead" |
| | | @click="goTaskDetail(item)" |
| | | > |
| | | <template #actions> |
| | |
| | | GetPersonalHireTaskInfosQueryStatusText, |
| | | GetPersonalHireTaskInfosQueryStatusColor, |
| | | EnumTaskUserArrangeStatus, |
| | | EnumReadScene, |
| | | } from '@12333/constants'; |
| | | import * as taskServices from '@12333/services/apiV2/task'; |
| | | import Taro from '@tarojs/taro'; |
| | |
| | | |
| | | function goTaskDetail(item: API.GetPersonalHireTaskInfosQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskDetail}?id=${item.id}&from=hire`, |
| | | url: `${RouterPath.taskDetail}?id=${item.id}&from=hire&readScene=${EnumReadScene.TaskUserArrangePassForPersonal}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | :service-fee="item.serviceFee" |
| | | :settlement-cycle="item.settlementCycle" |
| | | :address-name="item.addressName" |
| | | :unRead="item.unRead" |
| | | @click="goTaskDetail(item)" |
| | | > |
| | | <template #actions> |
| | |
| | | GetPersonalHireTaskInfosQueryStatusText, |
| | | GetPersonalHireTaskInfosQueryStatusColor, |
| | | EnumTaskUserHireStatus, |
| | | EnumReadScene, |
| | | } from '@12333/constants'; |
| | | import * as taskServices from '@12333/services/apiV2/task'; |
| | | import Taro from '@tarojs/taro'; |
| | |
| | | |
| | | function goTaskDetail(item: API.GetPersonalHireTaskInfosQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskDetail}?id=${item.id}`, |
| | | url: `${RouterPath.taskDetail}?id=${item.id}&readScene=${EnumReadScene.TaskUserHirePassForPersonal}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | :service-fee="item.serviceFee" |
| | | :settlement-cycle="item.settlementCycle" |
| | | :address-name="item.addressName" |
| | | :isRead="false" |
| | | :unRead="item.unRead" |
| | | @click="goTaskDetail(item)" |
| | | > |
| | | <template #actions> |
| | |
| | | GetPersonalApplyTaskInfosQueryStatus, |
| | | GetPersonalApplyTaskInfosQueryStatusText, |
| | | GetPersonalApplyTaskInfosQueryStatusColor, |
| | | EnumReadScene, |
| | | } from '@12333/constants'; |
| | | import * as taskServices from '@12333/services/apiV2/task'; |
| | | import Taro from '@tarojs/taro'; |
| | |
| | | |
| | | function goTaskDetail(item: API.GetPersonalApplyTaskInfosQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskDetail}?id=${item.id}&from=sign`, |
| | | url: `${RouterPath.taskDetail}?id=${item.id}&from=sign&readScene=${EnumReadScene.TaskUserApplyForPersonal}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | GetTaskInfoQueryResultHireButton, |
| | | GetTaskInfoQueryResultApplyButton, |
| | | EnumTaskCheckReceiveMethod, |
| | | EnumReadScene, |
| | | } from '@12333/constants'; |
| | | import { useAccessLogin } from '@/hooks'; |
| | | import { useTaskInfo } from '@12333/hooks'; |
| | |
| | | const router = Taro.useRouter(); |
| | | const id = router.params?.id ?? ''; |
| | | const from = router.params?.from ?? ''; |
| | | const readScene = router.params?.readScene ?? ''; |
| | | |
| | | const { isLoading, isError, detail, refetch, isContainCheckIn } = useTaskInfo({ id }); |
| | | const { isLoading, isError, detail, refetch, isContainCheckIn } = useTaskInfo({ |
| | | id, |
| | | readScene: readScene, |
| | | }); |
| | | |
| | | const { isCollapse, setTrue } = useToggle(); |
| | | |
| | |
| | | clientType: EnumClientType.Wxmp, |
| | | enterpriseType: EnumEnterpriseType.Supplier, |
| | | }; |
| | | |
| | | export const APP_ENV = process.env.APP_ENV; |
| | | export const NODE_ENV = process.env.NODE_ENV; |
| | |
| | | return userDetail.value?.enterpriseIsReal; |
| | | }); |
| | | |
| | | const isBindWechat = computed(() => { |
| | | return userDetail.value?.bindWxmpId; |
| | | }); |
| | | |
| | | return { |
| | | user: userInfo, |
| | | userDetail: userDetail, |
| | | updateUserInfo, |
| | | isCertified, |
| | | locationCity, |
| | | isBindWechat, |
| | | }; |
| | | } |
| | | |
| | |
| | | { |
| | | userName: params.userName, |
| | | password: params.password, |
| | | code: params.code, |
| | | // password: md5Encrypt(params.password), |
| | | type: AppLocalConfig.userType, |
| | | clientType: AppLocalConfig.clientType, |
| | |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleLoginSuccess() { |
| | | try { |
| | | if (!Taro.requestSubscribeMessage) { |
| | | await Message.confirm({ message: '你的微信版本过低,不支持订阅消息,是否继续报名' }); |
| | | } |
| | | const res = await Taro.getSetting({ |
| | | withSubscriptions: true, |
| | | }); |
| | | let setting: boolean[] = []; |
| | | if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings) { |
| | | setting = subscribeMessageTemplateIdsForU |
| | | .map((id) => res.subscriptionsSetting.itemSettings[id] !== 'accept') |
| | | .filter(Boolean); |
| | | } |
| | | if (setting.length > 0) { |
| | | Taro.requestSubscribeMessage({ |
| | | tmplIds: subscribeMessageTemplateIdsForU, |
| | | success: function (res) { |
| | | console.log('res: ', res); |
| | | }, |
| | | }); |
| | | } |
| | | Message.success('授权登录成功', { |
| | | onClosed: () => { |
| | | jump(); |
| | | }, |
| | | }); |
| | | } catch (error) {} |
| | | function handleLoginSuccess() { |
| | | Message.success('授权登录成功', { |
| | | onClosed: () => { |
| | | jump(); |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | function goLoginByForm(tab = LoginFormTabs.VerificationCodeLogin) { |
| | |
| | | <template> |
| | | <div class="verification-code-login-form-wrapper"> |
| | | <nut-form class="verification-code-login-form" ref="formRef" :model-value="form" :rules="rules"> |
| | | <nut-form-item label="" class="bole-form-item" prop="userName" required> |
| | | <nut-input |
| | | v-model.trim="form.userName" |
| | | class="bole-input-text" |
| | | placeholder="请输入账号/手机号/邮箱" |
| | | type="text" |
| | | /> |
| | | </nut-form-item> |
| | | <nut-form-item label="" class="bole-form-item" prop="userPassword" required> |
| | | <nut-input |
| | | v-model.trim="form.userPassword" |
| | | class="bole-input-text" |
| | | placeholder="请输入密码" |
| | | :type="isShowPassword ? 'text' : 'password'" |
| | | :key="isShowPassword ? 'text' : 'password'" |
| | | > |
| | | <template #right> |
| | | <div class="password-icon-wrapper" @click="isShowPassword = !isShowPassword"> |
| | | <Eye v-if="isShowPassword"></Eye> |
| | | <Marshalling v-else></Marshalling> |
| | | </div> |
| | | </template> |
| | | </nut-input> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | <LargeButton class="login-btn" @click="handleLogin" :loading="form.loading">登录</LargeButton> |
| | | <nut-button |
| | | v-if="isAccount" |
| | | type="primary" |
| | | class="authorization-page-wechat-wrapper" |
| | | @click="handleLoginByHasAccount" |
| | | > |
| | | <div class="authorization-page-wechat">手机号快速登录</div></nut-button |
| | | > |
| | | <template v-else> |
| | | <nut-form |
| | | class="verification-code-login-form" |
| | | ref="formRef" |
| | | :model-value="form" |
| | | :rules="rules" |
| | | > |
| | | <nut-form-item label="" class="bole-form-item" prop="userName" required> |
| | | <nut-input |
| | | v-model.trim="form.userName" |
| | | class="bole-input-text" |
| | | placeholder="请输入账号/手机号/邮箱" |
| | | type="text" |
| | | /> |
| | | </nut-form-item> |
| | | <nut-form-item label="" class="bole-form-item" prop="userPassword" required> |
| | | <nut-input |
| | | v-model.trim="form.userPassword" |
| | | class="bole-input-text" |
| | | placeholder="请输入密码" |
| | | :type="isShowPassword ? 'text' : 'password'" |
| | | :key="isShowPassword ? 'text' : 'password'" |
| | | > |
| | | <template #right> |
| | | <div class="password-icon-wrapper" @click="isShowPassword = !isShowPassword"> |
| | | <Eye v-if="isShowPassword"></Eye> |
| | | <Marshalling v-else></Marshalling> |
| | | </div> |
| | | </template> |
| | | </nut-input> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | <LargeButton class="login-btn" @click="handleLogin" :loading="form.loading">登录</LargeButton> |
| | | </template> |
| | | <!-- <div class="go-register-btn" @click="goRegister">立即注册</div> --> |
| | | </div> |
| | | </template> |
| | |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { Eye, Marshalling } from '@nutui/icons-vue-taro'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as authServices from '@12333/services/apiV2/auth'; |
| | | |
| | | defineOptions({ |
| | | name: 'AccountLoginForm', |
| | |
| | | const isShowPassword = ref(false); |
| | | |
| | | const formRef = ref(null); |
| | | const isAccount = ref(false); |
| | | const wxMiniAppUserLoginRes = ref<API.LoginCommandCallback>(); |
| | | |
| | | const form = reactive({ |
| | | loading: false, |
| | |
| | | userPassword: [{ required: true, message: '请输入密码' }], |
| | | }); |
| | | |
| | | async function handleLoginByHasAccount() { |
| | | try { |
| | | if (props.policyChecked) { |
| | | userStore.loginSuccess(wxMiniAppUserLoginRes.value); |
| | | Message.success('登录成功', { |
| | | onClosed: () => { |
| | | jump(); |
| | | }, |
| | | }); |
| | | } else { |
| | | noAccess(); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleLogin() { |
| | | try { |
| | | let loginRes = await Taro.login(); |
| | | if (props.policyChecked) { |
| | | const { valid } = await formRef.value.validate(); |
| | | if (valid) { |
| | |
| | | await userStore.loginByPassword({ |
| | | userName: form.userName, |
| | | password: form.userPassword, |
| | | code: loginRes.code, |
| | | }); |
| | | jump(); |
| | | } |
| | |
| | | url: RouterPath.registerForm, |
| | | }); |
| | | } |
| | | |
| | | onMounted(async () => { |
| | | try { |
| | | let loginRes = await Taro.login(); |
| | | const params: API.WxmpLoginCommand = { |
| | | code: loginRes.code, |
| | | type: AppLocalConfig.userType, |
| | | enterpriseType: AppLocalConfig.enterpriseType, |
| | | }; |
| | | wxMiniAppUserLoginRes.value = await authServices.wxmpLogin(params, { |
| | | skipErrorHandler: true, |
| | | }); |
| | | if (wxMiniAppUserLoginRes.value?.isBindPhoneNumber) { |
| | | isAccount.value = true; |
| | | } |
| | | } catch (error) { |
| | | if (error?.info?.errorCode == 's401') { |
| | | isAccount.value = false; |
| | | } |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | </ListItem> --> |
| | | <ListItem title="用户协议" @click="goMineUserPolicy"></ListItem> |
| | | <ListItem title="隐私政策" @click="goPrivacyPolicy"></ListItem> |
| | | <ListItem title="微信解绑" @click="handleUnbindWechat"></ListItem> |
| | | <ListItem title="退出登录" @click="handleLoginout"></ListItem> |
| | | </List> |
| | | </PageLayout> |
| | |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { useQueryClient } from '@tanstack/vue-query'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as authServices from '@12333/services/apiV2/auth'; |
| | | |
| | | defineOptions({ |
| | | name: 'setting', |
| | | }); |
| | | |
| | | const userStore = useUserStore(); |
| | | const { isBindWechat, updateUserInfo } = useUser(); |
| | | const queryClient = useQueryClient(); |
| | | |
| | | const userAccount = computed(() => { |
| | | return addStarForString(userStore?.userDetail?.userName, 4, 8); |
| | | return addStarForString(userStore?.userDetail?.name, 4, 8); |
| | | }); |
| | | |
| | | function goMineUserPolicy() { |
| | |
| | | queryClient.removeQueries(); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleUnbindWechat() { |
| | | try { |
| | | if (!isBindWechat) { |
| | | Message.error('您还没有绑定微信'); |
| | | return; |
| | | } |
| | | await Message.confirm({ message: '确定要解绑微信吗?' }); |
| | | let params: API.UnBindUserWxmpIdCommand = {}; |
| | | let res = await authServices.unBindUserWxmpId(params); |
| | | if (res) { |
| | | Message.success('解绑成功'); |
| | | updateUserInfo(); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | <template> |
| | | <div class="task-card-wrapper" :class="{ 'un-read': !isRead }"> |
| | | <div class="task-card-wrapper" :class="{ 'un-read': unRead }"> |
| | | <div class="task-card-title-wrapper"> |
| | | <div class="task-card-title">{{ name }}</div> |
| | | <slot name="title-right"> |
| | |
| | | createdTime?: string; |
| | | hireStatus?: EnumTaskUserHireStatus; |
| | | |
| | | isRead?: boolean; |
| | | unRead?: boolean; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | showActions: true, |
| | | |
| | | isRead: true, |
| | | unRead: false, |
| | | }); |
| | | |
| | | const emit = defineEmits<{ |
| | |
| | | </div> |
| | | </div> |
| | | </Cell> |
| | | <Cell |
| | | title="谢绝原因" |
| | | v-if="detail?.hireRemark && detail.hireStatus === EnumTaskUserHireStatus.Refuse" |
| | | > |
| | | <div class="safe-cell-content">{{ detail?.hireRemark ?? '' }}</div> |
| | | </Cell> |
| | | <Cell :show-title="false"> |
| | | <CellChunk title="福利信息"> |
| | | <div class="taskDetail-welfare-list"> |
| | |
| | | EnumSettlementCycleText, |
| | | EnumTaskReleaseStatus, |
| | | BillingMethodEnumUnit, |
| | | EnumTaskUserHireStatus, |
| | | } from '@12333/constants'; |
| | | import { TaskUtils, toThousand, setOSSLink, Message } from '@12333/utils'; |
| | | import Taro from '@tarojs/taro'; |
| | |
| | | Real = 100, |
| | | } |
| | | |
| | | /** 已读场景 */ |
| | | export enum EnumReadScene { |
| | | /**C端人员 */ |
| | | TaskUserApplyForPersonal = 0, |
| | | /**C端人员 */ |
| | | TaskUserHirePassForPersonal = 1, |
| | | /**C端人员 */ |
| | | TaskUserArrangePassForPersonal = 2, |
| | | } |
| | | |
| | | /** 实名通道 */ |
| | | export enum EnumRealAccess { |
| | | /**上上签 */ |
| | |
| | | CommonServerSmsUtils = 10, |
| | | /**配置 */ |
| | | CommonServerSettings = 11, |
| | | /**已读 */ |
| | | CommonServerReadRecord = 12, |
| | | /**用户认证 */ |
| | | UserServerAuth = 12, |
| | | UserServerAuth = 13, |
| | | /**用户菜单 */ |
| | | UserServerMenu = 13, |
| | | UserServerMenu = 14, |
| | | /**用户资源 */ |
| | | UserServerResource = 14, |
| | | UserServerResource = 15, |
| | | /**用户角色 */ |
| | | UserServerRole = 15, |
| | | UserServerRole = 16, |
| | | /**用户信息 */ |
| | | UserServerUser = 16, |
| | | UserServerUser = 17, |
| | | /**用户钱包 */ |
| | | UserServerUserWallet = 17, |
| | | UserServerUserWallet = 18, |
| | | /**电子签 */ |
| | | UserServerElectronSign = 18, |
| | | UserServerElectronSign = 19, |
| | | /**用户简历 */ |
| | | UserServerUserResume = 19, |
| | | UserServerUserResume = 20, |
| | | /**企业信息 */ |
| | | UserServerEnterprise = 20, |
| | | UserServerEnterprise = 21, |
| | | /**企业钱包 */ |
| | | UserServerEnterpriseWallet = 21, |
| | | UserServerEnterpriseWallet = 22, |
| | | /**企业合作钱包 */ |
| | | UserServerEnterpriseCooperationWallet = 22, |
| | | UserServerEnterpriseCooperationWallet = 23, |
| | | /**灵工信息 */ |
| | | UserServerEnterpriseEmployee = 23, |
| | | UserServerEnterpriseEmployee = 24, |
| | | /**电子签 */ |
| | | ElectronSignServerElectronSign = 24, |
| | | ElectronSignServerElectronSign = 25, |
| | | /**短信 */ |
| | | ToolServerSms = 25, |
| | | ToolServerSms = 26, |
| | | /**小程序 */ |
| | | ToolServerWxmp = 26, |
| | | ToolServerWxmp = 27, |
| | | } |
| | | |
| | | /** 资源请求方式 */ |
| | |
| | | Pass = 20, |
| | | /**已谢绝 */ |
| | | Refuse = 30, |
| | | /**已取消 */ |
| | | Cancel = 40, |
| | | } |
| | | |
| | | /** 任务用户签约状态 */ |
| | |
| | | VERIFY_FAIL = 1, |
| | | /**验证中,商户可发起提现尝试 */ |
| | | VERIFYING = 2, |
| | | } |
| | | |
| | | /** 微信小程序订阅消息模板 */ |
| | | export enum EnumWxmpSubscribMessageTemplate { |
| | | /**支付成功提醒 结算完成后向承揽端管理员推送 */ |
| | | SettlementCompletedToSupplier = 0, |
| | | /**报酬结算审核结果通知 甲方结算确认后向承揽端管理员推送 */ |
| | | SettlementAuditCompletedToSupplier = 1, |
| | | /**工资发放通知 结算完成后向C端人员通知 */ |
| | | SettlementReceiveCompletedToUser = 2, |
| | | /**报名录用结果通知 被录用后向C端人员通知 */ |
| | | HireCompletedToUser = 3, |
| | | /**排班成功通知 排班后向C端人员通知 */ |
| | | ArrangeCompletedToUser = 4, |
| | | /**测试 */ |
| | | Test = 5, |
| | | } |
| | | |
| | | /** 我的报名分页列表-状态 */ |
| New file |
| | |
| | | import { computed, reactive } from 'vue'; |
| | | import { cloneDeep } from 'lodash'; |
| | | |
| | | type UseDialogOptions = { |
| | | onConfirm?: (...args: any) => Promise<any>; |
| | | closeAfterConfirm?: boolean; |
| | | }; |
| | | |
| | | export function useDialog(options: UseDialogOptions = {}) { |
| | | const { onConfirm, closeAfterConfirm = true } = options; |
| | | |
| | | const dialogState = reactive({ |
| | | dialogVisible: false, |
| | | }); |
| | | |
| | | function onUpdateModelValue(value: boolean) { |
| | | dialogState.dialogVisible = value; |
| | | } |
| | | |
| | | async function handleConfirm(...args: any) { |
| | | await onConfirm?.(...args); |
| | | if (closeAfterConfirm) { |
| | | dialogState.dialogVisible = false; |
| | | } |
| | | } |
| | | |
| | | const dialogProps = computed(() => ({ |
| | | modelValue: dialogState.dialogVisible, |
| | | ['onUpdate:modelValue']: onUpdateModelValue, |
| | | onOnConfirm: handleConfirm, |
| | | })); |
| | | |
| | | return { |
| | | dialogProps, |
| | | dialogState, |
| | | }; |
| | | } |
| | | |
| | | export type FormParams = {}; |
| | | |
| | | type UseFormDialogOptions<TFormParams extends FormParams> = UseDialogOptions & { |
| | | defaultFormParams: TFormParams; |
| | | }; |
| | | |
| | | export function useFormDialog<TFormParams extends FormParams>( |
| | | options: UseFormDialogOptions<TFormParams> |
| | | ) { |
| | | const { onConfirm, closeAfterConfirm = true, defaultFormParams } = options; |
| | | const { dialogProps, dialogState } = useDialog({ onConfirm, closeAfterConfirm }); |
| | | |
| | | const editForm = reactive(cloneDeep(defaultFormParams)); |
| | | |
| | | function handleAdd(extraParams: Partial<TFormParams> = {}) { |
| | | Object.assign(editForm, cloneDeep(defaultFormParams), { |
| | | ...extraParams, |
| | | }); |
| | | dialogState.dialogVisible = true; |
| | | } |
| | | |
| | | function handleEdit(data: Omit<TFormParams, 'title'>) { |
| | | Object.assign(editForm, cloneDeep(defaultFormParams), { |
| | | ...data, |
| | | }); |
| | | dialogState.dialogVisible = true; |
| | | } |
| | | |
| | | function onUpdateForm(value: TFormParams) { |
| | | Object.assign(editForm, value); |
| | | } |
| | | |
| | | const formDialogProps = computed(() => ({ |
| | | ...dialogProps.value, |
| | | form: editForm, |
| | | ['onUpdate:form']: onUpdateForm, |
| | | })); |
| | | |
| | | return { |
| | | dialogProps: formDialogProps, |
| | | dialogState, |
| | | editForm, |
| | | handleAdd, |
| | | handleEdit, |
| | | }; |
| | | } |
| | |
| | | export * from './taskUser'; |
| | | export * from './user'; |
| | | export * from './payrollChange'; |
| | | export * from './dialog'; |
| | |
| | | EnumTaskStatus, |
| | | EnumUserGender, |
| | | EnumTaskUserApplyStatus, |
| | | EnumReadScene, |
| | | } from '@12333/constants'; |
| | | import _ from 'lodash'; |
| | | import { OrderUtils, trim } from '@12333/utils'; |
| | |
| | | |
| | | type UseTaskInfoOptions = { |
| | | id: MaybeRef<string>; |
| | | readScene?: string | EnumReadScene; |
| | | onSuccess?: (data: API.GetTaskInfoQueryResult) => any; |
| | | }; |
| | | |
| | | export function useTaskInfo({ id, onSuccess }: UseTaskInfoOptions) { |
| | | export function useTaskInfo({ id, readScene, onSuccess }: UseTaskInfoOptions) { |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['taskServices/getTaskInfo', id], |
| | | queryKey: ['taskServices/getTaskInfo', id, readScene], |
| | | queryFn: async () => { |
| | | return await taskServices.getTaskInfo( |
| | | { id: unref(id) }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | const params: API.APIgetTaskInfoParams = { |
| | | id: unref(id), |
| | | }; |
| | | if (!!readScene) { |
| | | params.readScene = Number(readScene); |
| | | } |
| | | return await taskServices.getTaskInfo(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | placeholderData: () => ({} as API.GetTaskInfoQueryResult), |
| | | onSuccess(data) { |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 解绑微信小程序快捷登录 POST /api/user/auth/unBindUserWxmpId */ |
| | | export async function unBindUserWxmpId( |
| | | body: API.UnBindUserWxmpIdCommand, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<string>('/api/user/auth/unBindUserWxmpId', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 发送更换手机号短信 POST /api/user/auth/updatePhoneNumberVerifyCode */ |
| | | export async function updatePhoneNumberVerifyCode( |
| | | body: API.UpdatePhoneNumberVerifyCodeCommand, |
| | |
| | | // @ts-ignore |
| | | import { request } from '@/utils/request'; |
| | | |
| | | /** 同步数据库 POST /api/common/syncDatabase/sendWxmpSubscribMessage */ |
| | | export async function sendWxmpSubscribMessage( |
| | | body: API.SendWxmpSubscribMessageCommand, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<boolean>('/api/common/syncDatabase/sendWxmpSubscribMessage', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 同步数据库 POST /api/common/syncDatabase/syncDatabase */ |
| | | export async function syncDatabase(body: API.SyncDatabaseCommand, options?: API.RequestConfig) { |
| | | return request<number>('/api/common/syncDatabase/syncDatabase', { |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 查询发放明细报表分页列表数据 POST /api/flexjob/task/getTaskSettlementReleaseReports */ |
| | | export async function getTaskSettlementReleaseReports( |
| | | body: API.GetTaskSettlementReleaseReportsQuery, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<API.GetTaskSettlementReleaseReportsQueryResult>( |
| | | '/api/flexjob/task/getTaskSettlementReleaseReports', |
| | | { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | } |
| | | ); |
| | | } |
| | | |
| | | /** 导入结算名单 POST /api/flexjob/task/importTaskSettlementOrderRosters */ |
| | | export async function importTaskSettlementOrderRosters( |
| | | body: API.ImportTaskSettlementOrderRostersCommand, |
| | |
| | | interface APIgetTaskInfoParams { |
| | | /** Id */ |
| | | id?: string; |
| | | /** 场景 */ |
| | | readScene?: EnumReadScene; |
| | | } |
| | | |
| | | interface APIgetTaskSelectParams { |
| | |
| | | Real = 100, |
| | | } |
| | | |
| | | enum EnumReadScene { |
| | | /**C端人员 */ |
| | | TaskUserApplyForPersonal = 0, |
| | | /**C端人员 */ |
| | | TaskUserHirePassForPersonal = 1, |
| | | /**C端人员 */ |
| | | TaskUserArrangePassForPersonal = 2, |
| | | } |
| | | |
| | | enum EnumRealAccess { |
| | | /**上上签 */ |
| | | BestSign = 10, |
| | |
| | | CommonServerSmsUtils = 10, |
| | | /**配置 */ |
| | | CommonServerSettings = 11, |
| | | /**已读 */ |
| | | CommonServerReadRecord = 12, |
| | | /**用户认证 */ |
| | | UserServerAuth = 12, |
| | | UserServerAuth = 13, |
| | | /**用户菜单 */ |
| | | UserServerMenu = 13, |
| | | UserServerMenu = 14, |
| | | /**用户资源 */ |
| | | UserServerResource = 14, |
| | | UserServerResource = 15, |
| | | /**用户角色 */ |
| | | UserServerRole = 15, |
| | | UserServerRole = 16, |
| | | /**用户信息 */ |
| | | UserServerUser = 16, |
| | | UserServerUser = 17, |
| | | /**用户钱包 */ |
| | | UserServerUserWallet = 17, |
| | | UserServerUserWallet = 18, |
| | | /**电子签 */ |
| | | UserServerElectronSign = 18, |
| | | UserServerElectronSign = 19, |
| | | /**用户简历 */ |
| | | UserServerUserResume = 19, |
| | | UserServerUserResume = 20, |
| | | /**企业信息 */ |
| | | UserServerEnterprise = 20, |
| | | UserServerEnterprise = 21, |
| | | /**企业钱包 */ |
| | | UserServerEnterpriseWallet = 21, |
| | | UserServerEnterpriseWallet = 22, |
| | | /**企业合作钱包 */ |
| | | UserServerEnterpriseCooperationWallet = 22, |
| | | UserServerEnterpriseCooperationWallet = 23, |
| | | /**灵工信息 */ |
| | | UserServerEnterpriseEmployee = 23, |
| | | UserServerEnterpriseEmployee = 24, |
| | | /**电子签 */ |
| | | ElectronSignServerElectronSign = 24, |
| | | ElectronSignServerElectronSign = 25, |
| | | /**短信 */ |
| | | ToolServerSms = 25, |
| | | ToolServerSms = 26, |
| | | /**小程序 */ |
| | | ToolServerWxmp = 26, |
| | | ToolServerWxmp = 27, |
| | | } |
| | | |
| | | enum EnumResourceMethod { |
| | |
| | | Pass = 20, |
| | | /**已谢绝 */ |
| | | Refuse = 30, |
| | | /**已取消 */ |
| | | Cancel = 40, |
| | | } |
| | | |
| | | enum EnumTaskUserSignContractStatus { |
| | |
| | | VERIFY_FAIL = 1, |
| | | /**验证中,商户可发起提现尝试 */ |
| | | VERIFYING = 2, |
| | | } |
| | | |
| | | enum EnumWxmpSubscribMessageTemplate { |
| | | /**支付成功提醒 结算完成后向承揽端管理员推送 */ |
| | | SettlementCompletedToSupplier = 0, |
| | | /**报酬结算审核结果通知 甲方结算确认后向承揽端管理员推送 */ |
| | | SettlementAuditCompletedToSupplier = 1, |
| | | /**工资发放通知 结算完成后向C端人员通知 */ |
| | | SettlementReceiveCompletedToUser = 2, |
| | | /**报名录用结果通知 被录用后向C端人员通知 */ |
| | | HireCompletedToUser = 3, |
| | | /**排班成功通知 排班后向C端人员通知 */ |
| | | ArrangeCompletedToUser = 4, |
| | | /**测试 */ |
| | | Test = 5, |
| | | } |
| | | |
| | | interface ExportEnterpriseBalanceDetailsCommand { |
| | |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultGetTaskSettlementReleaseReportsQueryResult { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | | /** 状态码 */ |
| | | code?: number; |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: GetTaskSettlementReleaseReportsQueryResult; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | | msg?: any; |
| | | /** 附加数据 */ |
| | | extras?: any; |
| | | /** 时间戳 */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultGetTaskUserHireStatusQueryResult { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | |
| | | /** 最近验收时间 */ |
| | | lastCheckReceiveTime?: string; |
| | | checkedStatus?: EnumGetCheckReceiveTasksQueryResultItemCheckStatus; |
| | | /** 人员数量 */ |
| | | arrangeUserCount?: number; |
| | | } |
| | | |
| | | interface GetCheckReceiveTaskUserSubmitCheckHistoriesQuery { |
| | |
| | | collectedUserCount?: number; |
| | | /** 联系记录 */ |
| | | contactedRecordCount?: number; |
| | | /** 绑定微信快捷登录 */ |
| | | bindWxmpId?: boolean; |
| | | } |
| | | |
| | | interface GetEnterpriseQueryResult { |
| | |
| | | /** 任务地点名称 */ |
| | | addressName?: string; |
| | | status?: GetPersonalApplyTaskInfosQueryStatus; |
| | | /** 未读 */ |
| | | unRead?: boolean; |
| | | } |
| | | |
| | | enum GetPersonalApplyTaskInfosQueryStatus { |
| | |
| | | /** 任务地点名称 */ |
| | | addressName?: string; |
| | | status?: GetPersonalHireTaskInfosQueryStatus; |
| | | /** 未读 */ |
| | | unRead?: boolean; |
| | | } |
| | | |
| | | enum GetPersonalHireTaskInfosQueryStatus { |
| | |
| | | code?: string; |
| | | /** 任务名称 */ |
| | | taskName?: string; |
| | | /** 任务单号 */ |
| | | taskCode?: string; |
| | | /** 企业名称 */ |
| | | enterpriseName?: string; |
| | | /** 结算日期 */ |
| | |
| | | status?: EnumTaskStatus; |
| | | releaseStatus?: EnumTaskReleaseStatus; |
| | | hireStatus?: EnumTaskUserHireStatus; |
| | | /** 录用备注 */ |
| | | hireRemark?: string; |
| | | /** 灵工Id */ |
| | | enterpriseEmployeeId?: string; |
| | | applyButton?: GetTaskInfoQueryResultApplyButton; |
| | |
| | | code?: string; |
| | | /** 任务名称 */ |
| | | name?: string; |
| | | } |
| | | |
| | | interface GetTaskSettlementReleaseReportsQuery { |
| | | /** 开始日期 */ |
| | | startMonth?: string; |
| | | /** 结束日期 */ |
| | | endMonth?: string; |
| | | pageModel?: PagedListQueryPageModel; |
| | | } |
| | | |
| | | interface GetTaskSettlementReleaseReportsQueryResult { |
| | | pageModel?: PagedListQueryResultPageModel; |
| | | /** 数据 */ |
| | | data?: GetTaskSettlementReleaseReportsQueryResultItem[]; |
| | | } |
| | | |
| | | interface GetTaskSettlementReleaseReportsQueryResultItem { |
| | | /** 日期 */ |
| | | month?: string; |
| | | /** 发放金额 */ |
| | | amount?: number; |
| | | /** 发放人数 */ |
| | | peopleCount?: number; |
| | | /** 生成日期 */ |
| | | createdTime?: string; |
| | | /** 汇总表格 */ |
| | | url?: string; |
| | | } |
| | | |
| | | interface GetTaskUserHireStatusQueryResult { |
| | |
| | | } |
| | | |
| | | interface PasswordLoginCommand { |
| | | /** 用户登录凭证 */ |
| | | code?: string; |
| | | /** 账号 */ |
| | | userName: string; |
| | | /** 密码 */ |
| | |
| | | phoneNumber: string; |
| | | } |
| | | |
| | | interface SendWxmpSubscribMessageCommand { |
| | | /** 小程序编号 */ |
| | | wxmpCode: string; |
| | | template: EnumWxmpSubscribMessageTemplate; |
| | | /** 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转 */ |
| | | page?: string; |
| | | /** 接收者(用户)的 openid */ |
| | | touser: string; |
| | | /** 模板内容,格式形如{ "phrase3": { "value": "审核通过" }, "name1": { "value": "订阅" }, "date2": { "value": "2019-12-25 09:42" } } */ |
| | | data: any; |
| | | } |
| | | |
| | | interface SetDictionaryDataIsDisabledCommand { |
| | | ids?: string[]; |
| | | /** 是否已禁用 */ |
| | |
| | | /** 任务人员Id */ |
| | | id?: string; |
| | | hireStatus?: EnumTaskUserHireStatus; |
| | | /** 录用备注 */ |
| | | hireRemark?: string; |
| | | } |
| | | |
| | | enum SettlementReceiveStatus { |
| | |
| | | |
| | | type TestEventCommand = Record<string, any>; |
| | | |
| | | type UnBindUserWxmpIdCommand = Record<string, any>; |
| | | |
| | | interface UpdateEnterpriseWeChatPayWalletBankAccountInfoCommand { |
| | | /** 企业Id */ |
| | | enterpriseId?: string; |