feat 完善注释
This commit is contained in:
@@ -5,7 +5,6 @@ import { useRoute, useRouter } from 'vue-router'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { ConfirmDialog } from '@/components'
|
||||
import type { FileInfo } from '@/types/api'
|
||||
// 页面容器:数据只经 store,不直接 import api
|
||||
import { useProjectStore } from '@/stores/modules/project'
|
||||
import ProjectInfoCard from './cpns/ProjectInfoCard.vue'
|
||||
import ProjectProgress from './cpns/ProjectProgress.vue'
|
||||
@@ -26,7 +25,6 @@ const projectId = computed(() => String(route.params.id))
|
||||
const activeTab = ref<DetailTab>('progress')
|
||||
const cancelVisible = ref(false)
|
||||
|
||||
// 设计稿:页签是「文字 + 激活项蓝色下划线」(不是胶囊按钮组),顺序固定
|
||||
const tabs: Array<{ label: string; value: DetailTab }> = [
|
||||
{ label: '项目进度', value: 'progress' },
|
||||
{ label: '项目文件', value: 'files' },
|
||||
@@ -38,27 +36,11 @@ function load(): void {
|
||||
void projectStore.fetchDetail(projectId.value)
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击页签:**每次都调一次接口**,取该页签的最新数据。
|
||||
*
|
||||
* <p>后端详情本就是「4 个页签 4 个端点」,所以点一次 = 一次请求,且只请求被点的那一支;
|
||||
* 重复点击当前页签也会重取(用于拿到别处改动后的最新值)。竞态由 store 的请求序号兜住
|
||||
* ——切项目、连点同一页签都不会把旧响应盖回页面。</p>
|
||||
*/
|
||||
function onTabClick(tab: DetailTab): void {
|
||||
activeTab.value = tab
|
||||
void projectStore.refreshTab(tab)
|
||||
}
|
||||
|
||||
/**
|
||||
* 写操作的现状(2026-09-28):
|
||||
* · **售后已接真实接口** —— 申请跳 `/project/:id/after-sales`(`/afterSales/request`),
|
||||
* 取消走 `/afterSales/withdraw`;两者成功后都会重拉售后页签;
|
||||
* · **需求附件的删除 / 预览 / 下载仍无用户端接口**(上传入口在需求提报页),
|
||||
* 所以这里只提示「待接入」,**不往详情里塞本地假数据** —— 详情数据来自真实接口,
|
||||
* 混入前端自造条目会让刷新前后不一致。
|
||||
* 另外详情页「只展示文件」:上传入口在需求提报页,这里不提供。
|
||||
*/
|
||||
function onDeleteFile(index: number): void {
|
||||
void index
|
||||
ElMessage.info('附件删除接口待接入')
|
||||
@@ -74,16 +56,6 @@ function onDownloadFile(): void {
|
||||
ElMessage.info('文件下载待接口接入')
|
||||
}
|
||||
|
||||
/**
|
||||
* 「立即支付」→ 收银台。
|
||||
*
|
||||
* <p>带两个参数:**需求 id**(本页路由 `:id`;收银台据此调现成的
|
||||
* `GET /web/requirementPool/get/finance/{需求id}` 取付款计划当订单明细)与**期次 id**
|
||||
* (`vm_bill_plan.id`,用于精确指定付哪一期——本栈支付口径就是它)。</p>
|
||||
*
|
||||
* <p>兜底:期次 id 为空或非数字时不跳(历史兜底数据 / 后端未重启时可能出现),
|
||||
* 只提示——宁可不跳,也不要把无效 id 丢给路由,让用户落在空收银台上。</p>
|
||||
*/
|
||||
function onPay(billId: string): void {
|
||||
const id = String(billId ?? '').trim()
|
||||
if (!/^\d+$/.test(id)) {
|
||||
@@ -111,7 +83,6 @@ function onApplyAfterSales(): void {
|
||||
}
|
||||
|
||||
function onConfirmCancel(): void {
|
||||
// 撤回接口收的是**需求 id**(后端按需求校验归属)
|
||||
void projectStore.cancelAfterSales(projectId.value)
|
||||
}
|
||||
|
||||
@@ -135,7 +106,6 @@ onMounted(load)
|
||||
<ProjectInfoCard :project="current" />
|
||||
</div>
|
||||
|
||||
<!-- 本地 Tab 切换(设计稿:文字 + 激活项下划线) -->
|
||||
<div class="project-detail__tabs">
|
||||
<button
|
||||
v-for="tab in tabs"
|
||||
@@ -151,7 +121,6 @@ onMounted(load)
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- 「项目进度」页签 = 开发进度 → 里程碑 → 项目团队(顺序按设计稿) -->
|
||||
<template v-if="activeTab === 'progress'">
|
||||
<ProjectProgress
|
||||
:progress="current.progress"
|
||||
@@ -180,7 +149,6 @@ onMounted(load)
|
||||
@download="onFinanceDownload"
|
||||
/>
|
||||
|
||||
<!-- 售后页签三形态:项目未完成 / 已完成未提交 / 已完成已提交(详见组件内注释) -->
|
||||
<ProjectAfterSales
|
||||
v-if="activeTab === 'afterSales'"
|
||||
:after-sales="current.afterSales"
|
||||
@@ -206,16 +174,11 @@ onMounted(load)
|
||||
</template>
|
||||
|
||||
<style lang="less" scoped>
|
||||
// 设计稿实测(1920 画布,1:1,以 785b3eb8 / 843103b2 / ef0166c6 三张同基准稿为准):
|
||||
// 面包屑 ink (70,116) 24/500 #666666;信息块 logo (70,196) 64×64、标题 ink (142,212) 19/700、
|
||||
// 字段行 ink (142,245) 11px;页签行 278..318,文字 ink 278、激活蓝 #024FFF/600、常规 #4B5563/400,
|
||||
// 节距 86;分割线 (70,317) 1780×1 #F0F1F3;页脚 (0,1811) 1920×481 #0C1321。
|
||||
.project-detail {
|
||||
.flex(column, flex-start, stretch);
|
||||
gap: 0;
|
||||
background: @white;
|
||||
|
||||
// 顶栏底 72 → 面包屑 ink 116(24px/27 行盒 → box 111.5,约 +40)
|
||||
&__breadcrumb {
|
||||
padding-top: 40px;
|
||||
font-size: 24px;
|
||||
@@ -224,15 +187,13 @@ onMounted(load)
|
||||
color: @project-breadcrumb;
|
||||
}
|
||||
|
||||
// 面包屑块 72..139 → 信息块顶 195(logo 196)
|
||||
&__info {
|
||||
margin-top: 56px;
|
||||
}
|
||||
|
||||
// 信息块底 262 → 页签行顶 276..317(分割线在 317)
|
||||
&__tabs {
|
||||
.flex(row, flex-start, center);
|
||||
gap: 16.45px; // 文字宽 69.55,节距 86 → 间距 86 − 69.55
|
||||
gap: 16.45px;
|
||||
height: 41px;
|
||||
margin-top: 14px;
|
||||
box-sizing: border-box;
|
||||
@@ -241,7 +202,7 @@ onMounted(load)
|
||||
|
||||
&__tab {
|
||||
position: relative;
|
||||
padding: 0 0 24px; // 文字 box 0..17、下划线落 41
|
||||
padding: 0 0 24px;
|
||||
border: none;
|
||||
background: transparent;
|
||||
color: @project-cell;
|
||||
|
||||
Reference in New Issue
Block a user