|  |  |  | 
|---|
|  |  |  | <ProForm :model="form" ref="productFormRef" label-width="110px" :is-read="isDetail"> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 label="任务名称:" prop="name"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="任务名称:" | 
|---|
|  |  |  | prop="name" | 
|---|
|  |  |  | :check-rules="[{ message: '请输入任务名称' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormText v-model.trim="form.name" placeholder="请输入任务名称" /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormItemV2 label="服务费:" prop="salaryType"> | 
|---|
|  |  |  | <RadioWithExtra | 
|---|
|  |  |  | v-model="form.salaryType" | 
|---|
|  |  |  | :value-enum="[ | 
|---|
|  |  |  | { label: '按月', value: 1 }, | 
|---|
|  |  |  | { label: '按日', value: 2 }, | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="服务费:" | 
|---|
|  |  |  | prop="billingMethod" | 
|---|
|  |  |  | :check-rules="[ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | validator: (rule, value, callback) => { | 
|---|
|  |  |  | if (!form.billingMethod) { | 
|---|
|  |  |  | callback(new Error('请选择服务费类型')); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!form.serviceFee) { | 
|---|
|  |  |  | callback(new Error('请输入服务费')); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | callback(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | ]" | 
|---|
|  |  |  | :showExtra="true" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template #extra> | 
|---|
|  |  |  | <RadioWithExtra | 
|---|
|  |  |  | v-model="form.billingMethod" | 
|---|
|  |  |  | :value-enum="EnumBillingMethodText" | 
|---|
|  |  |  | :showExtra="true" | 
|---|
|  |  |  | :button-style="false" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template #extra> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | v-model="form.serviceFee" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | :min="0" | 
|---|
|  |  |  | :max="999999999999" | 
|---|
|  |  |  | :unit="EnumBillingMethodUnitText[form.billingMethod]" | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </RadioWithExtra> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <template v-if="form.billingMethod === EnumBillingMethod.Hour"> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 label="核定工时:" prop="verifyWorkHours"> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | v-model="form.verifyWorkHours" | 
|---|
|  |  |  | placeholder="请输入核定工时" | 
|---|
|  |  |  | :min="0" | 
|---|
|  |  |  | :max="999" | 
|---|
|  |  |  | v-model="form.name" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | :unit="form.salaryType === 1 ? '元/月' : '元/天'" | 
|---|
|  |  |  | :max="999999999999" | 
|---|
|  |  |  | unit="小时/天" | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </RadioWithExtra> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 label="超时服务费:" prop="timeoutServiceFee"> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | v-model="form.timeoutServiceFee" | 
|---|
|  |  |  | placeholder="请输入超时服务费" | 
|---|
|  |  |  | :min="0" | 
|---|
|  |  |  | :max="999999999999" | 
|---|
|  |  |  | unit="元/小时" | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="结算方式:" | 
|---|
|  |  |  | prop="settlementCycle" | 
|---|
|  |  |  | :check-rules="[{ message: '请选择结算方式' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormRadio | 
|---|
|  |  |  | v-model="form.settlementCycle" | 
|---|
|  |  |  | :value-enum="EnumSettlementCycleText" | 
|---|
|  |  |  | :button-style="false" | 
|---|
|  |  |  | @change="handleSettlementCycleChange" | 
|---|
|  |  |  | ></ProFormRadio> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12" class="settlement-cycle-date-form-item"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | v-if="form.settlementCycle !== EnumSettlementCycle.Day" | 
|---|
|  |  |  | label="结算日期:" | 
|---|
|  |  |  | prop="settlementCycle" | 
|---|
|  |  |  | :check-rules="[{ message: '请选择结算日期' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | {{ EnumSettlementCycleDateText[form.settlementCycle] }} | 
|---|
|  |  |  | <ProFormSelect | 
|---|
|  |  |  | v-model="form.settlementDate" | 
|---|
|  |  |  | :value-enum="settlementDateList" | 
|---|
|  |  |  | :button-style="false" | 
|---|
|  |  |  | ></ProFormSelect> | 
|---|
|  |  |  | {{ '结算' }} | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 label="结算方式:" prop="salaryType"> | 
|---|
|  |  |  | <ProFormItemV2 label="福利:" prop="benefits"> | 
|---|
|  |  |  | <el-checkbox | 
|---|
|  |  |  | v-if="!isDetail" | 
|---|
|  |  |  | v-model="state.checkBenefitsAll" | 
|---|
|  |  |  | style="margin-right: 30px" | 
|---|
|  |  |  | :indeterminate="state.isBenefitsIndeterminate" | 
|---|
|  |  |  | @change="handleCheckBenefitsAllChange" | 
|---|
|  |  |  | >全选</el-checkbox | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormCheckbox | 
|---|
|  |  |  | v-model="form.benefits" | 
|---|
|  |  |  | :value-enum="welfareList" | 
|---|
|  |  |  | @change="handleCheckedBenefitsServicesChange" | 
|---|
|  |  |  | ></ProFormCheckbox> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="年龄范围:" | 
|---|
|  |  |  | prop="ageRange" | 
|---|
|  |  |  | class="form-age-range" | 
|---|
|  |  |  | :check-rules="[ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | validator: (rule, value, callback) => { | 
|---|
|  |  |  | if (!form.ageMinLimit) { | 
|---|
|  |  |  | callback(new Error('请输入年龄要求')); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!form.ageMaxLimit) { | 
|---|
|  |  |  | callback(new Error('请输入年龄要求')); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Number(form.ageMaxLimit) <= Number(form.ageMinLimit)) { | 
|---|
|  |  |  | callback(new Error('最大年龄不能小于最小年龄')); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | callback(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | ]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | :min="16" | 
|---|
|  |  |  | v-model="form.ageMinLimit" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | <div class="form-input-separator">至</div> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | :min="16" | 
|---|
|  |  |  | v-model="form.ageMaxLimit" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | 岁 | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="性别要求:" | 
|---|
|  |  |  | prop="genderLimit" | 
|---|
|  |  |  | :check-rules="[{ message: '请选择性别要求' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormRadio | 
|---|
|  |  |  | v-model="form.salaryType" | 
|---|
|  |  |  | :value-enum="[{ label: '是', value: 1 }]" | 
|---|
|  |  |  | v-model="form.genderLimit" | 
|---|
|  |  |  | :value-enum="EnumUserGenderTextForEdit" | 
|---|
|  |  |  | ></ProFormRadio> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 label="年龄要求:" prop="ageRange"> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | :min="0" | 
|---|
|  |  |  | v-model="form.ageStart" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | disabled | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | <div class="form-input-separator">至</div> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | :min="0" | 
|---|
|  |  |  | v-model="form.ageEnd" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | disabled | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | <ProFormItemV2 label="资格证书:" prop="credentialLimits"> | 
|---|
|  |  |  | <el-checkbox | 
|---|
|  |  |  | v-if="!isDetail" | 
|---|
|  |  |  | v-model="state.checkCertificatesAll" | 
|---|
|  |  |  | style="margin-right: 30px" | 
|---|
|  |  |  | :indeterminate="state.isCertificatesIndeterminate" | 
|---|
|  |  |  | @change="handleCheckCertificatesAllChange" | 
|---|
|  |  |  | >全选</el-checkbox | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormCheckbox | 
|---|
|  |  |  | v-model="form.credentialLimits" | 
|---|
|  |  |  | :value-enum="certificateTypeList" | 
|---|
|  |  |  | @change="handleCheckedCertificatesServicesChange" | 
|---|
|  |  |  | ></ProFormCheckbox> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 label="性别要求:" prop="sexRequirement" required> | 
|---|
|  |  |  | <RadioWithExtra | 
|---|
|  |  |  | v-model="form.sexRequirement" | 
|---|
|  |  |  | :value-enum="[ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | label: '不限', | 
|---|
|  |  |  | value: 1, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | ]" | 
|---|
|  |  |  | :showExtra="true" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template #extra> | 
|---|
|  |  |  | <div class="form-input-separator">男性</div> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | :min="0" | 
|---|
|  |  |  | v-model="form.manNumber" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | disabled | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | <div class="form-input-separator">女性</div> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | :min="0" | 
|---|
|  |  |  | v-model="form.womanNumber" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | disabled | 
|---|
|  |  |  | ></ProFormInputNumber> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </RadioWithExtra> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="任务地点:" | 
|---|
|  |  |  | prop="weMapInfo" | 
|---|
|  |  |  | :check-rules="[{ message: '请选择任务地点', type: 'weMap' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <WeMap v-if="!isDetail" v-model="form.weMapInfo" /> | 
|---|
|  |  |  | <div v-else> | 
|---|
|  |  |  | {{ | 
|---|
|  |  |  | `${form.weMapInfo.provinceName ?? ''}${form.weMapInfo.cityName ?? ''}${ | 
|---|
|  |  |  | form.weMapInfo.addressName ?? '' | 
|---|
|  |  |  | }` | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 label="地点说明:" prop="addressDetail"> | 
|---|
|  |  |  | <ProFormText v-model.trim="form.addressDetail" placeholder="请输入地点说明" /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 label="任务描述:" prop="description"> | 
|---|
|  |  |  | <ProFormTextArea | 
|---|
|  |  |  | :rows="4" | 
|---|
|  |  |  | v-model.trim="form.description" | 
|---|
|  |  |  | placeholder="请输入任务描述" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="任务时间:" | 
|---|
|  |  |  | prop="time" | 
|---|
|  |  |  | :check-rules="[{ message: '请选择任务时间', type: 'array' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormDatePicker | 
|---|
|  |  |  | v-model="form.time" | 
|---|
|  |  |  | type="daterange" | 
|---|
|  |  |  | range-separator="至" | 
|---|
|  |  |  | start-placeholder="开始日期" | 
|---|
|  |  |  | end-placeholder="结束日期" | 
|---|
|  |  |  | :disabled-date="disabledDate" | 
|---|
|  |  |  | ></ProFormDatePicker> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="报名时间:" | 
|---|
|  |  |  | prop="applyTime" | 
|---|
|  |  |  | :check-rules="[{ message: '请选择报名时间', type: 'array' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormDatePicker | 
|---|
|  |  |  | v-model="form.applyTime" | 
|---|
|  |  |  | type="daterange" | 
|---|
|  |  |  | range-separator="至" | 
|---|
|  |  |  | start-placeholder="开始日期" | 
|---|
|  |  |  | end-placeholder="结束日期" | 
|---|
|  |  |  | :disabled-date="disabledapplyDate" | 
|---|
|  |  |  | ></ProFormDatePicker> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="12"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="验收方式:" | 
|---|
|  |  |  | prop="checkReceiveMethod" | 
|---|
|  |  |  | :check-rules="[{ message: '请选择验收方式' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormRadio | 
|---|
|  |  |  | v-model="form.checkReceiveMethod" | 
|---|
|  |  |  | :value-enum="EnumTaskCheckReceiveMethodText" | 
|---|
|  |  |  | :button-style="false" | 
|---|
|  |  |  | ></ProFormRadio> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | 
|---|
|  |  |  | ProFormText, | 
|---|
|  |  |  | ProFormInputNumber, | 
|---|
|  |  |  | ProFormRadio, | 
|---|
|  |  |  | ProFormDatePicker, | 
|---|
|  |  |  | ProFormCheckbox, | 
|---|
|  |  |  | ProFormSelect, | 
|---|
|  |  |  | ProFormTextArea, | 
|---|
|  |  |  | } from '@bole-core/components'; | 
|---|
|  |  |  | import { FormInstance } from 'element-plus'; | 
|---|
|  |  |  | import { FormInstance, ModelValueType } from 'element-plus'; | 
|---|
|  |  |  | import { Message } from '@bole-core/core'; | 
|---|
|  |  |  | import { useQuery } from '@tanstack/vue-query'; | 
|---|
|  |  |  | import { useGlobalEventContext, useRouteView } from '@/hooks'; | 
|---|
|  |  |  | import * as flexTaskServices from '@/services/api/FlexTask'; | 
|---|
|  |  |  | import * as taskServices from '@/services/api/task'; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | EnumUserGenderTextForEdit, | 
|---|
|  |  |  | EnumBillingMethod, | 
|---|
|  |  |  | EnumBillingMethodText, | 
|---|
|  |  |  | EnumBillingMethodUnitText, | 
|---|
|  |  |  | EnumSettlementCycleText, | 
|---|
|  |  |  | EnumSettlementCycleDateText, | 
|---|
|  |  |  | EnumSettlementCycleDateMonthArray, | 
|---|
|  |  |  | EnumSettlementCycleDateWeekArray, | 
|---|
|  |  |  | EnumSettlementCycle, | 
|---|
|  |  |  | EnumTaskCheckReceiveMethodText, | 
|---|
|  |  |  | } from '@/constants'; | 
|---|
|  |  |  | import { format, FormValidator } from '@/utils'; | 
|---|
|  |  |  | import dayjs from 'dayjs'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'AddOrEditEmploymentView', | 
|---|
|  |  |  | 
|---|
|  |  |  | const id = route.params.id as string; | 
|---|
|  |  |  | const isEdit = !!id; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function disabledDate(time: Date) { | 
|---|
|  |  |  | return dayjs(time).isBefore(dayjs(), 'day'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function disabledapplyDate(time: Date) { | 
|---|
|  |  |  | return dayjs(time).isBefore(form.time[0], 'day'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const eventContext = useGlobalEventContext(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { closeViewPush } = useRouteView(); | 
|---|
|  |  |  | const { dictionaryDataList: welfareList } = useDictionaryDataSelect({ | 
|---|
|  |  |  | categoryCode: CategoryCode.Welfare, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | const { dictionaryDataList: certificateTypeList } = useDictionaryDataSelect({ | 
|---|
|  |  |  | categoryCode: CategoryCode.CertificateType, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const settlementDateList = computed(() => { | 
|---|
|  |  |  | if (form.settlementCycle === EnumSettlementCycle.Month) { | 
|---|
|  |  |  | return EnumSettlementCycleDateMonthArray; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (form.settlementCycle === EnumSettlementCycle.Week) { | 
|---|
|  |  |  | return EnumSettlementCycleDateWeekArray; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return []; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const state = reactive({ | 
|---|
|  |  |  | checkBenefitsAll: false, | 
|---|
|  |  |  | isBenefitsIndeterminate: false, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | checkCertificatesAll: false, | 
|---|
|  |  |  | isCertificatesIndeterminate: false, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const form = reactive({ | 
|---|
|  |  |  | name: '', | 
|---|
|  |  |  | salaryType: 1, | 
|---|
|  |  |  | ageStart: 0, | 
|---|
|  |  |  | ageEnd: 0, | 
|---|
|  |  |  | sexRequirement: 1, | 
|---|
|  |  |  | manNumber: 0, | 
|---|
|  |  |  | womanNumber: 0, | 
|---|
|  |  |  | billingMethod: EnumBillingMethod.Day, | 
|---|
|  |  |  | serviceFee: null, | 
|---|
|  |  |  | settlementCycle: EnumSettlementCycle.Day, | 
|---|
|  |  |  | settlementDate: null as number, | 
|---|
|  |  |  | benefits: [] as string[], | 
|---|
|  |  |  | ageMinLimit: null, | 
|---|
|  |  |  | ageMaxLimit: null, | 
|---|
|  |  |  | genderLimit: 0 as any as EnumUserGender, | 
|---|
|  |  |  | credentialLimits: [] as string[], | 
|---|
|  |  |  | time: [] as unknown as ModelValueType, | 
|---|
|  |  |  | weMapInfo: {} as WeMapModel, | 
|---|
|  |  |  | addressDetail: '', | 
|---|
|  |  |  | verifyWorkHours: null as number, | 
|---|
|  |  |  | timeoutServiceFee: null as number, | 
|---|
|  |  |  | description: '', | 
|---|
|  |  |  | checkReceiveMethod: '' as any as EnumTaskCheckReceiveMethod, | 
|---|
|  |  |  | applyTime: [] as unknown as ModelValueType, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { isLoading } = useQuery({ | 
|---|
|  |  |  | queryKey: ['flexTaskServices/getFlexTaskDetail', id], | 
|---|
|  |  |  | queryKey: ['taskServices/getTaskInfo', id], | 
|---|
|  |  |  | queryFn: async () => { | 
|---|
|  |  |  | return await flexTaskServices.getFlexTaskDetail( | 
|---|
|  |  |  | return await taskServices.getTaskInfo( | 
|---|
|  |  |  | { id: id }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | showLoading: false, | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | placeholderData: () => ({} as API.GetTaskInfoQueryResult), | 
|---|
|  |  |  | onSuccess(data) { | 
|---|
|  |  |  | form.name = data.taskName; | 
|---|
|  |  |  | form.name = data.name; | 
|---|
|  |  |  | form.billingMethod = data.billingMethod; | 
|---|
|  |  |  | form.serviceFee = data.serviceFee; | 
|---|
|  |  |  | form.settlementCycle = data.settlementCycle; | 
|---|
|  |  |  | form.settlementDate = data.settlementDate; | 
|---|
|  |  |  | form.benefits = data.benefits?.map((x) => x.benefitCode) ?? []; | 
|---|
|  |  |  | form.ageMinLimit = data.ageMinLimit; | 
|---|
|  |  |  | form.ageMaxLimit = data.ageMaxLimit; | 
|---|
|  |  |  | form.genderLimit = data.genderLimit; | 
|---|
|  |  |  | form.credentialLimits = data.credentialLimits?.map((x) => x.typeCode) ?? []; | 
|---|
|  |  |  | form.time = [ | 
|---|
|  |  |  | format(data.beginTime, 'YYYY-MM-DD 00:00:00'), | 
|---|
|  |  |  | format(data.endTime, 'YYYY-MM-DD 23:59:59'), | 
|---|
|  |  |  | ]; | 
|---|
|  |  |  | form.applyTime = [ | 
|---|
|  |  |  | format(data.applyBeginTime, 'YYYY-MM-DD 00:00:00'), | 
|---|
|  |  |  | format(data.applyEndTime, 'YYYY-MM-DD 23:59:59'), | 
|---|
|  |  |  | ]; | 
|---|
|  |  |  | form.weMapInfo = { | 
|---|
|  |  |  | latitude: data.latitude, | 
|---|
|  |  |  | longitude: data.longitude, | 
|---|
|  |  |  | provinceName: data.provinceContent, | 
|---|
|  |  |  | cityName: data.cityContent, | 
|---|
|  |  |  | provinceCode: data.provinceCode, | 
|---|
|  |  |  | cityCode: data.cityCode, | 
|---|
|  |  |  | addressName: data.addressName, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | form.addressDetail = data.addressDetail; | 
|---|
|  |  |  | form.verifyWorkHours = data.verifyWorkHours; | 
|---|
|  |  |  | form.timeoutServiceFee = data.timeoutServiceFee; | 
|---|
|  |  |  | form.description = data.description; | 
|---|
|  |  |  | form.checkReceiveMethod = data.checkReceiveMethod; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | enabled: isEdit, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleSettlementCycleChange() { | 
|---|
|  |  |  | form.settlementDate = null as number; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleBack() { | 
|---|
|  |  |  | closeViewPush(route, { | 
|---|
|  |  |  | name: 'EmploymentManageList', | 
|---|
|  |  |  | name: 'TaskManageList', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | const productFormRef = ref<FormInstance>(); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | async function submit() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let params = {}; | 
|---|
|  |  |  | let res; | 
|---|
|  |  |  | let params: API.SaveTaskInfoCommand = { | 
|---|
|  |  |  | name: form.name, | 
|---|
|  |  |  | billingMethod: form.billingMethod, | 
|---|
|  |  |  | serviceFee: form.serviceFee, | 
|---|
|  |  |  | settlementCycle: form.settlementCycle, | 
|---|
|  |  |  | settlementDate: form.settlementDate ? form.settlementDate : 0, | 
|---|
|  |  |  | benefits: form.benefits, | 
|---|
|  |  |  | ageMinLimit: form.ageMinLimit, | 
|---|
|  |  |  | ageMaxLimit: form.ageMaxLimit, | 
|---|
|  |  |  | genderLimit: form.genderLimit, | 
|---|
|  |  |  | credentialLimits: form.credentialLimits, | 
|---|
|  |  |  | provinceCode: form.weMapInfo.provinceCode, | 
|---|
|  |  |  | cityCode: form.weMapInfo.cityCode, | 
|---|
|  |  |  | addressName: form.weMapInfo.addressName, | 
|---|
|  |  |  | addressDetail: form.addressDetail, | 
|---|
|  |  |  | longitude: form.weMapInfo.longitude, | 
|---|
|  |  |  | latitude: form.weMapInfo.latitude, | 
|---|
|  |  |  | beginTime: dayjs(form.time[0]).format('YYYY-MM-DD 00:00:00'), | 
|---|
|  |  |  | endTime: dayjs(form.time[1]).format('YYYY-MM-DD 23:59:59'), | 
|---|
|  |  |  | applyBeginTime: dayjs(form.applyTime[0]).format('YYYY-MM-DD 00:00:00'), | 
|---|
|  |  |  | applyEndTime: dayjs(form.applyTime[1]).format('YYYY-MM-DD 23:59:59'), | 
|---|
|  |  |  | verifyWorkHours: form.verifyWorkHours, | 
|---|
|  |  |  | timeoutServiceFee: form.timeoutServiceFee, | 
|---|
|  |  |  | description: form.description, | 
|---|
|  |  |  | checkReceiveMethod: form.checkReceiveMethod, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | if (isEdit) { | 
|---|
|  |  |  | params.id = id; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | let res = await taskServices.saveTaskInfo(params); | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | Message.successMessage('操作成功'); | 
|---|
|  |  |  | eventContext.emit(isEdit ? 'employment:edit' : 'employment:add'); | 
|---|
|  |  |  | eventContext.emit(isEdit ? 'taskManage:edit' : 'taskManage:add'); | 
|---|
|  |  |  | handleBack(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleCheckBenefitsAllChange(val: boolean) { | 
|---|
|  |  |  | form.benefits = val | 
|---|
|  |  |  | ? welfareList.value.map((item) => { | 
|---|
|  |  |  | return item.value; | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | : []; | 
|---|
|  |  |  | state.isBenefitsIndeterminate = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleCheckedBenefitsServicesChange(value: string[]) { | 
|---|
|  |  |  | const checkedCount = value.length; | 
|---|
|  |  |  | state.checkBenefitsAll = checkedCount === welfareList.value.length; | 
|---|
|  |  |  | state.isBenefitsIndeterminate = checkedCount > 0 && checkedCount < welfareList.value.length; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleCheckCertificatesAllChange(val: boolean) { | 
|---|
|  |  |  | form.credentialLimits = val | 
|---|
|  |  |  | ? certificateTypeList.value.map((item) => { | 
|---|
|  |  |  | return item.value; | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | : []; | 
|---|
|  |  |  | state.isCertificatesIndeterminate = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleCheckedCertificatesServicesChange(value: string[]) { | 
|---|
|  |  |  | const checkedCount = value.length; | 
|---|
|  |  |  | state.checkCertificatesAll = checkedCount === certificateTypeList.value.length; | 
|---|
|  |  |  | state.isCertificatesIndeterminate = | 
|---|
|  |  |  | checkedCount > 0 && checkedCount < certificateTypeList.value.length; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  | <style lang="scss" scoped> | 
|---|
|  |  |  | @use '@/style/common.scss' as *; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | :deep() { | 
|---|
|  |  |  | .radio-with-input-extra-wrapper { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .form-age-range { | 
|---|
|  |  |  | .pro-from-item-read-content-wrapper { | 
|---|
|  |  |  | width: auto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .settlement-cycle-date-form-item { | 
|---|
|  |  |  | color: inherit; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .el-form-item__content { | 
|---|
|  |  |  | flex-wrap: nowrap; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .el-select { | 
|---|
|  |  |  | margin: 0 20px; | 
|---|
|  |  |  | width: auto; | 
|---|
|  |  |  | min-width: 0; | 
|---|
|  |  |  | flex: 1; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .pro-from-item-read-content-wrapper { | 
|---|
|  |  |  | width: auto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|