From b973bcee308e99b5fd8a69640f11069e810346f4 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 27 一月 2026 16:37:55 +0800
Subject: [PATCH] 采购台账重构

---
 src/pages/productionManagement/productionDispatching/index.vue |  853 +++++---------------------------------------------------
 1 files changed, 80 insertions(+), 773 deletions(-)

diff --git a/src/pages/productionManagement/productionDispatching/index.vue b/src/pages/productionManagement/productionDispatching/index.vue
index 87c3da0..7aea197 100644
--- a/src/pages/productionManagement/productionDispatching/index.vue
+++ b/src/pages/productionManagement/productionDispatching/index.vue
@@ -3,187 +3,94 @@
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
 		<PageHeader title="鐢熶骇娲惧伐" @back="goBack" />
 		
-		<!-- 鐐掓満鐘舵�佸睍绀� -->
-		<view class="machines-section">
-			<view class="section-title">鐐掓満鐘舵��</view>
-			<view class="machines-grid">
-				<view v-for="machine in machines" :key="machine.id" class="machine-card">
-					<view class="machine-title">鐐掓満{{ machine.id }}</view>
-					<view class="machine-metrics">
-						<view class="metric-item">
-							<text class="metric-label">鎬婚噺(kg)</text>
-							<up-input
-								v-model="machineTotal[machine.key]"
-								type="number"
-								placeholder="璇疯緭鍏ユ�婚噺"
-								border="surround"
-								size="mini"
-								class="metric-input"
-								@change="updateMachineVacant(machine.key)"
-							/>
-						</view>
-						<view class="metric-item">
-							<text class="metric-label">姝e湪鐢熶骇(kg)</text>
-							<text class="metric-value">{{ machineInProduction[machine.key] }}</text>
-						</view>
-						<view class="metric-item">
-							<text class="metric-label">绌轰綑閲�(kg)</text>
-							<text class="metric-value">{{ machineVacant[machine.key] }}</text>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="save-section">
-				<up-button type="primary" @click="saveMachineTotals" size="normal" class="save-btn">淇濆瓨鐐掓満璁剧疆</up-button>
-			</view>
-		</view>
-		
 		<!-- 鎼滅储鍖哄煙 -->
 		<view class="search-section">
-			<view class="search-form">
-				<view class="search-item">
-					<text class="search-label">瀹㈡埛鍚嶇О</text>
+			<view class="search-bar">
+				<view class="search-input">
 					<up-input
+						class="search-text"
+						placeholder="璇疯緭鍏ュ鎴峰悕绉版悳绱�"
 						v-model="searchForm.customerName"
-						placeholder="璇疯緭鍏ュ鎴峰悕绉�"
 						@change="handleQuery"
 						clearable
-						border="surround"
-						class="search-input"
 					/>
 				</view>
-				<view class="search-item">
-					<text class="search-label">椤圭洰鍚嶇О</text>
-					<up-input
-						v-model="searchForm.projectName"
-						placeholder="璇疯緭鍏ラ」鐩悕绉�"
-						@change="handleQuery"
-						clearable
-						border="surround"
-						class="search-input"
-					/>
-				</view>
-				<view class="search-buttons">
-					<up-button type="primary" @click="handleQuery" size="small" class="search-btn">鎼滅储</up-button>
-					<up-button @click="handleReset" size="small" class="reset-btn">閲嶇疆</up-button>
+				<view class="filter-button" @click="handleQuery">
+					<up-icon name="search" size="24" color="#999"></up-icon>
 				</view>
 			</view>
