From 01ee694a3bb8048372fc793a8de314d70b688b35 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期日, 18 十月 2026 22:36:21 +0800
Subject: [PATCH] 修改了工位
---
src/views/ecg/checktype/QueueSequenceForm.vue | 320 +++++++++++++++++++++++++++++++++++++---------------
1 files changed, 225 insertions(+), 95 deletions(-)
diff --git a/src/views/ecg/checktype/QueueSequenceForm.vue b/src/views/ecg/checktype/QueueSequenceForm.vue
index 6b43610..56844a0 100644
--- a/src/views/ecg/checktype/QueueSequenceForm.vue
+++ b/src/views/ecg/checktype/QueueSequenceForm.vue
@@ -7,7 +7,7 @@
鑳屾櫙锛氳琛ㄥ師鍏堟瘡澶╄嚜鍔ㄧ敓鎴愶紝鐜板凡鏀逛负鎵嬪伐缁存姢锛屾鍓嶆病鏈夌淮鎶ょ晫闈€��
-->
- <Dialog :title="dialogTitle" v-model="dialogVisible" width="1000px">
+ <Dialog :title="dialogTitle" v-model="dialogVisible" width="65%" >
<!-- 椤堕儴璇存槑锛氳繖浜涘瓧娈电殑鍚箟涓�"姣忔棩閲嶇疆"鐨勫叧绯� -->
<el-alert type="info" :closable="false" class="mb-10px">
<template #title>
@@ -19,7 +19,8 @@
<div class="text-12px leading-5">
路 <b>璧峰搴忓彿</b>锛氭瘡澶╄嚜鍔ㄩ噸缃椂鍥炲埌璇ュ�硷紱<b>涓婇檺</b>锛氬埌杈惧悗璇ユ椂娈佃涓恒�屽凡婊°�嶏紝鎮h�呯鍒颁細椤哄欢鍒板悗缁椂娈点��<br />
路 <b>褰撳墠搴忓彿</b>锛氬凡鍙戝埌鍑犲彿锛屼竴鑸棤闇�鎵嬪伐鏀癸紙姣忔棩閲嶇疆浼氳嚜鍔ㄥ洖鍒�"璧峰搴忓彿"锛夈��<br />
- 路 <b>搴忓彿涓婇檺蹇呴』澶т簬璧峰搴忓彿</b>锛屽惁鍒欒鏃舵姘歌繙鏃犳硶鍙栧彿銆�<br />
+ 路 <b>棰勫畾棰濆害</b> = 涓婇檺 鈭� 璧峰搴忓彿锛堝彧璇伙級銆�<b>涓婇檺 = 璧峰搴忓彿 琛ㄧず璇ユ椂娈垫病鏈夊悕棰�</b>锛堝厑璁镐繚瀛橈紝棰勫畾棰濆害鏄剧ず 0 骞舵爣绾級銆�<br />
+ 路 涓婇檺 <b>涓嶈兘灏忎簬</b>璧峰搴忓彿锛屽惁鍒欒鏃舵姘歌繙鏃犳硶鍙栧彿銆�<br />
路 鍚屼竴妫�鏌ラ」鐩笅<b>鍚屼竴鏃舵鍙兘鏈変竴鏉¤鍒�</b>锛岄噸澶嶆坊鍔犱細琚嫆缁濄��
</div>
</el-alert>
@@ -36,107 +37,155 @@
</span>
</div>
- <el-table v-loading="loading" :data="list" :stripe="true" border height="420px">
- <el-table-column label="鏃舵" align="center" min-width="130px">
+ <el-table
+ v-loading="loading"
+ :data="list"
+ :stripe="true"
+ border
+ class="qs-table"
+ height="calc(100vh - 300px)"
+ >
+ <!-- ============ 鈶� 鏃舵 ============ -->
+ <el-table-column label="鏃舵" align="center" width="96">
<template #default="scope">
- <b>{{ formatTimeSlot(scope.row.timeSlot) }}</b>
- <div class="text-11px text-gray-400">{{ scope.row.timeSlot }}</div>
+ <b class="text-12px" :title="String(scope.row.timeSlot ?? '')">
+ {{ formatTimeSlot(scope.row.timeSlot) }}
+ </b>
</template>
</el-table-column>
- <el-table-column label="鏅��-璧峰搴忓彿" align="center" min-width="120px">
- <template #default="scope">
- <el-input-number
- v-model="scope.row.queueSet"
- :min="0"
- :controls="false"
- size="small"
- style="width: 100%"
- @change="markChanged(scope.row)"
- />
- </template>
- </el-table-column>
- <el-table-column label="鏅��-涓婇檺" align="center" min-width="110px">
- <template #default="scope">
- <el-input-number
- v-model="scope.row.queueFull"
- :min="1"
- :controls="false"
- size="small"
- style="width: 100%"
- @change="markChanged(scope.row)"
- />
- </template>
- </el-table-column>
- <el-table-column label="鏅��-褰撳墠搴忓彿" align="center" min-width="115px">
- <template #default="scope">
- <el-input-number
- v-model="scope.row.queueNo"
- :min="0"
- :controls="false"
- size="small"
- style="width: 100%"
- @change="markChanged(scope.row)"
- />
- </template>
+ <!-- ============ 鈶� 姝e父棰勭害 ============ -->
+ <el-table-column label="姝e父棰勭害" align="center">
+ <el-table-column label="璧峰搴忓彿" align="center" width="90">
+ <template #default="scope">
+ <el-input-number
+ v-model="scope.row.queueSet"
+ :min="0"
+ :controls="false"
+ size="small"
+ style="width: 100%"
+ @change="markChanged(scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="涓婇檺" align="center" width="80">
+ <template #default="scope">
+ <el-input-number
+ v-model="scope.row.queueFull"
+ :min="0"
+ :controls="false"
+ size="small"
+ style="width: 100%"
+ @change="markChanged(scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="棰勫畾棰濆害" align="center" width="90">
+ <template #default="scope">
+ <span
+ class="qs-quota"
+ :class="{ 'qs-quota--zero': quotaOf(scope.row.queueSet, scope.row.queueFull) <= 0 }"
+ :title="`涓婇檺 ${scope.row.queueFull ?? 0} 鈭� 璧峰 ${scope.row.queueSet ?? 0}`"
+ >
+ {{ quotaOf(scope.row.queueSet, scope.row.queueFull) }}
+ </span>
+ </template>
+ </el-table-column>
+ <el-table-column label="褰撳墠搴忓彿" align="center" width="90">
+ <template #default="scope">
+ <el-input-number
+ v-model="scope.row.queueNo"
+ :min="0"
+ :controls="false"
+ size="small"
+ style="width: 100%"
+ @change="markChanged(scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="鐘舵��" align="center" width="90">
+ <template #default="scope">
+ <el-tag v-if="isFull(scope.row)" type="danger" size="small">宸叉弧</el-tag>
+ <el-tag v-else type="success" size="small">鍙彇鍙�</el-tag>
+ </template>
+ </el-table-column>
</el-table-column>
- <el-table-column label="VIP-璧峰搴忓彿" align="center" min-width="115px">
- <template #default="scope">
- <el-input-number
- v-model="scope.row.queueVipSet"
- :min="0"
- :controls="false"
- size="small"
- style="width: 100%"
- @change="markChanged(scope.row)"
- />
- </template>
- </el-table-column>
- <el-table-column label="VIP-涓婇檺" align="center" min-width="105px">
- <template #default="scope">
- <el-input-number
- v-model="scope.row.queueVipFull"
- :min="1"
- :controls="false"
- size="small"
- style="width: 100%"
- @change="markChanged(scope.row)"
- />
- </template>
- </el-table-column>
- <el-table-column label="VIP-褰撳墠搴忓彿" align="center" min-width="110px">
- <template #default="scope">
- <el-input-number
- v-model="scope.row.queueVipNo"
- :min="0"
- :controls="false"
- size="small"
- style="width: 100%"
- @change="markChanged(scope.row)"
- />
- </template>
+ <!-- ============ 鈶� 棰勭暀 ============ -->
+ <el-table-column label="棰勭暀" align="center">
+ <el-table-column label="璧峰搴忓彿" align="center" width="90">
+ <template #default="scope">
+ <el-input-number
+ v-model="scope.row.queueVipSet"
+ :min="0"
+ :controls="false"
+ size="small"
+ style="width: 100%"
+ @change="markChanged(scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="涓婇檺" align="center" width="80">
+ <template #default="scope">
+ <el-input-number
+ v-model="scope.row.queueVipFull"
+ :min="0"
+ :controls="false"
+ size="small"
+ style="width: 100%"
+ @change="markChanged(scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="棰勫畾棰濆害" align="center" width="90">
+ <template #default="scope">
+ <span
+ class="qs-quota"
+ :class="{ 'qs-quota--zero': quotaOf(scope.row.queueVipSet, scope.row.queueVipFull) <= 0 }"
+ :title="`涓婇檺 ${scope.row.queueVipFull ?? 0} 鈭� 璧峰 ${scope.row.queueVipSet ?? 0}`"
+ >
+ {{ quotaOf(scope.row.queueVipSet, scope.row.queueVipFull) }}
+ </span>
+ </template>
+ </el-table-column>
+ <el-table-column label="褰撳墠搴忓彿" align="center" width="90">
+ <template #default="scope">
+ <el-input-number
+ v-model="scope.row.queueVipNo"
+ :min="0"
+ :controls="false"
+ size="small"
+ style="width: 100%"
+ @change="markChanged(scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="鐘舵��" align="center" width="90">
+ <template #default="scope">
+ <el-tag v-if="isFullVip(scope.row)" type="danger" size="small">宸叉弧</el-tag>
+ <el-tag v-else type="success" size="small">鍙彇鍙�</el-tag>
+ </template>
+ </el-table-column>
</el-table-column>
- <el-table-column label="鐘舵��" align="center" width="90px">
- <template #default="scope">
- <el-tag v-if="isFull(scope.row)" type="danger" size="small">宸叉弧</el-tag>
- <el-tag v-else type="success" size="small">鍙彇鍙�</el-tag>
- </template>
- </el-table-column>
-
- <el-table-column label="鎿嶄綔" align="center" width="160px" fixed="right">
+ <!-- ============ 鈶� 鎿嶄綔 ============ -->
+ <el-table-column label="鎿嶄綔" align="center" width="160" fixed="right">
<template #default="scope">
<el-button
link
type="primary"
:loading="savingId === scope.row.id"
+
@click="handleRowSave(scope.row)"
>
淇濆瓨
</el-button>
- <el-button link type="primary" @click="openForm('update', scope.row)">缂栬緫</el-button>
- <el-button link type="danger" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
+ <el-button link type="primary" @click="openForm('update', scope.row)">
+ 缂栬緫
+ </el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)">
+ 鍒犻櫎
+ </el-button>
</template>
</el-table-column>
</el-table>
@@ -174,13 +223,15 @@
<el-input-number v-model="formData.queueSet" :min="0" class="w-full" />
</el-form-item>
<el-form-item label="鏅��-涓婇檺" prop="queueFull">
- <el-input-number v-model="formData.queueFull" :min="1" class="w-full" />
+ <!-- 銆愭湰娆¢渶姹傘�戜笂闄愬厑璁哥瓑浜庤捣濮嬪簭鍙凤紙=璇ユ椂娈垫棤鍚嶉锛夛紝鏁� min 鏀逛负 0 -->
+ <el-input-number v-model="formData.queueFull" :min="0" class="w-full" />
</el-form-item>
<el-form-item label="VIP-璧峰搴忓彿" prop="queueVipSet">
<el-input-number v-model="formData.queueVipSet" :min="0" class="w-full" />
</el-form-item>
<el-form-item label="VIP-涓婇檺" prop="queueVipFull">
- <el-input-number v-model="formData.queueVipFull" :min="1" class="w-full" />
+ <!-- 銆愭湰娆¢渶姹傘�戝悓鏅�氫笂闄愶細鍏佽绛変簬璧峰搴忓彿 -->
+ <el-input-number v-model="formData.queueVipFull" :min="0" class="w-full" />
</el-form-item>
<el-form-item label="鏅��-褰撳墠搴忓彿">
<el-input-number v-model="formData.queueNo" :min="0" class="w-full" />
@@ -256,8 +307,23 @@
{
validator: (_rule: any, value: any, callback: any) => {
const set = formData.value.queueSet
- if (value !== undefined && value !== null && set !== undefined && set !== null && value <= set) {
- callback(new Error('涓婇檺蹇呴』澶т簬璧峰搴忓彿锛屽惁鍒欒鏃舵鏃犳硶鍙栧彿'))
+ // 銆愭湰娆¢渶姹傘�戜笂闄� = 璧峰搴忓彿 鏄�**鍚堟硶**鐨勶細琛ㄧず璇ユ椂娈垫病鏈夊悕棰濓紙棰勫畾棰濆害 0锛夛紝鍏佽淇濆瓨銆�
+ // 鍙湁銆屼笂闄� < 璧峰搴忓彿銆嶆墠鏄厤缃敊璇紙璇ユ椂娈垫案杩滄棤娉曞彇鍙凤級銆�
+ if (value !== undefined && value !== null && set !== undefined && set !== null && value < set) {
+ callback(new Error('涓婇檺涓嶈兘灏忎簬璧峰搴忓彿锛堢瓑浜庤〃绀鸿鏃舵娌℃湁鍚嶉锛�'))
+ } else {
+ callback()
+ }
+ },
+ trigger: 'blur'
+ }
+ ],
+ queueVipFull: [
+ {
+ validator: (_rule: any, value: any, callback: any) => {
+ const set = formData.value.queueVipSet
+ if (value !== undefined && value !== null && set !== undefined && set !== null && value < set) {
+ callback(new Error('棰勭暀涓婇檺涓嶈兘灏忎簬棰勭暀璧峰搴忓彿锛堢瓑浜庤〃绀洪鐣欐病鏈夊悕棰濓級'))
} else {
callback()
}
@@ -306,15 +372,47 @@
}
}
-/** 璇ユ椂娈垫槸鍚﹀凡婊★紙褰撳墠搴忓彿 >= 涓婇檺锛� */
-const isFull = (row: QueueSequenceVO) =>
- (row.queueNo ?? 0) >= (row.queueFull ?? 0) && (row.queueFull ?? 0) > 0
+/**
+ * 棰勫畾棰濆害 = 涓婇檺 鈭� 璧峰搴忓彿锛堝皬浜� 0 鎸� 0 鏄剧ず锛夈��
+ *
+ * 銆愭湰娆¢渶姹傘�戣鍒楀彧璇伙紝鍊间负 0 鏃跺崟鍏冩牸娴呯孩搴� 鈥斺�� 琛ㄧず杩欎釜鏃舵**娌℃湁鍚嶉**銆�
+ * 銆屼笂闄� = 璧峰搴忓彿銆嶆槸鍚堟硶閰嶇疆锛堟棤鍚嶉鏃舵锛夛紝涓嶅啀褰撲綔閿欒銆�
+ */
+const quotaOf = (set?: number | null, full?: number | null) =>
+ Math.max(0, (full ?? 0) - (set ?? 0))
+
+/**
+ * 璇ユ椂娈垫槸鍚﹀凡婊★紙姝e父棰勭害锛夈��
+ *
+ * 婊$殑涓ょ鎯呭舰锛�
+ * 鈶� 棰勫畾棰濆害 <= 0锛堜笂闄� <= 璧峰搴忓彿锛夆啋 鏈潵灏辨病鏈夊悕棰濓紱
+ * 鈶� 褰撳墠搴忓彿宸茶揪鍒颁笂闄愩��
+ */
+const isFull = (row: QueueSequenceVO) => {
+ if (quotaOf(row.queueSet, row.queueFull) <= 0) return true
+ return (row.queueNo ?? 0) >= (row.queueFull ?? 0)
+}
+
+/** 璇ユ椂娈垫槸鍚﹀凡婊★紙棰勭暀缁勶級锛屽彛寰勫悓涓� */
+const isFullVip = (row: QueueSequenceVO) => {
+ if (quotaOf(row.queueVipSet, row.queueVipFull) <= 0) return true
+ return (row.queueVipNo ?? 0) >= (row.queueVipFull ?? 0)
+}
/** 琛屽唴淇濆瓨锛堝彧鏀规暟鍊硷紝涓嶅姩鏃舵锛� */
const handleRowSave = async (row: QueueSequenceVO) => {
if (!row.id) return
- if ((row.queueFull ?? 0) <= (row.queueSet ?? 0)) {
- message.error(`鏃舵 ${formatTimeSlot(row.timeSlot)}锛氫笂闄愬繀椤诲ぇ浜庤捣濮嬪簭鍙穈)
+ // 銆愭湰娆¢渶姹傘�戝彧鏈夈�屼笂闄� < 璧峰搴忓彿銆嶆墠鏄敊璇紱鐩哥瓑琛ㄧず璇ユ椂娈垫病鏈夊悕棰濓紝鍏佽淇濆瓨銆�
+ if ((row.queueFull ?? 0) < (row.queueSet ?? 0)) {
+ message.error(
+ `鏃舵 ${formatTimeSlot(row.timeSlot)}锛氫笂闄愪笉鑳藉皬浜庤捣濮嬪簭鍙凤紙绛変簬琛ㄧず璇ユ椂娈垫病鏈夊悕棰濓級`
+ )
+ return
+ }
+ if ((row.queueVipFull ?? 0) < (row.queueVipSet ?? 0)) {
+ message.error(
+ `鏃舵 ${formatTimeSlot(row.timeSlot)}锛氶鐣欎笂闄愪笉鑳藉皬浜庨鐣欒捣濮嬪簭鍙凤紙绛変簬琛ㄧず棰勭暀娌℃湁鍚嶉锛塦
+ )
return
}
savingId.value = row.id
@@ -388,3 +486,35 @@
await getList()
}
</script>
+
+<style scoped lang="scss">
+/*
+ 銆愭湰娆¤皟鏁淬�戝瓧鍙锋仮澶嶄负绯荤粺榛樿锛�**鍏佽妯悜婊氬姩**锛�
+ 路 涓嶅啀鍘嬬缉瀛楀彿涓庡唴杈硅窛 鈥斺�� 琛ㄤ綋鎭㈠榛樿瀛楀彿锛�14px锛夈�佽緭鍏ユ榛樿瀛楀彿銆佺姸鎬佹爣绛剧敤 small 榛樿鏍峰紡锛�
+ 路 鍒楀鐢辨ā鏉垮浐瀹氾紙鏃舵 96 + 姝e父棰勭害 5 鍒� + 棰勭暀 5 鍒� + 鎿嶄綔 160锛夛紱
+ 鎬诲瓒呰繃寮圭獥瀹藉害鏃惰〃鏍煎嚭鐜�**妯悜婊氬姩鏉�**锛屾搷浣滃垪 fixed="right" 濮嬬粓鍙锛�
+ 路 琛ㄦ牸楂樺害 calc(100vh - 300px)锛氱珫鍚戝鏄剧ず鍑犺锛岄〉闈㈡湰韬笉鍑虹幇婊氬姩鏉°��
+*/
+.qs-table {
+ /* 琛屽唴鏁板瓧杈撳叆鍗犳弧鍗曞厓鏍硷紙涓嶇缉灏忓瓧鍙凤紝鍙帶鍒跺搴︼級 */
+ :deep(.el-input-number) {
+ width: 100%;
+ }
+}
+
+/* 棰勫畾棰濆害锛堝彧璇伙級锛氬�间负 0 鏃舵祬绾㈠簳锛岃〃绀鸿鏃舵娌℃湁鍚嶉 */
+.qs-quota {
+ display: inline-block;
+ padding: 1px 6px;
+ border-radius: 3px;
+ font-weight: 600;
+ font-variant-numeric: tabular-nums;
+ color: var(--el-text-color-primary);
+}
+
+.qs-quota--zero {
+ color: var(--el-color-danger);
+ background-color: var(--el-color-danger-light-9);
+ box-shadow: inset 0 0 0 1px var(--el-color-danger-light-5);
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.3