parent
0b1c033c9e
commit
fabbfb0e13
@ -0,0 +1,841 @@ |
|||||||
|
import request from '@/utils/request' |
||||||
|
|
||||||
|
// 查询用户列表
|
||||||
|
export function listUser(query) { |
||||||
|
return new Promise(resolve => { |
||||||
|
resolve({ |
||||||
|
'total': 15, |
||||||
|
'rows': [ |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-11 09:24:46', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '管理员', |
||||||
|
'userId': 1, |
||||||
|
'deptId': 103, |
||||||
|
'userName': 'admin', |
||||||
|
'nickName': '若依', |
||||||
|
'email': 'ry@163.com', |
||||||
|
'phonenumber': '15888888888', |
||||||
|
'sex': '1', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '0', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '127.0.0.1', |
||||||
|
'loginDate': '2023-01-26T19:53:26.000+08:00', |
||||||
|
'dept': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'deptId': 103, |
||||||
|
'parentId': null, |
||||||
|
'ancestors': null, |
||||||
|
'deptName': '研发部门', |
||||||
|
'orderNum': null, |
||||||
|
'leader': '若依', |
||||||
|
'phone': null, |
||||||
|
'email': null, |
||||||
|
'status': null, |
||||||
|
'delFlag': null, |
||||||
|
'parentName': null, |
||||||
|
'children': [] |
||||||
|
}, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': true |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-11 09:24:46', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '测试员', |
||||||
|
'userId': 2, |
||||||
|
'deptId': 105, |
||||||
|
'userName': 'ry', |
||||||
|
'nickName': '若依', |
||||||
|
'email': 'ry@qq.com', |
||||||
|
'phonenumber': '15666666666', |
||||||
|
'sex': '1', |
||||||
|
'avatar': '', |
||||||
|
'password': null, |
||||||
|
'status': '1', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '127.0.0.1', |
||||||
|
'loginDate': '2023-01-11T09:24:46.000+08:00', |
||||||
|
'dept': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'deptId': 105, |
||||||
|
'parentId': null, |
||||||
|
'ancestors': null, |
||||||
|
'deptName': '测试部门', |
||||||
|
'orderNum': null, |
||||||
|
'leader': '若依', |
||||||
|
'phone': null, |
||||||
|
'email': null, |
||||||
|
'status': null, |
||||||
|
'delFlag': null, |
||||||
|
'parentName': null, |
||||||
|
'children': [] |
||||||
|
}, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': null, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': '若依', |
||||||
|
'email': null, |
||||||
|
'phonenumber': null, |
||||||
|
'sex': null, |
||||||
|
'avatar': null, |
||||||
|
'password': null, |
||||||
|
'status': null, |
||||||
|
'delFlag': null, |
||||||
|
'loginIp': null, |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': null, |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-11 21:50:10', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': 115, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': 'dfsg345', |
||||||
|
'email': '', |
||||||
|
'phonenumber': '13250211954', |
||||||
|
'sex': '1', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '1', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '', |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': 'fuck222', |
||||||
|
'balance': 4.66, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': null, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': '若依', |
||||||
|
'email': null, |
||||||
|
'phonenumber': null, |
||||||
|
'sex': null, |
||||||
|
'avatar': null, |
||||||
|
'password': null, |
||||||
|
'status': null, |
||||||
|
'delFlag': null, |
||||||
|
'loginIp': null, |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': null, |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-12 09:16:00', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': 116, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': 'dsfgfd234234', |
||||||
|
'email': '', |
||||||
|
'phonenumber': '13250211978', |
||||||
|
'sex': '1', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '0', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '', |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': 'dfg345', |
||||||
|
'balance': 3.96, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': null, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': '若依', |
||||||
|
'email': null, |
||||||
|
'phonenumber': null, |
||||||
|
'sex': null, |
||||||
|
'avatar': null, |
||||||
|
'password': null, |
||||||
|
'status': null, |
||||||
|
'delFlag': null, |
||||||
|
'loginIp': null, |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': null, |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-12 09:22:33', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': 117, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': 'dgh345', |
||||||
|
'email': '', |
||||||
|
'phonenumber': '13225021194', |
||||||
|
'sex': '1', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '1', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '', |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': 'ertsdfg345', |
||||||
|
'balance': 3.99, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': null, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': '若依', |
||||||
|
'email': null, |
||||||
|
'phonenumber': null, |
||||||
|
'sex': null, |
||||||
|
'avatar': null, |
||||||
|
'password': null, |
||||||
|
'status': null, |
||||||
|
'delFlag': null, |
||||||
|
'loginIp': null, |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': null, |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-12 09:25:08', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': 118, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': 'ertert435', |
||||||
|
'email': '', |
||||||
|
'phonenumber': '13250211855', |
||||||
|
'sex': '1', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '0', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '', |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': 'dsfg345', |
||||||
|
'balance': 3.66, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': null, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': '若依', |
||||||
|
'email': null, |
||||||
|
'phonenumber': null, |
||||||
|
'sex': null, |
||||||
|
'avatar': null, |
||||||
|
'password': null, |
||||||
|
'status': null, |
||||||
|
'delFlag': null, |
||||||
|
'loginIp': null, |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': null, |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-12 09:26:10', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': 119, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': 'sdfasdf234', |
||||||
|
'email': '', |
||||||
|
'phonenumber': '13250519883', |
||||||
|
'sex': '0', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '1', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '', |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': 'sdfaf', |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-12 09:27:51', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': 120, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': 'yutyu', |
||||||
|
'email': '', |
||||||
|
'phonenumber': '13250211444', |
||||||
|
'sex': '0', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '0', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '', |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': 'dsfgfd345', |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-12 09:28:47', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': 121, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': '234dfgsfdg', |
||||||
|
'email': '', |
||||||
|
'phonenumber': '13248956546', |
||||||
|
'sex': '0', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '0', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '', |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': 'saf2345', |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-12 09:30:38', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': 122, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': 'sdfaf234', |
||||||
|
'email': '', |
||||||
|
'phonenumber': '13250485465', |
||||||
|
'sex': '1', |
||||||
|
'avatar': '/profile/avatar/2023/01/12/blob_20230112055008A001.png', |
||||||
|
'password': null, |
||||||
|
'status': '0', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '', |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': [], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': 'sdaf3425', |
||||||
|
'balance': 1.44, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
} |
||||||
|
], |
||||||
|
'code': 200, |
||||||
|
'msg': '查询成功' |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 查询用户详细
|
||||||
|
export function getUser(userId) { |
||||||
|
return new Promise(resolve => { |
||||||
|
resolve({ |
||||||
|
'msg': '操作成功', |
||||||
|
'code': 200, |
||||||
|
'roleIds': [ |
||||||
|
2 |
||||||
|
], |
||||||
|
'data': { |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-11 09:24:46', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '测试员', |
||||||
|
'userId': 2, |
||||||
|
'deptId': 105, |
||||||
|
'userName': 'ry', |
||||||
|
'nickName': '若依', |
||||||
|
'email': 'ry@qq.com', |
||||||
|
'phonenumber': '15666666666', |
||||||
|
'sex': '1', |
||||||
|
'avatar': '', |
||||||
|
'password': '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', |
||||||
|
'status': '1', |
||||||
|
'delFlag': '0', |
||||||
|
'loginIp': '127.0.0.1', |
||||||
|
'loginDate': '2023-01-11T09:24:46.000+08:00', |
||||||
|
'dept': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'deptId': 105, |
||||||
|
'parentId': 101, |
||||||
|
'ancestors': '0,100,101', |
||||||
|
'deptName': '测试部门', |
||||||
|
'orderNum': 3, |
||||||
|
'leader': '若依', |
||||||
|
'phone': null, |
||||||
|
'email': null, |
||||||
|
'status': '0', |
||||||
|
'delFlag': null, |
||||||
|
'parentName': null, |
||||||
|
'children': [] |
||||||
|
}, |
||||||
|
'roles': [ |
||||||
|
{ |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'roleId': 2, |
||||||
|
'roleName': '普通角色', |
||||||
|
'roleKey': 'common', |
||||||
|
'roleSort': 2, |
||||||
|
'dataScope': '2', |
||||||
|
'menuCheckStrictly': false, |
||||||
|
'deptCheckStrictly': false, |
||||||
|
'status': '0', |
||||||
|
'delFlag': null, |
||||||
|
'flag': false, |
||||||
|
'menuIds': null, |
||||||
|
'deptIds': null, |
||||||
|
'permissions': null, |
||||||
|
'admin': false |
||||||
|
} |
||||||
|
], |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': 1, |
||||||
|
'referrerSysUser': { |
||||||
|
'createBy': null, |
||||||
|
'createTime': null, |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': null, |
||||||
|
'userId': null, |
||||||
|
'deptId': null, |
||||||
|
'userName': null, |
||||||
|
'nickName': '若依', |
||||||
|
'email': null, |
||||||
|
'phonenumber': '15888888888', |
||||||
|
'sex': null, |
||||||
|
'avatar': null, |
||||||
|
'password': null, |
||||||
|
'status': null, |
||||||
|
'delFlag': null, |
||||||
|
'loginIp': null, |
||||||
|
'loginDate': null, |
||||||
|
'dept': null, |
||||||
|
'roles': null, |
||||||
|
'roleIds': null, |
||||||
|
'postIds': null, |
||||||
|
'roleId': null, |
||||||
|
'wechatNickName': null, |
||||||
|
'balance': null, |
||||||
|
'referrerId': null, |
||||||
|
'referrerSysUser': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
'postIds': [ |
||||||
|
2 |
||||||
|
], |
||||||
|
'roles': [ |
||||||
|
{ |
||||||
|
'createBy': null, |
||||||
|
'createTime': '2023-01-26 12:03:44', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '厂商', |
||||||
|
'roleId': 101, |
||||||
|
'roleName': '厂商', |
||||||
|
'roleKey': 'manufacturer', |
||||||
|
'roleSort': 0, |
||||||
|
'dataScope': '1', |
||||||
|
'menuCheckStrictly': true, |
||||||
|
'deptCheckStrictly': true, |
||||||
|
'status': '0', |
||||||
|
'delFlag': '0', |
||||||
|
'flag': false, |
||||||
|
'menuIds': null, |
||||||
|
'deptIds': null, |
||||||
|
'permissions': null, |
||||||
|
'admin': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': null, |
||||||
|
'createTime': '2023-01-11 09:24:46', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '普通角色', |
||||||
|
'roleId': 2, |
||||||
|
'roleName': '普通角色', |
||||||
|
'roleKey': 'common', |
||||||
|
'roleSort': 2, |
||||||
|
'dataScope': '2', |
||||||
|
'menuCheckStrictly': true, |
||||||
|
'deptCheckStrictly': true, |
||||||
|
'status': '0', |
||||||
|
'delFlag': '0', |
||||||
|
'flag': false, |
||||||
|
'menuIds': null, |
||||||
|
'deptIds': null, |
||||||
|
'permissions': null, |
||||||
|
'admin': false |
||||||
|
} |
||||||
|
], |
||||||
|
'posts': [ |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-11 09:24:46', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '', |
||||||
|
'postId': 1, |
||||||
|
'postCode': 'ceo', |
||||||
|
'postName': '董事长', |
||||||
|
'postSort': 1, |
||||||
|
'status': '0', |
||||||
|
'flag': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-11 09:24:46', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '', |
||||||
|
'postId': 2, |
||||||
|
'postCode': 'se', |
||||||
|
'postName': '项目经理', |
||||||
|
'postSort': 2, |
||||||
|
'status': '0', |
||||||
|
'flag': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-11 09:24:46', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '', |
||||||
|
'postId': 3, |
||||||
|
'postCode': 'hr', |
||||||
|
'postName': '人力资源', |
||||||
|
'postSort': 3, |
||||||
|
'status': '0', |
||||||
|
'flag': false |
||||||
|
}, |
||||||
|
{ |
||||||
|
'createBy': 'admin', |
||||||
|
'createTime': '2023-01-11 09:24:46', |
||||||
|
'updateBy': null, |
||||||
|
'updateTime': null, |
||||||
|
'remark': '', |
||||||
|
'postId': 4, |
||||||
|
'postCode': 'user', |
||||||
|
'postName': '普通员工', |
||||||
|
'postSort': 4, |
||||||
|
'status': '0', |
||||||
|
'flag': false |
||||||
|
} |
||||||
|
] |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 新增用户
|
||||||
|
export function addUser(data) { |
||||||
|
return request({ |
||||||
|
url: '/system/user', |
||||||
|
method: 'post', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 修改用户
|
||||||
|
export function updateUser(data) { |
||||||
|
return request({ |
||||||
|
url: '/system/user', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 删除用户
|
||||||
|
export function delUser(userId) { |
||||||
|
return request({ |
||||||
|
url: '/system/user/' + userId, |
||||||
|
method: 'delete' |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 用户密码重置
|
||||||
|
export function resetUserPwd(userId, password) { |
||||||
|
const data = { |
||||||
|
userId, |
||||||
|
password |
||||||
|
} |
||||||
|
return request({ |
||||||
|
url: '/system/user/resetPwd', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 用户状态修改
|
||||||
|
export function changeUserStatus(userId, status) { |
||||||
|
const data = { |
||||||
|
userId, |
||||||
|
status |
||||||
|
} |
||||||
|
return request({ |
||||||
|
url: '/system/user/changeStatus', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 查询用户个人信息
|
||||||
|
export function getUserProfile() { |
||||||
|
return request({ |
||||||
|
url: '/system/user/profile', |
||||||
|
method: 'get' |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 修改用户个人信息
|
||||||
|
export function updateUserProfile(data) { |
||||||
|
return request({ |
||||||
|
url: '/system/user/profile', |
||||||
|
method: 'put', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 用户密码重置
|
||||||
|
export function updateUserPwd(oldPassword, newPassword) { |
||||||
|
const data = { |
||||||
|
oldPassword, |
||||||
|
newPassword |
||||||
|
} |
||||||
|
return request({ |
||||||
|
url: '/system/user/profile/updatePwd', |
||||||
|
method: 'put', |
||||||
|
params: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 用户头像上传
|
||||||
|
export function uploadAvatar(data) { |
||||||
|
return request({ |
||||||
|
url: '/system/user/profile/avatar', |
||||||
|
method: 'post', |
||||||
|
data: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 查询授权角色
|
||||||
|
export function getAuthRole(userId) { |
||||||
|
return request({ |
||||||
|
url: '/system/user/authRole/' + userId, |
||||||
|
method: 'get' |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 保存授权角色
|
||||||
|
export function updateAuthRole(data) { |
||||||
|
return request({ |
||||||
|
url: '/system/user/authRole', |
||||||
|
method: 'put', |
||||||
|
params: data |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 查询部门下拉树结构
|
||||||
|
export function deptTreeSelect() { |
||||||
|
return request({ |
||||||
|
url: '/system/user/deptTree', |
||||||
|
method: 'get' |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
//根据手机号模糊查询
|
||||||
|
export function phoneSelect(phonenumber) { |
||||||
|
return request({ |
||||||
|
url: `/system/user/phonenumber/${phonenumber}`, |
||||||
|
method: 'get' |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
//批量更新状态
|
||||||
|
export function updateStatus(data) { |
||||||
|
return request({ |
||||||
|
url: '/system/user/updateStatus', |
||||||
|
method: 'put', |
||||||
|
params: data |
||||||
|
}) |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
厂商首页 |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: 'index.vue' |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
|
||||||
|
</style> |
@ -0,0 +1,195 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<h3>基本信息</h3> |
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="18"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="用户昵称" prop="nickName"> |
||||||
|
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30"/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="12" v-if="showDetail"> |
||||||
|
<el-form-item label="用户ID"> |
||||||
|
<el-input v-model="form.userId" readonly/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="手机号" prop="phonenumber"> |
||||||
|
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11"/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="微信昵称" prop="wechatNickName"> |
||||||
|
<el-input v-model="form.wechatNickName" placeholder="请输入微信昵称" maxlength="50"/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="性别"> |
||||||
|
<el-select v-model="form.sex" placeholder="请选择性别"> |
||||||
|
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" |
||||||
|
:label="dict.label" :value="dict.value"></el-option> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="钱包余额" prop="balance"> |
||||||
|
<el-input-number v-model="form.balance" :precision="2" :step="0.01"/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item v-if="form.userId == undefined" label="登陆密码" prop="password"> |
||||||
|
<el-input v-model="form.password" placeholder="默认123456" type="password" maxlength="20" |
||||||
|
show-password/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="推荐人"> |
||||||
|
<el-autocomplete :fetch-suggestions="queryByPhone" :trigger-on-focus="false" clearable |
||||||
|
placeholder="请输入手机号" v-model="form.referrerPhone" |
||||||
|
@select="item => form.referrerId = item.userId"/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="推荐人ID"> |
||||||
|
<el-input v-model="form.referrerId" readonly/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<template v-if="showDetail"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="注册时间"> |
||||||
|
<el-input :value="parseTime(form.createTime)" readonly disable/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="最近登陆时间"> |
||||||
|
<el-input :value="parseTime(form.loginDate)" readonly disable/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</template> |
||||||
|
<el-row> |
||||||
|
<el-col :span="12"> |
||||||
|
<el-form-item label="状态"> |
||||||
|
<el-radio-group v-model="form.status"> |
||||||
|
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" |
||||||
|
:label="dict.value">{{ |
||||||
|
dict.label |
||||||
|
}} |
||||||
|
</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</el-col> |
||||||
|
<el-col :span="5" :offset="1"> |
||||||
|
<user-avatar :circle="false" show-bottom-label title="头像"/> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</el-form> |
||||||
|
<div slot="footer" class="dialog-footer" style="text-align:center"> |
||||||
|
<el-button type="primary" @click="submitForm">保存</el-button> |
||||||
|
<el-button @click="reset">重置</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script> |
||||||
|
|
||||||
|
import userAvatar from './userAvatar' |
||||||
|
import { addUser, phoneSelect, updateUser } from '@/api/system/user' |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'BaseForm', |
||||||
|
components: { userAvatar }, |
||||||
|
dicts: ['sys_normal_disable', 'sys_user_sex'], |
||||||
|
props: { |
||||||
|
reset: Function, |
||||||
|
form: Object, |
||||||
|
showDetail: { |
||||||
|
type: Boolean, |
||||||
|
default: false |
||||||
|
}, |
||||||
|
onSuccess: { |
||||||
|
type: Function, |
||||||
|
required: false |
||||||
|
} |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
// 表单校验 |
||||||
|
rules: { |
||||||
|
nickName: [ |
||||||
|
{ required: true, message: '用户昵称不能为空', trigger: 'blur' } |
||||||
|
], |
||||||
|
password: [ |
||||||
|
{ required: true, message: '用户密码不能为空', trigger: 'blur' }, |
||||||
|
{ min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' } |
||||||
|
], |
||||||
|
email: [ |
||||||
|
{ |
||||||
|
type: 'email', |
||||||
|
message: '请输入正确的邮箱地址', |
||||||
|
trigger: ['blur', 'change'] |
||||||
|
} |
||||||
|
], |
||||||
|
phonenumber: [ |
||||||
|
{ |
||||||
|
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, |
||||||
|
message: '请输入正确的手机号码', |
||||||
|
trigger: 'blur' |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
methods: { |
||||||
|
// 模糊查询手机号 |
||||||
|
queryByPhone(queryString, cb) { |
||||||
|
phoneSelect(queryString).then(response => { |
||||||
|
const data = response.data.map(item => { |
||||||
|
return { |
||||||
|
value: item.phonenumber, |
||||||
|
userId: item.userId |
||||||
|
} |
||||||
|
}) |
||||||
|
cb(data) |
||||||
|
}) |
||||||
|
}, |
||||||
|
/** 提交按钮 */ |
||||||
|
submitForm: function() { |
||||||
|
this.$refs['form'].validate(valid => { |
||||||
|
if (valid) { |
||||||
|
if (this.form.userId != undefined) { |
||||||
|
updateUser(this.form).then(response => { |
||||||
|
this.$modal.msgSuccess('修改成功') |
||||||
|
this.onSuccess && this.onSuccess() |
||||||
|
}) |
||||||
|
} else { |
||||||
|
this.form.avatar = this.$store.getters.avatar.replace(process.env.VUE_APP_BASE_API, '') |
||||||
|
addUser(this.form).then(response => { |
||||||
|
console.info(this.onSuccess) |
||||||
|
this.$modal.msgSuccess('新增成功') |
||||||
|
this.onSuccess && this.onSuccess() |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
@ -0,0 +1,513 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<el-row :gutter="20"> |
||||||
|
<!--用户数据--> |
||||||
|
<el-col :span="24" :xs="24"> |
||||||
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" |
||||||
|
label-width="68px"> |
||||||
|
<el-form-item label="用户昵称" prop="nickName"> |
||||||
|
<el-input v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable style="width: 240px" |
||||||
|
@keyup.enter.native="handleQuery"/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="ID" prop="userId"> |
||||||
|
<el-input v-model="queryParams.userId" placeholder="请输入用户ID" clearable style="width: 240px" |
||||||
|
@keyup.enter.native="handleQuery"/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="手机号码" prop="phonenumber"> |
||||||
|
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px" |
||||||
|
@keyup.enter.native="handleQuery"/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="性别" prop="sex"> |
||||||
|
<el-select v-model="queryParams.sex" placeholder="请选择性别" clearable> |
||||||
|
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" |
||||||
|
:value="dict.value"></el-option> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="注册时间"> |
||||||
|
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" |
||||||
|
range-separator="-" start-placeholder="开始日期" |
||||||
|
end-placeholder="结束日期"></el-date-picker> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-form-item label="状态" prop="status"> |
||||||
|
<el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px"> |
||||||
|
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" |
||||||
|
:value="dict.value"/> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
|
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button> |
||||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8"> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button type="primary" size="mini" @click="handleAdd">新增用户</el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button size="mini" @click="updateStatusByUserId('0')">批量开启</el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button size="mini" @click="updateStatusByUserId('1')">批量禁用</el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :span="1.5"> |
||||||
|
<el-button size="mini" @click="handleExport">导出</el-button> |
||||||
|
</el-col> |
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> |
||||||
|
</el-row> |
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> |
||||||
|
<el-table-column type="selection" width="50" align="center"/> |
||||||
|
<el-table-column label="ID" align="center" key="userId" prop="userId" v-if="columns[0].visible"/> |
||||||
|
<el-table-column label="昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" |
||||||
|
:show-overflow-tooltip="true"/> |
||||||
|
<el-table-column label="手机号" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" |
||||||
|
width="120"/> |
||||||
|
<el-table-column label="微信昵称" align="center" key="wechatNickName" prop="wechatNickName" |
||||||
|
:show-overflow-tooltip="true"/> |
||||||
|
<el-table-column label="账号余额" align="center" key="balance" prop="balance"/> |
||||||
|
<el-table-column label="头像" align="center"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-avatar :size="50" :src="getAvatar(scope.row)"/> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="性别" align="center"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<dict-tag :options="dict.type.sys_user_sex" :value="scope.row.sex"/> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="推荐人" align="center"> |
||||||
|
<template slot-scope="scope" v-if="scope.row.referrerSysUser"> |
||||||
|
<span>{{ scope.row.referrerSysUser.nickName }}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="登陆时间" align="center"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<span>{{ parseTime(scope.row.loginDate) }}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="注册时间" align="center" prop="createTime" v-if="columns[6].visible" width="160"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="状态" align="center" v-if="columns[5].visible"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
|
||||||
|
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width"> |
||||||
|
<template slot-scope="scope" v-if="scope.row.userId !== 1"> |
||||||
|
<el-button size="mini" type="text" @click="showDetail(scope.row.userId)" |
||||||
|
>详情 |
||||||
|
</el-button> |
||||||
|
<el-button size="mini" type="text" |
||||||
|
@click="updateStatusByUserId(scope.row.status === '0' ? '1' : '0', scope.row.userId)" |
||||||
|
>{{ scope.row.status === '0' ? '禁用' : '开启' }} |
||||||
|
</el-button> |
||||||
|
<el-button size="mini" type="text" @click="showBuyDetail(scope.row.userId)" |
||||||
|
>购买明细 |
||||||
|
</el-button> |
||||||
|
|
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" |
||||||
|
:limit.sync="queryParams.pageSize" @pagination="getList"/> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
|
||||||
|
<!-- 添加对话框 --> |
||||||
|
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> |
||||||
|
<el-divider class="custom-divider"/> |
||||||
|
<base-form :reset="reset" :form="form" :onSuccess="() => { this.open = false; this.getList() }"/> |
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
<!-- 用户详情对话框 --> |
||||||
|
<el-dialog :title="title" :visible.sync="detail.open" width="1200px" append-to-body |
||||||
|
@close="getList(); detail.activeName = null"> |
||||||
|
<el-tabs v-model="detail.activeName" type="card"> |
||||||
|
<el-tab-pane label="基本信息" name="base"> |
||||||
|
<base-form :reset="reset" :form="form" show-detail/> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="钱包明细" name="balance"> |
||||||
|
<platform-wallet-detail :user-id="form.userId"/> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="购买明细" name="buy_detail"> |
||||||
|
<platform-buy-detail :user-id="form.userId"/> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="收货地址" name="address"> |
||||||
|
<platform-address :user-id="form.userId"/> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="浏览记录" name="browser_history"> |
||||||
|
<platform-history :user-id="form.userId"/> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="收藏记录" name="star_history"> |
||||||
|
<platform-collect :user-id="form.userId"/> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="购物车" name="cart"> |
||||||
|
<platform-cart :user-id="form.userId"/> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="粉丝" name="fans"> |
||||||
|
<platform-follower :user-id="form.userId"/> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="优惠券" name="discount_coupon"> |
||||||
|
<platform-discount :user-id="form.userId"/> |
||||||
|
</el-tab-pane> |
||||||
|
</el-tabs> |
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
<!-- 用户导入对话框 --> |
||||||
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body> |
||||||
|
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" |
||||||
|
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" |
||||||
|
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag> |
||||||
|
<i class="el-icon-upload"></i> |
||||||
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> |
||||||
|
<div class="el-upload__tip text-center" slot="tip"> |
||||||
|
<div class="el-upload__tip" slot="tip"> |
||||||
|
<el-checkbox v-model="upload.updateSupport"/> |
||||||
|
是否更新已经存在的用户数据 |
||||||
|
</div> |
||||||
|
<span>仅允许导入xls、xlsx格式文件。</span> |
||||||
|
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" |
||||||
|
@click="importTemplate">下载模板 |
||||||
|
</el-link> |
||||||
|
</div> |
||||||
|
</el-upload> |
||||||
|
<div slot="footer" class="dialog-footer"> |
||||||
|
<el-button type="primary" @click="submitFileForm">确 定</el-button> |
||||||
|
<el-button @click="upload.open = false">取 消</el-button> |
||||||
|
</div> |
||||||
|
</el-dialog> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { changeUserStatus, delUser, getUser, listUser, resetUserPwd, updateStatus } from '@/api/platform/user' |
||||||
|
import { getToken } from '@/utils/auth' |
||||||
|
import { getAvatar } from '@/utils' |
||||||
|
import baseForm from './baseForm' |
||||||
|
import platformAddress from './address' |
||||||
|
import platformFollower from './follower' |
||||||
|
import platformCart from './cart' |
||||||
|
import platformCollect from './result/collect' |
||||||
|
import platformHistory from './result/history' |
||||||
|
import platformDiscount from './discount' |
||||||
|
import platformBuyDetail from './buyDetail' |
||||||
|
import platformWalletDetail from './walletDetail' |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'User', |
||||||
|
dicts: ['sys_normal_disable', 'sys_user_sex'], |
||||||
|
components: { |
||||||
|
baseForm, |
||||||
|
platformAddress, |
||||||
|
platformFollower, |
||||||
|
platformCart, |
||||||
|
platformCollect, |
||||||
|
platformDiscount, |
||||||
|
platformHistory, |
||||||
|
platformBuyDetail, |
||||||
|
platformWalletDetail |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
// 遮罩层 |
||||||
|
loading: true, |
||||||
|
// 选中数组 |
||||||
|
ids: [], |
||||||
|
// 非单个禁用 |
||||||
|
single: true, |
||||||
|
// 非多个禁用 |
||||||
|
multiple: true, |
||||||
|
// 显示搜索条件 |
||||||
|
showSearch: true, |
||||||
|
// 总条数 |
||||||
|
total: 0, |
||||||
|
// 用户表格数据 |
||||||
|
userList: null, |
||||||
|
// 弹出层标题 |
||||||
|
title: '', |
||||||
|
// 是否显示弹出层 |
||||||
|
open: false, |
||||||
|
// 默认密码 |
||||||
|
initPassword: undefined, |
||||||
|
// 日期范围 |
||||||
|
dateRange: [], |
||||||
|
// 岗位选项 |
||||||
|
postOptions: [], |
||||||
|
// 角色选项 |
||||||
|
roleOptions: [], |
||||||
|
// 表单参数 |
||||||
|
form: {}, |
||||||
|
defaultProps: { |
||||||
|
children: 'children', |
||||||
|
label: 'label' |
||||||
|
}, |
||||||
|
//用户详情 |
||||||
|
detail: { |
||||||
|
// 是否显示弹出层 |
||||||
|
open: false, |
||||||
|
//激活标签页 |
||||||
|
activeName: null |
||||||
|
}, |
||||||
|
// 用户导入参数 |
||||||
|
upload: { |
||||||
|
// 是否显示弹出层(用户导入) |
||||||
|
open: false, |
||||||
|
// 弹出层标题(用户导入) |
||||||
|
title: '', |
||||||
|
// 是否禁用上传 |
||||||
|
isUploading: false, |
||||||
|
// 是否更新已经存在的用户数据 |
||||||
|
updateSupport: 0, |
||||||
|
// 设置上传的请求头部 |
||||||
|
headers: { Authorization: 'Bearer ' + getToken() }, |
||||||
|
// 上传的地址 |
||||||
|
url: process.env.VUE_APP_BASE_API + '/system/user/importData' |
||||||
|
}, |
||||||
|
// 查询参数 |
||||||
|
queryParams: { |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 10, |
||||||
|
userId: undefined, |
||||||
|
nickName: undefined, |
||||||
|
phonenumber: undefined, |
||||||
|
status: undefined, |
||||||
|
sex: undefined |
||||||
|
}, |
||||||
|
// 列信息 |
||||||
|
columns: [ |
||||||
|
{ key: 0, label: `用户编号`, visible: true }, |
||||||
|
{ key: 1, label: `用户名称`, visible: true }, |
||||||
|
{ key: 2, label: `用户昵称`, visible: true }, |
||||||
|
{ key: 3, label: `部门`, visible: true }, |
||||||
|
{ key: 4, label: `手机号码`, visible: true }, |
||||||
|
{ key: 5, label: `状态`, visible: true }, |
||||||
|
{ key: 6, label: `创建时间`, visible: true } |
||||||
|
] |
||||||
|
|
||||||
|
} |
||||||
|
}, |
||||||
|
created() { |
||||||
|
this.getList() |
||||||
|
this.getConfigKey('sys.user.initPassword').then(response => { |
||||||
|
this.initPassword = response.msg |
||||||
|
}) |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
showBuyDetail(userId) { |
||||||
|
this.detail.activeName = 'buy_detail' |
||||||
|
this.clickUserId = userId |
||||||
|
this.detail.open = true |
||||||
|
}, |
||||||
|
showDetail(userId) { |
||||||
|
this.detail.activeName = 'base' |
||||||
|
this.clickUserId = userId |
||||||
|
}, |
||||||
|
//批量更新用户状态 |
||||||
|
updateStatusByUserId(status, userId) { |
||||||
|
updateStatus({ |
||||||
|
userIds: userId === undefined ? this.ids.join(',') : userId, |
||||||
|
status |
||||||
|
}).then(response => { |
||||||
|
this.$modal.msgSuccess(`批量${status === '0' ? '开启' : '禁用'}成功`) |
||||||
|
this.getList() |
||||||
|
}) |
||||||
|
}, |
||||||
|
|
||||||
|
getAvatar, |
||||||
|
/** 查询用户列表 */ |
||||||
|
getList() { |
||||||
|
this.loading = true |
||||||
|
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => { |
||||||
|
this.userList = response.rows |
||||||
|
this.total = response.total |
||||||
|
this.loading = false |
||||||
|
} |
||||||
|
) |
||||||
|
}, |
||||||
|
// 筛选节点 |
||||||
|
filterNode(value, data) { |
||||||
|
if (!value) return true |
||||||
|
return data.label.indexOf(value) !== -1 |
||||||
|
}, |
||||||
|
// 节点单击事件 |
||||||
|
handleNodeClick(data) { |
||||||
|
this.handleQuery() |
||||||
|
}, |
||||||
|
// 用户状态修改 |
||||||
|
handleStatusChange(row) { |
||||||
|
let text = row.status === '0' ? '启用' : '停用' |
||||||
|
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() { |
||||||
|
return changeUserStatus(row.userId, row.status) |
||||||
|
}).then(() => { |
||||||
|
this.$modal.msgSuccess(text + '成功') |
||||||
|
}).catch(function() { |
||||||
|
row.status = row.status === '0' ? '1' : '0' |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 取消按钮 |
||||||
|
cancel() { |
||||||
|
this.open = false |
||||||
|
this.reset() |
||||||
|
}, |
||||||
|
// 表单重置 |
||||||
|
reset() { |
||||||
|
this.form = { |
||||||
|
userId: undefined, |
||||||
|
userName: undefined, |
||||||
|
nickName: undefined, |
||||||
|
password: undefined, |
||||||
|
phonenumber: undefined, |
||||||
|
email: undefined, |
||||||
|
sex: undefined, |
||||||
|
status: '0', |
||||||
|
remark: undefined, |
||||||
|
postIds: [], |
||||||
|
roleIds: [], |
||||||
|
balance: '0.00', |
||||||
|
wechatNickName: undefined, |
||||||
|
referrerId: undefined |
||||||
|
} |
||||||
|
this.resetForm('form') |
||||||
|
}, |
||||||
|
/** 搜索按钮操作 */ |
||||||
|
handleQuery() { |
||||||
|
this.queryParams.pageNum = 1 |
||||||
|
this.getList() |
||||||
|
}, |
||||||
|
/** 重置按钮操作 */ |
||||||
|
resetQuery() { |
||||||
|
this.dateRange = [] |
||||||
|
this.resetForm('queryForm') |
||||||
|
this.handleQuery() |
||||||
|
}, |
||||||
|
// 多选框选中数据 |
||||||
|
handleSelectionChange(selection) { |
||||||
|
this.ids = selection.map(item => item.userId) |
||||||
|
this.single = selection.length != 1 |
||||||
|
this.multiple = !selection.length |
||||||
|
}, |
||||||
|
// 更多操作触发 |
||||||
|
handleCommand(command, row) { |
||||||
|
switch (command) { |
||||||
|
case 'handleResetPwd': |
||||||
|
this.handleResetPwd(row) |
||||||
|
break |
||||||
|
case 'handleAuthRole': |
||||||
|
this.handleAuthRole(row) |
||||||
|
break |
||||||
|
default: |
||||||
|
break |
||||||
|
} |
||||||
|
}, |
||||||
|
/** 新增按钮操作 */ |
||||||
|
handleAdd() { |
||||||
|
this.reset() |
||||||
|
getUser().then(response => { |
||||||
|
this.postOptions = response.posts |
||||||
|
this.roleOptions = response.roles |
||||||
|
this.open = true |
||||||
|
this.title = '新增用户' |
||||||
|
this.form.password = this.initPassword |
||||||
|
}) |
||||||
|
}, |
||||||
|
/** 修改按钮操作 */ |
||||||
|
handleUpdate() { |
||||||
|
this.reset() |
||||||
|
const userId = this.clickUserId |
||||||
|
getUser(userId).then(response => { |
||||||
|
this.form = response.data |
||||||
|
this.postOptions = response.posts |
||||||
|
this.roleOptions = response.roles |
||||||
|
this.$set(this.form, 'postIds', response.postIds) |
||||||
|
this.$set(this.form, 'roleIds', response.roleIds) |
||||||
|
this.title = '用户详情' |
||||||
|
this.form.password = '' |
||||||
|
this.detail.open = true |
||||||
|
this.form.referrerPhone = this.form.referrerSysUser.phonenumber |
||||||
|
}) |
||||||
|
}, |
||||||
|
/** 重置密码按钮操作 */ |
||||||
|
handleResetPwd(row) { |
||||||
|
this.$prompt('请输入"' + row.userName + '"的新密码', '提示', { |
||||||
|
confirmButtonText: '确定', |
||||||
|
cancelButtonText: '取消', |
||||||
|
closeOnClickModal: false, |
||||||
|
inputPattern: /^.{5,20}$/, |
||||||
|
inputErrorMessage: '用户密码长度必须介于 5 和 20 之间' |
||||||
|
}).then(({ value }) => { |
||||||
|
resetUserPwd(row.userId, value).then(response => { |
||||||
|
this.$modal.msgSuccess('修改成功,新密码是:' + value) |
||||||
|
}) |
||||||
|
}).catch(() => { |
||||||
|
}) |
||||||
|
}, |
||||||
|
/** 分配角色操作 */ |
||||||
|
handleAuthRole: function(row) { |
||||||
|
const userId = row.userId |
||||||
|
this.$router.push('/system/user-auth/role/' + userId) |
||||||
|
}, |
||||||
|
/** 删除按钮操作 */ |
||||||
|
handleDelete(row) { |
||||||
|
const userIds = row.userId || this.ids |
||||||
|
this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() { |
||||||
|
return delUser(userIds) |
||||||
|
}).then(() => { |
||||||
|
this.getList() |
||||||
|
this.$modal.msgSuccess('删除成功') |
||||||
|
}).catch(() => { |
||||||
|
}) |
||||||
|
}, |
||||||
|
/** 导出按钮操作 */ |
||||||
|
handleExport() { |
||||||
|
this.download('system/user/export', { |
||||||
|
...this.queryParams |
||||||
|
}, `user_${new Date().getTime()}.xlsx`) |
||||||
|
}, |
||||||
|
/** 导入按钮操作 */ |
||||||
|
handleImport() { |
||||||
|
this.upload.title = '用户导入' |
||||||
|
this.upload.open = true |
||||||
|
}, |
||||||
|
/** 下载模板操作 */ |
||||||
|
importTemplate() { |
||||||
|
this.download('system/user/importTemplate', {}, `user_template_${new Date().getTime()}.xlsx`) |
||||||
|
}, |
||||||
|
// 文件上传中处理 |
||||||
|
handleFileUploadProgress(event, file, fileList) { |
||||||
|
this.upload.isUploading = true |
||||||
|
}, |
||||||
|
// 文件上传成功处理 |
||||||
|
handleFileSuccess(response, file, fileList) { |
||||||
|
this.upload.open = false |
||||||
|
this.upload.isUploading = false |
||||||
|
this.$refs.upload.clearFiles() |
||||||
|
this.$alert('<div style=\'overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;\'>' + response.msg + '</div>', '导入结果', { dangerouslyUseHTMLString: true }) |
||||||
|
this.getList() |
||||||
|
}, |
||||||
|
// 提交上传文件 |
||||||
|
submitFileForm() { |
||||||
|
this.$refs.upload.submit() |
||||||
|
} |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
'detail.activeName': function(value) { |
||||||
|
if (value === 'base' && !this.detail.open) { |
||||||
|
this.handleUpdate() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style scoped lang="scss"> |
||||||
|
.custom-divider.el-divider { |
||||||
|
margin-top: 0 !important; |
||||||
|
margin-bottom: 20px !important; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,196 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<div class="user-info-head" :class="{ 'img-circle': circle }" @click="editCropper()"><img v-bind:src="options.img" |
||||||
|
:title="'点击上传' + title" |
||||||
|
class="img-lg" |
||||||
|
:class="{ 'img-circle': circle }"/> |
||||||
|
|
||||||
|
</div> |
||||||
|
<div v-if="showBottomLabel" style="width: 120px;text-align: center;margin-top: 10px;">{{ title }}</div> |
||||||
|
<el-dialog :title="'修改' + title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened" |
||||||
|
@close="closeDialog"> |
||||||
|
<el-row> |
||||||
|
<el-col :xs="24" :md="12" :style="{ height: '350px' }"> |
||||||
|
<vue-cropper ref="cropper" :img="options.img" :info="true" :autoCrop="options.autoCrop" |
||||||
|
:autoCropWidth="options.autoCropWidth" :autoCropHeight="options.autoCropHeight" |
||||||
|
:fixedBox="options.fixedBox" |
||||||
|
:outputType="options.outputType" @realTime="realTime" v-if="visible"/> |
||||||
|
</el-col> |
||||||
|
<el-col :xs="24" :md="12" :style="{ height: '350px' }"> |
||||||
|
<div class="avatar-upload-preview" :class="{ 'img-circle': circle }"> |
||||||
|
<img :src="previews.url" :style="previews.img"/> |
||||||
|
</div> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<br/> |
||||||
|
<el-row> |
||||||
|
<el-col :lg="2" :sm="3" :xs="3"> |
||||||
|
<el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload"> |
||||||
|
<el-button size="small"> |
||||||
|
选择 |
||||||
|
<i class="el-icon-upload el-icon--right"></i> |
||||||
|
</el-button> |
||||||
|
</el-upload> |
||||||
|
</el-col> |
||||||
|
<el-col :lg="{ span: 1, offset: 2 }" :sm="2" :xs="2"> |
||||||
|
<el-button icon="el-icon-plus" size="small" @click="changeScale(1)"></el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :lg="{ span: 1, offset: 1 }" :sm="2" :xs="2"> |
||||||
|
<el-button icon="el-icon-minus" size="small" @click="changeScale(-1)"></el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :lg="{ span: 1, offset: 1 }" :sm="2" :xs="2"> |
||||||
|
<el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()"></el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :lg="{ span: 1, offset: 1 }" :sm="2" :xs="2"> |
||||||
|
<el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()"></el-button> |
||||||
|
</el-col> |
||||||
|
<el-col :lg="{ span: 2, offset: 6 }" :sm="2" :xs="2"> |
||||||
|
<el-button type="primary" size="small" @click="uploadImg()">提 交</el-button> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</el-dialog> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import store from '@/store' |
||||||
|
import { VueCropper } from 'vue-cropper' |
||||||
|
import { uploadAvatar } from '@/api/system/user' |
||||||
|
import { debounce } from '@/utils' |
||||||
|
|
||||||
|
export default { |
||||||
|
components: { VueCropper }, |
||||||
|
props: { |
||||||
|
user: { |
||||||
|
type: Object |
||||||
|
}, |
||||||
|
circle: { |
||||||
|
type: Boolean, |
||||||
|
default: true |
||||||
|
}, |
||||||
|
showBottomLabel: { |
||||||
|
type: Boolean, |
||||||
|
default: false |
||||||
|
}, |
||||||
|
title: { |
||||||
|
type: String |
||||||
|
} |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
// 是否显示弹出层 |
||||||
|
open: false, |
||||||
|
// 是否显示cropper |
||||||
|
visible: false, |
||||||
|
|
||||||
|
options: { |
||||||
|
img: store.getters.avatar, //裁剪图片的地址 |
||||||
|
autoCrop: true, // 是否默认生成截图框 |
||||||
|
autoCropWidth: 200, // 默认生成截图框宽度 |
||||||
|
autoCropHeight: 200, // 默认生成截图框高度 |
||||||
|
fixedBox: true, // 固定截图框大小 不允许改变 |
||||||
|
outputType: 'png' // 默认生成截图为PNG格式 |
||||||
|
}, |
||||||
|
previews: {}, |
||||||
|
resizeHandler: null |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 编辑 |
||||||
|
editCropper() { |
||||||
|
this.open = true |
||||||
|
}, |
||||||
|
// 打开弹出层结束时的回调 |
||||||
|
modalOpened() { |
||||||
|
this.visible = true |
||||||
|
if (!this.resizeHandler) { |
||||||
|
this.resizeHandler = debounce(() => { |
||||||
|
this.refresh() |
||||||
|
}, 100) |
||||||
|
} |
||||||
|
window.addEventListener('resize', this.resizeHandler) |
||||||
|
}, |
||||||
|
// 刷新组件 |
||||||
|
refresh() { |
||||||
|
this.$refs.cropper.refresh() |
||||||
|
}, |
||||||
|
// 覆盖默认的上传行为 |
||||||
|
requestUpload() { |
||||||
|
}, |
||||||
|
// 向左旋转 |
||||||
|
rotateLeft() { |
||||||
|
this.$refs.cropper.rotateLeft() |
||||||
|
}, |
||||||
|
// 向右旋转 |
||||||
|
rotateRight() { |
||||||
|
this.$refs.cropper.rotateRight() |
||||||
|
}, |
||||||
|
// 图片缩放 |
||||||
|
changeScale(num) { |
||||||
|
num = num || 1 |
||||||
|
this.$refs.cropper.changeScale(num) |
||||||
|
}, |
||||||
|
// 上传预处理 |
||||||
|
beforeUpload(file) { |
||||||
|
if (file.type.indexOf('image/') == -1) { |
||||||
|
this.$modal.msgError('文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。') |
||||||
|
} else { |
||||||
|
const reader = new FileReader() |
||||||
|
reader.readAsDataURL(file) |
||||||
|
reader.onload = () => { |
||||||
|
this.options.img = reader.result |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
// 上传图片 |
||||||
|
uploadImg() { |
||||||
|
this.$refs.cropper.getCropBlob(data => { |
||||||
|
let formData = new FormData() |
||||||
|
formData.append('avatarfile', data) |
||||||
|
|
||||||
|
// TODO:厂商修改LOGO需要更换接口,目前未实现 |
||||||
|
uploadAvatar(formData).then(response => { |
||||||
|
this.open = false |
||||||
|
this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl |
||||||
|
store.commit('SET_AVATAR', this.options.img) |
||||||
|
this.$modal.msgSuccess('修改成功') |
||||||
|
this.visible = false |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 实时预览 |
||||||
|
realTime(data) { |
||||||
|
this.previews = data |
||||||
|
}, |
||||||
|
// 关闭窗口 |
||||||
|
closeDialog() { |
||||||
|
this.options.img = store.getters.avatar |
||||||
|
this.visible = false |
||||||
|
window.removeEventListener('resize', this.resizeHandler) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style scoped lang="scss"> |
||||||
|
.user-info-head { |
||||||
|
position: relative; |
||||||
|
display: inline-block; |
||||||
|
background: rgba(0, 0, 0, 0.5); |
||||||
|
} |
||||||
|
|
||||||
|
.user-info-head:hover:after { |
||||||
|
content: '+'; |
||||||
|
position: absolute; |
||||||
|
left: 0; |
||||||
|
right: 0; |
||||||
|
top: 0; |
||||||
|
bottom: 0; |
||||||
|
color: #eee; |
||||||
|
font-size: 24px; |
||||||
|
font-style: normal; |
||||||
|
-webkit-font-smoothing: antialiased; |
||||||
|
-moz-osx-font-smoothing: grayscale; |
||||||
|
cursor: pointer; |
||||||
|
line-height: 110px; |
||||||
|
} |
||||||
|
</style> |
Loading…
Reference in new issue