-		</view>
-		
-		<!-- 鎵归噺鎿嶄綔鍖哄煙 -->
-		<view v-if="showBatchActions" class="batch-actions-section">
-			<view class="batch-info">
-				<text class="batch-count">宸查�夋嫨 {{ selectedItems.length }} 涓」鐩�</text>
-			</view>
-			<view class="batch-buttons">
-				<up-button type="primary" size="small" @click="handleAutoDispatch" class="batch-btn">
-					<up-icon name="play-circle" size="16" color="#ffffff"></up-icon>
-					鑷姩娲惧崟
-				</up-button>
-				<up-button type="default" size="small" @click="clearSelection" class="batch-btn">
-					<up-icon name="close-circle" size="16" color="#6c757d"></up-icon>
-					鍙栨秷閫夋嫨
-				</up-button>
-			</view>
-		</view>
-		
-		<!-- 鍏ㄩ�夋搷浣滃尯鍩� -->
-		<view v-if="tableData.length > 0" class="select-all-section">
-			<view class="select-all-checkbox" @click="toggleAllSelection">
-				<up-icon 
-					:name="isAllSelected ? 'checkbox-mark' : 'circle'" 
-					:color="isAllSelected ? '#409eff' : '#c0c4cc'"
-					size="18"
-				></up-icon>
-				<text class="select-all-text">{{ isAllSelected ? '鍙栨秷鍏ㄩ��' : '鍏ㄩ��' }}</text>
-			</view>
-			<text class="select-all-hint">锛堜粎閫夋嫨寰呮帓鏁伴噺澶т簬0鐨勯」鐩級</text>
 		</view>
 		
 		<!-- 鐢熶骇娲惧伐鍒楄〃 -->
 		<view class="ledger-list" v-if="tableData.length > 0">
-			<view v-for="(item, index) in tableData" :key="item.id || index" class="list-item">
+			<view v-for="(item, index) in tableData" :key="item.id || index">
 				<view class="ledger-item">
