commit:权限模块新增分配详情功能

commit:修改前端样式
This commit is contained in:
Jerry
2020-11-21 11:56:49 +08:00
parent ab470fa0d3
commit f0099087fb
298 changed files with 242157 additions and 1527 deletions

View File

@@ -34,7 +34,7 @@
<el-scrollbar class="custom-scroll" style="height: calc(620px - 50px);">
<el-row :gutter="20">
<el-col class="table-box" :span="24">
<el-table ref="StudentClass" :data="formClass.StudentClass.impl.dataList" size="mini" @sort-change="formClass.StudentClass.impl.onSortChange"
<el-table ref="studentClass" :data="formClass.StudentClass.impl.dataList" size="mini" @sort-change="formClass.StudentClass.impl.onSortChange"
header-cell-class-name="table-header-gray"
highlight-current-row @current-change="formClass.StudentClass.impl.currentRowChange">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formClass.StudentClass.impl.getTableIndex" />
@@ -92,7 +92,7 @@
<el-scrollbar class="custom-scroll" style="height: calc(300px - 50px);">
<el-row :gutter="20">
<el-col class="table-box" :span="24">
<el-table ref="Course" :data="formClass.Course.impl.dataList" size="mini" @sort-change="formClass.Course.impl.onSortChange"
<el-table ref="course" :data="formClass.Course.impl.dataList" size="mini" @sort-change="formClass.Course.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formClass.Course.impl.getTableIndex" />
<el-table-column label="课程名称" prop="courseName">
@@ -140,7 +140,7 @@
<el-scrollbar class="custom-scroll" style="height: calc(300px - 50px);">
<el-row :gutter="20">
<el-col class="table-box" :span="24">
<el-table ref="Student" :data="formClass.Student.impl.dataList" size="mini" @sort-change="formClass.Student.impl.onSortChange"
<el-table ref="student" :data="formClass.Student.impl.dataList" size="mini" @sort-change="formClass.Student.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formClass.Student.impl.getTableIndex" />
<el-table-column label="学生姓名" prop="studentName">
@@ -234,11 +234,14 @@ export default {
schoolId: undefined,
className: undefined
},
classCourseCard: {
isInit: false
},
schoolId: {
impl: new DropdownWidget(this.loadSchoolIdDropdownList)
},
classCourseCard: {
isInit: false
Student: {
impl: new TableWidget(this.loadStudentData, this.loadStudentVerify, true, false)
},
StudentClass: {
impl: new TableWidget(this.loadStudentClassData, this.loadStudentClassVerify, true, true, 'createTime', 1)
@@ -246,9 +249,6 @@ export default {
Course: {
impl: new TableWidget(this.loadCourseData, this.loadCourseVerify, true, false, 'createTime', 1)
},
Student: {
impl: new TableWidget(this.loadStudentData, this.loadStudentVerify, true, false)
},
classStudentCard: {
isInit: false
},
@@ -263,6 +263,38 @@ export default {
}
},
methods: {
/**
* 班级学生数据获取函数返回Promise
*/
loadStudentData (params) {
if (
(this.formClass.StudentClass.impl.currentRow || {}).classId == null
) {
this.formClass.Student.impl.clearTable();
return Promise.reject();
}
if (params == null) params = {};
params = {
...params,
classId: (this.formClass.StudentClass.impl.currentRow || {}).classId
}
return new Promise((resolve, reject) => {
StudentClassController.listClassStudent(this, params).then(res => {
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 班级学生数据获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadStudentVerify () {
return true;
},
/**
* 班级数据数据获取函数返回Promise
*/
@@ -305,8 +337,10 @@ export default {
* 班级课程数据获取函数返回Promise
*/
loadCourseData (params) {
if (this.formClass.StudentClass.impl.currentRow == null) {
this.formAdvanceClass.Course.impl.clearTable();
if (
(this.formClass.StudentClass.impl.currentRow || {}).classId == null
) {
this.formClass.Course.impl.clearTable();
return Promise.reject();
}
if (params == null) params = {};
@@ -331,36 +365,6 @@ export default {
loadCourseVerify () {
return true;
},
/**
* 班级学生数据获取函数返回Promise
*/
loadStudentData (params) {
if (this.formClass.StudentClass.impl.currentRow == null) {
this.formAdvanceClass.Student.impl.clearTable();
return Promise.reject();
}
if (params == null) params = {};
params = {
...params,
classId: (this.formClass.StudentClass.impl.currentRow || {}).classId
}
return new Promise((resolve, reject) => {
StudentClassController.listClassStudent(this, params).then(res => {
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 班级学生数据获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadStudentVerify () {
return true;
},
/**
* 所属校区下拉数据获取函数
*/
@@ -419,6 +423,11 @@ export default {
* 更新班级管理
*/
refreshFormClass (reloadData = false) {
if (reloadData) {
this.formClass.Student.impl.refreshTable(true, 1);
} else {
this.formClass.Student.impl.refreshTable();
}
if (reloadData) {
this.formClass.StudentClass.impl.refreshTable(true, 1);
} else {
@@ -429,11 +438,6 @@ export default {
} else {
this.formClass.Course.impl.refreshTable();
}
if (reloadData) {
this.formClass.Student.impl.refreshTable(true, 1);
} else {
this.formClass.Student.impl.refreshTable();
}
if (!this.formClass.isInit) {
// 初始化下拉数据
}
@@ -457,6 +461,12 @@ export default {
* 删除
*/
onDeleteClick (row) {
if (
row.classId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
classId: row.classId
};
@@ -472,6 +482,13 @@ export default {
* 移除
*/
onDeleteClassCourseClick (row) {
if (
(this.formClass.StudentClass.impl.currentRow || {}).classId == null ||
row.courseId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
classId: (this.formClass.StudentClass.impl.currentRow || {}).classId,
courseId: row.courseId
@@ -488,6 +505,13 @@ export default {
* 移除
*/
onDeleteClassStudentClick (row) {
if (
(this.formClass.StudentClass.impl.currentRow || {}).classId == null ||
row.studentId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
classId: (this.formClass.StudentClass.impl.currentRow || {}).classId,
studentId: row.studentId
@@ -539,6 +563,34 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
StudentClass: {
classId: undefined,
className: undefined,
schoolId: undefined,
leaderId: undefined,
finishClassHour: undefined,
classLevel: undefined,
createUserId: undefined,
createTime: undefined,
status: undefined,
course: {
classCourse: {
classId: undefined,
courseId: undefined,
courseOrder: undefined
}
},
student: {
},
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormClass();
}
@@ -564,8 +616,8 @@ export default {
// 班级数据选择行数据变化
'formClass.StudentClass.impl.currentRow': {
handler (newValue) {
this.formClass.Course.impl.refreshTable(true, 1);
this.formClass.Student.impl.refreshTable(true, 1);
this.formClass.Course.impl.refreshTable(true, 1);
},
immediate: true
}

View File

@@ -39,7 +39,7 @@
</el-form>
<el-row>
<el-col :span="24">
<el-table ref="Course" :data="formCourse.Course.impl.dataList" size="mini" @sort-change="formCourse.Course.impl.onSortChange"
<el-table ref="course" :data="formCourse.Course.impl.dataList" size="mini" @sort-change="formCourse.Course.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formCourse.Course.impl.getTableIndex" />
<el-table-column label="课程名称" prop="courseName">
@@ -281,6 +281,12 @@ export default {
* 删除
*/
onDeleteClick (row) {
if (
row.courseId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
courseId: row.courseId
};

View File

@@ -301,6 +301,26 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
CourseTransStats: {
statsId: undefined,
statsDate: undefined,
subjectId: undefined,
gradeId: undefined,
gradeName: undefined,
courseId: undefined,
courseName: undefined,
studentAttendCount: undefined,
studentFlowerAmount: undefined,
studentFlowerCount: undefined,
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormCourseStats();
}

View File

@@ -223,6 +223,16 @@ export default {
onAddClick () {
this.$refs.formCreateClass.validate((valid) => {
if (!valid) return;
if (
this.formData.StudentClass.className == null ||
this.formData.StudentClass.schoolId == null ||
this.formData.StudentClass.leaderId == null ||
this.formData.StudentClass.finishClassHour == null ||
this.formData.StudentClass.classLevel == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
studentClass: {
className: this.formData.StudentClass.className,
@@ -241,6 +251,34 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
StudentClass: {
classId: undefined,
className: undefined,
schoolId: undefined,
leaderId: undefined,
finishClassHour: undefined,
classLevel: undefined,
createUserId: undefined,
createTime: undefined,
status: undefined,
course: {
classCourse: {
classId: undefined,
courseId: undefined,
courseOrder: undefined
}
},
student: {
},
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormCreateClass();
}

View File

@@ -249,6 +249,18 @@ export default {
onAddClick () {
this.$refs.formCreateCourse.validate((valid) => {
if (!valid) return;
if (
this.formData.Course.courseName == null ||
this.formData.Course.price == null ||
this.formData.Course.difficulty == null ||
this.formData.Course.gradeId == null ||
this.formData.Course.subjectId == null ||
this.formData.Course.classHour == null ||
this.formData.Course.pictureUrl == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
course: {
courseName: this.formData.Course.courseName,
@@ -297,6 +309,28 @@ export default {
onUploadLimit (files, fileList) {
this.$message.error('已经超出最大上传个数限制');
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
Course: {
courseId: undefined,
courseName: undefined,
price: undefined,
description: undefined,
difficulty: undefined,
gradeId: undefined,
subjectId: undefined,
classHour: undefined,
pictureUrl: undefined,
createUserId: undefined,
createTime: undefined,
updateTime: undefined,
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormCreateCourse();
}

View File

@@ -168,6 +168,14 @@ export default {
onAddClick () {
this.$refs.formCreateSchool.validate((valid) => {
if (!valid) return;
if (
this.formData.SchoolInfo.schoolName == null ||
this.formData.SchoolInfo.provinceId == null ||
this.formData.SchoolInfo.cityId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
schoolInfo: {
schoolName: this.formData.SchoolInfo.schoolName,
@@ -184,6 +192,20 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
SchoolInfo: {
schoolId: undefined,
schoolName: undefined,
provinceId: undefined,
cityId: undefined,
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormCreateSchool();
}

View File

@@ -390,6 +390,21 @@ export default {
onAddClick () {
this.$refs.formCreateStudent.validate((valid) => {
if (!valid) return;
if (
this.formData.Student.loginMobile == null ||
this.formData.Student.studentName == null ||
this.formData.Student.provinceId == null ||
this.formData.Student.cityId == null ||
this.formData.Student.districtId == null ||
this.formData.Student.gender == null ||
this.formData.Student.birthday == null ||
this.formData.Student.experienceLevel == null ||
this.formData.Student.gradeId == null ||
this.formData.Student.schoolId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
student: {
loginMobile: this.formData.Student.loginMobile,
@@ -416,6 +431,31 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
Student: {
studentId: undefined,
loginMobile: undefined,
studentName: undefined,
provinceId: undefined,
cityId: undefined,
districtId: undefined,
gender: undefined,
birthday: undefined,
experienceLevel: undefined,
totalCoin: undefined,
leftCoin: undefined,
gradeId: undefined,
schoolId: undefined,
registerTime: undefined,
status: undefined,
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormCreateStudent();
}

View File

@@ -228,6 +228,17 @@ export default {
onUpdateClick () {
this.$refs.formEditClass.validate((valid) => {
if (!valid) return;
if (
this.classId == null ||
this.formData.StudentClass.className == null ||
this.formData.StudentClass.schoolId == null ||
this.formData.StudentClass.leaderId == null ||
this.formData.StudentClass.finishClassHour == null ||
this.formData.StudentClass.classLevel == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
studentClass: {
classId: this.classId,
@@ -251,14 +262,27 @@ export default {
loadStudentClassData () {
return new Promise((resolve, reject) => {
if (!this.formData.StudentClass.isDatasourceInit) {
if (
this.classId == null
) {
this.resetFormData();
reject();
return;
}
let params = {
classId: this.classId
};
StudentClassController.view(this, params).then(res => {
this.formData.StudentClass = {...res.data, isDatasourceInit: true};
if (this.formData.StudentClass.classLevelDictMap) this.formEditClass.classLevel.impl.dropdownList = [this.formData.StudentClass.classLevelDictMap];
if (this.formData.StudentClass.schoolIdDictMap) this.formEditClass.schoolId.impl.dropdownList = [this.formData.StudentClass.schoolIdDictMap];
if (this.formData.StudentClass.leaderIdDictMap) this.formEditClass.leaderId.impl.dropdownList = [this.formData.StudentClass.leaderIdDictMap];
if (this.formData.StudentClass.classLevelDictMap && this.formEditClass.classLevel.impl.dirty) {
this.formEditClass.classLevel.impl.dropdownList = [this.formData.StudentClass.classLevelDictMap];
}
if (this.formData.StudentClass.schoolIdDictMap && this.formEditClass.schoolId.impl.dirty) {
this.formEditClass.schoolId.impl.dropdownList = [this.formData.StudentClass.schoolIdDictMap];
}
if (this.formData.StudentClass.leaderIdDictMap && this.formEditClass.leaderId.impl.dirty) {
this.formEditClass.leaderId.impl.dropdownList = [this.formData.StudentClass.leaderIdDictMap];
}
resolve();
}).catch(e => {
reject();
@@ -270,6 +294,34 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
StudentClass: {
classId: undefined,
className: undefined,
schoolId: undefined,
leaderId: undefined,
finishClassHour: undefined,
classLevel: undefined,
createUserId: undefined,
createTime: undefined,
status: undefined,
course: {
classCourse: {
classId: undefined,
courseId: undefined,
courseOrder: undefined
}
},
student: {
},
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormEditClass();
}

View File

@@ -108,6 +108,14 @@ export default {
* 保存
*/
onUpdateClassCourseClick () {
if (
this.classId == null ||
this.courseId == null ||
this.formData.StudentClass.course.classCourse.courseOrder == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
classCourse: {
classId: this.classId,
@@ -127,6 +135,14 @@ export default {
loadStudentClassData () {
return new Promise((resolve, reject) => {
if (!this.formData.StudentClass.isDatasourceInit) {
if (
this.classId == null ||
this.courseId == null
) {
this.resetFormData();
reject();
return;
}
let params = {
classId: this.classId,
courseId: this.courseId
@@ -144,6 +160,34 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
StudentClass: {
classId: undefined,
className: undefined,
schoolId: undefined,
leaderId: undefined,
finishClassHour: undefined,
classLevel: undefined,
createUserId: undefined,
createTime: undefined,
status: undefined,
course: {
classCourse: {
classId: undefined,
courseId: undefined,
courseOrder: undefined
}
},
student: {
},
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormEditClassCourseOrder();
}

View File

@@ -254,6 +254,19 @@ export default {
onUpdateClick () {
this.$refs.formEditCourse.validate((valid) => {
if (!valid) return;
if (
this.courseId == null ||
this.formData.Course.courseName == null ||
this.formData.Course.price == null ||
this.formData.Course.difficulty == null ||
this.formData.Course.gradeId == null ||
this.formData.Course.subjectId == null ||
this.formData.Course.classHour == null ||
this.formData.Course.pictureUrl == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
course: {
courseId: this.courseId,
@@ -280,14 +293,27 @@ export default {
loadCourseData () {
return new Promise((resolve, reject) => {
if (!this.formData.Course.isDatasourceInit) {
if (
this.courseId == null
) {
this.resetFormData();
reject();
return;
}
let params = {
courseId: this.courseId
};
CourseController.view(this, params).then(res => {
this.formData.Course = {...res.data, isDatasourceInit: true};
if (this.formData.Course.difficultyDictMap) this.formEditCourse.difficulty.impl.dropdownList = [this.formData.Course.difficultyDictMap];
if (this.formData.Course.gradeIdDictMap) this.formEditCourse.gradeId.impl.dropdownList = [this.formData.Course.gradeIdDictMap];
if (this.formData.Course.subjectIdDictMap) this.formEditCourse.subjectId.impl.dropdownList = [this.formData.Course.subjectIdDictMap];
if (this.formData.Course.difficultyDictMap && this.formEditCourse.difficulty.impl.dirty) {
this.formEditCourse.difficulty.impl.dropdownList = [this.formData.Course.difficultyDictMap];
}
if (this.formData.Course.gradeIdDictMap && this.formEditCourse.gradeId.impl.dirty) {
this.formEditCourse.gradeId.impl.dropdownList = [this.formData.Course.gradeIdDictMap];
}
if (this.formData.Course.subjectIdDictMap && this.formEditCourse.subjectId.impl.dirty) {
this.formEditCourse.subjectId.impl.dropdownList = [this.formData.Course.subjectIdDictMap];
}
let pictureUrlDownloadParams = {
courseId: this.formData.Course.courseId,
fieldName: 'pictureUrl',
@@ -332,6 +358,28 @@ export default {
onUploadLimit (files, fileList) {
this.$message.error('已经超出最大上传个数限制');
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
Course: {
courseId: undefined,
courseName: undefined,
price: undefined,
description: undefined,
difficulty: undefined,
gradeId: undefined,
subjectId: undefined,
classHour: undefined,
pictureUrl: undefined,
createUserId: undefined,
createTime: undefined,
updateTime: undefined,
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormEditCourse();
}

View File

@@ -173,6 +173,15 @@ export default {
onUpdateClick () {
this.$refs.formEditSchool.validate((valid) => {
if (!valid) return;
if (
this.schoolId == null ||
this.formData.SchoolInfo.schoolName == null ||
this.formData.SchoolInfo.provinceId == null ||
this.formData.SchoolInfo.cityId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
schoolInfo: {
schoolId: this.schoolId,
@@ -194,13 +203,24 @@ export default {
loadSchoolInfoData () {
return new Promise((resolve, reject) => {
if (!this.formData.SchoolInfo.isDatasourceInit) {
if (
this.schoolId == null
) {
this.resetFormData();
reject();
return;
}
let params = {
schoolId: this.schoolId
};
SchoolInfoController.view(this, params).then(res => {
this.formData.SchoolInfo = {...res.data, isDatasourceInit: true};
if (this.formData.SchoolInfo.provinceIdDictMap) this.formEditSchool.provinceId.impl.dropdownList = [this.formData.SchoolInfo.provinceIdDictMap];
if (this.formData.SchoolInfo.cityIdDictMap) this.formEditSchool.cityId.impl.dropdownList = [this.formData.SchoolInfo.cityIdDictMap];
if (this.formData.SchoolInfo.provinceIdDictMap && this.formEditSchool.provinceId.impl.dirty) {
this.formEditSchool.provinceId.impl.dropdownList = [this.formData.SchoolInfo.provinceIdDictMap];
}
if (this.formData.SchoolInfo.cityIdDictMap && this.formEditSchool.cityId.impl.dirty) {
this.formEditSchool.cityId.impl.dropdownList = [this.formData.SchoolInfo.cityIdDictMap];
}
resolve();
}).catch(e => {
reject();
@@ -212,6 +232,20 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
SchoolInfo: {
schoolId: undefined,
schoolName: undefined,
provinceId: undefined,
cityId: undefined,
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormEditSchool();
}

View File

@@ -451,6 +451,25 @@ export default {
onUpdateClick () {
this.$refs.formEditStudent.validate((valid) => {
if (!valid) return;
if (
this.studentId == null ||
this.formData.Student.loginMobile == null ||
this.formData.Student.studentName == null ||
this.formData.Student.provinceId == null ||
this.formData.Student.cityId == null ||
this.formData.Student.districtId == null ||
this.formData.Student.gender == null ||
this.formData.Student.birthday == null ||
this.formData.Student.experienceLevel == null ||
this.formData.Student.totalCoin == null ||
this.formData.Student.leftCoin == null ||
this.formData.Student.gradeId == null ||
this.formData.Student.schoolId == null ||
this.formData.Student.status == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
student: {
studentId: this.studentId,
@@ -482,19 +501,42 @@ export default {
loadStudentData () {
return new Promise((resolve, reject) => {
if (!this.formData.Student.isDatasourceInit) {
if (
this.studentId == null
) {
this.resetFormData();
reject();
return;
}
let params = {
studentId: this.studentId
};
StudentController.view(this, params).then(res => {
this.formData.Student = {...res.data, isDatasourceInit: true};
if (this.formData.Student.genderDictMap) this.formEditStudent.gender.impl.dropdownList = [this.formData.Student.genderDictMap];
if (this.formData.Student.gradeIdDictMap) this.formEditStudent.gradeId.impl.dropdownList = [this.formData.Student.gradeIdDictMap];
if (this.formData.Student.experienceLevelDictMap) this.formEditStudent.experienceLevel.impl.dropdownList = [this.formData.Student.experienceLevelDictMap];
if (this.formData.Student.provinceIdDictMap) this.formEditStudent.provinceId.impl.dropdownList = [this.formData.Student.provinceIdDictMap];
if (this.formData.Student.cityIdDictMap) this.formEditStudent.cityId.impl.dropdownList = [this.formData.Student.cityIdDictMap];
if (this.formData.Student.districtIdDictMap) this.formEditStudent.districtId.impl.dropdownList = [this.formData.Student.districtIdDictMap];
if (this.formData.Student.schoolIdDictMap) this.formEditStudent.schoolId.impl.dropdownList = [this.formData.Student.schoolIdDictMap];
if (this.formData.Student.statusDictMap) this.formEditStudent.status.impl.dropdownList = [this.formData.Student.statusDictMap];
if (this.formData.Student.genderDictMap && this.formEditStudent.gender.impl.dirty) {
this.formEditStudent.gender.impl.dropdownList = [this.formData.Student.genderDictMap];
}
if (this.formData.Student.gradeIdDictMap && this.formEditStudent.gradeId.impl.dirty) {
this.formEditStudent.gradeId.impl.dropdownList = [this.formData.Student.gradeIdDictMap];
}
if (this.formData.Student.experienceLevelDictMap && this.formEditStudent.experienceLevel.impl.dirty) {
this.formEditStudent.experienceLevel.impl.dropdownList = [this.formData.Student.experienceLevelDictMap];
}
if (this.formData.Student.provinceIdDictMap && this.formEditStudent.provinceId.impl.dirty) {
this.formEditStudent.provinceId.impl.dropdownList = [this.formData.Student.provinceIdDictMap];
}
if (this.formData.Student.cityIdDictMap && this.formEditStudent.cityId.impl.dirty) {
this.formEditStudent.cityId.impl.dropdownList = [this.formData.Student.cityIdDictMap];
}
if (this.formData.Student.districtIdDictMap && this.formEditStudent.districtId.impl.dirty) {
this.formEditStudent.districtId.impl.dropdownList = [this.formData.Student.districtIdDictMap];
}
if (this.formData.Student.schoolIdDictMap && this.formEditStudent.schoolId.impl.dirty) {
this.formEditStudent.schoolId.impl.dropdownList = [this.formData.Student.schoolIdDictMap];
}
if (this.formData.Student.statusDictMap && this.formEditStudent.status.impl.dirty) {
this.formEditStudent.status.impl.dropdownList = [this.formData.Student.statusDictMap];
}
resolve();
}).catch(e => {
reject();
@@ -506,6 +548,31 @@ export default {
},
initFormData () {
},
/**
* 重置表单数据
*/
resetFormData () {
this.formData = {
Student: {
studentId: undefined,
loginMobile: undefined,
studentName: undefined,
provinceId: undefined,
cityId: undefined,
districtId: undefined,
gender: undefined,
birthday: undefined,
experienceLevel: undefined,
totalCoin: undefined,
leftCoin: undefined,
gradeId: undefined,
schoolId: undefined,
registerTime: undefined,
status: undefined,
isDatasourceInit: false
}
}
},
formInit () {
this.refreshFormEditStudent();
}

View File

@@ -31,7 +31,7 @@
</el-form>
<el-row>
<el-col :span="24">
<el-table ref="SchoolInfo" :data="formSchool.SchoolInfo.impl.dataList" size="mini" @sort-change="formSchool.SchoolInfo.impl.onSortChange"
<el-table ref="schoolInfo" :data="formSchool.SchoolInfo.impl.dataList" size="mini" @sort-change="formSchool.SchoolInfo.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formSchool.SchoolInfo.impl.getTableIndex" />
<el-table-column label="学校名称" prop="schoolName">
@@ -236,6 +236,12 @@ export default {
* 删除
*/
onDeleteClick (row) {
if (
row.schoolId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
schoolId: row.schoolId
};

View File

@@ -147,6 +147,12 @@ export default {
* 班级课程数据获取函数返回Promise
*/
loadCourseData (params) {
if (
this.classId == null
) {
this.formSetClassCourse.Course.impl.clearTable();
return Promise.reject();
}
if (params == null) params = {};
params = {
...params,
@@ -251,6 +257,12 @@ export default {
* 添加
*/
onAddClassCourseClick () {
if (
this.classId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
classId: this.classId,
classCourseList: this.tableSelectRowList.map((item) => {

View File

@@ -115,6 +115,12 @@ export default {
* 班级学生数据获取函数返回Promise
*/
loadStudentData (params) {
if (
this.classId == null
) {
this.formSetClassStudent.Student.impl.clearTable();
return Promise.reject();
}
if (params == null) params = {};
params = {
...params,
@@ -177,6 +183,12 @@ export default {
* 添加
*/
onAddClassStudentClick () {
if (
this.classId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
classId: this.classId,
classStudentList: this.tableSelectRowList.map((item) => {

View File

@@ -43,7 +43,7 @@
</el-form>
<el-row>
<el-col :span="24">
<el-table ref="Student" :data="formStudent.Student.impl.dataList" size="mini" @sort-change="formStudent.Student.impl.onSortChange"
<el-table ref="student" :data="formStudent.Student.impl.dataList" size="mini" @sort-change="formStudent.Student.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formStudent.Student.impl.getTableIndex" />
<el-table-column label="学生姓名" prop="studentName">
@@ -266,6 +266,12 @@ export default {
* 删除
*/
onDeleteClick (row) {
if (
row.studentId == null
) {
this.$message.error('请求失败,发现必填参数为空!');
return;
}
let params = {
studentId: row.studentId
};

View File

@@ -28,7 +28,7 @@
</el-form>
<el-row>
<el-col :span="24">
<el-table ref="StudentActionTrans" :data="formStudentActionDetail.StudentActionTrans.impl.dataList" size="mini" @sort-change="formStudentActionDetail.StudentActionTrans.impl.onSortChange"
<el-table ref="studentActionTrans" :data="formStudentActionDetail.StudentActionTrans.impl.dataList" size="mini" @sort-change="formStudentActionDetail.StudentActionTrans.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formStudentActionDetail.StudentActionTrans.impl.getTableIndex" />
<el-table-column label="学生名称" prop="studentName">

View File

@@ -20,7 +20,7 @@
</el-form>
<el-row>
<el-col :span="24">
<el-table ref="StudentActionStats" :data="formStudentActionStats.StudentActionStats.impl.dataList" size="mini" @sort-change="formStudentActionStats.StudentActionStats.impl.onSortChange"
<el-table ref="studentActionStats" :data="formStudentActionStats.StudentActionStats.impl.dataList" size="mini" @sort-change="formStudentActionStats.StudentActionStats.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formStudentActionStats.StudentActionStats.impl.getTableIndex" />
<el-table-column label="统计日期">

View File

@@ -29,12 +29,12 @@ export default {
},
methods: {
getBreadcrumb () {
this.menuPathList = this.getCurrentMenuPath;
this.menuPathList = this.getMultiColumn ? null : this.getCurrentMenuPath;
},
...mapMutations(['setCurrentMenuId'])
},
computed: {
...mapGetters(['getCurrentMenuPath'])
...mapGetters(['getCurrentMenuPath', 'getMultiColumn'])
}
};
</script>

View File

@@ -6,18 +6,21 @@
<el-col :span="24">
<el-form-item label="旧密码" prop="oldPassword">
<el-input class="input-item" v-model.trim="formData.oldPassword"
type="password" show-password
:clearable="true" placeholder="旧密码" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="新密码" prop="password">
<el-input class="input-item" v-model.trim="formData.password"
type="password" show-password
:clearable="true" placeholder="新密码" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="新密码确认" prop="repeatPassword">
<el-input class="input-item" v-model.trim="formData.repeatPassword"
type="password" show-password
:clearable="true" placeholder="新密码确认" />
</el-form-item>
</el-col>

View File

@@ -1,13 +1,13 @@
<template>
<div style="height: 100%; position: relative;" class="sidebar-bg">
<div class="sidebar-title">
<img :src="logoImage" style="margin: 20px 60px 10px 60px; width: 80px; height: 80px; border-radius: 50%;" />
<img :src="logoImage" style="width: 40px; height: 40px; border-radius: 50%;" />
<p class="sidebar-title-text">{{getProjectName()}}</p>
</div>
<div style="height: 100%; padding-bottom: 160px;">
<div style="height: 100%; padding-bottom: 60px;">
<el-scrollbar wrap-class="scrollbar_dropdown__wrap" style="height: 100%;">
<el-menu ref="menu" mode="vertical" :default-active="getCurrentMenuId" :unique-opened="true" @select="selectMenu"
text-color="white" active-text-color="white" :collapse="getCollapse" >
:active-text-color="activeTextColor" :collapse="getCollapse" >
<template v-for="menu in getMenuList">
<menu-item :menu="menu" :key="menu.menuId" />
</template>
@@ -35,6 +35,9 @@ export default {
'menu-item': menuItem
},
computed: {
activeTextColor () {
return undefined;
},
getCollapseStyle () {
return [{
left: this.collapseLeft

View File

@@ -1,9 +1,8 @@
<template>
<div class="tags-item">
<div style="height: 3px;" class="top" />
<span class="title" :style="{'padding-right': supportClose ? '5px' : '10px'}">{{title}}</span>
<i :class="{'el-icon-close close': !enterClose, 'el-icon-error': enterClose}" v-show="supportClose"
:style="{color: enterClose ? '#F56C6C' : '#333'}" @click.stop="onClose"
<span class="title">{{title}}</span>
<i :class="{'el-icon-close close': !enterClose, 'el-icon-error close hover-close': enterClose}"
v-if="supportClose" @click.stop="onClose"
@mouseenter="() => enterClose = true" @mouseleave="() => enterClose = false" />
</div>
</template>
@@ -24,7 +23,6 @@ export default {
},
methods: {
onClose () {
console.log('close-tag-item');
this.$emit('close');
}
}
@@ -32,39 +30,50 @@ export default {
</script>
<style lang="scss" scoped>
@import '@/assets/style/element-color.scss';
@import '@/assets/style/element-variables.scss';
.tags-item {
height: 40px;
line-height: 37px;
height: 30px;
line-height: 30px;
border: 1px solid $--border-color-extra-light;
border-radius: 3px;
box-sizing: border-box;
display: inline-block;
border-right: 1px solid #DCDFE6;
cursor: pointer;
background: white;
padding: 0px 20px;
color: $--color-text-primary;
}
.tags-item .title {
font-size: 13px;
color: #666
}
.close {
height: 28px;
line-height: 28px;
display: none;
}
.tags-item.active .close {
margin-left: 10px;
display: inline-block;
}
.close.hover-close {
color: $--color-text-secondary;
}
.tags-item:hover {
color: $--color-primary;
}
.tags-item.active {
color: $--color-primary;
border-color: $--color-primary-light-5;
background-color: $--color-primary-light-9;
}
.tags-item span {
margin-left: 10px;
}
.tags-item i {
margin-right: 10px;
}
.tags-item.active .top {
background: $--color-primary;
.tags-item + .tags-item {
margin-left: 5px;
}
</style>

View File

@@ -1,7 +1,7 @@
<template>
<div class="tags-panel">
<i class="el-icon-d-arrow-left arrow left" @click="beginPos > 0 && beginPos--" />
<i class="el-icon-d-arrow-right arrow right" @click="getEndTagPos >= panelWidth && beginPos++" />
<i class="el-icon-arrow-left arrow left" @click="beginPos > 0 && beginPos--" />
<i class="el-icon-arrow-right arrow right" @click="getEndTagPos >= panelWidth && beginPos++" />
<div class="main-panel">
<div class="scroll-box">
<TagItem class="item" title="主页" :class="{active: getCurrentMenuId == null}" v-show="0 >= beginPos" :supportClose="false"
@@ -123,7 +123,10 @@ export default {
let width = 0;
let childList = this.$children;
for (let i = this.beginPos; i < childList.length; i++) {
console.log(childList[i], childList[i].$el.offsetWidth);
width += childList[i].$el.offsetWidth;
// 间隔距离
width += 5;
if (width > this.panelWidth) {
break;
}
@@ -152,12 +155,12 @@ export default {
}
</script>
<style scoped>
<style lang="scss" scoped>
@import '@/assets/style/element-variables.scss';
.tags-panel {
height: 42px;
border-top: 1px solid #DCDFE6;
border-bottom: 1px solid #DCDFE6;
background: white;
box-shadow: 0px 1px 4px rgba(0,21,41,.08);
border-top: 1px solid $--border-color-extra-light;
}
.main-panel {
margin: 0px 30px;
@@ -165,11 +168,15 @@ export default {
.scroll-box {
overflow: hidden;
white-space: nowrap;
display: flex;
flex-wrap: nowrap;
align-items: center;
width: 100%;
height: 50px;
}
.arrow {
height: 40px;
line-height: 40px;
height: 50px;
line-height: 50px;
width: 30px;
text-align: center;
font-size: 14px;
@@ -177,8 +184,6 @@ export default {
z-index: 100;
background: white;
box-sizing: border-box;
border-left: 1px solid #DCDFE6;
border-right: 1px solid #DCDFE6;
}
.arrow.left {
float: left;
@@ -210,4 +215,5 @@ export default {
.contextmenu li:hover {
background: #eee;
}
</style>

View File

@@ -3,15 +3,15 @@
<el-aside width='200px' class="sidebar">
<side-bar style="overflow: hidden"></side-bar>
</el-aside>
<el-container style="background-color: rgb(235,235,235)">
<el-container style="background-color: #F5F8F9">
<el-header class="header">
<breadcrumb class="breadcrumb-container" style="flex-grow: 1;" />
<div class="menu-column" v-if="getMultiColumn">
<breadcrumb class="breadcrumb-container" />
<div class="menu-column" v-if="getMultiColumn" style="margin-left: 20px;">
<el-menu mode="horizontal" :default-active="getCurrentColumnId" @select="onColumnChange">
<el-menu-item v-for="column in getColumnList" :key="column.columnId" :index="column.columnId">{{column.columnName}}</el-menu-item>
</el-menu>
</div>
<div class="header-menu">
<div class="header-menu" style="flex-grow: 1;">
<el-dropdown class="user-dropdown" trigger="click" @command="handleCommand">
<span class="el-dropdown-link">{{getUserInfo.showName}}<i class="el-icon-arrow-down el-icon--right"></i>
</span>

View File

@@ -7,7 +7,7 @@
</div>
<el-scrollbar :style="{height: (getClientHeight - 184) + 'px'}" class="custom-scroll">
<el-tree :data="dictList" :props="{label: 'name'}" node-key="variableName" :highlight-current="true"
:current-node-key="dictList[0].variableName" @node-click="onDictChange">
:current-node-key="(dictList[0] || {}).variableName" @node-click="onDictChange">
<div class="module-node-item" slot-scope="{ data }">
<span style="padding-left: 24px;">{{data.name}}</span>
</div>
@@ -33,7 +33,7 @@
<el-row>
<el-col :span="24">
<el-table :data="getCurrentDictData" size="mini" header-cell-class-name="table-header-gray"
:height="(getClientHeight - 178) + 'px'">
:height="(getClientHeight - 178) + 'px'" row-key="id">
<el-table-column label="ID" prop="id" />
<el-table-column label="字典名称" prop="name" />
<el-table-column label="操作" width="150px">
@@ -51,7 +51,7 @@
<script>
import { mapGetters } from 'vuex';
import { findItemFromList } from '@/utils';
import { treeDataTranslate, findItemFromList } from '@/utils';
/* eslint-disable-next-line */
import { DictionaryController } from '@/api';
import editDict from '@/views/upms/formEditDict';
@@ -67,6 +67,8 @@ export default {
nameKey: 'gradeName',
idKey: 'gradeId',
deletedKey: 'gradeIds',
parentKey: '',
treeFlag: false,
listApi: DictionaryController.dictGrade,
addApi: DictionaryController.dictAddGrade,
deleteApi: DictionaryController.dictDeleteGrade,
@@ -83,7 +85,11 @@ export default {
updateDictData () {
this.currentDictDataList = [];
this.currentDict.listApi(this).then(res => {
this.currentDictDataList = res.getList();
if (this.currentDict.treeFlag) {
this.currentDictDataList = treeDataTranslate(res.getList(), 'id', 'parentId');
} else {
this.currentDictDataList = res.getList();
}
}).catch(e => {});
},
onDictChange (data) {
@@ -107,7 +113,8 @@ export default {
this.$dialog.show(`新建字典数据 - [${this.currentDict.name}]`, editDict, {
area: '500px'
}, {
dictInfo: this.currentDict
dictInfo: this.currentDict,
dictData: this.currentDict.treeFlag ? this.currentDictDataList : []
}).then(res => {
this.updateDictData();
}).catch(e => {});
@@ -117,7 +124,8 @@ export default {
area: '500px'
}, {
dictInfo: this.currentDict,
currentData: row
currentData: row,
dictData: this.currentDict.treeFlag ? this.currentDictDataList : []
}).then(res => {
this.updateDictData();
}).catch(e => {});

View File

@@ -1,11 +1,18 @@
<template>
<el-form ref="form" :model="formData" :rules="rules" label-width="80px" size="mini" label-position="right" @submit.native.prevent>
<el-row :gutter="20">
<el-form-item v-if="dictInfo.treeFlag" label="父字典">
<el-cascader style="width: 100%;"
:options="dictData" v-model="parentPath"
:props="{label: 'name', value: 'id'}" placeholder="请选择所属父字典"
:clearable="true" :change-on-select="true"
@change="onParentChange"
/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="字典名称" clearable />
</el-form-item>
</el-row>
<!-- 弹窗下发按钮栏必须设置class为dialog-btn-layer -->
<el-row type="flex" justify="end" class="dialog-btn-layer">
<el-button size="mini" @click="onCancel(false)" >取消</el-button>
<el-button type="primary" size="mini" @click="onSubmit">确定</el-button>
@@ -14,6 +21,8 @@
</template>
<script>
import { findTreeNodePath } from '@/utils';
export default {
name: 'DictEdit',
props: {
@@ -24,10 +33,17 @@ export default {
currentData: {
type: Object,
default: undefined
},
dictData: {
type: Array,
default: () => {
return []
}
}
},
data () {
return {
parentPath: [],
formData: {
name: undefined,
id: undefined
@@ -38,6 +54,13 @@ export default {
}
},
methods: {
onParentChange (values) {
if (Array.isArray(values) && values.length > 0) {
this.formData.parentId = values[values.length - 1];
} else {
this.formData.parentId = undefined;
}
},
onCancel (isSuccess = false) {
if (this.observer != null) {
this.observer.cancel(isSuccess);
@@ -49,6 +72,7 @@ export default {
let params = {};
params[this.dictInfo.variableName] = {};
params[this.dictInfo.variableName][this.dictInfo.nameKey] = this.formData.name;
params[this.dictInfo.variableName][this.dictInfo.parentKey] = this.formData.parentId;
if (this.formData.id == null) {
this.dictInfo.addApi(this, params).then(res => {
@@ -73,6 +97,10 @@ export default {
if (this.currentData != null) {
this.formData.id = this.currentData.id;
this.formData.name = this.currentData.name;
if (this.dictInfo.treeFlag && this.currentData.parentId != null && this.currentData.parentId !== '') {
this.formData.parentId = this.currentData.parentId;
this.parentPath = findTreeNodePath(this.dictData, this.formData.parentId, 'id');
}
}
}
}

View File

@@ -121,7 +121,8 @@ export default {
let tempList = [];
this.formData.menuIdList.forEach((item) => {
let tempMenu = findItemFromList(res.data, item, 'menuId');
if (tempMenu != null && tempMenu.menuType === this.SysMenuType.BUTTON) {
// 判断是否为叶子节点
if (tempMenu != null && (!Array.isArray(tempMenu.children) || tempMenu.children.length <= 0)) {
tempList.push(item);
}
});

View File

@@ -153,7 +153,7 @@ export default {
},
mounted () {
if (this.rowData != null) {
this.formData = {...this.rowData};
this.formData = {...this.rowData, dataPermIdList: [], roleIdList: []};
if (Array.isArray(this.formData.sysUserRoleList)) {
this.formData.roleIdList = this.formData.sysUserRoleList.map(item => item.roleId);
}

View File

@@ -1,416 +0,0 @@
<template>
<div>
<el-tabs tab-position="left" v-model="activeFragmentId" :before-leave="onFragmentChange">
<el-tab-pane label="角色查询" name="roleQuery" style="height: 300px;">
<el-form label-width="75px" size="mini" label-position="right" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="权限字">
<el-cascader class="filter-item" :options="roleQuery.SysPermCode.impl.dropdownList"
v-model="roleQuery.SysPermCode.value" size="mini"
:props="roleQuery.permCodeProps" placeholder="请选择权限字" clearable
@visible-change="roleQuery.SysPermCode.impl.onVisibleChange"
@change="onRoleQueryPermCodeChange" />
</el-form-item>
<el-form-item label="URL">
<el-input class="filter-item" v-model="roleQuery.formFilter.permUrl"
:clearable="true" placeholder="请输入URL" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshSysRoleQuery(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="roleQuery.SysRole.impl.dataList" size="mini" @sort-change="roleQuery.SysRole.impl.onSortChange"
header-cell-class-name="table-header-gray" :height="getTableHeight">
<el-table-column label="序号" header-align="center" align="center" type="index" width="50px" :index="roleQuery.SysRole.impl.getTableIndex" />
<el-table-column label="角色名称" prop="roleName">
</el-table-column>
<el-table-column label="创建人" prop="createUsername">
</el-table-column>
<el-table-column label="创建时间">
<template slot-scope="scope">
<span>{{formatDateByStatsType(scope.row.createTime, 'day')}}</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="150px">
<template slot-scope="scope">
<el-button @click="onShowSysRoleUser(scope.row)" type="text" size="mini">
查看角色用户
</el-button>
</template>
</el-table-column>
</el-table>
<el-col :span="24">
<el-row type="flex" justify="end" style="margin-top: 10px;">
<el-pagination
:total="roleQuery.SysRole.impl.totalCount"
:current-page="roleQuery.SysRole.impl.currentPage"
:page-size="roleQuery.SysRole.impl.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, prev, pager, next, sizes"
@current-change="roleQuery.SysRole.impl.onCurrentPageChange"
@size-change="roleQuery.SysRole.impl.onPageSizeChange">
</el-pagination>
</el-row>
</el-col>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="用户权限字查询" name="permCodeQuery">
<el-form label-width="75px" size="mini" label-position="right" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="用户名称">
<el-input class="filter-item" v-model="permCodeQuery.formFilter.loginName"
:clearable="true" placeholder="请输入用户名" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshSysPermCodeQuery(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="permCodeQuery.SysPermCode.impl.dataList" size="mini" @sort-change="permCodeQuery.SysPermCode.impl.onSortChange"
header-cell-class-name="table-header-gray" :height="getTableHeight">
<el-table-column label="序号" header-align="center" align="center" type="index" width="50px" :index="permCodeQuery.SysPermCode.impl.getTableIndex" />
<el-table-column label="权限字名称" prop="showName">
</el-table-column>
<el-table-column label="权限字类型" prop="permCodeType">
<template slot-scope="scope">
<el-tag size="mini" :type="getPermCodeType(scope.row.permCodeType)">{{SysPermCodeType.getValue(scope.row.permCodeType)}}</el-tag>
</template>
</el-table-column>
<el-table-column label="显示顺序" prop="showOrder">
</el-table-column>
<el-table-column label="权限字标识" prop="permCode">
</el-table-column>
</el-table>
<el-col :span="24">
<el-row type="flex" justify="end" style="margin-top: 10px;">
<el-pagination
:total="permCodeQuery.SysPermCode.impl.totalCount"
:current-page="permCodeQuery.SysPermCode.impl.currentPage"
:page-size="permCodeQuery.SysPermCode.impl.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, prev, pager, next, sizes"
@current-change="permCodeQuery.SysPermCode.impl.onCurrentPageChange"
@size-change="permCodeQuery.SysPermCode.impl.onPageSizeChange">
</el-pagination>
</el-row>
</el-col>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="用户权限查询" name="permQuery">
<el-form label-width="100px" size="mini" label-position="right" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="所属权限模块">
<el-cascader class="filter-item" :options="permQuery.PermModule.impl.dropdownList" placeholder="所属权限模块"
v-model="permQuery.PermModule.value" size="mini" clearable
:props="{label: 'moduleName', value: 'moduleId'}"
@visible-change="permQuery.PermModule.impl.onVisibleChange"
@change="onPermQueryPermModuleChange" />
</el-form-item>
<el-form-item label="用户名称">
<el-input class="filter-item" v-model="permQuery.formFilter.loginName"
:clearable="true" placeholder="请输入用户名" />
</el-form-item>
<el-form-item label="URL">
<el-input class="filter-item" v-model="permQuery.formFilter.url"
:clearable="true" placeholder="请输入URL" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshSysPermQuery(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="permQuery.SysPerm.impl.dataList" size="mini" @sort-change="permQuery.SysPerm.impl.onSortChange"
header-cell-class-name="table-header-gray" :height="getTableHeight">
<el-table-column label="序号" header-align="center" align="center" type="index" width="50px" :index="permQuery.SysPerm.impl.getTableIndex" />
<el-table-column label="权限名称" prop="permName" width="150px">
</el-table-column>
<el-table-column label="所属权限模块" prop="moduleName" width="150px">
</el-table-column>
<el-table-column label="关联的url" prop="url">
</el-table-column>
<el-table-column label="创建时间" width="200px">
<template slot-scope="scope">
<span>{{formatDateByStatsType(scope.row.createTime, 'day')}}</span>
</template>
</el-table-column>
</el-table>
<el-col :span="24">
<el-row type="flex" justify="end" style="margin-top: 10px;">
<el-pagination
:total="permQuery.SysPerm.impl.totalCount"
:current-page="permQuery.SysPerm.impl.currentPage"
:page-size="permQuery.SysPerm.impl.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, prev, pager, next, sizes"
@current-change="permQuery.SysPerm.impl.onCurrentPageChange"
@size-change="permQuery.SysPerm.impl.onPageSizeChange">
</el-pagination>
</el-row>
</el-col>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
/* eslint-disable-next-line */
import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin } from '@/core/mixins';
/* eslint-disable-next-line */
import { SystemController, DictionaryController } from '@/api';
export default {
name: 'formPermQuery',
mixins: [uploadMixin, statsDateRangeMixin, cachePageMixin],
data () {
return {
activeFragmentId: 'roleQuery',
roleQuery: {
formFilter: {
permCodeId: undefined,
permUrl: undefined
},
formFilterCopy: {
permCodeId: undefined,
permUrl: undefined
},
permCodeProps: {
value: 'permCodeId',
label: 'showName',
checkStrictly: true
},
SysPermCode: {
impl: new DropdownWidget(this.loadPermCodeDropdownList, true, 'permCodeId'),
value: []
},
SysRole: {
impl: new TableWidget(this.loadSysRoleData, this.loadSysRoleVerify, true, false, 'createTime', 1)
},
isInit: false
},
permCodeQuery: {
formFilter: {
loginName: undefined
},
formFilterCopy: {
loginName: undefined
},
SysPermCode: {
impl: new TableWidget(this.loadSysPermCodeData, this.loadSysPermCodeVerify, false)
},
isInit: false
},
permQuery: {
formFilter: {
loginName: undefined,
permModuleId: undefined,
url: undefined
},
formFilterCopy: {
loginName: undefined,
permModuleId: undefined,
url: undefined
},
PermModule: {
impl: new DropdownWidget(this.loadPermModuleIdDropdownList, true, 'moduleId', 'parentId'),
value: []
},
SysPerm: {
impl: new TableWidget(this.loadSysPermData, this.loadSysPermVerify, false)
},
isInit: false
}
}
},
methods: {
onRoleQueryPermCodeChange (value) {
this.roleQuery.formFilter.permCodeId = Array.isArray(value) ? value[value.length - 1] : undefined;
},
/**
* 获取权限字下拉数据
*/
loadPermCodeDropdownList () {
return new Promise((resolve, reject) => {
let params = {};
SystemController.getPermCodeList(this, params).then(res => {
resolve(res.data.dataList);
}).catch(e => {
reject(e);
});
});
},
/**
* 获取角色查询数据
*/
loadSysRoleData (params) {
// params.permCodeId = this.roleQuery.formFilterCopy.permCodeId;
/*
params.sysPermFilter = {
url: this.roleQuery.formFilterCopy.permUrl
}
*/
params.url = this.roleQuery.formFilterCopy.permUrl;
return new Promise((resolve, reject) => {
SystemController.queryRoleByURL(this, params).then(res => {
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 角色查询验证
*/
loadSysRoleVerify () {
this.roleQuery.formFilterCopy.permCodeId = this.roleQuery.formFilter.permCodeId;
this.roleQuery.formFilterCopy.permUrl = this.roleQuery.formFilter.permUrl;
return true;
},
/**
* 跳转到角色用户页面
*/
onShowSysRoleUser (row) {
},
/**
* 刷新角色查询数据
*/
refreshSysRoleQuery (reloadData = false) {
if (reloadData) {
this.roleQuery.SysRole.impl.refreshTable(true, 1);
} else {
this.roleQuery.SysRole.impl.refreshTable();
}
this.roleQuery.isInit = true;
},
getPermCodeType (permCodeType) {
switch (permCodeType) {
case this.SysPermCodeType.FORM: return 'primary';
case this.SysPermCodeType.FRAGMENT: return 'warning';
case this.SysPermCodeType.OPERATION: return 'success';
default: return 'info';
}
},
/**
* 权限字数据查询
*/
loadSysPermCodeData (params) {
params.sysUserFilter = {
loginName: this.permCodeQuery.formFilterCopy.loginName
}
return new Promise((resolve, reject) => {
SystemController.queryPermCode(this, params).then(res => {
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 权限字数据查询校验
*/
loadSysPermCodeVerify () {
this.permCodeQuery.formFilterCopy.loginName = this.permCodeQuery.formFilter.loginName;
return true;
},
/**
* 刷新权限字查询数据
*/
refreshSysPermCodeQuery (reloadData = false) {
if (reloadData) {
this.permCodeQuery.SysPermCode.impl.refreshTable(true, 1);
} else {
this.permCodeQuery.SysPermCode.impl.refreshTable();
}
this.permCodeQuery.isInit = true;
},
/**
* 所属权限模块下拉数据获取函数
*/
loadPermModuleIdDropdownList () {
return new Promise((resolve, reject) => {
let params = {};
SystemController.getPermGroupList(this, params).then(res => {
resolve(res.data);
}).catch(e => {
reject();
});
});
},
onPermQueryPermModuleChange (value) {
this.permQuery.formFilter.permModuleId = Array.isArray(value) ? value[value.length - 1] : undefined;
},
/**
* 获取权限数据
*/
loadSysPermData (params) {
params = {
...params,
moduleId: this.permQuery.formFilterCopy.permModuleId,
loginName: this.permQuery.formFilterCopy.loginName,
url: this.permQuery.formFilterCopy.url
}
return new Promise((resolve, reject) => {
SystemController.queryPerm(this, params).then(res => {
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 获取权限数据校验
*/
loadSysPermVerify () {
this.permQuery.formFilterCopy.permModuleId = this.permQuery.formFilter.permModuleId;
this.permQuery.formFilterCopy.loginName = this.permQuery.formFilter.loginName;
this.permQuery.formFilterCopy.url = this.permQuery.formFilter.url;
return true;
},
/**
* 刷新权限数据
*/
refreshSysPermQuery (reloadData = false) {
if (reloadData) {
this.permQuery.SysPerm.impl.refreshTable(true, 1);
} else {
this.permQuery.SysPerm.impl.refreshTable();
}
this.permQuery.isInit = true;
},
/**
* Tab切换调用
*/
onFragmentChange (fragmentId) {
return true;
}
},
computed: {
getTableHeight () {
return (this.getClientHeight - 220) + 'px';
},
...mapGetters(['getClientHeight'])
}
}
</script>
<style>
</style>

View File

@@ -8,7 +8,7 @@
@click="initFormData()">
刷新
</el-button>
<el-button type="primary" size="mini" :disabled="!checkPermCodeExist('sysMenuManagement:add')"
<el-button type="primary" size="mini" :disabled="!checkPermCodeExist('formSysMenu:fragmentSysMenu:add')"
@click="onCreateSysColumnClick()">
新建
</el-button>
@@ -24,11 +24,11 @@
<el-table-column label="操作" width="200px">
<template slot-scope="scope">
<el-button @click="onEditSysColumnClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('sysMenuManagement:update')">
:disabled="!checkPermCodeExist('formSysMenu:fragmentSysMenu:update')">
编辑
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('sysMenuManagement:delete')">
:disabled="!checkPermCodeExist('formSysMenu:fragmentSysMenu:delete')">
删除
</el-button>
</template>
@@ -54,7 +54,7 @@
@click="initFormData(true)">
刷新
</el-button>
<el-button type="primary" size="mini" :disabled="!checkPermCodeExist('sysMenuManagement:add')"
<el-button type="primary" size="mini" :disabled="!checkPermCodeExist('formSysMenu:fragmentSysMenu:add')"
@click="onCreateSysMenuClick()">
新建
</el-button>
@@ -85,20 +85,21 @@
<el-table-column label="操作" width="200px">
<template slot-scope="scope">
<el-button @click="onEditSysMenuClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('sysMenuManagement:update')">
:disabled="!checkPermCodeExist('formSysMenu:fragmentSysMenu:update')">
编辑
</el-button>
<el-button @click="onAddChildSysMenuClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('sysMenuManagement:add') || scope.row.menuType === SysMenuType.BUTTON">
:disabled="!checkPermCodeExist('formSysMenu:fragmentSysMenu:add') || scope.row.menuType === SysMenuType.BUTTON">
添加
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('sysMenuManagement:delete')">
:disabled="!checkPermCodeExist('formSysMenu:fragmentSysMenu:delete')">
删除
</el-button>
<el-button @click="onShowPermList(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('sysMenuManagement:listMenuPerm') || scope.row.menuType === SysMenuType.DIRECTORY">
权限资源
v-if="checkPermCodeExist('formSysMenu:fragmentSysMenu:listSysMenuPermDetail')"
:disabled="scope.row.menuType === SysMenuType.DIRECTORY">
权限详情
</el-button>
</template>
</el-table-column>
@@ -120,11 +121,11 @@ import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin
/* eslint-disable-next-line */
import { DictionaryController, SystemController } from '@/api';
import formEditSysMenu from '@/views/upms/formEditSysMenu';
import formMenuPerm from '@/views/upms/formMenuPerm';
import formMenuPerm from './formSysMenuPerm';
import formEditColumn from '@/views/upms/formEditSysMenu/editColumn.vue';
export default {
name: 'sysMenuManagement',
name: 'formSysMenu',
props: {
},
mixins: [uploadMixin, statsDateRangeMixin, cachePageMixin],
@@ -240,15 +241,16 @@ export default {
}).catch(e => {});
},
/**
* 权限资源
* 权限详情
*/
onShowPermList (row) {
let params = {
menuId: row.menuId
};
this.$dialog.show('权限资源 - ' + row.menuName, formMenuPerm, {
area: ['1200px', '600px']
this.$dialog.show('权限详情 - ' + row.menuName, formMenuPerm, {
area: '1200px',
offset: '30px'
}, params).catch(e => {
});
},

View File

@@ -0,0 +1,203 @@
<template>
<div class="tab-dialog-box" style="position: relative; margin-top: -15px;">
<el-tabs v-model="activeFragmentId">
<el-tab-pane label="权限资源" name="fragmentSysMenuPerm" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="URL">
<el-input class="filter-item" v-model="fragmentSysMenuPerm.formFilter.url" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshfragmentSysMenuPerm(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysMenuPerm.SysMenuPerm.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysMenuPerm.SysMenuPerm.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysMenuPerm.SysMenuPerm.impl.getTableIndex" />
<el-table-column label="权限字名称" prop="showName" width="150px">
</el-table-column>
<el-table-column label="权限字类型" width="100px">
<template slot-scope="scope">
<el-tag size="mini" :type="getPermCodeType(scope.row.permCodeType)">
{{SysPermCodeType.getValue(scope.row.permCodeType)}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="权限字标识" prop="permCode" width="300px" />
<el-table-column label="权限名称" prop="permName" width="150px" />
<el-table-column label="关联URL" prop="url" min-width="300px">
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="用户查询" name="fragmentSysMenuUser" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="用户名">
<el-input class="filter-item" v-model="fragmentSysMenuUser.formFilter.loginName" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysMenuUser(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysMenuUser.SysMenuUser.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysMenuUser.SysMenuUser.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysMenuUser.SysMenuUser.impl.getTableIndex" />
<el-table-column label="用户名" prop="loginName" />
<el-table-column label="用户昵称" prop="showName" />
<el-table-column label="用户角色" prop="roleName" />
</el-table>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
import { SystemController } from '@/api';
export default {
name: 'SysMenuPerm',
props: {
menuId: {
type: String,
required: true
}
},
data () {
return {
activeFragmentId: 'fragmentSysMenuPerm',
fragmentSysMenuPerm: {
formFilter: {
url: undefined
},
formFilterCopy: {
url: undefined
},
SysMenuPerm: {
impl: new TableWidget(this.loadSysMenuPermData, this.loadSysMenuPermVerify, false, false)
}
},
fragmentSysMenuUser: {
formFilter: {
loginName: undefined
},
formFilterCopy: {
loginName: undefined
},
SysMenuUser: {
impl: new TableWidget(this.loadSysMenuUserData, this.loadSysMenuUserVerify, false, false)
}
}
}
},
methods: {
/**
* 获取菜单权限资源函数返回Promise
*/
loadSysMenuPermData (params) {
params.menuId = this.menuId;
params.url = this.fragmentSysMenuPerm.formFilterCopy.url;
return new Promise((resolve, reject) => {
SystemController.listSysPermByMenuIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 菜单权限资源获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysMenuPermVerify () {
this.fragmentSysMenuPerm.formFilterCopy.url = this.fragmentSysMenuPerm.formFilter.url;
return true;
},
getPermCodeType (permCodeType) {
switch (permCodeType) {
case this.SysPermCodeType.FORM: return 'primary';
case this.SysPermCodeType.FRAGMENT: return 'warning';
case this.SysPermCodeType.OPERATION: return 'success';
default: return 'info';
}
},
/**
* 更新菜单权限资源
*/
refreshfragmentSysMenuPerm (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysMenuPerm.SysMenuPerm.impl.refreshTable(true, 1);
} else {
this.fragmentSysMenuPerm.SysMenuPerm.impl.refreshTable();
}
},
/**
* 获取菜单用户函数返回Promise
*/
loadSysMenuUserData (params) {
params.menuId = this.menuId;
params.loginName = this.fragmentSysMenuUser.formFilterCopy.loginName;
return new Promise((resolve, reject) => {
SystemController.listSysUserByMenuIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 菜单用户获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysMenuUserVerify () {
if (this.fragmentSysMenuUser.formFilter.loginName == null || this.fragmentSysMenuUser.formFilter.loginName === '') {
this.$message.error('请输入用户名!');
return false;
}
this.fragmentSysMenuUser.formFilterCopy.loginName = this.fragmentSysMenuUser.formFilter.loginName;
return true;
},
/**
* 更新菜单用户
*/
refreshFragmentSysMenuUser (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysMenuUser.SysMenuUser.impl.refreshTable(true, 1);
} else {
this.fragmentSysMenuUser.SysMenuUser.impl.refreshTable();
}
}
},
computed: {
getTableHeight () {
return (this.getMainContextHeight - 150);
},
...mapGetters(['getMainContextHeight'])
},
mounted () {
}
}
</script>
<style>
</style>

View File

@@ -47,8 +47,9 @@
删除
</el-button>
<el-button @click="onShowPermList(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysMenu:fragmentSysMenu:listMenuPerm') || scope.row.menuType === SysMenuType.DIRECTORY">
权限资源
v-if="checkPermCodeExist('formSysMenu:fragmentSysMenu:listSysMenuPermDetail')"
:disabled="scope.row.menuType === SysMenuType.DIRECTORY">
权限详情
</el-button>
</template>
</el-table-column>
@@ -67,7 +68,7 @@ import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin
/* eslint-disable-next-line */
import { DictionaryController, SystemController } from '@/api';
import formEditSysMenu from '@/views/upms/formEditSysMenu';
import formMenuPerm from '@/views/upms/formMenuPerm';
import formMenuPerm from './formSysMenuPerm';
export default {
name: 'formSysMenu',
@@ -210,15 +211,16 @@ export default {
}).catch(e => {});
},
/**
* 权限资源
* 权限详情
*/
onShowPermList (row) {
let params = {
menuId: row.menuId
};
this.$dialog.show('权限资源 - ' + row.menuName, formMenuPerm, {
area: ['1200px', '600px']
this.$dialog.show('权限详情 - ' + row.menuName, formMenuPerm, {
area: '1200px',
offset: '30px'
}, params).catch(e => {
});
},

View File

@@ -0,0 +1,323 @@
<template>
<div class="tab-dialog-box" style="position: relative; margin-top: -15px;">
<el-tabs v-model="activeFragmentId">
<el-tab-pane label="用户查询" name="fragmentSysPermUser" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="用户名">
<el-input class="filter-item" v-model="fragmentSysPermUser.formFilter.loginName" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysPermUser(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysPermUser.SysUser.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysPermUser.SysUser.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysPermUser.SysUser.impl.getTableIndex" />
<el-table-column label="用户名" prop="loginName" />
<el-table-column label="用户昵称" prop="showName" />
<el-table-column label="用户角色" prop="roleName" />
<el-table-column label="权限字" prop="permCode" />
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="角色查询" name="fragmentSysPermRole" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="角色名称">
<el-input class="filter-item" v-model="fragmentSysPermRole.formFilter.roleName" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysPermRole(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysPermRole.SysRole.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysPermRole.SysRole.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysPermRole.SysRole.impl.getTableIndex" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="菜单类型" prop="permCodeType">
<template slot-scope="scope">
<el-tag size="mini" :type="getMenuType(scope.row)">{{SysMenuType.getValue(scope.row.menuType)}}</el-tag>
</template>
</el-table-column>
<el-table-column label="角色名称" prop="roleName" />
<el-table-column label="权限字" prop="permCode" />
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="菜单查询" name="fragmentSysPermMenu" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="菜单名称">
<el-input class="filter-item" v-model="fragmentSysPermMenu.formFilter.menuName" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysPermMenu(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysPermMenu.SysMenu.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysPermMenu.SysMenu.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysPermMenu.SysMenu.impl.getTableIndex" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="菜单类型" prop="menuType">
<template slot-scope="scope">
<el-tag size="mini" :type="getMenuType(scope.row)">{{SysMenuType.getValue(scope.row.menuType)}}</el-tag>
</template>
</el-table-column>
<el-table-column label="权限字" prop="permCode" />
</el-table>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
import { SystemController } from '@/api';
export default {
name: 'SysMenuPerm',
props: {
permId: {
type: String,
required: true
}
},
data () {
return {
activeFragmentId: 'fragmentSysPermUser',
menuMap: new Map(),
fragmentSysPermUser: {
formFilter: {
loginName: undefined
},
formFilterCopy: {
loginName: undefined
},
SysUser: {
impl: new TableWidget(this.loadSysUserData, this.loadSysUserVerify, false, false)
}
},
fragmentSysPermRole: {
formFilter: {
roleName: undefined
},
formFilterCopy: {
roleName: undefined
},
SysRole: {
impl: new TableWidget(this.loadSysRoleData, this.loadSysRoleVerify, false, false)
}
},
fragmentSysPermMenu: {
formFilter: {
menuName: undefined
},
formFilterCopy: {
menuName: undefined
},
SysMenu: {
impl: new TableWidget(this.loadPermSysMenuData, this.loadPermSysMenuVerify, false, false)
}
}
}
},
methods: {
getMenuType (row) {
if (row.menuType === 0) {
return 'primary'
} else if (row.menuType === 1) {
return 'success';
} else if (row.menuType === 2) {
return 'danger';
} else if (row.menuType === 3) {
return 'warning';
}
},
/**
* 获取所有菜单项
*/
loadSysMenuData () {
return new Promise((resolve, reject) => {
SystemController.getMenuPermList(this, {}).then(res => {
res.data.forEach(item => {
this.menuMap.set(item.menuId, item);
});
resolve();
}).catch(e => {
reject(e);
});
});
},
getMenuPathById (menuId) {
if (menuId == null || menuId === '') return null;
let menuPath = [];
do {
let menuItem = this.menuMap.get(menuId);
if (menuItem != null) {
menuPath.unshift(menuItem);
menuId = menuItem.parentId;
} else {
menuId = null;
}
} while (menuId != null);
return menuPath;
},
getMenuPathString (menuPath) {
if (Array.isArray(menuPath) && menuPath.length > 0) {
return menuPath.map(item => item.menuName).join(' / ');
} else {
return null;
}
},
/**
* 获取用户函数返回Promise
*/
loadSysUserData (params) {
params.permId = this.permId;
params.loginName = this.fragmentSysPermUser.formFilterCopy.loginName;
return new Promise((resolve, reject) => {
SystemController.listSysUserByPermIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 用户获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysUserVerify () {
if (this.fragmentSysPermUser.formFilter.loginName == null || this.fragmentSysPermUser.formFilter.loginName === '') {
this.$message.error('请输入用户名!');
return false;
}
this.fragmentSysPermUser.formFilterCopy.loginName = this.fragmentSysPermUser.formFilter.loginName;
return true;
},
/**
* 更新用户
*/
refreshFragmentSysPermUser (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysPermUser.SysUser.impl.refreshTable(true, 1);
} else {
this.fragmentSysPermUser.SysUser.impl.refreshTable();
}
},
/**
* 获取角色函数返回Promise
*/
loadSysRoleData (params) {
params.permId = this.permId;
params.roleName = this.fragmentSysPermRole.formFilterCopy.roleName;
return new Promise((resolve, reject) => {
SystemController.listSysRoleByPermIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 角色获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysRoleVerify () {
this.fragmentSysPermRole.formFilterCopy.roleName = this.fragmentSysPermRole.formFilter.roleName;
return true;
},
/**
* 更新角色
*/
refreshFragmentSysPermRole (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysPermRole.SysRole.impl.refreshTable(true, 1);
} else {
this.fragmentSysPermRole.SysRole.impl.refreshTable();
}
},
/**
* 获取菜单函数返回Promise
*/
loadPermSysMenuData (params) {
params.permId = this.permId;
params.menuName = this.fragmentSysPermMenu.formFilterCopy.menuName;
return new Promise((resolve, reject) => {
SystemController.listSysMenuByPermIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 角色获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadPermSysMenuVerify () {
this.fragmentSysPermMenu.formFilterCopy.menuName = this.fragmentSysPermMenu.formFilter.menuName;
return true;
},
/**
* 更新角色
*/
refreshFragmentSysPermMenu (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysPermMenu.SysMenu.impl.refreshTable(true, 1);
} else {
this.fragmentSysPermMenu.SysMenu.impl.refreshTable();
}
}
},
computed: {
getTableHeight () {
return (this.getMainContextHeight - 150);
},
...mapGetters(['getMainContextHeight'])
},
mounted () {
this.loadSysMenuData().catch(e => {});
}
}
</script>
<style>
</style>

View File

@@ -62,16 +62,21 @@
<span>{{formatDateByStatsType(scope.row.createTime, 'day')}}</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="100px">
<el-table-column label="操作" fixed="right" width="150px">
<template slot-scope="scope">
<el-button @click="onEditPermModuleClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysPerm:fragmentSysPerm:updatePerm')">
编辑
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysPerm:fragmentSysPerm:deletePerm')">
删除
</el-button>
<el-button @click="onEditPermModuleClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysPerm:fragmentSysPerm:updatePerm')">
编辑
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysPerm:fragmentSysPerm:deletePerm')">
删除
</el-button>
<el-button class="btn-table-primary" type="text" size="mini"
v-if="checkPermCodeExist('formSysPerm:fragmentSysPerm:listSysPermPermDetail')"
@click="onSysPermDetailClick(scope.row)">
权限详情
</el-button>
</template>
</el-table-column>
</el-table>
@@ -104,6 +109,7 @@ import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin
import { SystemController, DictionaryController } from '@/api';
import formEditSysPerm from '../formEditSysPerm';
import formEditSysPermModule from '../formEditSysPermModule';
import FormSysPermDetail from './formSysPermDetail.vue';
export default {
name: 'formSysPerm',
@@ -186,6 +192,14 @@ export default {
*/
onPermModuleIdValueChange (value) {
},
onSysPermDetailClick (row) {
this.$dialog.show('权限详情', FormSysPermDetail, {
area: '1200px',
offset: '30px'
}, {
permId: row.permId
}).then(res => {}).catch(e => {});
},
/**
* 更新权限管理
*/

View File

@@ -0,0 +1,253 @@
<template>
<div class="tab-dialog-box" style="position: relative; margin-top: -15px;">
<el-tabs v-model="activeFragmentId">
<el-tab-pane label="用户查询" name="fragmentSysPermCodeUser" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="用户名">
<el-input class="filter-item" v-model="fragmentSysPermCodeUser.formFilter.loginName" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysPermCodeUser(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysPermCodeUser.SysUser.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysPermCodeUser.SysUser.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysPermCodeUser.SysUser.impl.getTableIndex" />
<el-table-column label="用户名" prop="loginName" />
<el-table-column label="用户昵称" prop="showName" />
<el-table-column label="用户角色" prop="roleName" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="菜单类型" prop="permCodeType">
<template slot-scope="scope">
<el-tag size="mini" :type="getMenuType(scope.row)">{{SysMenuType.getValue(scope.row.menuType)}}</el-tag>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="角色查询" name="fragmentSysPermCodeRole" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="角色名称">
<el-input class="filter-item" v-model="fragmentSysPermCodeRole.formFilter.roleName" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysPermCodeRole(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysPermCodeRole.SysRole.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysPermCodeRole.SysRole.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysPermCodeRole.SysRole.impl.getTableIndex" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="菜单类型" prop="permCodeType">
<template slot-scope="scope">
<el-tag size="mini" :type="getMenuType(scope.row)">{{SysMenuType.getValue(scope.row.menuType)}}</el-tag>
</template>
</el-table-column>
<el-table-column label="角色名称" prop="roleName" />
</el-table>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
import { SystemController } from '@/api';
export default {
name: 'SysMenuPerm',
props: {
permCodeId: {
type: String,
required: true
}
},
data () {
return {
activeFragmentId: 'fragmentSysPermCodeUser',
menuMap: new Map(),
fragmentSysPermCodeUser: {
formFilter: {
loginName: undefined
},
formFilterCopy: {
loginName: undefined
},
SysUser: {
impl: new TableWidget(this.loadSysUserData, this.loadSysUserVerify, false, false)
}
},
fragmentSysPermCodeRole: {
formFilter: {
roleName: undefined
},
formFilterCopy: {
roleName: undefined
},
SysRole: {
impl: new TableWidget(this.loadSysRoleData, this.loadSysRoleVerify, false, false)
}
}
}
},
methods: {
getMenuType (row) {
if (row.menuType === 0) {
return 'primary'
} else if (row.menuType === 1) {
return 'success';
} else if (row.menuType === 2) {
return 'danger';
} else if (row.menuType === 3) {
return 'warning';
}
},
/**
* 获取所有菜单项
*/
loadSysMenuData () {
return new Promise((resolve, reject) => {
SystemController.getMenuPermList(this, {}).then(res => {
res.data.forEach(item => {
this.menuMap.set(item.menuId, item);
});
resolve();
}).catch(e => {
reject(e);
});
});
},
getMenuPathById (menuId) {
if (menuId == null || menuId === '') return null;
let menuPath = [];
do {
let menuItem = this.menuMap.get(menuId);
if (menuItem != null) {
menuPath.unshift(menuItem);
menuId = menuItem.parentId;
} else {
menuId = null;
}
} while (menuId != null);
return menuPath;
},
getMenuPathString (menuPath) {
if (Array.isArray(menuPath) && menuPath.length > 0) {
return menuPath.map(item => item.menuName).join(' / ');
} else {
return null;
}
},
/**
* 获取用户函数返回Promise
*/
loadSysUserData (params) {
params.permCodeId = this.permCodeId;
params.loginName = this.fragmentSysPermCodeUser.formFilterCopy.loginName;
return new Promise((resolve, reject) => {
SystemController.listSysUserByPermCodeIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 用户获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysUserVerify () {
if (this.fragmentSysPermCodeUser.formFilter.loginName == null || this.fragmentSysPermCodeUser.formFilter.loginName === '') {
this.$message.error('请输入用户名!');
return false;
}
this.fragmentSysPermCodeUser.formFilterCopy.loginName = this.fragmentSysPermCodeUser.formFilter.loginName;
return true;
},
/**
* 更新用户
*/
refreshFragmentSysPermCodeUser (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysPermCodeUser.SysUser.impl.refreshTable(true, 1);
} else {
this.fragmentSysPermCodeUser.SysUser.impl.refreshTable();
}
},
/**
* 获取角色函数返回Promise
*/
loadSysRoleData (params) {
params.permCodeId = this.permCodeId;
params.roleName = this.fragmentSysPermCodeRole.formFilterCopy.roleName;
return new Promise((resolve, reject) => {
SystemController.listSysRoleByPermCodeIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 角色获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysRoleVerify () {
this.fragmentSysPermCodeRole.formFilterCopy.roleName = this.fragmentSysPermCodeRole.formFilter.roleName;
return true;
},
/**
* 更新角色
*/
refreshFragmentSysPermCodeRole (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysPermCodeRole.SysRole.impl.refreshTable(true, 1);
} else {
this.fragmentSysPermCodeRole.SysRole.impl.refreshTable();
}
}
},
computed: {
getTableHeight () {
return (this.getMainContextHeight - 150);
},
...mapGetters(['getMainContextHeight'])
},
mounted () {
this.loadSysMenuData().catch(e => {});
}
}
</script>
<style>
</style>

View File

@@ -30,20 +30,25 @@
</el-table-column>
<el-table-column label="权限字标识" prop="permCode" min-width="200px">
</el-table-column>
<el-table-column label="操作" fixed="right" width="150px">
<el-table-column label="操作" fixed="right" width="200px">
<template slot-scope="scope">
<el-button @click="onEditPermCodeClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysPermCode:fragmentSysPermCode:update')">
编辑
</el-button>
<el-button @click="onAddChildPermCodeClick(scope.row)" type="text" size="mini"
:disabled="scope.row.permCodeType === 2 || !checkPermCodeExist('formSysPermCode:fragmentSysPermCode:add')">
添加
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysPermCode:fragmentSysPermCode:delete')">
删除
</el-button>
<el-button @click="onEditPermCodeClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysPermCode:fragmentSysPermCode:update')">
编辑
</el-button>
<el-button @click="onAddChildPermCodeClick(scope.row)" type="text" size="mini"
:disabled="scope.row.permCodeType === 2 || !checkPermCodeExist('formSysPermCode:fragmentSysPermCode:add')">
添加
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysPermCode:fragmentSysPermCode:delete')">
删除
</el-button>
<el-button class="btn-table-primary" type="text" size="mini"
v-if="checkPermCodeExist('formSysPermCode:fragmentSysPermCode:listSysPermCodePermDetail')"
@click="onSysPermCodeDetailClick(scope.row)">
权限详情
</el-button>
</template>
</el-table-column>
</el-table>
@@ -61,6 +66,7 @@ import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin
/* eslint-disable-next-line */
import { SystemController, DictionaryController } from '@/api';
import formEditSysPermCode from '@/views/upms/formEditSysPermCode';
import FormSysPermCodeDetail from '@/views/upms/formSysPermCode/formSysPermCodeDetail.vue';
export default {
name: 'formSysPermCode',
@@ -139,6 +145,14 @@ export default {
this.formPermCode.SysPermCode.sortInfo.asc = (order === 'ascending');
this.formPermCode.SysPermCode.impl.refreshTable();
},
onSysPermCodeDetailClick (row) {
this.$dialog.show('权限详情', FormSysPermCodeDetail, {
area: '1200px',
offset: '30px'
}, {
permCodeId: row.permCodeId
}).then(res => {}).catch(e => {});
},
/**
* 更新权限资源管理
*/

View File

@@ -0,0 +1,254 @@
<template>
<div class="tab-dialog-box" style="position: relative; margin-top: -15px;">
<el-tabs v-model="activeFragmentId">
<el-tab-pane label="权限资源" name="fragmentSysRolePerm" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="URL">
<el-input class="filter-item" v-model="fragmentSysRolePerm.formFilter.url" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshfragmentSysRolePerm(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysRolePerm.SysRolePerm.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysRolePerm.SysRolePerm.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysRolePerm.SysRolePerm.impl.getTableIndex" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="所属权限字" prop="permCode" />
<el-table-column label="URL" prop="url" />
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="权限字" name="fragmentSysRolePermCode" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="权限字">
<el-input class="filter-item" v-model="fragmentSysRolePermCode.formFilter.permCode" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshfragmentSysRolePermCode(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysRolePermCode.SysRolePermCode.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysRolePermCode.SysRolePermCode.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysRolePermCode.SysRolePermCode.impl.getTableIndex" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="权限字" prop="permCode" />
<el-table-column label="权限字类型" prop="permCodeType">
<template slot-scope="scope">
<el-tag size="mini" :type="getPermCodeType(scope.row.permCodeType)">{{SysPermCodeType.getValue(scope.row.permCodeType)}}</el-tag>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
import { SystemController } from '@/api';
export default {
name: 'SysRolePerm',
props: {
roleId: {
type: String,
required: true
}
},
data () {
return {
activeFragmentId: 'fragmentSysRolePerm',
menuMap: new Map(),
fragmentSysRolePerm: {
formFilter: {
url: undefined
},
formFilterCopy: {
url: undefined
},
SysRolePerm: {
impl: new TableWidget(this.loadSysRolePermData, this.loadSysRolePermVerify, false, false)
},
isInit: false
},
fragmentSysRolePermCode: {
formFilter: {
permCode: undefined
},
formFilterCopy: {
permCode: undefined
},
SysRolePermCode: {
impl: new TableWidget(this.loadSysRolePermCodeData, this.loadSysRolePermCodeVerify, false, false)
}
}
}
},
methods: {
getMenuType (row) {
if (row.menuType === 0) {
return 'primary'
} else if (row.menuType === 1) {
return 'success';
} else if (row.menuType === 2) {
return 'danger';
} else if (row.menuType === 3) {
return 'warning';
}
},
/**
* 获取所有菜单项
*/
loadSysMenuData () {
return new Promise((resolve, reject) => {
SystemController.getMenuPermList(this, {}).then(res => {
res.data.forEach(item => {
this.menuMap.set(item.menuId, item);
});
resolve();
}).catch(e => {
reject(e);
});
});
},
getMenuPathById (menuId) {
if (menuId == null || menuId === '') return null;
let menuPath = [];
do {
let menuItem = this.menuMap.get(menuId);
if (menuItem != null) {
menuPath.unshift(menuItem);
menuId = menuItem.parentId;
} else {
menuId = null;
}
} while (menuId != null);
return menuPath;
},
getMenuPathString (menuPath) {
if (Array.isArray(menuPath) && menuPath.length > 0) {
return menuPath.map(item => item.menuName).join(' / ');
} else {
return null;
}
},
/**
* 获取角色权限资源列表函数返回Promise
*/
loadSysRolePermData (params) {
params.roleId = this.roleId;
params.url = this.fragmentSysRolePerm.formFilterCopy.url;
return new Promise((resolve, reject) => {
SystemController.listSysPermByRoleIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 角色权限资源获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysRolePermVerify () {
this.fragmentSysRolePerm.formFilterCopy.url = this.fragmentSysRolePerm.formFilter.url;
return true;
},
/**
* 更新角色权限资源
*/
refreshfragmentSysRolePerm (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysRolePerm.SysRolePerm.impl.refreshTable(true, 1);
} else {
this.fragmentSysRolePerm.SysRolePerm.impl.refreshTable();
}
this.fragmentSysRolePerm.isInit = true;
},
/**
* 获取角色权限字列表函数返回Promise
*/
loadSysRolePermCodeData (params) {
params.roleId = this.roleId;
params.permCode = this.fragmentSysRolePermCode.formFilterCopy.permCode;
return new Promise((resolve, reject) => {
SystemController.listSysPermCodeByRoleIdWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 角色权限资源获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysRolePermCodeVerify () {
this.fragmentSysRolePermCode.formFilterCopy.permCode = this.fragmentSysRolePermCode.formFilter.permCode;
return true;
},
getPermCodeType (permCodeType) {
switch (permCodeType) {
case this.SysPermCodeType.FORM: return 'primary';
case this.SysPermCodeType.FRAGMENT: return 'warning';
case this.SysPermCodeType.OPERATION: return 'success';
default: return 'info';
}
},
/**
* 更新角色权限资源
*/
refreshfragmentSysRolePermCode (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysRolePermCode.SysRolePermCode.impl.refreshTable(true, 1);
} else {
this.fragmentSysRolePermCode.SysRolePermCode.impl.refreshTable();
}
this.fragmentSysRolePermCode.isInit = true;
}
},
computed: {
getTableHeight () {
return (this.getMainContextHeight - 150);
},
...mapGetters(['getMainContextHeight'])
},
mounted () {
this.loadSysMenuData().catch(e => {});
}
}
</script>
<style>
</style>

View File

@@ -34,14 +34,19 @@
</el-table-column>
<el-table-column label="操作" fixed="right" width="150px">
<template slot-scope="scope">
<el-button @click="onEditSysRoleClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysRole:fragmentSysRole:update')">
编辑
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysRole:fragmentSysRole:delete')">
删除
</el-button>
<el-button @click="onEditSysRoleClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysRole:fragmentSysRole:update')">
编辑
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysRole:fragmentSysRole:delete')">
删除
</el-button>
<el-button class="btn-table-primary" type="text" size="mini"
v-if="checkPermCodeExist('formSysRole:fragmentSysRole:listSysRolePermDetail')"
@click="onSysRolePermClick(scope.row)">
权限详情
</el-button>
</template>
</el-table-column>
</el-table>
@@ -116,7 +121,9 @@
<template slot-scope="scope">
<el-button class="btn-table-delete" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysRole:fragmentSysRoleUser:deleteUserRole')"
@click="onDeleteRow(scope.row)">移除</el-button>
@click="onDeleteRow(scope.row)">
移除
</el-button>
</template>
</el-table-column>
</el-table>
@@ -150,6 +157,7 @@ import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin
import { SystemController, DictionaryController } from '@/api';
import formEditSysRole from '../formEditSysRole';
import formSetRoleUsers from '@/views/upms/formSetRoleUsers';
import FormSysRolePerm from './formSysRolePerm.vue';
export default {
name: 'formSysRole',
@@ -414,6 +422,17 @@ export default {
onRuleChange (value) {
this.refreshFragmentSysRoleUser(true);
},
/**
* 权限详情
*/
onSysRolePermClick (row) {
this.$dialog.show('权限详情', FormSysRolePerm, {
area: '1200px',
offset: '30px'
}, {
roleId: row.roleId
}).then(res => {}).catch(e => {});
},
/**
* 更新用户管理
*/

View File

@@ -0,0 +1,335 @@
<template>
<div class="tab-dialog-box" style="position: relative; margin-top: -15px;">
<el-tabs v-model="activeFragmentId">
<el-tab-pane label="权限资源" name="fragmentSysUserPerm" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="URL">
<el-input class="filter-item" v-model="fragmentSysUserPerm.formFilter.url" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysUserPerm(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysUserPerm.SysUserPerm.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysUserPerm.SysUserPerm.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysUserPerm.SysUserPerm.impl.getTableIndex" />
<el-table-column label="所属角色" prop="roleName" width="150px" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="所属权限字" prop="permCode" />
<el-table-column label="URL" prop="url" />
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="权限字" name="fragmentSysUserPermCode" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="权限字">
<el-input class="filter-item" v-model="fragmentSysUserPermCode.formFilter.permCode" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysUserPermCode(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysUserPermCode.SysUserPermCode.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysUserPermCode.SysUserPermCode.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysUserPermCode.SysUserPermCode.impl.getTableIndex" />
<el-table-column label="所属角色" prop="roleName" width="150px" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="权限字" prop="permCode" />
<el-table-column label="权限字类型" prop="permCodeType">
<template slot-scope="scope">
<el-tag size="mini" :type="getPermCodeType(scope.row.permCodeType)">{{SysPermCodeType.getValue(scope.row.permCodeType)}}</el-tag>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="菜单权限" name="fragmentSysUserMenu" style="width: 100%;">
<el-form label-width="100px" size="mini" label-position="left" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="菜单名称">
<el-input class="filter-item" v-model="fragmentSysUserMenu.formFilter.menuName" clearable
placeholder="" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysUserMenu(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysUserMenu.SysUserMenu.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysUserMenu.SysUserMenu.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysUserPermCode.SysUserPermCode.impl.getTableIndex" />
<el-table-column label="所属角色" prop="roleName" width="150px" />
<el-table-column label="菜单">
<template slot-scope="scope">
<span>{{getMenuPathString(getMenuPathById(scope.row.menuId)) || scope.row.menuName}}</span>
</template>
</el-table-column>
<el-table-column label="菜单类型" prop="menuType">
<template slot-scope="scope">
<el-tag size="mini" :type="getMenuType(scope.row)">{{SysMenuType.getValue(scope.row.menuType)}}</el-tag>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
import { SystemController } from '@/api';
export default {
name: 'SysUserPerm',
props: {
userId: {
type: String,
required: true
}
},
data () {
return {
activeFragmentId: 'fragmentSysUserPerm',
menuMap: new Map(),
fragmentSysUserPerm: {
formFilter: {
url: undefined
},
formFilterCopy: {
url: undefined
},
SysUserPerm: {
impl: new TableWidget(this.loadSysUserPermData, this.loadSysUserPermVerify, false, false)
},
isInit: false
},
fragmentSysUserPermCode: {
formFilter: {
permCode: undefined
},
formFilterCopy: {
permCode: undefined
},
SysUserPermCode: {
impl: new TableWidget(this.loadSysUserPermCodeData, this.loadSysUserPermCodeVerify, false, false)
}
},
fragmentSysUserMenu: {
formFilter: {
menuName: undefined
},
formFilterCopy: {
menuName: undefined
},
SysUserMenu: {
impl: new TableWidget(this.loadSysUserMenuData, this.loadSysUserMenuVerify, false, false)
}
}
}
},
methods: {
getMenuType (row) {
if (row.menuType === 0) {
return 'primary'
} else if (row.menuType === 1) {
return 'success';
} else if (row.menuType === 2) {
return 'danger';
} else if (row.menuType === 3) {
return 'warning';
}
},
/**
* 获取所有菜单项
*/
loadSysMenuData () {
return new Promise((resolve, reject) => {
SystemController.getMenuPermList(this, {}).then(res => {
res.data.forEach(item => {
this.menuMap.set(item.menuId, item);
});
resolve();
}).catch(e => {
reject(e);
});
});
},
getMenuPathById (menuId) {
if (menuId == null || menuId === '') return null;
let menuPath = [];
do {
let menuItem = this.menuMap.get(menuId);
if (menuItem != null) {
menuPath.unshift(menuItem);
menuId = menuItem.parentId;
} else {
menuId = null;
}
} while (menuId != null);
return menuPath;
},
getMenuPathString (menuPath) {
if (Array.isArray(menuPath) && menuPath.length > 0) {
return menuPath.map(item => item.menuName).join(' / ');
} else {
return null;
}
},
/**
* 获取用户权限资源列表函数返回Promise
*/
loadSysUserPermData (params) {
params.userId = this.userId;
params.url = this.fragmentSysUserPerm.formFilterCopy.url;
return new Promise((resolve, reject) => {
SystemController.listSysPermWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 用户权限资源获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysUserPermVerify () {
this.fragmentSysUserPerm.formFilterCopy.url = this.fragmentSysUserPerm.formFilter.url;
return true;
},
/**
* 更新用户权限资源
*/
refreshFragmentSysUserPerm (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysUserPerm.SysUserPerm.impl.refreshTable(true, 1);
} else {
this.fragmentSysUserPerm.SysUserPerm.impl.refreshTable();
}
this.fragmentSysUserPerm.isInit = true;
},
/**
* 获取用户权限字列表函数返回Promise
*/
loadSysUserPermCodeData (params) {
params.userId = this.userId;
params.permCode = this.fragmentSysUserPermCode.formFilterCopy.permCode;
return new Promise((resolve, reject) => {
SystemController.listSysPermCodeWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 用户权限资源获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysUserPermCodeVerify () {
this.fragmentSysUserPermCode.formFilterCopy.permCode = this.fragmentSysUserPermCode.formFilter.permCode;
return true;
},
getPermCodeType (permCodeType) {
switch (permCodeType) {
case this.SysPermCodeType.FORM: return 'primary';
case this.SysPermCodeType.FRAGMENT: return 'warning';
case this.SysPermCodeType.OPERATION: return 'success';
default: return 'info';
}
},
/**
* 更新用户权限资源
*/
refreshFragmentSysUserPermCode (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysUserPermCode.SysUserPermCode.impl.refreshTable(true, 1);
} else {
this.fragmentSysUserPermCode.SysUserPermCode.impl.refreshTable();
}
this.fragmentSysUserPermCode.isInit = true;
},
/**
* 获取用户权限资源列表函数返回Promise
*/
loadSysUserMenuData (params) {
params.userId = this.userId;
params.menuName = this.fragmentSysUserMenu.formFilterCopy.menuName;
return new Promise((resolve, reject) => {
SystemController.listSysMenuWithDetail(this, params).then(res => {
resolve({
dataList: res.data,
totalCount: res.data.length
});
}).catch(e => {
reject(e);
});
});
},
/**
* 用户权限资源获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysUserMenuVerify () {
this.fragmentSysUserMenu.formFilterCopy.menuName = this.fragmentSysUserMenu.formFilter.menuName;
return true;
},
/**
* 更新用户权限资源
*/
refreshFragmentSysUserMenu (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysUserMenu.SysUserMenu.impl.refreshTable(true, 1);
} else {
this.fragmentSysUserMenu.SysUserMenu.impl.refreshTable();
}
this.fragmentSysUserMenu.isInit = true;
}
},
computed: {
getTableHeight () {
return (this.getMainContextHeight - 150);
},
...mapGetters(['getMainContextHeight'])
},
mounted () {
this.loadSysMenuData().catch(e => {});
}
}
</script>
<style>
</style>

View File

@@ -41,11 +41,16 @@
<span>{{formatDateByStatsType(scope.row.createTime, 'day')}}</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="150">
<el-table-column label="操作" fixed="right" width="220px">
<template slot-scope="scope">
<el-button class="btn-table-edit" type="text" size="mini" @click="onEditRow(scope.row)" :disabled="isAdmin(scope.row) || !checkPermCodeExist('formSysUser:fragmentSysUser:update')" >编辑</el-button>
<el-button class="btn-table-delete" type="text" size="mini" @click="onDeleteRow(scope.row)" :disabled="isAdmin(scope.row) || !checkPermCodeExist('formSysUser:fragmentSysUser:delete')">删除</el-button>
<el-button class="btn-table-delete" type="text" size="mini" :disabled="!checkPermCodeExist('formSysUser:fragmentSysUser:resetPassword')" @click="onResetPassword(scope.row)">重置密码</el-button>
<el-button class="btn-table-primary" type="text" size="mini"
v-if="checkPermCodeExist('formSysUser:fragmentSysUser:listSysUserPermDetail')"
@click="onSysUserPermClick(scope.row)">
权限详情
</el-button>
</template>
</el-table-column>
</el-table>
@@ -75,6 +80,7 @@ import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin
/* eslint-disable-next-line */
import { SystemController, DictionaryController } from '@/api';
import editUser from '@/views/upms/formEditSysUser';
import FormSysUserPerm from './formSysUserPerm.vue';
export default {
name: 'formSysUser',
@@ -210,6 +216,17 @@ export default {
*/
onSysUserStatusValueChange (value) {
},
/**
* 权限详情
*/
onSysUserPermClick (row) {
this.$dialog.show('权限详情', FormSysUserPerm, {
area: '1200px',
offset: '30px'
}, {
userId: row.userId
}).then(res => {}).catch(e => {});
},
/**
* 更新用户管理
*/

View File

@@ -120,7 +120,7 @@ export default {
</style>
<style lang="scss" scoped>
@import '../../assets/style/element-color.scss';
@import '@/assets/style/element-variables.scss';
.title {
border: 1px solid #EDEDED;
border-left-width: 5px;