Browse Source

11.27

master
lichong 3 months ago
parent
commit
bc331573a1
  1. 1
      package.json
  2. 2
      src/main/index.js
  3. 4
      src/renderer/src/assets/js/db.js
  4. 42
      src/renderer/src/components/treecomponent.vue
  5. 221
      src/renderer/src/views/dangan.vue

1
package.json

@ -22,6 +22,7 @@
"js-sha256": "^0.11.0", "js-sha256": "^0.11.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"node-machine-id": "^1.1.12", "node-machine-id": "^1.1.12",
"uuid": "^11.0.3",
"vue-web-screen-shot": "^1.5.3", "vue-web-screen-shot": "^1.5.3",
"vxe-table": "^4.7.87", "vxe-table": "^4.7.87",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"

2
src/main/index.js

@ -22,7 +22,7 @@ function createWindow() {
}) })
mainWindow.on('ready-to-show', () => { mainWindow.on('ready-to-show', () => {
mainWindow.show() mainWindow.show()
// mainWindow.webContents.openDevTools() mainWindow.webContents.openDevTools()
}) })
mainWindow.webContents.setWindowOpenHandler((details) => { mainWindow.webContents.setWindowOpenHandler((details) => {
shell.openExternal(details.url) shell.openExternal(details.url)

4
src/renderer/src/assets/js/db.js

@ -4,6 +4,6 @@ export const myDatabase = new Dexie('myDatabase');
// 定义数据库版本 // 定义数据库版本
myDatabase.version(1).stores({ myDatabase.version(1).stores({
fileList: '++id, label, children, firstId, secondId, thirdId, level, note, create_at, update_at', treeList: '++id, label, currentId, preId, prepreId, level, note, create_at, update_at',
treeList: '++id, xiangmuName, juanName, fileName, fileType, uploadTime, status, path, note, create_at, update_at' fileList: '++id, treeId, xiangmuName, juanName, fileName, fileType, uploadTime, status, path, note, create_at, update_at'
}); });

42
src/renderer/src/components/treecomponent.vue

@ -1,12 +1,24 @@
<template> <template>
<div class="treeClass bgColor"> <div class="treeClass bgColor">
<el-auto-resizer> <el-auto-resizer style="height: calc(100vh - 70px);">
<template #default="{ height, width }"> <template #default="{ height, width }">
<el-tree-v2 :data="treeData" :props="treeProps" class="bgColor" :style="`height:${height}px`" <el-tree-v2 :data="treeData" :props="treeProps" class="bgColor" @node-click="nodeClick" ref="treeRef"
@node-click="nodeClick" ref="treeRef"> :height="height" :expand-on-click-node="false">
<template #default="{ node }"> <template #default="{ node }">
<span class="prefix" :class="{ 'is-leaf': node.isLeaf }">[ElementPlus]</span> <div style="width: 100%;text-align-last:left;">
<span>{{ node.label }}</span> <el-tooltip effect="dark" :content="node.label" placement="right" v-if="node.label.length > textLength">
<span>{{ node.label.slice(0, textLength) }}</span>
</el-tooltip>
<span v-else>{{ node.label }}</span>
<span style="position: absolute;right: 8px;" v-if="node.level === 1">
<el-button type="primary" link @click="e => editxiangmu(e, node)">
编辑
</el-button>
<el-button type="danger" link @click="e => delxiangmu(e, node)">
删除
</el-button>
</span>
</div>
</template> </template>
</el-tree-v2> </el-tree-v2>
</template> </template>
@ -20,25 +32,29 @@ import dayjs from 'dayjs'
export default { export default {
name: 'treecomponent', name: 'treecomponent',
components: {}, components: {},
emits: ["nodeClick"], emits: ["nodeClick", "editxiangmu", "delxiangmu"],
props: { props: {
treeData: { treeData: {
type: Array, type: Array,
default: () => { default: () => {
return [{ return [{
id: 1, id: 1,
label: '一级 1', label: '一级 1一级 1一级 1一级 1一级 1一级 1一级 1一级 1一级 1一级 1一级 1一级 1一级 1一级 1',
level: 1,
children: [{ children: [{
id: 4, id: 4,
label: '二级 1-1', label: '二级 1-1',
level: 2,
children: [{ children: [{
id: 9, id: 9,
label: '三级 1-1-1' label: '三级 1-1-1三级 1-1-1三级 1-1-1三级 1-1-1三级 1-1-1三级 1-1-1三级 1-1-1三级 1-1-1三级 1-1-1三级 1-1-1',
level: 3,
}] }]
}] }]
}, { }, {
id: 2, id: 2,
label: '一级 2', label: '一级 2',
level: 1,
children: [{}] children: [{}]
} }
] ]
@ -59,6 +75,7 @@ export default {
return { return {
_: _, _: _,
dayjs: dayjs, dayjs: dayjs,
textLength: 20,
} }
}, },
methods: { methods: {
@ -67,6 +84,15 @@ export default {
}, },
setChecked() { setChecked() {
this.$refs.treeRef.setChecked(this.$refs.treeRef.setCheckedKeys()[0], false) this.$refs.treeRef.setChecked(this.$refs.treeRef.setCheckedKeys()[0], false)
},
editxiangmu(e, node) {
//
e.stopPropagation()
this.$emit("editxiangmu", node)
},
delxiangmu(e, node) {
e.stopPropagation()
this.$emit("delxiangmu", node)
} }
}, },
async mounted() { }, async mounted() { },

221
src/renderer/src/views/dangan.vue

@ -31,7 +31,8 @@
</div> </div>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="6"> <el-col :span="6">
<treecomponent @nodeClick="nodeClick" ref="treeComponentRef"> <treecomponent @nodeClick="nodeClick" @editxiangmu="editxiangmu" @delxiangmu="delxiangmu" :treeData="treeData"
ref="treeComponentRef" v-loading="treeLoading">
</treecomponent> </treecomponent>
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
@ -87,7 +88,7 @@
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
<div v-loading="loading"> <div v-loading="tableLoading">
<tablecomponent :tableHeader="tableHeader" :tableData="tableData" @view="viewFile" @edit="editFile" <tablecomponent :tableHeader="tableHeader" :tableData="tableData" @view="viewFile" @edit="editFile"
@unregister="unregisterFile" @download="downloadFile" ref="tableComponentRef"> @unregister="unregisterFile" @download="downloadFile" ref="tableComponentRef">
</tablecomponent> </tablecomponent>
@ -100,8 +101,19 @@
</formcomponent> </formcomponent>
<template #footer> <template #footer>
<div> <div>
<el-button @click="cancelDialog">取消</el-button> <el-button @click="canceldanganDialog">取消</el-button>
<el-button type="primary" @click="submitDialog"> 确认 </el-button> <el-button type="primary" @click="submitdanganDialog"> 确认 </el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="addFileForm.visible" :title="addFileForm.title" width="80%" :close-on-click-modal="false">
<formcomponent :formHeader="addFileForm.formHeader" :formData="addFileForm.formData"
:disabled="addFileForm.disabled">
</formcomponent>
<template #footer>
<div>
<el-button @click="cancelFileDialog">取消</el-button>
<el-button type="primary" @click="submitFileDialog"> 确认 </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -111,6 +123,7 @@
<script> <script>
import _ from 'lodash' import _ from 'lodash'
import * as XLSX from 'xlsx'; import * as XLSX from 'xlsx';
import { v5 } from "uuid";
import tableHeaderLocal from '../assets/json/file.json' import tableHeaderLocal from '../assets/json/file.json'
import { myDatabase } from '../assets/js/db.js' import { myDatabase } from '../assets/js/db.js'
import dayjs from 'dayjs' import dayjs from 'dayjs'
@ -196,6 +209,14 @@ export default {
value: "unregister" value: "unregister"
}, },
], ],
level1: [],
level2: ["主卷", "副卷", "备考卷"],
level3: {
"主卷": ["文字卷", "图纸卷", "照片卷", "拓片及慕本卷", "保护规划及保护工程方案卷", "文物调查及考古发掘卷", "文物保护工程及防治监测卷", "文物展示卷", "电子文件卷"],
"副卷": ["行政管理文件", "法律文书卷", "大事记卷"],
"备考卷": ["参考资料卷", "论文卷", "图书卷"],
},
treeData: [],
tableHeader: [], tableHeader: [],
formHeader: [], formHeader: [],
exportHeader: [], exportHeader: [],
@ -216,35 +237,120 @@ export default {
formHeader: [], formHeader: [],
formData: {} formData: {}
}, },
loading: false, uuidNameSpace: "8268af6b-7ef5-5d6d-a489-2d641dfb53bb",
treeLoading: false,
tableLoading: false,
} }
}, },
methods: { methods: {
//() //()
async searchTree(params = {}, isAll = false) { async searchTree() {
this.treeLoading = true
let collection = myDatabase.treeList
let xianmguName = _.trim(this.xiangmuObj.xianmguName)
if (xianmguName) {
let reg = new RegExp(xianmguName, "i")
collection = collection.filter((equip) => reg.test(equip.label))
}
// jujinnianxian
let res = await collection.toArray();
let level1List = _.filter(res, { level: 1, prepreId: "", preId: "", })
let level2List = _.filter(res, { level: 2, prepreId: "", })
let level3List = _.filter(res, { level: 3 })
this.treeLoading = false
let treeList = []
for (let i = 0; i < level1List.length; i++) {
let level1Item = level1List[i];
let level2ListTemp = _.filter(level2List, { level: 2, preId: level1Item.currentId, prepreId: "", })
let level1Children = []
for (let j = 0; j < level2ListTemp.length; j++) {
let level2Item = level2ListTemp[j];
let level3ListTemp = _.filter(level3List, { level: 3, preId: level2Item.currentId, prepreId: level1Item.currentId, })
let level2Children = []
for (let l = 0; l < level3ListTemp.length; l++) {
let level3Item = level3ListTemp[l];
level2Children.push({
...level3Item,
id: level3Item.currentId,
})
}
level1Children.push({
...level2Item,
id: level2Item.currentId,
children: level2Children
})
}
treeList.push({
...level1Item,
id: level1Item.currentId,
children: level1Children
})
}
this.treeData = treeList
}, },
//() //()
async addxiangmu(params = {}, isAll = false) { async addxiangmu() {
this.adddanganForm = {
visible: true,
title: "新增档案",
disabled: false,
type: "add",
formHeader: [
{
label: "项目名称",
prop: "xianmguName",
type: "text",
placeholder: "请输入项目名称",
required: true,
rules: [
{ required: true, message: "请输入项目名称", trigger: "blur" }
]
}
],
formData: {
xianmguName: ""
}
}
}, },
//() //()
async editxiangmu(params = {}, isAll = false) { async editxiangmu(node) {
console.log(265, node);
}, },
//() //()
async delxiangmu(params = {}, isAll = false) { async delxiangmu(node) {
console.log(269, node);
}, },
// //
async nodeClick() { }, async nodeClick(node) {
console.log(273, node);
},
//() //()
async exportData(params = {}, isAll = false) { async exportData(params = {}, isAll = false) {
}, },
// //
async addFile(params = {}, isAll = false) { async addFile() {
this.addFileForm = {
visible: true,
title: "新增文件",
disabled: false,
type: "add",
formHeader: [
{
label: "项目名称",
prop: "xianmguName",
type: "text",
placeholder: "请输入项目名称",
required: true,
rules: [
{ required: true, message: "请输入项目名称", trigger: "blur" }
]
}
],
formData: {
xianmguName: ""
}
}
}, },
// //
async searchFile(params = {}, isAll = false) { async searchFile(params = {}, isAll = false) {
@ -270,19 +376,91 @@ export default {
async downloadFile(params = {}, isAll = false) { async downloadFile(params = {}, isAll = false) {
}, },
// //
cancelDialog() { canceldanganDialog() {
this.adddanganForm = { this.adddanganForm = {
visible: false, visible: false,
title: "新增学生", title: "新增档案",
type: "add", type: "add",
formHeader: [], formHeader: [],
formData: {} formData: {}
} }
}, },
//
async submitDialog() { //
async submitdanganDialog() {
let treeList = []
let xianmguName = _.trim(this.adddanganForm.formData.xianmguName)
if (xianmguName) {
let firstId = v5(xianmguName, this.uuidNameSpace)
for (let i = 0; i < this.level2.length; i++) {
let level2Item = this.level2[i];
let level2Str = `${xianmguName}${level2Item}`
let level2uuid = v5(level2Str, this.uuidNameSpace)
for (let j = 0; j < this.level3[level2Item].length; j++) {
let level3Item = this.level3[level2Item][j];
let level3Str = `${xianmguName}${level2Item}${level3Item}`
let level3uuid = v5(level3Str, this.uuidNameSpace)
// ++id, label, currentId, preId, prepreId, level, note, create_at, update_at
treeList.push({
label: level3Item,
currentId: level3uuid,
preId: level2uuid,
prepreId: firstId,
level: 3,
create_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
update_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
})
}
treeList.push({
label: level2Item,
currentId: level2uuid,
preId: firstId,
prepreId: "",
level: 2,
create_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
update_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
})
}
treeList.push({
label: xianmguName,
currentId: firstId,
preId: "",
prepreId: "",
level: 1,
create_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
update_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
})
}
try {
await myDatabase.treeList.bulkAdd(treeList)
this.canceldanganDialog()
// d
await this.searchTree()
} catch (error) {
ElMessage({
message: `${error}`,
type: 'error',
})
}
}, },
//
cancelFileDialog() {
this.addFileForm = {
visible: false,
title: "新增文件",
disabled: false,
type: "add",
formHeader: [],
formData: {}
}
},
//
async submitFileDialog() {
},
// //
// async submitDialog() { // async submitDialog() {
// for (let i = 0; i < this.formHeader.length; i++) { // for (let i = 0; i < this.formHeader.length; i++) {
@ -316,6 +494,7 @@ export default {
this.tableHeader = _.filter(tableHeaderLocal, o => o.tableShow) this.tableHeader = _.filter(tableHeaderLocal, o => o.tableShow)
this.formHeader = _.filter(tableHeaderLocal, o => o.formShow) this.formHeader = _.filter(tableHeaderLocal, o => o.formShow)
this.exportHeader = _.filter(tableHeaderLocal, o => o.export) this.exportHeader = _.filter(tableHeaderLocal, o => o.export)
this.searchTree()
}, },
} }
</script> </script>

Loading…
Cancel
Save