Browse Source

2244

master
lichong 7 months ago
parent
commit
c567e9c3de
  1. 2
      front/src/main/index.js
  2. 26
      front/src/renderer/src/components/tablecomponent.vue
  3. 86
      front/src/renderer/src/views/user.vue

2
front/src/main/index.js

@ -11,7 +11,7 @@ let mainWindow
function createWindow() { function createWindow() {
mainWindow = new BrowserWindow({ mainWindow = new BrowserWindow({
minWidth: 1366, minWidth: 1366,
minHeight: 684, minHeight: 763,
show: false, show: false,
autoHideMenuBar: true, autoHideMenuBar: true,
icon: logoIcon, icon: logoIcon,

26
front/src/renderer/src/components/tablecomponent.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="tableClass"> <div class="tableClass">
<el-table :data="tableData" height="calc(100vh - 91px)" border @select="selectChange" @select-all="selectChange" fit <el-table :data="tableData" height="calc(100vh - 96px)" border @select="selectChange" @select-all="selectChange" fit
:row-key="getRowKeys" ref="tableRef"> :row-key="getRowKeys" ref="tableRef">
<el-table-column type="selection" width="50" :reserve-selection="true" fixed="left"> <el-table-column type="selection" width="50" :reserve-selection="true" fixed="left">
</el-table-column> </el-table-column>
@ -45,9 +45,8 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination style="margin:8px 0 0 0;place-content:center;" v-model:current-page="currentPage" <el-pagination style="margin:8px 0 0 0;place-content:center;" v-model:current-page="currentPage"
v-model:page-size="pageSize" :total="total" @size-change="handleSizeChange" v-model:page-size="pageSize" :total="total" layout="total, sizes, prev, pager, next, jumper"
layout="total, sizes, prev, pager, next, jumper" :page-sizes="pageSizes" @current-change="handleCurrentChange" :page-sizes="pageSizes"></el-pagination>
@prev-click="handleCurrentChange" @next-click="handleCurrentChange"></el-pagination>
</div> </div>
</template> </template>
@ -75,7 +74,7 @@ export default {
pageSizes: { pageSizes: {
type: Array, type: Array,
default: () => { default: () => {
return [16, 50, 100, 200] return [12, 50, 100, 200]
} }
}, },
total: { total: {
@ -91,7 +90,7 @@ export default {
_: _, _: _,
dayjs: dayjs, dayjs: dayjs,
currentPage: 1, currentPage: 1,
pageSize: 16, pageSize: 12,
} }
}, },
methods: { methods: {
@ -116,7 +115,20 @@ export default {
} }
}, },
async mounted() { }, async mounted() { },
watch: {}, watch: {
currentPage: {
handler(val) {
this.$emit("handleCurrentChange", val)
},
immediate: true
},
pageSize: {
handler(val) {
this.$emit("handleSizeChange", val)
},
immediate: true
},
},
computed: {} computed: {}
} }
</script> </script>

86
front/src/renderer/src/views/user.vue

@ -7,6 +7,12 @@
</el-icon> </el-icon>
<span>新增</span> <span>新增</span>
</el-button> </el-button>
<el-button type="primary" @click="exportData">
<el-icon>
<Download />
</el-icon>
<span>导出</span>
</el-button>
<el-button type="danger" @click="deleteData(selectionData)" :disabled="selectionData.length == 0"> <el-button type="danger" @click="deleteData(selectionData)" :disabled="selectionData.length == 0">
<el-icon> <el-icon>
<Delete /> <Delete />
@ -48,6 +54,20 @@
</template> </template>
</el-input> </el-input>
</div> </div>
<div class="inputClass">
<el-radio-group v-model="modelType">
<el-radio value="simple" size="large">
<el-tooltip effect="dark" content="识别速度快,但是准确率稍低,建议一次识别多张图片" placement="top">
<span>简单模型</span>
</el-tooltip>
</el-radio>
<el-radio value="complex" size="large">
<el-tooltip effect="dark" content="识别速度慢,但是准确率稍高,建议一次识别一张图片" placement="top">
<span>复杂模型</span>
</el-tooltip>
</el-radio>
</el-radio-group>
</div>
</div> </div>
<div> <div>
<tablecomponent :tableHeader="tableHeader" :tableData="tableData" :pageSizes="pageSizes" :total="total" <tablecomponent :tableHeader="tableHeader" :tableData="tableData" :pageSizes="pageSizes" :total="total"
@ -71,13 +91,13 @@
<script> <script>
import _ from 'lodash' import _ from 'lodash'
import * as XLSX from 'xlsx';
import tableHeaderLocal from '../assets/json/user.json' import tableHeaderLocal from '../assets/json/user.json'
import { myDatabase } from '../assets/js/db.js' import { myDatabase } from '../assets/js/db.js'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import tablecomponent from "../components/tablecomponent.vue" import tablecomponent from "../components/tablecomponent.vue"
import formcomponent from "../components/formcomponent.vue" import formcomponent from "../components/formcomponent.vue"
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { set } from 'lodash'
export default { export default {
name: 'user', name: 'user',
components: { tablecomponent, formcomponent }, components: { tablecomponent, formcomponent },
@ -89,8 +109,8 @@ export default {
formHeader: [], formHeader: [],
tableData: [], tableData: [],
currentPage: 1, currentPage: 1,
pageSize: 16, pageSize: 12,
pageSizes: [16, 50, 100, 200], pageSizes: [12, 50, 100, 200],
total: 0, total: 0,
searchParams: { searchParams: {
Name: "" Name: ""
@ -106,6 +126,7 @@ export default {
fileOriData: [], fileOriData: [],
displayedMessages: [],// displayedMessages: [],//
pngCount: 0, pngCount: 0,
modelType: "simple"
} }
}, },
methods: { methods: {
@ -128,7 +149,7 @@ export default {
async successSubmit(opts) { async successSubmit(opts) {
this.pngCount++ this.pngCount++
if (this.pngCount === 1) { if (this.pngCount === 1) {
ElMessage.info({ ElMessage.success({
message: `识别图片中请稍后`, message: `识别图片中请稍后`,
duration: 0 duration: 0
}) })
@ -141,7 +162,7 @@ export default {
let base64Data = fileReader.result; let base64Data = fileReader.result;
let params = { let params = {
base64Str: base64Data, base64Str: base64Data,
ocrType: "simple",//:complex_simple_ ocrType: that.modelType,//:complex_simple_
} }
window.electron.ipcRenderer.send('ocrIdentify', params) window.electron.ipcRenderer.send('ocrIdentify', params)
} }
@ -154,18 +175,18 @@ export default {
initInfo() { initInfo() {
let that = this let that = this
window.electron.ipcRenderer.on('ocrResult', (eve, res) => { window.electron.ipcRenderer.on('ocrResult', (eve, res) => {
console.log(7411, res)
ElMessage.closeAll() ElMessage.closeAll()
if (res.hasError) { if (res.hasError) {
ElMessage.info({ ElMessage.error({
message: `倒数第${that.pngCount}张图片识别失败`, message: `倒数第${that.pngCount}张图片识别失败`,
duration: 0 duration: 0
}) })
} else { } else {
ElMessage.info({ ElMessage.warning(
message: `正在识别倒数第${that.pngCount - 1}张图片,请稍后`, {
duration: 0 message: `正在识别倒数第${that.pngCount - 1}张图片,请稍后`,
}) duration: 0
});
let tableItem = _.get(res, ['resultsObj'], {}) let tableItem = _.get(res, ['resultsObj'], {})
myDatabase.users.add({ ...tableItem, create_at: dayjs().format('YYYY-MM-DD HH:mm:ss'), update_at: dayjs().format('YYYY-MM-DD HH:mm:ss') }) myDatabase.users.add({ ...tableItem, create_at: dayjs().format('YYYY-MM-DD HH:mm:ss'), update_at: dayjs().format('YYYY-MM-DD HH:mm:ss') })
} }
@ -185,11 +206,15 @@ export default {
// //
async updateSeach(params = {}) { async updateSeach(params = {}) {
let userList = [] let userList = []
let totalList = 0
if (params.Name) { if (params.Name) {
userList = await myDatabase.users.where('Name').anyPass(user => user.includes(params.Name)).offset(this.currentPage - 1).limit(this.pageSize).toArray() userList = await myDatabase.users.where('Name').anyPass(user => user.includes(params.Name)).offset((this.currentPage - 1) * this.pageSize).limit(this.pageSize).toArray()
totalList = await myDatabase.users.where('Name').anyPass(user => user.includes(params.Name)).toArray()
} else { } else {
userList = await myDatabase.users.offset(this.currentPage - 1).limit(this.pageSize).toArray() userList = await myDatabase.users.offset((this.currentPage - 1) * this.pageSize).limit(this.pageSize).toArray()
totalList = await myDatabase.users.toArray()
} }
this.total = totalList.length
this.tableData = _.cloneDeep(userList) this.tableData = _.cloneDeep(userList)
}, },
// //
@ -211,6 +236,7 @@ export default {
}, },
// //
async handleSizeChange(pageSize) { async handleSizeChange(pageSize) {
this.currentPage = 1
this.pageSize = pageSize this.pageSize = pageSize
await this.searchData() await this.searchData()
}, },
@ -227,7 +253,6 @@ export default {
// //
async submitDialog() { async submitDialog() {
let postMethod = ["add", "put"] let postMethod = ["add", "put"]
console.log(7411, postMethod, this.dialogFrom.type, this.dialogFrom.formData)
if (this.dialogFrom.type === "add") { if (this.dialogFrom.type === "add") {
myDatabase.users[this.dialogFrom.type]({ ...this.dialogFrom.formData, create_at: dayjs().format('YYYY-MM-DD HH:mm:ss'), update_at: dayjs().format('YYYY-MM-DD HH:mm:ss') }) myDatabase.users[this.dialogFrom.type]({ ...this.dialogFrom.formData, create_at: dayjs().format('YYYY-MM-DD HH:mm:ss'), update_at: dayjs().format('YYYY-MM-DD HH:mm:ss') })
} else if (this.dialogFrom.type === "put") { } else if (this.dialogFrom.type === "put") {
@ -310,7 +335,6 @@ export default {
await this.searchData() await this.searchData()
}) })
.catch(() => { .catch(() => {
console.log(333)
ElMessage({ ElMessage({
type: 'info', type: 'info',
message: '取消删除', message: '取消删除',
@ -341,6 +365,38 @@ export default {
}) })
}) })
}, },
//
async exportData() {
let listCopy = _.cloneDeep(this.selectionData)
if (!listCopy.length) {
listCopy = await myDatabase.users.toArray()
}
let lilstLocal = []
if (listCopy.length) {
for (let i = 0; i < listCopy.length; i++) {
let item = listCopy[i];
let listItem = {}
for (let j = 0; j < tableHeaderLocal.length; j++) {
let headerItem = tableHeaderLocal[j];
listItem[headerItem.label] = item[headerItem.prop]
}
lilstLocal.push(listItem)
}
let jsonWorkSheet = XLSX.utils.json_to_sheet(lilstLocal);
let workBook = {
SheetNames: ["sheet1"],
Sheets: {
["sheet1"]: jsonWorkSheet,
}
};
XLSX.writeFile(workBook, `电表数据${dayjs().format("YYYY-MM-DD_HH-mm-ss")}.xls`);
} else {
ElMessage({
type: 'error',
message: '当前无数据,请输入数据后导出',
})
}
}
}, },
async mounted() { async mounted() {
this.tableHeader = _.filter(tableHeaderLocal, o => o.tableShow) this.tableHeader = _.filter(tableHeaderLocal, o => o.tableShow)

Loading…
Cancel
Save