Browse Source

12222

master
lichong 7 months ago
parent
commit
6980818e36
  1. BIN
      dataDeal/data.xlsx
  2. BIN
      dataDeal/导入导出模版.xlsx
  3. 2
      front/src/renderer/src/assets/js/db.js
  4. 684
      front/src/renderer/src/assets/json/jifen.json
  5. 145
      front/src/renderer/src/assets/json/student.json
  6. 173
      front/src/renderer/src/views/student.vue

BIN
dataDeal/data.xlsx

Binary file not shown.

BIN
dataDeal/导入导出模版.xlsx

Binary file not shown.

2
front/src/renderer/src/assets/js/db.js

@ -4,6 +4,6 @@ export const myDatabase = new Dexie('myDatabase');
// 定义数据库版本
myDatabase.version(1).stores({
student: '++id, nianjicode, banjicode, nianji, banji, xuejihao, minzudaima, minzu, name, gender, birth, address, height, weight, BMI, BMIscore, lungs, lungsccore, fifty, fiftyscore, sitforward, sitforwardscore, jump, jumpscore, situp, situpscore, fiftyeight, fiftyeightscore, stand, standscore, eighty, eightyscore, thousand ,thousandscore, pullup, pullupscore, totalscore, level, note1, nodt2, create_at, update_at',
student: '++id, nianjicode, banjicode, nianji, banji, &xuejihao, minzudaima, minzu, name, gender, birth, address, height, weight, BMI, BMIscore, lungs, lungsccore, fifty, fiftyscore, sitforward, sitforwardscore, jump, jumpscore, situp, situpscore, fiftyeight, fiftyeightscore, stand, standscore, eighty, eightyscore, thousand ,thousandscore, pullup, pullupscore, totalscore, level, note1, nodt2, create_at, update_at',
jihuoshijian: '++id, jihuoma, isVip, zhucema, create_at, update_at'
});

684
front/src/renderer/src/assets/json/jifen.json

File diff suppressed because it is too large

145
front/src/renderer/src/assets/json/student.json

