From 0b269c539f53fda21dd786deb26e45882edeadd4 Mon Sep 17 00:00:00 2001
From: kongdeqiang <123456>
Date: 星期一, 23 三月 2026 11:39:18 +0800
Subject: [PATCH] fix: 更新系统
---
src/layout/MainLayout.vue | 16 +++++
index.html | 2
src/router/index.js | 12 ++++
src/views/data/Excel.vue | 77 ++++++++++++++++++++++++-
src/views/system/Department.vue | 20 ++++--
5 files changed, 117 insertions(+), 10 deletions(-)
diff --git a/index.html b/index.html
index 1d8dda7..d761b04 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<link rel="icon" type="image/svg+xml" href="/vite.svg">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>鏁版嵁绠$悊绯荤粺</title>
+ <title>鏁版嵁褰曞叆绯荤粺</title>
</head>
<body>
<div id="app"></div>
diff --git a/src/layout/MainLayout.vue b/src/layout/MainLayout.vue
index db13252..4fc85ac 100644
--- a/src/layout/MainLayout.vue
+++ b/src/layout/MainLayout.vue
@@ -39,10 +39,26 @@
<el-icon><Upload /></el-icon>
<span>鏁版嵁绠$悊</span>
</template>
+ <el-menu-item index="/data/unit-task">
+ <el-icon><List /></el-icon>
+ <template #title>鍗曚綅涓婁紶浠诲姟</template>
+ </el-menu-item>
<el-menu-item index="/data/excel">
<el-icon><Document /></el-icon>
<template #title>鍗曚綅鏁版嵁涓婁紶</template>
</el-menu-item>
+
+ </el-sub-menu>
+
+ <el-sub-menu index="statistics">
+ <template #title>
+ <el-icon><DataAnalysis /></el-icon>
+ <span>鏁版嵁缁熻</span>
+ </template>
+ <el-menu-item index="/statistics/unit">
+ <el-icon><DataLine /></el-icon>
+ <template #title>鍚勫崟浣嶆暟鎹粺璁�</template>
+ </el-menu-item>
</el-sub-menu>
</el-menu>
</el-aside>
diff --git a/src/router/index.js b/src/router/index.js
index 3086e3c..79639bf 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -36,6 +36,18 @@
name: 'Excel',
component: () => import('@/views/data/Excel.vue'),
meta: { title: 'Excel涓婁紶' }
+ },
+ {
+ path: 'data/unit-task',
+ name: 'UnitTask',
+ component: () => import('@/views/data/UnitTask.vue'),
+ meta: { title: '鍗曚綅涓婁紶浠诲姟' }
+ },
+ {
+ path: 'statistics/unit',
+ name: 'UnitStatistics',
+ component: () => import('@/views/statistics/UnitStatistics.vue'),
+ meta: { title: '鍚勫崟浣嶆暟鎹粺璁�' }
}
]
}
diff --git a/src/views/data/Excel.vue b/src/views/data/Excel.vue
index d56d5fe..93cd808 100644
--- a/src/views/data/Excel.vue
+++ b/src/views/data/Excel.vue
@@ -21,8 +21,21 @@
</template>
<el-form :inline="true" :model="searchForm" class="search-form">
- <el-form-item label="鍗曚綅鍚嶇О">
- <el-input v-model="searchForm.unitName" placeholder="璇疯緭鍏ュ崟浣嶅悕绉�" clearable />
+ <el-form-item label="鍗曚綅">
+ <el-select
+ v-model="searchForm.unitCode"
+ placeholder="璇烽�夋嫨鍗曚綅"
+ clearable
+ filterable
+ style="width: 250px"
+ >
+ <el-option
+ v-for="dept in flatDepartmentList"
+ :key="dept.deptCode"
+ :label="`${dept.deptCode} - ${dept.deptName}`"
+ :value="dept.deptCode"
+ />
+ </el-select>
</el-form-item>
<el-form-item label="浜ゆ槗娴佹按鍙�">
<el-input v-model="searchForm.transactionNo" placeholder="璇疯緭鍏ヤ氦鏄撴祦姘村彿" clearable />
@@ -195,8 +208,9 @@
</template>
<script setup>
-import { ref, reactive, onMounted } from 'vue'
+import {ref, reactive, onMounted, computed} from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
+import { getDepartmentTree } from '@/api/department'
import { Plus, Edit, Delete, Search, Refresh, Upload, Download } from '@element-plus/icons-vue'
import { getExcelPage, createExcel, updateExcel, deleteExcel, importExcel, downloadTemplate } from '@/api/excel'
@@ -206,9 +220,11 @@
const dialogTitle = ref('')
const formRef = ref(null)
const uploadRef = ref(null)
+const departmentList = ref([])
const searchForm = reactive({
unitName: '',
+ unitCode: '',
transactionNo: '',
accountingPeriod: ''
})
@@ -243,6 +259,60 @@
const rules = {
unitName: [{ required: true, message: '璇疯緭鍏ュ崟浣嶅悕绉�', trigger: 'blur' }],
transactionNo: [{ required: true, message: '璇疯緭鍏ヤ氦鏄撴祦姘村彿', trigger: 'blur' }]
+}
+
+const flatDepartmentList = computed(() => {
+ const flatten = (list) => {
+ let result = []
+ list.forEach(item => {
+ result.push(item)
+ if (item.children && item.children.length > 0) {
+ result = result.concat(flatten(item.children))
+ }
+ })
+ return result
+ }
+ return flatten(departmentList.value)
+})
+
+const fetchDepartmentList = async () => {
+ try {
+ const res = await getDepartmentTree()
+ departmentList.value = buildTree(res.data)
+ } catch (error) {
+ console.error('鑾峰彇閮ㄩ棬鍒楄〃澶辫触:', error)
+ }
+}
+
+const buildTree = (list) => {
+ const map = {}
+ const roots = []
+
+ list.forEach(item => {
+ map[item.deptCode] = { ...item, children: [] }
+ })
+
+ list.forEach(item => {
+ const parent = map[item.parentCode]
+ if (parent) {
+ parent.children.push(map[item.deptCode])
+ } else {
+ roots.push(map[item.deptCode])
+ }
+ })
+
+ const cleanEmptyChildren = (nodes) => {
+ nodes.forEach(node => {
+ if (node.children && node.children.length === 0) {
+ delete node.children
+ } else {
+ cleanEmptyChildren(node.children)
+ }
+ })
+ }
+
+ cleanEmptyChildren(roots)
+ return roots
}
const formatAmount = (amount) => {
@@ -409,6 +479,7 @@
}
onMounted(() => {
+ fetchDepartmentList()
fetchData()
})
</script>
diff --git a/src/views/system/Department.vue b/src/views/system/Department.vue
index d284ea4..a96e269 100644
--- a/src/views/system/Department.vue
+++ b/src/views/system/Department.vue
@@ -51,9 +51,8 @@
<el-form-item label="閮ㄩ棬鍚嶇О" prop="deptName">
<el-input v-model="form.deptName" placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�" />
</el-form-item>
- <el-form-item label="鐖剁骇閮ㄩ棬" prop="parentCode">
- <el-select v-model="form.parentCode" placeholder="璇烽�夋嫨鐖剁骇閮ㄩ棬" style="width: 100%">
- <el-option label="椤剁骇閮ㄩ棬" value="0" />
+ <el-form-item label="涓婄骇閮ㄩ棬" prop="parentCode">
+ <el-select v-model="form.parentCode" placeholder="璇烽�夋嫨涓婄骇閮ㄩ棬" style="width: 100%">
<el-option
v-for="dept in flatDepartmentList"
:key="dept.deptCode"
@@ -84,7 +83,7 @@
</template>
<script setup>
-import { ref, reactive, computed, onMounted } from 'vue'
+import {ref, reactive, computed, onMounted, nextTick} from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Plus, Edit, Delete } from '@element-plus/icons-vue'
import { getDepartmentTree, createDepartment, updateDepartment, deleteDepartment } from '@/api/department'
@@ -121,7 +120,16 @@
})
return result
}
- return flatten(tableData.value)
+ const list = flatten(tableData.value)
+
+ // 鏁版嵁鎵佸钩鍖栧悗锛岄粯璁ら�変腑绗竴涓儴闂ㄧ殑 deptCode
+ nextTick(() => {
+ if (list.length > 0) {
+ form.parentCode = list[0].deptCode
+ }
+ })
+
+ return list
})
const buildTree = (list) => {
@@ -197,7 +205,7 @@
const handleSubmit = async () => {
if (!formRef.value) return
-
+
await formRef.value.validate(async (valid) => {
if (valid) {
try {
--
Gitblit v1.9.1