|
|
|
@ -51,6 +51,7 @@ |
|
|
|
|
</li> |
|
|
|
|
</ul> |
|
|
|
|
<div> |
|
|
|
|
<el-button type="primary" @click="batchGenerate">一键批量生成账号</el-button> |
|
|
|
|
<el-button type="primary" size="small" round @click="add" v-auth="'/user/list:新增用户'">新增账号</el-button> |
|
|
|
|
<el-button type="primary" size="small" round @click="batchImport" v-auth>批量导入</el-button> |
|
|
|
|
<el-button type="primary" size="small" round @click="delAllSelection" v-auth>批量删除</el-button> |
|
|
|
@ -63,6 +64,7 @@ |
|
|
|
|
<el-table-column type="selection" width="80" align="center"></el-table-column> |
|
|
|
|
<el-table-column type="index" label="序号" width="55" align="center"> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column prop="account" label="账号" align="center" min-width="130"></el-table-column> |
|
|
|
|
<el-table-column prop="userName" label="姓名" align="center"></el-table-column> |
|
|
|
|
<el-table-column prop="workNumber" label="工号/学号" align="center"></el-table-column> |
|
|
|
|
<el-table-column label="权限状态" align="center"> |
|
|
|
@ -104,19 +106,17 @@ |
|
|
|
|
<el-form-item prop="userName" label="用户姓名"> |
|
|
|
|
<el-input v-model="form.userName" placeholder="请输入姓名"></el-input> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item v-if="form.userId" label="账号">{{ form.account }}</el-form-item> |
|
|
|
|
<el-form-item prop="roleIds" label="账号角色"> |
|
|
|
|
<div class="role-wrap"> |
|
|
|
|
<el-checkbox-group v-model="form.roleIds"> |
|
|
|
|
<template v-for="(item, index) in roleList"> |
|
|
|
|
<el-checkbox v-if="item.roleName != '超级管理员'" :key="index" :label="item.id" |
|
|
|
|
:title="item.roleName">{{ item.roleName }}</el-checkbox> |
|
|
|
|
<el-checkbox v-if="item.roleName != '超级管理员'" :key="index" :label="item.id" :title="item.roleName">{{ |
|
|
|
|
item.roleName }}</el-checkbox> |
|
|
|
|
</template> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item prop="uniqueIdentification" label="唯一标识"> |
|
|
|
|
<el-input disabled v-model="form.uniqueIdentification" placeholder="唯一标识"></el-input> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item prop="email" label="邮箱"> |
|
|
|
|
<el-input v-model="form.email" placeholder="请输入邮箱"></el-input> |
|
|
|
|
</el-form-item> |
|
|
|
@ -135,9 +135,10 @@ |
|
|
|
|
<div class="upload-wrap" :class="{ lg: uploadFaild }"> |
|
|
|
|
<el-button class="download" size="small" @click="downLoad"><img src="../../../assets/img/download.png" alt=""> |
|
|
|
|
模板下载</el-button> |
|
|
|
|
<el-upload ref="import" accept=".xls,.xlsx" :headers="{ token }" :on-remove="handleRemove" :on-error="uploadError" |
|
|
|
|
:on-success="uploadSuccess" :before-remove="beforeRemove" :limit="1" :on-exceed="handleExceed" |
|
|
|
|
:action="this.api.uploadFile" :file-list="uploadList" :data="{ schoolId: this.schoolId }" name="file"> |
|
|
|
|
<el-upload ref="import" accept=".xls,.xlsx" :headers="{ token }" :on-remove="handleRemove" |
|
|
|
|
:on-error="uploadError" :on-success="uploadSuccess" :before-remove="beforeRemove" :limit="1" |
|
|
|
|
:on-exceed="handleExceed" :action="this.api.uploadFile" :file-list="uploadList" |
|
|
|
|
:data="{ schoolId: this.schoolId }" name="file"> |
|
|
|
|
<el-button size="small"><img src="../../../assets/img/upload.png" alt=""> 上传文件</el-button> |
|
|
|
|
</el-upload> |
|
|
|
|
<div class="link" v-if="uploadFaild"> |
|
|
|
@ -149,17 +150,38 @@ |
|
|
|
|
<el-button size="small" type="primary" @click="confirmImport">确 定</el-button> |
|
|
|
|
</span> |
|
|
|
|
</el-dialog> |
|
|
|
|
|
|
|
|
|
<el-dialog title="一键批量生成账号" :visible.sync="generateVisible" :close-on-click-modal="false" width="400px"> |
|
|
|
|
<el-form ref="generateForm" :model="generateForm" :rules="generateRules" label-width="100px"> |
|
|
|
|
<el-form-item label="账号角色" prop="roleId"> |
|
|
|
|
<el-select v-model="generateForm.roleId" placeholder="请选择账号角色" size="small" style="width: 100%;" |
|
|
|
|
@change="initData"> |
|
|
|
|
<template v-for="(item, index) in roleList"> |
|
|
|
|
<el-option v-if="item.roleName != '超级管理员'" :key="index" :label="item.roleName" |
|
|
|
|
:value="item.id"></el-option> |
|
|
|
|
</template> |
|
|
|
|
</el-select> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="账号数" prop="numberOfUsers"> |
|
|
|
|
<el-input v-model.trim="generateForm.numberOfUsers" placeholder="请输入账号数"></el-input> |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-form> |
|
|
|
|
<span slot="footer" class="dialog-footer"> |
|
|
|
|
<el-button @click="generateVisible = false">取 消</el-button> |
|
|
|
|
<el-button type="primary" @click="generateSubmit">确 定</el-button> |
|
|
|
|
</span> |
|
|
|
|
</el-dialog> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
<script> |
|
|
|
|
import Setting from '@/setting' |
|
|
|
|
import { mapState } from 'vuex' |
|
|
|
|
import util from '@/libs/util' |
|
|
|
|
import Util from '@/libs/util' |
|
|
|
|
import axios from 'axios' |
|
|
|
|
export default { |
|
|
|
|
data () { |
|
|
|
|
return { |
|
|
|
|
token: util.local.get(Setting.tokenKey), |
|
|
|
|
token: Util.local.get(Setting.tokenKey), |
|
|
|
|
month: '', |
|
|
|
|
monthList: [ |
|
|
|
|
{ |
|
|
|
@ -221,7 +243,6 @@ export default { |
|
|
|
|
{ required: true, message: '请输入用户姓名', trigger: 'blur' } |
|
|
|
|
], |
|
|
|
|
workNumber: [ |
|
|
|
|
{ required: true, message: '请输入工号/学号', trigger: 'blur' }, |
|
|
|
|
{ |
|
|
|
|
pattern: /^[A-Za-z0-9]+$/, |
|
|
|
|
message: '请输入正确的工号/学号', |
|
|
|
@ -260,7 +281,21 @@ export default { |
|
|
|
|
originalWorkNumber: '', |
|
|
|
|
originalPhone: '', |
|
|
|
|
originalEmail: '', |
|
|
|
|
submiting: false |
|
|
|
|
submiting: false, |
|
|
|
|
|
|
|
|
|
generateVisible: false, |
|
|
|
|
generateForm: { |
|
|
|
|
roleId: '', |
|
|
|
|
numberOfUsers: '', |
|
|
|
|
}, |
|
|
|
|
generateRules: { |
|
|
|
|
roleId: [ |
|
|
|
|
{ required: true, message: '请选择账号角色', trigger: 'change' } |
|
|
|
|
], |
|
|
|
|
numberOfUsers: [ |
|
|
|
|
{ required: true, message: '请输入账号数', trigger: 'blur' } |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
}, |
|
|
|
|
computed: { |
|
|
|
@ -278,7 +313,7 @@ export default { |
|
|
|
|
month: function (val) { |
|
|
|
|
if (val) { |
|
|
|
|
let unit = 24 * 60 * 60 * 1000 |
|
|
|
|
this.date = [util.formatDate('yyyy-MM-dd', new Date(new Date().getTime() - unit * 30 * val)), util.formatDate('yyyy-MM-dd', new Date(new Date().getTime() + unit))] |
|
|
|
|
this.date = [Util.formatDate('yyyy-MM-dd', new Date(new Date().getTime() - unit * 30 * val)), Util.formatDate('yyyy-MM-dd', new Date(new Date().getTime() + unit))] |
|
|
|
|
} else { |
|
|
|
|
this.date = [] |
|
|
|
|
} |
|
|
|
@ -397,6 +432,33 @@ export default { |
|
|
|
|
this.accountRepeat = false |
|
|
|
|
this.workNumberRepeat = false |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// 批量生成账号 |
|
|
|
|
batchGenerate () { |
|
|
|
|
this.generateForm = { |
|
|
|
|
roleId: '', |
|
|
|
|
numberOfUsers: '', |
|
|
|
|
} |
|
|
|
|
this.generateVisible = true |
|
|
|
|
}, |
|
|
|
|
// 批量生成账号提交 |
|
|
|
|
generateSubmit () { |
|
|
|
|
this.$refs.generateForm.validate(async (valid) => { |
|
|
|
|
if (valid) { |
|
|
|
|
await this.$post(this.api.generate, { |
|
|
|
|
...this.generateForm, |
|
|
|
|
platformId: Setting.platformId, |
|
|
|
|
type: 2, |
|
|
|
|
}) |
|
|
|
|
this.generateVisible = false |
|
|
|
|
Util.successMsg('批量生成成功!') |
|
|
|
|
this.initData() |
|
|
|
|
} else { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
add () { |
|
|
|
|
this.isDetail = false |
|
|
|
|
this.userVisible = true |
|
|
|
@ -437,21 +499,21 @@ export default { |
|
|
|
|
this.$refs.form.validate((valid) => { |
|
|
|
|
if (valid) { |
|
|
|
|
if (this.submiting) return false |
|
|
|
|
if (this.accountRepeat) return util.errorMsg('该账号已存在!') |
|
|
|
|
if (this.workNumberRepeat) return util.errorMsg('该学号/工号已存在!') |
|
|
|
|
if (this.phoneRepeat) return util.errorMsg('该手机号已存在!') |
|
|
|
|
if (this.emailRepeat) return util.errorMsg('该邮箱已存在!') |
|
|
|
|
if (this.accountRepeat) return Util.errorMsg('该账号已存在!') |
|
|
|
|
if (this.workNumberRepeat) return Util.errorMsg('该学号/工号已存在!') |
|
|
|
|
if (this.phoneRepeat) return Util.errorMsg('该手机号已存在!') |
|
|
|
|
if (this.emailRepeat) return Util.errorMsg('该邮箱已存在!') |
|
|
|
|
let data = this.form |
|
|
|
|
// 如果是新增,则取当前用户的schoolId |
|
|
|
|
data.schoolId = data.schoolId ? data.schoolId : this.schoolId |
|
|
|
|
// 如果是新增,则生成个时间戳作为唯一标识 |
|
|
|
|
if (!data.userId) data.uniqueIdentification = new Date().getTime() |
|
|
|
|
if (!data.roleIds.length) return util.errorMsg('请至少选择一个角色') |
|
|
|
|
if (!data.roleIds.length) return Util.errorMsg('请至少选择一个角色') |
|
|
|
|
this.submiting = true |
|
|
|
|
if (this.form.userId) { |
|
|
|
|
this.$post(this.api.modifyUser, data).then(res => { |
|
|
|
|
this.userVisible = false |
|
|
|
|
util.successMsg('编辑成功') |
|
|
|
|
Util.successMsg('编辑成功') |
|
|
|
|
this.getData() |
|
|
|
|
this.submiting = false |
|
|
|
|
}).catch(res => { |
|
|
|
@ -460,7 +522,7 @@ export default { |
|
|
|
|
} else { |
|
|
|
|
this.$post(this.api.saveUser, data).then(res => { |
|
|
|
|
this.userVisible = false |
|
|
|
|
util.successMsg('添加成功') |
|
|
|
|
Util.successMsg('添加成功') |
|
|
|
|
this.getData() |
|
|
|
|
this.submiting = false |
|
|
|
|
}).catch(res => { |
|
|
|
@ -475,7 +537,7 @@ export default { |
|
|
|
|
type: 'warning' |
|
|
|
|
}).then(() => { |
|
|
|
|
this.$post(`${this.api.deleteUser}?accountIds=${row.accountId}`).then(res => { |
|
|
|
|
util.successMsg('删除成功') |
|
|
|
|
Util.successMsg('删除成功') |
|
|
|
|
this.getData() |
|
|
|
|
}).catch(res => { }) |
|
|
|
|
}).catch(() => { }) |
|
|
|
@ -496,7 +558,7 @@ export default { |
|
|
|
|
schoolId: this.schoolId, |
|
|
|
|
phone: data.phone |
|
|
|
|
}).then((res) => { |
|
|
|
|
val == 1 ? util.successMsg('启用成功') : util.successMsg('禁用成功') |
|
|
|
|
val == 1 ? Util.successMsg('启用成功') : Util.successMsg('禁用成功') |
|
|
|
|
}).catch((res) => { |
|
|
|
|
row.isEnable = val == 1 ? 0 : 1 |
|
|
|
|
}) |
|
|
|
@ -516,12 +578,12 @@ export default { |
|
|
|
|
}).then(() => { |
|
|
|
|
this.$post(`${this.api.deleteUser}?${delList.join('&')}`).then(res => { |
|
|
|
|
this.$refs.table.clearSelection() |
|
|
|
|
util.successMsg('删除成功') |
|
|
|
|
Util.successMsg('删除成功') |
|
|
|
|
this.getData() |
|
|
|
|
}).catch(res => { }) |
|
|
|
|
}).catch(() => { }) |
|
|
|
|
} else { |
|
|
|
|
util.errorMsg('请先选择数据 !') |
|
|
|
|
Util.errorMsg('请先选择数据 !') |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
batchImport () { |
|
|
|
@ -545,11 +607,11 @@ export default { |
|
|
|
|
}, |
|
|
|
|
responseType: 'blob' |
|
|
|
|
}).then((res) => { |
|
|
|
|
util.downloadFileDirect(`导入失败原因.xlsx`, new Blob([res.data])) |
|
|
|
|
Util.downloadFileDirect(`导入失败原因.xlsx`, new Blob([res.data])) |
|
|
|
|
}).catch(res => { }) |
|
|
|
|
}, |
|
|
|
|
handleExceed (files, fileList) { |
|
|
|
|
util.warningMsg( |
|
|
|
|
Util.warningMsg( |
|
|
|
|
`当前限制选择 1 个文件,如需更换,请删除上一个文件再重新选择!` |
|
|
|
|
); |
|
|
|
|
}, |
|
|
|
@ -557,12 +619,12 @@ export default { |
|
|
|
|
this.uploadFaild = false |
|
|
|
|
if (res.status == 200) { |
|
|
|
|
if (res.data.token) { |
|
|
|
|
util.errorMsg('导入失败,请下载失败模板查看原因') |
|
|
|
|
Util.errorMsg('导入失败,请下载失败模板查看原因') |
|
|
|
|
this.importToken = res.data.token |
|
|
|
|
this.uploadFaild = true |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
res.data.message ? util.errorMsg(res.data.message) : util.errorMsg('上传失败,请检查数据') |
|
|
|
|
res.data.message ? Util.errorMsg(res.data.message) : Util.errorMsg('上传失败,请检查数据') |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
uploadError (err, file, fileList) { |
|
|
|
|