diff --git a/screen-vue/src/views/screen/Setting/components/Erp.vue b/screen-vue/src/views/screen/Setting/components/Erp.vue index 9afbcd7..7549777 100644 --- a/screen-vue/src/views/screen/Setting/components/Erp.vue +++ b/screen-vue/src/views/screen/Setting/components/Erp.vue @@ -5,11 +5,12 @@
-

系统可视化大屏指标配置

+

财务可视化大屏指标配置

保存 重置 + 清空
@@ -225,6 +226,12 @@ const metric7 = ref([]); const metric8 = ref([]); const metric9 = ref([]); +const gridOriginalChartId = ref({ + 1: null, 2: null, 3: null, 4: null, + 5: null, 6: null, 7: null, 8: null, 9: null +}); +const metricHistory = ref({}); + const saveLoading = ref(false); const rawChartData = ref([]); const searchKey = ref(''); @@ -261,6 +268,16 @@ const isMetricUsed = (metricId) => { ); }; +const findGridNumByChartId = (chartId) => { + const arr = getAllMetricArrays(); + for (let i = 0; i < arr.length; i++) { + if (arr[i].value.length && arr[i].value[0].chartId === chartId) { + return i + 1; + } + } + return null; +}; + const handleDragStart = (e, item) => { dragItem.value = item; e.dataTransfer.setData('text/plain', JSON.stringify(item)); @@ -278,6 +295,9 @@ const handleDrop = (e, gridNum) => { if (!targetArr) return; const currentChartId = dragItem.value.chartId; + const sourceGrid = findGridNumByChartId(currentChartId); + const targetOldItem = targetArr.value[0] || null; + getAllMetricArrays().forEach((arr, index) => { const pos = index + 1; if (pos !== gridNum && arr.value.some(item => item.chartId === currentChartId)) { @@ -285,18 +305,19 @@ const handleDrop = (e, gridNum) => { } }); - const originalSort = dragItem.value.sort || 0; - const currentFixedOldId = targetArr.value[0]?.fixedOldChartId || currentChartId; + const oldSort = sourceGrid || metricHistory.value[currentChartId] || 0; + const oldChartId = gridOriginalChartId.value[gridNum] || targetOldItem?.chartId || currentChartId; const newItem = { ...dragItem.value, sort: gridNum, - oldSort: originalSort, - fixedOldChartId: currentFixedOldId, - oldChartId: currentFixedOldId + oldSort: oldSort, + fixedOldChartId: oldChartId, + oldChartId: oldChartId }; targetArr.value = [newItem]; + metricHistory.value[currentChartId] = gridNum; dragItem.value = null; }; @@ -314,6 +335,11 @@ const handleReset = () => { ElMessage.info('已重置所有指标'); }; +const handleClearAll = () => { + getAllMetricArrays().forEach(arr => arr.value = []); + ElMessage.info('已清空所有格子'); +}; + const handleSave = async () => { saveLoading.value = true; const saveData = getAllMetricArrays().map((arr, index) => { @@ -325,7 +351,7 @@ const handleSave = async () => { oldChartId: currentItem?.fixedOldChartId || null, chartName: currentItem?.chartName || '', chartCode: 'erp', - oldSort: currentItem?.oldSort || 0, + oldSort: currentItem?.oldSort || gridNum, color: currentItem?.color || '' }; }).filter(item => item.chartId); @@ -337,7 +363,7 @@ const handleSave = async () => { } catch (error) { console.error('保存失败:', error); } finally { - getChartList(); + getChartList(); saveLoading.value = false; } }; @@ -353,18 +379,25 @@ async function getChartList() { const res = await getChartListAll(reqParams); rawChartData.value = res || []; + metricHistory.value = {}; + Object.keys(gridOriginalChartId.value).forEach(key => { + gridOriginalChartId.value[key] = null; + }); + rawChartData.value.forEach(item => { const sortNum = item.sort || 0; if (sortNum >= 1 && sortNum <= 9) { const targetArr = getMetricArrByGridNum(sortNum); if (targetArr) { + gridOriginalChartId.value[sortNum] = item.chartId; targetArr.value = [{ ...item, sort: sortNum, - oldSort: item.sort, + oldSort: 0, fixedOldChartId: item.chartId, oldChartId: item.chartId }]; + metricHistory.value[item.chartId] = sortNum; } } }); diff --git a/screen-vue/src/views/screen/Setting/components/Sys.vue b/screen-vue/src/views/screen/Setting/components/Sys.vue index 671c7ee..5423c58 100644 --- a/screen-vue/src/views/screen/Setting/components/Sys.vue +++ b/screen-vue/src/views/screen/Setting/components/Sys.vue @@ -10,6 +10,7 @@ 保存 重置 + 清空
@@ -171,6 +172,12 @@ const metric7 = ref([]); const metric8 = ref([]); const metric9 = ref([]); +const gridOriginalChartId = ref({ + 1: null, 2: null, 3: null, 4: null, + 5: null, 6: null, 7: null, 8: null, 9: null +}); +const metricHistory = ref({}); + const saveLoading = ref(false); const rawChartData = ref([]); const searchKey = ref(''); @@ -207,6 +214,16 @@ const isMetricUsed = (metricId) => { ); }; +const findGridNumByChartId = (chartId) => { + const arr = getAllMetricArrays(); + for (let i = 0; i < arr.length; i++) { + if (arr[i].value.length && arr[i].value[0].chartId === chartId) { + return i + 1; + } + } + return null; +}; + const handleDragStart = (e, item) => { dragItem.value = item; e.dataTransfer.setData('text/plain', JSON.stringify(item)); @@ -217,32 +234,37 @@ const handleDragEnd = (e) => { e.target.style.opacity = '1'; }; -const handleDrop = (e, gridNum) => { +const handleDrop = (e, targetGrid) => { e.preventDefault(); if (!dragItem.value) return; - const targetArr = getMetricArrByGridNum(gridNum); - if (!targetArr) return; - const currentChartId = dragItem.value.chartId; + const dragChartId = dragItem.value.chartId; + const sourceGrid = findGridNumByChartId(dragChartId); + const targetArr = getMetricArrByGridNum(targetGrid); + const targetOldItem = targetArr.value[0] || null; + const oldSort = sourceGrid || metricHistory.value[dragChartId] || 0; + getAllMetricArrays().forEach((arr, index) => { - const pos = index + 1; - if (pos !== gridNum && arr.value.some(item => item.chartId === currentChartId)) { - arr.value = []; + const gridNum = index + 1; + if (gridNum !== targetGrid) { + arr.value = arr.value.filter(i => i.chartId !== dragChartId); } }); - - const originalSort = dragItem.value.sort || 0; - const currentFixedOldId = targetArr.value[0]?.fixedOldChartId || currentChartId; const newItem = { ...dragItem.value, - sort: gridNum, - oldSort: originalSort, - fixedOldChartId: currentFixedOldId, - oldChartId: currentFixedOldId + sort: targetGrid, + oldSort: oldSort, + chartId: dragChartId, + oldChartId: gridOriginalChartId.value[targetGrid] || targetOldItem?.chartId || null, }; - targetArr.value = [newItem]; + metricHistory.value[dragChartId] = targetGrid; + if (sourceGrid && sourceGrid !== targetGrid) { + const sourceArr = getMetricArrByGridNum(sourceGrid); + sourceArr.value = []; + } + dragItem.value = null; }; @@ -260,6 +282,11 @@ const handleReset = () => { ElMessage.info('已重置所有指标'); }; +const handleClearAll = () => { + getAllMetricArrays().forEach(arr => arr.value = []); + ElMessage.info('已清空所有格子'); +}; + const handleSave = async () => { saveLoading.value = true; const saveData = getAllMetricArrays().map((arr, index) => { @@ -268,10 +295,10 @@ const handleSave = async () => { return { sort: gridNum, chartId: currentItem?.chartId || null, - oldChartId: currentItem?.fixedOldChartId || null, + oldChartId: currentItem?.oldChartId || null, chartName: currentItem?.chartName || '', chartCode: 'sys', - oldSort: currentItem?.oldSort || 0, + oldSort: currentItem?.oldSort || gridNum, color: currentItem?.color || '' }; }).filter(item => item.chartId); @@ -283,7 +310,7 @@ const handleSave = async () => { } catch (error) { console.error('保存失败:', error); } finally { - getChartList(); + getChartList(); saveLoading.value = false; } }; @@ -298,19 +325,24 @@ async function getChartList() { const reqParams = { chartCode: 'sys' }; const res = await getChartListAll(reqParams); rawChartData.value = res || []; - + metricHistory.value = {}; + Object.keys(gridOriginalChartId.value).forEach(key => { + gridOriginalChartId.value[key] = null; + }); rawChartData.value.forEach(item => { const sortNum = item.sort || 0; if (sortNum >= 1 && sortNum <= 9) { const targetArr = getMetricArrByGridNum(sortNum); if (targetArr) { + gridOriginalChartId.value[sortNum] = item.chartId; targetArr.value = [{ ...item, sort: sortNum, - oldSort: item.sort, - fixedOldChartId: item.chartId, + oldSort: 0, + chartId: item.chartId, oldChartId: item.chartId }]; + metricHistory.value[item.chartId] = sortNum; } } }); @@ -320,6 +352,7 @@ async function getChartList() { } } +// 初始化加载数据 onMounted(async () => { await getChartList(); }); diff --git a/screen-vue/src/views/screen/Setting/components/Work.vue b/screen-vue/src/views/screen/Setting/components/Work.vue index 50b83ae..70d6479 100644 --- a/screen-vue/src/views/screen/Setting/components/Work.vue +++ b/screen-vue/src/views/screen/Setting/components/Work.vue @@ -7,9 +7,9 @@

工作可视化大屏指标配置

- 保存 + 保存 重置 + 清空
@@ -18,11 +18,7 @@
× -
+
指标{{1}} {{ metric1[0].chartName }} @@ -33,11 +29,7 @@
× -
+
指标{{2}} {{ metric2[0].chartName }} @@ -48,11 +40,7 @@
× -
+
指标{{3}} {{ metric3[0].chartName }} @@ -65,11 +53,7 @@
× -
+
指标{{4}} {{ metric4[0].chartName }} @@ -80,11 +64,7 @@
× -
+
指标{{5}} {{ metric5[0].chartName }} @@ -97,11 +77,7 @@
× -
+
指标{{6}} {{ metric6[0].chartName }} @@ -112,11 +88,7 @@
× -
+
指标{{7}} {{ metric7[0].chartName }} @@ -127,11 +99,7 @@
× -
+
指标{{8}} {{ metric8[0].chartName }} @@ -148,15 +116,7 @@
-
+
{{ item.chartName }}
@@ -180,6 +140,12 @@ const metric6 = ref([]); const metric7 = ref([]); const metric8 = ref([]); +const gridOriginalChartId = ref({ + 1: null, 2: null, 3: null, 4: null, + 5: null, 6: null, 7: null, 8: null +}); +const metricHistory = ref({}); + const saveLoading = ref(false); const rawChartData = ref([]); const searchKey = ref(''); @@ -216,6 +182,16 @@ const isMetricUsed = (metricId) => { ); }; +const findGridNumByChartId = (chartId) => { + const arr = getAllMetricArrays(); + for (let i = 0; i < arr.length; i++) { + if (arr[i].value.length && arr[i].value[0].chartId === chartId) { + return i + 1; + } + } + return null; +}; + const handleDragStart = (e, item) => { dragItem.value = item; e.dataTransfer.setData('text/plain', JSON.stringify(item)); @@ -226,32 +202,37 @@ const handleDragEnd = (e) => { e.target.style.opacity = '1'; }; -const handleDrop = (e, gridNum) => { +const handleDrop = (e, targetGrid) => { e.preventDefault(); if (!dragItem.value) return; - const targetArr = getMetricArrByGridNum(gridNum); - if (!targetArr) return; - const currentChartId = dragItem.value.chartId; - + const dragChartId = dragItem.value.chartId; + const sourceGrid = findGridNumByChartId(dragChartId); + const targetArr = getMetricArrByGridNum(targetGrid); + const targetOldItem = targetArr.value[0] || null; + const oldSort = sourceGrid || metricHistory.value[dragChartId] || 0; getAllMetricArrays().forEach((arr, index) => { - const pos = index + 1; - if (pos !== gridNum && arr.value.some(item => item.chartId === currentChartId)) { - arr.value = []; + const gridNum = index + 1; + if (gridNum !== targetGrid) { + arr.value = arr.value.filter(i => i.chartId !== dragChartId); } }); - const originalSort = dragItem.value.sort || 0; - const currentFixedOldId = targetArr.value[0]?.fixedOldChartId || currentChartId; - const newItem = { ...dragItem.value, - sort: gridNum, - oldSort: originalSort, - fixedOldChartId: currentFixedOldId, - oldChartId: currentFixedOldId + sort: targetGrid, + oldSort: oldSort, + chartId: dragChartId, + oldChartId: gridOriginalChartId.value[targetGrid] || targetOldItem?.chartId || null, }; - + targetArr.value = [newItem]; + metricHistory.value[dragChartId] = targetGrid; + + if (sourceGrid && sourceGrid !== targetGrid) { + const sourceArr = getMetricArrByGridNum(sourceGrid); + sourceArr.value = []; + } + dragItem.value = null; }; @@ -269,6 +250,11 @@ const handleReset = () => { ElMessage.info('已重置所有指标'); }; +const handleClearAll = () => { + getAllMetricArrays().forEach(arr => arr.value = []); + ElMessage.info('已清空所有格子'); +}; + const handleSave = async () => { saveLoading.value = true; const saveData = getAllMetricArrays().map((arr, index) => { @@ -277,10 +263,10 @@ const handleSave = async () => { return { sort: gridNum, chartId: currentItem?.chartId || null, - oldChartId: currentItem?.fixedOldChartId || null, + oldChartId: currentItem?.oldChartId || null, chartName: currentItem?.chartName || '', chartCode: 'work', - oldSort: currentItem?.oldSort || 0, + oldSort: currentItem?.oldSort || gridNum, color: currentItem?.color || '' }; }).filter(item => item.chartId); @@ -292,7 +278,7 @@ const handleSave = async () => { } catch (error) { console.error('保存失败:', error); } finally { - getChartList(); + getChartList() saveLoading.value = false; } }; @@ -307,19 +293,25 @@ async function getChartList() { const reqParams = { chartCode: 'work' }; const res = await getChartListAll(reqParams); rawChartData.value = res || []; + metricHistory.value = {}; + Object.keys(gridOriginalChartId.value).forEach(key => { + gridOriginalChartId.value[key] = null; + }); rawChartData.value.forEach(item => { const sortNum = item.sort || 0; if (sortNum >= 1 && sortNum <= 8) { const targetArr = getMetricArrByGridNum(sortNum); if (targetArr) { + gridOriginalChartId.value[sortNum] = item.chartId; targetArr.value = [{ ...item, - sort: sortNum, - oldSort: item.sort, - fixedOldChartId: item.chartId, + sort: sortNum, + oldSort: 0, + chartId: item.chartId, oldChartId: item.chartId }]; + metricHistory.value[item.chartId] = sortNum; } } }); diff --git a/src/main/java/com/mini/mybigscreen/biz/controller/ChartInfoController.java b/src/main/java/com/mini/mybigscreen/biz/controller/ChartInfoController.java index d8508e5..28149c0 100644 --- a/src/main/java/com/mini/mybigscreen/biz/controller/ChartInfoController.java +++ b/src/main/java/com/mini/mybigscreen/biz/controller/ChartInfoController.java @@ -2,6 +2,7 @@ package com.mini.mybigscreen.biz.controller; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.mini.mybigscreen.Model.ChartConfig; import com.mini.mybigscreen.Model.Message; import com.mini.mybigscreen.Model.Result; @@ -31,27 +32,26 @@ public class ChartInfoController { public Result getListAll(String chartCode) { LambdaQueryWrapper query = new LambdaQueryWrapper() .eq(StrUtil.isNotBlank(chartCode), ChartInfo::getChartCode, chartCode) - .orderByAsc(ChartInfo::getSort); + .orderByDesc(ChartInfo::getCreateTime); return Result.success(chartInfoService.list(query)); } @PostMapping("setting") public Result save(@RequestBody List configs) { for (ChartConfig config : configs) { - - System.out.println(config); -// LambdaQueryWrapper newQuery = new LambdaQueryWrapper() -// .eq(ChartInfo::getChartId, config.getChartId()) -// .eq(ChartInfo::getChartCode, config.getChartCode()); -// ChartInfo newChartInfo = chartInfoService.getOne(newQuery); -// newChartInfo.setSort(config.getSort()); -// chartInfoService.updateById(newChartInfo); -// LambdaQueryWrapper oldQuery = new LambdaQueryWrapper() -// .eq(ChartInfo::getChartId, config.getOldChartId()) -// .eq(ChartInfo::getChartCode, config.getChartCode()); -// ChartInfo oldChartInfo = chartInfoService.getOne(oldQuery); -// oldChartInfo.setSort(config.getOldSort()); -// chartInfoService.updateById(oldChartInfo); + if (!config.getChartId().equals(config.getOldChartId())){ + LambdaQueryWrapper newQuery = new LambdaQueryWrapper() + .eq(ChartInfo::getChartId, config.getChartId()) + .eq(ChartInfo::getChartCode, config.getChartCode()); + ChartInfo newChartInfo = chartInfoService.getOne(newQuery); + newChartInfo.setSort(config.getSort()); + chartInfoService.updateById(newChartInfo); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(ChartInfo::getChartId, config.getOldChartId()) + .eq(ChartInfo::getChartCode, config.getChartCode()) + .set(ChartInfo::getSort, null); + chartInfoService.update(updateWrapper); + } } return Result.success(new Message("配置保存成功", 200)); }