Files
smartDriveEEUniApp/pages-subpackage/ai_features/over_commitment/over_commitment.vue
2026-02-07 14:33:30 +08:00

222 lines
4.4 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="feature-page">
<view class="page-header">
<view class="nav-bar">
<view class="nav-left" @click="goBack">
<text class="back-icon"></text>
</view>
<text class="nav-title">过度承诺统计</text>
</view>
</view>
<scroll-view class="content-scroll" scroll-y="true">
<view class="stats-card">
<view class="stat-item">
<text class="stat-value">{{ overCommitmentRate }}%</text>
<text class="stat-label">过度承诺率</text>
</view>
<view class="stat-item">
<text class="stat-value">{{ totalIncidents }}</text>
<text class="stat-label">违规事件数</text>
</view>
</view>
<view class="chart-section">
<text class="section-title">过度承诺趋势图</text>
<view class="chart-placeholder">
<text class="placeholder-text"> 图表区域</text>
<text class="placeholder-desc">此处将显示过度承诺统计趋势图表</text>
</view>
</view>
<view class="data-list">
<text class="section-title">违规记录</text>
<view class="list-item" v-for="(item, index) in dataList" :key="index">
<view class="item-left">
<text class="item-date">{{ item.employee }}</text>
<text class="item-desc">{{ item.description }}</text>
</view>
<view class="item-right">
<text class="item-count">{{ item.count }} </text>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
overCommitmentRate: '3.2',
totalIncidents: '42',
dataList: [
{ employee: '张三', description: '承诺无法兑现的服务', count: '8' },
{ employee: '李四', description: '超出权限的优惠承诺', count: '6' },
{ employee: '王五', description: '虚假的产品性能承诺', count: '5' },
{ employee: '赵六', description: '不切实际的交货时间承诺', count: '4' },
{ employee: '孙七', description: '其他违规承诺', count: '19' }
]
}
},
methods: {
goBack() {
uni.navigateBack()
}
}
}
</script>
<style scoped>
.feature-page {
min-height: 100vh;
background: #f8f9fa;
}
.page-header {
background: #ffffff;
border-bottom: 1rpx solid #e9ecef;
}
.nav-bar {
display: flex;
align-items: center;
height: 88rpx;
padding: 0 30rpx;
}
.nav-left {
width: 60rpx;
height: 60rpx;
display: flex;
align-items: center;
justify-content: center;
margin-right: 20rpx;
}
.back-icon {
font-size: 36rpx;
color: #333333;
}
.nav-title {
flex: 1;
text-align: center;
font-size: 32rpx;
font-weight: bold;
color: #333333;
}
.content-scroll {
height: calc(100vh - 88rpx);
}
.stats-card {
display: flex;
margin: 20rpx 30rpx;
background: #ffffff;
border-radius: 16rpx;
padding: 40rpx 30rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
}
.stat-item {
flex: 1;
text-align: center;
}
.stat-item:not(:last-child) {
border-right: 1rpx solid #e9ecef;
}
.stat-value {
display: block;
font-size: 48rpx;
font-weight: bold;
color: #ff6b6b;
margin-bottom: 10rpx;
}
.stat-label {
display: block;
font-size: 24rpx;
color: #666666;
}
.chart-section, .data-list {
margin: 20rpx 30rpx;
background: #ffffff;
border-radius: 16rpx;
overflow: hidden;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
}
.section-title {
display: block;
font-size: 32rpx;
font-weight: bold;
color: #333333;
padding: 30rpx;
border-bottom: 1rpx solid #e9ecef;
}
.chart-placeholder {
padding: 80rpx 30rpx;
text-align: center;
}
.placeholder-text {
display: block;
font-size: 48rpx;
margin-bottom: 20rpx;
}
.placeholder-desc {
display: block;
font-size: 28rpx;
color: #666666;
}
.list-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.list-item:last-child {
border-bottom: none;
}
.item-left {
flex: 1;
}
.item-date {
display: block;
font-size: 28rpx;
font-weight: bold;
color: #333333;
margin-bottom: 8rpx;
}
.item-desc {
display: block;
font-size: 24rpx;
color: #666666;
}
.item-right {
text-align: right;
}
.item-count {
display: block;
font-size: 28rpx;
font-weight: bold;
color: #ff6b6b;
}
</style>