<template>
|
<div class="reserve-service-card-wrapper" :class="{ 'un-read': unRead }">
|
<div class="reserve-service-card-title-wrapper">
|
<div class="reserve-service-card-title">{{ name }}</div>
|
<slot name="title-right">
|
<TaskPrice
|
v-if="releaseStatus !== EnumTaskReleaseStatus.Stopped"
|
:value="toThousand(serviceFee ?? 0)"
|
:unit="BillingMethodEnumUnit[billingMethod]"
|
:billingMethod="billingMethod"
|
/>
|
</slot>
|
</div>
|
<div class="reserve-service-card-item-list">
|
<div class="reserve-service-card-item">
|
服务时间:{{ dayjs(beginTime).format('YYYY年MM月D日') }} 13:00-15:00
|
</div>
|
<div class="reserve-service-card-item">服务地址:{{ addressName }}</div>
|
</div>
|
|
<div class="reserve-service-card-footer">
|
<div class="reserve-service-card-left">
|
<div class="reserve-service-card-footer-address">服务机构:我是机构名称</div>
|
</div>
|
<div class="reserve-service-card-status">待确认</div>
|
</div>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import {
|
EnumBillingMethod,
|
EnumSettlementCycle,
|
EnumTaskCheckReceiveStatus,
|
EnumTaskRecommendStatus,
|
EnumTaskReleaseStatus,
|
EnumTaskSettlementStatus,
|
EnumTaskStatus,
|
EnumUserGender,
|
EnumBillingMethodText,
|
EnumUserGenderText,
|
EnumSettlementCycleText,
|
BillingMethodEnumUnit,
|
EnumTaskUserHireStatus,
|
} from '@12333/constants';
|
import dayjs from 'dayjs';
|
import { TaskUtils, toThousand } from '@12333/utils';
|
import { TaskPrice } from '@12333/components';
|
|
defineOptions({
|
name: 'ReserveServiceCard',
|
});
|
|
type Props = {
|
/** Id */
|
id?: string;
|
/** 任务名称 */
|
name: string;
|
/** 任务单号 */
|
code?: string;
|
billingMethod?: EnumBillingMethod;
|
/** 服务费 */
|
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;
|
/** 任务开始时间 */
|
beginTime?: string;
|
/** 任务结束时间 */
|
endTime?: string;
|
releaseStatus?: EnumTaskReleaseStatus;
|
checkReceiveStatus?: EnumTaskCheckReceiveStatus;
|
settlementStatus?: EnumTaskSettlementStatus;
|
recommendStatus?: EnumTaskRecommendStatus;
|
/** 创建时间 */
|
createdTime?: string;
|
hireStatus?: EnumTaskUserHireStatus;
|
|
unRead?: boolean;
|
};
|
|
const props = withDefaults(defineProps<Props>(), {
|
showActions: true,
|
|
unRead: false,
|
});
|
|
const emit = defineEmits<{
|
(e: 'apply', id: string): void;
|
}>();
|
</script>
|
|
<style lang="scss">
|
@import '@/styles/common.scss';
|
|
.reserve-service-card-wrapper {
|
padding: 24px 32px;
|
margin-bottom: 24px;
|
background-color: #fff;
|
border-radius: 12px;
|
|
.task-price {
|
color: boleGetCssVar('color', 'danger');
|
}
|
|
&.un-read {
|
position: relative;
|
|
&::before {
|
content: '';
|
position: absolute;
|
width: 12px;
|
height: 12px;
|
border-radius: 50%;
|
background-color: red;
|
right: 18px;
|
top: 12px;
|
}
|
}
|
|
&:last-child {
|
margin-bottom: 0;
|
}
|
|
.reserve-service-card-title-wrapper {
|
display: flex;
|
align-items: center;
|
margin-bottom: 14px;
|
|
.reserve-service-card-title {
|
flex: 1;
|
min-width: 0;
|
@include ellipsis;
|
font-size: 30px;
|
color: boleGetCssVar('text-color', 'primary');
|
line-height: 42px;
|
}
|
}
|
|
.reserve-service-card-item-list {
|
margin-bottom: 6px;
|
|
.reserve-service-card-item {
|
font-size: 24px;
|
color: boleGetCssVar('text-color', 'regular');
|
line-height: 36px;
|
margin-bottom: 6px;
|
|
&:last-child {
|
margin-bottom: 0;
|
}
|
}
|
}
|
|
.reserve-service-card-footer {
|
display: flex;
|
align-items: center;
|
|
.reserve-service-card-left {
|
flex: 1;
|
min-width: 0;
|
display: flex;
|
align-items: center;
|
|
.reserve-service-card-footer-address {
|
font-size: 24px;
|
color: boleGetCssVar('text-color', 'regular');
|
line-height: 36px;
|
flex: 1;
|
min-width: 0;
|
@include ellipsis;
|
}
|
}
|
|
.reserve-service-card-status {
|
font-size: 32px;
|
color: boleGetCssVar('text-color', 'regular');
|
line-height: 36px;
|
}
|
}
|
}
|
</style>
|