批量生成账号登

master
yujialong 3 months ago
parent 44463f31c5
commit 56ba160f6c
  1. 1
      src/api/index.js
  2. 5
      src/layouts/home/index.vue
  3. 33
      src/pages/account/login/index.vue
  4. 182
      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">
<label class="label account"></label>
<el-input v-model.trim="form.workNumber" placeholder="请输入学号/工号" @keyup.enter.native="submit"></el-input>
</el-form-item>
</div>
<!-- 手机号登录 -->
<el-form-item v-show="form.distinguish === 1" prop="account">
<!-- 账号 -->
<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.account" placeholder="请输入账号" @keyup.enter.native="submit"></el-input>
</el-form-item>
</div>
<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

@ -13,31 +13,37 @@
<li>
<label>性别</label>
<el-select size="small" v-model="form.sex">
<el-option v-for="item in sexList" :key="item.value" :label="item.name" :value="item.value"></el-option>
<el-option v-for="item in sexList" :key="item.value" :label="item.name"
:value="item.value"></el-option>
</el-select>
</li>
</div>
<div class="line info">
<li>
<label>出生年月日</label>
<el-date-picker size="small" v-model="form.dateBirth" :clearable="false" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"></el-date-picker>
<el-date-picker size="small" v-model="form.dateBirth" :clearable="false" type="date" format="yyyy-MM-dd"
value-format="yyyy-MM-dd"></el-date-picker>
</li>
<li class="selects">
<label>所在地</label>
<div class="mul">
<div class="child">
<el-select size="small" v-model="form.countries" placeholder>
<el-option v-for="item in countryList" :key="item.value" :label="item.label" :value="item.label"></el-option>
<el-option v-for="item in countryList" :key="item.value" :label="item.label"
:value="item.label"></el-option>
</el-select>
</div>
<div class="child">
<el-select size="small" v-model="form.provinceId" placeholder @change="id => getCity(id, 1)">
<el-option v-for="item in provinceList" :key="item.provinceId" :label="item.provinceName" :value="item.provinceId"></el-option>
<el-option v-for="item in provinceList" :key="item.provinceId" :label="item.provinceName"
:value="item.provinceId"></el-option>
</el-select>
</div>
<div class="child">
<el-select size="small" v-model="form.cityId" placeholder :disabled="form.provinceId ? false : true">
<el-option v-for="item in cityList" :key="item.cityId" :label="item.cityName" :value="item.cityId"></el-option>
<el-select size="small" v-model="form.cityId" placeholder
:disabled="form.provinceId ? false : true">
<el-option v-for="item in cityList" :key="item.cityId" :label="item.cityName"
:value="item.cityId"></el-option>
</el-select>
</div>
</div>
@ -51,10 +57,17 @@
<li>
<label>教育程度</label>
<el-select size="small" v-model="form.educationDegree" placeholder="请选择教育程度">
<el-option v-for="(item,index) in educationDegreeList" :key="index" :label="item.name" :value="item.value"></el-option>
<el-option v-for="(item, index) in educationDegreeList" :key="index" :label="item.name"
:value="item.value"></el-option>
</el-select>
</li>
</div>
<div class="line info">
<li>
<label>学号</label>
<el-input size="small" v-model="form.workNumber" clearable></el-input>
</li>
</div>
</ul>
</div>
<div class="flex j-between a-center" style="width: 862px">
@ -68,41 +81,52 @@
<li>
<label>职业</label>
<el-select size="small" v-model="archive.personalCareerId" placeholder="选择职业">
<el-option v-for="item in occupationList" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-option v-for="item in occupationList" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</li>
<li>
<label>所属国家</label>
<el-select size="small" v-model="form.countries" placeholder>
<el-option v-for="item in countryList" :key="item.value" :label="item.label" :value="item.label" ></el-option>
<el-option v-for="item in countryList" :key="item.value" :label="item.label"
:value="item.label"></el-option>
</el-select>
</li>
</div>
<div class="line">
<li>
<label>学校名称</label>
<el-select size="small" v-model="archive.schoolId" filterable placeholder="选择学校" @change="id => getSchoolName(id,index)">
<el-option v-for="item in schoolList" :key="item.value" :label="item.schoolName" :value="item.schoolId"></el-option>
<el-select size="small" v-model="archive.schoolId" filterable placeholder="选择学校"
@change="id => getSchoolName(id, index)">
<el-option v-for="item in schoolList" :key="item.value" :label="item.schoolName"
:value="item.schoolId"></el-option>
</el-select>
</li>
<li>
<label>专业学科</label>
<el-select size="small" v-model="archive.disciplineId" placeholder="选择专业学科" @change="id => getItemProfessionalClass(id,index)" @clear="() => clearItemClass(index)">
<el-option v-for="item in subjectList" :key="item.value" :label="item.disciplineName" :value="item.disciplineId"></el-option>
<el-select size="small" v-model="archive.disciplineId" placeholder="选择专业学科"
@change="id => getItemProfessionalClass(id, index)" @clear="() => clearItemClass(index)">
<el-option v-for="item in subjectList" :key="item.value" :label="item.disciplineName"
:value="item.disciplineId"></el-option>
</el-select>
</li>
</div>
<div class="line" style="margin-bottom: 0">
<li>
<label>专业类</label>
<el-select size="small" v-model="archive.professionalClassId" placeholder="选择专业类" :disabled="archive.disciplineId ? false : true" @change="id => getItemProfessional(id,index)" @clear="() => clearItemProfess(index)">
<el-option v-for="item in archive.ProfessionalClassList" :key="item.professionalClassId" :label="item.professionalClassName" :value="item.professionalClassId"></el-option>
<el-select size="small" v-model="archive.professionalClassId" placeholder="选择专业类"
:disabled="archive.disciplineId ? false : true" @change="id => getItemProfessional(id, index)"
@clear="() => clearItemProfess(index)">
<el-option v-for="item in archive.ProfessionalClassList" :key="item.professionalClassId"
:label="item.professionalClassName" :value="item.professionalClassId"></el-option>
</el-select>
</li>
<li>
<label>专业</label>
<el-select size="small" v-model="archive.professionalId" placeholder="选择专业" :disabled="archive.professionalClassId ? false : true" @change="getItemStuGrade">
<el-option v-for="item in archive.ProfessionalList" :key="item.professionalId" :label="item.professionalName" :value="item.professionalId"></el-option>
<el-select size="small" v-model="archive.professionalId" placeholder="选择专业"
:disabled="archive.professionalClassId ? false : true" @change="getItemStuGrade">
<el-option v-for="item in archive.ProfessionalList" :key="item.professionalId"
:label="item.professionalName" :value="item.professionalId"></el-option>
</el-select>
</li>
</div>
@ -123,8 +147,8 @@
<ul class="list">
<div class="line info imp">
<li style="width: 334px;margin-right: 90px">
<label></label>
<el-input class="m-r-10" size="small" v-model="form.workNumber" clearable disabled></el-input>
<label></label>
<el-input class="m-r-10" size="small" v-model="form.account" clearable disabled></el-input>
</li>
<li class="phone-li">
<label>手机号</label>
@ -155,7 +179,8 @@
<el-button type="primary" size="small" v-throttle @click="save">更新</el-button>
</div>
<el-dialog :title="form.email ? '更换邮箱' : '绑定邮箱'" :visible.sync="emailVisible" :close-on-click-modal="false" @close="closeEmail" width="30%">
<el-dialog :title="form.email ? '更换邮箱' : '绑定邮箱'" :visible.sync="emailVisible" :close-on-click-modal="false"
@close="closeEmail" width="30%">
<el-form ref="form" :model="form" label-width="60px">
<el-form-item label="邮箱">
<el-input style="width: 394px;" placeholder="请输入邮箱" v-model="email"></el-input>
@ -163,7 +188,8 @@
<el-form-item label="验证码">
<div class="flex">
<el-input v-model="emailCode" placeholder="请输入验证码" maxlength="6"></el-input>
<el-button style="margin-left: 10px" type="text" @click="sendEmailCode" :disabled="emailDisabled">{{emailBtnText}}</el-button>
<el-button style="margin-left: 10px" type="text" @click="sendEmailCode" :disabled="emailDisabled">{{
emailBtnText }}</el-button>
</div>
</el-form-item>
</el-form>
@ -173,7 +199,8 @@
</span>
</el-dialog>
<el-dialog :title="form.phone ? '更换手机号' : '绑定手机号'" :visible.sync="phoneVisible" :close-on-click-modal="false" @close="closePhone" width="30%">
<el-dialog :title="form.phone ? '更换手机号' : '绑定手机号'" :visible.sync="phoneVisible" :close-on-click-modal="false"
@close="closePhone" width="30%">
<el-form ref="form" :model="form" label-width="60px">
<el-form-item label="手机号">
<el-input style="width: 394px;" placeholder="请输入手机号" v-model="phone" maxlength="11"></el-input>
@ -181,7 +208,8 @@
<el-form-item label="验证码">
<div class="flex">
<el-input v-model="phoneCode" placeholder="请输入验证码" maxlength="6"></el-input>
<el-button style="margin-left: 10px" type="text" @click="sendPhoneCode" :disabled="phoneDisabled">{{phoneBtnText}}</el-button>
<el-button style="margin-left: 10px" type="text" @click="sendPhoneCode" :disabled="phoneDisabled">{{
phoneBtnText }}</el-button>
</div>
</el-form-item>
</el-form>
@ -191,16 +219,19 @@
</span>
</el-dialog>
<el-dialog title="更换密码" :visible.sync="passwordVisible" :close-on-click-modal="false" @close="closePassword" width="30%">
<el-dialog title="更换密码" :visible.sync="passwordVisible" :close-on-click-modal="false" @close="closePassword"
width="30%">
<el-form ref="passwordForm" :model="form" label-width="82px">
<el-form-item label="原密码">
<el-input type="password" v-model="passwordForm.password" placeholder="请输入原密码"></el-input>
</el-form-item>
<el-form-item label="新密码">
<el-input type="password" v-model="passwordForm.newPassword" placeholder="请输入新密码" @keyup.enter.native="editPassword"></el-input>
<el-input type="password" v-model="passwordForm.newPassword" placeholder="请输入新密码"
@keyup.enter.native="editPassword"></el-input>
</el-form-item>
<el-form-item label="确认新密码">
<el-input type="password" v-model="passwordForm.reNewPassword" placeholder="请确认新密码" @keyup.enter.native="editPassword"></el-input>
<el-input type="password" v-model="passwordForm.reNewPassword" placeholder="请确认新密码"
@keyup.enter.native="editPassword"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@ -225,7 +256,7 @@
<script>
import { mapState, mapActions } from 'vuex'
import util from '@/libs/util'
import Util from '@/libs/util'
export default {
data () {
return {
@ -304,7 +335,6 @@ export default {
ProfessionalList: [], //
schoolList: [],
curPassword: '',
accountRepeat: false,
archivesList: [],
archivesForm: {
@ -425,20 +455,10 @@ export default {
this.schoolList = res.list
}).catch(res => { })
},
accountChange(){
this.$get(`${this.api.getAccount}?account=${this.form.account}`).then(res => {
if(res.data.userInfo){
this.accountRepeat = true
util.warningMsg('该账号已存在')
}else{
this.accountRepeat = false
}
}).catch(res => {})
},
save () {
if(this.form.idNumber && !/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/.test(this.form.idNumber)) return util.warningMsg('请输入正确的证件号码')
if(this.accountRepeat) return util.warningMsg('该账号已存在')
let form = this.form
const { form } = this
if (!form.userName) return Util.warningMsg('请输入姓名')
if (this.form.idNumber && !/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/.test(this.form.idNumber)) return Util.warningMsg('请输入正确的证件号码')
let hrPersonalFileEntities = []
let archivesList = this.archivesList
archivesList.map(n => {
@ -481,12 +501,12 @@ export default {
this.setInfo({
userName: form.userName
})
util.successMsg('更新成功')
Util.successMsg('更新成功')
this.updateTime = 0
this.$emit('updateStatus', false)
this.getData()
} else {
util.errorMsg('更新失败')
Util.errorMsg('更新失败')
}
}).catch(res => { })
},
@ -514,7 +534,7 @@ export default {
this.archivesList.forEach((n, k) => {
if (!n.personalCareerId) isEmpty = true
})
if(isEmpty) return util.warningMsg('请选择职业')
if (isEmpty) return Util.warningMsg('请选择职业')
this.showArch = true
this.concatArch()
},
@ -549,17 +569,17 @@ export default {
this.passwordVisible = true
},
editPassword () {
if(!this.passwordForm.password) return util.warningMsg('请输入原密码')
if(!this.passwordForm.newPassword) return util.warningMsg('请输入新密码')
if(!this.passwordForm.reNewPassword) return util.warningMsg('请确认新密码')
if(this.passwordForm.newPassword.length < 6 || this.passwordForm.reNewPassword.length < 6) return util.warningMsg('请输入6位数以上的密码')
if(this.passwordForm.newPassword !== this.passwordForm.reNewPassword) return util.warningMsg('输入的新密码不一致,请重新确认')
if(this.passwordForm.password === this.passwordForm.newPassword) return util.warningMsg('原密码跟新密码不能一致')
if (!this.passwordForm.password) return Util.warningMsg('请输入原密码')
if (!this.passwordForm.newPassword) return Util.warningMsg('请输入新密码')
if (!this.passwordForm.reNewPassword) return Util.warningMsg('请确认新密码')
if (this.passwordForm.newPassword.length < 6 || this.passwordForm.reNewPassword.length < 6) return Util.warningMsg('请输入6位数以上的密码')
if (this.passwordForm.newPassword !== this.passwordForm.reNewPassword) return Util.warningMsg('输入的新密码不一致,请重新确认')
if (this.passwordForm.password === this.passwordForm.newPassword) return Util.warningMsg('原密码跟新密码不能一致')
let data = this.passwordForm
data.accountId = this.form.id
this.$post(this.api.examinePassword, data).then(res => {
util.successMsg('更换成功')
Util.successMsg('更换成功')
this.passwordVisible = false
}).catch(err => { })
},
@ -735,8 +755,8 @@ export default {
this.emailCode = ''
},
sendEmailCode () {
if(!this.email) return util.warningMsg('请输入邮箱')
if(!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(this.email)) return util.warningMsg('请输入正确的邮箱')
if (!this.email) return Util.warningMsg('请输入邮箱')
if (!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(this.email)) return Util.warningMsg('请输入正确的邮箱')
let data = {
userId: this.form.userId,
email: this.email,
@ -747,14 +767,14 @@ export default {
this.emailCountdown()
this.emailOpener = res.message.opener
} else {
util.errorMsg(res.message)
Util.errorMsg(res.message)
}
}).catch(res => { })
},
emailSubmit () {
if(!this.email) return util.warningMsg('请输入邮箱')
if(!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(this.email)) return util.warningMsg('请输入正确的邮箱')
if(!this.emailCode) return util.warningMsg('请输入验证码')
if (!this.email) return Util.warningMsg('请输入邮箱')
if (!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(this.email)) return Util.warningMsg('请输入正确的邮箱')
if (!this.emailCode) return Util.warningMsg('请输入验证码')
let data = {
userId: this.form.userId,
email: this.email,
@ -763,7 +783,7 @@ export default {
opener: this.emailOpener
}
this.$post(this.api.bindPhoneOrEmail, data).then(res => {
util.successMsg('绑定成功')
Util.successMsg('绑定成功')
this.form.email = this.email
this.emailVisible = false
}).catch(res => { })
@ -772,8 +792,8 @@ export default {
this.phoneCode = ''
},
sendPhoneCode () {
if(!this.phone) return util.warningMsg('请输入手机号')
if(!/^1[3456789]\d{9}$/.test(this.phone)) return util.warningMsg('请输入正确的手机号')
if (!this.phone) return Util.warningMsg('请输入手机号')
if (!/^1[3456789]\d{9}$/.test(this.phone)) return Util.warningMsg('请输入正确的手机号')
let data = {
userId: this.form.userId,
phone: this.phone,
@ -784,15 +804,15 @@ export default {
this.phoneCountdown()
this.phoneOpener = res.message.opener
} else {
util.errorMsg(res.message)
Util.errorMsg(res.message)
}
}).catch(res => { })
},
phoneSubmit () {
if(!this.phone) return util.warningMsg('请输入手机号')
if(!/^1[3456789]\d{9}$/.test(this.phone)) return util.warningMsg('请输入正确的手机号')
if(!this.phoneCode) return util.warningMsg('请输入验证码')
if (!this.phone) return Util.warningMsg('请输入手机号')
if (!/^1[3456789]\d{9}$/.test(this.phone)) return Util.warningMsg('请输入正确的手机号')
if (!this.phoneCode) return Util.warningMsg('请输入验证码')
let data = {
userId: this.form.userId,
phone: this.phone,
@ -801,7 +821,7 @@ export default {
opener: this.phoneOpener
}
this.$post(this.api.bindPhoneOrEmail, data).then(res => {
util.successMsg('绑定成功')
Util.successMsg('绑定成功')
this.form.phone = this.phone
this.phoneVisible = false
}).catch(res => { })
@ -815,7 +835,7 @@ export default {
this.form.account = this.account
this.accountVisible = false
} else {
util.errorMsg('请输入账号')
Util.errorMsg('请输入账号')
}
}
}
@ -827,34 +847,44 @@ export default {
height: calc(100vh - 202px);
overflow: auto;
}
.page {
margin-bottom: 12px;
/deep/.el-input__inner {
border-color: #CACFDB;
}
.list {
.line {
display: flex;
margin-bottom: 24px;
&.info li:not(.selects) {
width: 30%;
.el-input {
flex: 1;
}
&:first-child {
margin-right: 16%;
margin-right: 91px;
}
}
&.imp li {
width: calc(30% + 36px) !important;
&.phone-li {
width: calc(30% + 72px) !important;
}
}
}
li {
display: inline-flex;
align-items: center;
&>label {
width: 100px;
margin-right: 5px;
@ -862,26 +892,33 @@ export default {
font-size: 14px;
color: #4c4c4c;
}
.el-input {
width: 220px;
.el-input__inner {
border-color: #CACFDB;
}
}
.el-select .el-input.is-disabled .el-input__inner {
border-color: #ddd;
}
.val {
margin-right: 15px;
color: #606266;
font-size: 14px;
}
.mul {
display: inline-flex;
.child {
display: inline-flex;
width: 132px;
margin-right: 10px;
&>span {
margin-bottom: 5px;
font-size: 14px;
@ -891,6 +928,7 @@ export default {
}
}
}
.archives {
position: relative;
width: 862px;
@ -898,44 +936,54 @@ export default {
margin-bottom: 6px;
border-radius: 4px;
background-color: #FAFAFA;
.del {
position: absolute;
top: 80px;
right: 19px;
cursor: pointer;
}
.line {
justify-content: space-between;
}
li {
margin-right: 60px;
}
.el-select {
flex: 1;
}
}
.fold {
margin-top: 20px;
text-align: center;
font-size: 12px;
color: #006EFF;
span {
cursor: pointer;
i {
transition: .5s;
}
&.active i {
transform: rotate(180deg);
}
}
}
}
.btns {
width: 100%;
padding: 12px 0;
text-align: center;
background-color: #fff;
box-shadow: 0px 0px 10px 0px rgba(188, 201, 218, 0.4);
.el-button {
width: 80px;
}

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