@ -6,16 +6,17 @@
"index": "0",
"fixed": true,
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "班级编号",
"prop": "banjicode",
"type": "text",
"index": "1",
"fixed": true,
"tableShow": true,
"formShow": true
"tableShow": false,
"formShow": false,
"export": true
},
{
"label": "年级",
@ -23,7 +24,8 @@
"type": "text",
"index": "-1",
"tableShow": false,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "班级名称",
@ -32,32 +34,35 @@
"index": "2",
"fixed": true,
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "学籍号",
"prop": "xuejihao",
"type": "text",
"index": "3",
"fixed": true,
"tableShow": true,
"formShow": true
"tableShow": false,
"formShow": false,
"export": true
},
{
"label": "民族代码",
"prop": "minzudaima",
"type": "text",
"index": "4",
"tableShow": true,
"formShow": true
"tableShow": false,
"formShow": false,
"export": true
},
{
"label": "民族",
"prop": "minzu",
"type": "text",
"index": "-1",
"tableShow": true,
"formShow": true
"tableShow": false,
"formShow": false,
"export": false
},
{
"label": "姓名",
@ -66,7 +71,8 @@
"index": "5",
"fixed": true,
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "性别",
@ -84,7 +90,8 @@
"type": "text",
"index": "6",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "出生日期",
@ -92,16 +99,18 @@
"type": "date",
"default": 10,
"index": "7",
"tableShow": true,
"formShow": true
"tableShow": false,
"formShow": false,
"export": true
},
{
"label": "家庭住址",
"prop": "address",
"type": "text",
"index": "8",
"tableShow": true,
"formShow": true
"tableShow": false,
"formShow": false,
"export": true
},
{
"label": "身高",
@ -109,7 +118,8 @@
"type": "number",
"index": "9",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "体重",
@ -117,7 +127,8 @@
"type": "number",
"index": "10",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "BMI",
@ -125,7 +136,8 @@
"type": "number",
"index": "11",
"tableShow": true,
"formShow": true
"formShow": true,
"export": false
},
{
"label": "BMI得分",
@ -133,7 +145,8 @@
"type": "number",
"index": "12",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "肺活量",
@ -141,7 +154,8 @@
"type": "number",
"index": "13",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -149,15 +163,17 @@
"type": "number",
"index": "14",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "50米跑",
"prop": "fifty",
"type": "number",
"type": "text",
"index": "15",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -165,7 +181,8 @@
"type": "number",
"index": "16",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "坐位体前屈",
@ -173,7 +190,8 @@
"type": "number",
"index": "17",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -181,7 +199,8 @@
"type": "number",
"index": "18",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "一分钟跳绳",
@ -189,7 +208,8 @@
"type": "number",
"index": "19",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -197,7 +217,8 @@
"type": "number",
"index": "20",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "一分钟仰卧起坐",
@ -205,7 +226,8 @@
"type": "number",
"index": "21",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -213,15 +235,17 @@
"type": "number",
"index": "22",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "50米×8往返跑",
"prop": "fiftyeight",
"type": "number",
"type": "text",
"index": "23",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -229,7 +253,8 @@
"type": "number",
"index": "24",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "立定跳远",
@ -237,7 +262,8 @@
"type": "number",
"index": "25",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -245,15 +271,17 @@
"type": "number",
"index": "26",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "800米跑",
"prop": "eighty",
"type": "number",
"type": "text",
"index": "27",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -261,15 +289,17 @@
"type": "number",
"index": "28",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "1000米跑",
"prop": "thousand",
"type": "number",
"type": "text",
"index": "29",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -277,7 +307,8 @@
"type": "number",
"index": "30",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "引体向上",
@ -285,7 +316,8 @@
"type": "number",
"index": "31",
"tableShow": true,
"formShow": true
"formShow": true,
"export": true
},
{
"label": "得分",
@ -293,7 +325,8 @@
"type": "number",
"index": "32",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "总分",
@ -301,7 +334,8 @@
"type": "number",
"index": "33",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "等级",
@ -309,7 +343,8 @@
"type": "text",
"index": "34",
"tableShow": true,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "备注1",
@ -317,7 +352,8 @@
"type": "text",
"index": "35",
"tableShow": false,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "备注2",
@ -325,7 +361,8 @@
"type": "text",
"index": "36",
"tableShow": false,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "创建时间",
@ -333,7 +370,8 @@
"type": "date",
"default": 0,
"tableShow": false,
"formShow": false
"formShow": false,
"export": false
},
{
"label": "更新时间",
@ -341,6 +379,7 @@
"type": "date",
"default": 0,
"tableShow": false,
"formShow": false
"formShow": false,
"export": false
}
]

173
front/src/renderer/src/views/student.vue

