待我处理-进度完成

This commit is contained in:
2026-09-15 16:39:40 +08:00
parent fa6206573d
commit 46b50e052e
+25 -30
View File
@@ -114,12 +114,8 @@ const openDetail = (c: MyChange,type:string = '') => {
routerPushByKey("my_highriskdetail",{ query: { id: c.id.toString() } });
};
// 打开进度
const openProgress = (c: MyChange,type:string = '') => {
const openProgress = (c: any) => {
currentRow.value = c;
if(type==='reject'){
window.$message?.info("该任务暂无关联变更进度");
return;
}
progressDrawer.value = true;
};
// 打开撤回
@@ -331,9 +327,9 @@ onMounted(() => {
暂无数据
</div>
<div v-if="item.items && item.items.length" class="flex flex-col gap-3 mt-3">
<div v-for="c in item.items" :key="c.id"
<div v-for="c in item.items" :key="c.change_no"
class="flex flex-wrap items-center gap-3 border px-4 py-3"
:class="c.overdue ? 'border-red-200 bg-[#FFF2F0]' : c.near ? 'border-amber-200 bg-amber-50/40' : ''"
:class="c.overdue_status===2 ? 'border-red-200 bg-[#FFF2F0]' : c.overdue_status===1 ? 'border-amber-200 bg-amber-50/40' : ''"
:style="{ borderRadius: themeStore.themeRadius + 'px' }"
>
<!-- 左区 -->
@@ -421,7 +417,7 @@ onMounted(() => {
<!-- 驳回处理 -->
<div v-if="c.status === 'REJECTED'" class="flex gap-1.5">
<NButton class="text-xs" text type="primary" @click="openDetail(c,'reject')">详情</NButton>
<NButton class="text-xs" text type="warning" @click="openProgress(c,'reject')">进度</NButton>
<NButton class="text-xs" text type="warning" @click="openProgress(c)">进度</NButton>
<NButton class="text-xs" text type="primary" @click="openDisposal(c,'reject')">修改重报</NButton>
<NButton class="text-xs" text type="error" @click="openClosure(c,'reject')">关闭变更</NButton>
</div>
@@ -436,40 +432,39 @@ onMounted(() => {
<div class="rounded-lg border bg-slate-50/60 px-3 py-2.5">
<div class="text-sm font-semibold text-slate-800">{{ currentRow?.title }}</div>
<div class="mt-1.5 flex flex-wrap items-center gap-1.5 text-[11px] text-slate-400">
<span class="font-mono">{{ currentRow?.id }}</span>
<NTag v-if="currentRow?.status==='审批中'" size="small" type="warning">{{currentRow.status}}</NTag>
<NTag v-if="currentRow?.status==='已批准'" size="small" type="primary">{{currentRow.status}}</NTag>
<NTag v-if="currentRow?.status==='待验收'" size="small" type="success">{{currentRow.status}}</NTag>
<NTag v-if="currentRow?.status==='待关闭'" size="small" type="error">{{currentRow.status}}</NTag>
<span v-if="currentRow?.overdue" class="font-medium text-red-500">超期 {{ currentRow?.day }} </span>
<span class="font-mono">{{ currentRow?.change_no }}</span>
<NTag v-if="currentRow?.status==='APPROVING'" size="small" type="warning">审批中</NTag>
<NTag v-if="currentRow?.status==='APPROVED'" size="small" type="success">已通过</NTag>
<NTag v-if="currentRow?.status==='IMPLEMENTED'" size="small" type="warning">待验收</NTag>
<NTag v-if="currentRow?.status==='ACCEPTED'" size="small" type="error">待关闭</NTag>
<NTag v-if="currentRow?.status==='REJECTED'" size="small" type="error">已驳回</NTag>
<NTag v-if="currentRow?.status==='CLOSED'" size="small" type="error">已关闭</NTag>
<NTag v-if="currentRow?.status==='WITHDRAWN'" size="small" type="error">已撤回</NTag>
<span v-if="currentRow?.overdue_status===2" class="font-medium text-red-500">超期 {{ currentRow?.overdue_days }} </span>
</div>
<div v-if="currentRow?.dept || currentRow?.applicant" class="mt-1 text-[11px] text-slate-400">{{ [currentRow?.dept, currentRow?.applicant].filter(Boolean).join(' · ') }}</div>
<div v-if="currentRow?.meta" class="mt-1 text-[11px] text-slate-400">{{ currentRow?.meta }}</div>
</div>
<div class="mt-4">
<div v-for="(s, i) in stages" :key="s" class="flex gap-3">
<div v-for="(s, i) in currentRow?.approval_records" :key="s.id" class="flex gap-3">
<div class="flex flex-col items-center">
<span class="flex h-6 w-6 shrink-0 items-center justify-center rounded-full border-2"
:class="i < curIdx || closed ? 'border-[#7CC242] bg-[#7CC242] text-white' : i === curIdx && !closed ? 'border-[#1D4E9C] bg-[#1D4E9C] text-white' : 'border-slate-200 bg-white text-slate-300'">
<Icon v-if="i < curIdx || closed" icon="ix:success" />
<Icon v-else-if="i === curIdx" icon="tabler:clock" />
<span v-else class="text-[10px]">{{ i + 1 }}</span>
<span class="flex h-6 w-6 shrink-0 items-center justify-center rounded-full border-2 border-[#7CC242] bg-[#7CC242] text-white">
<Icon icon="ix:success" />
</span>
<span v-if="i < stages.length - 1" class="w-0.5 flex-1" :class="i < curIdx ? 'bg-[#7CC242]' : 'bg-slate-200'" />
<span
v-if="Number(i) < Number(currentRow?.approval_records?.length) - 1"
class="w-0.5 flex-1"
:class="Number(i) < Number(currentRow?.approval_records?.length) ? 'bg-[#7CC242]' : 'bg-slate-200'"
></span>
</div>
<div class="pb-5">
<div class="text-sm" :class="i === curIdx && !closed ? 'font-semibold text-[#1D4E9C]' : i < curIdx || closed ? 'font-medium text-slate-700' : 'text-slate-400'">
{{ s }}{{ i === curIdx && !closed ? '(当前)' : '' }}
</div>
<div v-if="timeOf(i)" class="mt-0.5 text-[11px] text-slate-400">{{ timeOf(i) }}</div>
<div v-if="i === curIdx && !closed && (currentRow?.detail || currentRow?.updateTime)" class="mt-0.5 text-[11px] text-slate-400">
{{ [currentRow?.detail, currentRow?.updateTime ? `更新 ${currentRow?.updateTime}` : ''].filter(Boolean).join(' · ') }}
</div>
<p class="text-sm">{{ s.action }}</p>
<span class="mt-0.5 text-[11px] text-slate-400">{{s.finished_at?.slice(0, 16)}}</span>
</div>
</div>
</div>
<div v-if="currentRow?.dur === '临时'" class="rounded-lg border border-amber-200 bg-amber-50/50 px-3 py-2 text-[11px] leading-5 text-amber-700">
临时变更计划恢复 {{ currentRow?.deadline ?? '' }}{{ currentRow?.extended ? ` · 延期后恢复 ${currentRow?.deadline}` : '' }} · 恢复 / 延期 / 转永久请在详情页中操作
<div v-if="currentRow?.duration_type === 2" class="rounded-lg border border-amber-200 bg-amber-50/50 px-3 py-2 text-[11px] leading-5 text-amber-700">
临时变更计划恢复 {{ currentRow?.restore_deadline ?? '' }} · 恢复 / 延期 / 转永久请在详情页中操作
</div>
</NDrawerContent>
</NDrawer>