稳定版1.0

This commit is contained in:
abu 2024-06-05 16:22:22 +08:00
parent de7599fe63
commit bfc5d04794
27 changed files with 2203 additions and 203 deletions

27
package-lock.json generated
View File

@ -15,6 +15,7 @@
"vue": "^2.6.12",
"vue-clipboard2": "^0.3.1",
"vue-cookie": "^1.1.4",
"vue-json-excel": "^0.3.0",
"vue-router": "^3.4.9",
"vuex": "^3.6.0"
},
@ -4914,6 +4915,11 @@
"integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
"dev": true
},
"node_modules/downloadjs": {
"version": "1.4.7",
"resolved": "https://registry.npmmirror.com/downloadjs/-/downloadjs-1.4.7.tgz",
"integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q=="
},
"node_modules/duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@ -9670,6 +9676,14 @@
"integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
"dev": true
},
"node_modules/vue-json-excel": {
"version": "0.3.0",
"resolved": "https://registry.npmmirror.com/vue-json-excel/-/vue-json-excel-0.3.0.tgz",
"integrity": "sha512-FrSh0tVUpw4K+ilLO8g0Qp52eFJw/hkk3rZPTEKo9qVkJgVfQtZwzj3UWc5ACYxA3jLk9HtjK+f9xKHCN4Kgag==",
"dependencies": {
"downloadjs": "^1.4.7"
}
},
"node_modules/vue-loader": {
"version": "17.1.0",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.1.0.tgz",
@ -14130,6 +14144,11 @@
"integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
"dev": true
},
"downloadjs": {
"version": "1.4.7",
"resolved": "https://registry.npmmirror.com/downloadjs/-/downloadjs-1.4.7.tgz",
"integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q=="
},
"duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@ -17670,6 +17689,14 @@
"integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
"dev": true
},
"vue-json-excel": {
"version": "0.3.0",
"resolved": "https://registry.npmmirror.com/vue-json-excel/-/vue-json-excel-0.3.0.tgz",
"integrity": "sha512-FrSh0tVUpw4K+ilLO8g0Qp52eFJw/hkk3rZPTEKo9qVkJgVfQtZwzj3UWc5ACYxA3jLk9HtjK+f9xKHCN4Kgag==",
"requires": {
"downloadjs": "^1.4.7"
}
},
"vue-loader": {
"version": "17.1.0",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.1.0.tgz",

View File

@ -14,6 +14,7 @@
"vue": "^2.6.12",
"vue-clipboard2": "^0.3.1",
"vue-cookie": "^1.1.4",
"vue-json-excel": "^0.3.0",
"vue-router": "^3.4.9",
"vuex": "^3.6.0"
},

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

View File

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="referrer" content="never">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>微信后台管理系统</title>
<title>评阅人员管理系统</title>
<!-- tinymce编辑器 -->
<script src="https://cdn.bootcdn.net/ajax/libs/tinymce/5.10.4/tinymce.min.js"></script>
</head>

View File

@ -17,7 +17,8 @@ Vue.use(ElementUI);
Vue.use(VueClipboard)
Vue.use(VueCookie)
Vue.config.productionTip = false
import JsonExcel from 'vue-json-excel';
Vue.component('downloadExcel', JsonExcel)
// 挂载全局
Vue.prototype.$http = httpRequest // ajax请求方法
Vue.prototype.isAuth = isAuth // 权限方法

View File

@ -1,6 +1,6 @@
<template>
<div class="mod-home">
<h3>欢迎使用微信管理系统</h3>
<h3>欢迎使用评阅人员管理系统</h3>
</div>
</template>
<style>

View File

@ -3,8 +3,8 @@
<div class="site-content__wrapper">
<div class="site-content">
<div class="brand-info">
<h2 class="brand-info__text">微信后台管理系统</h2>
<p class="brand-info__intro">微信公众号后台管理系统</p>
<h2>评阅人员管理系统</h2>
<p class="brand-info__intro">评阅人员管理系统</p>
</div>
<div class="login-main">
<h3 class="login-title">管理员登录</h3>
@ -15,17 +15,17 @@
<el-form-item prop="password">
<el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input>
</el-form-item>
<el-form-item prop="captcha">
<el-row :gutter="20">
<el-col :span="14">
<el-input v-model="dataForm.captcha" placeholder="验证码">
</el-input>
</el-col>
<el-col :span="10" class="login-captcha">
<img :src="captchaPath" @click="getCaptcha()" alt="">
</el-col>
</el-row>
</el-form-item>
<!-- <el-form-item prop="captcha">-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :span="14">-->
<!-- <el-input v-model="dataForm.captcha" placeholder="验证码">-->
<!-- </el-input>-->
<!-- </el-col>-->
<!-- <el-col :span="10" class="login-captcha">-->
<!-- <img :src="captchaPath" @click="getCaptcha()" alt="">-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button class="login-btn-submit" type="primary" @click="dataFormSubmit()">登录</el-button>
</el-form-item>

View File

@ -2,7 +2,7 @@
<nav class="site-navbar" :class="'site-navbar--' + navbarLayoutType">
<div class="site-navbar__header">
<h1 class="site-navbar__brand" @click="$router.push({ name: 'home' })">
<a class="site-navbar__brand-lg" href="javascript:;">微信管理系统</a>
<a class="site-navbar__brand-lg" href="javascript:;">评阅人员管理系统</a>
<a class="site-navbar__brand-mini" href="javascript:;">W</a>
</h1>
</div>

View File

@ -5,19 +5,29 @@
<!-- <el-form-item v-if="!dataForm.id ? true : false" label="身份码" prop="userId">-->
<!-- <el-input v-model="dataForm.userId" placeholder="登录帐号"></el-input>-->
<!-- </el-form-item>-->
<el-form-item label="用户名" >
<el-form-item label="用户名" prop="userName">
<el-input v-model="dataForm.userName" placeholder="用户名"></el-input>
</el-form-item>
<el-form-item label="工号" >
<el-form-item label="工号" prop="workNumber">
<el-input v-model="dataForm.workNumber" placeholder="工号"></el-input>
</el-form-item>
<el-form-item label="职务" >
<el-form-item label="往年组别" >
<el-input v-model="dataForm.beforeGroupLevel" placeholder="往年组别"></el-input>
</el-form-item>
<el-form-item label="组别" prop="groupLevel">
<el-input v-model="dataForm.groupLevel" placeholder="组别"></el-input>
</el-form-item>
<el-form-item label="往年职务" >
<el-input v-model="dataForm.beforeDuty" placeholder="往年职务"></el-input>
</el-form-item>
<el-form-item label="职务" prop="duty">
<el-input v-model="dataForm.duty" placeholder="职务"></el-input>
</el-form-item>
<el-form-item label="部门" >
<el-form-item label="部门" prop="department">
<el-input v-model="dataForm.department" placeholder="部门"></el-input>
</el-form-item>
<el-form-item label="岗位" >
<el-form-item label="岗位" prop="job">
<el-input v-model="dataForm.job" placeholder="岗位"></el-input>
</el-form-item>
<!-- <el-form-item v-if="!dataForm.id ? true : false" label="身份">-->
@ -25,11 +35,11 @@
<!-- <el-option v-for="(name,key) in identityes" :key="key+1" :value="key+1" :label="name"></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="所属组">
<el-select v-model="dataForm.groupId" placeholder="所属组">
<el-option v-for="item in groupIdes" :key="item.id" :value="item.id" :label="item.name">{{item.name}}</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="所属组">-->
<!-- <el-select v-model="dataForm.groupId" placeholder="所属组">-->
<!-- <el-option v-for="item in groupIdes" :key="item.id" :value="item.id" :label="item.name">{{item.name}}</el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="状态" size="mini" prop="status">-->
<!-- <el-radio-group v-model="dataForm.status">-->
<!-- <el-radio :label="1">禁用</el-radio>-->
@ -72,11 +82,14 @@ export default {
id: 0,
userName: '',
groupId: '',
beforeGroupLevel: '',
userId: '',
workNumber:'',
// major_id,
duty:'',
beforeDuty:'',
department:'',
groupLevel:'',
job:''
},
identityes: ['管理员', '研究生', '本校老师', '外校老师'],
@ -85,6 +98,21 @@ export default {
userName: [
{required: true, message: '用户名不能为空', trigger: 'blur'}
],
workNumber: [
{required: true, message: '工号不能为空', trigger: 'blur'}
],
groupLevel: [
{required: true, message: '组别不能为空', trigger: 'blur'}
],
duty: [
{required: true, message: '职务不能为空', trigger: 'blur'}
],
department: [
{required: true, message: ' 部门不能为空', trigger: 'blur'}
],
job: [
{required: true, message: ' 岗位不能为空', trigger: 'blur'}
],
password: [
{validator: validatePassword, trigger: 'blur'}
],
@ -106,7 +134,10 @@ export default {
this.dataForm.groupId = ''
this.dataForm.workNumber = ''
this.dataForm.duty = ''
this.dataForm.beforeDuty = ''
this.dataForm.department = ''
this.dataForm.groupLevel = ''
this.dataForm.beforeGroupLevel = ''
this.dataForm.job = ''
}
this.dataForm.id = id || 0
@ -136,7 +167,10 @@ export default {
this.dataForm.userId = data.user.userId
this.dataForm.workNumber = data.user.workNumber
this.dataForm.duty = data.user.duty
this.dataForm.beforeDuty = data.user.beforeDuty
this.dataForm.groupLevel = data.user.groupLevel
this.dataForm.department = data.user.department
this.dataForm.beforeGroupLevel = data.user.beforeGroupLevel
this.dataForm.job = data.user.job
}
})
@ -157,6 +191,9 @@ export default {
'userId': this.dataForm.userId,
'workNumber': this.dataForm.workNumber,
'duty': this.dataForm.duty,
'beforeDuty': this.dataForm.beforeDuty,
'beforeGroupLevel': this.dataForm.beforeGroupLevel,
'groupLevel': this.dataForm.groupLevel,
'department': this.dataForm.department,
'job': this.dataForm.job,

View File

@ -2,14 +2,46 @@
<div class="mod-user">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.userName" placeholder="用户身份码" clearable></el-input>
<el-input v-model="dataForm.userName" placeholder="姓名" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
<!-- <el-button v-if="isAuth('adm:user:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>-->
<el-button v-if="isAuth('adm:user:delete')" type="danger" @click="deleteHandle()"
:disabled="dataListSelections.length <= 0">批量删除
</el-button>
<download-excel :stringifyLongNum="true" :fetch="getExportExcel" :fields="json_fields" style="display: inline-block;margin: 0 10px" :name='`管理员信息.xls`'>
<el-button type='primary'>导出</el-button>
</download-excel>
<el-button type="primary" @click="addOrUpdateHandle()">新增</el-button>
<a href="/gzcy.xlsx" download="工作组成员数据模板">
<el-button type="primary" style="margin: 0 10px">下载Excel模板</el-button>
</a>
<el-upload
v-if="isAuth('sys:user:list')"
style="float: right;margin-left: 5px"
class="upload-demo"
ref="upload"
action="/admin/upload"
:on-preview="handlePreview"
:on-success="uploadSuccess"
:on-error="uploadError"
:before-upload="beforeUpload"
:on-remove="handleRemove"
:file-list="fileList"
accept=".xls,.xlsx"
:auto-upload="false"
:limit="1"
>
<el-button slot="trigger" type="primary">选取</el-button>
<el-button style="margin-left: 10px;" type="success" @click="submitUpload">
上传到服务器
</el-button>
<div slot="tip" class="el-upload__tip">只能上传excel文件</div>
</el-upload>
</el-form-item>
</el-form>
<el-table :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
@ -21,12 +53,20 @@
{{ (pageIndex - 1) * pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">
</el-table-column>
<!-- <el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">-->
<!-- </el-table-column>-->
<el-table-column prop="userName" header-align="center" align="center" label="用户名">
</el-table-column>
<el-table-column prop="workNumber" header-align="center" align="center" label="工号">
</el-table-column>
<!-- <el-table-column prop="userId" header-align="center" align="center" label="身份码">-->
<!-- </el-table-column>-->
<el-table-column prop="beforeGroupLevel" header-align="center" align="center" label="往年组别">
</el-table-column>
<el-table-column prop="groupLevel" header-align="center" align="center" label="组别">
</el-table-column>
<el-table-column prop="beforeDuty" header-align="center" align="center" label="往年职务">
</el-table-column>
<el-table-column prop="duty" header-align="center" align="center" label="职务">
</el-table-column>
<el-table-column prop="department" header-align="center" align="center" label="部门">
@ -41,18 +81,18 @@
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
header-align="center"
align="center"
prop="groupId"
label="所属分组"
:filters="groupIdes"
:filter-method="filterTag"
filter-placement="bottom-end">
<template slot-scope="scope">
{{ getgroups(scope.row.groupId) }}
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- header-align="center"-->
<!-- align="center"-->
<!-- prop="groupId"-->
<!-- label="所属分组"-->
<!-- :filters="groupIdes"-->
<!-- :filter-method="filterTag"-->
<!-- filter-placement="bottom-end">-->
<!-- <template slot-scope="scope">-->
<!-- {{ getgroups(scope.row.groupId) }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="status" header-align="center" align="center" label="状态">-->
<!-- <template slot-scope="scope">-->
<!-- <el-tag v-if="scope.row.status === 1" size="small" type="danger">禁用</el-tag>-->
@ -98,6 +138,20 @@ export default {
dataListSelections: [],
addOrUpdateVisible: false,
groupIdes: [],
fileList:[],
json_fields: {
"序号": "index",
// "": "userId",
"工号": "workNumber",
"姓名": "userName",
"往年组别": "beforeGroupLevel",
"组别":"groupLevel",
"往年职位":"beforeDuty",
"职位": "duty",
"部门": "department",
"岗位": "job",
},
groupIdMap:{},
}
},
components: {
@ -111,6 +165,28 @@ export default {
},
computed: {},
methods: {
// Excel
async getExportExcel(){
// console.log(this.groupIdMap)
let excelData=[]
await this.$http({
url: this.$http.adornUrl('/admin/export'),
method: 'get',
}).then(({data}) => {
excelData = data.map((item, index) => {
return { ...item, index: index + 1 }; //
});
// excelData=data
// if (data && data.code === 200) {
// console.log(data.list)
// }
})
return excelData
},
//
filterTag(value, row) {
return row.groupId === value;
@ -146,7 +222,7 @@ export default {
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
'userId': this.dataForm.userName
'userName': this.dataForm.userName
})
}).then(({data}) => {
if (data && data.code === 200) {
@ -184,7 +260,7 @@ export default {
//
deleteHandle(userid) {
var userIds = userid ? [userid] : this.dataListSelections.map(item => item.id)
this.$confirm(`确定对[userid=${userIds.join(',')}]进行[${userid ? '删除' : '批量删除'}]操作?`, '提示', {
this.$confirm(`确定操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@ -207,6 +283,56 @@ export default {
})
}).catch(() => {
})
},
//
//
submitUpload() {
if (this.$refs.upload.uploadFiles.length==0){
this.$message({
message: '请选择Excel文件',
type: 'error',
duration: 1500,
onClose: () => this.getDataList()
})
return;
}
this.$refs.upload.submit();
this.loading= this.$loading({
lock: true,
text: '文件上传中请耐心等待。。。',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
},
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
console.log(file);
},
uploadSuccess(){
this.loading.close();
this.$refs.upload.clearFiles()
this.$message({
message: '上传成功',
type: 'success',
duration: 1500,
onClose: () => this.getDataList()
})
},
uploadError(){
this.$refs.upload.clearFiles()
this.$message({
message: '上传失败',
type: 'error',
duration: 1500,
onClose: () => this.getDataList()
})
},
beforeUpload(file){
// console.log(file)
}
}
}

View File

@ -0,0 +1,136 @@
<!--<template>-->
<!-- <el-dialog :title="!dataForm.id ? '新增' : '修改'" :close-on-click-modal="false" :visible.sync="visible">-->
<!-- <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"-->
<!-- label-width="80px">-->
<!-- <p style="text-align: center; margin: 50px 0 20px">使用 scoped-slot 自定义数据项</p>-->
<!-- <div style="text-align: center">-->
<!-- <el-transfer-->
<!-- style="text-align: left; display: inline-block"-->
<!-- v-model="value4"-->
<!-- filterable-->
<!-- :left-default-checked="[2, 3]"-->
<!-- :right-default-checked="[1]"-->
<!-- :titles="['Source', 'Target']"-->
<!-- :button-texts="['到左边', '到右边']"-->
<!-- :format="{-->
<!-- noChecked: '${total}',-->
<!-- hasChecked: '${checked}/${total}'-->
<!-- }"-->
<!-- @change="handleChange"-->
<!-- :data="data">-->
<!-- <span slot-scope="{ option }">{{ option.key }} - {{ option.label }}</span>-->
<!-- <el-button class="transfer-footer" slot="left-footer" size="small">操作</el-button>-->
<!-- <el-button class="transfer-footer" slot="right-footer" size="small">操作</el-button>-->
<!-- </el-transfer>-->
<!-- </div>-->
<!-- </el-form>-->
<!-- <span slot="footer" class="dialog-footer">-->
<!-- <el-button @click="visible = false">取消</el-button>-->
<!-- <el-button type="primary" @click="dataFormSubmit()">确定</el-button>-->
<!-- </span>-->
<!-- </el-dialog>-->
<!--</template>-->
<!--<script>-->
<!--import {is8Number,isMobile} from '@/utils/validate'-->
<!--import myRequest from "@/views/modules/h5/myRequest";-->
<!--export default {-->
<!-- data() {-->
<!-- return {-->
<!-- visible: false,-->
<!-- roleList: [],-->
<!-- dataForm: {-->
<!-- id: 0,-->
<!-- dormitory:'',-->
<!-- dormitoryNum:'',-->
<!-- dormitoryType:0,-->
<!-- dormitoryStatus:0,-->
<!-- },-->
<!-- }-->
<!-- },-->
<!-- methods: {-->
<!-- init(id) {-->
<!-- this.visible = true-->
<!-- // myRequest.getGroupList2(this).then(res => {-->
<!-- // this.groupIdes = res.data.list-->
<!-- // })-->
<!-- // this.dataForm.id = id || 0-->
<!-- // this.$http({-->
<!-- // url: this.$http.adornUrl('/sys/role/select'),-->
<!-- // method: 'get',-->
<!-- // params: this.$http.adornParams()-->
<!-- // }).then(({data}) => {-->
<!-- // this.roleList = data && data.code === 200 ? data.list : []-->
<!-- // }).then(() => {-->
<!-- // this.visible = true-->
<!-- // this.$nextTick(() => {-->
<!-- // this.$refs['dataForm'].resetFields()-->
<!-- // })-->
<!-- // }).then(() => {-->
<!-- // if (this.dataForm.id) {-->
<!-- // console.log('this.dataForm.id', this.dataForm.id)-->
<!-- // this.$http({-->
<!-- // url: this.$http.adornUrl(`/excel/info/${this.dataForm.id}`),-->
<!-- // method: 'get',-->
<!-- // params: this.$http.adornParams()-->
<!-- // }).then(({data}) => {-->
<!-- // console.log(data)-->
<!-- // if (data && data.code === 200) {-->
<!-- // this.dataForm.dormitoryType = parseInt(data.user.dormitoryType);-->
<!-- // this.dataForm.dormitory = data.user.dormitory-->
<!-- // this.dataForm.dormitoryNum = data.user.dormitoryNum-->
<!-- // this.dataForm.dormitoryStatus = parseInt(data.user.dormitoryStatus);-->
<!-- // }-->
<!-- // })-->
<!-- // }-->
<!-- // })-->
<!-- },-->
<!-- // -->
<!-- dataFormSubmit() {-->
<!-- // this.$refs['dataForm'].validate((valid) => {-->
<!-- // if (valid) {-->
<!-- // this.$http({-->
<!-- // url: this.$http.adornUrl(`/excel/${!this.dataForm.id ? 'backsave' : 'update'}`),-->
<!-- // method: 'post',-->
<!-- // data: this.$http.adornData({-->
<!-- // 'id':this.dataForm.id,-->
<!-- // 'dormitory': this.dataForm.dormitory,-->
<!-- // 'dormitoryType': this.dataForm.dormitoryType,-->
<!-- // 'dormitoryNum': this.dataForm.dormitoryNum,-->
<!-- // 'dormitoryStatus': this.dataForm.dormitoryStatus,-->
<!-- //-->
<!-- // })-->
<!-- // }).then(({data}) => {-->
<!-- // console.log(data)-->
<!-- // if (data && data.code === 200) {-->
<!-- // this.$message({-->
<!-- // message: '',-->
<!-- // type: 'success',-->
<!-- // duration: 1500,-->
<!-- // onClose: () => {-->
<!-- // this.visible = false-->
<!-- // this.$emit('refreshDataList')-->
<!-- // }-->
<!-- // })-->
<!-- // } else {-->
<!-- // this.$message.error(data.msg)-->
<!-- // }-->
<!-- // })-->
<!-- // }-->
<!-- // })-->
<!-- }-->
<!-- }-->
<!--}-->
<!--</script>-->
<!--<style>-->
<!--.transfer-footer {-->
<!-- margin-left: 20px;-->
<!-- padding: 6px 5px;-->
<!--}-->
<!--</style>-->

View File

@ -0,0 +1,441 @@
<template>
<div class="mod-user">
<el-button type="primary" @click="groupDialog">新增组</el-button>
<el-table :data="dataList" border @selection-change="selectionChangeHandle"
style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50">
</el-table-column>
<el-table-column prop="userId" header-align="center" align="center" width="80" label="ID">
<template slot-scope="scope">
{{ (pageIndex - 1) * pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="name" header-align="center" width="100" align="center" label="组名">
</el-table-column>
<el-table-column header-align="center" align="center" width="150" label="操作">
<template slot-scope="scope">
<!-- <el-button v-if="isAuth('h5:user:update')" type="text" size="small"-->
<el-button type="text" size="small"
@click="addOrUpdateHandle(scope.row)">分组
</el-button>
<!-- <el-button v-if="isAuth('h5:user:delete')" type="text" size="small"-->
<!-- @click="deleteHandle(scope.row.id)">删除-->
<!-- </el-button>-->
</template>
</el-table-column>
<el-table-column header-align="center" align="center" label="组员信息">
<template slot-scope="scope">
<!-- 获取当前组的人信息-->
{{ getRowUser(scope.row.id, rowUserData) }}
</template>
</el-table-column>
<el-table-column header-align="center" align="center" width="150" label="删除">
<template slot-scope="scope">
<el-button type="text" size="small"
@click="deleteHandle(scope.row.id)">删除
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" :current-page="pageIndex"
:page-sizes="[5,10, 20, 50, 100]" :page-size="pageSize" :total="totalCount"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<!-- 分组对话框-->
<el-dialog width="1000px" :title="groupDialogTitle" :close-on-click-modal="false" :visible.sync="visible">
<!-- <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"-->
<!-- label-width="80px">-->
<!-- <p style="text-align: center; margin: 50px 0 20px">分组</p>-->
<div class="edit_dev" style="text-align: center" v-if="groupStatus">
<el-transfer
style="text-align: left; display: inline-block"
v-model="value4"
filterable
:left-default-checked="leftData"
:right-default-checked="rightData"
:titles="['所有用户',groupTitle]"
:button-texts="['移除组员', '分组']"
:format="{
noChecked: '${total}',
hasChecked: '${checked}/${total}'
}"
@change="handleChange"
:data="data">
<span slot-scope="{ option }">{{ option.label }} <span style="margin-left: 5px"></span>年龄{{ option.age }}</span>
<!-- <el-button class="transfer-footer" slot="left-footer" size="small">操作</el-button>-->
<!-- <el-button class="transfer-footer" slot="right-footer" size="small">操作</el-button>-->
</el-transfer>
</div>
<div>
<!-- 新增组的一个输入框-->
<!-- <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">-->
<el-form v-if="!groupStatus" label-width="80px">
<el-form-item label="组名">
<el-input v-model="groupData.name" placeholder="请输入组名,如:语文第二组"></el-input>
</el-form-item>
<el-form-item v-model="groupData.majorId" label="学科" v-if="isAuth('h5:user:save')">
<el-select v-model="groupData.majorId" placeholder="请选择学院">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<!-- </el-form>-->
<span slot="footer" class="dialog-footer">
<el-button @click="groupClos">关闭</el-button>
<el-button v-if="!groupStatus" type="primary" @click="saveGroup">确定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import option from "element-ui/packages/option";
export default {
data() {
// const generateData = _ => {
// const data = [];
// for (let i = 1; i <= 10; i++) {
// data.push({
// key: i,
// label: ` ${i}`,
// name: ` ${i}`,
// disabled: i % 4 === 0
// });
// }
// return data;
// };
return {
options: [
{
value: 1,
label: '语文'
},
{
value: 4,
label: '地理'
},
{
value: 7,
label: '历史'
},
{
value: 8,
label: '政治'
},
],
groupData: {
name: '',
majorId: 1
},
groupDialogTitle: '',
groupStatus: false,
dataForm: {
userName: ''
},
groupId: 0,
dataList: [],
pageIndex: 1,
pageSize: 5,
totalCount: 0,
visible: false,
// data: generateData(),
rowUserData: [],
data: [],
rightData: [],
leftData: [],
groupList: [{}],
value: [],
value4: [],
renderFunc(h, option) {
return <span>{option.key} - {option.label}</span>;
},
groupTitle: ''
}
},
components: {
// AddOrUpdate
},
activated() {
this.getDataList()
},
computed: {
option() {
return option
}
},
mounted() {
this.getRowUserFun()
},
methods: {
//
saveGroup(){
if (this.groupData.name.length<1){
this.$message({
message: '组名不能为空',
type: 'error',
duration: 1500,
})
return
}
this.$http({
url: this.$http.adornUrl('/group/save'),
method: 'post',
data: this.$http.adornParams({
'name': this.groupData.name,
'majorId': this.groupData.majorId
})
}).then(({data}) => {
this.groupData.name = ''
if (data && data.code === 200) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
})
this.getDataList()
this.visible=false
}
})
},
groupDialog() {
this.groupDialogTitle = '新增组名'
this.visible = true
this.groupStatus = false
},
//
groupClos() {
this.visible = false
this.getDataList()
this.getRowUserFun()
},
getRowUser(groupId, userList) {
let arr = []
// id
let filterUser = userList.filter(item => item.groupId === groupId);
filterUser.forEach((item) => {
arr.push(item.userName)
})
return arr
},
handleChange(value, direction, movedKeys) {
// console.log(value);
// console.log(direction);
// console.log(movedKeys);
//
if (direction === 'right') {
console.log(movedKeys)
console.log(this.groupId)
this.$http({
url: this.$http.adornUrl('/group/add'),
method: 'post',
data: this.$http.adornParams({
'groupId': this.groupId,
'ids': movedKeys
})
// params: this.$http.adornParams({
// 'groupId': this.groupId,
// 'ids': movedKeys
// })
}).then(({data}) => {
if (data && data.code === 200) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
})
}
})
}
//
if (direction === 'left') {
this.$http({
url: this.$http.adornUrl('/group/remove'),
method: 'post',
data: this.$http.adornParams({
'groupId': this.groupId,
'ids': movedKeys,
})
}).then(({data}) => {
if (data && data.code === 200) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
})
}
})
}
},
//
getDataList() {
this.$http({
url: this.$http.adornUrl('/group/pagelist'),
method: 'get',
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
'userId': this.dataForm.userName
})
}).then(({data}) => {
if (data && data.code === 200) {
this.dataList = data.page.list
this.totalCount = data.page.totalCount
} else {
this.dataList = []
this.totalCount = 0
}
})
},
//
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
//
currentChangeHandle(val) {
this.pageIndex = val
this.getDataList()
},
//
selectionChangeHandle(val) {
this.dataListSelections = val
},
getRowUserFun() {
this.$http({
url: this.$http.adornUrl('/h5/user/grp'),
method: 'get',
}).then(({data}) => {
// console.log(data)
if (data && data.code === 200) {
// console.log(data)
this.data = []
this.value4 = []
this.rowUserData = data.user
} else {
this.dataList = []
this.totalCount = 0
}
})
},
//
addOrUpdateHandle(obj) {
this.groupDialogTitle = '分组'
this.groupStatus = true
this.groupTitle = obj.name
this.groupId = obj.id
// this.visible = true
// return;
this.$http({
url: this.$http.adornUrl('/h5/user/grp'),
method: 'get',
params: this.$http.adornParams({
'groupId': obj.id,
})
}).then(({data}) => {
// console.log(data)
if (data && data.code === 200) {
console.log(data)
this.data = []
this.value4 = []
this.rowUserData = data.user
data.user.forEach((item, index) => {
// console.log(item)
if (item.groupId === obj.id) {
this.data.push({
key: item.id,
age: item.age,
sex: item.sex,
label: item.userName,
disabled: false
});
this.value4.push(item.id)
} else {
this.data.push({
key: item.id,
age: item.age,
sex: item.sex,
label: item.userName,
disabled: item.groupId !== 0
});
}
})
this.data.forEach((item, index) => {
if (item.groupId === obj.id) {
this.data.push({
key: item.id,
age: item.age,
sex: item.sex,
label: item.userName,
disabled: false
});
}
})
this.visible = true
} else {
this.dataList = []
this.totalCount = 0
}
})
},
//
deleteHandle(userid) {
var userIds = userid ? [userid] : this.dataListSelections.map(item => item.id)
this.$confirm(`确定操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
console.log(userIds)
this.$http({
url: this.$http.adornUrl('/group/delete'),
method: 'post',
data: this.$http.adornData(userIds, false)
}).then(({data}) => {
if (data && data.code === 200) {
this.$message({
message: data.msg,
type: 'success',
duration: 1500,
onClose: () => this.getDataList()
})
} else {
this.$message.error(data.msg)
}
})
}).catch(() => {
})
},
}
}
</script>
<style scoped>
.edit_dev >>> .el-transfer-panel {
width:250px;
}
</style>

View File

@ -12,7 +12,7 @@
<el-button v-if="isAuth('h5:user:delete')" type="danger" @click="deleteHandle()"
:disabled="dataListSelections.length <= 0">批量删除
</el-button>
<a href="/static/web/a.xlsx" download="宿舍信息模板">
<a href="/a.xlsx" download="宿舍信息模板">
<el-button type="primary" style="margin: 0 10px">下载Excel模板</el-button>
</a>
<el-upload
@ -63,7 +63,7 @@
<el-table-column prop="dormitoryStatus" header-align="center" align="center" label="状态">
<template slot-scope="scope">
<el-tag v-if="scope.row.dormitoryStatus === '1'" size="small" type="danger">已满</el-tag>
<el-tag v-else size="small">没满</el-tag>
<el-tag v-else size="small">可分配</el-tag>
</template>
</el-table-column>
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
@ -193,7 +193,7 @@ export default {
//
deleteHandle(userid) {
var userIds = userid ? [userid] : this.dataListSelections.map(item => item.id)
this.$confirm(`确定对[userid=${userIds.join(',')}]进行[${userid ? '删除' : '批量删除'}]操作?`, '提示', {
this.$confirm(`确定操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'

View File

@ -0,0 +1,390 @@
<template>
<div class="mod-user">
<el-form style="display: inline-block" :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item style="width: 130px">
<el-input v-model="dataForm.userMajorId" placeholder="用户专业ID" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
<!-- <el-button v-if="isAuth('h5:user:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>-->
<!-- <el-button v-if="isAuth('h5:user:delete')" type="danger" @click="deleteHandle()"-->
<!-- :disabled="dataListSelections.length <= 0">批量删除-->
<!-- </el-button>-->
</el-form-item>
<download-excel :stringifyLongNum="true" style="display: inline-block;" :fetch="getExportExcel" :fields="json_fields" :name='`邀请函信息.xls`'>
<el-button type='primary'>导出</el-button>
</download-excel>
</el-form>
<el-dialog
title="邀请函接收单位"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose">
<el-form :model="dataForm" ref="dataForm"
label-width="120px">
<el-form-item label="邀请函接收单位">
<el-input v-model="dataForm.workNameQr" placeholder="邀请函接收单位"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitBut"> </el-button>
</span>
</el-dialog>
<el-table :data="dataList" border
@sort-change="sortChange"
@cell-click="handleCellClick"
v-loading="dataListLoading" @selection-change="selectionChangeHandle"
style="width: 100%;">
<!-- <el-table-column type="selection" header-align="center" align="center" width="50">-->
<!-- </el-table-column>-->
<el-table-column prop="userId" header-align="center" align="center" width="80" label="序号">
<template slot-scope="scope">
{{ (pageIndex - 1) * pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<!-- <el-table-column prop="userName" width="150" header-align="center" align="center" label="用户名">-->
<!-- </el-table-column>-->
<el-table-column sortable="custom" prop="userMajorId" header-align="center" align="center" width="150" label="用户专业ID">
</el-table-column>
<!-- <el-table-column prop="mobile" header-align="center" align="center" label="手机号">-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="identity" header-align="center" align="center" label="身份">-->
<!-- <template slot-scope="scope">-->
<!-- {{ isIdentity(scope.row.identity) }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column sortable="custom" prop="majorId" width="150" header-align="center" align="center" label="发函学院">
<template slot-scope="scope">
{{ isMajor(scope.row.majorId) }}
</template>
</el-table-column>
<el-table-column sortable="custom" prop="workNameQr" header-align="center" align="center" >
<template slot="header" slot-scope="scope">
<div class="custom-header">邀请函接收单位 <span>(点击单元格可编辑)</span></div>
</template>
<template slot-scope="scope">
<span v-if="scope.row.seen">{{ scope.row.workNameQr }}</span>
<el-input v-else v-model="scope.row.workNameQr" @blur="saveEdit(scope.row)"></el-input>
</template>
</el-table-column>
<el-table-column sortable="custom" prop="workName" header-align="center" align="center"
label="受邀教师填写的工作单位">
</el-table-column>
<!-- <el-table-column-->
<!-- prop="workName"-->
<!-- label="Name">-->
<!-- <template slot-scope="scope">-->
<!-- <span v-if="scope.row.seen">{{ scope.row.workName }}</span>-->
<!-- <el-input v-else v-model="scope.row.workName" @blur="saveEdit(scope.row)"></el-input>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="status" header-align="center" align="center" label="状态">-->
<!-- <template slot-scope="scope">-->
<!-- <el-tag v-if="scope.row.status === 0" size="small" type="danger">工作单位异常</el-tag>-->
<!-- <el-tag v-else size="small">正常</el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="userMajorId" header-align="center" align="center" label="用户专业ID">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- header-align="center"-->
<!-- align="center"-->
<!-- prop="groupId"-->
<!-- label="所属分组"-->
<!-- :filters="groupIdes"-->
<!-- :filter-method="filterTag"-->
<!-- filter-placement="bottom-end">-->
<!-- <template slot-scope="scope">-->
<!-- {{ getgroups(scope.row.groupId) }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="status" header-align="center" align="center" label="状态">-->
<!-- <template slot-scope="scope">-->
<!-- <el-tag v-if="scope.row.status === 0" size="small" type="danger">禁用</el-tag>-->
<!-- <el-tag v-else size="small">正常</el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">-->
<!-- <template slot-scope="scope">-->
<!-- &lt;!&ndash; <el-button v-if="isAuth('h5:user:update')" type="text" size="small"&ndash;&gt;-->
<!-- <el-button type="text" size="small"-->
<!-- @click="addOrUpdateHandle(scope.row)">修改-->
<!-- </el-button>-->
<!-- <el-button v-if="isAuth('h5:user:delete')" type="text" size="small"-->
<!-- @click="deleteHandle(scope.row.id)">删除-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" :current-page="pageIndex"
:page-sizes="[5,10, 20, 50, 100]" :page-size="pageSize" :total="totalCount"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</template>
<script>
import myRequest from "@/views/modules/h5/myRequest";
export default {
data() {
return {
json_fields: {
"姓名": "userName",
"用户专业ID": "userMajorId",
"身份码": "userId",
"分组": "groupId",
"邀请函接收单位": "workNameQr",
"受邀请教师单位": "workName",
},
dialogVisible: false,
//
autoGenerateForm: {
// group:,
// num: 1
},
autoGeneratButStatus: false,
majors: [
{
id: 1,
name: '语文',
value: 1,
},
{
id: 2,
name: '地理',
value: 4,
},
{
id: 3,
name: '历史',
value: 7,
},
{
id: 4,
name: '政治',
value: 8,
}],
dataForm: {
workNameQr: ''
},
temp: 0,
dataList: [],
pageIndex: 1,
pageSize: 5,
totalCount: 0,
dataListLoading: false,
dataListSelections: [],
addOrUpdateVisible: false,
groupIdes: [],
}
},
components: {},
activated() {
this.getDataList()
this.groupIdes = []
//
myRequest.getGroupList(this)
},
computed: {},
methods: {
/**
* 自定义排序
*/
sortChange(colum){
if (colum.order === 'ascending'){
this.getDataList(colum.prop,colum.order)
}else {
this.getDataList(colum.prop,colum.order)
}
},
// Excel
async getExportExcel(){
let excelData=[]
await this.$http({
url: this.$http.adornUrl('/inv/export'),
method: 'get',
}).then(({data}) => {
excelData=data
// if (data && data.code === 200) {
// console.log(data.list)
// }
})
return excelData
},
handleCellClick(row, column, cell, event) {
//
if (column.property === 'workNameQr') {
row.seen = false;
// this.$set(row, 'seen', false);
this.$nextTick(() => {
const input = cell.querySelector('.el-input__inner');
if (input) {
input.focus();
}
});
}
},
saveEdit(row) {
row.seen = true;
//
this.$http({
url: this.$http.adornUrl('/inv/update'),
method: 'get',
params: this.$http.adornParams({
'id': row.id,
'workNameQr': row.workNameQr,
})
}).then(({data}) => {
this.dialogVisible = false
if (data && data.code === 200) {
this.getDataList()
}
})
},
//
handleClose(done) {
this.dataForm = {
workNameQr: ''
}
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {
});
},
//
submitBut() {
this.$http({
url: this.$http.adornUrl('/inv/update'),
method: 'get',
params: this.$http.adornParams({
'id': this.dataForm.id,
'workNameQr': this.dataForm.workNameQr,
})
}).then(({data}) => {
this.dialogVisible = false
if (data && data.code === 200) {
this.getDataList()
}
})
},
isMajor(majorId) {
switch (majorId) {
case 1:
return '语文'
case 4:
return '地理'
case 7:
return '历史'
case 8:
return '政治'
}
},
//
getDataList(prop='',sort='') {
this.dataListLoading = true
this.$http({
url: this.$http.adornUrl('/inv/list'),
method: 'get',
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
'userMajorId': this.dataForm.userMajorId,
'prop': prop,
'sort': sort
})
}).then(({data}) => {
if (data && data.code === 200) {
// this.dataList = data.page.list
this.dataList=[]
data.page.list.forEach((item) => {
this.dataList.push({...{seen: true},...item})
})
// console.log(this.dataList)
this.totalCount = data.page.totalCount
} else {
this.dataList = []
this.totalCount = 0
}
this.dataListLoading = false
})
},
//
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
//
currentChangeHandle(val) {
this.pageIndex = val
this.getDataList()
},
//
selectionChangeHandle(val) {
this.dataListSelections = val
},
// /
addOrUpdateHandle(row) {
this.dataForm = row
this.dialogVisible = true
},
//
deleteHandle(userid) {
var userIds = userid ? [userid] : this.dataListSelections.map(item => item.id)
this.$confirm(`确定操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$http({
url: this.$http.adornUrl('/h5/user/delete'),
method: 'post',
data: this.$http.adornData(userIds, false)
}).then(({data}) => {
if (data && data.code === 200) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => this.getDataList()
})
} else {
this.$message.error(data.msg)
}
})
}).catch(() => {
})
},
}
}
</script>
<style>
.custom-header span{
color: red;
}
</style>

View File

@ -116,7 +116,7 @@ export default {
console.log(data)
if (data && data.code === 200) {
this.dataForm.userName = data.user.userName
this.dataForm.groupId = data.user.groupId
this.dataForm.groupId = data.user.groupId== 0 ? '' : data.user.groupId
this.dataForm.teacherId = data.user.teacherId
this.dataForm.userId = data.user.userId
this.dataForm.status = data.user.status

View File

@ -2,7 +2,7 @@
<div class="mod-user">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.userName" placeholder="用户身份码" clearable></el-input>
<el-input v-model="dataForm.userName" placeholder="姓名" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
@ -11,8 +11,13 @@
:disabled="dataListSelections.length <= 0">批量删除
</el-button>
</el-form-item>
<download-excel :stringifyLongNum="true" style=" display: inline-block;" :fetch="getExportExcel" :fields="json_fields" :name='`本校老师信息.xls`'>
<el-button type='primary'>导出</el-button>
</download-excel>
</el-form>
<el-table :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
<el-table @sort-change="sortChange" :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50">
</el-table-column>
@ -21,13 +26,13 @@
{{ (pageIndex - 1) * pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">
<!-- <el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">-->
<!-- </el-table-column>-->
<el-table-column sortable="custom" prop="userName" header-align="center" align="center" label="姓名">
</el-table-column>
<el-table-column prop="userName" header-align="center" align="center" label="姓名">
<el-table-column sortable="custom" prop="teacherId" header-align="center" align="center" label="工号">
</el-table-column>
<el-table-column prop="teacherId" header-align="center" align="center" label="工号">
</el-table-column>
<el-table-column prop="phone" header-align="center" align="center" label="手机号">
<el-table-column sortable="custom" prop="phone" header-align="center" align="center" label="手机号">
</el-table-column>
<!-- <el-table-column prop="mobile" header-align="center" align="center" label="手机号">-->
<!-- </el-table-column>-->
@ -38,6 +43,7 @@
<!-- </el-table-column>-->
<el-table-column
header-align="center"
align="center"
prop="groupId"
@ -94,6 +100,48 @@ export default {
dataListSelections: [],
addOrUpdateVisible: false,
groupIdes: [],
json_fields: {
"序号": "index",
"姓名": "userName",
"身份码": "userId",
"用户专业码": "userMajorId",
"工号": "teacherId",
"学科": {
field: "majorId",
callback: (value) => {
// major_id
const majorMap = {
1: "语文",
4: "地理",
7: "历史",
8: "政治",
};
return majorMap[value] || value; //
}
},
"手机号": "phone",
"分组": {
field: "groupId",
callback: (value) => {
if (value=='0'){
return ""
}
return this.groupIdMap[value] || value; //
}
},
"是否第一次阅卷": {
field: "status",
callback: (value) => {
// major_id
const majorMap = {
0: "否",
1: "是",
};
return majorMap[value] || value; //
}
}
},
groupIdMap:{},
}
},
components: {
@ -103,27 +151,65 @@ export default {
this.getDataList()
this.groupIdes=[]
//
myRequest.getGroupList(this)
let groupList = myRequest.getGroupList(this);
setTimeout(() => {
groupList.forEach(item => {
this.groupIdMap[item.id] = item.text;
})
},500)
},
computed: {},
methods: {
/**
* 自定义排序
*/
sortChange(colum){
if (colum.order === 'ascending'){
this.getDataList(colum.prop,colum.order)
}else {
this.getDataList(colum.prop,colum.order)
}
},
// Excel
async getExportExcel(){
let excelData=[]
await this.$http({
url: this.$http.adornUrl('/teach/export'),
method: 'get',
}).then(({data}) => {
excelData = data.map((item, index) => {
return { ...item, index: index + 1 }; //
});
// if (data && data.code === 200) {
// console.log(data.list)
// }
})
return excelData
},
// isAuth,
//
filterTag(value, row) {
return row.groupId === value;
},
getgroups(id) {
try {
let groupIdes = this.groupIdes
return groupIdes[id - 1].text
}catch (e) {
// console.log(e)
return "未分组"
let groupName=''
// console.log(this.groupIdesShow[id])
this.groupIdesShow.forEach(item => {
if (item.id === id){
groupName= item.name
}
})
return groupName
// try {
//
// } catch (e) {
// console.log(e)
// return ""
// }
},
//
getDataList() {
getDataList(prop='',sort='') {
this.dataListLoading = true
this.$http({
url: this.$http.adornUrl('/teach/list'),
@ -131,7 +217,9 @@ export default {
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
'userId': this.dataForm.userName
'userName': this.dataForm.userName,
'prop': prop,
'sort': sort
})
}).then(({data}) => {
if (data && data.code === 200) {
@ -169,7 +257,8 @@ export default {
//
deleteHandle(userid) {
var userIds = userid ? [userid] : this.dataListSelections.map(item => item.id)
this.$confirm(`确定对[userid=${userIds.join(',')}]进行[${userid ? '删除' : '批量删除'}]操作?`, '提示', {
// this.$confirm(`[userid=${userIds.join(',')}][${userid ? '' : ''}]?`, '', {
this.$confirm(`确定操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'

View File

@ -5,6 +5,7 @@ export default {
method: 'get',
params: _this.$http.adornParams()
}).then(res => {
_this.groupIdesShow =res.data.list
res.data.list.forEach(item => {
_this.groupIdes.push({
text: item.name,
@ -13,6 +14,7 @@ export default {
})
})
})
return _this.groupIdes
},
getGroupList2(_this) {
return(

View File

@ -116,7 +116,7 @@ export default {
console.log(data)
if (data && data.code === 200) {
this.dataForm.userName = data.user.userName
this.dataForm.groupId = data.user.groupId
this.dataForm.groupId = data.user.groupId== 0 ? '' : data.user.groupId
this.dataForm.studentId = data.user.studentId
this.dataForm.userId = data.user.userId
this.dataForm.status = data.user.status

View File

@ -2,7 +2,7 @@
<div class="mod-user">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.userName" placeholder="用户身份码" clearable></el-input>
<el-input v-model="dataForm.userName" placeholder="姓名" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
@ -11,8 +11,11 @@
:disabled="dataListSelections.length <= 0">批量删除
</el-button>
</el-form-item>
<download-excel :stringifyLongNum="true" style=" display: inline-block;" :fetch="getExportExcel" :fields="json_fields" :name='`研究生信息导出.xls`'>
<el-button type='primary'>导出</el-button>
</download-excel>
</el-form>
<el-table :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
<el-table @sort-change="sortChange" :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50">
</el-table-column>
@ -21,13 +24,13 @@
{{ (pageIndex - 1) * pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">
<!-- <el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">-->
<!-- </el-table-column>-->
<el-table-column sortable="custom" prop="userName" header-align="center" align="center" label="学生名">
</el-table-column>
<el-table-column prop="userName" header-align="center" align="center" label="学生名">
<el-table-column sortable="custom" prop="studentId" header-align="center" align="center" label="学">
</el-table-column>
<el-table-column prop="studentId" header-align="center" align="center" label="学号">
</el-table-column>
<el-table-column prop="phone" header-align="center" align="center" label="手机号">
<el-table-column sortable="custom" prop="phone" header-align="center" align="center" label="手机号">
</el-table-column>
<!-- <el-table-column prop="mobile" header-align="center" align="center" label="手机号">-->
<!-- </el-table-column>-->
@ -51,7 +54,7 @@
</el-table-column>
<el-table-column prop="status" header-align="center" align="center" label="是否第一次阅卷">
<template slot-scope="scope">
<el-tag v-if="scope.row.status === 1" size="small" ></el-tag>
<el-tag v-if="scope.row.status == 1" size="small" ></el-tag>
<el-tag v-else size="small" type="danger"></el-tag>
</template>
</el-table-column>
@ -95,6 +98,48 @@ export default {
dataListSelections: [],
addOrUpdateVisible: false,
groupIdes: [],
json_fields: {
"序号":"index",
"姓名": "userName",
"身份码": "userId",
"用户专业码": "userMajorId",
"学号": "studentId",
"学科": {
field: "majorId",
callback: (value) => {
// major_id
const majorMap = {
1: "语文",
4: "地理",
7: "历史",
8: "政治",
};
return majorMap[value] || value; //
}
},
"手机号": "phone",
"分组": {
field: "groupId",
callback: (value) => {
if (value=='0'){
return ""
}
return this.groupIdMap[value] || value; //
}
},
"是否第一次阅卷": {
field: "status",
callback: (value) => {
// major_id
const majorMap = {
0: "否",
1: "是",
};
return majorMap[value] || value; //
}
}
},
groupIdMap:{},
}
},
components: {
@ -104,27 +149,62 @@ export default {
this.getDataList()
this.groupIdes=[]
//
myRequest.getGroupList(this)
let groupList = myRequest.getGroupList(this);
setTimeout(() => {
groupList.forEach(item => {
this.groupIdMap[item.id] = item.text;
})
},500)
},
computed: {},
methods: {
/**
* 自定义排序
*/
sortChange(colum){
if (colum.order === 'ascending'){
this.getDataList(colum.prop,colum.order)
}else {
this.getDataList(colum.prop,colum.order)
}
},
// Excel
async getExportExcel(){
let excelData=[]
await this.$http({
url: this.$http.adornUrl('/stu/export'),
method: 'get',
}).then(({data}) => {
excelData = data.map((item, index) => {
return { ...item, index: index + 1 }; //
});
})
return excelData
},
// isAuth,
//
filterTag(value, row) {
return row.groupId === value;
},
getgroups(id) {
try {
let groupIdes = this.groupIdes
return groupIdes[id - 1].text
}catch (e) {
// console.log(e)
return "未分组"
let groupName=''
// console.log(this.groupIdesShow[id])
this.groupIdesShow.forEach(item => {
if (item.id === id){
groupName= item.name
}
})
return groupName
// try {
//
// } catch (e) {
// console.log(e)
// return ""
// }
},
//
getDataList() {
getDataList(prop='',sort='') {
this.dataListLoading = true
this.$http({
url: this.$http.adornUrl('/stu/list'),
@ -132,7 +212,9 @@ export default {
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
'userId': this.dataForm.userName
'userName': this.dataForm.userName,
'prop': prop,
'sort': sort
})
}).then(({data}) => {
if (data && data.code === 200) {
@ -170,7 +252,8 @@ export default {
//
deleteHandle(userid) {
var userIds = userid ? [userid] : this.dataListSelections.map(item => item.id)
this.$confirm(`确定对[userid=${userIds.join(',')}]进行[${userid ? '删除' : '批量删除'}]操作?`, '提示', {
// this.$confirm(`[userid=${userIds.join(',')}][${userid ? '' : ''}]?`, '', {
this.$confirm(`确定操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'

View File

View File

@ -5,17 +5,24 @@
<el-form-item v-if="!dataForm.id ? true : false" label="身份码" prop="userId">
<el-input v-model="dataForm.userId" placeholder="登录帐号"></el-input>
</el-form-item>
<el-form-item label="用户名" >
<el-form-item label="用户名">
<el-input v-model="dataForm.userName" placeholder="用户名"></el-input>
</el-form-item>
<el-form-item v-if="!dataForm.id ? true : false" label="身份">
<el-select v-model="dataForm.identity" placeholder="身份">
<el-option v-for="(name,key) in identityes" :key="key+1" :value="key+1" :label="name"></el-option>
<el-option v-for="item in identityes" :key="item.id" :value="item.value" :label="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="!dataForm.id ? true : false" label="学科">
<el-select v-model="dataForm.userMajorId" placeholder="学科">
<el-option v-for="item in majors" :key="item.id" :value="item.value" :label="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="所属组">
<el-select v-model="dataForm.groupId" placeholder="所属组">
<el-option v-for="item in groupIdes" :key="item.id" :value="item.id" :label="item.name">{{item.name}}</el-option>
<el-option v-for="item in groupIdes" :key="item.id" :value="item.id" :label="item.name">
{{ item.name }}
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态" size="mini" prop="status">
@ -60,11 +67,52 @@ export default {
id: 0,
userName: '',
groupId: '',
identity: '',
identity: 3,
userId: '',
userMajorId: 1,
status: 0
},
identityes: ['管理员', '研究生', '本校老师', '外校老师'],
majors: [
{
id: 1,
name: '语文',
value: 1,
},
{
id: 2,
name: '地理',
value: 4,
},
{
id: 3,
name: '历史',
value: 7,
},
{
id: 4,
name: '政治',
value: 8,
}],
identityes: [
// {
// id: 1,
// name: '',
// value: 2,
// },
{
id: 2,
name: '研究生',
value: 3,
}, {
id: 3,
name: '本校老师',
value: 6,
}, {
id: 4,
name: '外校老师',
value: 9,
}
],
groupIdes: [],
dataRule: {
userName: [
@ -85,7 +133,7 @@ export default {
myRequest.getGroupList2(this).then(res => {
this.groupIdes = res.data.list
})
if (id==undefined){
if (id == undefined) {
this.dataForm.userId = ''
this.dataForm.userName = ''
this.dataForm.groupId = ''
@ -115,7 +163,7 @@ export default {
console.log(data)
if (data && data.code === 200) {
this.dataForm.userName = data.user.userName
this.dataForm.groupId = data.user.groupId
this.dataForm.groupId = data.user.groupId == 0 ? '' : data.user.groupId
this.dataForm.identity = data.user.identity
this.dataForm.userId = data.user.userId
this.dataForm.status = data.user.status
@ -132,11 +180,12 @@ export default {
url: this.$http.adornUrl(`/h5/user/${!this.dataForm.id ? 'save' : 'update'}`),
method: 'post',
data: this.$http.adornData({
'id':this.dataForm.id,
'id': this.dataForm.id,
'userName': this.dataForm.userName,
'groupId': this.dataForm.groupId,
'identity': this.dataForm.identity,
'userId': this.dataForm.userId,
'userMajorId': this.dataForm.userMajorId,
'status': this.dataForm.status,
})
}).then(({data}) => {

View File

@ -1,8 +1,16 @@
<template>
<div class="mod-user">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.userName" placeholder="用户身份码" clearable></el-input>
<el-form style="display: inline-block" :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<!-- <el-select style="width: 100px" v-model="searchValue" placeholder="请选择">-->
<!-- <el-option-->
<!-- v-for="item in searchOptions"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value">-->
<!-- </el-option>-->
<!-- </el-select>-->
<el-form-item style="width: 130px">
<el-input v-model="dataForm.userName" placeholder="姓名" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
@ -11,8 +19,76 @@
:disabled="dataListSelections.length <= 0">批量删除
</el-button>
</el-form-item>
<download-excel :stringifyLongNum="true" :fetch="getExportExcel" :fields="json_fields"
style="float: right;margin-right: 2px;margin-left: -3px" :name='`人员基本数据.xls`'>
<el-button type='primary'>导出</el-button>
</download-excel>
</el-form>
<el-table :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
<el-switch
v-if="isAuth('sys:user:list')"
v-show="!isShowAutho"
v-model="isShowAutho"
active-text="账号生成">
</el-switch>
<!-- 自动生成账号功能-->
<el-form v-if="isShowAutho" label-width="100px" style="display: inline-block" :inline="true"
:model="autoGenerateForm"
@keyup.enter.native="beginAutoGenerate">
<el-form-item style="width: 130px" v-if="isAuth('sys:user:list')">
<el-select v-model="autoGenerateForm.group" placeholder="账号类型">
<el-option v-for="item in autoGeneratType" :key="item.id" :value="item.value" :label="item.name">
{{ item.name }}
</el-option>
</el-select>
</el-form-item>
<el-form-item style="width: 130px" v-if="isAuth('sys:user:list')">
<el-select v-model="autoGenerateForm.majorId" placeholder="专业">
<el-option v-for="item in majors" :key="item.id" :value="item.value" :label="item.name">
{{ item.name }}
</el-option>
</el-select>
</el-form-item>
<el-form-item style="width: 130px" v-if="isAuth('sys:user:list')">
<el-input v-model="autoGenerateForm.num" type="number" placeholder="账号数量"
clearable></el-input>
</el-form-item>
<el-form-item v-if="isAuth('sys:user:list')">
<el-button :disabled="autoGeneratButStatus" type="primary" @click="beginAutoGenerate">开始生成
</el-button>
</el-form-item>
</el-form>
<el-upload
v-if="isAuth('sys:user:list')"
style="float: right;margin-left: 5px"
class="upload-demo"
ref="upload"
action="/h5/user/upload"
:on-preview="handlePreview"
:on-success="uploadSuccess"
:on-error="uploadError"
:before-upload="beforeUpload"
:on-remove="handleRemove"
:file-list="fileList"
accept=".xls,.xlsx"
:auto-upload="false"
:limit="1"
>
<el-button slot="trigger" type="primary">选取</el-button>
<el-button style="margin-left: 10px;" type="success" @click="submitUpload">
上传到服务器
</el-button>
<div slot="tip" class="el-upload__tip">只能上传excel文件</div>
</el-upload>
<el-table :data="dataList"
@sort-change="sortChange"
@cell-click="handleCellClick"
border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50">
</el-table-column>
@ -21,19 +97,28 @@
{{ (pageIndex - 1) * pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">
<el-table-column v-if="isAuth('sys:user:list')" prop="userId" header-align="center" align="center"
width="100" label="用户身份码">
</el-table-column>
<el-table-column prop="userName" header-align="center" align="center" label="用户名">
<el-table-column sortable="custom" prop="userName" header-align="center" align="center" label="用户名">
</el-table-column>
<el-table-column sortable="custom" prop="userMajorId" header-align="center" align="center"
label="用户专业ID">
</el-table-column>
<!-- <el-table-column prop="mobile" header-align="center" align="center" label="手机号">-->
<!-- </el-table-column>-->
<el-table-column prop="identity" header-align="center" align="center" label="身份">
<el-table-column sortable="custom" prop="identity" header-align="center" align="center" label="身份">
<template slot-scope="scope">
{{ isIdentity(scope.row.identity) }}
</template>
</el-table-column>
<el-table-column sortable="custom" prop="majorId" header-align="center" align="center" label="学科">
<template slot-scope="scope">
{{ isMajor(scope.row.majorId) }}
</template>
</el-table-column>
<el-table-column
sortable="custom"
header-align="center"
align="center"
prop="groupId"
@ -45,12 +130,23 @@
{{ getgroups(scope.row.groupId) }}
</template>
</el-table-column>
<el-table-column prop="status" header-align="center" align="center" label="状态">
<el-table-column sortable="custom" prop="workload" header-align="center" align="center">
<template slot="header" slot-scope="scope">
<div class="custom-header">工作量<span>(点击单元格可编辑)</span></div>
</template>
<template slot-scope="scope">
<el-tag v-if="scope.row.status === 0" size="small" type="danger">禁用</el-tag>
<el-tag v-else size="small">正常</el-tag>
<span v-if="scope.row.seen">{{ scope.row.workload == 0 ? '' : scope.row.workload }}</span>
<el-input v-else v-model="scope.row.workload" @blur="saveEdit(scope.row)"></el-input>
</template>
</el-table-column>
<!-- <el-table-column prop="status" header-align="center" align="center" label="状态">-->
<!-- <template slot-scope="scope">-->
<!-- <el-tag v-if="scope.row.status === 0" size="small" type="danger">禁用</el-tag>-->
<!-- <el-tag v-else size="small">正常</el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
<template slot-scope="scope">
<el-button v-if="isAuth('h5:user:update')" type="text" size="small"
@ -78,10 +174,126 @@ import myRequest from "@/views/modules/h5/myRequest";
export default {
data() {
return {
// searchOptions: [{
// value: 'userName',
// label: ''
// },{
// value: 'userMajorId',
// label: 'ID'
// },{
// value: 'identity',
// label: ''
// }, {
// value: 'majorId',
// label: ''
// },],
// searchValue: 'userName',
isShowAutho: false,
json_fields: {
"序号": "index",
"姓名": "userName",
"身份码": "userId",
"用户专业码": "userMajorId",
"身份": {
field: "identity",
callback: (value) => {
// major_id
const majorMap = {
2: "管理员",
3: "研究生",
6: "本校老师",
9: "外校老师",
};
return majorMap[value] || value; //
}
},
"学科": {
field: "majorId",
callback: (value) => {
// major_id
const majorMap = {
1: "语文",
4: "地理",
7: "历史",
8: "政治",
};
return majorMap[value] || value; //
}
},
"工作量": {
field: "workload",
callback: (value) => {
if (value == '0') {
return ""
}
return value; //
},
},
"分组": {
field: "groupId",
callback: (value) => {
if (value == '0') {
return ""
}
return this.groupIdMap[value] || value; //
}
},
},
groupIdMap: {},
fileList: [],
//
autoGenerateForm: {
// group:,
// num: 1
},
autoGeneratButStatus: false,
autoGeneratType: [
// {
// id: 1,
// name: '',
// value: 2,
// },
{
id: 2,
name: '研究生',
value: 3,
}, {
id: 3,
name: '本校老师',
value: 6,
}, {
id: 4,
name: '外校老师',
value: 9,
}
],
majors: [
{
id: 1,
name: '语文',
value: 1,
},
{
id: 2,
name: '地理',
value: 4,
},
{
id: 3,
name: '历史',
value: 7,
},
{
id: 4,
name: '政治',
value: 8,
}],
dataForm: {
userName: ''
},
temp:0,
temp: 0,
dataList: [],
pageIndex: 1,
pageSize: 5,
@ -90,47 +302,214 @@ export default {
dataListSelections: [],
addOrUpdateVisible: false,
groupIdes: [],
groupIdesShow: [],
}
},
components: {
AddOrUpdate
},
activated() {
this.isShowAutho = false
this.getDataList()
this.groupIdes=[]
this.groupIdes = []
//
myRequest.getGroupList(this)
let groupList = myRequest.getGroupList(this);
setTimeout(() => {
groupList.forEach(item => {
this.groupIdMap[item.id] = item.text;
})
}, 500)
//
},
computed: {},
methods: {
//
filterTag(value, row) {
return row.groupId === value;
},
getgroups(id) {
try {
let groupIdes = this.groupIdes
return groupIdes[id - 1].text
}catch (e) {
// console.log(e)
return "未分组"
/**
* 自定义排序
*/
sortChange(colum) {
if (colum.order === 'ascending') {
this.getDataList(colum.prop, colum.order)
} else {
this.getDataList(colum.prop, colum.order)
}
},
handleCellClick(row, column, cell, event) {
//
if (column.property === 'workload') {
row.seen = false;
// this.$set(row, 'seen', false);
this.$nextTick(() => {
const input = cell.querySelector('.el-input__inner');
if (input) {
input.focus();
}
});
}
},
saveEdit(row) {
row.seen = true;
if (row.workload == '') {
row.workload = 0
}
//
this.$http({
url: this.$http.adornUrl('/h5/user/workload'),
method: 'get',
params: this.$http.adornParams({
'id': row.id,
'workload': row.workload,
})
}).then(({data}) => {
this.dialogVisible = false
if (data && data.code === 200) {
this.getDataList()
}
})
},
// Excel
async getExportExcel() {
// console.log(this.groupIdMap)
let excelData = []
await this.$http({
url: this.$http.adornUrl('/h5/user/export'),
method: 'get',
}).then(({data}) => {
excelData = data.map((item, index) => {
return {...item, index: index + 1}; //
});
// excelData=data
// if (data && data.code === 200) {
// console.log(data.list)
// }
})
return excelData
},
beginAutoGenerate() {
console.log(this.autoGenerateForm)
console.log(this.autoGenerateForm.group)
console.log(this.autoGenerateForm.num)
if (this.autoGenerateForm.group == undefined) {
this.$message({
message: '请选择身份',
type: 'warning',
duration: 1500
})
return
}
if (this.autoGenerateForm.majorId == undefined) {
this.$message({
message: '请选择专业',
type: 'warning',
duration: 1500
})
return
}
if (this.autoGenerateForm.num == undefined) {
this.$message({
message: '请输入账号数量',
type: 'warning',
duration: 1500
})
return
}
// 5000
if (this.autoGenerateForm.num <= 0) {
this.$message({
message: '账号数量不能小于0',
type: 'warning',
duration: 1500
})
return
}
if (this.autoGenerateForm.num > 500) {
this.$message({
message: '单次生成账号数量不能大于500',
type: 'warning',
duration: 1500
})
return
}
// Ajax
this.autoGeneratButStatus = true
this.$http({
url: this.$http.adornUrl('/h5/user/autoId'),
method: 'get',
params: this.$http.adornParams({
'groupType': this.autoGenerateForm.group,
'num': this.autoGenerateForm.num,
'majorId': this.autoGenerateForm.majorId,
})
}).then(({data}) => {
if (data && data.code === 200) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
// onClose: () => {
// this.visible = false
// this.$emit('refreshDataList')
// }
})
}
this.autoGenerateForm = {}
this.autoGeneratButStatus = false
console.log(data)
this.getDataList()
})
},
//
filterTag(value, row) {
console.log(value)
return row.groupId === value;
},
getgroups(id) {
let groupName = ''
// console.log(this.groupIdesShow[id])
this.groupIdesShow.forEach(item => {
if (item.id === id) {
groupName = item.name
}
})
return groupName
// try {
//
// } catch (e) {
// console.log(e)
// return ""
// }
},
isIdentity(identity) {
switch (identity) {
case 1:
return '管理员'
case 2:
return '研究生'
return '管理员'
case 3:
return '研究生'
case 6:
return '本校老师'
case 4:
case 9:
return '外校老师'
}
},
isMajor(majorId) {
switch (majorId) {
case 1:
return '语文'
case 4:
return '地理'
case 7:
return '历史'
case 8:
return '政治'
}
},
//
getDataList() {
getDataList(prop = '', sort = '') {
this.dataListLoading = true
this.$http({
url: this.$http.adornUrl('/h5/user/list'),
@ -138,17 +517,33 @@ export default {
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
'userId': this.dataForm.userName
'userId': this.dataForm.userName,
'userName': this.dataForm.userName,
'prop': prop,
'sort': sort
})
}).then(({data}) => {
if (data && data.code === 200) {
this.dataList = data.page.list
// this.dataList = data.page.list
this.dataList = []
data.page.list.forEach((item) => {
this.dataList.push({...{seen: true}, ...item})
})
// console.log(this.dataList)
this.totalCount = data.page.totalCount
} else {
this.dataList = []
this.totalCount = 0
}
this.dataListLoading = false
// this.dataList = data.page.list
// this.totalCount = data.page.totalCount
// } else {
// this.dataList = []
// this.totalCount = 0
// }
// this.dataListLoading = false
})
},
//
@ -176,7 +571,8 @@ export default {
//
deleteHandle(userid) {
var userIds = userid ? [userid] : this.dataListSelections.map(item => item.id)
this.$confirm(`确定对[userid=${userIds.join(',')}]进行[${userid ? '删除' : '批量删除'}]操作?`, '提示', {
// this.$confirm(`[userid=${userIds.join(',')}][${userid ? '' : ''}]?`, '', {
this.$confirm(`确定删除操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@ -199,7 +595,63 @@ export default {
})
}).catch(() => {
})
},
//
//
submitUpload() {
if (this.$refs.upload.uploadFiles.length == 0) {
this.$message({
message: '请选择Excel文件',
type: 'error',
duration: 1500,
onClose: () => this.getDataList()
})
return;
}
this.$refs.upload.submit();
this.loading = this.$loading({
lock: true,
text: '文件上传中请耐心等待。。。',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
},
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
console.log(file);
},
uploadSuccess() {
this.loading.close();
this.$refs.upload.clearFiles()
this.$message({
message: '上传成功',
type: 'success',
duration: 1500,
onClose: () => this.getDataList()
})
},
uploadError() {
this.$refs.upload.clearFiles()
this.$message({
message: '上传失败',
type: 'error',
duration: 1500,
onClose: () => this.getDataList()
})
},
beforeUpload(file) {
// console.log(file)
}
}
}
</script>
<style>
.custom-header span {
color: red;
}
</style>

View File

@ -11,6 +11,12 @@
<el-form-item label="身份证号">
<el-input v-model="dataForm.identityId" placeholder="身份证号码"></el-input>
</el-form-item>
<el-form-item label="年龄">
<el-input v-model="dataForm.age" placeholder="年龄"></el-input>
</el-form-item>
<el-form-item label="性别">
<el-input v-model="dataForm.sex" placeholder="性别"></el-input>
</el-form-item>
<el-form-item label="手机号">
<el-input v-model="dataForm.phone" placeholder="手机号"></el-input>
</el-form-item>
@ -40,16 +46,20 @@
<el-form-item label="车牌号">
<el-input v-model="dataForm.carNumber" placeholder="请输入车牌号"></el-input>
</el-form-item>
<el-form-item label="宿舍信息">
<el-input v-model="dataForm.dormitory" placeholder="请输入宿舍信息"></el-input>
<el-form-item label="饭卡号">
<el-input v-model="dataForm.mealCard" placeholder="饭卡号"></el-input>
</el-form-item>
<el-form-item label="所属组">
<!-- <el-form-item label="宿舍信息">-->
<!-- <el-input v-model="dataForm.dormitory" placeholder="请输入宿舍信息"></el-input>-->
<!-- </el-form-item>-->
<el-form-item label="所属组" v-model="dataForm.groupId" >
<el-select v-model="dataForm.groupId" placeholder="所属组">
<el-option v-for="item in groupIdes" :key="item.id" :value="item.id" :label="item.name">
{{ item.name }}
</el-option>
</el-select>
</el-form-item>
<el-form-item label-width="100" label="是否住宿" size="mini" prop="dormitoryStatus">
<el-radio-group v-model="dataForm.dormitoryStatus">
<el-radio :label="1"></el-radio>
@ -81,6 +91,8 @@ import {is8Number, isMobile} from '@/utils/validate'
import myRequest from "@/views/modules/h5/myRequest";
export default {
data() {
var validateuserId = (rule, value, callback) => {
if (!is8Number(value)) {
@ -97,7 +109,6 @@ export default {
}
}
return {
visible: false,
roleList: [],
@ -112,11 +123,14 @@ export default {
identityId: '',
jobTitle: '',
office: '',
age: '',
sex: '',
workName: '',
workPhone: '',
pyCard: '',
carNumber: '',
carStatus: 0,
mealCard: '',
dormitory: '',
dormitoryStatus: 0,
bankAddress: '',
@ -124,11 +138,10 @@ export default {
},
identityes: ['管理员', '研究生', '本校老师', '外校老师'],
columns: [
{text: '教师1', value: '教师1'},
{text: '教师2', value: '教师2'},
{text: '教师2', value: '教师2'},
{text: '教师3', value: '教师3'},
{text: '教师4', value: '教师4'},
{text: '正高级教师', value: '正高级教师'},
{text: '高级教师', value: '高级教师'},
{text: '一级教师', value: '一级教师'},
{text: '二级教师', value: '二级教师'},
],
groupIdes: [],
dataRule: {
@ -178,7 +191,7 @@ export default {
console.log(data)
if (data && data.code === 200) {
this.dataForm.userName = data.user.userName
this.dataForm.groupId = data.user.groupId
this.dataForm.groupId = data.user.groupId==0?'':data.user.groupId
this.dataForm.userId = data.user.userId
this.dataForm.phone = data.user.phone
this.dataForm.jobTitle = data.user.jobTitle
@ -194,6 +207,9 @@ export default {
this.dataForm.bankName = data.user.bankName
this.dataForm.identityId = data.user.identityId
this.dataForm.status = data.user.status
this.dataForm.age = data.user.age
this.dataForm.mealCard = data.user.mealCard
this.dataForm.sex = data.user.sex
}
})
}
@ -224,7 +240,10 @@ export default {
'bankAddress': this.dataForm.bankAddress,
'bankName': this.dataForm.bankName,
'identityId': this.dataForm.identityId,
'status': this.dataForm.status
'status': this.dataForm.status,
'mealCard': this.dataForm.mealCard,
'age': this.dataForm.age,
'sex': this.dataForm.sex
})
}).then(({data}) => {
console.log(data)

View File

@ -2,7 +2,7 @@
<div class="mod-user">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.userName" placeholder="用户身份码" clearable></el-input>
<el-input v-model="dataForm.userName" placeholder="姓名" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
@ -12,14 +12,17 @@
</el-button>
<el-button type="success" v-if="isAuth('wai:user:start')" plain @click="randomAssigned()">随机分配宿舍</el-button>
</el-form-item>
<download-excel :stringifyLongNum="true" style=" display: inline-block;" :fetch="getExportExcel" :fields="json_fields" :name='`外校老师信息.xls`'>
<el-button type='primary'>导出</el-button>
</download-excel>
</el-form>
<el-table :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
<el-table @sort-change="sortChange" :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50">
</el-table-column>
<!--下来展开-->
<el-table-column type="expand" label="详细">
<el-table-column type="expand" label="详细信息" width="50px">
<template slot-scope="props">
<el-form label-position="left" inline class="demo-table-expand">
<el-form-item label="身份证号">
@ -41,12 +44,15 @@
<el-form-item label="开户行">
<span>{{ props.row.bankName }}</span>
</el-form-item>
<el-form-item label="宿舍信息">
<span>{{ props.row.dormitory }}</span>
</el-form-item>
<!-- <el-form-item label="宿舍信息">-->
<!-- <span>{{ props.row.dormitory }}</span>-->
<!-- </el-form-item>-->
<el-form-item label="车牌号">
<span>{{ props.row.carNumber }}</span>
</el-form-item>
<el-form-item label="饭卡号">
<span>{{ props.row.mealCard }}</span>
</el-form-item>
<!-- <el-form-item label="是否第一次阅卷">-->
<!-- <span>{{ props.row.carNumber }}</span>-->
<!-- </el-form-item>-->
@ -55,23 +61,24 @@
</el-table-column>
<el-table-column type="selection" header-align="center" align="center" width="50">
</el-table-column>
<el-table-column header-align="center" align="center" width="80" label="ID">
<el-table-column header-align="center" align="center" width="80" label="序号">
<template slot-scope="scope">
{{ (pageIndex - 1) * pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">
<!-- <el-table-column prop="userId" header-align="center" align="center" width="100" label="用户身份码">-->
<!-- </el-table-column>-->
<el-table-column sortable="custom" prop="userName" header-align="center" align="center" label="姓名">
</el-table-column>
<el-table-column prop="userName" header-align="center" align="center" label="姓名">
<el-table-column sortable="custom" prop="age" header-align="center" align="center" label="年龄">
</el-table-column>
<el-table-column prop="phone" header-align="center" align="center" label="手机号">
<el-table-column sortable="custom" prop="sex" header-align="center" align="center" label="性别">
</el-table-column>
<el-table-column prop="jobTitle" header-align="center" align="center" label="职称">
<el-table-column sortable="custom" prop="phone" header-align="center" align="center" label="手机号">
</el-table-column>
<el-table-column prop="office" header-align="center" align="center" label="职务">
<el-table-column sortable="custom" prop="jobTitle" header-align="center" align="center" label="职称">
</el-table-column>
<el-table-column sortable="custom" prop="office" header-align="center" align="center" label="职务">
</el-table-column>
<!-- <el-table-column prop="mobile" header-align="center" align="center" label="手机号">-->
<!-- </el-table-column>-->
@ -82,6 +89,7 @@
<!-- </el-table-column>-->
<el-table-column
header-align="center"
align="center"
width="89"
@ -94,19 +102,35 @@
{{ getgroups(scope.row.groupId) }}
</template>
</el-table-column>
<el-table-column prop="DormitoryStatus" header-align="center" align="center" label="住宿">
<el-table-column prop="dormitory" header-align="center" width="150" align="center" label="住宿信息">
<template slot-scope="scope">
<el-tag v-if="scope.row.dormitoryStatus === 1" size="small" ></el-tag>
<el-tag v-else size="small" type="danger"></el-tag>
<!-- 领导说没有宿舍信息就不能选择先让它写死后续有信息再说-->
<!-- <el-select :disabled="scope.row.dormitory!==''" @focus="getDorList(scope.row.sex)" @change="changeDor(scope.row.dormitory, scope.row.id)" v-model="scope.row.dormitory" filterable placeholder="请选择">-->
<el-select :disabled="true" @focus="getDorList(scope.row.sex)" @change="changeDor(scope.row.dormitory, scope.row.id)" v-model="scope.row.dormitory" filterable placeholder="请选择">
<el-option
v-for="item in options"
:key="item.id"
:label="item.dormitory"
:value="item.dormitory">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="carStatus" header-align="center" align="center" label="车入校">
<template slot-scope="scope">
<el-tag v-if="scope.row.carStatus === 1" size="small" ></el-tag>
<el-tag v-else size="small" type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
<!-- <el-table-column prop="DormitoryStatus" header-align="center" align="center" label="住宿">-->
<!-- <template slot-scope="scope">-->
<!-- <el-tag v-if="scope.row.dormitoryStatus === 1" size="small" ></el-tag>-->
<!-- <el-tag v-else size="small" type="danger"></el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="carStatus" header-align="center" align="center" label="车入校">-->
<!-- <template slot-scope="scope">-->
<!-- <el-tag v-if="scope.row.carStatus === 1" size="small" ></el-tag>-->
<!-- <el-tag v-else size="small" type="danger"></el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column v-if="isAuth('wai:user:update')" fixed="right" header-align="center" align="center" width="150" label="操作">
<template slot-scope="scope">
<el-button v-if="isAuth('wai:user:update')" type="text" size="small"
@click="addOrUpdateHandle(scope.row.id)">修改
@ -116,11 +140,6 @@
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" :current-page="pageIndex"
:page-sizes="[5,10, 20, 50, 100]" :page-size="pageSize" :total="totalCount"
@ -133,12 +152,13 @@
<script>
import AddOrUpdate from './wai-add-or-update'
import {isAuth} from "@/utils";
import myRequest from "@/views/modules/h5/myRequest";
export default {
data() {
return {
options: [],
value: null,
dataForm: {
userName: ''
},
@ -151,6 +171,61 @@ export default {
dataListSelections: [],
addOrUpdateVisible: false,
groupIdes: [],
json_fields: {
"序号": "index",
"姓名": "userName",
"身份码": "userId",
"用户专业码": "userMajorId",
"手机号": "phone",
"分组": {
field: "groupId",
callback: (value) => {
if (value=='0'){
return ""
}
return this.groupIdMap[value] || value; //
}
},
"学科": {
field: "majorId",
callback: (value) => {
// major_id
const majorMap = {
1: "语文",
4: "地理",
7: "历史",
8: "政治",
};
return majorMap[value] || value; //
}
},
"职称": "jobTitle",
"职务": "office",
"年龄": "age",
"性别": "sex",
"单位": "workName",
"单位电话": "workPhone",
"身份证号": "identityId",
"银行卡号": "pyCard",
"开户所在地": "bankAddress",
"开户行": "bankName",
"车牌号": "carNumber",
"饭卡号": "mealCard",
"是否住宿": {
field: "dormitoryStatus",
callback: (value) => {
// dormitoryStatus
const majorMap = {
1: "是",
0: "否",
};
return majorMap[value] || value; //
}
},
"宿舍号": "dormitory",
},
groupIdMap:{},
groupIdesShow: [],
}
},
components: {
@ -160,27 +235,95 @@ export default {
this.getDataList()
this.groupIdes=[]
//
myRequest.getGroupList(this)
//
let groupList = myRequest.getGroupList(this);
setTimeout(() => {
groupList.forEach(item => {
this.groupIdMap[item.id] = item.text;
})
},500)
},
computed: {},
methods: {
/**
* 自定义排序
*/
sortChange(colum){
if (colum.order === 'ascending'){
this.getDataList(colum.prop,colum.order)
}else {
this.getDataList(colum.prop,colum.order)
}
},
changeDor(val,dor){
this.value=val
console.log(this.value)
console.log(dor)
this.$http({
url: this.$http.adornUrl('/wai/saved'),
method: 'get',
params: {
dorName:val,
userId:dor
}
}).then(({data}) => {
this.getDataList()
})
},
// 宿
async getDorList(sex){
await this.$http({
url: this.$http.adornUrl('/dor/listm?sex='+sex),
method: 'get',
}).then(({data}) => {
console.log(this.options)
this.options=data.dorinfo
console.log(this.options)
})
},
// Excel
async getExportExcel(){
let excelData=[]
await this.$http({
url: this.$http.adornUrl('/wai/export'),
method: 'get',
}).then(({data}) => {
excelData = data.map((item, index) => {
return { ...item, index: index + 1 }; //
});
// if (data && data.code === 200) {
// console.log(data.list)
// }
})
return excelData
},
// isAuth,
//
filterTag(value, row) {
return row.groupId === value;
},
getgroups(id) {
try {
let groupIdes = this.groupIdes
return groupIdes[id - 1].text
} catch (e) {
// console.log(e)
return "未分组"
let groupName=''
// console.log(this.groupIdesShow[id])
this.groupIdesShow.forEach(item => {
if (item.id === id){
groupName= item.name
}
})
return groupName
// try {
//
// } catch (e) {
// console.log(e)
// return ""
// }
},
//
getDataList() {
getDataList(prop='',sort='') {
this.dataListLoading = true
this.$http({
url: this.$http.adornUrl('/wai/list'),
@ -188,7 +331,9 @@ export default {
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
'userId': this.dataForm.userName
'userName': this.dataForm.userName,
'prop': prop,
'sort': sort
})
}).then(({data}) => {
if (data && data.code === 200) {

View File

@ -1,7 +1,7 @@
<template>
<el-dialog :title="!dataForm.id ? '新增' : '修改'" :close-on-click-modal="false" :visible.sync="visible">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
<el-form-item label="用户名" prop="userName">
<el-form-item label="帐号" prop="userName">
<el-input v-model="dataForm.userName" placeholder="登录帐号"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password" :class="{ 'is-required': !dataForm.id }">
@ -10,8 +10,8 @@
<el-form-item label="确认密码" prop="comfirmPassword" :class="{ 'is-required': !dataForm.id }">
<el-input v-model="dataForm.comfirmPassword" type="password" placeholder="确认密码"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="dataForm.email" placeholder="邮箱"></el-input>
<el-form-item label="用户名" prop="email">
<el-input v-model="dataForm.email" placeholder="用户名"></el-input>
</el-form-item>
<el-form-item label="手机号" prop="mobile">
<el-input v-model="dataForm.mobile" placeholder="手机号"></el-input>
@ -55,13 +55,13 @@ export default {
callback()
}
}
var validateEmail = (rule, value, callback) => {
if (!isEmail(value)) {
callback(new Error('邮箱格式错误'))
} else {
callback()
}
}
// var validateEmail = (rule, value, callback) => {
// if (!isEmail(value)) {
// callback(new Error(''))
// } else {
// callback()
// }
// }
var validateMobile = (rule, value, callback) => {
if (!isMobile(value)) {
callback(new Error('手机号格式错误'))
@ -93,10 +93,10 @@ export default {
comfirmPassword: [
{ validator: validateComfirmPassword, trigger: 'blur' }
],
email: [
{ required: true, message: '邮箱不能为空', trigger: 'blur' },
{ validator: validateEmail, trigger: 'blur' }
],
// email: [
// { required: true, message: '', trigger: 'blur' },
// { validator: validateEmail, trigger: 'blur' }
// ],
mobile: [
{ required: true, message: '手机号不能为空', trigger: 'blur' },
{ validator: validateMobile, trigger: 'blur' }

View File

@ -15,9 +15,9 @@
</el-table-column>
<el-table-column prop="userId" header-align="center" align="center" width="80" label="ID">
</el-table-column>
<el-table-column prop="username" header-align="center" align="center" label="用户名">
<el-table-column prop="username" header-align="center" align="center" label="账号">
</el-table-column>
<el-table-column prop="email" header-align="center" align="center" label="邮箱">
<el-table-column prop="email" header-align="center" align="center" label="用户名">
</el-table-column>
<el-table-column prop="mobile" header-align="center" align="center" label="手机号">
</el-table-column>

View File

@ -3,8 +3,10 @@ module.exports = {
devServer: {
// 后端请求转发此配置仅开发环境有效生产环境请参考生产环境部署文档配置nginx转发
proxy: {
'/wx': {
target: 'http://localhost:8080/'
// '/wx': {
'/': {
target: 'http://localhost:80/'
// target: 'http://localhost:8080/'
// target: 'http://154.8.196.128:8080/'
}
},