Files
zhxg_pc/src/components/flow/Role/index.vue

190 lines
6.0 KiB
Vue
Raw Normal View History

2025-07-28 15:52:07 +08:00
<template>
<div class="app-container">
2025-10-18 17:13:04 +08:00
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true">
2025-07-28 15:52:07 +08:00
<el-form-item label="角色名称" prop="roleName">
<el-input
v-model="queryParams.roleName"
placeholder="请输入角色名称"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
2025-10-18 17:13:04 +08:00
<el-table v-show="checkType === 'multiple'" ref="dataTable" v-loading="loading" :data="roleList" @selection-change="handleMultipleRoleSelect">
2025-07-28 15:52:07 +08:00
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="角色编号" prop="roleId" width="120" />
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
<el-table-column label="显示顺序" prop="roleSort" width="100" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<el-table v-show="checkType === 'single'" v-loading="loading" :data="roleList" @current-change="handleSingleRoleSelect">
2025-10-18 17:13:04 +08:00
<el-table-column width="55" align="center">
2025-07-28 15:52:07 +08:00
<template slot-scope="scope">
<!-- 可以手动的修改label的值从而控制选择哪一项 -->
2025-10-18 17:13:04 +08:00
<el-radio v-model="radioSelected" :label="scope.row.roleId">{{ '' }}</el-radio>
2025-07-28 15:52:07 +08:00
</template>
</el-table-column>
<el-table-column label="角色编号" prop="roleId" width="120" />
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
<el-table-column label="显示顺序" prop="roleSort" width="100" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page-sizes="[5,10]"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
2025-10-18 17:13:04 +08:00
import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from '@/api/system/role'
import { treeselect as menuTreeselect, roleMenuTreeselect } from '@/api/system/menu'
import {StrUtil} from '@/utils/StrUtil'
2025-07-28 15:52:07 +08:00
export default {
2025-10-18 17:13:04 +08:00
name: 'FlowRole',
2025-07-28 15:52:07 +08:00
dicts: ['sys_normal_disable'],
// 接受父组件的值
props: {
// 回显数据传值
selectValues: {
type: Number | String | Array,
default: null,
required: false
},
checkType: {
type: String,
default: 'multiple',
required: false
},
},
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 角色表格数据
roleList: [],
// 弹出层标题
2025-10-18 17:13:04 +08:00
title: '',
2025-07-28 15:52:07 +08:00
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 5,
roleName: undefined,
roleKey: undefined,
status: undefined
},
// 表单参数
form: {},
radioSelected: null, // 单选框传值
selectRoleList: [] // 回显数据传值
2025-10-18 17:13:04 +08:00
}
2025-07-28 15:52:07 +08:00
},
watch: {
selectValues: {
handler(newVal) {
if (StrUtil.isNotBlank(newVal)) {
if (newVal instanceof Number || newVal instanceof String) {
this.radioSelected = newVal
} else {
2025-10-18 17:13:04 +08:00
this.selectRoleList = newVal
2025-07-28 15:52:07 +08:00
}
}
},
immediate: true
},
roleList: {
handler(newVal) {
if (StrUtil.isNotBlank(newVal) && this.selectRoleList.length > 0) {
this.$nextTick(() => {
2025-10-18 17:13:04 +08:00
this.$refs.dataTable.clearSelection()
2025-07-28 15:52:07 +08:00
this.selectRoleList?.split(',').forEach(key => {
this.$refs.dataTable.toggleRowSelection(newVal.find(
item => key == item.roleId
), true)
2025-10-18 17:13:04 +08:00
})
})
2025-07-28 15:52:07 +08:00
}
},
immediate: true, // 立即生效
deep: true //监听对象或数组的时候,要用到深度监听
}
},
created() {
2025-10-18 17:13:04 +08:00
this.getList()
2025-07-28 15:52:07 +08:00
},
methods: {
/** 查询角色列表 */
getList() {
2025-10-18 17:13:04 +08:00
this.loading = true
2025-07-28 15:52:07 +08:00
listRole(this.queryParams).then(response => {
2025-10-18 17:13:04 +08:00
this.roleList = response.rows
this.total = response.total
this.loading = false
2025-07-28 15:52:07 +08:00
}
2025-10-18 17:13:04 +08:00
)
2025-07-28 15:52:07 +08:00
},
// 多选框选中数据
handleMultipleRoleSelect(selection) {
2025-10-18 17:13:04 +08:00
const idList = selection.map(item => item.roleId)
const nameList = selection.map(item => item.roleName)
this.$emit('handleRoleSelect', idList.join(','), nameList.join(','))
2025-07-28 15:52:07 +08:00
},
// 单选框选中数据
handleSingleRoleSelect(selection) {
2025-10-18 17:13:04 +08:00
this.radioSelected = selection.roleId
const roleName = selection.roleName
this.$emit('handleRoleSelect', this.radioSelected.toString(), roleName)
2025-07-28 15:52:07 +08:00
},
/** 搜索按钮操作 */
handleQuery() {
2025-10-18 17:13:04 +08:00
this.queryParams.pageNum = 1
this.getList()
2025-07-28 15:52:07 +08:00
},
/** 重置按钮操作 */
resetQuery() {
2025-10-18 17:13:04 +08:00
this.handleQuery()
2025-07-28 15:52:07 +08:00
},
}
2025-10-18 17:13:04 +08:00
}
2025-07-28 15:52:07 +08:00
</script>
<style>
/*隐藏radio展示的label及本身自带的样式*/
/*.el-radio__label{*/
/* display:none;*/
/*}*/
</style>