Merge branch 'dev-1.3.0.4' of http://120.26.58.240:8888/r/flexJobMiniApp into dev-1.3.0.4
| | |
| | | "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", |
| | | "scene": null, |
| | | "launchMode": "default" |
| | | }, |
| | | { |
| | | "name": "待验收-验收详情", |
| | | "pathName": "subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail", |
| | | "query": "id=546401cc-c148-47d0-c647-08de1e75af01&date=2025-11-28&taskInfoId=5a22c18b-0b49-4540-6658-08de1da80d7c", |
| | |
| | | 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) { |
| | |
| | | "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", |
| | |
| | | </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'; |
| 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'; |