From 3a0087aa5e3eed5d9d7a793a17dc01fd1d6df80c Mon Sep 17 00:00:00 2001 From: huang <1532065656@qq.com> Date: 星期四, 17 四月 2025 17:01:15 +0800 Subject: [PATCH] 看板大屏2修改页面 --- UI-Project/src/views/KanbanData/kanbanData.vue | 263 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 246 insertions(+), 17 deletions(-) diff --git a/UI-Project/src/views/KanbanData/kanbanData.vue b/UI-Project/src/views/KanbanData/kanbanData.vue index c08aab8..e2db803 100644 --- a/UI-Project/src/views/KanbanData/kanbanData.vue +++ b/UI-Project/src/views/KanbanData/kanbanData.vue @@ -8,6 +8,7 @@ loadYieldData() loadUtilizationData() loadQuantityData() + loadPlannedData() }) // 鍏抽棴椤甸潰鍋滄瀹氭椂鍣� @@ -68,8 +69,8 @@ // 鍦ㄥ埗閲� const locationOptions = [ { label: '鍗婃垚鍝�', value: '鍗婃垚鍝�' }, - { label: '7014搴撲綅', value: '7014搴撲綅' }, - { label: '7016搴撲綅', value: '7016搴撲綅' } + { label: '7014', value: '7014' }, + { label: '7016', value: '7016' } ] // 鍦ㄥ埗閲忔暟鎹� @@ -80,6 +81,15 @@ }) const quantityData = ref([]) const quantityLoading = ref(false) + +// 璁″垝浜ч噺鏁版嵁 +const plannedFormData = ref({ + recordDate: new Date().toISOString().slice(0, 10), + type: '', + value: null +}) +const plannedData = ref([]) +const plannedLoading = ref(false) // 鏃ユ湡鏍煎紡鍖� const formatDate = (dateStr) => { @@ -94,9 +104,8 @@ const checkExists = (date, code, data, excludeId = null) => { return data.some(item => { const itemDate = item.recordTime ? formatDate(item.recordTime) : item.recordDate; - return itemDate === date && - (item.lineNo === code || item.locationCode === code) && - (!excludeId || item.id !== excludeId); + const codeMatch = item.lineNo === code || item.locationCode === code || item.type === code; + return itemDate === date && codeMatch && (!excludeId || item.id !== excludeId); }); } @@ -182,6 +191,34 @@ console.error(error) } finally { quantityLoading.value = false + } +} + +// 鍔犺浇璁″垝浜ч噺鏁版嵁 +const loadPlannedData = async () => { + plannedLoading.value = true + try { + const res = await request({ + url: '/deviceInteraction/plannedAmount/listPlanned', + method: 'post', + data: { page: 1, pageSize: 50 } + }) + if (res.code === 200 && res.data?.records) { + plannedData.value = res.data.records.map(item => { + const formattedDate = item.recordTime ? formatDate(item.recordTime) : ''; + return { + ...item, + recordDate: formattedDate, + editing: false, + originalData: { ...item, recordDate: formattedDate } + }; + }); + } + } catch (error) { + ElMessage.error('璁″垝浜ч噺鏁版嵁鍔犺浇澶辫触') + console.error(error) + } finally { + plannedLoading.value = false } } @@ -284,10 +321,44 @@ } } +// 鎻愪氦璁″垝浜ч噺琛ㄥ崟 +const handlePlannedSubmit = async () => { + if (!plannedFormData.value.recordDate || !plannedFormData.value.type || plannedFormData.value.value === null) { + ElMessage.error('璇峰~鍐欏畬鏁翠俊鎭�') + return + } + + // 妫�鏌ユ槸鍚﹀瓨鍦ㄧ浉鍚屾棩鏈熷拰绫诲瀷鐨勮褰� + if (checkExists(plannedFormData.value.recordDate, plannedFormData.value.type, plannedData.value)) { + ElMessage.error('璇ユ棩鏈熷拰绫诲瀷鐨勮褰曞凡瀛樺湪') + return + } + + try { + const recordTimeStr = `${plannedFormData.value.recordDate} 00:00:00`; + + await request({ + url: '/deviceInteraction/plannedAmount/addPlanned', + method: 'post', + data: { + type: plannedFormData.value.type, + value: plannedFormData.value.value, + recordTime: recordTimeStr + } + }) + ElMessage.success('娣诲姞鎴愬姛') + resetPlannedForm() + loadPlannedData() + } catch (error) { + ElMessage.error('娣诲姞澶辫触') + console.error(error) + } +} + // 閲嶇疆琛ㄥ崟 const resetYieldForm = () => { yieldFormData.value = { - recordDate: new Date().toISOString().slice(0, 10), + recordDate: yieldFormData.value.recordDate, // 淇濇寔褰撳墠閫夋嫨鐨勬棩鏈� lineNo: '', yieldvalue: null } @@ -295,7 +366,7 @@ const resetUtilizationForm = () => { utilizationFormData.value = { - recordDate: new Date().toISOString().slice(0, 10), + recordDate: utilizationFormData.value.recordDate, // 淇濇寔褰撳墠閫夋嫨鐨勬棩鏈� lineNo: '', utilizationRate: null } @@ -303,7 +374,7 @@ const resetQuantityForm = () => { quantityFormData.value = { - recordDate: new Date().toISOString().slice(0, 10), + recordDate: quantityFormData.value.recordDate, // 淇濇寔褰撳墠閫夋嫨鐨勬棩鏈� locationCode: '', quantity: null } @@ -427,6 +498,56 @@ } } +// 缂栬緫璁″垝浜ч噺 +const handlePlannedEdit = async (index, row) => { + if (!row.editing) { + row.editing = true + return + } + + if (!row.recordDate || !row.type || row.value === null) { + ElMessage.error('璇峰~鍐欏畬鏁翠俊鎭�') + return + } + + // 妫�鏌ユ槸鍚﹀瓨鍦ㄧ浉鍚屾棩鏈熷拰绫诲瀷鐨勮褰曪紙鎺掗櫎褰撳墠璁板綍锛� + if (checkExists(row.recordDate, row.type, plannedData.value, row.id)) { + ElMessage.error('璇ユ棩鏈熷拰绫诲瀷鐨勮褰曞凡瀛樺湪') + return + } + + try { + const recordTimeStr = `${row.recordDate} 00:00:00`; + + await request({ + url: '/deviceInteraction/plannedAmount/updatePlanned', + method: 'post', + data: { + id: row.id, + type: row.type, + value: row.value, + recordTime: recordTimeStr + } + }) + row.editing = false + row.originalData = { ...row } + ElMessage.success('淇敼鎴愬姛') + loadPlannedData() + } catch (error) { + ElMessage.error('淇敼澶辫触') + console.error(error) + } +} + +// 閲嶇疆璁″垝浜ч噺琛ㄥ崟 +const resetPlannedForm = () => { + plannedFormData.value = { + recordDate: plannedFormData.value.recordDate, + type: '', + value: null + } +} + // 鍙栨秷缂栬緫 const cancelEdit = (row) => { Object.assign(row, row.originalData) @@ -459,6 +580,12 @@ method: 'post', data: { id: id } }) + } else if (type === 'planned') { + await request({ + url: '/deviceInteraction/plannedAmount/deletePlanned', + method: 'post', + data: { id: id } + }) } ElMessage.success('鍒犻櫎鎴愬姛') @@ -467,6 +594,7 @@ if (type === 'yieldvalue') loadYieldData() else if (type === 'utilization') loadUtilizationData() else if (type === 'quantity') loadQuantityData() + else if (type === 'planned') loadPlannedData() } catch (error) { if (error !== 'cancel') { @@ -598,8 +726,8 @@ </el-form-item> <el-form-item label="鐢熶骇绾�"> <el-select v-model="utilizationFormData.lineNo" placeholder="閫夋嫨鐢熶骇绾�" style="width: 180px"> - <el-option label="涓�绾�" value="涓�绾�" /> - <el-option label="浜岀嚎" value="浜岀嚎" /> + <el-option label="鏍囧噯" value="鏍囧噯" /> + <el-option label="瀹氬埗" value="瀹氬埗" /> </el-select> </el-form-item> <el-form-item label="鍒╃敤鐜�"> @@ -635,8 +763,8 @@ <el-table-column prop="lineNo" label="鐢熶骇绾�" width="180"> <template #default="scope"> <el-select v-if="scope.row.editing" v-model="scope.row.lineNo" style="width: 140px"> - <el-option label="涓�绾�" value="涓�绾�" /> - <el-option label="浜岀嚎" value="浜岀嚎" /> + <el-option label="鏍囧噯" value="鏍囧噯" /> + <el-option label="瀹氬埗" value="瀹氬埗" /> </el-select> <span v-else>{{ scope.row.lineNo }}</span> </template> @@ -702,8 +830,8 @@ <el-form-item label="绫诲瀷"> <el-select v-model="quantityFormData.locationCode" placeholder="閫夋嫨绫诲瀷" style="width: 180px"> <el-option label="鍗婃垚鍝�" value="鍗婃垚鍝�" /> - <el-option label="7014搴撲綅" value="7014搴撲綅" /> - <el-option label="7016搴撲綅" value="7016搴撲綅" /> + <el-option label="7014" value="7014" /> + <el-option label="7016" value="7016" /> </el-select> </el-form-item> <el-form-item label="鏁伴噺"> @@ -739,13 +867,13 @@ <template #default="scope"> <el-select v-if="scope.row.editing" v-model="scope.row.locationCode" style="width: 140px"> <el-option label="鍗婃垚鍝�" value="鍗婃垚鍝�" /> - <el-option label="7014搴撲綅" value="7014搴撲綅" /> - <el-option label="7016搴撲綅" value="7016搴撲綅" /> + <el-option label="7014" value="7014" /> + <el-option label="7016" value="7016" /> </el-select> <span v-else> {{ scope.row.locationCode === '鍗婃垚鍝�' ? '鍗婃垚鍝�' : - scope.row.locationCode === '7014搴撲綅' ? '7014搴撲綅' : '7016搴撲綅' + scope.row.locationCode === '7014' ? '7014' : '7016' }} </span> </template> @@ -794,6 +922,107 @@ </el-table-column> </el-table> </el-tab-pane> + + <!-- 璁″垝浜ч噺鏍囩椤� --> + <el-tab-pane label="璁″垝浜ч噺" name="planned"> + <el-form :inline="true" :model="plannedFormData" label-width="100px" class="form-container"> + <el-form-item label="鏃ユ湡"> + <el-date-picker + v-model="plannedFormData.recordDate" + type="date" + value-format="YYYY-MM-DD" + placeholder="閫夋嫨鏃ユ湡" + style="width: 180px" + /> + </el-form-item> + <el-form-item label="绫诲瀷"> + <el-select v-model="plannedFormData.type" placeholder="閫夋嫨绫诲瀷" style="width: 180px"> + <el-option label="骞虫柟" value="骞虫柟" /> + <el-option label="鐗囨暟" value="鐗囨暟" /> + </el-select> + </el-form-item> + <el-form-item label="鏁板��"> + <el-input-number + v-model="plannedFormData.value" + :precision="plannedFormData.type === '骞虫柟' ? 2 : 0" + :step="plannedFormData.type === '骞虫柟' ? 0.01 : 1" + :min="0" + controls-position="right" + style="width: 180px" + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="handlePlannedSubmit">鎻愪氦</el-button> + <el-button @click="resetPlannedForm">閲嶇疆</el-button> + </el-form-item> + </el-form> + + <el-table :data="plannedData" v-loading="plannedLoading" style="width: 100%"> + <el-table-column prop="recordDate" label="鏃ユ湡" width="180"> + <template #default="scope"> + <el-date-picker + v-if="scope.row.editing" + v-model="scope.row.recordDate" + type="date" + value-format="YYYY-MM-DD" + style="width: 140px" + /> + <span v-else>{{ scope.row.recordDate }}</span> + </template> + </el-table-column> + <el-table-column prop="type" label="绫诲瀷" width="180"> + <template #default="scope"> + <el-select v-if="scope.row.editing" v-model="scope.row.type" style="width: 140px"> + <el-option label="骞虫柟" value="骞虫柟" /> + <el-option label="鐗囨暟" value="鐗囨暟" /> + </el-select> + <span v-else>{{ scope.row.type }}</span> + </template> + </el-table-column> + <el-table-column prop="value" label="鏁板��" width="180"> + <template #default="scope"> + <el-input-number + v-if="scope.row.editing" + v-model="scope.row.value" + :precision="scope.row.type === '骞虫柟' ? 2 : 0" + :step="scope.row.type === '骞虫柟' ? 0.01 : 1" + :min="0" + controls-position="right" + style="width: 140px" + /> + <span v-else>{{ scope.row.value }}</span> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔" width="200" fixed="right"> + <template #default="scope"> + <el-button-group> + <el-button + size="small" + :type="scope.row.editing ? 'success' : 'primary'" + @click="handlePlannedEdit(scope.$index, scope.row)" + > + {{ scope.row.editing ? '淇濆瓨' : '缂栬緫' }} + </el-button> + <el-button + v-if="scope.row.editing" + size="small" + @click="cancelEdit(scope.row)" + > + 鍙栨秷 + </el-button> + <el-button + v-else + size="small" + type="danger" + @click="handleDelete(scope.$index, plannedData, 'planned')" + > + 鍒犻櫎 + </el-button> + </el-button-group> + </template> + </el-table-column> + </el-table> + </el-tab-pane> </el-tabs> </el-main> </el-container> -- Gitblit v1.8.0