From 47e1cecb6f5cd01c029ff1a2f1658326a33025f4 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 15 十一月 2025 11:51:35 +0800
Subject: [PATCH] 生产管控-左右页面逻辑修改
---
src/pages/productionManagement/productionDispatching/index.vue | 580 ++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 348 insertions(+), 232 deletions(-)
diff --git a/src/pages/productionManagement/productionDispatching/index.vue b/src/pages/productionManagement/productionDispatching/index.vue
index 87c3da0..6168994 100644
--- a/src/pages/productionManagement/productionDispatching/index.vue
+++ b/src/pages/productionManagement/productionDispatching/index.vue
@@ -2,7 +2,7 @@
<view class="production-dispatching">
<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
<PageHeader title="鐢熶骇娲惧伐" @back="goBack" />
-
+
<!-- 鐐掓満鐘舵�佸睍绀� -->
<view class="machines-section">
<view class="section-title">鐐掓満鐘舵��</view>
@@ -33,6 +33,28 @@
</view>
</view>
</view>
+ <!-- 鎹熻�楃巼璁剧疆 -->
+ <view class="loss-rate-section">
+ <view class="section-title">鎹熻�楃巼璁剧疆</view>
+ <view class="loss-rate-content">
+ <view class="loss-rate-item">
+ <up-button
+ class="loss-rate-btn"
+ type="primary"
+ plain
+ size="small"
+ @click="showLossRateSheet = true"
+ >{{ lossRate ? `鎹熻�楃巼: ${lossRate}%` : '璇烽�夋嫨鎹熻�楃巼' }}</up-button>
+ <up-action-sheet
+ :show="showLossRateSheet"
+ :actions="lossRateOptions"
+ @select="onLossRateSelect"
+ title="閫夋嫨鎹熻�楃巼"
+ @close="showLossRateSheet = false"
+ />
+ </view>
+ </view>
+ </view>
<view class="save-section">
<up-button type="primary" @click="saveMachineTotals" size="normal" class="save-btn">淇濆瓨鐐掓満璁剧疆</up-button>
</view>
@@ -71,46 +93,41 @@
</view>
<!-- 鎵归噺鎿嶄綔鍖哄煙 -->
- <view v-if="showBatchActions" class="batch-actions-section">
+ <view class="batch-actions-section" v-if="showBatchActions">
<view class="batch-info">
- <text class="batch-count">宸查�夋嫨 {{ selectedItems.length }} 涓」鐩�</text>
+ <text class="batch-text">宸查�夋嫨 {{ 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>
+ <up-button type="primary" size="small" @click="handleAutoDispatch" class="batch-btn">鑷姩娲惧崟</up-button>
+ <up-button type="default" size="small" @click="clearSelection" class="batch-btn">鍙栨秷閫夋嫨</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 class="select-all-section" v-if="tableData.length > 0">
+ <view class="select-all-content">
+ <up-checkbox
+ v-model="isAllSelected"
+ @change="toggleAllSelection"
+ label="鍏ㄩ��"
+ class="select-all-checkbox"
+ :disabled="tableData.length === 0 || tableData.filter(item => item.pendingQuantity > 0 && item.speculativeTradingName).length === 0"
+ />
</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 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-checkbox">
+ <up-checkbox
+ :model-value="selectedItems.some(selected => selected.id === item.id)"
+ @change="(checked) => toggleItemSelection(item, checked)"
+ :disabled="item.pendingQuantity <= 0 || !item.speculativeTradingName"
+ shape="circle"
+ />
</view>
<view class="item-content">
@@ -146,6 +163,10 @@
<text class="detail-value">{{ item.specificationModel }}</text>
</view>
<view class="detail-row">
+ <text class="detail-label">缁戝畾鏈哄櫒</text>
+ <text class="detail-value">{{ item.speculativeTradingName }}</text>
+ </view>
+ <view class="detail-row">
<text class="detail-label">鍗曚綅</text>
<text class="detail-value">{{ item.unit }}</text>
</view>
@@ -165,14 +186,14 @@
<!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
<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>
+ type="primary"
+ size="small"
+ @click="handleDispatch(item)"
+ class="action-btn"
+ :disabled="item.pendingQuantity <= 0 || !item.speculativeTradingName"
+ >
+ {{ item.pendingQuantity <= 0 ? '鏃犻渶娲惧伐' : !item.speculativeTradingName ? '鏈粦瀹氭満鍣�' : '鐢熶骇娲惧伐' }}
+ </up-button>
</view>
</view>
</view>
@@ -188,16 +209,20 @@
<!-- 娲惧伐寮圭獥 -->
<DispatchModal ref="dispatchModalRef" @confirm="handleDispatchConfirm" />
+
+ <!-- 鑷姩娲惧崟寮圭獥 -->
+ <AutoDispatchDia ref="autoDispatchDia" />
</view>
</template>
<script setup>
-import { ref, reactive, toRefs, getCurrentInstance } from "vue";
+import { ref, reactive, toRefs, getCurrentInstance, nextTick } from "vue";
import { onShow } from '@dcloudio/uni-app';
import dayjs from "dayjs";
-import {schedulingListPage, schedulingList, addSpeculatTrading, updateSpeculatTrading} from "@/api/productionManagement/productionOrder.js";
+import {schedulingListPage, schedulingList, addSpeculatTrading, updateSpeculatTrading, getLossRate, addLossRate, updateLossRate} from "@/api/productionManagement/productionOrder.js";
import PageHeader from "@/components/PageHeader.vue";
import DispatchModal from "./components/DispatchModal.vue";
+import AutoDispatchDia from "./components/autoDispatchDia.vue";
const { proxy } = getCurrentInstance();
@@ -207,10 +232,10 @@
// 鍒楄〃鏁版嵁
const tableData = ref([]);
-// 鎵归噺閫夋嫨鐩稿叧鏁版嵁
-const selectedItems = ref([]); // 閫変腑鐨勯」鐩甀D鏁扮粍
-const isAllSelected = ref(false); // 鏄惁鍏ㄩ��
-const showBatchActions = ref(false); // 鏄惁鏄剧ず鎵归噺鎿嶄綔鍖哄煙
+// 閫夋嫨鐩稿叧鏁版嵁
+const selectedItems = ref([]);
+const isAllSelected = ref(false);
+const showBatchActions = ref(false);
// 鎼滅储琛ㄥ崟鏁版嵁
const data = reactive({
@@ -261,8 +286,23 @@
// 鏄惁鏈夋煡璇㈡暟鎹紙鐢ㄤ簬鍒ゆ柇鏄柊澧炶繕鏄慨鏀癸級
const hasQueryData = ref(false);
+// 鎹熻�楃巼鐩稿叧鏁版嵁
+const lossRate = ref(""); // 褰撳墠閫夋嫨鐨勬崯鑰楃巼
+const showLossRateSheet = ref(false); // 鎺у埗鎹熻�楃巼閫夋嫨闈㈡澘鏄剧ず
+const lossRateOptions = ref([
+ { name: "6%", value: "6" },
+ { name: "7%", value: "7" },
+ { name: "8%", value: "8" },
+ { name: "9%", value: "9" },
+ { name: "10%", value: "10" }
+]);
+const lossRateData = ref(null); // 鎹熻�楃巼鏌ヨ杩斿洖鐨勬暟鎹�
+
// 娲惧伐寮圭獥寮曠敤
const dispatchModalRef = ref();
+
+// 鑷姩娲惧崟寮圭獥寮曠敤
+const autoDispatchDia = ref();
// 閫氱敤鎻愮ず鍑芥暟
const showLoadingToast = (message) => {
@@ -328,6 +368,28 @@
});
};
+// 鎹熻�楃巼閫夋嫨浜嬩欢
+const onLossRateSelect = (action) => {
+ lossRate.value = action.value;
+ showLossRateSheet.value = false;
+ console.log('閫夋嫨浜嗘崯鑰楃巼:', action.name, '鍊�:', action.value);
+};
+
+// 鑾峰彇鎹熻�楃巼鏁版嵁
+const getLossRateData = () => {
+ getLossRate().then((res) => {
+ if (res.data) {
+ lossRateData.value = res.data;
+ // 璁剧疆褰撳墠閫夋嫨鐨勬崯鑰楃巼
+ if (res.data.rate !== null && res.data.rate !== undefined) {
+ lossRate.value = res.data.rate.toString();
+ }
+ }
+ }).catch(err => {
+ console.error('鑾峰彇鎹熻�楃巼澶辫触:', err);
+ });
+};
+
// 鑾峰彇鍒楄〃鏁版嵁
const getList = () => {
loading.value = true;
@@ -340,14 +402,17 @@
closeToast();
tableData.value = (res.data.records || []).map(item => ({
- ...item,
- pendingQuantity: (Number(item.quantity) || 0) - (Number(item.schedulingNum) || 0)
- }));
+ ...item,
+ pendingQuantity: (Number(item.quantity) || 0) - (Number(item.schedulingNum) || 0)
+ })).filter(item => item.pendingQuantity > 0);
page.total = res.data.total || 0;
// 鑾峰彇鐐掓満鏁版嵁
getMachineProductionData();
+
+ // 鑾峰彇鎹熻�楃巼鏁版嵁
+ getLossRateData();
}).catch(() => {
loading.value = false;
@@ -364,6 +429,14 @@
if (item.pendingQuantity <= 0) {
uni.showToast({
title: '璇ラ」鐩棤闇�鍐嶆淳宸�',
+ icon: 'none'
+ });
+ return;
+ }
+
+ if (!item.speculativeTradingName) {
+ uni.showToast({
+ title: '璇ラ」鐩湭缁戝畾鏈哄櫒锛屾棤娉曟淳宸�',
icon: 'none'
});
return;
@@ -392,6 +465,51 @@
workLoad: machineTotal[`m${machineId}`] || 0,
currentWorkLoad: machineInProduction[`m${machineId}`] || 0
};
+};
+
+// 淇濆瓨鎹熻�楃巼璁剧疆
+const saveLossRate = () => {
+ if (!lossRate.value) {
+ console.log('鏈�夋嫨鎹熻�楃巼锛岃烦杩囦繚瀛�');
+ return Promise.resolve();
+ }
+
+ const lossRateDataToSave = {
+ rate: parseFloat(lossRate.value) || 0
+ };
+
+ // 濡傛灉鏈夋煡璇㈠埌鐨勬崯鑰楃巼鏁版嵁锛岃鏄庢槸淇敼鎿嶄綔锛岄渶瑕佷紶閫抜d
+ if (lossRateData.value && lossRateData.value.id) {
+ lossRateDataToSave.id = lossRateData.value.id;
+ }
+
+ console.log('淇濆瓨鎹熻�楃巼鏁版嵁:', lossRateDataToSave);
+
+ // 鏍规嵁鏄惁鏈夋崯鑰楃巼鏁版嵁鍐冲畾璋冪敤鏂板鎺ュ彛杩樻槸淇敼鎺ュ彛
+ const saveLossApi = lossRateData.value && lossRateData.value.id ? updateLossRate : addLossRate;
+ const successMessage = lossRateData.value && lossRateData.value.id ? '鎹熻�楃巼淇敼鎴愬姛' : '鎹熻�楃巼鏂板鎴愬姛';
+
+ return saveLossApi(lossRateDataToSave).then(res => {
+ console.log('鎹熻�楃巼淇濆瓨鎴愬姛:', res);
+ uni.showToast({
+ title: successMessage,
+ icon: 'success'
+ });
+
+ // 鏇存柊鎹熻�楃巼鏁版嵁
+ if (res.data) {
+ lossRateData.value = res.data;
+ }
+
+ return res;
+ }).catch(err => {
+ console.error('鎹熻�楃巼淇濆瓨澶辫触:', err);
+ uni.showToast({
+ title: '鎹熻�楃巼淇濆瓨澶辫触',
+ icon: 'none'
+ });
+ throw err;
+ });
};
// 淇濆瓨鐐掓満鎬婚噺璁剧疆
@@ -425,9 +543,15 @@
console.log(`璋冪敤鎺ュ彛: ${hasQueryData.value ? '淇敼' : '鏂板'}`);
- // 璋冪敤鍚庣API淇濆瓨
- saveApi(saveData).then(res => {
- proxy.$message.success(successMessage);
+ // 鍏堜繚瀛樻崯鑰楃巼锛屽啀淇濆瓨鐐掓満璁剧疆
+ saveLossRate().then(() => {
+ // 璋冪敤鍚庣API淇濆瓨鐐掓満璁剧疆
+ return saveApi(saveData);
+ }).then(res => {
+ uni.showToast({
+ title: successMessage,
+ icon: 'success'
+ });
console.log('淇濆瓨鎴愬姛:', res);
// 淇濆瓨鎴愬姛鍚庯紝璁剧疆hasQueryData涓簍rue锛屼笅娆′繚瀛樺皢璋冪敤淇敼鎺ュ彛
@@ -435,61 +559,69 @@
hasQueryData.value = true;
}
}).catch(err => {
- proxy.$message.error('淇濆瓨澶辫触');
+ uni.showToast({
+ title: '淇濆瓨澶辫触',
+ icon: 'none'
+ });
console.error('淇濆瓨澶辫触:', err);
});
};
-// 鎵归噺閫夋嫨鐩稿叧鍑芥暟
-
-// 鍒囨崲鍗曚釜椤圭洰鐨勯�夋嫨鐘舵��
-const toggleItemSelection = (item) => {
- const itemId = item.id;
- const index = selectedItems.value.indexOf(itemId);
+// 鍒囨崲鍗曚釜椤圭洰閫夋嫨鐘舵��
+const toggleItemSelection = (item, checked) => {
+ // 浠呭厑璁搁�夋嫨宸茬粦瀹氭満鍣ㄤ笖寰呮淳鏁伴噺>0鐨勯」鐩�
+ if (!item.speculativeTradingName || item.pendingQuantity <= 0) return;
- if (index > -1) {
- // 濡傛灉宸查�変腑锛屽垯鍙栨秷閫夋嫨
- selectedItems.value.splice(index, 1);
+ console.log('鍒囨崲閫夋嫨鐘舵��:', item.id, checked);
+
+ // 浣跨敤鏇翠弗鏍肩殑姣旇緝閫昏緫锛岀‘淇滻D鍞竴鎬�
+ const index = selectedItems.value.findIndex(selected => {
+ // 娣卞害姣旇緝瀵硅薄锛岀‘淇濇槸鍚屼竴涓」鐩�
+ return JSON.stringify(selected) === JSON.stringify(item);
+ });
+
+ if (checked) {
+ // 濡傛灉閫変腑涓斾笉鍦ㄩ�変腑鍒楄〃涓紝鍒欐坊鍔�
+ if (index === -1) {
+ selectedItems.value.push({...item}); // 鍒涘缓鏂板璞★紝閬垮厤寮曠敤闂
+ console.log('娣诲姞椤圭洰鍚庨�変腑鏁伴噺:', selectedItems.value.length);
+ }
} else {
- // 濡傛灉鏈�変腑锛屽垯娣诲姞閫夋嫨
- selectedItems.value.push(itemId);
+ // 濡傛灉鍙栨秷閫変腑涓斿湪閫変腑鍒楄〃涓紝鍒欑Щ闄�
+ if (index > -1) {
+ selectedItems.value.splice(index, 1);
+ console.log('绉婚櫎椤圭洰鍚庨�変腑鏁伴噺:', selectedItems.value.length);
+ }
}
- // 鏇存柊鍏ㄩ�夌姸鎬�
+ console.log('褰撳墠閫変腑椤圭洰鍒楄〃:', selectedItems.value.map(s => s.id));
updateAllSelectedStatus();
- // 鏇存柊鎵归噺鎿嶄綔鍖哄煙鏄剧ず鐘舵��
updateBatchActionsVisibility();
};
// 鍒囨崲鍏ㄩ�夌姸鎬�
const toggleAllSelection = () => {
if (isAllSelected.value) {
- // 鍙栨秷鍏ㄩ��
selectedItems.value = [];
} else {
- // 鍏ㄩ��
- selectedItems.value = tableData.value
- .filter(item => item.pendingQuantity > 0) // 鍙�夋嫨寰呮帓鏁伴噺澶т簬0鐨勯」鐩�
- .map(item => item.id);
+ selectedItems.value = tableData.value.filter(item => item.pendingQuantity > 0 && item.speculativeTradingName).map(item => ({ ...item }));
}
-
isAllSelected.value = !isAllSelected.value;
updateBatchActionsVisibility();
};
// 鏇存柊鍏ㄩ�夌姸鎬�
const updateAllSelectedStatus = () => {
- const selectableItems = tableData.value.filter(item => item.pendingQuantity > 0);
- if (selectableItems.length === 0) {
+ const selectableItems = tableData.value.filter(item => item.pendingQuantity > 0 && item.speculativeTradingName);
+ if (selectableItems.length > 0 && selectedItems.value.length === selectableItems.length &&
+ selectableItems.every(item => selectedItems.value.some(selected => selected.id === item.id))) {
+ isAllSelected.value = true;
+ } else {
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;
};
@@ -503,80 +635,36 @@
// 鑾峰彇閫変腑鐨勯」鐩�
const getSelectedItems = () => {
- return tableData.value.filter(item => selectedItems.value.includes(item.id));
+ return selectedItems.value;
};
-// 鑷姩娲惧崟鍔熻兘
+// 澶勭悊鑷姩娲惧崟
const handleAutoDispatch = () => {
- const selectedItemsList = getSelectedItems();
-
- if (selectedItemsList.length === 0) {
+ if (selectedItems.value.length === 0) {
uni.showToast({
- title: '璇峰厛閫夋嫨瑕佹淳宸ョ殑椤圭洰',
+ title: '璇烽�夋嫨瑕佹淳宸ョ殑椤圭洰',
icon: 'none'
});
return;
}
- // 妫�鏌ユ槸鍚︽湁椤圭洰寰呮帓鏁伴噺涓嶈冻
- const invalidItems = selectedItemsList.filter(item => item.pendingQuantity <= 0);
- if (invalidItems.length > 0) {
+ // 妫�鏌ユ槸鍚︽墍鏈夐�変腑椤圭洰閮芥湁缁戝畾鏈哄櫒
+ const unboundItems = selectedItems.value.filter(item => !item.speculativeTradingName);
+ if (unboundItems.length > 0) {
uni.showToast({
- title: `鏈�${invalidItems.length}涓」鐩棤闇�娲惧伐锛屽凡鑷姩杩囨护`,
- icon: 'none'
- });
- }
-
- // 杩囨护鎺夊緟鎺掓暟閲忎笉瓒崇殑椤圭洰
- const validItems = selectedItemsList.filter(item => item.pendingQuantity > 0);
-
- if (validItems.length === 0) {
- uni.showToast({
- title: '娌℃湁鍙淳宸ョ殑椤圭洰',
+ 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);
+ // 纭繚浼犻�掔殑鏄畬鏁寸殑閫変腑椤圭洰鏁扮粍
+ autoDispatchDia.value?.openDialog([...selectedItems.value]);
};
// 椤甸潰鏄剧ず鏃跺姞杞芥暟鎹�
onShow(() => {
getList();
- // 娓呯┖閫夋嫨鐘舵��
clearSelection();
});
</script>
@@ -588,16 +676,63 @@
padding: 20rpx;
}
+// 鎹熻�楃巼璁剧疆鍖哄煙
+.loss-rate-section {
+ background: #ffffff;
+ border: 1rpx solid #e4e7ed;
+ border-radius: 12rpx;
+ padding: 32rpx;
+ margin-top: 24rpx;
+ margin-bottom: 32rpx;
+ box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+}
+
+.loss-rate-section .section-title {
+ font-size: 32rpx;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 20rpx;
+}
+
+.loss-rate-section .loss-rate-content {
+ display: flex;
+ flex-direction: column;
+ gap: 24rpx;
+}
+
+.loss-rate-section .loss-rate-content .loss-rate-item {
+ display: flex;
+ align-items: center;
+ gap: 24rpx;
+}
+
+.loss-rate-section .loss-rate-content .loss-rate-label {
+ font-size: 30rpx;
+ font-weight: 500;
+ color: #303133;
+ min-width: 140rpx;
+ white-space: nowrap;
+}
+
+.loss-rate-section .loss-rate-content .loss-rate-btn {
+ min-width: 260rpx;
+ font-size: 28rpx;
+ height: 64rpx;
+ line-height: 64rpx;
+ border-radius: 8rpx;
+ font-weight: 500;
+}
+
// 鐐掓満鐘舵�佸尯鍩�
.machines-section {
margin-bottom: 30rpx;
-
- .section-title {
- font-size: 32rpx;
- font-weight: 600;
- color: #303133;
- margin-bottom: 20rpx;
- }
+}
+
+.machines-section .section-title {
+ font-size: 32rpx;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 20rpx;
}
.machines-grid {
@@ -771,10 +906,10 @@
align-items: center;
padding: 12rpx 0;
border-bottom: 1rpx solid #f5f5f5;
-
- &:last-child {
- border-bottom: none;
- }
+}
+
+.detail-row:last-child {
+ border-bottom: none;
}
.detail-label {
@@ -786,16 +921,16 @@
font-size: 26rpx;
color: #303133;
font-weight: 500;
-
- &.highlight {
- color: #ff6b35;
- font-weight: 600;
- }
-
- &.danger {
- color: #ee0a24;
- font-weight: 600;
- }
+}
+
+.detail-value.highlight {
+ color: #ff6b35;
+ font-weight: 600;
+}
+
+.detail-value.danger {
+ color: #ee0a24;
+ font-weight: 600;
}
.action-buttons {
@@ -808,6 +943,69 @@
min-width: 180rpx;
}
+// 鎵归噺鎿嶄綔鍖哄煙鏍峰紡
+.batch-actions-section {
+ background: #e8f4ff;
+ border: 1rpx solid #409eff;
+ border-radius: 12rpx;
+ padding: 20rpx 24rpx;
+ margin-bottom: 24rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.batch-actions-section .batch-text {
+ font-size: 28rpx;
+ font-weight: 600;
+ color: #409eff;
+}
+
+.batch-actions-section .batch-buttons {
+ display: flex;
+ gap: 16rpx;
+}
+
+.batch-actions-section .batch-btn {
+ min-width: 140rpx;
+}
+
+// 鍏ㄩ�夋搷浣滃尯鍩熸牱寮�
+.select-all-section {
+ background: #ffffff;
+ border-radius: 12rpx;
+ padding: 20rpx 24rpx;
+ margin-bottom: 16rpx;
+ border: 1rpx solid #e4e7ed;
+}
+
+.select-all-section .select-all-content {
+ display: flex;
+ align-items: center;
+}
+
+.select-all-section .select-all-checkbox {
+ font-size: 28rpx;
+ font-weight: 500;
+}
+
+// 鍒楄〃椤归�夋嫨妗嗘牱寮�
+.ledger-item {
+ display: flex;
+ align-items: flex-start;
+ padding: 0;
+}
+
+.item-checkbox {
+ padding: 24rpx 16rpx 0 24rpx;
+ display: flex;
+ align-items: center;
+}
+
+.item-content {
+ flex: 1;
+}
+
// 绌虹姸鎬�
.no-data {
padding: 100rpx 0;
@@ -818,88 +1016,6 @@
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;
}
// 鐐瑰嚮缂栬緫鍖哄煙鏍峰紡
--
Gitblit v1.9.3