| | |
| | | <div class="task-card-title-wrapper"> |
| | | <div class="task-card-title">{{ name }}</div> |
| | | <slot name="title-right"> |
| | | <TaskPrice :value="serviceFee ?? 0" :unit="BillingMethodEnumUnit[billingMethod]" /> |
| | | <TaskPrice |
| | | :value="toThousand(serviceFee ?? 0)" |
| | | :unit="BillingMethodEnumUnit[billingMethod]" |
| | | /> |
| | | </slot> |
| | | </div> |
| | | <slot> |
| | |
| | | {{ EnumSettlementCycleText[settlementCycle] }} |
| | | </div> |
| | | <div class="task-card-welfare-list-item">{{ TaskUtils.getGenderText(genderLimit) }}</div> |
| | | <div class="task-card-welfare-list-item">包三餐</div> |
| | | <div |
| | | class="task-card-welfare-list-item" |
| | | v-if="benefits?.length > 0" |
| | | v-for="item in benefits" |
| | | :key="item.benefitCode" |
| | | > |
| | | {{ item.benefitContent }} |
| | | </div> |
| | | </div> |
| | | <div class="task-card-time"> |
| | | {{ dayjs(beginTime).format('YYYY年MM月DD日') }}至{{ |
| | |
| | | <div class="task-card-footer"> |
| | | <div class="task-card-left"> |
| | | <div class="task-card-footer-tag">H</div> |
| | | <div class="task-card-footer-address">{{ 'address' }}</div> |
| | | <div class="task-card-footer-address">{{ addressName }}</div> |
| | | </div> |
| | | <div class="task-card-actions" v-if="showActions"> |
| | | <slot name="actions"> |
| | | <nut-button type="primary" @click.stop="handleSign">报名</nut-button> |
| | | <nut-button |
| | | v-if="releaseStatus === EnumTaskReleaseStatus.InProcess" |
| | | type="primary" |
| | | @click.stop="emit('apply', id)" |
| | | >报名</nut-button |
| | | > |
| | | </slot> |
| | | </div> |
| | | </div> |
| | |
| | | import TaskPrice from './TaskPrice.vue'; |
| | | import { CommonTaskCardProps } from './card'; |
| | | import dayjs from 'dayjs'; |
| | | import { TaskUtils } from '@12333/utils'; |
| | | import { TaskUtils, toThousand } from '@12333/utils'; |
| | | |
| | | defineOptions({ |
| | | name: 'TaskCard', |
| | |
| | | /** 服务费 */ |
| | | serviceFee?: number; |
| | | settlementCycle?: EnumSettlementCycle; |
| | | /** 福利 */ |
| | | benefits?: API.GetTaskInfoQueryResultBenefit[]; |
| | | genderLimit?: EnumUserGender; |
| | | /** 资格证书类型 */ |
| | | credentialLimits?: API.GetTaskInfoQueryResultCredentialLimit[]; |
| | | /** 任务地点所属省份编号 */ |
| | | provinceCode?: string; |
| | | /** 任务地点所属省份 */ |
| | | provinceContent?: string; |
| | | /** 任务地点所属城市编号 */ |
| | | cityCode?: string; |
| | | /** 任务地点所属城市 */ |
| | | cityContent?: string; |
| | | /** 任务地点名称 */ |
| | | addressName?: string; |
| | | /** 任务地点详细地址 */ |
| | | addressDetail?: string; |
| | | /** 经度 */ |
| | | longitude?: number; |
| | | /** 纬度 */ |
| | | latitude?: number; |
| | | /** 报名人数 */ |
| | | userCount?: number; |
| | | status?: EnumTaskStatus; |
| | |
| | | showActions: true, |
| | | }); |
| | | |
| | | function handleSign() {} |
| | | const emit = defineEmits<{ |
| | | (e: 'apply', id: string): void; |
| | | }>(); |
| | | </script> |
| | | |
| | | <style lang="scss"> |