@ -79,6 +79,7 @@
import _ from 'lodash'
import * as XLSX from 'xlsx';
import tableHeaderLocal from '../assets/json/student.json'
import jifen from '../assets/json/jifen.json'
import { myDatabase } from '../assets/js/db.js'
import dayjs from 'dayjs'
import tablecomponent from "../components/tablecomponent.vue"
@ -93,11 +94,13 @@ export default {
dayjs: dayjs,
tableHeader: [],
formHeader: [],
exportHeader: [],
tableData: [],
currentPage: 1,
pageSize: 12,
pageSizes: [12, 50, 100, 200],
total: 0,
fileOriData: null,
searchParams: {
name: ""
},
@ -134,14 +137,168 @@ export default {
let fileReader = new FileReader()
fileReader.onload = async function () {
let data = this.result
let workbook = that.$XLSX.read(data, { type: 'binary' })
let workbook = XLSX.read(data, { type: 'binary' })
let sheetName = workbook.SheetNames[0]
let sheetData = that.$XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { header: 1, defval: '' })
let list = []
let sheetData = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName])
for (let i = 0; i < sheetData.length; i++) {
let element = sheetData[i];
let dealItem = {}
for (let key in element) {
let headerItem = _.find(tableHeaderLocal, o => o.label === key)
dealItem[headerItem.prop] = element[key]
}
try {
await myDatabase.student.add({
...dealItem,
...that.dealRow(dealItem),
create_at: dayjs().format('YYYY-MM-DD HH:mm:ss'),
update_at: dayjs().format('YYYY-MM-DD HH:mm:ss')
})
} catch (error) {
ElMessage({
message: `${dealItem.name}(${dealItem.xuejihao})学籍号重复,不可再次新增该学生信息`,
type: 'error',
})
}
await that.searchData()
}
}
fileReader.onerror = function (error) {
ElMessage({
message: `Error reading file:, ${error}`,
type: 'error',
})
}
fileReader.readAsArrayBuffer(file)
},
//
dealRow(row) {
row["addScore"] = 0
row["BMI"] = Number(Number(row.weight / (row.height * row.height / 10000)).toFixed(2))
// let nianjicodeList = ["11", "12","13","14", "15","16","21", "22","23","31", "32","33","41","42"]
let nianjicodeList = ["11", "12", "13", "14", "15", "16", "21", "22", "23"]
if (nianjicodeList.includes(`${row.nianjicode}`)) {
for (let key in jifen) {
let value = jifen[key]
let scoreItem = {}
for (let i = 0; i < value.list.length; i++) {
let item = value.list[i];
let rowValue = this.transTime(row[value.prop])
let itemValue = this.transTime(item[row.nianjicode])
if (item.gender === row.gender && this.createComparator(value.fuhao)(rowValue, itemValue)) {
scoreItem = { ...item }
break
}
}
row[key] = scoreItem.score || ""
row["addScore"] = (Number(row["addScore"] || 0) || 0) + (Number(scoreItem.add_score || 0) || 0)
}
}
// todo
return row
},
transTime(value) {
if (typeof (value) === "number") {
return value
} else if (typeof (value) === "string") {
let time = value.trim();
let seconds = 0;
if (time.includes("'") && time.includes('"')) {
// 2'20"
let parts = time.split(/['"]/).filter(Boolean);
let minutes = parseInt(parts[0], 10);
let secondsPart = parseInt(parts[1], 10);
seconds = minutes * 60 + secondsPart;
} else if (time.includes('.')) {
// 2.20
let parts = time.split('.');
let minutes = parseInt(parts[0], 10);
let secondsPart = parseFloat('.' + parts[1]) * 60;
seconds = minutes * 60 + secondsPart;
} else {
seconds = Number(time)
}
return seconds
}
},
createComparator(operator) {
switch (operator) {
case '<=':
return (a, b) => a <= b;
case '>=':
return (a, b) => a >= b;
case '==':
return (a, b) => a == b;
case '!=':
return (a, b) => a != b;
case '<':
return (a, b) => a < b;
case '>':
return (a, b) => a > b;
default:
throw new Error('Invalid operator');
}
},
//
async successSubmit11(opts) {
let that = this
let file = opts.file
this.fileDealData = []
let fileReader = new FileReader()
fileReader.onload = async function () {
let data = this.result
let dataObj = {}
let workbook = XLSX.read(data, { type: 'binary' })
for (let i = 0; i < workbook.SheetNames.length; i++) {
let sheetName = workbook.SheetNames[i];
let sheetData = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName])
let sheetDataList = []
let noKey = ["prop", "fuhao"]
for (let i = 0; i < sheetData.length; i++) {
let element = sheetData[i];
let item = {}
for (let key in element) {
if (element[key] === "-Infinity") {
element[key] = -100000
} else if (element[key] === "Infinity") {
element[key] = 999999
}
if (element[key] !== "无") {
if (noKey.indexOf(key) === -1) {
item[key] = element[key]
}
if (key === "score") {
if (element[key] > 100) {
item[key] = 100
item[`add_${key}`] = element[key] - 100
}
}
}
}
sheetDataList.push(item)
}
dataObj[sheetName] = {
prop: sheetData[0].prop,
fuhao: sheetData[0].fuhao,
list: sheetDataList
}
}
console.log(774444, dataObj)
// let sheetName = workbook.SheetNames[0]
// let sheetData = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { header: 1, defval: '' })
// console.log(11174444, sheetData)
// let list = []
}
fileReader.onerror = function (error) {
console.error('Error reading file:', error)
ElMessage({
message: `Error reading file:, ${error}`,
type: 'error',
})
}
fileReader.readAsArrayBuffer(file)
},
@ -321,8 +478,6 @@ export default {
})
})
},
//
importStudent() { },
//
async exportData() {
let listCopy = _.cloneDeep(this.selectionData)
@ -355,15 +510,11 @@ export default {
})
}
},
//
dealFormHeaderData() {
},
},
async mounted() {
this.tableHeader = _.filter(tableHeaderLocal, o => o.tableShow)
this.formHeader = _.filter(tableHeaderLocal, o => o.formShow)
this.exportHeader = _.filter(tableHeaderLocal, o => o.export)
await this.updateSeach()
},

Loading…
Cancel
Save