From 636bd027a92d4bf669410ee550a5ca6324f72c88 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期一, 27 十月 2025 17:30:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
UI-Project/src/views/EngineerScheduling/engineerScheduling.vue | 670 ++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 507 insertions(+), 163 deletions(-)
diff --git a/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue b/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
index 683aa1b..ee56256 100644
--- a/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
+++ b/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
@@ -1,161 +1,201 @@
<script lang="ts" setup>
-import { ref, computed, watch, onMounted } from 'vue'
-import { useI18n } from 'vue-i18n'
-import { ElMessage, ElTransfer, ElTabs, ElTabPane, ElButton } from 'element-plus'
+import {ref, computed, watch, onMounted} from 'vue'
+import {useI18n} from 'vue-i18n'
+import {ElMessage, ElTransfer, ElTabs, ElTabPane, ElButton} from 'element-plus'
import request from '@/utils/request'
-const { t } = useI18n()
+const {t} = useI18n()
const activeTab = ref('cutting1')
// Transfer缁勪欢鎵�闇�鐨勬暟鎹牸寮�
interface TransferDataItem {
- key: string
- label: string
- projectNo: string
- projectName: string
+ key: string
+ label: string
+ projectNo: string
+ projectName: string
}
-// 鎵�鏈夊彲閫夋暟鎹紙宸︿晶锛�
+// Transfer缁勪欢鎵�闇�鐨勬暟鎹牸寮� - 瀹屽杽瀛楁瀹氫箟
+interface TransferDataItem {
+ key: string
+ projectNo: string
+ projectName: string
+ state?: number
+ type?: number
+ glassThickness?: string // 鐜荤拑鍘氬害
+ glassType?: string // 鐜荤拑绫诲瀷
+ glassTotal?: number // 鐜荤拑鎬绘暟
+ glassTotalArea?: number // 鐜荤拑鎬婚潰绉�
+}
+
+// 鎵�鏈夊彲閫夋暟鎹紙宸︿晶琛ㄦ牸锛�
const dataSource = ref<TransferDataItem[]>([])
-// 宸查�夋暟鎹殑keys锛堝彸渚э級
-const targetKeys = ref<string[]>([])
-
-// 鏍规嵁褰撳墠鏍囩椤佃幏鍙栧彸渚у垪琛ㄦ爣棰�
-const getRightListTitle = computed(() => {
- switch (activeTab.value) {
- case 'cutting1':
- return t('large.countOutOne')
- case 'cutting2':
- return t('large.countOutTwo')
- case 'tempered':
- return t('large.temp')
- default:
- return '宸叉帓浜�'
+// 宸查�夋暟鎹紙鍙充晶琛ㄦ牸锛�
+const rightDataSource = ref<TransferDataItem[]>([])
+// 宸︿晶琛ㄦ牸閫変腑椤�
+const selectedLeft = ref<TransferDataItem[]>([])
+// 鍙充晶琛ㄦ牸閫変腑椤�
+const selectedRight = ref<TransferDataItem[]>([])
+// 璇︽儏鏁版嵁鐘舵�侊紙鏀逛负鏁扮粍绫诲瀷锛岄�傚簲鍒楄〃杩斿洖锛�
+const detailData = ref<any[]>([]);
+const showDetail = ref(false);
+// 鑾峰彇椤圭洰璇︽儏鎺ュ彛锛堟洿鏂颁负瀹為檯鎺ュ彛锛�
+const fetchProjectDetail = async (projectNo: string) => {
+ try {
+ const response = await request.post('/loadGlass/optimizeProject/selectProgress', {
+ projectNo: projectNo // 浼犲叆宸ョ▼ID锛坧rojectNo锛�
+ });
+ if (response.code === 200) {
+ detailData.value = response.data; // 鍋囪杩斿洖鏁扮粍
+ showDetail.value = true;
+ } else {
+ ElMessage.error(`鑾峰彇璇︽儏澶辫触: ${response.message || '鏈煡閿欒'}`);
}
-})
+ } catch (error) {
+ console.error('鑾峰彇椤圭洰璇︽儏澶辫触:', error);
+ ElMessage.error('鑾峰彇璇︽儏澶辫触锛岃绋嶅悗閲嶈瘯');
+ }
+};
-// 鑾峰彇宸︿晶鏁版嵁婧�
+// 鑾峰彇宸︿晶鏁版嵁婧� - 鏇存柊鏄犲皠閫昏緫锛堝寘鍚墍鏈夊瓧娈碉級
const fetchDataSource = async () => {
- try {
- // 鏍规嵁褰撳墠鏍囩椤甸�夋嫨涓嶅悓鐨勬帴鍙�
- const apiUrl = activeTab.value === 'tempered'
- ? '/cacheVerticalGlass/bigStorageCageDetails/queryEngineer'
- : '/loadGlass/optimizeProject/queryEngineer';
+ try {
+ const apiUrl = activeTab.value === 'tempered'
+ ? '/cacheVerticalGlass/bigStorageCageDetails/queryEngineer'
+ : '/loadGlass/optimizeProject/queryEngineer';
- const response = await request.post(apiUrl)
+ const response = await request.post(apiUrl)
- if (response.code === 200) {
- dataSource.value = response.data.map((item: any) => {
- const projectNo = activeTab.value === 'tempered' ? item.engineerId : item.projectNo
- const name = activeTab.value === 'tempered' ? item.engineerId : (item.projectNo + "-" + item.projectName)
-
- return {
- key: projectNo,
- label: name,
- projectNo: projectNo,
- projectName: activeTab.value === 'tempered' ? '' : item.projectName
- }
- })
- } else {
- ElMessage.error(`鑾峰彇鏁版嵁澶辫触: ${response.message || '鏈煡閿欒'}`)
- }
- } catch (error) {
- console.error('鑾峰彇宸︿晶鏁版嵁澶辫触:', error)
- ElMessage.error('璇风◢鍚庨噸璇�')
+ if (response.code === 200) {
+ dataSource.value = response.data.map((item: any) => ({
+ key: activeTab.value === 'tempered' ? item.engineerId : item.projectNo,
+ projectNo: activeTab.value === 'tempered' ? item.engineerId : item.projectNo,
+ projectName: item.projectName || '',
+ state: item.state,
+ type: item.type,
+ glassThickness: item.glassThickness || '',
+ glassType: item.glassType || '',
+ glassTotal: item.glassTotal || 0,
+ glassTotalArea: item.glassTotalArea || 0
+ }))
+ } else {
+ ElMessage.error(`鑾峰彇鏁版嵁澶辫触: ${response.message || '鏈煡閿欒'}`)
}
+ } catch (error) {
+ console.error('鑾峰彇宸︿晶鏁版嵁澶辫触:', error)
+ ElMessage.error('璇风◢鍚庨噸璇�')
+ }
}
-// 鑾峰彇鍙充晶宸查�夋暟鎹�
+// 鑾峰彇鍙充晶宸查�夋暟鎹� - 鐩存帴濉厖鍙充晶琛ㄦ牸
const fetchTargetKeys = async () => {
- try {
- // 鏍规嵁褰撳墠鏍囩椤电‘瀹歵ype鍙傛暟
- let type = 1; // 榛樿鍒囧壊涓�绾�
- if (activeTab.value === 'cutting2') {
- type = 2; // 鍒囧壊浜岀嚎
- } else if (activeTab.value === 'tempered') {
- type = 3; // 閽㈠寲
- }
-
- const response = await request.post('/loadGlass/optimizeProject/engineerScheduling', {
- type: type
- })
-
- if (response.code === 200) {
- // 瀵逛簬鎵�鏈夋爣绛鹃〉锛屼娇鐢╬rojectNo浣滀负key
- targetKeys.value = response.data.map((item: any) => item.projectNo)
-
- // 灏嗗彸渚ф暟鎹坊鍔犲埌dataSource涓紝纭繚Transfer缁勪欢鑳芥壘鍒板搴旂殑椤�
- response.data.forEach((item: any) => {
- // 妫�鏌ataSource涓槸鍚﹀凡瀛樺湪璇ラ」
- const exists = dataSource.value.some(dataItem => dataItem.key === item.projectNo)
- if (!exists) {
- // 濡傛灉涓嶅瓨鍦紝娣诲姞鍒癲ataSource涓�
- const newItem: TransferDataItem = {
- key: item.projectNo,
- label: `${item.projectNo}-${item.projectName || 'null'}`,
- projectNo: item.projectNo,
- projectName: item.projectName || ''
- }
- dataSource.value.push(newItem)
- }
- })
- } else {
- ElMessage.error(`鑾峰彇鏁版嵁澶辫触: ${response.message || '鏈煡閿欒'}`)
- }
- } catch (error) {
- console.error('鑾峰彇鍙充晶鏁版嵁澶辫触:', error)
- ElMessage.error('璇风◢鍚庨噸璇�')
+ try {
+ let type = 1;
+ let response;
+ if (activeTab.value === 'cutting2') {
+ type = 2;
+ response = await request.post('/loadGlass/optimizeProject/engineerScheduling', {type})
+ } else if (activeTab.value === 'tempered') {
+ type = 3;
+ response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/queryTemperingOrder')
+ } else {
+ response = await request.post('/loadGlass/optimizeProject/engineerScheduling', {type})
}
+ if (response.code === 200) {
+ // 鍙充晶琛ㄦ牸鏁版嵁
+ rightDataSource.value = response.data.map((item: any) => ({
+ key: item.projectNo,
+ projectNo: item.projectNo,
+ projectName: item.projectName || '',
+ state: item.state,
+ type: item.type,
+ glassThickness: item.glassThickness || '',
+ glassType: item.glassType || '',
+ glassTotal: item.glassTotal || 0,
+ glassTotalArea: item.glassTotalArea || 0
+ }))
+
+ // 浠庡乏渚ф暟鎹簮绉婚櫎鍙充晶宸查�夋暟鎹�
+ dataSource.value = dataSource.value.filter(
+ item => !rightDataSource.value.some(rightItem => rightItem.key === item.key)
+ )
+ } else {
+ ElMessage.error(`鑾峰彇鏁版嵁澶辫触: ${response.message || '鏈煡閿欒'}`)
+ }
+ } catch (error) {
+ console.error('鑾峰彇鍙充晶鏁版嵁澶辫触:', error)
+ ElMessage.error('璇风◢鍚庨噸璇�')
+ }
}
-// 淇濆瓨鎺掍骇淇℃伅
+// 淇敼锛氭敮鎸佸崟琛屾暟鎹Щ鍔ㄥ埌鍙充晶琛ㄦ牸鏈熬
+const moveToRight = (row: TransferDataItem) => {
+ if (!row) return;
+ // 浠庡乏渚ц〃鏍肩Щ闄ゅ綋鍓嶈
+ dataSource.value = dataSource.value.filter(item => item.key !== row.key);
+ // 娣诲姞鍒板彸渚ц〃鏍兼湯灏�
+ rightDataSource.value.push(row);
+ ElMessage.success(`宸叉坊鍔犻」鐩� ${row.projectNo}`);
+}
+
+
+// 淇敼锛氭敮鎸佸崟琛屾暟鎹粠鍙充晶琛ㄦ牸绉诲洖宸︿晶琛ㄦ牸
+const moveToLeft = (row: TransferDataItem) => {
+ if (!row) return;
+
+ // 浠庡彸渚ц〃鏍肩Щ闄ゅ綋鍓嶈
+ rightDataSource.value = rightDataSource.value.filter(item => item.key !== row.key);
+
+ // 娣诲姞鍒板乏渚ц〃鏍�
+ dataSource.value.push(row);
+
+ ElMessage.success(`宸茬Щ闄ら」鐩� ${row.projectNo}`);
+}
+
+// 鏇存柊淇濆瓨閫昏緫 - 浣跨敤鍙充晶琛ㄦ牸鏁版嵁
const saveScheduling = async () => {
- try {
- // 鏍规嵁褰撳墠鏍囩椤电‘瀹歵ype鍙傛暟
- let type = 1; // 榛樿鍒囧壊涓�绾�
- if (activeTab.value === 'cutting2') {
- type = 2; // 鍒囧壊浜岀嚎
- } else if (activeTab.value === 'tempered') {
- type = 3; // 閽㈠寲
- }
+ try {
+ let type = 1;
+ if (activeTab.value === 'cutting2') type = 2;
+ else if (activeTab.value === 'tempered') type = 3;
- const engineerList = targetKeys.value.map(projectNo => {
- const dataItem = dataSource.value.find(item => item.key === projectNo)
- return {
- projectNo: projectNo,
- projectName: dataItem ? dataItem.projectName : ''
- }
- })
+ // 鍙充晶琛ㄦ牸鏁版嵁鍗充负闇�瑕佷繚瀛樼殑鎺掍骇鏁版嵁
+ const engineerList = rightDataSource.value.map(item => ({
+ projectNo: item.projectNo,
+ projectName: item.projectName
+ }))
- const response = await request.post(`/loadGlass/optimizeProject/updateEngineerScheduling?type=${type}`, engineerList)
+ const response = await request.post(
+ `/loadGlass/optimizeProject/updateEngineerScheduling?type=${type}`,
+ engineerList
+ )
- if (response.code === 200) {
- ElMessage.success('淇濆瓨鎴愬姛')
- // 閲嶆柊鍔犺浇鏁版嵁
- await fetchDataSource()
- await fetchTargetKeys()
- } else {
- ElMessage.error(`淇濆瓨澶辫触: ${response.message || '鏈煡閿欒'}`)
- }
- } catch (error) {
- console.error('淇濆瓨鎺掍骇淇℃伅澶辫触:', error)
- ElMessage.error('璇风◢鍚庨噸璇�')
+ if (response.code === 200) {
+ ElMessage.success('淇濆瓨鎴愬姛')
+ await fetchDataSource()
+ await fetchTargetKeys()
+ } else {
+ ElMessage.error(`淇濆瓨澶辫触: ${response.message || '鏈煡閿欒'}`)
}
+ } catch (error) {
+ console.error('淇濆瓨鎺掍骇淇℃伅澶辫触:', error)
+ ElMessage.error('璇风◢鍚庨噸璇�')
+ }
}
// 閲嶇疆鎺掍骇淇℃伅
const resetScheduling = async () => {
- await fetchDataSource()
- await fetchTargetKeys()
- ElMessage.info(t('宸插彇娑�'))
+ await fetchDataSource()
+ await fetchTargetKeys()
+ ElMessage.info(t('scheduling.cancelled'))
}
// 鐩戝惉鏍囩椤靛垏鎹紝鏍规嵁涓嶅悓鏍囩椤靛姞杞藉搴旂殑鏁版嵁
watch(activeTab, async (newTab) => {
- // 閲嶆柊鑾峰彇鏁版嵁
- await fetchDataSource()
- await fetchTargetKeys()
+ // 閲嶆柊鑾峰彇鏁版嵁
+ await fetchDataSource()
+ await fetchTargetKeys()
})
@@ -164,85 +204,389 @@
// 缁勪欢鎸傝浇鏃惰幏鍙栨暟鎹�
onMounted(async () => {
- await fetchDataSource()
- await fetchTargetKeys()
+ await fetchDataSource()
+ await fetchTargetKeys()
})
+
+// 鍒ゆ柇鏄惁涓虹涓�琛�
+const isFirstRow = (row: TransferDataItem) => {
+ const index = rightDataSource.value.findIndex(item => item.key === row.key);
+ return index === 0;
+};
+
+// 鍒ゆ柇鏄惁涓烘渶鍚庝竴琛�
+const isLastRow = (row: TransferDataItem) => {
+ const index = rightDataSource.value.findIndex(item => item.key === row.key);
+ return index === rightDataSource.value.length - 1;
+};
+
+// 鍒ゆ柇涓婃柟鏄惁鏈夎繘琛屼腑鐨勮锛堜慨澶嶏細浣跨敤姝g‘鐨勭姸鎬佸��1锛�
+const hasInProgressAbove = (row: TransferDataItem) => {
+ const index = rightDataSource.value.findIndex(item => item.key === row.key);
+ // 鏌ユ壘褰撳墠琛屼笂鏂规槸鍚︽湁杩涜涓殑浠诲姟
+ return rightDataSource.value.some((item, i) => i < index && item.state === 1);
+};
+
+// 鍚戜笂绉诲姩涓�琛�
+const moveUp = (row: TransferDataItem) => {
+ const index = rightDataSource.value.findIndex(item => item.key === row.key);
+ if (index > 0) {
+ // 妫�鏌ユ槸鍚︿細瓒呰繃杩涜涓殑浠诲姟
+ const prevItem = rightDataSource.value[index - 1];
+ if (prevItem.state === 1) {
+ // 鐩存帴涓婃柟鏄繘琛屼腑浠诲姟锛屾彁绀虹敤鎴蜂笉鍙秴杩�
+ ElMessage.warning('鎿嶄綔涓嶅彲瓒呰繃杩涜涓殑浠诲姟');
+ return;
+ }
+ // 浜ゆ崲浣嶇疆
+ [rightDataSource.value[index], rightDataSource.value[index - 1]] =
+ [rightDataSource.value[index - 1], rightDataSource.value[index]];
+ // 瑙﹀彂鍝嶅簲寮忔洿鏂�
+ rightDataSource.value = [...rightDataSource.value];
+ }
+};
+
+// 鍚戜笅绉诲姩涓�琛�
+const moveDown = (row: TransferDataItem) => {
+ const index = rightDataSource.value.findIndex(item => item.key === row.key);
+ if (index < rightDataSource.value.length - 1) {
+ // 浜ゆ崲浣嶇疆
+ [rightDataSource.value[index], rightDataSource.value[index + 1]] =
+ [rightDataSource.value[index + 1], rightDataSource.value[index]];
+ // 瑙﹀彂鍝嶅簲寮忔洿鏂�
+ rightDataSource.value = [...rightDataSource.value];
+ }
+};
+
+// 鍒ゆ柇鏄惁鍙互缃《锛堝嵆鏄惁鏈夊彲缃《鐨勪綅缃級
+const canMoveToTop = (row: TransferDataItem) => {
+ // 杩涜涓换鍔′笉鑳界疆椤�
+ if (row.state === 1) return false;
+
+ const index = rightDataSource.value.findIndex(item => item.key === row.key);
+ // 宸茬粡鏄涓�琛岀殑涓嶈兘缃《
+ if (index === 0) return false;
+
+ // 鏌ユ壘绗竴涓潪杩涜涓换鍔$殑浣嶇疆
+ const firstNonProgressIndex = rightDataSource.value.findIndex(item => item.state !== 1);
+
+ // 濡傛灉褰撳墠琛屽凡缁忓湪绗竴涓潪杩涜涓换鍔$殑浣嶇疆鎴栦箣鍓嶏紝鍒欎笉鑳界疆椤�
+ return index > firstNonProgressIndex;
+};
+
+// ... existing code (moveUp鍜宮oveDown鍑芥暟淇濇寔涓嶅彉)
+
+// 缃《锛堢Щ鍔ㄥ埌鎵�鏈夐潪杩涜涓换鍔$殑鏈�鍓嶉潰锛�
+const moveToTop = (row: TransferDataItem) => {
+ const index = rightDataSource.value.findIndex(item => item.key === row.key);
+ if (index > 0) {
+ // 绉婚櫎褰撳墠琛�
+ const newList = rightDataSource.value.filter(item => item.key !== row.key);
+
+ // 鏌ユ壘鎵�鏈夐潪杩涜涓换鍔$殑浣嶇疆
+ const nonProgressIndices = newList
+ .map((item, i) => ({ item, index: i }))
+ .filter(item => item.item.state !== 1)
+ .map(item => item.index);
+
+ if (nonProgressIndices.length > 0) {
+ // 鏈夐潪杩涜涓换鍔★紝娣诲姞鍒扮涓�涓潪杩涜涓换鍔$殑浣嶇疆
+ newList.splice(nonProgressIndices[0], 0, row);
+ } else {
+ // 鍏ㄩ儴閮芥槸杩涜涓换鍔★紝娣诲姞鍒板紑澶�
+ newList.unshift(row);
+ }
+
+ // 鏇存柊鏁版嵁婧�
+ rightDataSource.value = newList;
+ }
+};
+// 鍒涘缓璁$畻灞炴�э紝鏍规嵁鏍囩椤佃繑鍥炰笉鍚岀殑琛ㄥご閰嶇疆
+const tableHeaders = computed(() => {
+ const baseHeaders = {
+ serial: t('scheduling.serial'),
+ projectNo: t('scheduling.projectNo'),
+ thickness: t('scheduling.thickness'),
+ glassType: t('scheduling.glassType'),
+ totalCount: t('scheduling.totalCount'),
+ totalArea: t('scheduling.totalArea'),
+ operate: t('scheduling.operate')
+ };
+ // 鏍规嵁涓嶅悓鏍囩椤佃繑鍥炰笉鍚岀殑琛ㄥご閰嶇疆
+ if (activeTab.value === 'tempered') {
+ return {
+ ...baseHeaders,
+ // 鏇存敼閽㈠寲鏍囩椤电殑鐗瑰畾琛ㄥご
+ totalCount: t('scheduling.totalFireCount'),
+ totalArea: t('scheduling.fullFireCount')
+ };
+ }
+
+ return baseHeaders;
+});
+// 鐘舵�佹牸寮忓寲鍑芥暟
+const stateFormatter = (row: any) => {
+ return row.state === 1 ? '杩涜涓�' : '鏈紑濮�';
+};
+
</script>
<template>
- <div class="engineer-scheduling-container">
- <el-tabs v-model="activeTab" class="custom-tabs">
- <el-tab-pane :label="t('large.countOutOne')" name="cutting1" />
- <el-tab-pane :label="t('large.countOutTwo')" name="cutting2" />
- <el-tab-pane :label="t('large.temp')" name="tempered" />
- </el-tabs>
+ <div class="engineer-scheduling-container">
+ <el-tabs v-model="activeTab" class="custom-tabs">
+ <el-tab-pane :label="t('large.countOutOne')" name="cutting1"/>
+ <el-tab-pane :label="t('large.countOutTwo')" name="cutting2"/>
+ <el-tab-pane :label="t('large.temp')" name="tempered"/>
+ </el-tabs>
- <div class="transfer-wrapper">
- <el-transfer v-model="targetKeys" class="custom-transfer" filterable :data="dataSource"
- :titles="['寰呮帓浜�', getRightListTitle]" :button-texts="['', '']">
- <template #right-empty>
- <el-empty :image-size="80" description="No data" />
- </template>
- </el-transfer>
+ <!-- 琛ㄦ牸甯冨眬瀹瑰櫒 -->
+ <div class="table-container">
+ <!-- 宸︿晶琛ㄦ牸锛氬緟鎺掍骇 -->
+ <div class="table-wrapper" v-if="activeTab !== 'tempered'">
+ <h3 class="table-title">{{ t('scheduling.unfinished') }} ({{ dataSource.length }})</h3>
+ <el-table
+ :data="dataSource"
+ border
+ class="custom-table"
+ height="400"
+ row-key="key"
+ >
+ <el-table-column type="index" :label="$t('scheduling.serial')" width="55"/>
+ <el-table-column prop="projectNo" :label="$t('scheduling.projectNo')" width="150"/>
+ <el-table-column prop="glassThickness" :label="$t('scheduling.thickness')" width="120"/>
+ <el-table-column prop="glassType" :label="$t('scheduling.glassType')" width="120"/>
+ <el-table-column prop="glassTotal" :label="$t('scheduling.totalCount')" width="90"/>
+ <el-table-column prop="glassTotalArea" :label="$t('scheduling.totalArea')" width="100"/>
+ <el-table-column :label="$t('scheduling.operate')" width="90" align="center">
+ <template #default="{ row }">
+ <el-button type="primary" @click="moveToRight(row)">
+ {{ t('scheduling.add') }}
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
- <div class="transfer-save">
- <el-button type="primary" @click="saveScheduling">
- {{ t('searchOrder.makesure') }}
+ <!-- 鍙充晶琛ㄦ牸锛氬凡鎺掍骇 -->
+ <div class="table-wrapper">
+ <h3 class="table-title">{{ t('scheduling.completed') }} ({{ rightDataSource.length }})</h3>
+ <el-table
+ :data="rightDataSource"
+ border
+ class="custom-table"
+ height="400"
+ row-key="key"
+ @row-click="(row) => fetchProjectDetail(row.key)"
+ highlight-current-row
+ >
+ <el-table-column type="index" :label="tableHeaders.serial" width="55"/>
+ <el-table-column prop="projectNo" :label="tableHeaders.projectNo" width="120"/>
+ <el-table-column prop="glassThickness" :label="tableHeaders.thickness" width="120"/>
+ <el-table-column prop="glassType" :label="tableHeaders.glassType" width="120"/>
+ <el-table-column prop="glassTotal" :label="tableHeaders.totalCount" width="90"/>
+ <el-table-column prop="glassTotalArea" :label="tableHeaders.totalArea" width="120"/>
+ <el-table-column
+ prop="state"
+ :label="t('scheduling.state')"
+ width="90"
+ :formatter="stateFormatter"
+ />
+ <el-table-column :label="t('scheduling.operate')" :width="activeTab === 'tempered' ? 200 : 300" :align="center">
+ <template #default="{ row }">
+ <div style="display: flex; gap: 5px; align-items: center;">
+ <el-button
+ v-if="activeTab !== 'tempered'"
+ type="default"
+ size="small"
+ @click="moveToLeft(row)"
+ :disabled="row.state === 1"
+ style="background: #ff4d4f; color: white; border-radius: 8px; min-width: 60px; display: inline-flex; justify-content: center; align-items: center;"
+ >
+ {{ t('scheduling.remove') }}
</el-button>
- <el-button type="primary" @click="resetScheduling">
- {{ t('delivery.cancel') }}
+ <el-button
+ type="default"
+ size="small"
+ @click="moveUp(row)"
+ :disabled="row.state === 1 || isFirstRow(row)"
+ style="background: #E6F4FF; color: #1890FF; border-radius: 8px; min-width: 40px; display: inline-flex; justify-content: center; align-items: center;"
+ >
+ 鈫�
</el-button>
- </div>
- </div>
+ <el-button
+ type="default"
+ size="small"
+ @click="moveDown(row)"
+ :disabled="row.state === 1 || isLastRow(row)"
+ style="background: #E6F4FF; color: #1890FF; border-radius: 8px; min-width: 40px; display: inline-flex; justify-content: center; align-items: center;"
+ >
+ 鈫�
+ </el-button>
+ <el-button
+ size="small"
+ @click="moveToTop(row)"
+ :disabled="row.state === 1 || isFirstRow(row) || !canMoveToTop(row)"
+ style="background: #E6F4FF; color: #1890FF; border-radius: 8px; min-width: 60px; display: inline-flex; justify-content: center; align-items: center;"
+ >
+ {{ t('scheduling.top') }}
+ </el-button>
+ </div>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
</div>
+
+ <!-- 淇濆瓨鍜岄噸缃寜閽� -->
+ <div class="transfer-save">
+ <el-button type="primary" @click="saveScheduling">
+ {{ t('searchOrder.makesure') }}
+ </el-button>
+ <el-button type="primary" @click="resetScheduling">
+ {{ t('delivery.cancel') }}
+ </el-button>
+ </div>
+ </div>
+ <!-- 璇︽儏灞曠ず鍖哄煙锛堟敼涓鸿〃鏍煎睍绀哄垪琛ㄦ暟鎹級 -->
+ <div v-if="showDetail" class="project-detail">
+ <!-- <h3 class="detail-title">宸ョ▼璇︽儏鍒楄〃 ({{ detailData.length }})</h3>-->
+ <el-table
+ :data="detailData"
+ border
+ class="detail-table"
+ height="230"
+ >
+ <el-table-column prop="engineerId" :label="$t('scheduling.projectNo')" width="120"/>
+ <el-table-column prop="flowCardId" :label="$t('scheduling.flowCardId')" width="150"/>
+ <el-table-column prop="layer" :label="$t('scheduling.layerCount')" width="80"/>
+ <el-table-column prop="glassType" :label="$t('scheduling.serial')" width="80"/>
+ <el-table-column prop="thickness" :label="$t('scheduling.thickness')" width="100"/>
+ <el-table-column prop="filmsid" :label="$t('scheduling.coatingType')" width="120"/>
+ <el-table-column prop="width" :label="$t('scheduling.width')" width="90"/>
+ <el-table-column prop="height" :label="$t('scheduling.height')" width="90"/>
+ <el-table-column prop="glassIdCount" :label="$t('scheduling.glassCount')" width="80"/>
+ <el-table-column prop="cuttingCount" :label="$t('scheduling.cuttingCount')" width="80"/>
+ <el-table-column prop="edgingCount" :label="$t('scheduling.edgingCount')" width="80"/>
+ <el-table-column prop="temperingCount" :label="$t('scheduling.temperingCount')" width="80"/>
+ <el-table-column prop="insulatingCount" :label="$t('scheduling.insulatingCount')" width="80"/>
+ </el-table>
+ </div>
</template>
+
<style scoped>
+/* 琛ㄦ牸甯冨眬瀹瑰櫒 */
+.table-container {
+ display: flex;
+ align-items: center;
+ gap: 20px;
+ margin-bottom: 20px;
+}
+
+/* 璇︽儏琛ㄦ牸鏍峰紡 */
+.project-detail {
+ margin-top: 0px;
+ padding: 15px;
+ border: 1px solid #dcdfe6;
+ border-radius: 4px;
+ width: 100%;
+ box-sizing: border-box;
+ height: auto; /* 纭繚瀹瑰櫒楂樺害鑷�傚簲 */
+}
+
+.detail-title {
+ margin-bottom: 15px;
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+}
+
+.detail-table {
+ width: 100%;
+ font-size: 14px;
+}
+
+/* 寮哄埗琛ㄦ牸鍐呭鍖哄煙婊氬姩 */
+::v-deep(.detail-table .el-table__body-wrapper) {
+ overflow-y: auto !important; /* 浼樺厛纭繚鍨傜洿婊氬姩 */
+ max-height: calc(230px - 50px); /* 閫傞厤琛ㄦ牸楂樺害锛堥渶涓巈l-table height鍖归厤锛� */
+}
+
+.table-wrapper {
+ flex: 1;
+}
+
+.table-title {
+ margin-bottom: 10px;
+ font-size: 18px;
+ font-weight: bold;
+ color: #303133;
+}
+
+.custom-table {
+ width: 100%;
+ font-size: 14px;
+}
+
+/* 杞Щ鎸夐挳鏍峰紡 */
+.transfer-buttons {
+ display: flex;
+ flex-direction: column;
+}
+
+/* 璋冩暣鎸夐挳鍖哄煙浣嶇疆 */
+.transfer-save {
+ display: flex;
+ justify-content: center;
+ gap: 10px;
+ margin-top: 20px;
+}
+
.engineer-scheduling-container {
- padding: 20px;
- border: 1px solid #dcdfe6;
- border-radius: 4px;
- background-color: #fff;
+ padding: 20px;
+ border: 1px solid #dcdfe6;
+ border-radius: 4px;
+ background-color: #fff;
}
.custom-tabs {
- margin-bottom: 20px;
+ margin-bottom: 20px;
}
::v-deep(.custom-tabs .el-tabs__item) {
- font-size: 20px;
+ font-size: 20px;
}
.transfer-wrapper {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 20px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 20px;
}
.transfer-save {
- display: flex;
- gap: 10px;
+ display: flex;
+ gap: 10px;
}
/* 鑷畾涔塗ransfer缁勪欢鐨勬牱寮� */
::v-deep(.el-transfer-panel) {
- font-size: 16px;
- width: 350px;
- height: 440px;
+ font-size: 16px;
+ width: 350px;
+ height: 440px;
}
.custom-transfer {
- --el-transfer-panel-body-height: 400px;
+ --el-transfer-panel-body-height: 400px;
}
::v-deep(.el-transfer-panel__header) {
- font-weight: bold;
- font-size: 18px;
+ font-weight: bold;
+ font-size: 18px;
}
::v-deep(.el-checkbox__label) {
- font-size: 16px;
+ font-size: 16px;
}
</style>
--
Gitblit v1.8.0