This commit is contained in:
Your Name
2026-04-30 17:36:47 +08:00
parent 4c21ee5938
commit 7e557b1ea2
33 changed files with 8718 additions and 94 deletions
@@ -1152,6 +1152,7 @@
<el-option label="尾款费用" :value="5" />
<el-option label="其他费用" :value="6" />
<el-option label="全部费用" :value="7" />
<el-option label="驼奶费用" :value="8" />
</el-select>
</el-form-item>
</el-col>
@@ -1,12 +1,12 @@
<!-- 处方业务订单zyt_tcm_prescription_order非支付单 -->
<template>
<div class="prescription-order-page prescription-order-list px-4 py-4 pb-8">
<header class="po-page-head">
<!-- <header class="po-page-head">
<div>
<h1 class="po-page-title">处方业务订单</h1>
<p class="po-page-desc">履约与双审详情可同屏查看<strong>处方单</strong><strong>关联支付单</strong></p>
</div>
</header>
</header> -->
<el-card class="!border-none shadow-sm mb-4" shadow="never">
<div class="flex flex-col gap-3">
@@ -58,6 +58,38 @@
<span class="font-medium">{{ tab.label }}</span>
</div>
</div>
<div class="flex items-center gap-2 flex-wrap">
<span class="text-gray-500 text-sm font-medium w-20 shrink-0">供货方式</span>
<div
v-for="tab in supplyModeTabs"
:key="'sm-' + String(tab.value)"
:class="[
'px-4 py-1.5 rounded-lg cursor-pointer transition-all duration-200 select-none text-sm',
queryParams.supply_mode === tab.value
? 'bg-primary text-white shadow-md'
: 'bg-gray-50 text-gray-600 hover:bg-gray-100'
]"
@click="handleSupplyModeTabClick(tab.value)"
>
<span class="font-medium">{{ tab.label }}</span>
</div>
</div>
<div class="flex items-center gap-2 flex-wrap">
<span class="text-gray-500 text-sm font-medium w-20 shrink-0">快递方式</span>
<div
v-for="tab in expressCompanyTabs"
:key="'ec-' + String(tab.value)"
:class="[
'px-4 py-1.5 rounded-lg cursor-pointer transition-all duration-200 select-none text-sm',
queryParams.express_company === tab.value
? 'bg-primary text-white shadow-md'
: 'bg-gray-50 text-gray-600 hover:bg-gray-100'
]"
@click="handleExpressCompanyTabClick(tab.value)"
>
<span class="font-medium">{{ tab.label }}</span>
</div>
</div>
</div>
</el-card>
@@ -97,12 +129,12 @@
<p class="relative mt-2 text-xs text-slate-500 leading-relaxed">
{{ listStats.periodLine }}
</p>
<p class="relative mt-1.5 text-xs text-slate-400 leading-relaxed">
<!-- <p class="relative mt-1.5 text-xs text-slate-400 leading-relaxed">
{{ listStats.orderSplitHint }}
</p>
<p class="relative mt-0.5 text-xs text-slate-400 leading-relaxed">
{{ listStats.scopeHint }}
</p>
</p> -->
</div>
<div
class="po-stat-surface po-stat-surface--pay relative overflow-hidden rounded-xl border border-slate-200/90 px-5 py-4 shadow-sm"
@@ -135,9 +167,9 @@
<p class="relative mt-2 text-xs text-slate-500 leading-relaxed">
{{ listStats.periodLine }}
</p>
<p class="relative mt-1.5 text-xs text-slate-400 leading-relaxed">
<!-- <p class="relative mt-1.5 text-xs text-slate-400 leading-relaxed">
业绩 = 除业务订单已取消(4)外关联支付金额下方为合计与已取消明细
</p>
</p> -->
</div>
</div>
<el-form class="ls-form" :model="queryParams" inline>
@@ -145,6 +177,10 @@
<DaterangePicker
v-model:startTime="queryParams.start_time"
v-model:endTime="queryParams.end_time"
picker-type="daterange"
value-format="YYYY-MM-DD"
start-placeholder="开始日期"
end-placeholder="结束日期"
class="!w-full"
/>
</el-form-item>
@@ -172,6 +208,14 @@
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item class="w-[220px]" label="快递">
<el-input
v-model="queryParams.express_keyword"
placeholder="快递单号 / 公司"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item class="w-[200px]" label="医生">
<el-select
v-model="queryParams.doctor_id"
@@ -228,11 +272,63 @@
<el-card v-loading="pager.loading" class="!border-none mt-4 po-table-card shadow-sm" shadow="never">
<div class="po-table-toolbar">
<span class="po-table-title text-gray-800">订单列表</span>
<span class="po-table-hint text-gray-400"> {{ pager.count }} </span>
<div class="po-table-toolbar__title-wrap">
<span class="po-table-title text-gray-800">订单列表</span>
<span class="po-table-hint text-gray-400"> {{ pager.count }} </span>
</div>
<div class="po-focus-board">
<div
class="po-focus-board__item is-pending-rx"
:class="{ 'is-active': activeFocusKey === 'pendingRx' }"
@click="handleFocusBoardSearch('pendingRx')"
>
<span class="po-focus-board__label">待处方审核</span>
<strong class="po-focus-board__value">{{ focusStats.pendingRx }}</strong>
</div>
<div
class="po-focus-board__item is-pending-pay"
:class="{ 'is-active': activeFocusKey === 'pendingPay' }"
@click="handleFocusBoardSearch('pendingPay')"
>
<span class="po-focus-board__label">待支付审核</span>
<strong class="po-focus-board__value">{{ focusStats.pendingPay }}</strong>
</div>
<div
class="po-focus-board__item is-pending-ship"
:class="{ 'is-active': activeFocusKey === 'pendingShip' }"
@click="handleFocusBoardSearch('pendingShip')"
>
<span class="po-focus-board__label">待发货</span>
<strong class="po-focus-board__value">{{ focusStats.pendingShip }}</strong>
</div>
<div
class="po-focus-board__item is-risk"
:class="{ 'is-active': activeFocusKey === 'risk' }"
@click="handleFocusBoardSearch('risk')"
>
<span class="po-focus-board__label">重点异常</span>
<strong class="po-focus-board__value">{{ focusStats.risk }}</strong>
</div>
</div>
</div>
<el-table :data="pager.lists" size="default" stripe class="po-data-table">
<el-table-column label="订单号" prop="order_no" min-width="150" show-overflow-tooltip />
<el-table :data="pager.lists" size="default" stripe class="po-data-table" :row-class-name="orderRowClassName">
<el-table-column label="订单号" min-width="178" show-overflow-tooltip>
<template #default="{ row }">
<div class="po-order-no-cell">
<div class="po-order-no-main">{{ row.order_no || '—' }}</div>
<div class="po-order-no-sub">
<el-tag
size="small"
effect="plain"
:type="String(row.gancao_reciperl_order_no || '').trim() ? 'success' : 'info'"
>
{{ String(row.gancao_reciperl_order_no || '').trim() ? '甘草' : '自营' }}
</el-tag>
<span class="text-gray-400">#{{ row.id }}</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="处方ID" prop="prescription_id" width="86" />
<el-table-column label="诊单ID" prop="diagnosis_id" width="86" />
<el-table-column label="收货人" min-width="100">
@@ -294,23 +390,23 @@
{{ row.internal_cost != null && row.internal_cost !== '' ? `¥${row.internal_cost}` : '—' }}
</template>
</el-table-column>
<el-table-column label="处方审核" width="96">
<el-table-column label="处方审核" width="110">
<template #default="{ row }">
<el-tag :type="auditTagType(row.prescription_audit_status)" size="small">
<el-tag :type="auditTagType(row.prescription_audit_status)" size="small" :class="statusTagClass('rx', row)">
{{ auditStatusText(row.prescription_audit_status) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="支付单审核" width="102">
<el-table-column label="支付单审核" width="110">
<template #default="{ row }">
<el-tag :type="auditTagType(row.payment_slip_audit_status)" size="small">
<el-tag :type="auditTagType(row.payment_slip_audit_status)" size="small" :class="statusTagClass('pay', row)">
{{ auditStatusText(row.payment_slip_audit_status) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="履约" width="96">
<el-table-column label="履约" width="108">
<template #default="{ row }">
<el-tag :type="fulfillmentTagType(row.fulfillment_status)" size="small">
<el-tag :type="fulfillmentTagType(row.fulfillment_status)" size="small" :class="statusTagClass('fulfillment', row)">
{{ fulfillmentText(row.fulfillment_status) }}
</el-tag>
</template>
@@ -878,7 +974,19 @@
<span class="font-medium text-[15px]">履约与收货信息</span>
</template>
<el-descriptions :column="3" border size="small" class="po-desc">
<el-descriptions-item label="诊单ID">{{ detailData.diagnosis_id }}</el-descriptions-item>
<el-descriptions-item label="诊单ID">
<span class="font-mono">{{ detailData.diagnosis_id }}</span>
<el-button
v-if="Number(detailData.diagnosis_id) > 0"
type="primary"
link
size="small"
class="ml-2 align-baseline"
@click="openDiagnosisPatientDetailFromOrder"
>
查看患者信息
</el-button>
</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ formatTime(detailData.create_time) }}</el-descriptions-item>
<el-descriptions-item label="收货人">{{ detailData.recipient_name }}</el-descriptions-item>
@@ -968,9 +1076,17 @@
<span class="font-medium text-[15px]">物流轨迹</span>
</template>
<p class="po-logistics-tip text-gray-400 text-xs mb-3 font-normal">
优先读库,无记录时走快递100顺丰建议手机后四位正确(已自动带入收货手机)
优先读库,无记录时走快递100顺丰会校验单号+电话(快递100要求完整手机号更易通过);默认预填订单收货手机,若仍提示验证码错误请改成与顺丰面单一致的号码
</p>
<div class="flex flex-wrap items-center gap-3 mb-4">
<el-input
v-model="logisticsTracePhoneTail"
clearable
maxlength="20"
placeholder="收件手机(建议11位,与面单一致)"
class="w-[180px]"
@keyup.enter="fetchLogisticsTrace"
/>
<el-select v-model="detailLogisticsExpress" placeholder="承运商" style="width: 140px">
<el-option label="自动识别" value="auto" />
<el-option label="顺丰速运" value="sf" />
@@ -1380,6 +1496,7 @@
<el-option label="尾款费用" :value="5" />
<el-option label="其他费用" :value="6" />
<el-option label="全部费用" :value="7" />
<el-option label="驼奶费用" :value="8" />
</el-select>
</el-form-item>
</el-col>
@@ -1654,6 +1771,7 @@
<el-option label="尾款费用" :value="5" />
<el-option label="其他费用" :value="6" />
<el-option label="全部费用" :value="7" />
<el-option label="驼奶费用" :value="8" />
</el-select>
</el-form-item>
<el-form-item label="支付金额" prop="pay_amount">
@@ -2132,11 +2250,14 @@
</el-card>
</div>
</el-drawer>
<!-- 与 consumer/prescription/index、诊单 edit 同一套界面:只读诊单与全部分页签 -->
<TcmDiagnosisEditView ref="diagnosisViewRef" />
</div>
</template>
<script lang="ts" setup name="prescriptionOrderList">
import { computed, onMounted, reactive, ref, nextTick, watch } from 'vue'
import { computed, onMounted, reactive, ref, nextTick, watch, defineAsyncComponent } from 'vue'
import { Refresh, Loading, ArrowDown, InfoFilled, Search, Calendar, Document, Link as LinkIcon, Wallet } from '@element-plus/icons-vue'
import DaterangePicker from '@/components/daterange-picker/index.vue'
import {
@@ -2172,8 +2293,24 @@ import { ElMessageBox } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import useUserStore from '@/stores/modules/user'
const TcmDiagnosisEditView = defineAsyncComponent(() => import('@/views/tcm/diagnosis/edit.vue'))
const userStore = useUserStore()
const diagnosisViewRef = ref<{
openViewOnly: (id: number) => Promise<void>
} | null>(null)
/** 打开关联诊单抽屉(仅查看,与 tcm/diagnosis/edit openViewOnly 一致) */
function openDiagnosisPatientDetailFromOrder() {
const id = Number(detailData.value?.diagnosis_id)
if (!id) {
feedback.msgWarning('本订单未关联诊单,无法查看患者诊单信息')
return
}
void diagnosisViewRef.value?.openViewOnly(id)
}
/** 诊间医助角色(与 DiagnosisLists 等一致) */
const TCM_ASSISTANT_ROLE_ID = 2
/** 与 server/config/project.php prescription_audit_roles 默认一致,可处方审核的角色 */
@@ -2358,10 +2495,35 @@ const fulfillmentStatusTabs = [
]
function handleFulfillmentStatusTabClick(value: number | '') {
activeFocusKey.value = ''
queryParams.fulfillment_status = value
resetPage()
}
const activeFocusKey = ref<'' | 'pendingRx' | 'pendingPay' | 'pendingShip' | 'risk'>('')
const supplyModeTabs = [
{ label: '全部', value: '' as '' | 'gancao' | 'self' },
{ label: '甘草', value: 'gancao' as const },
{ label: '自营', value: 'self' as const }
]
function handleSupplyModeTabClick(value: '' | 'gancao' | 'self') {
queryParams.supply_mode = value
resetPage()
}
const expressCompanyTabs = [
{ label: '全部', value: '' as '' | 'sf' | 'jd' },
{ label: '顺丰', value: 'sf' as const },
{ label: '京东', value: 'jd' as const }
]
function handleExpressCompanyTabClick(value: '' | 'sf' | 'jd') {
queryParams.express_company = value
resetPage()
}
const queryParams = reactive({
/** 创建时间区间(与列表筛选一致;不影响「今日」统计) */
start_time: '' as string,
@@ -2370,6 +2532,10 @@ const queryParams = reactive({
prescription_id: '' as string | number,
/** 诊单患者姓名/手机号(后台关联 diagnosis */
patient_keyword: '',
/** 快递检索:快递单号 / 快递公司 */
express_keyword: '',
/** 快递方式快捷筛选:顺丰/京东 */
express_company: '' as '' | 'sf' | 'jd',
/** 开方医生(后台:关联处方 creator_id */
doctor_id: '' as number | '',
/** 诊单医助(后台:关联诊单 assistant_id */
@@ -2378,7 +2544,9 @@ const queryParams = reactive({
assistant_dept_id: '' as number | '',
fulfillment_status: '' as number | '',
prescription_audit_status: '' as number | '',
payment_slip_audit_status: '' as number | ''
payment_slip_audit_status: '' as number | '',
/** 供货方式:甘草(已传甘草药方单号)/ 自营(无甘草单号) */
supply_mode: '' as '' | 'gancao' | 'self'
})
const rxAuditTabs = [
@@ -2395,14 +2563,47 @@ const payAuditTabs = [
]
function handleRxAuditTabClick(val: number | '') {
activeFocusKey.value = ''
queryParams.prescription_audit_status = val
resetPage()
}
function handlePayAuditTabClick(val: number | '') {
activeFocusKey.value = ''
queryParams.payment_slip_audit_status = val
resetPage()
}
function handleFocusBoardSearch(key: 'pendingRx' | 'pendingPay' | 'pendingShip' | 'risk') {
// 再点同一卡片:取消该快捷筛选
if (activeFocusKey.value === key) {
activeFocusKey.value = ''
queryParams.prescription_audit_status = ''
queryParams.payment_slip_audit_status = ''
queryParams.fulfillment_status = ''
resetPage()
return
}
activeFocusKey.value = key
// 快捷筛选统一先清掉三类状态条件,再设置目标条件
queryParams.prescription_audit_status = ''
queryParams.payment_slip_audit_status = ''
queryParams.fulfillment_status = ''
if (key === 'pendingRx') {
queryParams.prescription_audit_status = 0
} else if (key === 'pendingPay') {
queryParams.prescription_audit_status = 1
queryParams.payment_slip_audit_status = 0
} else if (key === 'pendingShip') {
queryParams.fulfillment_status = 2
} else if (key === 'risk') {
// 重点异常优先按“审核驳回”检索
queryParams.payment_slip_audit_status = 2
}
resetPage()
}
async function fetchLists(params: Record<string, unknown>) {
const p: Record<string, unknown> = { ...params }
if (p.prescription_id === '' || p.prescription_id === undefined) {
@@ -2419,6 +2620,9 @@ async function fetchLists(params: Record<string, unknown>) {
if (p.payment_slip_audit_status === '' || p.payment_slip_audit_status === undefined) {
delete p.payment_slip_audit_status
}
if (!p.supply_mode || p.supply_mode === '') {
delete p.supply_mode
}
if (p.doctor_id === '' || p.doctor_id === undefined || p.doctor_id === null) {
delete p.doctor_id
} else {
@@ -2436,9 +2640,19 @@ async function fetchLists(params: Record<string, unknown>) {
}
if (!p.order_no) delete p.order_no
if (!String(p.patient_keyword || '').trim()) delete p.patient_keyword
if (!String(p.express_keyword || '').trim()) delete p.express_keyword
if (!p.express_company || p.express_company === '') delete p.express_company
if (!String(p.start_time || '').trim() || !String(p.end_time || '').trim()) {
delete p.start_time
delete p.end_time
} else {
// 当前页面按“日”筛选:请求接口时展开为整天区间,避免结束日只落在 00:00:00。
const st = String(p.start_time || '').trim()
const et = String(p.end_time || '').trim()
if (/^\d{4}-\d{2}-\d{2}$/.test(st) && /^\d{4}-\d{2}-\d{2}$/.test(et)) {
p.start_time = `${st} 00:00:00`
p.end_time = `${et} 23:59:59`
}
}
return prescriptionOrderLists(p)
}
@@ -2541,6 +2755,44 @@ const listStats = computed(() => {
}
})
const focusStats = computed(() => {
const ex = pager.extend as Record<string, unknown> | undefined
const n = (v: unknown) => {
const x = Number(v)
if (!Number.isFinite(x) || x < 0) return 0
return Math.trunc(x)
}
const pendingRx = n(ex?.focus_pending_rx_count)
const pendingPay = n(ex?.focus_pending_pay_count)
const pendingShip = n(ex?.focus_pending_ship_count)
const risk = n(ex?.focus_risk_count)
return { pendingRx, pendingPay, pendingShip, risk }
})
function statusTagClass(type: 'rx' | 'pay' | 'fulfillment', row: any) {
const rx = Number(row?.prescription_audit_status)
const pay = Number(row?.payment_slip_audit_status)
const fs = Number(row?.fulfillment_status)
if (type === 'rx' && rx === 0) return 'po-status-tag is-focus'
if (type === 'pay' && rx === 1 && pay === 0) return 'po-status-tag is-focus'
if (type === 'fulfillment' && fs === 2) return 'po-status-tag is-focus'
if ((type === 'rx' && rx === 2) || (type === 'pay' && pay === 2) || (type === 'fulfillment' && fs === 4)) {
return 'po-status-tag is-risk'
}
return 'po-status-tag'
}
function orderRowClassName({ row }: { row: any }) {
const rx = Number(row?.prescription_audit_status)
const pay = Number(row?.payment_slip_audit_status)
const fs = Number(row?.fulfillment_status)
const phoneMismatch = recipientVsPrescriptionPhoneMismatch(row?.recipient_phone, row?.prescription_phone)
if (rx === 2 || pay === 2 || phoneMismatch) return 'po-row-risk'
if (rx === 0 || (rx === 1 && pay === 0) || fs === 2) return 'po-row-focus'
if (fs === 3 || fs === 6) return 'po-row-done'
return ''
}
watch(
showPrescriptionAuditFilter,
(show) => {
@@ -2553,17 +2805,21 @@ watch(
)
function handleReset() {
activeFocusKey.value = ''
queryParams.start_time = ''
queryParams.end_time = ''
queryParams.order_no = ''
queryParams.prescription_id = ''
queryParams.patient_keyword = ''
queryParams.express_keyword = ''
queryParams.express_company = ''
queryParams.doctor_id = ''
queryParams.assistant_id = ''
queryParams.assistant_dept_id = ''
queryParams.fulfillment_status = ''
queryParams.prescription_audit_status = ''
queryParams.payment_slip_audit_status = ''
queryParams.supply_mode = ''
resetParams()
}
@@ -2575,7 +2831,8 @@ function feeTypeText(t: number | undefined) {
4: '首付费用',
5: '尾款费用',
6: '其他费用',
7: '全部费用'
7: '全部费用',
8: '驼奶费用'
}
return m[Number(t)] ?? '—'
}
@@ -2974,6 +3231,8 @@ function formatOrderTime(v: unknown) {
const detailLogisticsExpress = ref<string>('auto')
const logisticsTraceLoading = ref(false)
const logisticsTracePayload = ref<Record<string, any> | null>(null)
/** 顺丰/快递100:与运单一致的收件手机后四位(可覆盖订单收货手机) */
const logisticsTracePhoneTail = ref('')
const detailLogs = ref<any[]>([])
@@ -3048,10 +3307,15 @@ async function fetchLogisticsTrace() {
if (!id) return
logisticsTraceLoading.value = true
try {
const res: any = await prescriptionOrderLogisticsTrace({
const digits = String(logisticsTracePhoneTail.value || '').replace(/\D/g, '')
const params: { id: number; express_company?: string; phone_tail?: string } = {
id,
express_company: detailLogisticsExpress.value
})
}
if (digits.length >= 4) {
params.phone_tail = digits
}
const res: any = await prescriptionOrderLogisticsTrace(params)
logisticsTracePayload.value = (res?.data ?? res) as Record<string, any>
} catch {
logisticsTracePayload.value = null
@@ -3135,6 +3399,7 @@ async function openDetail(id: number) {
detailUnlinkedPayOrders.value = []
logisticsTracePayload.value = null
detailLogisticsExpress.value = 'auto'
logisticsTracePhoneTail.value = ''
detailLogs.value = []
detailVisible.value = true
@@ -3145,6 +3410,8 @@ async function openDetail(id: number) {
detailData.value = d
if (d) {
detailLogisticsExpress.value = String(d.express_company || 'auto') || 'auto'
const dig = String(d.recipient_phone || '').replace(/\D/g, '')
logisticsTracePhoneTail.value = dig.length >= 4 ? dig : ''
if (String(d.tracking_number || '').trim()) {
fetchLogisticsTrace()
}
@@ -4605,21 +4872,142 @@ async function downloadPrescriptionSlipPdf() {
.po-table-toolbar {
display: flex;
align-items: baseline;
align-items: center;
justify-content: space-between;
gap: 14px;
flex-wrap: wrap;
margin-bottom: 14px;
}
.po-table-toolbar__title-wrap {
display: flex;
align-items: baseline;
gap: 10px;
}
.po-table-title {
font-size: 16px;
font-weight: 600;
}
.po-focus-board {
display: grid;
grid-template-columns: repeat(4, minmax(106px, 1fr));
gap: 8px;
width: min(100%, 520px);
}
.po-focus-board__item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
border-radius: 8px;
border: 1px solid var(--el-border-color-lighter);
background: #fff;
padding: 7px 10px;
cursor: pointer;
transition: all 0.18s ease;
}
.po-focus-board__item:hover {
transform: translateY(-1px);
box-shadow: 0 8px 20px -14px rgba(15, 23, 42, 0.38);
}
.po-focus-board__item.is-active {
box-shadow: 0 0 0 2px color-mix(in srgb, var(--el-color-primary) 24%, transparent) inset;
transform: translateY(-1px);
}
.po-focus-board__label {
font-size: 12px;
color: var(--el-text-color-secondary);
}
.po-focus-board__value {
font-size: 18px;
line-height: 1;
font-weight: 700;
color: var(--el-text-color-primary);
font-variant-numeric: tabular-nums;
}
.po-focus-board__item.is-pending-rx {
border-color: color-mix(in srgb, var(--el-color-warning) 34%, #fff);
background: color-mix(in srgb, var(--el-color-warning-light-9) 66%, #fff);
}
.po-focus-board__item.is-pending-pay {
border-color: color-mix(in srgb, #2563eb 30%, #fff);
background: color-mix(in srgb, #dbeafe 62%, #fff);
}
.po-focus-board__item.is-pending-ship {
border-color: color-mix(in srgb, var(--el-color-primary) 30%, #fff);
background: color-mix(in srgb, var(--el-color-primary-light-9) 64%, #fff);
}
.po-focus-board__item.is-risk {
border-color: color-mix(in srgb, var(--el-color-danger) 34%, #fff);
background: color-mix(in srgb, var(--el-color-danger-light-9) 66%, #fff);
}
@media (max-width: 1024px) {
.po-focus-board {
width: 100%;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
.po-data-table :deep(th.el-table__cell) {
font-weight: 600;
background: var(--el-fill-color-light) !important;
}
.po-order-no-cell {
display: flex;
flex-direction: column;
gap: 4px;
}
.po-order-no-main {
font-weight: 600;
color: var(--el-text-color-primary);
line-height: 1.35;
}
.po-order-no-sub {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 12px;
}
.po-status-tag {
font-weight: 600;
}
.po-status-tag.is-focus {
box-shadow: 0 0 0 1px color-mix(in srgb, var(--el-color-warning) 24%, transparent) inset;
}
.po-status-tag.is-risk {
box-shadow: 0 0 0 1px color-mix(in srgb, var(--el-color-danger) 30%, transparent) inset;
}
.po-data-table :deep(.el-table__row.po-row-focus > td.el-table__cell) {
background: color-mix(in srgb, var(--el-color-warning-light-9) 38%, #fff) !important;
}
.po-data-table :deep(.el-table__row.po-row-risk > td.el-table__cell) {
background: color-mix(in srgb, var(--el-color-danger-light-9) 42%, #fff) !important;
}
.po-data-table :deep(.el-table__row.po-row-done > td.el-table__cell) {
background: color-mix(in srgb, var(--el-color-success-light-9) 24%, #fff) !important;
}
/* 改版 Drawer 样式 */
.po-detail-drawer :deep(.el-drawer__header) {
margin-bottom: 0;
File diff suppressed because it is too large Load Diff