Browse Source

1212

master
lichong 9 months ago
parent
commit
021921dd19
  1. 143
      api/main.py
  2. 1
      front/package.json
  3. 12
      front/src/App.vue
  4. 9
      front/src/api/user.js
  5. 31
      front/src/component/changeItem.vue
  6. 43
      front/src/component/table.vue
  7. 22
      front/src/views/home.vue
  8. 32
      front/src/views/login.vue
  9. 219
      front/src/views/user.vue

143
api/main.py

@ -5,6 +5,7 @@ import hashlib
import json
from flask import Flask, render_template, request
from flask_socketio import SocketIO, Namespace, emit
import time
app = Flask(__name__)
client = MongoClient("mongodb://localhost:27019/")
@ -115,8 +116,8 @@ def md5_encrypt(data):
def initData():
admin = collection.find_one({"isAdmin": 1, "isExit": 1})
if admin is None:
# 学校名称、学校代号、专业名称、专业代号、年级、班级、学生姓名、学号、密码、成绩、作弊情况(作弊类型、作弊时间、作弊图片)、考试类型、考试科目、考试时间段、是否是管理员、是否删除、创建时间、更新时间
# xuexiaomingcheng、xuexiaodaihao、zhuanyemingcheng、zhuanyedaihao、nianji、banji、xueshengxingming、xuehao、mima、chengji、zuobiqingkuang(zuobileixing、zuobishijian、zuobitupian)、kaoshileixing、kaoshikemu、kaoshishijianduan、isAdmin、isExit、chuangjianshijian、gengxinshijian
# 学校名称、学校代号、专业名称、专业代号、年级、班级、学生姓名、学号、密码、成绩、作弊情况(作弊类型、作弊时间、作弊图片)、考试类型、考试科目、考试时间段、考试链接、是否是管理员、是否删除、创建时间、更新时间
# xuexiaomingcheng、xuexiaodaihao、zhuanyemingcheng、zhuanyedaihao、nianji、banji、xueshengxingming、xuehao、mima、chengji、zuobiqingkuang(zuobileixing、zuobishijian、zuobitupian)、kaoshileixing、kaoshikemu、kaoshishijianduan、kaoshilianjie、isAdmin、isExit、chuangjianshijian、gengxinshijian
user = {
"xuexiaomingcheng": "",
"xuexiaodaihao": "",
@ -132,6 +133,7 @@ def initData():
"kaoshileixing": "",
"kaoshikemu": "",
"kaoshishijianduan": "",
"kaoshilianjie": "",
"isAdmin": 1,
"isExit": 1,
"chuangjianshijian": "",
@ -179,36 +181,145 @@ def login():
# 新增用户
@app.route("/addUser", methods=["post"])
def insert_data():
user = {"name": "John Doe", "age": 25, "city": "New York"}
collection.insert_one(user)
return "Data inserted successfully!"
resData = request.data
# 检测是否有数据
if not resData:
return {"code": 200, "msg": "无数据", "list": [], "hasError": True}
# 获取到POST过来的数据,转为json形式
userJson = json.loads(resData)
admin = isAdmin(userJson["id"])
print(777, userJson, admin)
if admin:
if userJson["subType"] is "add":
userItem = {
"xuexiaomingcheng": userJson["xuexiaomingcheng"],
"xuexiaodaihao": userJson["xuexiaodaihao"],
"zhuanyemingcheng": userJson["zhuanyemingcheng"],
"zhuanyedaihao": userJson["zhuanyedaihao"],
"nianji": userJson["nianji"],
"banji": userJson["banji"],
"xueshengxingming": userJson["xueshengxingming"],
"xuehao": userJson["xuehao"],
"mima": md5_encrypt(userJson["mima"]),
"chengji": userJson["chengji"],
"zuobiqingkuang": userJson["zuobiqingkuang"],
"kaoshileixing": userJson["kaoshileixing"],
"kaoshikemu": userJson["kaoshikemu"],
"kaoshishijianduan": userJson["kaoshishijianduan"],
"kaoshilianjie": "", # 需要自动生成一个链接
"isAdmin": 0,
"isExit": 1,
"chuangjianshijian": time.strftime(
"%Y-%m-%d %H:%M:%S", time.localtime(time.time())
),
"gengxinshijian": time.strftime(
"%Y-%m-%d %H:%M:%S", time.localtime(time.time())
),
}
collection.insert_one(userItem)
return "新增成功"
# 查询用户
@app.route("/getUser", methods=["post"])
def query_data():
resData = request.data
# 检测是否有数据
if not resData:
return {"code": 200, "msg": "请填写信息后登录", "list": [], "hasError": True}
# 获取到POST过来的数据,转为json形式
userJson = json.loads(resData)
admin = isAdmin(userJson["id"])
print(777, userJson, admin)
if admin:
users = collection.find()
result = ""
for user in users:
result += f"Name: {user['name']}, Age: {user['age']}, City: {user['city']}<br>"
return result
serialized_data = []
for item in users:
item["_id"] = str(item["_id"]) # 将ObjectId转换为字符串
serialized_data.append(item)
return {
"code": 200,
"msg": "查询成功",
"list": serialized_data,
"hasError": False,
}
else:
return {"code": 200, "msg": "您不是管理员用户", "list": [], "hasError": True}
# 更新用户
@app.route("/updateUser", methods=["post"])
def update_data():
query = {"name": "John Doe"}
new_data = {"$set": {"age": 30, "city": "San Francisco"}}
collection.update_one(query, new_data)
return "Data updated successfully!"
resData = request.data
# 检测是否有数据
if not resData:
return {"code": 200, "msg": "无数据", "list": [], "hasError": True}
# 获取到POST过来的数据,转为json形式
userJson = json.loads(resData)
admin = isAdmin(userJson["id"])
if admin:
userItem = {
"xuexiaomingcheng": userJson["xuexiaomingcheng"],
"xuexiaodaihao": userJson["xuexiaodaihao"],
"zhuanyemingcheng": userJson["zhuanyemingcheng"],
"zhuanyedaihao": userJson["zhuanyedaihao"],
"nianji": userJson["nianji"],
"banji": userJson["banji"],
"xueshengxingming": userJson["xueshengxingming"],
"xuehao": userJson["xuehao"],
"chengji": userJson["chengji"],
"zuobiqingkuang": userJson["zuobiqingkuang"],
"kaoshileixing": userJson["kaoshileixing"],
"kaoshikemu": userJson["kaoshikemu"],
"kaoshishijianduan": userJson["kaoshishijianduan"],
"gengxinshijian": time.strftime(
"%Y-%m-%d %H:%M:%S", time.localtime(time.time())
),
}
collection.update_one(
{"_id": ObjectId(userJson["userid"])},
{"$set": userItem},
)
return "修改成功"
# 删除用户
@app.route("/delUser", methods=["post"])
def delete_data():
query = {"name": "John Doe"}
collection.delete_one(query)
return "Data deleted successfully!"
resData = request.data
# 检测是否有数据
if not resData:
return {"code": 200, "msg": "无数据", "list": [], "hasError": True}
# 获取到POST过来的数据,转为json形式
userJson = json.loads(resData)
admin = isAdmin(userJson["id"])
if admin:
serialized_data = []
for item in userJson["ids"]:
serialized_data.append(ObjectId(item)) # 将ObjectId转换为字符串
collection.delete_many({"_id": {"$in": serialized_data}})
return "删除成功"
# 修改密码
@app.route("/updatePassword", methods=["post"])
def updatePassword():
resData = request.data
# 检测是否有数据
if not resData:
return {"code": 200, "msg": "无数据", "list": [], "hasError": True}
# 获取到POST过来的数据,转为json形式
userJson = json.loads(resData)
admin = isAdmin(userJson["id"])
print(777, userJson, admin)
if admin:
collection.update_one(
{"_id": ObjectId(userJson["userid"])},
{
"$set": {"mima": md5_encrypt(userJson["mima"])},
},
)
return {"code": 200, "msg": "修改成功", "list": [], "hasError": False}
if __name__ == "__main__":

1
front/package.json

@ -17,6 +17,7 @@
"nprogress": "^0.2.0",
"papaparse": "^5.4.1",
"qs": "^6.11.2",
"sqids": "^0.3.0",
"unplugin-auto-import": "^0.17.4",
"unplugin-vue-components": "^0.26.0",
"vue": "^3.3.11",

12
front/src/App.vue

@ -1,13 +1,21 @@
<template>
<el-config-provider :locale="locale">
<router-view />
</el-config-provider>
</template>
<script>
import { ElConfigProvider } from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
export default {
name: "app",
components: {
ElConfigProvider,
},
data() {
return {};
return {
locale: zhCn,
};
},
async mounted() { },
methods: {

9
front/src/api/user.js

@ -43,4 +43,11 @@ export function getUser(data) {
data: { ...data, id: localStorage.getItem("userId") },
});
}
//修改密码
export function updatePassword(data) {
return _axios({
url: `/v1/updatePassword`,
method: "POST",
data: { ...data, id: localStorage.getItem("userId") },
});
}

31
front/src/component/changeItem.vue

@ -2,25 +2,14 @@
<el-form :inline="true" :disabled="formDisabled" :model="formData" label-suffix=":" label-width="100px">
<el-row>
<el-col v-for="(headerItem, headerIndex) in formHeader" :key="headerIndex" :span="8">
<el-form-item :label="headerItem.label" v-if="!(['time'].indexOf(headerItem.type) !== -1 && type === 'add')">
<template v-if="['select'].indexOf(headerItem.type) !== -1">
<el-select-v2 filterable v-model="formData[headerItem.inputValue]" multiple collapse-tags
collapse-tags-tooltip :options="headerItem.options" :placeholder="headerItem.label" style="width: 330px"
:max-collapse-tags="2" />
<el-form-item :label="headerItem.label">
<template v-if="['text'].indexOf(headerItem.type) !== -1">
<el-input v-model="formData[headerItem.prop]" :placeholder="headerItem.label" :type="headerItem.type"
clearable style="width: 330px" />
</template>
<template v-else-if="['time'].indexOf(headerItem.type) !== -1">
<el-date-picker v-model="formData[headerItem.inputValue]" type="datetime" :disabled="headerItem.disabled"
:placeholder="headerItem.label" format="YYYY/MM/DD HH:mm:ss" style="width: 330px" />
</template>
<template v-else-if="['switch'].indexOf(headerItem.type) !== -1">
<el-switch v-model="formData[headerItem.inputValue]" style="width: 330px"/>
</template>
<template v-else-if="['text', 'email', 'textarea', 'password'].indexOf(
headerItem.type
) !== -1
">
<el-input v-model="formData[headerItem.inputValue]" :placeholder="headerItem.label" :type="headerItem.type"
clearable :show-password="headerItem.type === 'password'" style="width: 330px" />
<template v-else-if="['datetimerange'].indexOf(headerItem.type) !== -1">
<el-date-picker v-model="formData[headerItem.prop]" type="datetimerange" range-separator=""
start-placeholder="考试开始时间" end-placeholder="考试结束时间" />
</template>
</el-form-item>
</el-col>
@ -31,12 +20,6 @@
export default {
name: "bug",
props: {
type: {
typeof: String,
default: () => {
return "";
},
},
formHeader: {
typeof: Array,
default: () => {

43
front/src/component/table.vue

@ -1,9 +1,9 @@
<template>
<el-table :ref="refName" :data="tableData" class="mainTable" show-overflow-tooltip>
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column type="index" width="50">
<el-table-column type="index" width="66" label="order">
<template #default="scope">
{{ scope.$index + 1 + pageSize * (currentPage - 1) }}
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column v-for="(headerItem, headerIndex) in tableHeader" :key="headerItem._id"
@ -33,17 +33,19 @@
<Edit />
</el-icon>
</el-button>
<el-button link type="primary" text @click="updateMima(scope.row)">
<el-icon>
<WalletFilled />
</el-icon>
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="pageSizes"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange"
@current-change="handleCurrentChange" class="pagination" />
</template>
<script>
export default {
name: "app",
emits: ["detailInfo", "editInfo", "handleSizeChange", "handleCurrentChange"],
emits: ["detailInfo", "editInfo"],
props: {
refName: {
typeof: String,
@ -61,24 +63,6 @@ export default {
return [];
},
},
currentPage: {
typeof: Number,
default: 1,
},
pageSize: {
typeof: Number,
default: 20,
},
pageSizes: {
typeof: Number,
default: () => {
return [16, 50, 100, 200];
},
},
total: {
typeof: Number,
default: 0,
},
},
data() {
return {};
@ -91,12 +75,9 @@ export default {
editInfo(item) {
this.$emit("editInfo", item);
},
handleSizeChange(sizeVal) {
this.$emit("handleSizeChange", sizeVal);
},
handleCurrentChange(currentSize) {
this.$emit("handleCurrentChange", currentSize);
},
updateMima(item) {
this.$emit("updateMima", item);
}
},
watch: {},
computed: {},
@ -104,7 +85,7 @@ export default {
</script>
<style scoped>
.mainTable {
height: calc(100vh - 208px);
height: calc(100vh - 112px);
width: 100%;
}

22
front/src/views/home.vue

@ -3,28 +3,23 @@
<el-header class="appHeader">
<el-row>
<el-col :span="23" style="align-self: center">
<el-image style="width: 60px; height: 60px" :src="logoUrl" fit="contain" />
<el-image style="width: 40px; height: 60px" :src="logoUrl" fit="contain" />
</el-col>
<el-col :span="1" style="align-self: center">
<el-dropdown>
<span> <el-avatar :src="teacherUrl" /> </span>
<span> <el-avatar :src="avatarUrl" /> </span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="logout">退出</el-dropdown-item>
<el-dropdown-item @click="logout">logout</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</el-col>
</el-row>
</el-header>
<el-container>
<el-container>
<el-main class="appMain">
<router-view />
</el-main>
<el-footer class="appFooter">版权所有</el-footer>
</el-container>
</el-container>
</el-container>
</template>
@ -37,8 +32,7 @@ export default {
data() {
return {
logoUrl: logo,
teacherUrl: teacher,
studentUrl: student,
avatarUrl: "",
userName: "",
};
},
@ -51,6 +45,12 @@ export default {
this.$router.push("/login");
}
this.userName = localStorage.getItem("userName")
let isAdmin = localStorage.getItem("isAdmin")
if (isAdmin) {
this.avatarUrl = teacher
} else {
this.avatarUrl = student
}
},
async logout() {
localStorage.clear()
@ -70,7 +70,7 @@ export default {
}
.appMain {
height: calc(100vh - 120px);
height: calc(100vh - 60px);
padding: 8px;
}

32
front/src/views/login.vue

@ -4,34 +4,23 @@
<el-card shadow="hover" style="width: 450px">
<template #header>
<div style="text-align: center">
<el-button class="button" text @click="regist = false">
登录
</el-button>
<!-- <el-button class="button" text @click="regist = true">
注册
</el-button> -->
login
</div>
</template>
<div>
<el-form :model="regForm" label-suffix=":" @submit.prevent>
<el-form-item label="账号">
<el-input v-model="regForm.name" placeholder="请输入账号" />
<el-form :model="regForm" label-suffix=":" @submit.prevent label-width="auto">
<el-form-item label="student number">
<el-input v-model="regForm.name" placeholder="please input student number" />
</el-form-item>
<el-form-item label="密码">
<el-input v-model="regForm.password" type="password" placeholder="请输入密码" show-password
<el-form-item label="password">
<el-input v-model="regForm.password" type="password" placeholder="please input password" show-password
@keyup.enter="login" />
</el-form-item>
<el-form-item label="邮箱" v-if="regist">
<el-input v-model="regForm.email" placeholder="请输入邮箱" />
</el-form-item>
</el-form>
</div>
<template #footer>
<div style="text-align: center">
<el-button class="button" v-if="regist" @click="login">
注册
</el-button>
<el-button class="button" v-else @click="login"> 登录 </el-button>
<el-button class="button" @click="login"> login </el-button>
</div>
</template>
</el-card>
@ -48,11 +37,9 @@ export default {
components: {},
data() {
return {
regist: false,
regForm: {
name: "",
password: "",
email: "",
},
};
},
@ -66,21 +53,18 @@ export default {
methods: {
dealForm() {
return {
regist: this.regist,
xuehao: this.regForm.name,
mima: md5(this.regForm.password),
email: this.regForm.email,
}
},
async init() { },
async login() {
let formData = this.dealForm()
let res = await loginFun(formData)
console.log(999, res)
if (!res.hasError) {
ElMessage.success(res.msg);
localStorage.setItem("userId", this.$_.get(res, ["list", 0, "_id"], ""))
localStorage.setItem("userName", this.$_.get(res, ["list", 0, "xueshengxingming"], ""))
localStorage.setItem("isAdmin", this.$_.get(res, ["list", 0, "isAdmin"], 0))
this.$router.push("/user")
} else {
ElMessage.error(res.msg);

219
front/src/views/user.vue

@ -1,41 +1,30 @@
<template>
<el-row style="margin: 0 0 8px 0">
<el-col :span="4">
<el-row>
<el-col :span="16">
<div style="margin-bottom: 4px;">
<el-button icon="Plus" type="primary" @click="addUserData">
新增
add User
</el-button>
<el-button icon="Delete" type="danger" @click="delUserData">
删除
delete User
</el-button>
<el-button icon="Refresh" type="info" @click="init({})" text>
刷新
refresh
</el-button>
</div>
<div>
<vueTable ref="userTableParent" :refName="refName" :tableHeader="tableHeader" :tableData="tableData"
@detailInfo="detailInfo" @editInfo="editInfo" @updateMima="updateMima">
</vueTable>
</div>
</el-col>
<el-col :span="2">
<el-upload :limit="1" accept="text/csv" :auto-upload="false" :on-change="fileChange">
<template #trigger>
<el-button type="primary">文件上传</el-button>
</template>
<template #file> </template>
</el-upload>
</el-col>
<el-col :span="6">
<el-input v-model="searchValue" placeholder="Please input email" @keyup.enter="searchId">
<template #append>
<el-button @click="searchId" icon="Search" />
</template>
</el-input>
<el-col :span="8">
监控画面
</el-col>
</el-row>
<div v-loading="loading">
<vueTable ref="userTableParent" :tableHeader="tableHeader" :tableData="tableData" @detailInfo="detailInfo"
@editInfo="editInfo">
</vueTable>
</div>
<el-dialog v-model="addDialog.show" :title="addDialog.title" width="80%" draggable
:close-on-click-modal="formDisabled">
<changeItem :formData="formData" :formDisabled="formDisabled" :type="addDialog.type" :formHeader="formHeaderLocal">
<changeItem :formData="formData" :formDisabled="formDisabled" :type="addDialog.type" :formHeader="formHeader">
</changeItem>
<template #footer v-if="!formDisabled">
<div class="dialog-footer">
@ -49,7 +38,6 @@
</template>
<script>
import md5 from "md5";
import Papa from "papaparse";
import vueTable from "../component/table.vue";
import changeItem from "../component/changeItem.vue";
import _ from "lodash";
@ -58,6 +46,7 @@ import {
delUser, //user
updateUser, //user
getUser, //user
updatePassword,//
} from "@/api/user";
export default {
name: "user",
@ -65,7 +54,7 @@ export default {
data() {
return {
_: _,
loading: false,
refName: "userTable",
localComponent: [
{
prop: "xuexiaomingcheng",
@ -182,65 +171,16 @@ export default {
],
tableHeader: [],
tableData: [],
currentPage: 1,
pageSize: 16,
pageSizes: [16, 50, 100, 200],
total: 0,
addDialog: {
type: "add",
show: false,
title: "新增用户",
},
formData: {
name: "",
password: "",
email: "",
loginTime: "",
},
formHeader: [
{
type: "text",
label: "name",
inputValue: "name",
},
{
type: "password",
label: "password",
inputValue: "password",
},
{
type: "email",
label: "email",
inputValue: "email",
},
{
type: "switch",
label: "allowRegist",
inputValue: "allowRegist",
hidden: true,
},
{
type: "time",
disabled: true,
label: "loginTime",
inputValue: "loginTime",
},
{
type: "time",
disabled: true,
label: "create_at",
inputValue: "create_at",
},
{
type: "time",
disabled: true,
label: "update_at",
inputValue: "update_at",
},
],
formData: {},
formDataLocal: {},
formHeader: [],
formHeaderLocal: [],
formDisabled: false,
searchValue: "",
};
},
watch: {},
@ -253,52 +193,67 @@ export default {
beforeUnmount() { },
methods: {
dealTableHeader() {
this.tableData = _.filter(this.localComponent, o => o.tableShow)
this.tableHeader = _.filter(this.localComponent, o => {
o.minWidth = o.label.length * 17 + 5
return o.tableShow
})
},
//
dealFormHeader() {
this.formHeader = _.filter(this.localComponent, o => o.formShow)
this.formHeaderLocal = []
this.formDataLocal = {}
for (let i = 0; i < this.localComponent.length; i++) {
let element = this.localComponent[i];
if (element.formShow) {
this.formHeaderLocal.push({ ...element })
if (["text"].indexOf(element.type) !== -1) {
this.formDataLocal[element.prop] = ""
} else if (["datetimerange"].indexOf(element.type) !== -1) {
this.formDataLocal[element.prop] = []
}
}
}
},
//
async init(params = {}) {
this.loading = true;
let res = await getUser({
...params,
});
this.tableData = res.list;
this.loading = false;
},
//
async addUserData() {
this.addDialog = {
type: "add",
show: true,
title: "新增用户",
title: "新增学生",
};
this.formData = {};
this.formHeaderLocal = this.$_.reject(this.formHeader, { hidden: true });
this.formData = { ...this.formDataLocal };
this.formHeader = _.cloneDeep(this.formHeaderLocal)
this.formDisabled = false;
},
closeDialog(addDialog) {
addDialog.show = false;
},
//
async submitAdd() {
let subData = { subType: this.addDialog.type };
let subData = {};
for (let i = 0; i < this.formHeader.length; i++) {
let elei = this.formHeader[i];
if (elei.type !== "time") {
subData[elei.inputValue] = this.formData[elei.inputValue];
}
if (elei.type === "select") {
subData[`${elei.inputValue}_str`] = this.$_.join(
this.formData[elei.inputValue],
","
);
subData[elei.prop] = this.formData[elei.prop];
}
}
if (this.addDialog.type === "edit") {
subData["_id"] = this.formData._id;
subData["userid"] = this.formData._id;
}
subData["password"] = md5(this.$_.trim(this.formData.password));
let res = {}
try {
let res = await addUser(subData);
if (this.addDialog.type === "edit") {
res = await updateUser(subData);
} else {
res = await addUser(subData);
}
ElMessage({
message: res.msg,
type: "success",
@ -309,6 +264,7 @@ export default {
await this.init();
}
},
//
async delUserData() {
let rowList =
this.$refs[`${this.refName}Parent`].$refs[
@ -319,7 +275,7 @@ export default {
for (let i = 0; i < rowList.length; i++) {
let elei = rowList[i];
delData.push(elei._id);
delDispalyData.push(`${elei.BugID}`);
delDispalyData.push(`${elei.xueshengxingming}`);
}
ElMessageBox.confirm(`${delDispalyData.join("、")}`, "删除", {
confirmButtonText: "确认",
@ -334,75 +290,40 @@ export default {
});
});
},
//
detailInfo(item) {
this.addDialog = {
type: "info",
show: true,
title: `查看${item.name}`,
title: `查看${item.name || ""}`,
};
if (item.name !== "admin") {
this.formHeaderLocal = this.$_.reject(this.formHeader, {
hidden: true,
});
} else {
this.formHeaderLocal = this.$_.cloneDeep(this.formHeader);
}
this.formDisabled = true;
this.formData = item;
this.formHeader = _.cloneDeep(_.filter(this.formHeaderLocal, o => o.prop !== "mima"))
this.formData = { ...item };
},
//
editInfo(item) {
this.addDialog = {
type: "edit",
show: true,
title: `编辑${item.name}`,
title: `编辑${item.name || ""}`,
};
if (item.name !== "admin") {
this.formHeaderLocal = this.$_.reject(this.formHeader, {
hidden: true,
});
} else {
this.formHeaderLocal = this.$_.cloneDeep(this.formHeader);
}
this.formDisabled = false;
this.formHeader = _.cloneDeep(_.filter(this.formHeaderLocal, o => o.prop !== "mima"))
this.formData = { ...item };
},
async handleSizeChange(pageSize) {
this.pageSize = pageSize;
await this.init();
},
async handleCurrentChange(currentPage) {
this.currentPage = currentPage;
await this.init();
},
fileChange(file) {
let fileData = [];
let that = this;
Papa.parse(file.raw, {
complete: async (result) => {
for (let i = 1; i < result.data.length; i++) {
let elei = result.data[i];
fileData.push({
name: that.$_.trim(elei[4]),
password: md5(that.$_.trim(elei[4])),
email: that.$_.trim(elei[4]),
});
}
let fileDataLocal = that.$_.uniqBy(fileData, "name");
let res = await addUser({ subType: "multi", list: fileDataLocal });
await this.init();
//
updateMima(item) {
ElMessageBox.prompt("请输入新密码", "修改密码", {
confirmButtonText: "确认",
cancelButtonText: "取消",
}).then(async (value) => {
let res = await updatePassword({ userid: item._id, mima: value.value });
ElMessage({
message: res.msg,
type: "success",
});
},
});
},
async searchId() {
if (this.$_.trim(this.searchValue)) {
await this.init({ email: this.searchValue }, false);
} else {
await this.init();
}
})
},
},
};

Loading…
Cancel
Save