|
@@ -1,188 +1,149 @@
|
|
<template>
|
|
<template>
|
|
<div class="app-container">
|
|
<div class="app-container">
|
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
|
- <div v-show="showSearch" class="mb-[10px]">
|
|
|
|
- <el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
|
|
|
- <el-form-item label="角色名称" prop="roleName">
|
|
|
|
- <el-input v-model="queryParams.roleName" placeholder="请输入角色名称" clearable @keyup.enter="handleQuery" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="权限字符" prop="roleKey">
|
|
|
|
- <el-input v-model="queryParams.roleKey" placeholder="请输入权限字符" clearable @keyup.enter="handleQuery" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="状态" prop="status">
|
|
|
|
- <el-select v-model="queryParams.status" placeholder="角色状态" clearable>
|
|
|
|
- <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
|
- </el-select>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="创建时间" style="width: 308px">
|
|
|
|
- <el-date-picker
|
|
|
|
- v-model="dateRange"
|
|
|
|
- value-format="YYYY-MM-DD"
|
|
|
|
- type="daterange"
|
|
|
|
- range-separator="-"
|
|
|
|
- start-placeholder="开始日期"
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
- :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
|
|
|
- ></el-date-picker>
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
+ <div v-show="showSearch" class="mb-[20px]">
|
|
|
|
+ <el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
|
|
|
+ <el-form-item label="角色名称:" prop="roleName">
|
|
|
|
+ <el-input v-model="queryParams.roleName" placeholder="请输入角色名称" clearable @keyup.enter="handleQuery" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="权限字符:" prop="roleKey">
|
|
|
|
+ <el-input v-model="queryParams.roleKey" placeholder="请输入权限字符" clearable @keyup.enter="handleQuery" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="状态:" prop="status">
|
|
|
|
+ <el-select v-model="queryParams.status" placeholder="角色状态" clearable>
|
|
|
|
+ <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="创建时间:" style="width: 308px">
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="dateRange"
|
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
|
+ type="daterange"
|
|
|
|
+ range-separator="-"
|
|
|
|
+ start-placeholder="开始日期"
|
|
|
|
+ end-placeholder="结束日期"
|
|
|
|
+ :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
|
|
|
+ ></el-date-picker>
|
|
|
|
+ </el-form-item>
|
|
|
|
|
|
- <el-form-item>
|
|
|
|
- <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
|
|
|
- <el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
|
|
- </el-form-item>
|
|
|
|
- </el-form>
|
|
|
|
|
|
+ <el-form-item>
|
|
|
|
+ <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
|
|
|
+ <el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
</div>
|
|
</div>
|
|
</transition>
|
|
</transition>
|
|
|
|
|
|
- <el-row :gutter="10">
|
|
|
|
- <el-col :span="1.5">
|
|
|
|
- <el-button v-hasPermi="['system:role:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增</el-button>
|
|
|
|
- </el-col>
|
|
|
|
- <el-col :span="1.5">
|
|
|
|
- <el-button v-hasPermi="['system:role:edit']" type="success" plain :disabled="single" icon="Edit" @click="handleUpdate()">修改</el-button>
|
|
|
|
- </el-col>
|
|
|
|
- <el-col :span="1.5">
|
|
|
|
- <el-button v-hasPermi="['system:role:delete']" type="danger" plain :disabled="ids.length === 0" @click="handleDelete()">删除</el-button>
|
|
|
|
- </el-col>
|
|
|
|
- <el-col :span="1.5">
|
|
|
|
- <el-button v-hasPermi="['system:role:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
|
|
|
|
- </el-col>
|
|
|
|
- <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>
|
|
|
|
- </el-row>
|
|
|
|
-
|
|
|
|
- <el-table ref="roleTableRef" v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
|
|
|
|
- <el-table-column type="selection" width="55" align="center" />
|
|
|
|
- <el-table-column v-if="false" 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="200" />
|
|
|
|
- <el-table-column label="显示顺序" prop="roleSort" width="100" />
|
|
|
|
- <el-table-column label="状态" align="center" width="100">
|
|
|
|
- <template #default="scope">
|
|
|
|
- <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
|
|
|
|
- </template>
|
|
|
|
- </el-table-column>
|
|
|
|
- <el-table-column label="创建时间" align="center" prop="createTime">
|
|
|
|
- <template #default="scope">
|
|
|
|
- <span>{{ parseTime(scope.row.createTime) }}</span>
|
|
|
|
- </template>
|
|
|
|
- </el-table-column>
|
|
|
|
|
|
+ <el-row :gutter="10" class="mb8">
|
|
|
|
+ <el-col :span="1.5">
|
|
|
|
+ <el-button v-hasPermi="['system:role:add']" type="primary" icon="Plus" @click="handleAdd()">新增</el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="1.5">
|
|
|
|
+ <el-button v-hasPermi="['system:role:edit']" type="success" plain :disabled="single" icon="Edit" @click="handleUpdate()">修改</el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="1.5">
|
|
|
|
+ <el-button v-hasPermi="['system:role:delete']" type="danger" plain :disabled="ids.length === 0" @click="handleDelete()">删除</el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="1.5">
|
|
|
|
+ <el-button v-hasPermi="['system:role:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="1.5">
|
|
|
|
+ <el-button v-hasPermi="['system:role:remove']" type="danger" plain icon="Refresh" @click="handleRefreshCache">刷新缓存</el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ <!-- <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>-->
|
|
|
|
+ </el-row>
|
|
|
|
|
|
- <el-table-column fixed="right" label="操作" width="180">
|
|
|
|
- <template #default="scope">
|
|
|
|
- <el-tooltip v-if="scope.row.roleId !== 1" content="修改" placement="top">
|
|
|
|
- <el-button v-hasPermi="['system:role:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>
|
|
|
|
- </el-tooltip>
|
|
|
|
- <el-tooltip v-if="scope.row.roleId !== 1" content="删除" placement="top">
|
|
|
|
- <el-button v-hasPermi="['system:role:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button>
|
|
|
|
- </el-tooltip>
|
|
|
|
- <el-tooltip v-if="scope.row.roleId !== 1" content="数据权限" placement="top">
|
|
|
|
- <el-button v-hasPermi="['system:role:edit']" link type="primary" icon="CircleCheck" @click="handleDataScope(scope.row)"></el-button>
|
|
|
|
- </el-tooltip>
|
|
|
|
- <el-tooltip v-if="scope.row.roleId !== 1" content="分配用户" placement="top">
|
|
|
|
- <el-button v-hasPermi="['system:role:edit']" link type="primary" icon="User" @click="handleAuthUser(scope.row)"></el-button>
|
|
|
|
- </el-tooltip>
|
|
|
|
- </template>
|
|
|
|
- </el-table-column>
|
|
|
|
- </el-table>
|
|
|
|
|
|
+ <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
|
|
|
|
+ <el-table-column type="selection" width="55" align="center" />
|
|
|
|
+ <el-table-column v-if="false" 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="200" />
|
|
|
|
+ <el-table-column label="显示顺序" prop="roleSort" width="100" />
|
|
|
|
+ <el-table-column label="状态" align="center" width="100">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type">
|
|
|
|
+ <span>{{ scope.row.dictType }}</span>
|
|
|
|
+ </router-link>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <span>{{ parseTime(scope.row.createTime) }}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
|
|
- <pagination
|
|
|
|
- v-if="total > 0"
|
|
|
|
- v-model:total="total"
|
|
|
|
- v-model:page="queryParams.pageNum"
|
|
|
|
- v-model:limit="queryParams.pageSize"
|
|
|
|
- @pagination="getList"
|
|
|
|
- />
|
|
|
|
|
|
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <el-text v-hasPermi="['system:menu:edit']" class="common-btn-text-primary" @click="handleUpdate(scope.row)">修改</el-text>
|
|
|
|
+ <el-text v-hasPermi="['system:menu:remove']" class="common-btn-text-danger" @click="handleDelete(scope.row)">删除</el-text>
|
|
|
|
+ <el-text v-hasPermi="['system:menu:edit']" class="common-btn-text-primary" @click="handleDataScope(scope.row)">数据权限</el-text>
|
|
|
|
+ <el-text v-hasPermi="['system:menu:edit']" class="common-btn-text-primary" @click="handleAuthUser(scope.row)">分配用户</el-text>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </el-table>
|
|
|
|
|
|
|
|
+ <pagination
|
|
|
|
+ v-if="total > 0"
|
|
|
|
+ v-model:total="total"
|
|
|
|
+ v-model:page="queryParams.pageNum"
|
|
|
|
+ v-model:limit="queryParams.pageSize"
|
|
|
|
+ @pagination="getList"
|
|
|
|
+ />
|
|
|
|
|
|
- <el-dialog v-model="dialog.visible" :title="dialog.title" width="500px" append-to-body>
|
|
|
|
- <el-form ref="roleFormRef" :model="form" :rules="rules" label-width="100px">
|
|
|
|
- <el-form-item label="角色名称" prop="roleName">
|
|
|
|
- <el-input v-model="form.roleName" placeholder="请输入角色名称" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item prop="roleKey">
|
|
|
|
- <template #label>
|
|
|
|
- <span>
|
|
|
|
- <el-tooltip content="控制器中定义的权限字符,如:@SaCheckRole('admin')" placement="top">
|
|
|
|
- <el-icon><question-filled /></el-icon>
|
|
|
|
- </el-tooltip>
|
|
|
|
- 权限字符
|
|
|
|
- </span>
|
|
|
|
- </template>
|
|
|
|
- <el-input v-model="form.roleKey" placeholder="请输入权限字符" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="角色顺序" prop="roleSort">
|
|
|
|
- <el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="状态">
|
|
|
|
- <el-radio-group v-model="form.status">
|
|
|
|
- <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
|
|
|
|
- </el-radio-group>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="菜单权限">
|
|
|
|
- <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
|
|
|
|
- <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
|
|
|
|
- <el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox>
|
|
|
|
- <el-tree
|
|
|
|
- ref="menuRef"
|
|
|
|
- class="tree-border"
|
|
|
|
- :data="menuOptions"
|
|
|
|
- show-checkbox
|
|
|
|
- node-key="id"
|
|
|
|
- :check-strictly="!form.menuCheckStrictly"
|
|
|
|
- empty-text="加载中,请稍候"
|
|
|
|
- :props="{ label: 'label', children: 'children' }"
|
|
|
|
- ></el-tree>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="备注">
|
|
|
|
- <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
|
|
|
- </el-form-item>
|
|
|
|
- </el-form>
|
|
|
|
- <template #footer>
|
|
|
|
- <div class="dialog-footer">
|
|
|
|
|
|
+ <div v-show="dialog.visible" class="common-dialog">
|
|
|
|
+ <div class="common-dialog-content">
|
|
|
|
+ <div class="common-dialog-title-box">
|
|
|
|
+ <i class="common-dialog-title-icon" />
|
|
|
|
+ <div>{{ dialog.title }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="common-dialog-box">
|
|
|
|
+ <el-form ref="roleFormRef" :model="form" :rules="rules" label-width="100px">
|
|
|
|
+ <el-form-item label="角色名称:" prop="roleName">
|
|
|
|
+ <el-input v-model="form.roleName" placeholder="请输入角色名称" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item prop="roleKey">
|
|
|
|
+ <template #label>
|
|
|
|
+ <span>
|
|
|
|
+ <el-tooltip content="控制器中定义的权限字符,如:@SaCheckRole('admin')" placement="top">
|
|
|
|
+ <el-icon><question-filled /></el-icon>
|
|
|
|
+ </el-tooltip>
|
|
|
|
+ 权限字符:
|
|
|
|
+ </span>
|
|
|
|
+ </template>
|
|
|
|
+ <el-input v-model="form.roleKey" placeholder="请输入权限字符" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="角色顺序:" prop="roleSort">
|
|
|
|
+ <el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="状态:">
|
|
|
|
+ <el-radio-group v-model="form.status">
|
|
|
|
+ <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="菜单权限:">
|
|
|
|
+ <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
|
|
|
|
+ <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
|
|
|
|
+ <el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox>
|
|
|
|
+ <el-tree
|
|
|
|
+ ref="deptRef"
|
|
|
|
+ class="tree-border"
|
|
|
|
+ :data="deptOptions"
|
|
|
|
+ show-checkbox
|
|
|
|
+ default-expand-all
|
|
|
|
+ node-key="id"
|
|
|
|
+ :check-strictly="!form.deptCheckStrictly"
|
|
|
|
+ empty-text="加载中,请稍候"
|
|
|
|
+ :props="{ label: 'label', children: 'children' }"
|
|
|
|
+ ></el-tree>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="common-dialog-footer" style="display: flex; justify-content: center">
|
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
<el-button @click="cancel">取 消</el-button>
|
|
<el-button @click="cancel">取 消</el-button>
|
|
</div>
|
|
</div>
|
|
- </template>
|
|
|
|
- </el-dialog>
|
|
|
|
-
|
|
|
|
- <!-- 分配角色数据权限对话框 -->
|
|
|
|
- <el-dialog v-model="openDataScope" :title="dialog.title" width="500px" append-to-body>
|
|
|
|
- <el-form ref="dataScopeRef" :model="form" label-width="80px">
|
|
|
|
- <el-form-item label="角色名称">
|
|
|
|
- <el-input v-model="form.roleName" :disabled="true" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="权限字符">
|
|
|
|
- <el-input v-model="form.roleKey" :disabled="true" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="权限范围">
|
|
|
|
- <el-select v-model="form.dataScope" @change="dataScopeSelectChange">
|
|
|
|
- <el-option v-for="item in dataScopeOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
|
- </el-select>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item v-show="form.dataScope === '2'" label="数据权限">
|
|
|
|
- <el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
|
|
|
|
- <el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
|
|
|
|
- <el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox>
|
|
|
|
- <el-tree
|
|
|
|
- ref="deptRef"
|
|
|
|
- class="tree-border"
|
|
|
|
- :data="deptOptions"
|
|
|
|
- show-checkbox
|
|
|
|
- default-expand-all
|
|
|
|
- node-key="id"
|
|
|
|
- :check-strictly="!form.deptCheckStrictly"
|
|
|
|
- empty-text="加载中,请稍候"
|
|
|
|
- :props="{ label: 'label', children: 'children' }"
|
|
|
|
- ></el-tree>
|
|
|
|
- </el-form-item>
|
|
|
|
- </el-form>
|
|
|
|
- <template #footer>
|
|
|
|
- <div class="dialog-footer">
|
|
|
|
- <el-button type="primary" @click="submitDataScope">确 定</el-button>
|
|
|
|
- <el-button @click="cancelDataScope">取 消</el-button>
|
|
|
|
- </div>
|
|
|
|
- </template>
|
|
|
|
- </el-dialog>
|
|
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|