使用oracle数据库做的数据上传系统前端
kongdeqiang
2026-03-23 0b269c539f53fda21dd786deb26e45882edeadd4
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>