|
|
@@ -0,0 +1,263 @@
|
|
|
+<template>
|
|
|
+ <view class="platform-experience-card">
|
|
|
+ <view class="platform-experience-card__header">
|
|
|
+ <view class="platform-experience-card__title">{{ title }}</view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="platform-experience-card__info-list">
|
|
|
+ <view class="platform-experience-card__info-item">
|
|
|
+ <text class="platform-experience-card__info-label">服务企业</text>
|
|
|
+ <text class="platform-experience-card__info-value">
|
|
|
+ {{ serviceDeptNameText }}
|
|
|
+ </text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="platform-experience-card__info-item">
|
|
|
+ <text class="platform-experience-card__info-label">服务时长</text>
|
|
|
+ <text
|
|
|
+ class="platform-experience-card__info-value platform-experience-card__info-value--primary"
|
|
|
+ >
|
|
|
+ {{ serviceDurationText }}
|
|
|
+ </text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="platform-experience-card__overview">
|
|
|
+ <view class="platform-experience-card__task">
|
|
|
+ <view class="platform-experience-card__task-item">
|
|
|
+ <text class="platform-experience-card__task-value">
|
|
|
+ {{ finishTaskCountText }}
|
|
|
+ </text>
|
|
|
+ <text class="platform-experience-card__task-label">完成任务量</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="platform-experience-card__task-divider" />
|
|
|
+
|
|
|
+ <view class="platform-experience-card__task-item">
|
|
|
+ <text class="platform-experience-card__task-value">
|
|
|
+ {{ approvedTaskCountText }}
|
|
|
+ </text>
|
|
|
+ <text class="platform-experience-card__task-label">通过任务量</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="platform-experience-card__rate">
|
|
|
+ <view class="platform-experience-card__rate-text">
|
|
|
+ <text class="platform-experience-card__rate-label">审核通过率</text>
|
|
|
+ </view>
|
|
|
+ <text class="platform-experience-card__rate-value">
|
|
|
+ {{ approvedTaskRateText }}
|
|
|
+ </text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import { computed } from 'vue'
|
|
|
+
|
|
|
+type DisplayValue = string | number | null | undefined
|
|
|
+
|
|
|
+export interface PlatformExperienceCardData {
|
|
|
+ serviceDeptName?: DisplayValue
|
|
|
+ serviceDuration?: DisplayValue
|
|
|
+ approvedTaskRate?: DisplayValue
|
|
|
+ finishTaskCount?: DisplayValue
|
|
|
+ approvedTaskCount?: DisplayValue
|
|
|
+}
|
|
|
+
|
|
|
+const props = withDefaults(
|
|
|
+ defineProps<{
|
|
|
+ title?: string
|
|
|
+ data?: PlatformExperienceCardData | null
|
|
|
+ }>(),
|
|
|
+ {
|
|
|
+ title: '平台经历',
|
|
|
+ data: null,
|
|
|
+ }
|
|
|
+)
|
|
|
+
|
|
|
+function formatDisplayValue(value: DisplayValue): string {
|
|
|
+ if (value === null || value === undefined || value === '') {
|
|
|
+ return '--'
|
|
|
+ }
|
|
|
+
|
|
|
+ return String(value)
|
|
|
+}
|
|
|
+
|
|
|
+const serviceDeptNameText = computed(() => formatDisplayValue(props.data?.serviceDeptName))
|
|
|
+const serviceDurationText = computed(() => formatDisplayValue(props.data?.serviceDuration))
|
|
|
+const approvedTaskRateText = computed(() => formatDisplayValue(props.data?.approvedTaskRate))
|
|
|
+const finishTaskCountText = computed(() => formatDisplayValue(props.data?.finishTaskCount))
|
|
|
+const approvedTaskCountText = computed(() => formatDisplayValue(props.data?.approvedTaskCount))
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.platform-experience-card {
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+ padding: 32rpx 28rpx 30rpx;
|
|
|
+ border-radius: 32rpx;
|
|
|
+ background: #fff;
|
|
|
+ box-shadow: 0 18rpx 48rpx rgba(22, 38, 67, 0.1);
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card::before {
|
|
|
+ position: absolute;
|
|
|
+ top: -100rpx;
|
|
|
+ right: -80rpx;
|
|
|
+ width: 240rpx;
|
|
|
+ height: 240rpx;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: rgba(47, 124, 255, 0.18);
|
|
|
+ content: '';
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__header {
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
+ margin-bottom: 26rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__title {
|
|
|
+ position: relative;
|
|
|
+ padding-left: 20rpx;
|
|
|
+ font-size: 34rpx;
|
|
|
+ font-weight: 800;
|
|
|
+ color: #172033;
|
|
|
+ line-height: 1.35;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__title::before {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 50%;
|
|
|
+ width: 7rpx;
|
|
|
+ height: 32rpx;
|
|
|
+ border-radius: 999rpx;
|
|
|
+ background: linear-gradient(180deg, #1f7cff 0%, #45b7ff 100%);
|
|
|
+ transform: translateY(-50%);
|
|
|
+ content: '';
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__info-list {
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
+ padding: 6rpx 24rpx;
|
|
|
+ border-radius: 26rpx;
|
|
|
+ background: #f7f9fc;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__info-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ min-height: 88rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__info-item + .platform-experience-card__info-item {
|
|
|
+ border-top: 1rpx solid rgba(23, 32, 51, 0.08);
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__info-label {
|
|
|
+ flex-shrink: 0;
|
|
|
+ margin-right: 24rpx;
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #7a8499;
|
|
|
+ line-height: 1.35;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__info-value {
|
|
|
+ min-width: 0;
|
|
|
+ flex: 1;
|
|
|
+ font-size: 28rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #172033;
|
|
|
+ line-height: 1.35;
|
|
|
+ text-align: right;
|
|
|
+ word-break: break-all;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__info-value--primary {
|
|
|
+ color: #1f7cff;
|
|
|
+ font-weight: 800;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__overview {
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
+ margin-top: 24rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__rate {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 30rpx 26rpx;
|
|
|
+ border-radius: 28rpx;
|
|
|
+ background: linear-gradient(135deg, #1f7cff 0%, #54a8ff 100%);
|
|
|
+ box-shadow: 0 14rpx 32rpx rgba(47, 124, 255, 0.3);
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__rate-text {
|
|
|
+ min-width: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__rate-label {
|
|
|
+ display: block;
|
|
|
+ font-size: 30rpx;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #fff;
|
|
|
+ line-height: 1.3;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__rate-value {
|
|
|
+ flex-shrink: 0;
|
|
|
+ margin-left: 24rpx;
|
|
|
+ font-size: 48rpx;
|
|
|
+ font-weight: 800;
|
|
|
+ color: #fff;
|
|
|
+ line-height: 1.1;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__task {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ padding: 28rpx 0;
|
|
|
+ border: 1rpx solid rgba(31, 124, 255, 0.16);
|
|
|
+ border-radius: 28rpx;
|
|
|
+ background: #f2f7ff;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__task-item {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0;
|
|
|
+ text-align: center;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__task-value {
|
|
|
+ display: block;
|
|
|
+ font-size: 42rpx;
|
|
|
+ font-weight: 800;
|
|
|
+ color: #172033;
|
|
|
+ line-height: 1.15;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__task-label {
|
|
|
+ display: block;
|
|
|
+ margin-top: 10rpx;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #6f7b91;
|
|
|
+ line-height: 1.3;
|
|
|
+}
|
|
|
+
|
|
|
+.platform-experience-card__task-divider {
|
|
|
+ width: 1rpx;
|
|
|
+ height: 58rpx;
|
|
|
+ background: rgba(23, 32, 51, 0.14);
|
|
|
+}
|
|
|
+</style>
|