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