-					<!-- 閫夋嫨澶嶉�夋 -->
-					<view class="item-checkbox" @click="toggleItemSelection(item)">
-						<up-icon 
-							:name="selectedItems.includes(item.id) ? 'checkbox-mark' : 'circle'" 
-							:color="selectedItems.includes(item.id) ? '#409eff' : '#c0c4cc'"
-							size="18"
-						></up-icon>
+					<view class="item-header">
+						<view class="item-left">
+							<view class="document-icon">
+								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
+							</view>
+							<text class="item-id">{{ item.salesContractNo }}</text>
+						</view>
+					</view>
+					<up-divider></up-divider>
+					
+					<view class="item-details">
+						<view class="detail-row">
+							<text class="detail-label">褰曞叆鏃ユ湡</text>
+							<text class="detail-value">{{ item.entryDate }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">瀹㈡埛鍚堝悓鍙�</text>
+							<text class="detail-value">{{ item.customerContractNo }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">瀹㈡埛鍚嶇О</text>
+							<text class="detail-value">{{ item.customerName }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">椤圭洰鍚嶇О</text>
+							<text class="detail-value">{{ item.projectName }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">浜у搧澶х被</text>
+							<text class="detail-value">{{ item.productCategory }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">瑙勬牸鍨嬪彿</text>
+							<text class="detail-value">{{ item.specificationModel }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">鎬绘暟閲�</text>
+							<text class="detail-value">{{ item.quantity }} {{ item.unit }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">鎺掍骇鏁伴噺</text>
+							<text class="detail-value highlight">{{ item.schedulingNum }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">寰呮帓鏁伴噺</text>
+							<text class="detail-value" :class="{ 'danger': item.pendingQuantity <= 0 }">{{ item.pendingQuantity }}</text>
+						</view>
 					</view>
 					
-					<view class="item-content">
-						<view class="item-header">
-							<view class="item-left">
-								<view class="document-icon">
-									<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
-								</view>
-								<text class="item-id">{{ item.salesContractNo }}</text>
-							</view>
-							<text class="entry-date">{{ item.entryDate }}</text>
-						</view>
-					
-						<view class="item-details">
-							<view class="detail-row">
-								<text class="detail-label">瀹㈡埛鍚堝悓鍙�</text>
-								<text class="detail-value">{{ item.customerContractNo }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">瀹㈡埛鍚嶇О</text>
-								<text class="detail-value">{{ item.customerName }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">椤圭洰鍚嶇О</text>
-								<text class="detail-value">{{ item.projectName }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">浜у搧澶х被</text>
-								<text class="detail-value">{{ item.productCategory }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">瑙勬牸鍨嬪彿</text>
-								<text class="detail-value">{{ item.specificationModel }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">鍗曚綅</text>
-								<text class="detail-value">{{ item.unit }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">鎬绘暟閲�</text>
-								<text class="detail-value">{{ item.quantity }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">鎺掍骇鏁伴噺</text>
-								<text class="detail-value highlight">{{ item.schedulingNum }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">寰呮帓鏁伴噺</text>
-								<text class="detail-value" :class="{ 'danger': item.pendingQuantity <= 0 }">{{ item.pendingQuantity }}</text>
-							</view>
-							
-							<!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
-							<view class="action-buttons">
-								<up-button
-									type="primary"
-									size="small"
-									@click="handleDispatch(item)"
-									class="action-btn"
-									:disabled="item.pendingQuantity <= 0"
-								>
-									{{ item.pendingQuantity <= 0 ? '鏃犻渶娲惧伐' : '鐢熶骇娲惧伐' }}
-								</up-button>
-							</view>
-						</view>
+					<!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+					<view class="action-buttons">
+						<up-button
+							type="primary"
+							size="small"
+							@click="handleDispatch(item)"
+							class="action-btn"
+							:disabled="item.pendingQuantity <= 0"
+						>
+							鐢熶骇娲惧伐
+						</up-button>
 					</view>
 				</view>
 			</view>
 		</view>
-		
 		<view v-else class="no-data">
-			<up-empty mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png">
-				<text class="no-data-text">鏆傛棤鐢熶骇娲惧伐鏁版嵁</text>
-			</up-empty>
+			<text>鏆傛棤鐢熶骇娲惧伐鏁版嵁</text>
 		</view>
 		
 		<!-- 娲惧伐寮圭獥 -->
@@ -195,10 +102,9 @@
 import { ref, reactive, toRefs, getCurrentInstance } from "vue";
 import { onShow } from '@dcloudio/uni-app';
 import dayjs from "dayjs";
-import {schedulingListPage, schedulingList, addSpeculatTrading, updateSpeculatTrading} from "@/api/productionManagement/productionOrder.js";
+import {schedulingListPage} from "@/api/productionManagement/productionOrder.js";
 import PageHeader from "@/components/PageHeader.vue";
 import DispatchModal from "./components/DispatchModal.vue";
-
 const { proxy } = getCurrentInstance();
 
 // 鍔犺浇鐘舵��
@@ -207,59 +113,20 @@
 // 鍒楄〃鏁版嵁
 const tableData = ref([]);
 
-// 鎵归噺閫夋嫨鐩稿叧鏁版嵁
-const selectedItems = ref([]); // 閫変腑鐨勯」鐩甀D鏁扮粍
-const isAllSelected = ref(false); // 鏄惁鍏ㄩ��
-const showBatchActions = ref(false); // 鏄惁鏄剧ず鎵归噺鎿嶄綔鍖哄煙
 
 // 鎼滅储琛ㄥ崟鏁版嵁
 const data = reactive({
 	searchForm: {
 		customerName: "",
-		projectName: "",
 	},
 });
 const { searchForm } = toRefs(data);
 
 // 鍒嗛〉閰嶇疆
 const page = reactive({
-	current: 1,
-	size: 100,
-	total: 0,
+	current: -1,
+	size: -1,
 });
-
-// 鐐掓満鐘舵�佹暟鎹�
-const machineTotal = reactive({
-	m1: 0,
-	m2: 0,
-	m3: 0,
-	m4: 0,
-})
-
-const machineInProduction = reactive({
-	m1: 0,
-	m2: 0,
-	m3: 0,
-	m4: 0,
-})
-
-const machineVacant = reactive({
-	m1: 0,
-	m2: 0,
-	m3: 0,
-	m4: 0,
-})
-
-// 鐐掓満閰嶇疆鏁扮粍
-const machines = [
-	{ id: 1, key: 'm1' },
-	{ id: 2, key: 'm2' },
-	{ id: 3, key: 'm3' },
-	{ id: 4, key: 'm4' }
-]
-
-// 鏄惁鏈夋煡璇㈡暟鎹紙鐢ㄤ簬鍒ゆ柇鏄柊澧炶繕鏄慨鏀癸級
-const hasQueryData = ref(false);
 
 // 娲惧伐寮圭獥寮曠敤
 const dispatchModalRef = ref();
@@ -281,51 +148,9 @@
 	uni.navigateBack();
 };
 
-// 閲嶇疆鎼滅储
-const handleReset = () => {
-	searchForm.value.customerName = "";
-	searchForm.value.projectName = "";
-	handleQuery();
-};
-
 // 鏌ヨ鍒楄〃
 const handleQuery = () => {
-	page.current = 1;
 	getList();
-};
-
-// 鑾峰彇鐐掓満鐢熶骇鏁版嵁
-const getMachineProductionData = () => {
-	schedulingList().then((res) => {
-		if (res.data && Array.isArray(res.data)) {
-			// 閲嶇疆鏁版嵁
-			machineInProduction.m1 = 0;
-			machineInProduction.m2 = 0;
-			machineInProduction.m3 = 0;
-			machineInProduction.m4 = 0;
-			
-			// 澶勭悊鐐掓満鏁版嵁
-			res.data.forEach(item => {
-				const machineId = Number(item.id);
-				if (machineId >= 1 && machineId <= 4) {
-					const machineKey = `m${machineId}`;
-					
-					if (item.workLoad !== null && item.workLoad !== undefined) {
-						machineTotal[machineKey] = Number(item.workLoad) || 0;
-					}
-					
-					if (item.currentWorkLoad !== null && item.currentWorkLoad !== undefined) {
-						machineInProduction[machineKey] = Number(item.currentWorkLoad) || 0;
-					}
-					
-					// 璁$畻绌轰綑閲�
-					machineVacant[machineKey] = machineTotal[machineKey] - machineInProduction[machineKey];
-				}
-			});
-		}
-	}).catch(err => {
-		console.error('鑾峰彇鐐掓満鏁版嵁澶辫触:', err);
-	});
 };
 
 // 鑾峰彇鍒楄〃鏁版嵁
@@ -333,22 +158,18 @@
 	loading.value = true;
 	showLoadingToast('鍔犺浇涓�...');
 	
+	// 鏋勯�犺姹傚弬鏁�
 	const params = { ...searchForm.value, ...page };
 	
 	schedulingListPage(params).then((res) => {
 		loading.value = false;
 		closeToast();
 		
+		// 澶勭悊姣忔潯鏁版嵁锛屽鍔爌endingQuantity瀛楁
 		tableData.value = (res.data.records || []).map(item => ({
 			...item,
 			pendingQuantity: (Number(item.quantity) || 0) - (Number(item.schedulingNum) || 0)
 		}));
-		
-		page.total = res.data.total || 0;
-		
-		// 鑾峰彇鐐掓満鏁版嵁
-		getMachineProductionData();
-		
 	}).catch(() => {
 		loading.value = false;
 		closeToast();
@@ -377,552 +198,38 @@
 	getList(); // 鍒锋柊鍒楄〃
 };
 
-// 鏇存柊鐐掓満绌轰綑閲�
-const updateMachineVacant = (machineKey) => {
-	machineVacant[machineKey] = (Number(machineTotal[machineKey]) || 0) - (Number(machineInProduction[machineKey]) || 0);
-};
-
-// 鑾峰彇鐐掓満鏌ヨ鏁版嵁
-const getMachineQueryData = (machineId) => {
-	// 杩欓噷闇�瑕佹牴鎹疄闄呮儏鍐典粠鏌ヨ鏁版嵁涓幏鍙栧搴旂殑鐐掓満鏁版嵁
-	// 鏆傛椂杩斿洖涓�涓ā鎷熸暟鎹�
-	return {
-		id: machineId,
-		name: `鐐掓満${machineId}`,
-		workLoad: machineTotal[`m${machineId}`] || 0,
-		currentWorkLoad: machineInProduction[`m${machineId}`] || 0
-	};
-};
-
-// 淇濆瓨鐐掓満鎬婚噺璁剧疆
-const saveMachineTotals = () => {
-	// 鏋勯�犱繚瀛樻暟鎹暟缁勶紝浣跨敤machines鏁扮粍寰幆鏋勫缓
-	const saveData = machines.map(machine => {
-		const machineData = {
-			name: `鐐掓満${machine.id}`, // 鐐掓満鍚嶇О
-			workLoad: machineTotal[machine.key] || 0,  // 鎬婚噺
-			vacant: machineVacant[machine.key] || 0   // 绌轰綑閲�
-		};
-		
-		// 濡傛灉鏄慨鏀规搷浣滐紝闇�瑕佷紶閫抜d瀛楁
-		if (hasQueryData.value) {
-			// 杩欓噷闇�瑕佷粠鏌ヨ鏁版嵁涓幏鍙栧搴旂殑id
-			// 鍋囪鏌ヨ鏁版嵁涓瘡涓倰鏈烘暟鎹兘鏈塱d瀛楁
-			const queryData = getMachineQueryData(machine.id);
-			if (queryData && queryData.id) {
-				machineData.id = queryData.id;
-			}
-		}
-		
-		return machineData;
-	});
-	
-	console.log('淇濆瓨鐐掓満璁剧疆鏁版嵁:', saveData);
-	
-	// 鏍规嵁鏄惁鏈夋煡璇㈡暟鎹喅瀹氳皟鐢ㄦ柊澧炴帴鍙h繕鏄慨鏀规帴鍙�
-	const saveApi = hasQueryData.value ? updateSpeculatTrading : addSpeculatTrading;
-	const successMessage = hasQueryData.value ? '鐐掓満璁剧疆淇敼鎴愬姛' : '鐐掓満璁剧疆鏂板鎴愬姛';
-	
-	console.log(`璋冪敤鎺ュ彛: ${hasQueryData.value ? '淇敼' : '鏂板'}`);
-	
-	// 璋冪敤鍚庣API淇濆瓨
-	saveApi(saveData).then(res => {
-		proxy.$message.success(successMessage);
-		console.log('淇濆瓨鎴愬姛:', res);
-		
-		// 淇濆瓨鎴愬姛鍚庯紝璁剧疆hasQueryData涓簍rue锛屼笅娆′繚瀛樺皢璋冪敤淇敼鎺ュ彛
-		if (!hasQueryData.value) {
-			hasQueryData.value = true;
-		}
-	}).catch(err => {
-		proxy.$message.error('淇濆瓨澶辫触');
-		console.error('淇濆瓨澶辫触:', err);
-	});
-};
-
-// 鎵归噺閫夋嫨鐩稿叧鍑芥暟
-
-// 鍒囨崲鍗曚釜椤圭洰鐨勯�夋嫨鐘舵��
-const toggleItemSelection = (item) => {
-	const itemId = item.id;
-	const index = selectedItems.value.indexOf(itemId);
-	
-	if (index > -1) {
-		// 濡傛灉宸查�変腑锛屽垯鍙栨秷閫夋嫨
-		selectedItems.value.splice(index, 1);
-	} else {
-		// 濡傛灉鏈�変腑锛屽垯娣诲姞閫夋嫨
-		selectedItems.value.push(itemId);
-	}
-	
-	// 鏇存柊鍏ㄩ�夌姸鎬�
-	updateAllSelectedStatus();
-	// 鏇存柊鎵归噺鎿嶄綔鍖哄煙鏄剧ず鐘舵��
-	updateBatchActionsVisibility();
-};
-
-// 鍒囨崲鍏ㄩ�夌姸鎬�
-const toggleAllSelection = () => {
-	if (isAllSelected.value) {
-		// 鍙栨秷鍏ㄩ��
-		selectedItems.value = [];
-	} else {
-		// 鍏ㄩ��
-		selectedItems.value = tableData.value
-			.filter(item => item.pendingQuantity > 0) // 鍙�夋嫨寰呮帓鏁伴噺澶т簬0鐨勯」鐩�
-			.map(item => item.id);
-	}
-	
-	isAllSelected.value = !isAllSelected.value;
-	updateBatchActionsVisibility();
-};
-
-// 鏇存柊鍏ㄩ�夌姸鎬�
-const updateAllSelectedStatus = () => {
-	const selectableItems = tableData.value.filter(item => item.pendingQuantity > 0);
-	if (selectableItems.length === 0) {
-		isAllSelected.value = false;
-		return;
-	}
-	
-	isAllSelected.value = selectedItems.value.length === selectableItems.length && 
-		selectableItems.every(item => selectedItems.value.includes(item.id));
-};
-
-// 鏇存柊鎵归噺鎿嶄綔鍖哄煙鏄剧ず鐘舵��
-const updateBatchActionsVisibility = () => {
-	showBatchActions.value = selectedItems.value.length > 0;
-};
-
-// 娓呯┖閫夋嫨
-const clearSelection = () => {
-	selectedItems.value = [];
-	isAllSelected.value = false;
-	showBatchActions.value = false;
-};
-
-// 鑾峰彇閫変腑鐨勯」鐩�
-const getSelectedItems = () => {
-	return tableData.value.filter(item => selectedItems.value.includes(item.id));
-};
-
-// 鑷姩娲惧崟鍔熻兘
-const handleAutoDispatch = () => {
-	const selectedItemsList = getSelectedItems();
-	
-	if (selectedItemsList.length === 0) {
-		uni.showToast({
-			title: '璇峰厛閫夋嫨瑕佹淳宸ョ殑椤圭洰',
-			icon: 'none'
-		});
-		return;
-	}
-	
-	// 妫�鏌ユ槸鍚︽湁椤圭洰寰呮帓鏁伴噺涓嶈冻
-	const invalidItems = selectedItemsList.filter(item => item.pendingQuantity <= 0);
-	if (invalidItems.length > 0) {
-		uni.showToast({
-			title: `鏈�${invalidItems.length}涓」鐩棤闇�娲惧伐锛屽凡鑷姩杩囨护`,
-			icon: 'none'
-		});
-	}
-	
-	// 杩囨护鎺夊緟鎺掓暟閲忎笉瓒崇殑椤圭洰
-	const validItems = selectedItemsList.filter(item => item.pendingQuantity > 0);
-	
-	if (validItems.length === 0) {
-		uni.showToast({
-			title: '娌℃湁鍙淳宸ョ殑椤圭洰',
-			icon: 'none'
-		});
-		return;
-	}
-	
-	uni.showModal({
-		title: '纭鑷姩娲惧崟',
-		content: `纭畾瑕佸閫変腑鐨�${validItems.length}涓」鐩繘琛岃嚜鍔ㄦ淳鍗曞悧锛焋,
-		success: (res) => {
-			if (res.confirm) {
-				executeAutoDispatch(validItems);
-			}
-		}
-	});
-};
-
-// 鎵ц鑷姩娲惧崟
-const executeAutoDispatch = (items) => {
-	showLoadingToast('鑷姩娲惧崟涓�...');
-	
-	// 妯℃嫙鑷姩娲惧崟杩囩▼
-	setTimeout(() => {
-		closeToast();
-		
-		// 杩欓噷搴旇璋冪敤瀹為檯鐨勮嚜鍔ㄦ淳鍗旳PI
-		// 鏆傛椂浣跨敤妯℃嫙鎴愬姛
-		uni.showToast({
-			title: `鎴愬姛涓�${items.length}涓」鐩畬鎴愯嚜鍔ㄦ淳鍗昤,
-			icon: 'success'
-		});
-		
-		// 娓呯┖閫夋嫨
-		clearSelection();
-		// 鍒锋柊鍒楄〃
-		getList();
-		
-		console.log('鑷姩娲惧崟椤圭洰:', items);
-	}, 1500);
-};
-
 // 椤甸潰鏄剧ず鏃跺姞杞芥暟鎹�
 onShow(() => {
+	// 鍔犺浇鍒楄〃鏁版嵁
 	getList();
-	// 娓呯┖閫夋嫨鐘舵��
-	clearSelection();
 });
 </script>
 
 <style scoped lang="scss">
+@import '@/styles/sales-common.scss';
+
+// 鐢熶骇娲惧伐椤甸潰鏍峰紡
 .production-dispatching {
 	min-height: 100vh;
 	background: #f8f9fa;
-	padding: 20rpx;
+	position: relative;
 }
 
-// 鐐掓満鐘舵�佸尯鍩�
-.machines-section {
-	margin-bottom: 30rpx;
-	
-	.section-title {
-		font-size: 32rpx;
-		font-weight: 600;
-		color: #303133;
-		margin-bottom: 20rpx;
-	}
-}
-
-.machines-grid {
-	display: grid;
-	grid-template-columns: 1fr 1fr;
-	gap: 20rpx;
-}
-
-.machine-card {
-	background: #ffffff;
-	border-radius: 16rpx;
-	padding: 24rpx;
-	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
-	border: 1rpx solid #e9ecef;
-}
-
-.machine-title {
-	font-size: 28rpx;
-	font-weight: 600;
-	color: #2c3e50;
-	text-align: center;
-	margin-bottom: 20rpx;
-	padding-bottom: 16rpx;
-	border-bottom: 2rpx solid #3498db;
-}
-
-.machine-metrics {
-	display: flex;
-	flex-direction: column;
-	gap: 16rpx;
-}
-
-.metric-item {
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
-	padding: 8rpx 0;
-}
-
-.metric-label {
-	font-size: 24rpx;
-	color: #6c757d;
-}
-
-.metric-value {
-	font-size: 26rpx;
-	font-weight: 600;
-	color: #2c3e50;
-}
-
-// 杈撳叆妗嗘牱寮�
-.metric-input {
-	width: 120rpx;
-	text-align: right;
-}
-
-// 淇濆瓨鍖哄煙
-.save-section {
-	display: flex;
-	justify-content: center;
-	margin-top: 30rpx;
-	padding-top: 20rpx;
-	border-top: 1rpx solid #e9ecef;
-}
-
-.save-btn {
-	min-width: 200rpx;
-}
-
-// 鎼滅储鍖哄煙
-.search-section {
-	background: #ffffff;
-	border-radius: 16rpx;
-	padding: 24rpx;
-	margin-bottom: 30rpx;
-	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
-}
-
-.search-form {
-	display: flex;
-	flex-direction: column;
-	gap: 20rpx;
-}
-
-.search-item {
-	display: flex;
-	align-items: center;
-	gap: 20rpx;
-}
-
-.search-label {
-	font-size: 26rpx;
-	color: #606266;
-	min-width: 140rpx;
-}
-
-.search-input {
-	flex: 1;
-}
-
-.search-buttons {
-	display: flex;
-	gap: 20rpx;
-	justify-content: flex-end;
-	margin-top: 10rpx;
-}
-
-.search-btn, .reset-btn {
-	min-width: 120rpx;
-}
-
-// 鍒楄〃鏍峰紡
-.ledger-list {
-	display: flex;
-	flex-direction: column;
-	gap: 24rpx;
-}
-
-.list-item {
-	background: #ffffff;
-	border-radius: 16rpx;
-	overflow: hidden;
-	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
-}
-
+// 鍒楄〃椤规牱寮�
 .ledger-item {
-	padding: 0;
-}
-
-.item-header {
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
-	padding: 24rpx 24rpx 0 24rpx;
-}
-
-.item-left {
-	display: flex;
-	align-items: center;
-	gap: 16rpx;
-}
-
-.document-icon {
-	width: 48rpx;
-	height: 48rpx;
-	background: #409eff;
-	border-radius: 8rpx;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-}
-
-.item-id {
-	font-size: 28rpx;
-	font-weight: 600;
-	color: #303133;
-}
-
-.entry-date {
-	font-size: 24rpx;
-	color: #909399;
-}
-
-.item-details {
-	padding: 24rpx;
-}
-
-.detail-row {
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
-	padding: 12rpx 0;
-	border-bottom: 1rpx solid #f5f5f5;
-	
-	&:last-child {
-		border-bottom: none;
-	}
-}
-
-.detail-label {
-	font-size: 26rpx;
-	color: #606266;
-}
-
-.detail-value {
-	font-size: 26rpx;
-	color: #303133;
-	font-weight: 500;
-	
-	&.highlight {
+	.detail-value.highlight {
 		color: #ff6b35;
 		font-weight: 600;
 	}
 	
-	&.danger {
+	.detail-value.danger {
 		color: #ee0a24;
 		font-weight: 600;
 	}
-}
-
-.action-buttons {
-	padding: 0 24rpx 24rpx 24rpx;
-	display: flex;
-	justify-content: flex-end;
-}
-
-.action-btn {
-	min-width: 180rpx;
-}
-
-// 绌虹姸鎬�
-.no-data {
-	padding: 100rpx 0;
-	text-align: center;
-}
-
-.no-data-text {
-	font-size: 28rpx;
-	color: #909399;
-	margin-top: 20rpx;
-}
-
-// 鎵归噺鎿嶄綔鍖哄煙鏍峰紡
-.batch-actions-section {
-	background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-	border-radius: 16rpx;
-	padding: 24rpx;
-	margin-bottom: 24rpx;
-	box-shadow: 0 8rpx 24rpx rgba(102, 126, 234, 0.3);
-	color: #ffffff;
-}
-
-.batch-info {
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
-	margin-bottom: 20rpx;
-}
-
-.batch-count {
-	font-size: 28rpx;
-	font-weight: 600;
-}
-
-.batch-buttons {
-	display: flex;
-	gap: 20rpx;
-	justify-content: flex-end;
-}
-
-.batch-btn {
-	min-width: 180rpx;
-}
-
-// 鍏ㄩ�夋搷浣滃尯鍩熸牱寮�
-.select-all-section {
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
-	background: #f8f9fa;
-	border-radius: 12rpx;
-	padding: 20rpx 24rpx;
-	margin-bottom: 20rpx;
-	border: 1rpx solid #e9ecef;
-}
-
-.select-all-checkbox {
-	display: flex;
-	align-items: center;
-	gap: 12rpx;
-	cursor: pointer;
-}
-
-.select-all-text {
-	font-size: 26rpx;
-	color: #606266;
-	font-weight: 500;
-}
-
-.select-all-hint {
-	font-size: 22rpx;
-	color: #909399;
-}
-
-// 鍒楄〃椤归�夋嫨鏍峰紡
-.ledger-item {
-	display: flex;
-	align-items: flex-start;
-	padding: 0;
-}
-
-.item-checkbox {
-	padding: 24rpx 16rpx 0 24rpx;
-	cursor: pointer;
-	display: flex;
-	align-items: center;
-	min-height: 48rpx;
-}
-
-.item-content {
-	flex: 1;
-	padding: 0;
-}
-
-// 鐐瑰嚮缂栬緫鍖哄煙鏍峰紡
-.metric-value-container {
-	cursor: pointer;
-	min-width: 120rpx;
-	text-align: right;
-	padding: 4rpx 8rpx;
-	border-radius: 4rpx;
-	transition: all 0.2s ease;
-}
-
-.metric-value-container:hover {
-	background-color: #f0f8ff;
-	border: 1rpx solid #409eff;
 }
 
 // 閫傞厤 uView 缁勪欢鏍峰紡
 :deep(.up-input) {
 	background: transparent;
 }
-
-:deep(.up-input__content) {
-	background: #f8f9fa;
-}
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3