安虹睿
1 year ago
38 changed files with 2889 additions and 931 deletions
@ -0,0 +1,51 @@ |
|||||
|
// dev_win
|
||||
|
window.SITE_CONFIG['baseApi'] = 'http://dev.ccwin-in.com:60021' |
||||
|
window.SITE_CONFIG['authApi'] = 'http://dev.ccwin-in.com:60021' |
||||
|
window.SITE_CONFIG['loginApi'] = 'http://dev.ccwin-in.com:60020' |
||||
|
window.SITE_CONFIG['businessApi'] = 'http://dev.ccwin-in.com:10097' |
||||
|
//是否登录配置信息【loginName】
|
||||
|
window.SITE_CONFIG['isConfigLogin'] = false |
||||
|
//如果【isConfigLogin】为true则使用【loginName】登录
|
||||
|
window.SITE_CONFIG['configLoginName'] = 'admin' |
||||
|
// 默认登录密码(isConfigLogin为true或者链接参数存在loginName使用)
|
||||
|
window.SITE_CONFIG['configLoginPass'] = '1q2w3E*' |
||||
|
// 是否单页面(不显示菜单头部等部分)
|
||||
|
window.SITE_CONFIG['isSinglePage'] = false |
||||
|
// 项目配置
|
||||
|
window.SITE_CONFIG['appClientId'] = 'Z_App' |
||||
|
// 项目配置内部名称
|
||||
|
window.SITE_CONFIG['appClientScope'] = 'Z' |
||||
|
// 浏览器名称
|
||||
|
window.SITE_CONFIG['browserTitle'] = '接口看板-QAD&WMS' |
||||
|
// 单点登录使用数据
|
||||
|
window.SITE_CONFIG['oidcLogin_url'] = 'http://dev.ccwin-in.com:60065', |
||||
|
window.SITE_CONFIG['oidcLogin_clientId'] = 'InterfaceDash_App' |
||||
|
window.SITE_CONFIG['oidcLogin_scopes'] = 'offline_access Z profile' |
||||
|
// 隐藏的页面
|
||||
|
window.SITE_CONFIG['menuHiddenConfig'] = [ |
||||
|
'ArriveNoticeDetail','ContainerBindNoteDetail','CountAdjustNoteDetail', |
||||
|
'CountNoteDetail','CountPlanDetail','CustomerAsnDetail', |
||||
|
'CustomerReturnNoteDetail','DeliverNoteDetail','DeliverPlanDetail', |
||||
|
'DeliverRequestDetail','InspectAbnormalNoteDetail','InspectNoteDetail', |
||||
|
'InspectNoticeDetail','InventoryTransferNoteDetail','IPurchaseOrderDetailRepository', |
||||
|
'IsolationNoteDetail','IssueNoteDetail','IssueNoteDetailToMes', |
||||
|
'JisDeliverNoteDetail','JisProductDetail','JisProductReceiptNoteDetail', |
||||
|
'JisProductRecycleNoteDetail','JisProductReturnNoteDetail','JisProductTransferNoteDetail', |
||||
|
'MaterialRequestDetail','OfflineSettlementNoteDetail','OuterJisDeliverNoteDetail', |
||||
|
'OuterJisUnplannedIssueNoteDetail','OuterJisUnplannedReceiptNoteDetail','OuterPillarDeliverNoteDetail', |
||||
|
'PillarDeliverNoteDetail','PreparationPlanDetail','ProductionPlanDetail', |
||||
|
'ProductL7PartsNoteDetail','ProductReceiptLogDetail','ProductReceiptNoteDetail', |
||||
|
'ProductRecycleNoteDetail','PurchaseOrderDetail','PurchaseReceiptNoteDetail', |
||||
|
'PurchaseReturnNoteDetail','PutawayNoteDetail','ReceiptAbnormalNoteDetail', |
||||
|
'ReworkNoteDetail','SaleOrderDetail','ScrapNoteDetail', |
||||
|
'ScrapOutNoteDetail','SingleDoorPanelCustomerReturnNoteDetail','SingleDoorPanelDeliverNoteDetail', |
||||
|
'SingleDoorPanelProductAdjustNoteDetail','SingleDoorPanelProductReceiptNoteDetail','SingleDoorPanelProductTransferNoteDetail', |
||||
|
'StockReturnNoteDetail','SupplierAsnDetail','TracebackNoteDetail', |
||||
|
'UnplannedIssueNoteDetail','UnplannedReceiptNoteDetail','WarehouseTransferNoteDetail', |
||||
|
'WorkOrderDetail' |
||||
|
] |
||||
|
|
||||
|
// window.SITE_CONFIG['isAutoLogin'] = true
|
||||
|
// window.SITE_CONFIG['userNameOrEmailAddress'] = 'admin'
|
||||
|
// window.SITE_CONFIG['client_secret'] = '1q2w3E*'
|
||||
|
// window.SITE_CONFIG['columnsApiNamesZh'] = 'Z'
|
@ -0,0 +1,205 @@ |
|||||
|
import request from '@/utils/request' |
||||
|
let authApi = localStorage.getItem('authApi') + '/api' |
||||
|
let loginApi = localStorage.getItem('loginApi') |
||||
|
|
||||
|
export function logout() { |
||||
|
return request({ |
||||
|
url: authApi + '/account/logout', |
||||
|
method: 'get' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// faster-new
|
||||
|
// 登录
|
||||
|
export function login(data) { |
||||
|
return request({ |
||||
|
url: loginApi + '/CustAccount/login', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 获取token
|
||||
|
export function token(data) { |
||||
|
return request({ |
||||
|
url: authApi + '/connect/token', |
||||
|
method: 'post', |
||||
|
headers: { |
||||
|
'Content-Type': 'application/x-www-form-urlencoded' |
||||
|
}, |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 通过token获取用户信息(单点登录)
|
||||
|
export function getUsersByToken(token) { |
||||
|
return request({ |
||||
|
url: loginApi + '/connect/userinfo', |
||||
|
method: 'get', |
||||
|
Token:token |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 通过用户名获取用户信息
|
||||
|
export function getUsersByUserName(name) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/users/by-username/'+name, |
||||
|
method: 'get', |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 获取表头zh转义数据
|
||||
|
export function getInterfaceBoard() { |
||||
|
return request({ |
||||
|
method:'get', |
||||
|
url: authApi + '/abp/application-localization', |
||||
|
params:{ |
||||
|
CultureName:localStorage.getItem('browserLanguage'), |
||||
|
OnlyDynamics:false |
||||
|
} |
||||
|
// params:{IncludeLocalizationResources:true}
|
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 获取菜单数据
|
||||
|
export function getDefinitionMenu(IncludeTypes) { |
||||
|
return request({ |
||||
|
method:'get', |
||||
|
url: authApi + '/abp/application-configuration', |
||||
|
params:{IncludeLocalizationResources:true} |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 获取枚举数据/dto列类型等所有配置
|
||||
|
export async function getApiDefinition() { |
||||
|
return request({ |
||||
|
method:'get', |
||||
|
url: authApi + '/abp/api-definition', |
||||
|
params:{IncludeTypes:true} |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// *************权限Roles页面维护*************
|
||||
|
//获取列表
|
||||
|
export function getPageListRoles(data) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/roles', |
||||
|
method: 'get', |
||||
|
params: data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//获取权限模板
|
||||
|
export function getPermissionsRoles(data) { |
||||
|
return request({ |
||||
|
url: authApi +'/permission-management/permissions', |
||||
|
method: 'get', |
||||
|
params: data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 创建角色
|
||||
|
export function postCreateRoles(data) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/roles', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//编辑角色
|
||||
|
export function postUpdateRoles(data, id) { |
||||
|
return request({ |
||||
|
url: authApi+'/identity/roles/' + id, |
||||
|
method: 'put', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//删除角色
|
||||
|
export function postDeleteRoles(id) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/roles/' + id, |
||||
|
method: 'delete', |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//保存权限模板
|
||||
|
export function savePermissionsRoles(URL, data) { |
||||
|
return request({ |
||||
|
url: authApi + URL, |
||||
|
method: 'put', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 更新权限
|
||||
|
export function updatePermissionsGranted(pname,pkey) { |
||||
|
return request({ |
||||
|
url: authApi + `/permissions/get-isGranted?name=demox&providerName=${pname}&providerKey=${pkey}`, |
||||
|
method: 'post', |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// *************用户Users页面维护*************
|
||||
|
|
||||
|
//获取全部用户信息
|
||||
|
export function getPageListUsers(data) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/users', |
||||
|
method: 'get', |
||||
|
params: data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//新建用户
|
||||
|
export function postCreateUser(data) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/users', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//编辑用户
|
||||
|
export function postUpdateUser(data, id) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/users/' + id, |
||||
|
method: 'put', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//删除用户
|
||||
|
export function postDeleteUser(id) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/users/' + id, |
||||
|
method: 'delete', |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 获取当前用户的角色
|
||||
|
export function usersroles() { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/users/assignable-roles', |
||||
|
method: 'get' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//获取当前角色
|
||||
|
export function getusersID(data) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/users/' + data + '/roles', |
||||
|
method: 'get' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//修改登录用户的密码-强密码规则
|
||||
|
export function postLoginUserInfo(data, id) { |
||||
|
return request({ |
||||
|
url: authApi + '/identity/users/change-password/' + id, |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
import Oidc from "oidc-client"; |
||||
|
|
||||
|
export const identityServerBase = localStorage.getItem('oidcLogin_url');//目标服务器登录地址
|
||||
|
export const vueBase = window.location.origin |
||||
|
|
||||
|
// 参考文档 https://github.com/IdentityModel/oidc-client-js/wiki
|
||||
|
export const mgr = new Oidc.UserManager({ |
||||
|
authority: `${identityServerBase}`, // 认证服务器
|
||||
|
client_id: localStorage.getItem('oidcLogin_clientId'), // 表示客户端的ID,必选项
|
||||
|
redirect_uri: `${vueBase}/callback`,// 表示重定向URI,认证服务器回调的客户端页面。可选项
|
||||
|
response_type: `code`, |
||||
|
scope: localStorage.getItem('oidcLogin_scopes'), // 表示申请的权限范围,可选项
|
||||
|
post_logout_redirect_uri: `${vueBase}/home?action=logout`, |
||||
|
automaticSilentRenew: false, |
||||
|
|
||||
|
// accessTokenExpiringNotificationTime: 10,
|
||||
|
// filterProtocolClaims: false,
|
||||
|
// loadUserInfo: true,
|
||||
|
// monitorSession: false,
|
||||
|
// includeIdTokenInSilentRenew : false,
|
||||
|
}); |
@ -0,0 +1,25 @@ |
|||||
|
<template> |
||||
|
<!-- callback.vue(单点登录成功的回调页面) --> |
||||
|
<div |
||||
|
style="height: 100vh;" |
||||
|
v-loading="loading" |
||||
|
element-loading-text="正在加载中" |
||||
|
element-loading-spinner="el-icon-loading" |
||||
|
></div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
name:'callback', |
||||
|
data() { |
||||
|
return { |
||||
|
loading:true |
||||
|
}; |
||||
|
}, |
||||
|
created() { |
||||
|
this.$store.dispatch("user/loginBySignin").then(()=>{ |
||||
|
this.$router.push("/"); |
||||
|
}) |
||||
|
} |
||||
|
}; |
||||
|
</script> |
@ -1,221 +0,0 @@ |
|||||
<template> |
|
||||
<!-- 瀑布流版本布局 + 高度随宽度调整变化 --> |
|
||||
<el-card class="homeMenuPage" v-resize="setMaxHeight" v-loading="loading"> |
|
||||
<div class="firstMenuContain homeMenuPage-List"> |
|
||||
<div |
|
||||
class="firstMenuItem menuItem" |
|
||||
v-for="(item,index) in navList" |
|
||||
:key="index" |
|
||||
> |
|
||||
<div class="firstTitle" v-if="item.meta"> |
|
||||
<div class="icon"><svg-icon :icon-class="item.meta.icon" style="fill:currentColor; color:#fff;"/></div> |
|
||||
<div>{{item.meta.title}}</div> |
|
||||
</div> |
|
||||
<ul class="menuInfo" v-if="item.children && item.children.length > 0"> |
|
||||
<li |
|
||||
v-for="(item2,index2) in item.children" |
|
||||
:key="index2" |
|
||||
> |
|
||||
<div class="title"> |
|
||||
{{item2.meta.title}} |
|
||||
<i class="el-icon-arrow-right"></i> |
|
||||
</div> |
|
||||
<!-- 有下级菜单 --> |
|
||||
<div class="lastList" v-if="item2.children && item2.children.length > 0"> |
|
||||
<div |
|
||||
v-for="(item3,index3) in item2.children" |
|
||||
:key="index3" |
|
||||
class="item" |
|
||||
> |
|
||||
<span @click="goPage(item3)">{{item3.meta.title}}</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
<!-- 如果二级为最后一级,统一格式,补充到children中 --> |
|
||||
<div class="lastList" v-else> |
|
||||
<div class="item"> |
|
||||
<span @click="goPage(item2)">{{item2.meta.title}}</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<span class="firstMenuItem break"></span> |
|
||||
<span class="firstMenuItem break"></span> |
|
||||
<span class="firstMenuItem break"></span> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import { mapGetters } from 'vuex' |
|
||||
export default { |
|
||||
directives: { |
|
||||
// 页面宽度变化,重新计算总高度 |
|
||||
resize: { // 指令的名称 |
|
||||
bind(el, binding) { // el为绑定的元素,binding为绑定给指令的对象 |
|
||||
let width = '', height = ''; |
|
||||
function isReize() { |
|
||||
const style = document.defaultView.getComputedStyle(el); |
|
||||
if (width !== style.width || height !== style.height) { |
|
||||
binding.value(); // 关键 |
|
||||
} |
|
||||
width = style.width; |
|
||||
height = style.height; |
|
||||
} |
|
||||
el.__vueSetInterval__ = setInterval(isReize, 300); |
|
||||
}, |
|
||||
unbind(el) { |
|
||||
clearInterval(el.__vueSetInterval__); |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
name: 'Dashboard', |
|
||||
data() { |
|
||||
return { |
|
||||
loading:true, |
|
||||
navList:[], |
|
||||
} |
|
||||
}, |
|
||||
watch: { |
|
||||
permission_routes(val, oldVal) { |
|
||||
this.initData(val) |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
...mapGetters([ |
|
||||
'permission_routes' |
|
||||
]) |
|
||||
}, |
|
||||
mounted(){ |
|
||||
this.initData(this.permission_routes) |
|
||||
}, |
|
||||
methods:{ |
|
||||
initData(data){ |
|
||||
data.forEach(item => { |
|
||||
if(!item.hidden && item.path !== '/') { |
|
||||
this.navList.push(item) |
|
||||
} |
|
||||
}) |
|
||||
this.$nextTick(()=>{ |
|
||||
this.setMaxHeight() |
|
||||
}) |
|
||||
}, |
|
||||
goPage(item){ |
|
||||
this.$router.push({name: item.name}) |
|
||||
}, |
|
||||
setMaxHeight(){ |
|
||||
// todo:用this.$route.path != /dashboard 判断 |
|
||||
console.log("setMaxHeight",this.$route.path) |
|
||||
if(document.getElementsByClassName("homeMenuPage-List").length <= 0){ |
|
||||
return |
|
||||
} |
|
||||
let _items = document.getElementsByClassName("menuItem") |
|
||||
let _left = []; |
|
||||
let _right = []; |
|
||||
let _left_num = 0; |
|
||||
let _right_num = 0; |
|
||||
_items.forEach((item,key)=>{ |
|
||||
// 左侧 |
|
||||
if(key % 2 == 0){ |
|
||||
_left.push(item.offsetHeight) |
|
||||
_left_num += Number(item.offsetHeight) |
|
||||
} |
|
||||
// 右侧 |
|
||||
else{ |
|
||||
_right.push(item.offsetHeight) |
|
||||
_right_num += Number(item.offsetHeight) |
|
||||
} |
|
||||
}) |
|
||||
let _max = _left_num > _right_num ? _left_num : _right_num |
|
||||
_max += 20 * _items.length |
|
||||
document.getElementsByClassName("homeMenuPage-List")[0].style.height = _max + 'px' |
|
||||
this.loading = false |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
<style lang="scss" scoped> |
|
||||
$iconSize:26px; |
|
||||
.homeMenuPage{ |
|
||||
height: 100%; |
|
||||
overflow: auto; |
|
||||
// padding: 20px 0; |
|
||||
} |
|
||||
.firstMenuContain { |
|
||||
display: flex; |
|
||||
flex-flow: column wrap; |
|
||||
align-content: space-between; |
|
||||
/* 容器必须有固定高度 |
|
||||
* 且高度大于最高的列高 */ |
|
||||
// height: 2500px; |
|
||||
.firstMenuItem { |
|
||||
width: calc(50% - 20px); |
|
||||
margin-bottom: 20px; |
|
||||
|
|
||||
.firstTitle{ |
|
||||
display: flex; |
|
||||
font-weight: bold; |
|
||||
font-size: 18px; |
|
||||
.icon{ |
|
||||
background: #409eff; |
|
||||
color: #fff; |
|
||||
border-radius: 4px; |
|
||||
width: $iconSize; |
|
||||
height: $iconSize; |
|
||||
line-height: $iconSize; |
|
||||
overflow: hidden; |
|
||||
text-align: center; |
|
||||
margin-right: 10px; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.menuInfo{ |
|
||||
background: #f9fafb; |
|
||||
margin: 20px 0; |
|
||||
padding: 5px 0; |
|
||||
li{ |
|
||||
list-style: none; |
|
||||
display: flex; |
|
||||
padding-top: 10px; |
|
||||
.title{ |
|
||||
width: 240px; |
|
||||
text-align: right; |
|
||||
font-weight: bold; |
|
||||
flex-shrink: 0; |
|
||||
.el-icon-arrow-right{ |
|
||||
font-weight: bold; |
|
||||
font-size: 14px; |
|
||||
} |
|
||||
} |
|
||||
.lastList{ |
|
||||
display: flex; |
|
||||
flex-wrap: wrap; |
|
||||
margin-left: 15px; |
|
||||
.item{ |
|
||||
margin-right: 25px; |
|
||||
margin-bottom: 10px; |
|
||||
cursor: pointer; |
|
||||
|
|
||||
&:hover{ |
|
||||
color: #409eff; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* 将内容块重排为4列 */ |
|
||||
&:nth-of-type(2n+1) { order: 1; } |
|
||||
&:nth-of-type(2n) { order: 2; } |
|
||||
|
|
||||
/* 强制换列 */ |
|
||||
&.break { |
|
||||
flex-basis: 100%; |
|
||||
width: 0; |
|
||||
margin: 0; |
|
||||
content: ""; |
|
||||
padding: 0; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
@ -0,0 +1,548 @@ |
|||||
|
<template> |
||||
|
<div class="appMainPage"> |
||||
|
<el-row :gutter="24"> |
||||
|
<el-col :md="16" style="margin-bottom: 10px"> |
||||
|
<div class="main"> |
||||
|
<div class="table-active"> |
||||
|
<div class="bttton-box"> |
||||
|
<el-button |
||||
|
type="primary" |
||||
|
icon="el-icon-plus" |
||||
|
@click="handleCreate" |
||||
|
size="mini" |
||||
|
v-permission="['AbpIdentity.Roles.Create']" |
||||
|
>创建角色</el-button |
||||
|
> |
||||
|
<el-button |
||||
|
type="success" |
||||
|
icon="el-icon-refresh" |
||||
|
@click.native.prevent="Createview" |
||||
|
size="mini" |
||||
|
>刷新</el-button |
||||
|
> |
||||
|
</div> |
||||
|
<div class="query-box"> |
||||
|
<!-- 搜索 --> |
||||
|
<searchNormal |
||||
|
ref="normalSearch_roleManage" |
||||
|
@searchNormalClick="filtrate" |
||||
|
@searchNormalClear="filtrate" |
||||
|
></searchNormal> |
||||
|
</div> |
||||
|
</div> |
||||
|
<el-table |
||||
|
v-loading="tableLoading" |
||||
|
:border="true" |
||||
|
ref="multipleTable" |
||||
|
:data="tableData" |
||||
|
height="calc(100vh - 265px)" |
||||
|
style="width: 100%" |
||||
|
@sort-change="sortChange" |
||||
|
@row-click="handleRowClick" |
||||
|
@selection-change="handleSelectionChange" |
||||
|
> |
||||
|
<el-table-column |
||||
|
prop="name" |
||||
|
label="角色名" |
||||
|
sortable="custom" |
||||
|
:align="'left'" |
||||
|
/> |
||||
|
<el-table-column label="操作" :align="'center'" width="150"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-button |
||||
|
type="text" |
||||
|
@click="Update(scope.row)" |
||||
|
v-permission="['AbpIdentity.Roles.Update']" |
||||
|
v-if="scope.row.name == 'admin' ? false : true" |
||||
|
>编辑</el-button |
||||
|
> |
||||
|
<el-button |
||||
|
type="text" |
||||
|
@click="Delete(scope.row)" |
||||
|
v-permission="['AbpIdentity.Roles.Delete']" |
||||
|
v-if="scope.row.name == 'admin' ? false : true" |
||||
|
style="color:red" |
||||
|
>删除</el-button |
||||
|
> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
<div class="Footer"> |
||||
|
<el-pagination |
||||
|
background |
||||
|
@size-change="handleSizeChange" |
||||
|
@current-change="handleCurrentChange" |
||||
|
:current-page="queryInfo.currentPage" |
||||
|
:page-sizes="[10, 15, 20]" |
||||
|
:page-size="queryInfo.pagesize" |
||||
|
layout="total, sizes, prev, pager, next, jumper" |
||||
|
:total="total" |
||||
|
> |
||||
|
</el-pagination> |
||||
|
<el-button |
||||
|
type="primary" |
||||
|
size="mini" |
||||
|
style="margin-left: 10px; background-color: #409eff" |
||||
|
>确定</el-button |
||||
|
> |
||||
|
</div> |
||||
|
</el-col> |
||||
|
<el-col |
||||
|
v-loading="treeLoading" |
||||
|
:md="8" |
||||
|
v-permission="['AbpIdentity.Roles.Update']" |
||||
|
> |
||||
|
<el-card class="box-card" shadow="never"> |
||||
|
<div slot="header" class="clearfix" style="height: 20px"> |
||||
|
<el-tooltip |
||||
|
class="item" |
||||
|
effect="dark" |
||||
|
content="选择指定角色的模块权限" |
||||
|
placement="top" |
||||
|
> |
||||
|
<span class="role-span">【{{name}}角色】模块权限</span> |
||||
|
</el-tooltip> |
||||
|
<el-button |
||||
|
:loading="treeLoading" |
||||
|
:disabled="multipleSelection.length != 1" |
||||
|
icon="el-icon-check" |
||||
|
size="mini" |
||||
|
style="float: right; padding: 6px 9px" |
||||
|
type="primary" |
||||
|
@click="savePer" |
||||
|
v-permission="['AbpIdentity.Roles.ManagePermissions']" |
||||
|
v-if="name != 'admin'" |
||||
|
>保存</el-button> |
||||
|
</div> |
||||
|
<el-tree |
||||
|
ref="tree" |
||||
|
:check-strictly="false" |
||||
|
:data="permissionsData" |
||||
|
:props="defaultProps" |
||||
|
show-checkbox |
||||
|
node-key="name" |
||||
|
class="permission-tree" |
||||
|
/> |
||||
|
</el-card> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
<el-dialog |
||||
|
:title="formTitle" |
||||
|
:visible.sync="dialogVisible" |
||||
|
width="800px" |
||||
|
:close-on-click-modal="false" |
||||
|
> |
||||
|
<el-form |
||||
|
ref="form" |
||||
|
:model="form" |
||||
|
label-width="70px" |
||||
|
:rules="rules" |
||||
|
> |
||||
|
<el-form-item label="名称" prop="name"> |
||||
|
<el-input v-model="form.name" style="width: 380px" maxlength="23" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button @click="resetform">取 消</el-button> |
||||
|
<el-button type="primary" @click="submitForm">确 定</el-button> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import { |
||||
|
getPageListRoles, |
||||
|
getPermissionsRoles, |
||||
|
savePermissionsRoles, |
||||
|
updatePermissionsGranted, |
||||
|
postCreateRoles, |
||||
|
postUpdateRoles, |
||||
|
postDeleteRoles, |
||||
|
} from "@/api/wms-auth"; |
||||
|
import permission from "@/utils/permission/index"; |
||||
|
import searchNormal from "@/components/searchNormal/index.vue" |
||||
|
export default { |
||||
|
directives: { permission }, |
||||
|
components:{ |
||||
|
searchNormal |
||||
|
}, |
||||
|
name:"AbpIdentityMarkRoles", |
||||
|
data() { |
||||
|
// 自定义验证 |
||||
|
return { |
||||
|
URL: 'identity/roles', |
||||
|
// 角色名称 |
||||
|
name: '', |
||||
|
//编辑弹出 |
||||
|
dialogVisible: false, |
||||
|
//创建与编辑判断 |
||||
|
isEdit: false, |
||||
|
//弹出title |
||||
|
formTitle: "", |
||||
|
//总条数 |
||||
|
total: 0, |
||||
|
//分页器 |
||||
|
queryInfo: { |
||||
|
//当前页数 |
||||
|
currentPage: 1, |
||||
|
//每页条数 |
||||
|
pagesize: 20, |
||||
|
Sorting: "", |
||||
|
}, |
||||
|
//当前用户ID |
||||
|
usersId: "", |
||||
|
//编辑参数 |
||||
|
concurrencyStamp: "", |
||||
|
//新增参数 |
||||
|
form: { |
||||
|
name: "", |
||||
|
isDefault: true, |
||||
|
isPublic: true, |
||||
|
}, |
||||
|
// 左侧table加载 |
||||
|
tableLoading:false, |
||||
|
//权限模板树形控件加载 |
||||
|
treeLoading: false, |
||||
|
//权限模板树形控件默认勾选的数组 |
||||
|
checkedPermission: [], |
||||
|
//权限模板树形结构渲染数据 |
||||
|
permissionsData: [], |
||||
|
defaultProps: { |
||||
|
children: "children", |
||||
|
label: "displayName", |
||||
|
}, |
||||
|
//渲染权限模板参数 |
||||
|
params: { |
||||
|
providerName: "R", |
||||
|
providerKey: "", |
||||
|
}, |
||||
|
//选择行数据 |
||||
|
multipleSelection: [], |
||||
|
//table渲染 |
||||
|
tableData: [], |
||||
|
rules: { |
||||
|
name: [ |
||||
|
{ required: true, trigger: "blur", message: "请输入姓名" }, |
||||
|
{ |
||||
|
min: 1, |
||||
|
max: 23, |
||||
|
message: "长度在 1 到 23 个字符", |
||||
|
trigger: "blur", |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}; |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.pageList(); |
||||
|
}, |
||||
|
methods: { |
||||
|
//请求数据渲染table |
||||
|
pageList(val) { |
||||
|
const data = { |
||||
|
Filter: val || '', |
||||
|
Sorting: this.queryInfo.Sorting, |
||||
|
SkipCount: (this.queryInfo.currentPage - 1) * this.queryInfo.pagesize, |
||||
|
MaxResultCount: this.queryInfo.pagesize, |
||||
|
}; |
||||
|
this.tableLoading = true |
||||
|
getPageListRoles(data).then((res) => { |
||||
|
this.total = res.totalCount; |
||||
|
this.tableData = res.items; |
||||
|
this.tableLoading = false |
||||
|
}).catch(err=>{ |
||||
|
console.log(err) |
||||
|
this.tableLoading = false |
||||
|
}) |
||||
|
}, |
||||
|
//排序 |
||||
|
sortChange(data) { |
||||
|
const { prop, order } = data; |
||||
|
if (!prop || !order) { |
||||
|
this.queryInfo.Sorting = ""; |
||||
|
this.handleFilter(); |
||||
|
return; |
||||
|
} |
||||
|
this.queryInfo.Sorting = prop + " " + order; |
||||
|
this.handleFilter(); |
||||
|
}, |
||||
|
//排序触发页面更新 |
||||
|
handleFilter() { |
||||
|
this.queryInfo.currentPage = 1; |
||||
|
this.pageList(); |
||||
|
}, |
||||
|
//筛选 |
||||
|
filtrate(val) { |
||||
|
this.queryInfo.currentPage = 1; |
||||
|
this.pageList(val); |
||||
|
}, |
||||
|
//选择每页条数分页 |
||||
|
handleSizeChange(val) { |
||||
|
this.queryInfo.pagesize = val; |
||||
|
this.pageList(); |
||||
|
}, |
||||
|
//选择当前页分页 |
||||
|
handleCurrentChange(val) { |
||||
|
this.queryInfo.currentPage = val; |
||||
|
this.pageList(); |
||||
|
}, |
||||
|
//重置创建与编辑后的参数 |
||||
|
resetform() { |
||||
|
this.$refs.form.resetFields(); |
||||
|
this.dialogVisible = false; |
||||
|
this.form.name = ""; |
||||
|
this.$refs.multipleTable.clearSelection(); |
||||
|
}, |
||||
|
//创建角色 |
||||
|
handleCreate() { |
||||
|
this.formTitle = "创建角色"; |
||||
|
this.dialogVisible = true; |
||||
|
this.isEdit = false; |
||||
|
}, |
||||
|
//刷新 |
||||
|
Createview() { |
||||
|
this.queryInfo.currentPage = 1; |
||||
|
this.queryInfo.Sorting = ""; |
||||
|
this.$refs.normalSearch_roleManage.searchNormalClear()//清空搜索 |
||||
|
this.$refs.multipleTable.clearSort(); |
||||
|
}, |
||||
|
//编辑默认参数 |
||||
|
Update(row) { |
||||
|
if (row) { |
||||
|
this.formTitle = "编辑角色"; |
||||
|
this.dialogVisible = true; |
||||
|
this.isEdit = true; |
||||
|
this.usersId = row.id; |
||||
|
this.form.name = row.name; |
||||
|
this.concurrencyStamp = row.concurrencyStamp; |
||||
|
} |
||||
|
}, |
||||
|
//删除 |
||||
|
Delete(row) { |
||||
|
this.$confirm("此操作将永久删除该角色, 是否继续?", "提示", { |
||||
|
confirmButtonText: "确定", |
||||
|
cancelButtonText: "取消", |
||||
|
type: "warning", |
||||
|
}) |
||||
|
.then(() => { |
||||
|
if (this.tableData.length == 1) { |
||||
|
this.queryInfo.currentPage = this.queryInfo.currentPage - 1; |
||||
|
} |
||||
|
postDeleteRoles(row.id).then((res) => { |
||||
|
this.$successMsg("删除成功!"); |
||||
|
this.pageList(); |
||||
|
this.permissionsData = [] |
||||
|
}); |
||||
|
}) |
||||
|
.catch(() => {}); |
||||
|
}, |
||||
|
//创建与编辑 |
||||
|
submitForm() { |
||||
|
this.$refs.form.validate((valid) => { |
||||
|
//创建报表组 |
||||
|
if (valid && !this.isEdit) { |
||||
|
postCreateRoles(this.form) |
||||
|
.then((res) => { |
||||
|
this.resetform(); |
||||
|
this.$successMsg("创建成功!"); |
||||
|
this.queryInfo.currentPage = 1; |
||||
|
this.pageList(); |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
this.resetform(); |
||||
|
}); |
||||
|
} else if (valid && this.isEdit) { |
||||
|
//编辑报表 |
||||
|
const data = JSON.parse(JSON.stringify(this.form)); |
||||
|
data.concurrencyStamp = this.concurrencyStamp; |
||||
|
postUpdateRoles(data, this.usersId) |
||||
|
.then((res) => { |
||||
|
this.$successMsg("编辑成功!"); |
||||
|
this.pageList(); |
||||
|
this.resetform(); |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
this.resetform(); |
||||
|
}); |
||||
|
} else { |
||||
|
this.$errorMsg("请按照提示继续输入!"); |
||||
|
return false; |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
handleSelectionChange(val) { |
||||
|
this.multipleSelection = val; |
||||
|
}, |
||||
|
//模板权限保存 |
||||
|
savePer(){ |
||||
|
let _allList = [] |
||||
|
let checkedKeys = this.$refs.tree.getCheckedKeys(); |
||||
|
this.permissionsData.forEach(item=>{ |
||||
|
// 菜单层级 |
||||
|
item.children.forEach(item_menu=>{ |
||||
|
let _Granted1 = checkedKeys.indexOf(item_menu.name) >= 0 ? true : false |
||||
|
_allList.push({isGranted:_Granted1,name:item_menu.name}) |
||||
|
// 增删改层级 |
||||
|
if(item_menu.children){ |
||||
|
item_menu.children.forEach(item_handle=>{ |
||||
|
let _Granted2 = checkedKeys.indexOf(item_handle.name) >= 0 ? true : false |
||||
|
_allList.push({isGranted:_Granted2,name:item_handle.name}) |
||||
|
// 如果增删改有已选,更改父级为true |
||||
|
if(_Granted2){ |
||||
|
_allList.forEach((allItem)=>{ |
||||
|
if(allItem.name == item_handle.parentName){ |
||||
|
allItem.isGranted = true |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
this.treeLoading = true; |
||||
|
savePermissionsRoles( |
||||
|
`/permission-management/permissions?providerName=${this.params.providerName}&providerKey=${this.multipleSelection[0].name}`, |
||||
|
{permissions:_allList} |
||||
|
).then((response) => { |
||||
|
updatePermissionsGranted(this.params.providerName,this.multipleSelection[0].name).then(()=>{ |
||||
|
this.$notify({ |
||||
|
title: "成功", |
||||
|
message: "更新成功", |
||||
|
type: "success", |
||||
|
duration: 2000, |
||||
|
}); |
||||
|
this.treeLoading = false; |
||||
|
// 如果更改的是当前用户,则页面刷新 |
||||
|
if(this.multipleSelection[0].name == this.$store.getters.currentUserInfo.name){ |
||||
|
location.reload() |
||||
|
} |
||||
|
}).catch(()=>{ |
||||
|
this.treeLoading = false; |
||||
|
}) |
||||
|
}).catch(err=>{ |
||||
|
this.treeLoading = false; |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
//点击table行渲染权限模板 |
||||
|
handleRowClick(row, column, event) { |
||||
|
let that = this |
||||
|
this.name = row.name |
||||
|
this.treeLoading = true; |
||||
|
// if (row.name == "admin") { |
||||
|
// this.$notify({ |
||||
|
// title: "提示", |
||||
|
// message: "不可更改超级管理员权限", |
||||
|
// type: "warning", |
||||
|
// duration: 2000, |
||||
|
// }); |
||||
|
// this.$refs.multipleTable.clearSelection(); |
||||
|
// this.permissionsData = []; |
||||
|
// this.checkedPermission = []; |
||||
|
// } else { |
||||
|
this.$refs.multipleTable.clearSelection(); |
||||
|
this.$refs.multipleTable.toggleRowSelection(row); |
||||
|
// } |
||||
|
|
||||
|
this.params.providerKey = row.name; |
||||
|
getPermissionsRoles(this.params).then((res) => { |
||||
|
this.permissionsData = []; |
||||
|
this.checkedPermission = []; |
||||
|
// 根据前端菜单,进行重置分组 |
||||
|
res.groups.forEach((itemRes,indexRes) => { |
||||
|
itemRes.children = [] |
||||
|
this.permissionsData.push(itemRes) |
||||
|
// todo:使用递归优化 |
||||
|
itemRes.permissions.forEach(item => { |
||||
|
if(!item.parentName){ |
||||
|
// 当前权限 |
||||
|
if(item.isGranted)this.checkedPermission.push(item.name) |
||||
|
this.permissionsData[indexRes].children.push(item) |
||||
|
}else{ |
||||
|
// 当前权限 |
||||
|
if(item.isGranted)this.checkedPermission.push(item.name) |
||||
|
this.permissionsData[indexRes].children.forEach((pItem,pindex)=>{ |
||||
|
if(pItem.name == item.parentName){ |
||||
|
if(!this.permissionsData[indexRes].children[pindex].children)this.permissionsData[indexRes].children[pindex].children = [] |
||||
|
this.permissionsData[indexRes].children[pindex].children.push(item) |
||||
|
// 如果children中有一个为flase,当前权限,则删除父级,用于回显 |
||||
|
if(item.isGranted == false){ |
||||
|
if(this.checkedPermission.indexOf(item.parentName) >= 0){ |
||||
|
this.checkedPermission.splice(this.checkedPermission.indexOf(item.parentName),1) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
that.$nextTick(() => { |
||||
|
that.$refs.tree.setCheckedKeys(this.checkedPermission) |
||||
|
}) |
||||
|
console.log('拥有权限',this.checkedPermission) |
||||
|
console.log('菜单树',this.permissionsData) |
||||
|
that.treeLoading = false; |
||||
|
}) |
||||
|
.catch((err)=>{ |
||||
|
this.$errorMsg('暂无更改权限') |
||||
|
that.treeLoading = false; |
||||
|
}) |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style lang="scss" scoped> |
||||
|
.appMainPage { |
||||
|
padding: 20px; |
||||
|
.main { |
||||
|
|
||||
|
.table-active { |
||||
|
display: flex; |
||||
|
flex-wrap: wrap; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
padding: 5px 0 15px 0; |
||||
|
|
||||
|
.bttton-box { |
||||
|
display: flex; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.el-table__body-wrapper { |
||||
|
tbody { |
||||
|
span { |
||||
|
cursor: pointer; |
||||
|
|
||||
|
&:hover { |
||||
|
color: #409eff; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.Footer { |
||||
|
padding: 25px 0; |
||||
|
display: flex; |
||||
|
justify-content: flex-end; |
||||
|
} |
||||
|
|
||||
|
::v-deep .el-dialog { |
||||
|
.el-dialog__header { |
||||
|
button { |
||||
|
display: none; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
.permission-tree{ |
||||
|
padding: 20px; |
||||
|
height: 690px; |
||||
|
overflow-y: auto; |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
|
|
@ -0,0 +1,637 @@ |
|||||
|
<template> |
||||
|
<div class="appMainPage" v-loading="loading"> |
||||
|
<div class="main"> |
||||
|
<div class="table-active"> |
||||
|
<div class="bttton-box"> |
||||
|
<el-button |
||||
|
type="primary" |
||||
|
icon="el-icon-plus" |
||||
|
@click="handleCreate" |
||||
|
size="mini" |
||||
|
v-permission="['AbpIdentity.Users.Create']" |
||||
|
>创建用户</el-button |
||||
|
> |
||||
|
<el-button |
||||
|
type="success" |
||||
|
icon="el-icon-refresh" |
||||
|
@click.native.prevent="Createview" |
||||
|
size="mini" |
||||
|
>刷新</el-button |
||||
|
> |
||||
|
</div> |
||||
|
<div class="query-box"> |
||||
|
<!-- 搜索 --> |
||||
|
<searchNormal |
||||
|
ref="normalSearch_UserManage" |
||||
|
@searchNormalClick="filtrate" |
||||
|
@searchNormalClear="filtrate" |
||||
|
></searchNormal> |
||||
|
</div> |
||||
|
</div> |
||||
|
<el-table |
||||
|
ref="multipleTable" |
||||
|
:data="tableData" |
||||
|
height="calc(100vh - 260px)" |
||||
|
style="width: 100%" |
||||
|
@sort-change="sortChange" |
||||
|
@selection-change="handleSelectionChange" |
||||
|
@row-click="handleRowClick" |
||||
|
:border="true" |
||||
|
> |
||||
|
<el-table-column :align="'center'" type="selection" width="55" /> |
||||
|
<el-table-column |
||||
|
prop="userName" |
||||
|
label="用户名" |
||||
|
width="180" |
||||
|
:align="'left'" |
||||
|
sortable="custom" |
||||
|
/> |
||||
|
<el-table-column |
||||
|
prop="name" |
||||
|
label="姓名" |
||||
|
width="180" |
||||
|
:align="'left'" |
||||
|
sortable="custom" |
||||
|
/> |
||||
|
<el-table-column |
||||
|
prop="isActive" |
||||
|
label="是否启用" |
||||
|
sortable="custom" |
||||
|
:align="'center'" |
||||
|
width="180" |
||||
|
> |
||||
|
<template slot-scope="scope"> |
||||
|
<span>{{ scope.row['isActive'] | trigger('whetherOrNot', "label") }}</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="操作" :align="'center'" width="230"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-button |
||||
|
type="text" |
||||
|
@click="Update(scope.row)" |
||||
|
v-permission="['AbpIdentity.Users.Update']" |
||||
|
v-if="scope.row.name == 'admin' ? false : true" |
||||
|
>编辑</el-button> |
||||
|
<el-button |
||||
|
type="text" |
||||
|
@click="deleteUser(scope.row)" |
||||
|
v-if="scope.row.name == 'admin' ? false : true" |
||||
|
v-permission="['AbpIdentity.Users.Delete']" |
||||
|
style="color:red" |
||||
|
>删除用户</el-button> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
<div class="Footer"> |
||||
|
<el-pagination |
||||
|
background |
||||
|
@size-change="handleSizeChange" |
||||
|
@current-change="handleCurrentChange" |
||||
|
:current-page="queryInfo.currentPage" |
||||
|
:page-sizes="[10, 15, 20]" |
||||
|
:page-size="queryInfo.pagesize" |
||||
|
layout="total, sizes, prev, pager, next, jumper" |
||||
|
:total="total" |
||||
|
> |
||||
|
</el-pagination> |
||||
|
<el-button |
||||
|
type="primary" |
||||
|
size="mini" |
||||
|
style="margin-left: 10px; background-color: #409eff" |
||||
|
>确定</el-button |
||||
|
> |
||||
|
</div> |
||||
|
<el-dialog |
||||
|
:title="formTitle" |
||||
|
:visible.sync="dialogVisible" |
||||
|
width="800px" |
||||
|
:close-on-click-modal="false" |
||||
|
:modal-append-to-body="false" |
||||
|
:append-to-body="false" |
||||
|
> |
||||
|
<el-form |
||||
|
ref="form" |
||||
|
:model="form" |
||||
|
label-width="70px" |
||||
|
:rules="rules" |
||||
|
> |
||||
|
<el-form-item label="用户名" prop="userName"> |
||||
|
<el-input |
||||
|
v-model="form.userName" |
||||
|
maxlength="20" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="姓名" prop="name"> |
||||
|
<el-input v-model="form.name" maxlength="20" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="角色" prop="roleNames"> |
||||
|
<el-select |
||||
|
:disabled="!checkPermission(['AbpIdentity.Users.ManagePermissions']) && isEdit" |
||||
|
v-model="form.roleNames" |
||||
|
multiple |
||||
|
style="width: 100%" |
||||
|
placeholder="请选择" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="item in options" |
||||
|
:key="item.id" |
||||
|
:label="item.name" |
||||
|
:value="item.name" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="是否启用" prop="IsActive"> |
||||
|
<el-select |
||||
|
v-model="form.IsActive" |
||||
|
style="width: 100%" |
||||
|
placeholder="请选择" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="item in userOptions('whetherOrNot')" |
||||
|
:key="item.value" |
||||
|
:label="item.label" |
||||
|
:value="item.value" |
||||
|
></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="密码" prop="password" v-if="!isEdit"> |
||||
|
<el-input |
||||
|
ref="password" |
||||
|
v-model="form.password" |
||||
|
maxlength="16" |
||||
|
minlength="6" |
||||
|
:type="passwordType" |
||||
|
/> |
||||
|
<span class="show-pwd" @click="showPwd"> |
||||
|
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" /> |
||||
|
</span> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button @click="resetform">取 消</el-button> |
||||
|
<el-button type="primary" @click="submitForm">确 定</el-button> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import { isvalidPhone } from "@/utils/validate"; |
||||
|
import checkPermission from '@/utils/permission' |
||||
|
import { |
||||
|
getPageListUsers, |
||||
|
usersroles, |
||||
|
postCreateUser, |
||||
|
postUpdateUser, |
||||
|
postDeleteUser, |
||||
|
getusersID, |
||||
|
} from "@/api/wms-auth"; |
||||
|
import permission from "@/utils/permission/index"; |
||||
|
import searchNormal from "@/components/searchNormal/index.vue" |
||||
|
export default { |
||||
|
directives: { permission }, |
||||
|
components:{ |
||||
|
searchNormal |
||||
|
}, |
||||
|
name:"AbpIdentityMarkUsers", |
||||
|
data() { |
||||
|
// 自定义验证 |
||||
|
const validPhone = (rule, value, callback) => { |
||||
|
if (!value) { |
||||
|
callback(new Error("请输入电话号码")); |
||||
|
} else if (!isvalidPhone(value)) { |
||||
|
callback(new Error("请输入正确的11位手机号码")); |
||||
|
} else { |
||||
|
callback(); |
||||
|
} |
||||
|
}; |
||||
|
const validName = (rule, value, callback) => { |
||||
|
if (!value) { |
||||
|
callback(new Error("请输入登录名称")); |
||||
|
} else if (/[\u4E00-\u9FA5]/g.test(value)) { |
||||
|
callback(new Error("登录名不能输入汉字")); |
||||
|
} else { |
||||
|
callback(); |
||||
|
} |
||||
|
}; |
||||
|
// 简单 |
||||
|
// const validpassword = (rule, value, callback) => { |
||||
|
// if (!value) { |
||||
|
// callback(new Error("请输入密码")); |
||||
|
// } else { |
||||
|
// if ( |
||||
|
// /^(?=.*\d)(?=.*[a-z]).{6,16}$/.test( |
||||
|
// value |
||||
|
// ) |
||||
|
// ) { |
||||
|
// callback(); |
||||
|
// } else { |
||||
|
// callback(new Error("密码必须包含字母,数字混合,最小长度为6位")); |
||||
|
// } |
||||
|
// } |
||||
|
// }; |
||||
|
// 中等 |
||||
|
// const validpassword = (rule, value, callback) => { |
||||
|
// if (!value) { |
||||
|
// callback(new Error("请输入密码")); |
||||
|
// } else { |
||||
|
// if ( |
||||
|
// /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,16}$/.test( |
||||
|
// value |
||||
|
// ) |
||||
|
// ) { |
||||
|
// callback(); |
||||
|
// } else { |
||||
|
// callback(new Error("密码必须包含大小写,数字混合,最小长度为6位")); |
||||
|
// } |
||||
|
// } |
||||
|
// }; |
||||
|
// 复杂 |
||||
|
const validpassword = (rule, value, callback) => { |
||||
|
if (!value) { |
||||
|
callback(new Error("请输入密码")); |
||||
|
} else { |
||||
|
if ( |
||||
|
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#$%\*-\+=:,\\?\[\]\{}]).{6,16}$/.test( |
||||
|
value |
||||
|
) |
||||
|
) { |
||||
|
callback(); |
||||
|
} else { |
||||
|
callback(new Error("密码必须包含大小写,数字与特殊字符混合,最小长度为6位")); |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
const checkEmail = (rule, value, callback) => { |
||||
|
const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/; |
||||
|
if (!value) { |
||||
|
return callback(new Error("邮箱不能为空")); |
||||
|
} |
||||
|
setTimeout(() => { |
||||
|
if (mailReg.test(value)) { |
||||
|
callback(); |
||||
|
} else { |
||||
|
callback(new Error("请输入正确的邮箱格式")); |
||||
|
} |
||||
|
}, 100); |
||||
|
}; |
||||
|
return { |
||||
|
loading:false, |
||||
|
//编辑弹出 |
||||
|
dialogVisible: false, |
||||
|
//密码显示 |
||||
|
isEdit: false, |
||||
|
//弹出title |
||||
|
formTitle: "", |
||||
|
//总条数 |
||||
|
total: 0, |
||||
|
//分页器 |
||||
|
queryInfo: { |
||||
|
//当前页数 |
||||
|
currentPage: 1, |
||||
|
//每页条数 |
||||
|
pagesize: 20, |
||||
|
Sorting: "", |
||||
|
}, |
||||
|
//角色组 |
||||
|
options: [], |
||||
|
//当前用户ID |
||||
|
usersId: "", |
||||
|
//编辑参数 |
||||
|
concurrencyStamp: "", |
||||
|
//新增参数 |
||||
|
form: { |
||||
|
userName: "", |
||||
|
phoneNumber: "", |
||||
|
name: "", |
||||
|
email: "", |
||||
|
roleNames: [], |
||||
|
password: "", |
||||
|
surname: "", |
||||
|
lockoutEnabled: true, |
||||
|
IsActive: true, |
||||
|
}, |
||||
|
//密码明文 |
||||
|
passwordType: "password", |
||||
|
// |
||||
|
multipleSelection: [], |
||||
|
//table渲染 |
||||
|
tableData: [], |
||||
|
rules: { |
||||
|
userName: [ |
||||
|
{ required: true, trigger: "blur", validator: validName }, |
||||
|
{ |
||||
|
min: 2, |
||||
|
max: 20, |
||||
|
message: "长度在 2 到 20 个字符", |
||||
|
trigger: "blur", |
||||
|
}, |
||||
|
], |
||||
|
name: [ |
||||
|
{ required: true, trigger: "blur", message: "请输入姓名" }, |
||||
|
{ |
||||
|
min: 2, |
||||
|
max: 20, |
||||
|
message: "长度在 2 到 20 个字符", |
||||
|
trigger: "blur", |
||||
|
}, |
||||
|
], |
||||
|
email: [{ required: true, validator: checkEmail, trigger: "blur" }], |
||||
|
phoneNumber: [ |
||||
|
{ required: true, trigger: "blur", validator: validPhone }, |
||||
|
], |
||||
|
password: [ |
||||
|
{ required: true, trigger: "blur", message: "请输入密码" }, |
||||
|
{ |
||||
|
min: 6, |
||||
|
max: 16, |
||||
|
message: "长度在 6 到 16 个字符", |
||||
|
trigger: "blur", |
||||
|
}, |
||||
|
], |
||||
|
roleNames: [ |
||||
|
{ required: true, message: "请选择角色", trigger: "change" }, |
||||
|
], |
||||
|
}, |
||||
|
}; |
||||
|
}, |
||||
|
created() { |
||||
|
//获取所有角色 |
||||
|
usersroles().then((res) => { |
||||
|
this.options = res.items; |
||||
|
}); |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.pageList(); |
||||
|
}, |
||||
|
methods: { |
||||
|
checkPermission, |
||||
|
// 是否下拉 |
||||
|
userOptions(val){ |
||||
|
let options = this.$staticOptions[val] |
||||
|
return options() |
||||
|
}, |
||||
|
//请求数据渲染table |
||||
|
pageList(val) { |
||||
|
this.loading = true |
||||
|
const data = { |
||||
|
Filter: val || '', |
||||
|
Sorting: this.queryInfo.Sorting, |
||||
|
SkipCount: (this.queryInfo.currentPage - 1) * this.queryInfo.pagesize, |
||||
|
MaxResultCount: this.queryInfo.pagesize, |
||||
|
}; |
||||
|
getPageListUsers(data).then((res) => { |
||||
|
this.loading = false |
||||
|
const data = res; |
||||
|
this.total = data.totalCount; |
||||
|
this.tableData = data.items; |
||||
|
}).catch(()=>{ |
||||
|
this.loading = false |
||||
|
}); |
||||
|
}, |
||||
|
//密码明文显示 |
||||
|
showPwd() { |
||||
|
if (this.passwordType === "password") { |
||||
|
this.passwordType = ""; |
||||
|
} else { |
||||
|
this.passwordType = "password"; |
||||
|
} |
||||
|
this.$nextTick(() => { |
||||
|
this.$refs.password.focus(); |
||||
|
}); |
||||
|
}, |
||||
|
//排序 |
||||
|
sortChange(data) { |
||||
|
const { prop, order } = data; |
||||
|
if (!prop || !order) { |
||||
|
this.queryInfo.Sorting = ""; |
||||
|
this.handleFilter(); |
||||
|
return; |
||||
|
} |
||||
|
this.queryInfo.Sorting = prop + " " + order; |
||||
|
this.handleFilter(); |
||||
|
}, |
||||
|
//排序触发页面更新 |
||||
|
handleFilter() { |
||||
|
this.queryInfo.currentPage = 1; |
||||
|
this.pageList(); |
||||
|
}, |
||||
|
//筛选 |
||||
|
filtrate(val) { |
||||
|
this.queryInfo.currentPage = 1; |
||||
|
this.pageList(val); |
||||
|
}, |
||||
|
//选择每页条数分页 |
||||
|
handleSizeChange(val) { |
||||
|
this.queryInfo.pagesize = val; |
||||
|
this.pageList(); |
||||
|
}, |
||||
|
//选择当前页分页 |
||||
|
handleCurrentChange(val) { |
||||
|
this.queryInfo.currentPage = val; |
||||
|
this.pageList(); |
||||
|
}, |
||||
|
//重置新建与编辑后的参数 |
||||
|
resetform() { |
||||
|
this.$refs.form.resetFields(); |
||||
|
this.dialogVisible = false; |
||||
|
this.form.userName = ""; |
||||
|
this.form.phoneNumber = ""; |
||||
|
this.form.name = ""; |
||||
|
this.form.email = ""; |
||||
|
this.form.roleNames = []; |
||||
|
this.form.password = ""; |
||||
|
this.form.surname = ""; |
||||
|
this.form.IsActive = ""; |
||||
|
this.$refs.multipleTable.clearSelection(); |
||||
|
}, |
||||
|
handleCreate() { |
||||
|
this.formTitle = "创建用户"; |
||||
|
this.dialogVisible = true; |
||||
|
this.isEdit = false; |
||||
|
this.form.phoneNumber = this.getRandomPhoneNumber() |
||||
|
this.form.email = this.getRandomEmail() |
||||
|
usersroles().then((res) => { |
||||
|
this.options = res.items |
||||
|
}) |
||||
|
|
||||
|
}, |
||||
|
//刷新 |
||||
|
Createview() { |
||||
|
this.queryInfo.currentPage = 1; |
||||
|
this.queryInfo.Sorting = ""; |
||||
|
this.$refs.normalSearch_UserManage.searchNormalClear()//清空搜索 |
||||
|
usersroles().then((res) => { |
||||
|
this.options = res.items; |
||||
|
}); |
||||
|
this.$refs.multipleTable.clearSort(); |
||||
|
}, |
||||
|
//获取当前角色 |
||||
|
usersID(data) { |
||||
|
getusersID(data).then((res) => { |
||||
|
const data = res.items; |
||||
|
this.form.roleNames = data.map((item) => { |
||||
|
return item.name; |
||||
|
}); |
||||
|
}); |
||||
|
}, |
||||
|
//编辑默认参数 |
||||
|
Update(row) { |
||||
|
if (row) { |
||||
|
this.formTitle = "编辑用户"; |
||||
|
this.usersId = row.id; |
||||
|
this.usersID(row.id); |
||||
|
this.form.userName = row.userName; |
||||
|
this.form.phoneNumber = row.phoneNumber; |
||||
|
this.form.name = row.name; |
||||
|
this.form.email = row.email; |
||||
|
this.form.surname = row.name; |
||||
|
this.form.lockoutEnabled = row.lockoutEnabled |
||||
|
this.concurrencyStamp = row.concurrencyStamp; |
||||
|
this.form.IsActive = row.isActive; |
||||
|
usersroles().then((res) => { |
||||
|
this.options = res.items; |
||||
|
}); |
||||
|
this.isEdit = true; |
||||
|
this.dialogVisible = true; |
||||
|
} |
||||
|
}, |
||||
|
//新建与编辑 |
||||
|
submitForm() { |
||||
|
this.$refs.form.validate((valid) => { |
||||
|
//新建报表组 |
||||
|
if (valid && !this.isEdit) { |
||||
|
this.form.surname = this.form.name; |
||||
|
postCreateUser(this.form) |
||||
|
.then((res) => { |
||||
|
this.resetform(); |
||||
|
this.$successMsg("创建成功!"); |
||||
|
this.pageList(); |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
this.resetform(); |
||||
|
}); |
||||
|
} else if (valid && this.isEdit) { |
||||
|
//编辑报表 |
||||
|
const data = JSON.parse(JSON.stringify(this.form)); |
||||
|
delete data.password; |
||||
|
data.concurrencyStamp = this.concurrencyStamp; |
||||
|
postUpdateUser(data, this.usersId) |
||||
|
.then((res) => { |
||||
|
this.$successMsg("编辑成功!"); |
||||
|
this.pageList(); |
||||
|
this.resetform(); |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
this.resetform(); |
||||
|
}); |
||||
|
} else { |
||||
|
this.$errorMsg("请按照提示继续输入!"); |
||||
|
return false; |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
// 删除用户 |
||||
|
deleteUser(row){ |
||||
|
this.$confirm("您确认删除 " + row.userName + " 用户吗?", "提示", { |
||||
|
confirmButtonText: "确认删除用户", |
||||
|
cancelButtonText: "取消", |
||||
|
type: "warning", |
||||
|
}) |
||||
|
.then(() => { |
||||
|
this.loading = true |
||||
|
postDeleteUser(row.id) |
||||
|
.then((res) => { |
||||
|
this.loading = false |
||||
|
this.$successMsg("删除成功!"); |
||||
|
this.pageList(); |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
this.loading = false |
||||
|
}) |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
console.log(err) |
||||
|
}) |
||||
|
}, |
||||
|
handleSelectionChange(val) { |
||||
|
this.multipleSelection = val; |
||||
|
}, |
||||
|
//点击table行选择 |
||||
|
handleRowClick(row, column, event) { |
||||
|
if ( |
||||
|
this.multipleSelection.length == 1 && |
||||
|
this.multipleSelection[0].id == row.id |
||||
|
) { |
||||
|
this.$refs.multipleTable.clearSelection(); |
||||
|
return; |
||||
|
} |
||||
|
this.$refs.multipleTable.clearSelection(); |
||||
|
this.$refs.multipleTable.toggleRowSelection(row); |
||||
|
}, |
||||
|
// 创建用户,随机生成11位电话号,去掉电话校验 |
||||
|
getRandomPhoneNumber () { |
||||
|
return '1' + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) |
||||
|
}, |
||||
|
getRandomEmail () { |
||||
|
return '' + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + '@' + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + Math.floor(Math.random()*9+1) + '.com' |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style lang="scss" scoped> |
||||
|
.appMainPage { |
||||
|
.main { |
||||
|
.table-active { |
||||
|
display: flex; |
||||
|
flex-wrap: wrap; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
padding: 20px 0; |
||||
|
|
||||
|
.bttton-box { |
||||
|
display: flex; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.el-table__body-wrapper { |
||||
|
tbody { |
||||
|
span { |
||||
|
cursor: pointer; |
||||
|
|
||||
|
&:hover { |
||||
|
color: #409eff; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.Footer { |
||||
|
padding: 25px; |
||||
|
// background-color: #f2f2f2; |
||||
|
display: flex; |
||||
|
justify-content: flex-end; |
||||
|
|
||||
|
::v-deep button { |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
::v-deep .el-dialog { |
||||
|
.el-dialog__header { |
||||
|
button { |
||||
|
display: none; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
.el-form-item{ |
||||
|
margin-bottom: 30px; |
||||
|
} |
||||
|
.show-pwd { |
||||
|
position: absolute; |
||||
|
right: 10px; |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
|
|
@ -0,0 +1,32 @@ |
|||||
|
<template> |
||||
|
<div class="app-container"> |
||||
|
<el-card class="box-card"> |
||||
|
<div slot="header" class="clearfix"> |
||||
|
<span>个人中心</span> |
||||
|
<!-- <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button> --> |
||||
|
</div> |
||||
|
<el-tabs v-model="activeTab"> |
||||
|
<el-tab-pane label="用户信息" name="userInfo"> |
||||
|
<userInfo /> |
||||
|
</el-tab-pane> |
||||
|
<!-- <el-tab-pane label="修改密码" name="resetPwd"> |
||||
|
<resetPwd /> |
||||
|
</el-tab-pane> --> |
||||
|
</el-tabs> |
||||
|
</el-card> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import resetPwd from "./resetPwd"; |
||||
|
import userInfo from "./userInfo"; |
||||
|
export default { |
||||
|
name: "Profileuser", |
||||
|
components: { resetPwd,userInfo }, |
||||
|
data() { |
||||
|
return { |
||||
|
activeTab: "userInfo", |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
@ -0,0 +1,106 @@ |
|||||
|
<template> |
||||
|
<div class="app-container"> |
||||
|
<!-- 左右东阳版本 --> |
||||
|
<el-row :gutter="20"> |
||||
|
<el-col :span="6" :xs="24"> |
||||
|
<el-card> |
||||
|
<div slot="header" class="clearfix"> |
||||
|
<span style="font-size: 18px">个人信息</span> |
||||
|
</div> |
||||
|
<div> |
||||
|
<ul class="list-group-striped"> |
||||
|
<li> |
||||
|
<div class="left"><i class="icon el-icon-user-solid"></i></div> |
||||
|
<div class="pull-right"> |
||||
|
<p class="title">用户名</p> |
||||
|
<p class="name">{{ user.userName }}</p> |
||||
|
</div> |
||||
|
</li> |
||||
|
<li> |
||||
|
<div class="left"><i class="icon el-icon-info"></i></div> |
||||
|
<div class="pull-right"> |
||||
|
<p class="title">姓名</p> |
||||
|
<p class="name">{{ user.name }}</p> |
||||
|
</div> |
||||
|
</li> |
||||
|
<li> |
||||
|
<div class="left"><i class="icon el-icon-s-check"></i></div> |
||||
|
<div class="pull-right"> |
||||
|
<p class="title">角色</p> |
||||
|
<p class="name">{{ user.roles.join(',') }}</p> |
||||
|
</div> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</el-card> |
||||
|
</el-col> |
||||
|
<el-col :span="18" :xs="24"> |
||||
|
<el-card> |
||||
|
<div slot="header" class="clearfix"> |
||||
|
<span style="font-size: 18px">基本资料</span> |
||||
|
</div> |
||||
|
<el-tabs v-model="activeTab"> |
||||
|
<el-tab-pane label="修改密码" name="resetPwd"> |
||||
|
<resetPwd :user="user" /> |
||||
|
</el-tab-pane> |
||||
|
</el-tabs> |
||||
|
</el-card> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import resetPwd from "./resetPwd"; |
||||
|
export default { |
||||
|
name: "Profileuser", |
||||
|
components: { resetPwd }, |
||||
|
data() { |
||||
|
return { |
||||
|
user: {}, |
||||
|
roleGroup: {}, |
||||
|
postGroup: {}, |
||||
|
activeTab: "resetPwd", |
||||
|
}; |
||||
|
}, |
||||
|
created() { |
||||
|
this.user = this.$store.getters.currentUserInfo |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style lang="scss" scoped> |
||||
|
.list-group-striped{ |
||||
|
list-style: none; |
||||
|
padding-left: 10px; |
||||
|
li{ |
||||
|
display: flex; |
||||
|
padding-bottom: 15px; |
||||
|
background: #e9f6ff; |
||||
|
padding: 13px 15px; |
||||
|
border-radius: 4px; |
||||
|
margin-bottom: 18px; |
||||
|
min-height: 70px; |
||||
|
} |
||||
|
.icon{ |
||||
|
font-size: 22px; |
||||
|
padding-right: 5px; |
||||
|
vertical-align: top; |
||||
|
color: #49a4f7; |
||||
|
width: 24px; |
||||
|
flex-shrink: 0; |
||||
|
padding-top: 18px; |
||||
|
} |
||||
|
.pull-right{ |
||||
|
padding-left: 10px; |
||||
|
color: #999; |
||||
|
p{ |
||||
|
margin: 0; |
||||
|
} |
||||
|
|
||||
|
.title{ |
||||
|
padding-bottom: 5px; |
||||
|
color: #333; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,100 @@ |
|||||
|
<template> |
||||
|
<el-form ref="form" :model="user" :rules="rules" label-width="80px"> |
||||
|
<el-form-item label="旧密码" prop="oldPassword"> |
||||
|
<el-input |
||||
|
v-model="user.oldPassword" |
||||
|
placeholder="请输入旧密码" |
||||
|
type="password" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="新密码" prop="newPassword"> |
||||
|
<el-input |
||||
|
v-model="user.newPassword" |
||||
|
placeholder="请输入新密码" |
||||
|
type="password" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="确认密码" prop="confirmPassword"> |
||||
|
<el-input |
||||
|
v-model="user.confirmPassword" |
||||
|
placeholder="请确认密码" |
||||
|
type="password" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" size="mini" @click="submit">保存</el-button> |
||||
|
<!-- <el-button type="danger" size="mini" @click="reset">清空</el-button> --> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { postLoginUserInfo } from "@/api/wms-auth"; |
||||
|
|
||||
|
export default { |
||||
|
data() { |
||||
|
const equalToPassword = (rule, value, callback) => { |
||||
|
if (this.user.newPassword !== value) { |
||||
|
callback(new Error("两次输入的密码不一致")); |
||||
|
} else { |
||||
|
callback(); |
||||
|
} |
||||
|
}; |
||||
|
return { |
||||
|
user: { |
||||
|
oldPassword: undefined, |
||||
|
newPassword: undefined, |
||||
|
confirmPassword: undefined, |
||||
|
}, |
||||
|
// 表单校验 |
||||
|
rules: { |
||||
|
oldPassword: [ |
||||
|
{ required: true, message: "旧密码不能为空", trigger: "blur" }, |
||||
|
], |
||||
|
newPassword: [ |
||||
|
{ required: true, message: "新密码不能为空", trigger: "blur" }, |
||||
|
{ |
||||
|
min: 6, |
||||
|
max: 20, |
||||
|
message: "长度在 6 到 20 个字符", |
||||
|
trigger: "blur", |
||||
|
}, |
||||
|
], |
||||
|
confirmPassword: [ |
||||
|
{ required: true, message: "确认密码不能为空", trigger: "blur" }, |
||||
|
{ required: true, validator: equalToPassword, trigger: "blur" }, |
||||
|
], |
||||
|
}, |
||||
|
}; |
||||
|
}, |
||||
|
methods: { |
||||
|
submit() { |
||||
|
this.$refs["form"].validate((valid) => { |
||||
|
if (valid) { |
||||
|
postLoginUserInfo({ |
||||
|
currentPassword: this.user.oldPassword, |
||||
|
newPassword: this.user.newPassword, |
||||
|
}, this.$store.getters.currentUserInfo.id) |
||||
|
.then((response) => { |
||||
|
this.$notify({ |
||||
|
title: "成功", |
||||
|
message: "修改成功", |
||||
|
type: "success", |
||||
|
duration: 2000, |
||||
|
}); |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
// |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
reset() { |
||||
|
this.$refs["form"].resetFields(); |
||||
|
//this.$store.dispatch("tagsView/delView", this.$route); |
||||
|
//this.$router.push({ path: "/index" }); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
@ -0,0 +1,52 @@ |
|||||
|
<template> |
||||
|
<el-descriptions |
||||
|
class="profileuser_userinfo_page" |
||||
|
:column="2" |
||||
|
:border="true" |
||||
|
:labelStyle="{width:'200px'}" |
||||
|
> |
||||
|
<el-descriptions-item> |
||||
|
<template slot="label"><i class="item-icon el-icon-user-solid"></i>用户名</template> |
||||
|
{{ user.userName }} |
||||
|
</el-descriptions-item> |
||||
|
<el-descriptions-item> |
||||
|
<template slot="label" :span="2"><i class="item-icon el-icon-info"></i>姓名</template> |
||||
|
{{ user.name }} |
||||
|
</el-descriptions-item> |
||||
|
<el-descriptions-item> |
||||
|
<template slot="label"><i class="item-icon el-icon-s-check"></i>角色</template> |
||||
|
{{ user.roles.join(',') }} |
||||
|
</el-descriptions-item> |
||||
|
</el-descriptions> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
user:{} |
||||
|
}; |
||||
|
}, |
||||
|
created() { |
||||
|
this.user = this.$store.getters.currentUserInfo |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style lang="scss"> |
||||
|
.profileuser_userinfo_page{ |
||||
|
padding: 20px; |
||||
|
|
||||
|
.el-descriptions-item__container{ |
||||
|
padding: 20px 10px; |
||||
|
font-size: 18px; |
||||
|
} |
||||
|
|
||||
|
.item-icon{ |
||||
|
font-size: 22px; |
||||
|
margin-right: 8px; |
||||
|
color: #49a4f7; |
||||
|
line-height: 18px; |
||||
|
vertical-align: text-bottom; |
||||
|
} |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue