|
Before Width: | Height: | Size: 80 KiB |
@ -1,62 +0,0 @@
|
|||||||
import request from '@/utils/request'
|
|
||||||
|
|
||||||
// 查询列表
|
|
||||||
export function listSchool(query) {
|
|
||||||
return request({
|
|
||||||
url: '/api/sc/school/list/searchList',
|
|
||||||
method: 'get',
|
|
||||||
params: query
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// select
|
|
||||||
export function listSelect(query) {
|
|
||||||
return request({
|
|
||||||
url: '/api/sc/school/list/select',
|
|
||||||
method: 'get',
|
|
||||||
params: query
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询详细
|
|
||||||
export function getSchool(schoolId) {
|
|
||||||
return request({
|
|
||||||
url: '/api/sc/school/info/detailById/' + schoolId,
|
|
||||||
method: 'get'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 新增
|
|
||||||
export function addSchool(data) {
|
|
||||||
return request({
|
|
||||||
url: '/api/sc/school/add/addScSchool',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 修改
|
|
||||||
export function updateSchool(data) {
|
|
||||||
return request({
|
|
||||||
url: '/api/sc/school/update/updateScSchool',
|
|
||||||
method: 'put',
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除
|
|
||||||
export function delSchool(schoolId) {
|
|
||||||
return request({
|
|
||||||
url: '/api/sc/school/delete/deleteById/' + schoolId,
|
|
||||||
method: 'delete'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 导出
|
|
||||||
export function exportSchool(query) {
|
|
||||||
return request({
|
|
||||||
url: '/api/sc/school/export',
|
|
||||||
method: 'get',
|
|
||||||
params: query
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
After Width: | Height: | Size: 729 B |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 858 B |
|
After Width: | Height: | Size: 883 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
@ -1,113 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-select
|
|
||||||
v-model="staffId"
|
|
||||||
v-select-load-more="loadStaff"
|
|
||||||
filterable
|
|
||||||
:clearable="clearable"
|
|
||||||
:placeholder="placeholder"
|
|
||||||
default-first-option
|
|
||||||
size="small"
|
|
||||||
@change="handleSelect"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in staffList"
|
|
||||||
:key="item.staffId"
|
|
||||||
:label="item.staffName"
|
|
||||||
:value="item.staffId"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<div class="inline-block item">
|
|
||||||
<span class="title">姓名:</span>
|
|
||||||
<span class="option">{{ item.staffName }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="inline-block item">
|
|
||||||
<span class="title">联系电话:</span>
|
|
||||||
<span class="option">{{ item.phone }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
import { listSchool } from '@/api/school/sc/school'
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
clearable: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
teacher: {
|
|
||||||
type: String,
|
|
||||||
default: undefined
|
|
||||||
},
|
|
||||||
placeholder: {
|
|
||||||
type: String,
|
|
||||||
default: '选择员工'
|
|
||||||
},
|
|
||||||
value: {
|
|
||||||
type: String,
|
|
||||||
default: undefined
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
staffId: this.value,
|
|
||||||
staffList: [],
|
|
||||||
pageNum: 1,
|
|
||||||
hasMoreData: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
value: {
|
|
||||||
handler(newValue, oldValue) {
|
|
||||||
this.staffId = newValue
|
|
||||||
},
|
|
||||||
immediate: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.loadStaff()
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
loadStaff: function() {
|
|
||||||
if (this.pageNum === 1) {
|
|
||||||
listSchool({
|
|
||||||
pageNum: this.pageNum,
|
|
||||||
teacher: this.teacher
|
|
||||||
}).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.staffList = response.data.rows
|
|
||||||
this.hasMoreData = response.data.rows.length > 0
|
|
||||||
this.pageNum = this.pageNum + 1
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else if (this.hasMoreData) {
|
|
||||||
listSchool({
|
|
||||||
pageNum: this.pageNum
|
|
||||||
}).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.staffList = this.staffList.concat(response.data.rows)
|
|
||||||
this.hasMoreData = response.data.rows.length > 0
|
|
||||||
this.pageNum = this.pageNum + 1
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleSelect: function(val) {
|
|
||||||
this.$emit('input', val)
|
|
||||||
this.$emit('change', val)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style ref="stylesheet/scss" lang="scss" scoped>
|
|
||||||
.option{
|
|
||||||
padding-right: 15px;
|
|
||||||
color: #333;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,334 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
|
|
||||||
<el-form-item label="省份编码" prop="provinceCode">
|
|
||||||
<el-select v-model="queryParams.provinceCode" placeholder="请选择省份编码" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="item in provinceCodeOptions"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.code"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="区号" prop="cityCode">
|
|
||||||
<el-select v-model="queryParams.cityCode" placeholder="请选择区号" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in cityCodeOptions"
|
|
||||||
:key="dict.id"
|
|
||||||
:label="dict.name"
|
|
||||||
:value="dict.code"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="学校名称" prop="schoolName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.schoolName"
|
|
||||||
placeholder="请输入"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sc:school:add']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sc:school:update']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
size="mini"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sc:school:delete']"
|
|
||||||
type="danger"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
size="mini"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column align="center" prop="provinceCode" label="省份编码" :formatter="provinceCodeFormat" />
|
|
||||||
<el-table-column align="center" prop="cityCode" label="区号" :formatter="cityCodeFormat" />
|
|
||||||
<el-table-column prop="schoolName" label="学校名称" />
|
|
||||||
<el-table-column width="150" label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sc:school:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>修改</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sc:school:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total>0"
|
|
||||||
:total="total"
|
|
||||||
:page.sync="queryParams.pageNum"
|
|
||||||
:limit.sync="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="600px">
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="省分">
|
|
||||||
<el-select
|
|
||||||
v-model="form.provinceCode"
|
|
||||||
clearable
|
|
||||||
filterable
|
|
||||||
default-first-option
|
|
||||||
placeholder="请选择省份"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in provinceCodeOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="地市">
|
|
||||||
<el-select
|
|
||||||
v-model="form.cityCode"
|
|
||||||
clearable
|
|
||||||
filterable
|
|
||||||
default-first-option
|
|
||||||
placeholder="请选择地市"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in cityCodeOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="学校名称" prop="schoolName">
|
|
||||||
<el-input v-model="form.schoolName" placeholder="请输入" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listSchool, getSchool, delSchool, addSchool, updateSchool } from '@/api/school/sc/school'
|
|
||||||
import {listAddress} from "@/api/school/sc/address";
|
|
||||||
export default {
|
|
||||||
name: 'School',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 选中数组
|
|
||||||
ids: [],
|
|
||||||
// 非单个禁用
|
|
||||||
single: true,
|
|
||||||
// 非多个禁用
|
|
||||||
multiple: true,
|
|
||||||
// 总条数
|
|
||||||
total: 0,
|
|
||||||
// 表格树数据
|
|
||||||
dataList: [],
|
|
||||||
// 弹出层标题
|
|
||||||
title: '',
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
// 省份编码数据字典
|
|
||||||
provinceCodeOptions: [],
|
|
||||||
// 区号数据字典
|
|
||||||
cityCodeOptions: [],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
pageNum: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
level:0,
|
|
||||||
provinceCode: undefined,
|
|
||||||
cityCode: undefined,
|
|
||||||
schoolName: undefined
|
|
||||||
},
|
|
||||||
// 表单参数
|
|
||||||
form: {},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
schoolName: [
|
|
||||||
{ required: true, message: '不能为空', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
'form.provinceCode': {
|
|
||||||
handler(newValue, oldValue) {
|
|
||||||
if (newValue) {
|
|
||||||
this.form.cityCode = undefined
|
|
||||||
this.listAddress({parentCode:newValue}).then(response => {
|
|
||||||
this.cityCodeOptions = response.data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
listAddress({level:this.queryParams.level}).then(response => {
|
|
||||||
this.provinceCodeOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/** 查询部门列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listSchool(this.queryParams).then(response => {
|
|
||||||
this.dataList = response.data.rows
|
|
||||||
this.total = response.data.total
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 省份编码字典翻译
|
|
||||||
provinceCodeFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.provinceCodeOptions, row.provinceCode)
|
|
||||||
},
|
|
||||||
// 区号字典翻译
|
|
||||||
cityCodeFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.cityCodeOptions, row.cityCode)
|
|
||||||
},
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
this.open = false
|
|
||||||
this.reset()
|
|
||||||
},
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
provinceCode: undefined,
|
|
||||||
cityCode: undefined,
|
|
||||||
schoolName: undefined
|
|
||||||
}
|
|
||||||
this.resetForm('form')
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.queryParams.pageNum = 1
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
resetQuery() {
|
|
||||||
this.resetForm('queryForm')
|
|
||||||
this.handleQuery()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd(row) {
|
|
||||||
this.reset()
|
|
||||||
this.open = true
|
|
||||||
this.title = '添加学校信息'
|
|
||||||
},
|
|
||||||
// 多选框选中数据
|
|
||||||
handleSelectionChange(selection) {
|
|
||||||
this.ids = selection.map(item => item.schoolId)
|
|
||||||
this.single = selection.length !== 1
|
|
||||||
this.multiple = !selection.length
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
this.reset()
|
|
||||||
getSchool(row.schoolId || this.ids).then(response => {
|
|
||||||
this.form = response.data
|
|
||||||
this.open = true
|
|
||||||
this.title = '修改学校信息'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm: function() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
if (this.form.schoolId !== undefined) {
|
|
||||||
updateSchool(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
addSchool(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('新增成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
const id = row.schoolId || this.ids
|
|
||||||
this.$confirm('是否确认删除?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delSchool(id)
|
|
||||||
}).then((response) => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(function() {})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,347 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
|
|
||||||
<el-form-item label="所属租户" prop="tenantId">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.tenantId"
|
|
||||||
placeholder="请输入所属租户"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="标签名称" prop="tagName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.tagName"
|
|
||||||
placeholder="请输入标签名称"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="标签类型" prop="tagType">
|
|
||||||
<el-select v-model="queryParams.tagType" placeholder="请选择标签类型" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in tagTypeOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sys:tag:add']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sys:tag:update']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
size="mini"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sys:tag:delete']"
|
|
||||||
type="danger"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
size="mini"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['::export']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-download"
|
|
||||||
size="mini"
|
|
||||||
@click="handleExport"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column prop="tagName" label="标签名称" />
|
|
||||||
<el-table-column align="center" prop="tagType" label="标签类型" :formatter="tagTypeFormat" />
|
|
||||||
<el-table-column width="150" label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sys:tag:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>修改</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['sys:tag:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total>0"
|
|
||||||
:total="total"
|
|
||||||
:page.sync="queryParams.pageNum"
|
|
||||||
:limit.sync="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="600px">
|
|
||||||
<el-form ref="form" v-loading="loadingChange" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="标签名称" prop="tagName">
|
|
||||||
<el-input v-model="form.tagName" placeholder="请输入标签名称" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="标签类型">
|
|
||||||
<el-select v-model="form.tagType" placeholder="请选择标签类型">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in tagTypeOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="创建者" prop="createUser">
|
|
||||||
<el-input v-model="form.createUser" placeholder="请输入创建者" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="创建时间" prop="createTime">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="form.createTime"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
style="width: 200px"
|
|
||||||
type="date"
|
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
placeholder="选择创建时间"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="更新者" prop="lastUpdateUser">
|
|
||||||
<el-input v-model="form.lastUpdateUser" placeholder="请输入更新者" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="更新时间" prop="lastUpdateTime">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="form.lastUpdateTime"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
style="width: 200px"
|
|
||||||
type="date"
|
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
placeholder="选择更新时间"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button :loading="loadingChange" type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listTag, getTag, delTag, addTag, updateTag } from '@/api/school/system/tag'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'Tag',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
loadingChange: false,
|
|
||||||
// 选中数组
|
|
||||||
ids: [],
|
|
||||||
// 非单个禁用
|
|
||||||
single: true,
|
|
||||||
// 非多个禁用
|
|
||||||
multiple: true,
|
|
||||||
// 总条数
|
|
||||||
total: 0,
|
|
||||||
// 表格树数据
|
|
||||||
dataList: [],
|
|
||||||
// 弹出层标题
|
|
||||||
title: '',
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
// 标签类型数据字典
|
|
||||||
tagTypeOptions: [],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
pageNum: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
tenantId: undefined,
|
|
||||||
tagName: undefined,
|
|
||||||
tagType: undefined
|
|
||||||
},
|
|
||||||
// 表单参数
|
|
||||||
form: {},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
tagName: [
|
|
||||||
{ required: true, message: '标签名称不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
tagType: [
|
|
||||||
{ required: true, message: '标签类型不能为空', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
this.getDictListByDictType('tag_type').then(response => {
|
|
||||||
this.tagTypeOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listTag(this.queryParams).then(response => {
|
|
||||||
this.dataList = response.data.rows
|
|
||||||
this.total = response.data.total
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 标签类型字典翻译
|
|
||||||
tagTypeFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.tagTypeOptions, row.tagType)
|
|
||||||
},
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
this.open = false
|
|
||||||
this.reset()
|
|
||||||
},
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
tagName: undefined,
|
|
||||||
tagType: undefined,
|
|
||||||
createUser: undefined,
|
|
||||||
createTime: undefined,
|
|
||||||
lastUpdateUser: undefined,
|
|
||||||
lastUpdateTime: undefined
|
|
||||||
}
|
|
||||||
this.resetForm('form')
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.queryParams.pageNum = 1
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
resetQuery() {
|
|
||||||
this.resetForm('queryForm')
|
|
||||||
this.handleQuery()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd(row) {
|
|
||||||
this.reset()
|
|
||||||
this.open = true
|
|
||||||
this.title = '添加标签'
|
|
||||||
},
|
|
||||||
// 多选框选中数据
|
|
||||||
handleSelectionChange(selection) {
|
|
||||||
this.ids = selection.map(item => item.tagId)
|
|
||||||
this.single = selection.length !== 1
|
|
||||||
this.multiple = !selection.length
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
this.reset()
|
|
||||||
getTag(row.tagId || this.ids).then(response => {
|
|
||||||
this.form = response.data
|
|
||||||
this.open = true
|
|
||||||
this.title = '修改标签'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm: function() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
this.loadingChange = true
|
|
||||||
if (this.form.tagId !== undefined) {
|
|
||||||
updateTag(this.form).then(response => {
|
|
||||||
this.loadingChange = false
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(() => {
|
|
||||||
this.loadingChange = false
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
addTag(this.form).then(response => {
|
|
||||||
this.loadingChange = false
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('新增成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(() => {
|
|
||||||
this.loadingChange = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
const id = row.tagId || this.ids
|
|
||||||
this.$confirm('是否确认删除?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delTag(id)
|
|
||||||
}).then((response) => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(function() {})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,347 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-form :inline="true">
|
|
||||||
<el-form-item label="部门名称:">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.deptName"
|
|
||||||
placeholder="请输入部门名称"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态:">
|
|
||||||
<el-select v-model="queryParams.inUse" placeholder="部门状态" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button
|
|
||||||
class="filter-item"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-search"
|
|
||||||
size="mini"
|
|
||||||
@click="handleQuery"
|
|
||||||
>搜索</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dept:add']"
|
|
||||||
class="filter-item"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table
|
|
||||||
v-loading="loading"
|
|
||||||
:data="deptList"
|
|
||||||
row-key="deptId"
|
|
||||||
default-expand-all
|
|
||||||
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
|
||||||
>
|
|
||||||
<el-table-column prop="deptName" label="部门/校区名称" width="200">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-tag :type="scope.row.deptType === '1'?'info':'' ">{{ scope.row.deptType === '1'?'部门':'校区' }}</el-tag>
|
|
||||||
<span>{{ scope.row.deptName }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sort" label="排序" width="200" />
|
|
||||||
<el-table-column prop="inUse" label="状态" :formatter="inUseFormat" width="100" />
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dept:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>修改</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dept:add']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
@click="handleAdd(scope.row)"
|
|
||||||
>新增</el-button>
|
|
||||||
<el-button
|
|
||||||
v-if="scope.row.parentId !== -1"
|
|
||||||
v-hasPermi="['system:dept:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<!-- 添加或修改部门对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="600px">
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
|
||||||
<el-row>
|
|
||||||
<el-col v-if="form.parentId !== 0" :span="24">
|
|
||||||
<el-form-item label="上级部门:" prop="parentId">
|
|
||||||
<treeselect v-model="form.parentId" :options="deptOptions" placeholder="选择上级部门" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="部门名称:" prop="deptName">
|
|
||||||
<el-input v-model="form.deptName" placeholder="请输入部门名称" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="部门类型:">
|
|
||||||
<el-radio-group v-model="form.deptType">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in deptTypeOptions"
|
|
||||||
:key="dict.deptType"
|
|
||||||
:label="dict.deptType"
|
|
||||||
>{{ dict.deptTypeName }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<!--<el-col :span="12">
|
|
||||||
<el-form-item label="显示排序" prop="sort">
|
|
||||||
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>-->
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="负责人:" prop="leader">
|
|
||||||
<el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="联系电话:" prop="phone">
|
|
||||||
<el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="邮箱:" prop="email">
|
|
||||||
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="部门状态:">
|
|
||||||
<el-radio-group v-model="form.inUse">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictValue"
|
|
||||||
>{{ dict.dictLabel }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listDept, getDept, treeSelect, delDept, addDept, updateDept } from '@/api/school/system/dept'
|
|
||||||
import Treeselect from '@riophae/vue-treeselect'
|
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'Dept',
|
|
||||||
components: { Treeselect },
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 表格树数据
|
|
||||||
deptList: [],
|
|
||||||
// 部门部门树选项
|
|
||||||
deptOptions: undefined,
|
|
||||||
// 弹出层标题
|
|
||||||
title: '',
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
// 状态数据字典
|
|
||||||
inUseOptions: [],
|
|
||||||
// 类型
|
|
||||||
deptTypeOptions: [{
|
|
||||||
deptType: '1',
|
|
||||||
deptTypeName: '部门'
|
|
||||||
}, {
|
|
||||||
deptType: '2',
|
|
||||||
deptTypeName: '校区'
|
|
||||||
}],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
deptName: undefined,
|
|
||||||
inUse: undefined
|
|
||||||
},
|
|
||||||
// 表单参数
|
|
||||||
form: {
|
|
||||||
deptType: '1'
|
|
||||||
},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
parentId: [
|
|
||||||
{ required: true, message: '上级部门不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
deptName: [
|
|
||||||
{ required: true, message: '部门名称不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
deptType: [
|
|
||||||
{ required: true, message: '请选择部门类型', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
email: [
|
|
||||||
{
|
|
||||||
type: 'email',
|
|
||||||
message: "'请输入正确的邮箱地址",
|
|
||||||
trigger: ['blur', 'change']
|
|
||||||
}
|
|
||||||
],
|
|
||||||
phone: [
|
|
||||||
{
|
|
||||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
|
||||||
message: '请输入正确的手机号码',
|
|
||||||
trigger: 'blur'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
this.getDictListByDictType('in_use').then(response => {
|
|
||||||
this.inUseOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/** 查询部门列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listDept(this.queryParams).then(response => {
|
|
||||||
this.deptList = response.data
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 查询部门下拉树结构 */
|
|
||||||
getTreeSelect() {
|
|
||||||
treeSelect().then(response => {
|
|
||||||
this.deptOptions = []
|
|
||||||
const dept = { id: -1, label: '根目录', children: [] }
|
|
||||||
dept.children = response.data
|
|
||||||
this.deptOptions.push(dept)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 字典状态字典翻译
|
|
||||||
inUseFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.inUseOptions, row.inUse)
|
|
||||||
},
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
this.open = false
|
|
||||||
this.reset()
|
|
||||||
},
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
deptId: undefined,
|
|
||||||
parentId: undefined,
|
|
||||||
deptName: undefined,
|
|
||||||
sort: undefined,
|
|
||||||
leader: undefined,
|
|
||||||
phone: undefined,
|
|
||||||
email: undefined,
|
|
||||||
deptType: '1',
|
|
||||||
inUse: '1'
|
|
||||||
}
|
|
||||||
this.resetForm('form')
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd(row) {
|
|
||||||
this.reset()
|
|
||||||
this.getTreeSelect()
|
|
||||||
if (row !== undefined) {
|
|
||||||
this.form.parentId = row.deptId
|
|
||||||
}
|
|
||||||
this.open = true
|
|
||||||
this.title = '添加部门'
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
this.reset()
|
|
||||||
this.getTreeSelect()
|
|
||||||
getDept(row.deptId).then(response => {
|
|
||||||
this.form = response.data
|
|
||||||
this.open = true
|
|
||||||
this.title = '修改部门'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm: function() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
if (this.form.deptId !== undefined) {
|
|
||||||
updateDept(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
addDept(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('新增成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
this.$confirm('是否确认删除名称为"' + row.deptName + '"的数据项?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delDept(row.deptId)
|
|
||||||
}).then((response) => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(function() {})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,358 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true">
|
|
||||||
<el-form-item label="字典名称" prop="dictType">
|
|
||||||
<el-select v-model="queryParams.dictType" size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="item in typeOptions"
|
|
||||||
:key="item.dictTypeId"
|
|
||||||
:label="item.dictName"
|
|
||||||
:value="item.dictType"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="字典标签" prop="dictLabel">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.dictLabel"
|
|
||||||
placeholder="请输入字典标签"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态" prop="inUse">
|
|
||||||
<el-select v-model="queryParams.inUse" placeholder="数据状态" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:add']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:edit']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
size="mini"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:remove']"
|
|
||||||
type="danger"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
size="mini"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column label="字典标签" align="center" prop="dictLabel" />
|
|
||||||
<el-table-column label="字典键值" align="center" prop="dictValue" />
|
|
||||||
<el-table-column label="字典排序" align="center" prop="dictSort" />
|
|
||||||
<el-table-column label="状态" align="center" prop="inUse" :formatter="inUseFormat" />
|
|
||||||
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>修改</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total>0"
|
|
||||||
:total="total"
|
|
||||||
:page.sync="queryParams.pageNum"
|
|
||||||
:limit.sync="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改参数配置对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="500px">
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-form-item label="字典类型">
|
|
||||||
<el-input v-model="form.dictType" :disabled="true" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="数据标签" prop="dictLabel">
|
|
||||||
<el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="数据键值" prop="dictValue">
|
|
||||||
<el-input v-model="form.dictValue" placeholder="请输入数据键值" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="显示排序" prop="dictSort">
|
|
||||||
<el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态" prop="inUse">
|
|
||||||
<el-radio-group v-model="form.inUse">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictValue"
|
|
||||||
>{{ dict.dictLabel }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listData, getData, delData, addData, updateData, exportData } from '@/api/school/system/dict/data'
|
|
||||||
import { listType, getType } from '@/api/school/system/dict/type'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'Data',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 选中数组
|
|
||||||
ids: [],
|
|
||||||
// 非单个禁用
|
|
||||||
single: true,
|
|
||||||
// 非多个禁用
|
|
||||||
multiple: true,
|
|
||||||
// 总条数
|
|
||||||
total: 0,
|
|
||||||
// 字典表格数据
|
|
||||||
dataList: [],
|
|
||||||
// 默认字典类型
|
|
||||||
defaultDictType: '',
|
|
||||||
// 弹出层标题
|
|
||||||
title: '',
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
// 状态数据字典
|
|
||||||
inUseOptions: [],
|
|
||||||
// 类型数据字典
|
|
||||||
typeOptions: [],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
pageNum: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
dictName: undefined,
|
|
||||||
dictType: undefined,
|
|
||||||
inUse: undefined
|
|
||||||
},
|
|
||||||
// 表单参数
|
|
||||||
form: {},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
dictLabel: [
|
|
||||||
{ required: true, message: '数据标签不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
dictValue: [
|
|
||||||
{ required: true, message: '数据键值不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
dictSort: [
|
|
||||||
{ required: true, message: '数据顺序不能为空', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
const dictTypeId = this.$route.params && this.$route.params.dictTypeId
|
|
||||||
if (dictTypeId !== undefined) {
|
|
||||||
this.getType(dictTypeId)
|
|
||||||
} else {
|
|
||||||
this.getList()
|
|
||||||
}
|
|
||||||
this.getTypeList()
|
|
||||||
this.getDictListByDictType('in_use').then(response => {
|
|
||||||
this.inUseOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/** 查询字典类型详细 */
|
|
||||||
getType(dictTypeId) {
|
|
||||||
getType(dictTypeId).then(response => {
|
|
||||||
this.queryParams.dictType = response.data.dictType
|
|
||||||
this.defaultDictType = response.data.dictType
|
|
||||||
this.getList()
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 查询字典类型列表 */
|
|
||||||
getTypeList() {
|
|
||||||
const dictTypeId = this.$route.params && this.$route.params.dictTypeId
|
|
||||||
listType().then(response => {
|
|
||||||
this.typeOptions = response.data.rows
|
|
||||||
if (dictTypeId === undefined) {
|
|
||||||
if (this.typeOptions.length > 0) {
|
|
||||||
this.queryParams.dictType = this.typeOptions[0].dictType
|
|
||||||
this.defaultDictType = this.typeOptions[0].dictType
|
|
||||||
} else {
|
|
||||||
this.msgInfo('请先设置字典类型,再设置字典数据')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 查询字典数据列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listData(this.queryParams).then(response => {
|
|
||||||
this.dataList = response.data.rows
|
|
||||||
this.total = response.data.total
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 数据状态字典翻译
|
|
||||||
inUseFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.inUseOptions, row.inUse)
|
|
||||||
},
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
this.open = false
|
|
||||||
this.reset()
|
|
||||||
},
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
dictDataId: undefined,
|
|
||||||
dictLabel: undefined,
|
|
||||||
dictValue: undefined,
|
|
||||||
dictSort: 0,
|
|
||||||
inUse: '1',
|
|
||||||
remark: undefined
|
|
||||||
}
|
|
||||||
this.resetForm('form')
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.queryParams.pageNum = 1
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
resetQuery() {
|
|
||||||
this.resetForm('queryForm')
|
|
||||||
this.queryParams.dictType = this.defaultDictType
|
|
||||||
this.handleQuery()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd() {
|
|
||||||
this.reset()
|
|
||||||
this.open = true
|
|
||||||
this.title = '添加字典数据'
|
|
||||||
this.form.dictType = this.queryParams.dictType
|
|
||||||
},
|
|
||||||
// 多选框选中数据
|
|
||||||
handleSelectionChange(selection) {
|
|
||||||
this.ids = selection.map(item => item.dictDataId)
|
|
||||||
this.single = selection.length !== 1
|
|
||||||
this.multiple = !selection.length
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
this.reset()
|
|
||||||
const dictDataId = row.dictDataId || this.ids
|
|
||||||
getData(dictDataId).then(response => {
|
|
||||||
this.form = response.data
|
|
||||||
this.open = true
|
|
||||||
this.title = '修改字典数据'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm: function() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
if (this.form.dictDataId !== undefined) {
|
|
||||||
updateData(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
addData(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('新增成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
const dictDataIds = row.dictDataId || this.ids
|
|
||||||
this.$confirm('是否确认删除?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delData(dictDataIds)
|
|
||||||
}).then(() => {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
}).catch(function() {})
|
|
||||||
},
|
|
||||||
/** 导出按钮操作 */
|
|
||||||
handleExport() {
|
|
||||||
const queryParams = this.queryParams
|
|
||||||
this.$confirm('是否确认导出所有数据项?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return exportData(queryParams)
|
|
||||||
}).then(response => {
|
|
||||||
this.download(response.respMsg)
|
|
||||||
}).catch(function() {})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,349 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
|
|
||||||
<el-form-item label="字典名称" prop="dictName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.dictName"
|
|
||||||
placeholder="请输入字典名称"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
style="width: 240px"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="字典类型" prop="dictType">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.dictType"
|
|
||||||
placeholder="请输入字典类型"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
style="width: 240px"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态" prop="inUse">
|
|
||||||
<el-select
|
|
||||||
v-model="queryParams.inUse"
|
|
||||||
placeholder="字典状态"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="创建时间">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="dateRange"
|
|
||||||
size="small"
|
|
||||||
style="width: 240px"
|
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
type="daterange"
|
|
||||||
range-separator="-"
|
|
||||||
start-placeholder="开始日期"
|
|
||||||
end-placeholder="结束日期"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:add']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:update']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
size="mini"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:delete']"
|
|
||||||
type="danger"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
size="mini"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:export']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-download"
|
|
||||||
size="mini"
|
|
||||||
@click="handleExport"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<router-link :to="'/system/dict/data/' + scope.row.dictTypeId" class="link-type">
|
|
||||||
<span>{{ scope.row.dictType }}</span>
|
|
||||||
</router-link>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="状态" align="center" prop="inUse" :formatter="inUseFormat" />
|
|
||||||
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>修改</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:dict:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total>0"
|
|
||||||
:total="total"
|
|
||||||
:page.sync="queryParams.pageNum"
|
|
||||||
:limit.sync="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改参数配置对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="500px">
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-form-item label="字典名称" prop="dictName">
|
|
||||||
<el-input v-model="form.dictName" placeholder="请输入字典名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="字典类型" prop="dictType">
|
|
||||||
<el-input v-model="form.dictType" placeholder="请输入字典类型" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态" prop="inUse">
|
|
||||||
<el-radio-group v-model="form.inUse">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictValue"
|
|
||||||
>{{ dict.dictLabel }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listType, getType, delType, addType, updateType, exportType } from '@/api/school/system/dict/type'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'Dict',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 选中数组
|
|
||||||
ids: [],
|
|
||||||
// 非单个禁用
|
|
||||||
single: true,
|
|
||||||
// 非多个禁用
|
|
||||||
multiple: true,
|
|
||||||
// 总条数
|
|
||||||
total: 0,
|
|
||||||
// 字典表格数据
|
|
||||||
typeList: [],
|
|
||||||
// 弹出层标题
|
|
||||||
title: '',
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
// 状态数据字典
|
|
||||||
inUseOptions: [],
|
|
||||||
// 日期范围
|
|
||||||
dateRange: [],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
pageNum: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
dictName: undefined,
|
|
||||||
dictType: undefined,
|
|
||||||
inUse: undefined
|
|
||||||
},
|
|
||||||
// 表单参数
|
|
||||||
form: {},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
dictName: [
|
|
||||||
{ required: true, message: '字典名称不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
dictType: [
|
|
||||||
{ required: true, message: '字典类型不能为空', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
this.getDictListByDictType('in_use').then(response => {
|
|
||||||
this.inUseOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/** 查询字典类型列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listType(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
|
||||||
this.typeList = response.data.rows
|
|
||||||
this.total = response.data.total
|
|
||||||
this.loading = false
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
// 字典状态字典翻译
|
|
||||||
inUseFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.inUseOptions, row.inUse)
|
|
||||||
},
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
this.open = false
|
|
||||||
this.reset()
|
|
||||||
},
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
dictTypeId: undefined,
|
|
||||||
dictName: undefined,
|
|
||||||
dictType: undefined,
|
|
||||||
inUse: '1',
|
|
||||||
remark: undefined
|
|
||||||
}
|
|
||||||
this.resetForm('form')
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.queryParams.pageNum = 1
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
resetQuery() {
|
|
||||||
this.dateRange = []
|
|
||||||
this.resetForm('queryForm')
|
|
||||||
this.handleQuery()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd() {
|
|
||||||
this.reset()
|
|
||||||
this.open = true
|
|
||||||
this.title = '添加字典类型'
|
|
||||||
},
|
|
||||||
// 多选框选中数据
|
|
||||||
handleSelectionChange(selection) {
|
|
||||||
this.ids = selection.map(item => item.dictTypeId)
|
|
||||||
this.single = selection.length !== 1
|
|
||||||
this.multiple = !selection.length
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
this.reset()
|
|
||||||
const dictTypeId = row.dictTypeId || this.ids
|
|
||||||
getType(dictTypeId).then(response => {
|
|
||||||
this.form = response.data
|
|
||||||
this.open = true
|
|
||||||
this.title = '修改字典类型'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm: function() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
if (this.form.dictTypeId !== undefined) {
|
|
||||||
updateType(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
addType(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('新增成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
const dictTypeIds = row.dictTypeId || this.ids
|
|
||||||
this.$confirm('是否确认删除?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delType(dictTypeIds)
|
|
||||||
}).then(() => {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
}).catch(function() {})
|
|
||||||
},
|
|
||||||
/** 导出按钮操作 */
|
|
||||||
handleExport() {
|
|
||||||
const queryParams = this.queryParams
|
|
||||||
this.$confirm('是否确认导出所有类型数据项?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return exportType(queryParams)
|
|
||||||
}).then(response => {
|
|
||||||
this.download(response.respMsg)
|
|
||||||
}).catch(function() {})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,359 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-form :inline="true">
|
|
||||||
<el-form-item label="菜单名称">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.menuName"
|
|
||||||
placeholder="请输入菜单名称"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态">
|
|
||||||
<el-select v-model="queryParams.visible" placeholder="菜单状态" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in visibleOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button v-hasPermi="['system:menu:add']" type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">
|
|
||||||
新增
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-table
|
|
||||||
v-loading="loading"
|
|
||||||
:data="menuList"
|
|
||||||
row-key="menuId"
|
|
||||||
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
|
||||||
>
|
|
||||||
<el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="130px" />
|
|
||||||
<el-table-column prop="icon" label="图标" align="center" width="100px">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<svg-icon :icon-class="scope.row.icon" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sort" label="排序" width="60px" />
|
|
||||||
<el-table-column prop="permissionMeta" label="权限标识" width="130px" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column prop="component" label="组件路径" width="180px" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column prop="isShow" label="可见" :formatter="visibleFormat" width="80px" />
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column fixed="right" label="操作" align="center" width="180" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:menu:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>修改
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:menu:add']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
@click="handleAdd(scope.row)"
|
|
||||||
>新增
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:menu:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<!-- 添加或修改菜单对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="600px">
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="上级菜单">
|
|
||||||
<treeselect
|
|
||||||
v-model="form.parentId"
|
|
||||||
:options="menuOptions"
|
|
||||||
:show-count="true"
|
|
||||||
placeholder="选择上级菜单"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="菜单类型" prop="menuType">
|
|
||||||
<el-radio-group v-model="form.menuType">
|
|
||||||
<el-radio label="dir">目录</el-radio>
|
|
||||||
<el-radio label="menu">菜单</el-radio>
|
|
||||||
<el-radio label="button">按钮</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item v-if="form.menuType !== 'button'" label="菜单图标">
|
|
||||||
<el-popover
|
|
||||||
placement="bottom-start"
|
|
||||||
width="460"
|
|
||||||
trigger="click"
|
|
||||||
@show="$refs['iconSelect'].reset()"
|
|
||||||
>
|
|
||||||
<IconSelect ref="iconSelect" @selected="selected" />
|
|
||||||
<el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly>
|
|
||||||
<svg-icon
|
|
||||||
v-if="form.icon"
|
|
||||||
slot="prefix"
|
|
||||||
:icon-class="form.icon"
|
|
||||||
class="el-input__icon"
|
|
||||||
style="height: 32px;width: 16px;"
|
|
||||||
/>
|
|
||||||
<i v-else slot="prefix" class="el-icon-search el-input__icon" />
|
|
||||||
</el-input>
|
|
||||||
</el-popover>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="菜单名称" prop="menuName">
|
|
||||||
<el-input v-model="form.menuName" placeholder="请输入菜单名称" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="显示排序" prop="sort">
|
|
||||||
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item v-if="form.menuType !== 'button'" label="是否外链">
|
|
||||||
<el-radio-group v-model="form.outUrl">
|
|
||||||
<el-radio label="1">是</el-radio>
|
|
||||||
<el-radio label="0">否</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item v-if="form.menuType !== 'button'" label="是否在用">
|
|
||||||
<el-radio-group v-model="form.enable">
|
|
||||||
<el-radio label="1">是</el-radio>
|
|
||||||
<el-radio label="0">否</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item v-if="form.menuType !== 'button'" label="路由地址" prop="routerPath">
|
|
||||||
<el-input v-model="form.routerPath" placeholder="路由地址 如 menu" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col v-if="form.menuType === 'menu'" :span="12">
|
|
||||||
<el-form-item label="组件路径" prop="component">
|
|
||||||
<el-input v-model="form.component" placeholder="组件路径 如 system/menu/index" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item v-if="form.menuType !== 'dir'" label="权限标识">
|
|
||||||
<el-input v-model="form.permissionMeta" placeholder="权限标识 如 system:menu:list" maxlength="50" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col v-if="form.menuType !== 'dir'" :span="12">
|
|
||||||
<el-form-item label="请求路径" prop="requestUrl">
|
|
||||||
<el-input v-model="form.requestUrl" placeholder="请输入请求路径" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item v-if="form.menuType !== 'F'" label="是否展示">
|
|
||||||
<el-radio-group v-model="form.isShow">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in visibleOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictValue"
|
|
||||||
>{{ dict.dictLabel }}
|
|
||||||
</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listMenu, getMenu, treeSelect, delMenu, addMenu, updateMenu } from '@/api/school/system/menu'
|
|
||||||
import Treeselect from '@riophae/vue-treeselect'
|
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
||||||
import IconSelect from '@/components/IconSelect'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'Menu',
|
|
||||||
components: { Treeselect, IconSelect },
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 菜单表格树数据
|
|
||||||
menuList: [],
|
|
||||||
// 菜单树选项
|
|
||||||
menuOptions: [],
|
|
||||||
// 弹出层标题
|
|
||||||
title: '',
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
// 菜单状态数据字典
|
|
||||||
visibleOptions: [],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
menuName: undefined,
|
|
||||||
visible: undefined
|
|
||||||
},
|
|
||||||
// 表单参数
|
|
||||||
form: {},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
menuName: [
|
|
||||||
{ required: true, message: '菜单名称不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
sort: [
|
|
||||||
{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
this.getDictListByDictType('is_show').then(response => {
|
|
||||||
this.visibleOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
// 选择图标
|
|
||||||
selected(name) {
|
|
||||||
this.form.icon = name
|
|
||||||
},
|
|
||||||
/** 查询菜单列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listMenu(this.queryParams).then(response => {
|
|
||||||
this.menuList = response.data
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 查询菜单下拉树结构 */
|
|
||||||
getTreeSelect() {
|
|
||||||
treeSelect().then(response => {
|
|
||||||
this.menuOptions = []
|
|
||||||
const menu = { id: -1, label: '根目录', children: [] }
|
|
||||||
menu.children = response.data
|
|
||||||
this.menuOptions.push(menu)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 菜单显示状态字典翻译
|
|
||||||
visibleFormat(row, column) {
|
|
||||||
if (row.menuType === 'button') {
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
return this.selectDictLabel(this.visibleOptions, row.isShow)
|
|
||||||
},
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
this.open = false
|
|
||||||
this.reset()
|
|
||||||
},
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
menuId: undefined,
|
|
||||||
parentId: 0,
|
|
||||||
menuName: undefined,
|
|
||||||
icon: undefined,
|
|
||||||
menuType: 'menu',
|
|
||||||
orderNum: undefined,
|
|
||||||
outUrl: '0',
|
|
||||||
enable: '1',
|
|
||||||
isShow: '1'
|
|
||||||
}
|
|
||||||
this.resetForm('form')
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd(row) {
|
|
||||||
this.reset()
|
|
||||||
this.getTreeSelect()
|
|
||||||
if (row != null) {
|
|
||||||
this.form.parentId = row.menuId
|
|
||||||
}
|
|
||||||
this.open = true
|
|
||||||
this.title = '添加菜单'
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
this.reset()
|
|
||||||
this.getTreeSelect()
|
|
||||||
getMenu(row.menuId).then(response => {
|
|
||||||
this.form = response.data
|
|
||||||
this.open = true
|
|
||||||
this.title = '修改菜单'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm: function() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
if (this.form.menuId !== undefined) {
|
|
||||||
updateMenu(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
addMenu(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('新增成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
this.$confirm('是否确认删除名称为"' + row.menuName + '"的菜单?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delMenu(row.menuId)
|
|
||||||
}).then(() => {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
}).catch(function() {
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,354 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
|
|
||||||
<el-form-item label="角色名称" prop="roleName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.roleName"
|
|
||||||
placeholder="请输入角色名称"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态" prop="inUse">
|
|
||||||
<el-select v-model="queryParams.inUse" placeholder="请选择状态" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:role:add']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table
|
|
||||||
v-loading="loading"
|
|
||||||
:data="role"
|
|
||||||
row-key="roleId"
|
|
||||||
default-expand-all
|
|
||||||
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
|
||||||
>
|
|
||||||
<el-table-column prop="roleName" label="角色名称" />
|
|
||||||
<el-table-column prop="roleCode" label="角色编码" />
|
|
||||||
<el-table-column prop="sort" label="显示顺序" />
|
|
||||||
<el-table-column align="center" prop="inUse" label="状态" :formatter="inUseFormat" />
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:role:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>修改</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:role:add']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
@click="handleAdd(scope.row)"
|
|
||||||
>新增</el-button>
|
|
||||||
<el-button
|
|
||||||
v-if="scope.row.parentId !== -1"
|
|
||||||
v-hasPermi="['system:role:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<!-- 添加或修改对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="600px">
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="上级角色" prop="parentId">
|
|
||||||
<treeselect v-model="form.parentId" :options="parentOptions" placeholder="选择上级角色" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="角色编码" prop="roleCode">
|
|
||||||
<el-input v-model="form.roleCode" placeholder="请输入角色编码" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="角色名称" prop="roleName">
|
|
||||||
<el-input v-model="form.roleName" placeholder="请输入角色名称" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="显示顺序" prop="sort">
|
|
||||||
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="状态">
|
|
||||||
<el-radio-group v-model="form.inUse">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictValue"
|
|
||||||
>{{ dict.dictLabel }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="菜单权限">
|
|
||||||
<el-tree
|
|
||||||
ref="menu"
|
|
||||||
:data="menuOptions"
|
|
||||||
show-checkbox
|
|
||||||
node-key="id"
|
|
||||||
empty-text="加载中,请稍后"
|
|
||||||
:props="defaultProps"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listRole, getRole, treeSelect, delRole, addRole, updateRole } from '@/api/school/system/role'
|
|
||||||
import { treeSelectIncludeHide, roleMenuTreeIdList } from '@/api/school/system/menu'
|
|
||||||
import Treeselect from '@riophae/vue-treeselect'
|
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'Role',
|
|
||||||
components: { Treeselect },
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 表格树数据
|
|
||||||
role: [],
|
|
||||||
// 树选项
|
|
||||||
parentOptions: undefined,
|
|
||||||
// 弹出层标题
|
|
||||||
title: '',
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
// 状态数据字典
|
|
||||||
inUseOptions: [],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
roleName: undefined,
|
|
||||||
inUse: undefined
|
|
||||||
},
|
|
||||||
// 角色菜单
|
|
||||||
menuOptions: [],
|
|
||||||
// 表单参数
|
|
||||||
form: {},
|
|
||||||
defaultProps: {
|
|
||||||
children: 'children',
|
|
||||||
label: 'label'
|
|
||||||
},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
parentId: [
|
|
||||||
{ required: true, message: '上级不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
roleCode: [
|
|
||||||
{ required: true, message: '请输入角色编码', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
roleName: [
|
|
||||||
{ required: true, message: '请输入角色名称', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
sort: [
|
|
||||||
{ required: true, message: '请输入顺序', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
inUse: [
|
|
||||||
{ required: true, message: '请选择是否在用', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
this.getDictListByDictType('in_use').then(response => {
|
|
||||||
this.inUseOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/** 查询列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listRole(this.queryParams).then(response => {
|
|
||||||
this.role = response.data
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 查询下拉树结构 */
|
|
||||||
getTreeSelect() {
|
|
||||||
treeSelect().then(response => {
|
|
||||||
this.parentOptions = []
|
|
||||||
const role = { id: -1, label: '根目录', children: [] }
|
|
||||||
role.children = response.data
|
|
||||||
this.parentOptions.push(role)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 查询菜单树结构 */
|
|
||||||
getMenuTreeSelect() {
|
|
||||||
treeSelectIncludeHide().then(response => {
|
|
||||||
this.menuOptions = response.data
|
|
||||||
this.$refs.menu.setCheckedKeys([])
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 根据角色ID查询菜单树结构 */
|
|
||||||
getRoleMenuTreeSelect(roleId) {
|
|
||||||
treeSelectIncludeHide().then(response => {
|
|
||||||
this.menuOptions = response.data
|
|
||||||
roleMenuTreeIdList(roleId).then(roleMenuTreeIdResponse => {
|
|
||||||
this.$refs.menu.setCheckedKeys(roleMenuTreeIdResponse.data)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 所有菜单节点数据
|
|
||||||
getMenuAllCheckedKeys() {
|
|
||||||
// 半选中的菜单节点
|
|
||||||
const halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys()
|
|
||||||
// 目前被选中的菜单节点
|
|
||||||
const checkedKeys = this.$refs.menu.getCheckedKeys()
|
|
||||||
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys)
|
|
||||||
return checkedKeys
|
|
||||||
},
|
|
||||||
// 状态字典翻译
|
|
||||||
inUseFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.inUseOptions, row.inUse)
|
|
||||||
},
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
this.open = false
|
|
||||||
this.reset()
|
|
||||||
},
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
roleCode: undefined,
|
|
||||||
roleName: undefined,
|
|
||||||
sort: undefined,
|
|
||||||
inUse: '1',
|
|
||||||
deleteFlag: undefined,
|
|
||||||
createUser: undefined,
|
|
||||||
createTime: undefined,
|
|
||||||
lastUpdateUser: undefined,
|
|
||||||
lastUpdateTime: undefined,
|
|
||||||
parentId: -1
|
|
||||||
}
|
|
||||||
this.resetForm('form')
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
resetQuery() {
|
|
||||||
this.resetForm('queryForm')
|
|
||||||
this.handleQuery()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd(row) {
|
|
||||||
this.reset()
|
|
||||||
this.getTreeSelect()
|
|
||||||
this.getMenuTreeSelect()
|
|
||||||
if (row !== undefined) {
|
|
||||||
this.form.parentId = row.roleId
|
|
||||||
}
|
|
||||||
this.open = true
|
|
||||||
this.title = '添加'
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
this.reset()
|
|
||||||
this.getTreeSelect()
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.getRoleMenuTreeSelect(row.roleId)
|
|
||||||
})
|
|
||||||
getRole(row.roleId).then(response => {
|
|
||||||
this.form = response.data
|
|
||||||
this.open = true
|
|
||||||
this.title = '修改'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm: function() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
if (this.form.roleId !== undefined) {
|
|
||||||
this.form.menuIds = this.getMenuAllCheckedKeys()
|
|
||||||
updateRole(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
this.form.menuIds = this.getMenuAllCheckedKeys()
|
|
||||||
addRole(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('新增成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
this.$confirm('是否确认删除?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delRole(row.roleId)
|
|
||||||
}).then((response) => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(function() {})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,330 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<!--部门数据-->
|
|
||||||
<el-col :span="4" :xs="24">
|
|
||||||
<div class="head-container">
|
|
||||||
<el-input
|
|
||||||
v-model="deptName"
|
|
||||||
placeholder="请输入部门名称"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
prefix-icon="el-icon-search"
|
|
||||||
style="margin-bottom: 20px"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="head-container">
|
|
||||||
<el-tree
|
|
||||||
ref="tree"
|
|
||||||
:data="deptOptions"
|
|
||||||
:props="defaultProps"
|
|
||||||
:expand-on-click-node="false"
|
|
||||||
:filter-node-method="filterNode"
|
|
||||||
default-expand-all
|
|
||||||
@node-click="handleNodeClick"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<!--员工数据-->
|
|
||||||
<el-col :span="20" :xs="24">
|
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px" class="align-left">
|
|
||||||
<el-form-item label="员工姓名" prop="staffName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.staffName"
|
|
||||||
placeholder="请输入员工姓名"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="任课教师" prop="teacher">
|
|
||||||
<el-select v-model="queryParams.teacher" placeholder="是否为任课教师" clearable size="small">
|
|
||||||
<el-option label="是" value="1" />
|
|
||||||
<el-option label="否" value="0" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="人事状态" prop="personnelStatus">
|
|
||||||
<el-select v-model="queryParams.personnelStatus" placeholder="人事状态" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in personnelStatusOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="性别" prop="sex">
|
|
||||||
<el-select v-model="queryParams.sex" placeholder="请选择性别" clearable size="small">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in sexOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:staff:add']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>新增
|
|
||||||
</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:staff:update']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
size="mini"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
>修改
|
|
||||||
</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:staff:delete']"
|
|
||||||
type="danger"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
:disabled="multiple"
|
|
||||||
size="mini"
|
|
||||||
@click="handleDelete"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column align="center" width="110" prop="staffName" label="员工姓名" fixed="left" />
|
|
||||||
<el-table-column align="center" prop="phone" label="联系电话" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column align="center" prop="sex" label="性别" :formatter="sexFormat" />
|
|
||||||
<el-table-column align="center" prop="personnelStatusName" label="人事状态" />
|
|
||||||
<el-table-column label="入职日期" align="center" prop="entryDate" width="110">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.entryDate, '{y}-{m}-{d}') }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column align="center" prop="deptName" label="所属部门" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column align="center" prop="teacher" label="任课教师">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-tag v-if="scope.row.teacher">是</el-tag>
|
|
||||||
<el-tag v-else type="info">否</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column align="center" prop="locked" label="登录系统">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-tag v-if="scope.row.locked === '0'">允许</el-tag>
|
|
||||||
<el-tag v-else-if="scope.row.locked === '1'" type="danger">不允许</el-tag>
|
|
||||||
<el-tag v-else type="info">无账号</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column align="center" prop="username" label="用户名" :show-overflow-tooltip="true">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span v-if="scope.row.username">{{ scope.row.username }}</span>
|
|
||||||
<span v-else>-</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column width="150" label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:staff:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>修改
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:staff:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total>0"
|
|
||||||
:total="total"
|
|
||||||
:page.sync="queryParams.pageNum"
|
|
||||||
:limit.sync="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<change-staff ref="changeStaff" @ok="getList" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listStaff, getStaff, delStaff } from '@/api/school/system/staff'
|
|
||||||
import { treeSelect } from '@/api/school/system/dept'
|
|
||||||
import changeStaff from '@/components/system/staff/changeStaff'
|
|
||||||
export default {
|
|
||||||
components: {
|
|
||||||
changeStaff
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 选中数组
|
|
||||||
ids: [],
|
|
||||||
// 非单个禁用
|
|
||||||
single: true,
|
|
||||||
// 非多个禁用
|
|
||||||
multiple: true,
|
|
||||||
// 总条数
|
|
||||||
total: 0,
|
|
||||||
// 表格树数据
|
|
||||||
dataList: [],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
pageNum: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
teacherName: undefined,
|
|
||||||
sex: undefined,
|
|
||||||
deptId: undefined
|
|
||||||
},
|
|
||||||
// 性别 M男 F女数据字典
|
|
||||||
sexOptions: [],
|
|
||||||
// 人事状态
|
|
||||||
personnelStatusOptions: [],
|
|
||||||
// 部门名称
|
|
||||||
deptName: undefined,
|
|
||||||
deptOptions: [],
|
|
||||||
defaultProps: {
|
|
||||||
children: 'children',
|
|
||||||
label: 'label'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
// 根据名称筛选部门树
|
|
||||||
deptName(val) {
|
|
||||||
this.$refs.tree.filter(val)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
this.getDeptTreeSelect()
|
|
||||||
this.getDictListByDictType('sex').then(response => {
|
|
||||||
this.sexOptions = response.data
|
|
||||||
})
|
|
||||||
this.getDictListByDictType('personnel_status').then(response => {
|
|
||||||
this.personnelStatusOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/** 查询部门列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listStaff(this.queryParams).then(response => {
|
|
||||||
this.dataList = response.data.rows
|
|
||||||
this.total = response.data.total
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 查询部门下拉树结构 */
|
|
||||||
getDeptTreeSelect() {
|
|
||||||
treeSelect().then(response => {
|
|
||||||
this.deptOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 性别 M男 F女字典翻译
|
|
||||||
sexFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.sexOptions, row.sex)
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.queryParams.pageNum = 1
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
resetQuery() {
|
|
||||||
this.resetForm('queryForm')
|
|
||||||
this.queryParams.deptId = undefined
|
|
||||||
this.handleQuery()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd(row) {
|
|
||||||
this.$refs.changeStaff.reset()
|
|
||||||
this.$refs.changeStaff.title = '添加员工信息'
|
|
||||||
this.$refs.changeStaff.getRoleTreeSelect()
|
|
||||||
this.$refs.changeStaff.open = true
|
|
||||||
},
|
|
||||||
// 多选框选中数据
|
|
||||||
handleSelectionChange(selection) {
|
|
||||||
this.ids = selection.map(item => item.staffId)
|
|
||||||
this.single = selection.length !== 1
|
|
||||||
this.multiple = !selection.length
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
getStaff(row.staffId || this.ids).then(response => {
|
|
||||||
this.$refs.changeStaff.reset()
|
|
||||||
const staffInfo = response.data.staffInfo
|
|
||||||
const checkRoleIds = response.data.roleTreeIdList
|
|
||||||
const userInfo = response.data.userInfo
|
|
||||||
if (userInfo !== undefined) {
|
|
||||||
staffInfo.loginUser = true
|
|
||||||
staffInfo.username = userInfo.username
|
|
||||||
staffInfo.locked = userInfo.locked
|
|
||||||
} else {
|
|
||||||
staffInfo.loginUser = false
|
|
||||||
staffInfo.locked = '0'
|
|
||||||
}
|
|
||||||
staffInfo.belongCampus = response.data.belongCampus
|
|
||||||
staffInfo.partCampus = response.data.partCampus
|
|
||||||
|
|
||||||
this.$refs.changeStaff.form = staffInfo
|
|
||||||
this.$refs.changeStaff.checkRoleIds = checkRoleIds
|
|
||||||
this.$refs.changeStaff.title = '修改员工信息'
|
|
||||||
this.$refs.changeStaff.getRoleTreeSelect()
|
|
||||||
this.$refs.changeStaff.open = true
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
const id = row.staffId || this.ids
|
|
||||||
this.$confirm('是否确认删除?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delStaff(id)
|
|
||||||
}).then((response) => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(function() {
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 筛选节点
|
|
||||||
filterNode(value, data) {
|
|
||||||
if (!value) return true
|
|
||||||
return data.label.indexOf(value) !== -1
|
|
||||||
},
|
|
||||||
// 节点单击事件
|
|
||||||
handleNodeClick(data) {
|
|
||||||
this.queryParams.deptId = data.id
|
|
||||||
this.getList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,317 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
|
|
||||||
<el-form-item label="租户名称" prop="tenantName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.tenantName"
|
|
||||||
placeholder="请输入租户名称"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
style="width: 240px"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="联系人" prop="contactName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.contactName"
|
|
||||||
placeholder="请输入联系人"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
style="width: 240px"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态" prop="inUse">
|
|
||||||
<el-select
|
|
||||||
v-model="queryParams.inUse"
|
|
||||||
placeholder="租户状态"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in inUseOptions"
|
|
||||||
:key="dict.dictValue"
|
|
||||||
:label="dict.dictLabel"
|
|
||||||
:value="dict.dictValue"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="到期日期">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="dateRange"
|
|
||||||
size="small"
|
|
||||||
style="width: 240px"
|
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
type="daterange"
|
|
||||||
range-separator="-"
|
|
||||||
start-placeholder="开始日期"
|
|
||||||
end-placeholder="结束日期"
|
|
||||||
:picker-options="useEndRangeOptions"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:tenant:add']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>租户入驻</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:tenant:update']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
size="mini"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
>信息变更</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:tenant:delete']"
|
|
||||||
type="danger"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
size="mini"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:tenant:export']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-download"
|
|
||||||
size="mini"
|
|
||||||
@click="handleExport"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column label="租户名称" align="center" prop="tenantName" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="联系人" align="center" prop="contactName" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="联系电话" align="center" prop="contactPhone" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="状态" align="center" prop="inUse" :formatter="inUseFormat">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-tag v-if="scope.row.endTime < new Date().getTime()" size="medium" type="danger">过期</el-tag>
|
|
||||||
<el-tag v-else-if="scope.row.inUse === '1'" size="medium">在用</el-tag>
|
|
||||||
<el-tag v-else-if="scope.row.inUse === '0'" size="medium" type="warning">停用</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="入驻时间" align="center" prop="createTime" width="180">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="生效时间" align="center" prop="beginTime" width="180">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.beginTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="失效时间" align="center" prop="endTime" width="180">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span>{{ parseTime(scope.row.endTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="备注" align="center" prop="memo" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column fixed="right" width="150" label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:tenant:update']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleUpdate(scope.row)"
|
|
||||||
>信息变更</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:tenant:delete']"
|
|
||||||
size="mini"
|
|
||||||
type="text"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleDelete(scope.row)"
|
|
||||||
>删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total>0"
|
|
||||||
:total="total"
|
|
||||||
:page.sync="queryParams.pageNum"
|
|
||||||
:limit.sync="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<change-tenant ref="changeTenant" @ok="getList" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listTenant, getTenant, delTenant, exportTenant } from '@/api/school/system/tenant'
|
|
||||||
import changeTenant from '@/components/system/tenant/changeTenant'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
components: {
|
|
||||||
changeTenant
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 选中数组
|
|
||||||
ids: [],
|
|
||||||
// 非单个禁用
|
|
||||||
single: true,
|
|
||||||
// 非多个禁用
|
|
||||||
multiple: true,
|
|
||||||
// 总条数
|
|
||||||
total: 0,
|
|
||||||
// 租户表格数据
|
|
||||||
dataList: [],
|
|
||||||
// 状态数据租户
|
|
||||||
inUseOptions: [],
|
|
||||||
// 日期范围
|
|
||||||
dateRange: [],
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
pageNum: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
tenantName: undefined,
|
|
||||||
contactName: undefined,
|
|
||||||
inUse: undefined
|
|
||||||
},
|
|
||||||
useEndRangeOptions: {
|
|
||||||
shortcuts: [{
|
|
||||||
text: '7天',
|
|
||||||
onClick(picker) {
|
|
||||||
const start = new Date()
|
|
||||||
const end = new Date()
|
|
||||||
end.setTime(start.getTime() + 3600 * 1000 * 24 * 7)
|
|
||||||
picker.$emit('pick', [start, end])
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
text: '15天',
|
|
||||||
onClick(picker) {
|
|
||||||
const start = new Date()
|
|
||||||
const end = new Date()
|
|
||||||
end.setTime(start.getTime() + 3600 * 1000 * 24 * 15)
|
|
||||||
picker.$emit('pick', [start, end])
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
text: '1个月',
|
|
||||||
onClick(picker) {
|
|
||||||
const start = new Date()
|
|
||||||
const end = new Date()
|
|
||||||
end.setTime(start.getTime() + 3600 * 1000 * 24 * 30)
|
|
||||||
picker.$emit('pick', [start, end])
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
text: '3个月',
|
|
||||||
onClick(picker) {
|
|
||||||
const start = new Date()
|
|
||||||
const end = new Date()
|
|
||||||
end.setTime(start.getTime() + 3600 * 1000 * 24 * 90)
|
|
||||||
picker.$emit('pick', [start, end])
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
this.getDictListByDictType('in_use').then(response => {
|
|
||||||
this.inUseOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/** 查询租户类型列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listTenant(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
|
||||||
this.dataList = response.data.rows
|
|
||||||
this.total = response.data.total
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 租户状态租户翻译
|
|
||||||
inUseFormat(row, column) {
|
|
||||||
return this.selectDictLabel(this.inUseOptions, row.inUse)
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.queryParams.pageNum = 1
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
resetQuery() {
|
|
||||||
this.dateRange = []
|
|
||||||
this.resetForm('queryForm')
|
|
||||||
this.handleQuery()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd() {
|
|
||||||
this.$refs.changeTenant.reset()
|
|
||||||
this.$refs.changeTenant.title = '添加租户信息'
|
|
||||||
this.$refs.changeTenant.open = true
|
|
||||||
},
|
|
||||||
// 多选框选中数据
|
|
||||||
handleSelectionChange(selection) {
|
|
||||||
this.ids = selection.map(item => item.tenantId)
|
|
||||||
this.single = selection.length !== 1
|
|
||||||
this.multiple = !selection.length
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
const tenantId = row.tenantId || this.ids
|
|
||||||
getTenant(tenantId).then(response => {
|
|
||||||
this.$refs.changeTenant.reset()
|
|
||||||
this.$refs.changeTenant.form = response.data
|
|
||||||
this.$refs.changeTenant.title = '修改租户信息'
|
|
||||||
this.$refs.changeTenant.open = true
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
const tenantIds = row.tenantId || this.ids
|
|
||||||
this.$confirm('是否确认删除?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delTenant(tenantIds)
|
|
||||||
}).then((response) => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(function() {})
|
|
||||||
},
|
|
||||||
/** 导出按钮操作 */
|
|
||||||
handleExport() {
|
|
||||||
const queryParams = this.queryParams
|
|
||||||
this.$confirm('是否确认导出所有数据项?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return exportTenant(queryParams)
|
|
||||||
}).then(response => {
|
|
||||||
this.download(response.respMsg)
|
|
||||||
}).catch(function() {})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,666 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container">
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<!--部门数据-->
|
|
||||||
<el-col :span="4" :xs="24">
|
|
||||||
<div class="head-container">
|
|
||||||
<el-input
|
|
||||||
v-model="deptName"
|
|
||||||
placeholder="请输入部门名称"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
prefix-icon="el-icon-search"
|
|
||||||
style="margin-bottom: 20px"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="head-container">
|
|
||||||
<el-tree
|
|
||||||
ref="tree"
|
|
||||||
:data="deptOptions"
|
|
||||||
:props="defaultProps"
|
|
||||||
:expand-on-click-node="false"
|
|
||||||
:filter-node-method="filterNode"
|
|
||||||
default-expand-all
|
|
||||||
@node-click="handleNodeClick"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<!--用户数据-->
|
|
||||||
<el-col :span="20" :xs="24">
|
|
||||||
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
|
|
||||||
<el-form-item label="用户名:" prop="username">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.username"
|
|
||||||
placeholder="请输入用户名"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="姓名:" prop="name">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.name"
|
|
||||||
placeholder="请输入姓名"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="联系电话" prop="phone">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.phone"
|
|
||||||
placeholder="请输入联系电话"
|
|
||||||
clearable
|
|
||||||
size="small"
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['system:user:add']"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-plus"
|
|
||||||
size="mini"
|
|
||||||
@click="handleAdd"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column prop="username" width="100" label="用户名" show-overflow-tooltip fixed="left" />
|
|
||||||
<el-table-column prop="tenantNames" width="100" label="所属租户" show-overflow-tooltip />
|
|
||||||
<el-table-column prop="name" label="姓名" show-overflow-tooltip />
|
|
||||||
<el-table-column prop="phone" label="联系电话" width="130" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column prop="emailAddress" label="邮箱" width="130" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column prop="deptName" label="部门" width="130" />
|
|
||||||
<el-table-column label="状态" align="center">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-switch
|
|
||||||
v-model="scope.row.enable"
|
|
||||||
active-value="1"
|
|
||||||
inactive-value="0"
|
|
||||||
@change="handleEnableChange(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column fixed="right" width="150" label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-dropdown trigger="click">
|
|
||||||
<span style="cursor: pointer;color: #409EFF;outline: none;">
|
|
||||||
操作<i class="el-icon-arrow-down el-icon--right" style="font-size: 12px;" />
|
|
||||||
</span>
|
|
||||||
<el-dropdown-menu slot="dropdown">
|
|
||||||
<el-dropdown-item v-if="scope.row.username !== 'superManXluobo'" v-hasPermi="['system:user:update']" icon="el-icon-edit-outline" @click.native="handleUpdate(scope.row)">修改</el-dropdown-item>
|
|
||||||
<el-dropdown-item v-hasPermi="['system:user:resetPwd']" icon="el-icon-key" @click.native="handleResetPwd(scope.row)">重置密码</el-dropdown-item>
|
|
||||||
<el-dropdown-item v-hasPermi="['system:user:updateTenant']" icon="el-icon-s-shop" @click.native="handleUpdateTenant(scope.row)">分配租户</el-dropdown-item>
|
|
||||||
<el-dropdown-item v-hasPermi="['system:user:updateRole']" icon="el-icon-paperclip" @click.native="handleUpdateRole(scope.row)">分配角色</el-dropdown-item>
|
|
||||||
<el-dropdown-item v-if="scope.row.username !== 'superManXluobo'" v-hasPermi="['system:user:delete']" icon="el-icon-delete" @click.native="handleDelete(scope.row)">删除</el-dropdown-item>
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</el-dropdown>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<!-- 添加 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="600px">
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="用户名" prop="username">
|
|
||||||
<el-input v-model="form.username" placeholder="请输入用户名" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="所属部门" prop="deptId">
|
|
||||||
<treeselect v-model="form.deptId" :options="deptOptions" placeholder="请选择归属部门" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="密码" prop="password">
|
|
||||||
<el-input v-model="form.password" placeholder="请输入密码" show-password />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="确认密码" prop="checkPass" show-password>
|
|
||||||
<el-input v-model="form.checkPass" placeholder="请输入密码" show-password />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="姓名" prop="name">
|
|
||||||
<el-input v-model="form.name" placeholder="请输入姓名" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="联系电话" prop="phone">
|
|
||||||
<el-input v-model="form.phone" placeholder="请输入联系电话" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="邮箱" prop="emailAddress">
|
|
||||||
<el-input v-model="form.emailAddress" placeholder="请输入邮箱" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
<!-- 修改 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="openUpdate" width="600px">
|
|
||||||
<el-form ref="updateForm" :model="updateForm" :rules="updateRules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="用户名" prop="username">
|
|
||||||
<el-input v-model="updateForm.username" placeholder="请输入用户名" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="所属部门" prop="deptId">
|
|
||||||
<treeselect v-model="updateForm.deptId" :options="deptOptions" placeholder="请选择归属部门" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="姓名" prop="name">
|
|
||||||
<el-input v-model="updateForm.name" placeholder="请输入姓名" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="联系电话" prop="phone">
|
|
||||||
<el-input v-model="updateForm.phone" placeholder="请输入联系电话" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="邮箱" prop="emailAddress">
|
|
||||||
<el-input v-model="updateForm.emailAddress" placeholder="请输入邮箱" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitFormForUpdate">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
<!--变更用户角色-->
|
|
||||||
<el-dialog title="修改用户角色" :visible.sync="openUpdateRole" width="300px">
|
|
||||||
<el-form ref="updateRoleForm" :model="updateRoleForm" label-width="40px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="租户" prop="tenantId">
|
|
||||||
<el-select v-model="updateRoleForm.tenantId" filterable placeholder="请选择租户" @change="tenantChange">
|
|
||||||
<el-option
|
|
||||||
v-for="item in tenantOptions"
|
|
||||||
:key="item.tenantId"
|
|
||||||
:label="item.tenantName"
|
|
||||||
:value="item.tenantId"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col v-if="updateRoleForm.tenantId !== undefined" :span="24">
|
|
||||||
<el-form-item label="角色">
|
|
||||||
<el-tree
|
|
||||||
ref="role"
|
|
||||||
:data="roleOptions"
|
|
||||||
show-checkbox
|
|
||||||
node-key="id"
|
|
||||||
empty-text="加载中,请稍后"
|
|
||||||
:props="defaultProps"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button
|
|
||||||
:disabled="updateRoleForm.userId === undefined || updateRoleForm.tenantId === undefined"
|
|
||||||
type="primary"
|
|
||||||
@click="submitFormForRoleUpdate"
|
|
||||||
>确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
<!--变更用户租户-->
|
|
||||||
<el-dialog title="修改用户租户" :visible.sync="openUpdateTenant" width="300px">
|
|
||||||
<el-form ref="updateTenantForm" :model="updateTenantForm" label-width="40px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="租户" prop="tenantId">
|
|
||||||
<el-select v-model="updateTenantForm.tenantIds" multiple filterable placeholder="请选择租户">
|
|
||||||
<el-option
|
|
||||||
v-for="item in allTenantOptions"
|
|
||||||
:key="item.tenantId"
|
|
||||||
:label="item.tenantName"
|
|
||||||
:value="item.tenantId"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button
|
|
||||||
:disabled="updateTenantForm.userId === undefined || updateTenantForm.tenantIds === undefined"
|
|
||||||
type="primary"
|
|
||||||
@click="submitFormForTenantUpdate"
|
|
||||||
>确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { listUser, getUser, delUser, addUser, updateUser, changeUserEnable, resetUserPwd, changeUserRole, changeUserTenant } from '@/api/school/system/user'
|
|
||||||
import { treeSelect as roleTreeSelect, userRoleIdList } from '@/api/school/system/role/index'
|
|
||||||
import { userTenantSelectLimitSelf, treeSelect as tenantTreeSelect, userTenantSelect } from '@/api/school/system/tenant/index'
|
|
||||||
import { treeSelect } from '@/api/school/system/dept'
|
|
||||||
import Treeselect from '@riophae/vue-treeselect'
|
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
||||||
import { isUsername, isPass, isSerialNumber } from '@/utils/validate'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'User',
|
|
||||||
components: { Treeselect },
|
|
||||||
data() {
|
|
||||||
const validatePass = (rule, value, callback) => {
|
|
||||||
if (value === undefined || value === '') {
|
|
||||||
callback(new Error('请输入密码'))
|
|
||||||
} else if (!isPass(value)) {
|
|
||||||
callback(new Error('最少6位,包含大小写字母和特殊字符'))
|
|
||||||
} else {
|
|
||||||
if (this.form.checkPass !== '' && this.form.checkPass !== undefined) {
|
|
||||||
this.$refs.form.validateField('checkPass')
|
|
||||||
}
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const validateCheckPass = (rule, value, callback) => {
|
|
||||||
if (value === undefined || value === '') {
|
|
||||||
callback(new Error('请再次输入密码'))
|
|
||||||
} else if (value !== this.form.password) {
|
|
||||||
callback(new Error('两次输入密码不一致!'))
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const validateNumber = (rule, value, callback) => {
|
|
||||||
if (!isSerialNumber(value)) {
|
|
||||||
callback(new Error('请输入正确的手机号码'))
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const validateUsername = (rule, value, callback) => {
|
|
||||||
if (!isUsername(value)) {
|
|
||||||
callback(new Error('4到16位(字母,数字,下划线)'))
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
// 遮罩层
|
|
||||||
loading: true,
|
|
||||||
// 选中数组
|
|
||||||
ids: [],
|
|
||||||
// 非单个禁用
|
|
||||||
single: true,
|
|
||||||
// 非多个禁用
|
|
||||||
multiple: true,
|
|
||||||
// 总条数
|
|
||||||
total: 0,
|
|
||||||
// 表格树数据
|
|
||||||
dataList: [],
|
|
||||||
// 弹出层标题
|
|
||||||
title: '',
|
|
||||||
// 是否显示弹出层
|
|
||||||
open: false,
|
|
||||||
openUpdate: false,
|
|
||||||
openUpdateRole: false,
|
|
||||||
openUpdateTenant: false,
|
|
||||||
// 部门名称
|
|
||||||
deptName: undefined,
|
|
||||||
// 部门树选项
|
|
||||||
deptOptions: undefined,
|
|
||||||
roleOptions: undefined,
|
|
||||||
tenantOptions: undefined,
|
|
||||||
allTenantOptions: undefined,
|
|
||||||
defaultProps: {
|
|
||||||
children: 'children',
|
|
||||||
label: 'label'
|
|
||||||
},
|
|
||||||
// 查询参数
|
|
||||||
queryParams: {
|
|
||||||
pageNum: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
username: undefined,
|
|
||||||
name: undefined,
|
|
||||||
phone: undefined
|
|
||||||
},
|
|
||||||
// 表单参数
|
|
||||||
form: {},
|
|
||||||
updateForm: {},
|
|
||||||
updateRoleForm: {},
|
|
||||||
updateTenantForm: {},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
username: [
|
|
||||||
{ required: true, message: '不能为空', trigger: 'blur' },
|
|
||||||
{ validator: validateUsername, trigger: 'blur' }
|
|
||||||
],
|
|
||||||
password: [
|
|
||||||
{ validator: validatePass, trigger: 'blur' }
|
|
||||||
],
|
|
||||||
checkPass: [
|
|
||||||
{ validator: validateCheckPass, trigger: 'blur' }
|
|
||||||
],
|
|
||||||
name: [
|
|
||||||
{ required: true, message: '姓名不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
phone: [
|
|
||||||
{ required: true, message: '联系电话不能为空', trigger: 'blur' },
|
|
||||||
{ validator: validateNumber, trigger: 'blur' }
|
|
||||||
],
|
|
||||||
emailAddress: [
|
|
||||||
{ required: true, message: '邮箱不能为空', trigger: 'blur' },
|
|
||||||
{ type: 'email', message: '请输入正确的邮箱', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
updateRules: {
|
|
||||||
username: [
|
|
||||||
{ required: true, message: '不能为空', trigger: 'blur' },
|
|
||||||
{ validator: validateUsername, trigger: 'blur' }
|
|
||||||
],
|
|
||||||
name: [
|
|
||||||
{ required: true, message: '姓名不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
phone: [
|
|
||||||
{ required: true, message: '联系电话不能为空', trigger: 'blur' },
|
|
||||||
{ validator: validateNumber, trigger: 'blur' }
|
|
||||||
],
|
|
||||||
emailAddress: [
|
|
||||||
{ required: true, message: '邮箱不能为空', trigger: 'blur' },
|
|
||||||
{ type: 'email', message: '请输入正确的邮箱', trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
// 根据名称筛选部门树
|
|
||||||
deptName(val) {
|
|
||||||
this.$refs.tree.filter(val)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getList()
|
|
||||||
this.getDeptTreeSelect()
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/** 查询部门列表 */
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
listUser(this.queryParams).then(response => {
|
|
||||||
this.dataList = response.data.rows
|
|
||||||
this.total = response.data.total
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 查询部门下拉树结构 */
|
|
||||||
getDeptTreeSelect() {
|
|
||||||
treeSelect().then(response => {
|
|
||||||
this.deptOptions = response.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 筛选节点
|
|
||||||
filterNode(value, data) {
|
|
||||||
if (!value) return true
|
|
||||||
return data.label.indexOf(value) !== -1
|
|
||||||
},
|
|
||||||
// 节点单击事件
|
|
||||||
handleNodeClick(data) {
|
|
||||||
this.queryParams.deptId = data.id
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
// 用户状态修改
|
|
||||||
handleEnableChange(row) {
|
|
||||||
const text = row.enable === '1' ? '启用' : '停用'
|
|
||||||
this.$confirm('确认要"' + text + '""' + row.username + '"用户吗?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return changeUserEnable(row.userId, row.enable)
|
|
||||||
}).then(() => {
|
|
||||||
this.msgSuccess(text + '成功')
|
|
||||||
}).catch(function() {
|
|
||||||
row.enable = row.enable === '0' ? '1' : '0'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 取消按钮
|
|
||||||
cancel() {
|
|
||||||
this.open = false
|
|
||||||
this.openUpdate = false
|
|
||||||
this.openUpdateRole = false
|
|
||||||
this.openUpdateTenant = false
|
|
||||||
this.reset()
|
|
||||||
},
|
|
||||||
// 表单重置
|
|
||||||
reset() {
|
|
||||||
this.form = {
|
|
||||||
username: undefined,
|
|
||||||
password: undefined,
|
|
||||||
name: undefined,
|
|
||||||
phone: undefined,
|
|
||||||
emailAddress: undefined
|
|
||||||
}
|
|
||||||
this.updateForm = {
|
|
||||||
username: undefined,
|
|
||||||
name: undefined,
|
|
||||||
phone: undefined,
|
|
||||||
emailAddress: undefined
|
|
||||||
}
|
|
||||||
this.updateRoleForm = {
|
|
||||||
tenantId: undefined,
|
|
||||||
userId: undefined,
|
|
||||||
roleIds: undefined
|
|
||||||
}
|
|
||||||
this.updateTenantForm = {
|
|
||||||
tenantIds: undefined,
|
|
||||||
userId: undefined
|
|
||||||
}
|
|
||||||
this.resetForm('form')
|
|
||||||
this.resetForm('updateForm')
|
|
||||||
this.resetForm('updateRoleForm')
|
|
||||||
this.resetForm('updateTenantForm')
|
|
||||||
},
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
handleQuery() {
|
|
||||||
this.queryParams.pageNum = 1
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
resetQuery() {
|
|
||||||
this.resetForm('queryForm')
|
|
||||||
this.handleQuery()
|
|
||||||
},
|
|
||||||
/** 新增按钮操作 */
|
|
||||||
handleAdd(row) {
|
|
||||||
this.reset()
|
|
||||||
this.open = true
|
|
||||||
this.title = '添加用户'
|
|
||||||
},
|
|
||||||
// 多选框选中数据
|
|
||||||
handleSelectionChange(selection) {
|
|
||||||
this.ids = selection.map(item => item.userId)
|
|
||||||
this.single = selection.length !== 1
|
|
||||||
this.multiple = !selection.length
|
|
||||||
},
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
handleUpdate(row) {
|
|
||||||
this.reset()
|
|
||||||
getUser(row.userId || this.ids).then(response => {
|
|
||||||
this.updateForm = response.data
|
|
||||||
this.openUpdate = true
|
|
||||||
this.title = '修改用户'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 提交按钮 */
|
|
||||||
submitForm: function() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
addUser(this.form).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('新增成功')
|
|
||||||
this.open = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
submitFormForUpdate: function() {
|
|
||||||
this.$refs['updateForm'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
updateUser(this.updateForm).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
this.openUpdate = false
|
|
||||||
this.getList()
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
handleDelete(row) {
|
|
||||||
const id = row.userId || this.ids
|
|
||||||
this.$confirm('是否确认删除?', '警告', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(function() {
|
|
||||||
return delUser(id)
|
|
||||||
}).then((response) => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.getList()
|
|
||||||
this.msgSuccess('删除成功')
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}).catch(function() {})
|
|
||||||
},
|
|
||||||
handleResetPwd(row) {
|
|
||||||
this.$prompt('请输入"' + row.username + '"的新密码', '提示', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
inputPattern: /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{1,})(?=.*[a-z]{1,})(?=.*[!@#$%^&*?\(\)]).*$/,
|
|
||||||
inputErrorMessage: '密码最少6位,包含大小写字母和特殊字符'
|
|
||||||
}).then(({ value }) => {
|
|
||||||
resetUserPwd(row.userId, value).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功,新密码是:' + value)
|
|
||||||
} else {
|
|
||||||
this.msgError(response.msg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}).catch(() => {})
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 变更角色
|
|
||||||
* @param row
|
|
||||||
*/
|
|
||||||
handleUpdateRole(row) {
|
|
||||||
this.reset()
|
|
||||||
this.updateRoleForm.userId = row.userId
|
|
||||||
userTenantSelectLimitSelf(row.userId).then(response => {
|
|
||||||
this.tenantOptions = response.data
|
|
||||||
this.openUpdateRole = true
|
|
||||||
this.title = '修改用户角色'
|
|
||||||
this.$nextTick(() => {
|
|
||||||
if (this.tenantOptions.length > 0) {
|
|
||||||
this.updateRoleForm.tenantId = this.tenantOptions[0].tenantId
|
|
||||||
this.tenantChange(this.updateRoleForm.tenantId)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
tenantChange(tenant) {
|
|
||||||
roleTreeSelect().then(response => {
|
|
||||||
this.roleOptions = response.data
|
|
||||||
userRoleIdList(this.updateRoleForm.userId, tenant).then(res => {
|
|
||||||
this.$refs.role.setCheckedKeys(res.data)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 所有菜单节点数据
|
|
||||||
getRoleAllCheckedKeys() {
|
|
||||||
// 半选中的菜单节点
|
|
||||||
const halfCheckedKeys = this.$refs.role.getHalfCheckedKeys()
|
|
||||||
// 目前被选中的菜单节点
|
|
||||||
const checkedKeys = this.$refs.role.getCheckedKeys()
|
|
||||||
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys)
|
|
||||||
return checkedKeys
|
|
||||||
},
|
|
||||||
submitFormForRoleUpdate() {
|
|
||||||
this.updateRoleForm.roleIds = this.getRoleAllCheckedKeys()
|
|
||||||
changeUserRole(this.updateRoleForm).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('操作成功')
|
|
||||||
if (this.tenantOptions.length === 1) {
|
|
||||||
this.openUpdateRole = false
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.msgError(response.msg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 变更租户
|
|
||||||
* @param row
|
|
||||||
*/
|
|
||||||
handleUpdateTenant(row) {
|
|
||||||
this.reset()
|
|
||||||
this.updateTenantForm.userId = row.userId
|
|
||||||
tenantTreeSelect().then(response => {
|
|
||||||
this.allTenantOptions = response.data
|
|
||||||
this.title = '修改用户角色'
|
|
||||||
this.openUpdateTenant = true
|
|
||||||
})
|
|
||||||
userTenantSelect(row.userId).then(res => {
|
|
||||||
const userTenant = res.data
|
|
||||||
const tenantIds = []
|
|
||||||
for (let i = 0; i < userTenant.length; i++) {
|
|
||||||
tenantIds.push(userTenant[i].tenantId)
|
|
||||||
}
|
|
||||||
this.updateTenantForm.tenantIds = tenantIds
|
|
||||||
})
|
|
||||||
},
|
|
||||||
submitFormForTenantUpdate() {
|
|
||||||
changeUserTenant(this.updateTenantForm).then(res => {
|
|
||||||
if (res.respCode === '0000') {
|
|
||||||
this.msgSuccess('操作成功')
|
|
||||||
this.openUpdateTenant = false
|
|
||||||
} else {
|
|
||||||
this.msgError(res.msg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,92 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container bg-grey">
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="7" :xs="24">
|
|
||||||
<el-card class="box-card">
|
|
||||||
<div slot="header" class="clearfix">
|
|
||||||
<span>个人信息</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div class="text-center">
|
|
||||||
<userAvatar :user="user" />
|
|
||||||
</div>
|
|
||||||
<ul class="list-group list-group-striped">
|
|
||||||
<li class="list-group-item">
|
|
||||||
<svg-icon icon-class="user" /> 用户名称
|
|
||||||
<div class="pull-right">{{ user.username }}</div>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item">
|
|
||||||
<svg-icon icon-class="user" /> 姓名
|
|
||||||
<div class="pull-right">{{ user.name }}</div>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item">
|
|
||||||
<svg-icon icon-class="phone" /> 手机号码
|
|
||||||
<div class="pull-right">{{ user.phone }}</div>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item">
|
|
||||||
<svg-icon icon-class="email" /> 邮箱
|
|
||||||
<div class="pull-right">{{ user.emailAddress }}</div>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item">
|
|
||||||
<svg-icon icon-class="tree" /> 所属部门
|
|
||||||
<div v-if="user.deptName" class="pull-right">{{ user.deptName }}</div>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item">
|
|
||||||
<svg-icon icon-class="date" /> 创建日期
|
|
||||||
<div class="pull-right">{{ parseTime(user.createDate) }}</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="17" :xs="24">
|
|
||||||
<el-card>
|
|
||||||
<div slot="header" class="clearfix">
|
|
||||||
<span>基本资料</span>
|
|
||||||
</div>
|
|
||||||
<el-tabs v-model="activeTab">
|
|
||||||
<el-tab-pane label="基本资料" name="userInfo">
|
|
||||||
<userInfo :user="user" />
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="修改密码" name="resetPwd">
|
|
||||||
<resetPwd :user="user" />
|
|
||||||
</el-tab-pane>
|
|
||||||
</el-tabs>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import userAvatar from './userAvatar'
|
|
||||||
import userInfo from './userInfo'
|
|
||||||
import resetPwd from './resetPwd'
|
|
||||||
import { getUserProfile } from '@/api/school/system/user'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'Profile',
|
|
||||||
components: { userAvatar, userInfo, resetPwd },
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
user: {},
|
|
||||||
activeTab: 'userInfo'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.getUser()
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getUser() {
|
|
||||||
getUserProfile().then(response => {
|
|
||||||
this.user = response.data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.app-container{
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,88 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
|
|
||||||
<el-form-item label="旧密码" prop="oldPassword">
|
|
||||||
<el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="新密码" prop="newPassword">
|
|
||||||
<el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="确认密码" prop="confirmPassword">
|
|
||||||
<el-input v-model="user.confirmPassword" placeholder="请确认密码" type="password" show-password />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" size="mini" @click="submit">保存</el-button>
|
|
||||||
<el-button type="danger" size="mini" @click="close">关闭</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { updateUserPwd } from '@/api/school/system/user'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
const validatePass = (rule, value, callback) => {
|
|
||||||
const pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{1,})(?=.*[a-z]{1,})(?=.*[!@#$%^&*?\(\)]).*$/
|
|
||||||
if (value === undefined || value === '') {
|
|
||||||
callback(new Error('请输入密码'))
|
|
||||||
} else if (!pattern.test(value)) {
|
|
||||||
callback(new Error('最少6位,包含大小写字母和特殊字符'))
|
|
||||||
} else {
|
|
||||||
if (this.user.confirmPassword !== '' && this.user.confirmPassword !== undefined) {
|
|
||||||
this.$refs.form.validateField('confirmPassword')
|
|
||||||
}
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const validateCheckPass = (rule, value, callback) => {
|
|
||||||
if (value === undefined || value === '') {
|
|
||||||
callback(new Error('请再次输入密码'))
|
|
||||||
} else if (value !== this.user.newPassword) {
|
|
||||||
callback(new Error('两次输入密码不一致!'))
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
user: {
|
|
||||||
oldPassword: undefined,
|
|
||||||
newPassword: undefined,
|
|
||||||
confirmPassword: undefined
|
|
||||||
},
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
oldPassword: [
|
|
||||||
{ required: true, message: '旧密码不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
newPassword: [
|
|
||||||
{ validator: validatePass, trigger: 'blur' }
|
|
||||||
],
|
|
||||||
confirmPassword: [
|
|
||||||
{ validator: validateCheckPass, trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
submit() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
updateUserPwd(this.user).then(
|
|
||||||
response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功,请牢记您的新密码:' + this.user.newPassword)
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
close() {
|
|
||||||
this.$store.dispatch('tagsView/delView', this.$route)
|
|
||||||
this.$router.push({ path: '/' })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,77 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
|
|
||||||
<el-form-item label="用户昵称" prop="name">
|
|
||||||
<el-input v-model="user.name" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="手机号码" prop="phone">
|
|
||||||
<el-input v-model="user.phone" maxlength="11" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="邮箱" prop="emailAddress">
|
|
||||||
<el-input v-model="user.emailAddress" maxlength="50" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" size="mini" @click="submit">保存</el-button>
|
|
||||||
<el-button type="danger" size="mini" @click="close">关闭</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { updateUserProfile } from '@/api/school/system/user'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
user: {
|
|
||||||
type: Object,
|
|
||||||
default: function() {
|
|
||||||
return {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
// 表单校验
|
|
||||||
rules: {
|
|
||||||
name: [
|
|
||||||
{ required: true, message: '名称不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
emailAddress: [
|
|
||||||
{ required: true, message: '邮箱地址不能为空', trigger: 'blur' },
|
|
||||||
{
|
|
||||||
type: 'email',
|
|
||||||
message: "'请输入正确的邮箱地址",
|
|
||||||
trigger: ['blur', 'change']
|
|
||||||
}
|
|
||||||
],
|
|
||||||
phone: [
|
|
||||||
{ required: true, message: '手机号码不能为空', trigger: 'blur' },
|
|
||||||
{
|
|
||||||
pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
|
|
||||||
message: '请输入正确的手机号码',
|
|
||||||
trigger: 'blur'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
submit() {
|
|
||||||
this.$refs['form'].validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
updateUserProfile(this.user).then(response => {
|
|
||||||
if (response.respCode === '0000') {
|
|
||||||
this.msgSuccess('修改成功')
|
|
||||||
} else {
|
|
||||||
this.msgError(response.respMsg)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
close() {
|
|
||||||
this.$store.dispatch('tagsView/delView', this.$route)
|
|
||||||
this.$router.push({ path: '/' })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||