批量生成账号登

master
yujialong 3 months ago
parent 44463f31c5
commit 56ba160f6c
  1. 1
      src/api/index.js
  2. 5
      src/layouts/home/index.vue
  3. 35
      src/pages/account/login/index.vue
  4. 1874
      src/pages/setting/person/info.vue
  5. 118
      src/pages/user/list/index.vue

@ -56,6 +56,7 @@ export default {
deleteProfile: `users/users/userInfo/deleteProfile`,
checkEmailOrPhone: `occupationlab/occupationlab/architecture/checkEmailOrPhone`,
accountIsDisabled: `users/users/user/accountIsDisabled`,
generate: `users/users/batchProcessing/users/generate`,
userTemplate: `https://www.dataforward.cn/template/%E6%95%B0%E6%8D%AE%E5%B9%B3%E5%8F%B0%E7%94%A8%E6%88%B7%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx`,
// 角色管理

@ -109,7 +109,7 @@ export default {
mounted () {
this.autoLogout()
this.logView || this.getLogStatus() // logViewfalse
this.handleRealName()
util.local.get(Setting.tokenKey) && this.handleRealName()
},
methods: {
...mapMutations("user", [
@ -122,7 +122,8 @@ export default {
async handleRealName () {
const res = await this.$post(this.api.checkUserNameOrWorkNumber)
//
if (res.hasName) {
if (!res.hasName) {
this.realNameForm.workNumber = res.workNumber || ''
this.realNameVisible = true
}
},

@ -8,18 +8,13 @@
@click="typeClick(item)">{{ item.label }}</li>
</ul>
<el-form :model="form" :rules="rules" ref="form" style="margin-top: 20px">
<!-- 学号工 -->
<div v-show="!form.distinguish && !verCodeLogin" class="items">
<el-form-item class="flex-1" prop="workNumber">
<!-- -->
<div v-show="!verCodeLogin" class="items">
<el-form-item class="flex-1" prop="account">
<label class="label account"></label>
<el-input v-model.trim="form.workNumber" placeholder="请输入学号/工号" @keyup.enter.native="submit"></el-input>
<el-input v-model.trim="form.account" placeholder="请输入号" @keyup.enter.native="submit"></el-input>
</el-form-item>
</div>
<!-- 手机号登录 -->
<el-form-item v-show="form.distinguish === 1" prop="account">
<label class="label account"></label>
<el-input v-model.trim="form.account" placeholder="请输入账号" @keyup.enter.native="submit"></el-input>
</el-form-item>
<template v-if="verCodeLogin">
<el-form-item prop="account">
<label class="label account"></label>
@ -49,7 +44,7 @@
<img @click="getVerImg" :src="verificationIMG" class="ver-img" alt="">
</el-form-item>
</template>
<div class="bottom">
<div v-if="!form.distinguish" class="bottom">
<el-link :underline="false" type="primary" @click="switchType">{{ verCodeLogin ? '密码' : '验证码' }}登录</el-link>
<!-- <el-link :underline="false" type="primary" @click="toAccount">没有账号点击申请</el-link> -->
</div>
@ -138,7 +133,6 @@ export default {
verificationIMG: '',
schoolList: [],
form: {
workNumber: '',
account: '', //
password: '',
code: '', //
@ -147,8 +141,7 @@ export default {
distinguish: 0,
},
rules: {
workNumber: [{ required: true, message: "请输入学号/工号/手机号/邮箱", trigger: "blur" }],
account: [{ required: false, message: "请输入账号", trigger: "blur" }],
account: [{ required: true, message: "请输入账号", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
code: [{ required: true, message: "请输入验证码", trigger: "blur" }]
},
@ -186,15 +179,9 @@ export default {
]),
//
handleRule () {
const type = this.form.distinguish
const rules = this.rules
rules.workNumber[0].required = !type && !this.verCodeLogin
rules.account[0].required = (!type && this.verCodeLogin) || type
this.rules.account[0].message = type ?
'请输入账号' :
this.verCodeLogin ?
'请输入手机号/邮箱' :
'请输入学号/工号/手机号/邮箱'
this.rules.account[0].message = this.verCodeLogin ?
'请输入手机号/邮箱' :
'请输入账号'
},
//
typeClick (tab) {
@ -430,7 +417,7 @@ export default {
const { phone, phoneCode } = this
if (!this.verifyPhone(phone)) return false
if (!phoneCode) return util.warningMsg('请输入验证码')
const { workNumber, schoolId } = this.form
const { account, schoolId } = this.form
if (this.binding) {
this.$post(this.api.bindPhoneOrEmail, {
mark: 2,
@ -439,7 +426,7 @@ export default {
code: phoneCode,
opener: this.phoneOpener,
platform: Setting.platformId,
account: workNumber,
account,
schoolId
}).then(({ token }) => {
this.token = token

File diff suppressed because it is too large Load Diff

@ -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) {

Loading…
Cancel
Save