Files
yuto-water-h5/src/views/pshgl/pshProblemDetail.vue
hermes 2624fb0404 feat: Batch 4 - remaining pages (23 pages)
Agent Loop: 3 agents, all passed
- 8 pshgl pages (排水户管理)
- 8 fxgl+xjgl pages (防汛+工程)
- 7 remaining (map/project/QR)
2026-06-15 21:27:57 +08:00

168 lines
4.4 KiB
Vue

<script setup lang="ts">
/**
* 排水户问题详情页
*
* 展示排水户问题详细信息,支持处理/转派等操作。
*/
import { ref } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import { showToast } from 'vant'
const router = useRouter()
const route = useRoute()
const problemId = (route.params.detail || route.query.id) as string
/** 模拟问题详情 */
const problem = ref({
id: problemId || '1',
pshName: '华丰食品厂',
title: '排水管道堵塞',
severity: 'high',
status: 'pending',
reporter: '张工',
reportTime: '2025-06-15 09:30',
address: '城北工业园区A1栋东侧排水口',
description: '日常巡检中发现华丰食品厂东侧排水管道存在严重堵塞现象,排水不畅导致污水溢出,存在环境污染风险。经初步排查,堵塞原因为油脂凝固和杂物堆积。需尽快安排疏通车进行清淤处理,并建议排水户定期清理隔油池。',
assignee: '待分配',
createTime: '2025-06-15 09:30:00',
updateTime: '2025-06-15 09:30:00',
})
const statusMap: Record<string, string> = {
pending: '待处理',
processing: '处理中',
resolved: '已解决',
}
const statusColorMap: Record<string, 'primary' | 'success' | 'warning' | 'danger'> = {
pending: 'warning',
processing: 'primary',
resolved: 'success',
}
const severityMap: Record<string, string> = {
low: '低',
medium: '中',
high: '高',
critical: '紧急',
}
const severityColorMap: Record<string, string> = {
low: '#07c160',
medium: '#ff976a',
high: '#ee0a24',
critical: '#ee0a24',
}
/** 接单 */
function acceptProblem() {
showToast('已接单处理')
}
/** 转派 */
function transferProblem() {
showToast('转派功能')
}
/** 解决 */
function resolveProblem() {
showToast('已标记为已解决')
}
</script>
<template>
<div class="detail-page">
<van-nav-bar title="问题详情" left-text="返回" left-arrow fixed placeholder @click-left="router.back()" />
<!-- 状态栏 -->
<div class="status-bar">
<van-tag :type="statusColorMap[problem.status]" size="large">
{{ statusMap[problem.status] }}
</van-tag>
<span class="severity-tag" :style="{ color: severityColorMap[problem.severity] }">
严重程度: {{ severityMap[problem.severity] }}
</span>
</div>
<!-- 基本信息 -->
<van-cell-group title="基本信息" class="info-group">
<van-cell title="问题编号" :value="`PSH-PROB-${problem.id}`" />
<van-cell title="问题标题" :value="problem.title" />
<van-cell title="所属排水户" :value="problem.pshName" />
<van-cell title="上报人员" :value="problem.reporter" />
<van-cell title="上报时间" :value="problem.reportTime" />
<van-cell title="问题地址" :value="problem.address" />
<van-cell title="责任人" :value="problem.assignee" />
</van-cell-group>
<!-- 问题描述 -->
<van-cell-group title="问题描述" class="info-group">
<van-cell>
<p class="desc-text">{{ problem.description }}</p>
</van-cell>
</van-cell-group>
<!-- 时间信息 -->
<van-cell-group title="时间信息" class="info-group">
<van-cell title="创建时间" :value="problem.createTime" />
<van-cell title="更新时间" :value="problem.updateTime" />
</van-cell-group>
<!-- 操作按钮 -->
<div class="action-buttons">
<van-button type="primary" block round @click="acceptProblem">接单处理</van-button>
<van-button plain block round class="mt-sm" @click="transferProblem">转派他人</van-button>
<van-button type="success" block round class="mt-sm" @click="resolveProblem">标记已解决</van-button>
</div>
</div>
</template>
<style lang="scss" scoped>
.detail-page {
min-height: 100vh;
background: var(--color-bg-page);
padding-bottom: 24px;
:deep(.van-nav-bar) {
background: var(--color-primary);
--van-nav-bar-title-text-color: #fff;
--van-nav-bar-text-color: #fff;
--van-nav-bar-icon-color: #fff;
}
}
.status-bar {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
padding: 12px 16px;
background: var(--color-bg-card);
}
.severity-tag {
font-size: 13px;
font-weight: 500;
}
.info-group {
margin-top: 8px;
}
.desc-text {
font-size: 14px;
line-height: 1.6;
color: var(--color-text-regular);
padding: 4px 0;
}
.action-buttons {
padding: 24px 16px;
.mt-sm {
margin-top: 12px;
}
}
</style>