提交 68b65f6d authored 作者: 王鹏飞's avatar 王鹏飞

对接接口

上级 b326ff32
......@@ -7,7 +7,7 @@
"": {
"version": "0.0.0",
"dependencies": {
"axios": "^0.21.3",
"axios": "^0.21.4",
"element-ui": "^2.15.6",
"query-string": "^7.0.1",
"vue": "^2.6.14",
......@@ -26,8 +26,8 @@
"eslint-plugin-promise": "^5.1.0",
"eslint-plugin-vue": "^7.17.0",
"sass": "1.32.13",
"vite": "^2.5.3",
"vite-plugin-vue2": "^1.8.1",
"vite": "^2.5.6",
"vite-plugin-vue2": "^1.8.2",
"vue-template-compiler": "^2.6.14"
}
},
......@@ -1187,9 +1187,9 @@
}
},
"node_modules/axios": {
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.3.tgz",
"integrity": "sha512-JtoZ3Ndke/+Iwt5n+BgSli/3idTvpt5OjKyoCmz4LX5+lPiY5l7C1colYezhlxThjNa/NhngCUWZSZFypIFuaA==",
"version": "0.21.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
"integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"dependencies": {
"follow-redirects": "^1.14.0"
}
......@@ -5634,9 +5634,9 @@
}
},
"node_modules/vite": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.5.3.tgz",
"integrity": "sha512-1wMDnjflvtTTkMov8O/Xb5+w1/VW/Gw8oCf8f6dqgHn8lMOEqq0SaPtFEQeikFcOKCfSbiU0nEi0LDIx6DNsaQ==",
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.5.6.tgz",
"integrity": "sha512-P++qzXuOPhTql8iDamsatlJfD7/yGi8NCNwzyqkB2p0jrNJC567WEdXiKn3hQ+ZV8amQmB2dTH6svo3Z2tJ6MQ==",
"dev": true,
"dependencies": {
"esbuild": "^0.12.17",
......@@ -5655,9 +5655,9 @@
}
},
"node_modules/vite-plugin-vue2": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/vite-plugin-vue2/-/vite-plugin-vue2-1.8.1.tgz",
"integrity": "sha512-arqvNRbo7pYlyflY9U2i7vWOhncLoR6DZQfhC0rf4hF+1riFtwX5n7nIGc6nqr819bpVQSnZ8+4J7aejbA9NfA==",
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/vite-plugin-vue2/-/vite-plugin-vue2-1.8.2.tgz",
"integrity": "sha512-qQXLH+yVn5o7cq+KJULyty4OxWKQ3lsvrYx8QkLO78LsM+/r1gEytfcXiqewnvgP7eTkJ5Pd/kHbfDce1Pim/w==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
......@@ -6779,9 +6779,9 @@
"dev": true
},
"axios": {
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.3.tgz",
"integrity": "sha512-JtoZ3Ndke/+Iwt5n+BgSli/3idTvpt5OjKyoCmz4LX5+lPiY5l7C1colYezhlxThjNa/NhngCUWZSZFypIFuaA==",
"version": "0.21.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
"integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"requires": {
"follow-redirects": "^1.14.0"
}
......@@ -10342,9 +10342,9 @@
}
},
"vite": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.5.3.tgz",
"integrity": "sha512-1wMDnjflvtTTkMov8O/Xb5+w1/VW/Gw8oCf8f6dqgHn8lMOEqq0SaPtFEQeikFcOKCfSbiU0nEi0LDIx6DNsaQ==",
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.5.6.tgz",
"integrity": "sha512-P++qzXuOPhTql8iDamsatlJfD7/yGi8NCNwzyqkB2p0jrNJC567WEdXiKn3hQ+ZV8amQmB2dTH6svo3Z2tJ6MQ==",
"dev": true,
"requires": {
"esbuild": "^0.12.17",
......@@ -10355,9 +10355,9 @@
}
},
"vite-plugin-vue2": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/vite-plugin-vue2/-/vite-plugin-vue2-1.8.1.tgz",
"integrity": "sha512-arqvNRbo7pYlyflY9U2i7vWOhncLoR6DZQfhC0rf4hF+1riFtwX5n7nIGc6nqr819bpVQSnZ8+4J7aejbA9NfA==",
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/vite-plugin-vue2/-/vite-plugin-vue2-1.8.2.tgz",
"integrity": "sha512-qQXLH+yVn5o7cq+KJULyty4OxWKQ3lsvrYx8QkLO78LsM+/r1gEytfcXiqewnvgP7eTkJ5Pd/kHbfDce1Pim/w==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
......
......@@ -10,7 +10,7 @@
"lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src"
},
"dependencies": {
"axios": "^0.21.3",
"axios": "^0.21.4",
"element-ui": "^2.15.6",
"query-string": "^7.0.1",
"vue": "^2.6.14",
......@@ -29,8 +29,8 @@
"eslint-plugin-promise": "^5.1.0",
"eslint-plugin-vue": "^7.17.0",
"sass": "1.32.13",
"vite": "^2.5.3",
"vite-plugin-vue2": "^1.8.1",
"vite": "^2.5.6",
"vite-plugin-vue2": "^1.8.2",
"vue-template-compiler": "^2.6.14"
}
}
......@@ -27,3 +27,18 @@ export function uploadFile(data) {
headers: { 'Content-Type': 'multipart/form-data' }
})
}
// 搜索紫荆用户
export function userSearch(params) {
return httpRequest.get('/api/permissions/admin/v1/system/search-sso-users', { params })
}
// 获取当前用户角色
export function getUserRoles(params) {
return httpRequest.get('/api/permissions/admin/v1/system/user-roles', { params })
}
// 获取当前用户权限
export function getUserPermissions(params) {
return httpRequest.get('/api/permissions/admin/v1/system/user-permissions', { params })
}
<template>
<div class="user-autocomplete">
<el-select v-model="searchType" style="width: 120px">
<el-option label="用户名" value="username"></el-option>
<el-option label="手机号" value="mobile"></el-option>
<el-option label="邮箱" value="email"></el-option>
<el-option label="昵称" value="nickname"></el-option>
</el-select>
<el-select
placeholder="搜索"
filterable
remote
style="width: 100%"
:remote-method="fetchUserList"
:loading="loading"
@change="handleChange"
clearable
v-bind="$attrs"
v-on="$listeners"
>
<el-option :label="user.realname || user.nickname" :value="user.id" v-for="user in userList" :key="user.id">
<div style="display: flex">
<span>
{{ user.realname || user.nickname }}
<template v-if="user.mobile">(手机号:{{ user.mobile }})</template>
</span>
<span class="t1" v-if="user.email">邮箱:{{ user.email }}</span>
<span class="t1" v-else>ID:{{ user.id }}</span>
</div>
</el-option>
</el-select>
</div>
</template>
<script>
import { userSearch } from '@/api/base'
export default {
data() {
return {
searchType: 'nickname',
userList: [],
loading: false
}
},
methods: {
fetchUserList(searchValue) {
const params = {}
params[this.searchType] = searchValue
this.loading = true
userSearch(params)
.then(response => {
this.userList = response.data.items
})
.finally(() => {
this.loading = false
})
},
handleChange(userId) {
const user = this.userList.find(user => user.id === userId)
this.$emit('change', userId, user)
}
}
}
</script>
<style lang="scss">
.user-autocomplete {
display: flex;
.el-select + .el-select {
margin-left: 10px;
}
.t1 {
color: #8492a6;
font-size: 13px;
margin: 0 20px 0 10px;
}
}
</style>
......@@ -36,6 +36,7 @@ export default {
},
watch: {
data: {
deep: true,
immediate: true,
handler(data) {
this.form = Object.assign({}, this.form, data)
......
......@@ -26,7 +26,13 @@
<el-descriptions-item label="创建者ID">{{ createUser.id }}</el-descriptions-item>
</el-descriptions>
</app-card>
<editform :visible.sync="visible" :isEdit="true" :data="detail" @success="handleUpdateSuccess"></editform>
<editform
:visible.sync="visible"
:isEdit="true"
:data="detail"
@success="handleUpdateSuccess"
v-if="visible"
></editform>
</div>
</template>
......
......@@ -6,9 +6,10 @@
</template>
<template v-slot:table-x="{ row }">
<el-button type="text" @click="handleView(row)">查看</el-button>
<el-button type="text" @click="handleSettings(row)">设置</el-button>
</template>
</app-list>
<editform :visible.sync="visible" @success="handleCreateSuccess"></editform>
<editform :visible.sync="visible" @success="handleCreateSuccess" v-if="visible"></editform>
</app-card>
</template>
......@@ -45,6 +46,9 @@ export default {
// 查看
handleView(row) {
this.$router.push({ name: 'appView', params: { id: row.id } })
},
handleSettings(row) {
this.$router.push({ path: '/settings/users', query: { appid: row.id } })
}
}
}
......
import httpRequest from '@/utils/axios'
/**
* 获取商品列表
* 获取权限列表
*/
export function getGoodsList(data) {
return httpRequest.post('/api/shop/commodity/spu/search', data)
export function getPermissionList(params) {
return httpRequest.get(`/api/permissions/admin/v1/${params.app_id}/application/permissions`, { params })
}
/**
* 新增权限
*/
export function createPermission(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/permission`, data)
}
/**
* 修改权限
*/
export function updatePermission(id, data) {
return httpRequest.put(`/api/permissions/admin/v1/application/${id}/permission`, data)
}
/**
* 批量删除权限
*/
export function deletePermissions(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/batch-delete/permissions`, data)
}
import httpRequest from '@/utils/axios'
/**
* 获取商品列表
* 获取角色列表
*/
export function getGoodsList(data) {
return httpRequest.post('/api/shop/commodity/spu/search', data)
export function getRoleList(params) {
return httpRequest.get(`/api/permissions/admin/v1/${params.app_id}/application/roles`, { params })
}
/**
* 新增角色
*/
export function createRole(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/role`, data)
}
/**
* 修改角色
*/
export function updateRole(id, data) {
return httpRequest.put(`/api/permissions/admin/v1/application/${id}/role`, data)
}
/**
* 批量删除角色
*/
export function deleteRoles(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/batch-delete/roles`, data)
}
<template>
<el-dialog :title="title" :close-on-click-modal="false" v-bind="$attrs" v-on="$listeners" width="500px">
<el-form ref="form" :model="form" :rules="rules" :hide-required-asterisk="true" label-position="top">
<el-form-item label="角色名称" prop="name">
<el-input v-model="form.name" clearable></el-input>
</el-form-item>
<el-form-item label="角色唯一标识" prop="tag">
<el-input v-model="form.tag" clearable :disabled="isEdit"></el-input>
</el-form-item>
<el-form-item label="角色描述" prop="desc">
<el-input type="textarea" v-model="form.desc" clearable></el-input>
</el-form-item>
</el-form>
<template #footer>
<el-button type="text" @click="onCancel">取消</el-button>&nbsp;&nbsp;
<el-button type="primary" size="medium" @click="onPrimary">保存</el-button>
</template>
</el-dialog>
</template>
<script>
import { createRole, updateRole } from '../api.js'
export default {
props: {
isEdit: { type: Boolean, default: false },
data: { type: Object, default: () => ({}) }
},
data() {
return {
form: { name: '', tag: '', desc: '' },
rules: {
name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }],
tag: [{ required: true, message: '请输入角色唯一标识', trigger: 'blur' }]
}
}
},
watch: {
data: {
immediate: true,
handler(data) {
this.form = Object.assign({}, this.form, data)
}
}
},
computed: {
appid() {
return this.$store.state.appid
},
title() {
return this.isEdit ? '修改角色' : '创建角色'
}
},
methods: {
// 取消
onCancel() {
this.$emit('update:visible', false)
},
// 确定
onPrimary() {
this.$refs.form.validate().then(() => {
this.isEdit ? this.edit() : this.create()
})
},
// 创建角色
create() {
createRole(this.appid, this.form).then(res => {
this.$message.success('创建成功')
this.$emit('update:visible', false)
this.$emit('success', res.data)
})
},
// 编辑角色
edit() {
updateRole(this.form.id, this.form).then(res => {
this.$message.success('修改成功')
this.$emit('update:visible', false)
this.$emit('success', res.data)
})
}
}
}
</script>
<style></style>
<template>
<app-card>
<app-list v-bind="tableOptions" ref="list">
<app-list v-bind="tableOptions" ref="list" @selection-change="handleSelectionChange">
<template #header-aside>
<el-button type="primary">创建角色</el-button>
<el-button type="primary" @click="handleCreate">创建角色</el-button>
</template>
<template v-slot:table-x="{ row }">
<el-button type="text" @click="handleUpdate">编辑角色</el-button>
<el-button type="text" @click="handleUpdate(row)">修改</el-button>
<el-button type="text">权限配置</el-button>
<el-button type="text" @click="onRemove(row)">删除</el-button>
</template>
<template #footer>
<el-button type="primary" @click="onRemove" :disabled="!multipleSelection.length">删除</el-button>
</template>
</app-list>
<editform
:visible.sync="visible"
:isEdit="isEdit"
:data="editRaw"
@success="handleSuccess"
v-if="visible"
></editform>
</app-card>
</template>
......@@ -17,52 +26,73 @@
// 组件
import AppList from '@/components/base/AppList.vue'
import AppCard from '@/components/base/AppCard.vue'
import Editform from '../components/Editform.vue'
// 接口
// import { getRoleList } from '../api'
import { getRoleList, deleteRoles } from '../api'
export default {
components: { AppCard, AppList },
components: { AppCard, AppList, Editform },
data() {
return {}
return {
visible: false,
isEdit: false, // 是否是编辑状态
editRaw: {}, // 编辑的数据
multipleSelection: [] // 已选择的数据
}
},
computed: {
appid() {
return this.$store.state.appid
},
// 列表配置
tableOptions() {
return {
// remote: {
// httpRequest: getRoleList,
// params: { },
// },
columns: [
{ label: '角色名称', prop: 'name', minWidth: 140 },
{ label: '角色', prop: 'count', align: 'center', minWidth: 140 },
{ label: '操作', slots: 'table-x', align: 'right', width: 150 }
],
data: [
{
name: '管理员',
count: '4'
remote: {
httpRequest: getRoleList,
params: { app_id: this.$store.state.appid, name: '', tag: '' }
},
filters: [
{
name: '教师',
count: '12'
type: 'input',
prop: 'name',
placeholder: '角色名称'
},
{
name: '教务',
count: '4'
},
{
name: '助教',
count: '10'
type: 'input',
prop: 'tag',
placeholder: '角色唯一标识'
}
],
columns: [
{ type: 'selection' },
{ label: '角色名称', prop: 'name' },
{ label: '标识', prop: 'tag' },
{ label: '角色描述', prop: 'desc' },
{ label: '操作', slots: 'table-x', align: 'right', width: 150 }
]
}
}
},
methods: {
// 选择
handleSelectionChange(value) {
this.multipleSelection = value
},
// 创建成功刷新列表
handleSuccess() {
this.$refs.list.refetch()
},
// 创建
handleCreate() {
this.isEdit = false
this.editRaw = {}
this.visible = true
},
// 编辑
handleUpdate(row) {
console.log(row)
this.isEdit = true
this.editRaw = row
this.visible = true
},
// 删除
onRemove() {
......@@ -73,7 +103,13 @@ export default {
}).then(this.handleRemove)
},
// 删除
handleRemove() {}
handleRemove() {
const ids = this.multipleSelection.map(item => item.id)
deleteRoles(this.appid, { ids: JSON.stringify(ids) }).then(res => {
this.$message({ type: 'success', message: '删除成功' })
this.$refs.list.refetch()
})
}
}
}
</script>
import httpRequest from '@/utils/axios'
/**
* 获取商品列表
* 获取成员列表
*/
export function getUserList(data) {
return httpRequest.post('/api/shop/commodity/spu/search', data).then({})
export function getUserList(params) {
return httpRequest.get(`/api/permissions/admin/v1/${params.app_id}/application/users`, { params })
}
/**
* 获取角色列表
*/
export function getRoleList(params) {
return httpRequest.get(`/api/permissions/admin/v1/${params.app_id}/application/roles`, { params })
}
/**
* 新增成员
*/
export function createUser(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/user`, data)
}
/**
* 修改成员
*/
export function updateUser(id, data) {
return httpRequest.put(`/api/permissions/admin/v1/application/${id}/user`, data)
}
/**
* 修改成员状态
*/
export function updateUserStatus(id, data) {
return httpRequest.put(`/api/permissions/admin/v1/application/${id}/user-status`, data)
}
/**
* 批量删除成员
*/
export function deleteUsers(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/batch-delete/users`, data)
}
<template>
<el-dialog :title="title" :close-on-click-modal="false" v-bind="$attrs" v-on="$listeners" width="602px">
<el-form ref="form" :model="form" :rules="rules" :hide-required-asterisk="true" label-position="top">
<el-form-item label="紫荆账号" prop="sso_id">
<user-autocomplete v-model="form.sso_id"></user-autocomplete>
</el-form-item>
<el-form-item label="所属角色" prop="role_ids">
<el-transfer v-bind="transferOptions" v-model="form.role_ids" :data="roles"></el-transfer>
</el-form-item>
</el-form>
<template #footer>
<el-button type="text" @click="onCancel">取消</el-button>&nbsp;&nbsp;
<el-button type="primary" size="medium" @click="onPrimary">保存</el-button>
</template>
</el-dialog>
</template>
<script>
import UserAutocomplete from '@/components/base/UserAutocomplete.vue'
import { getRoleList, createUser, updateUser } from '../api.js'
export default {
props: {
isEdit: { type: Boolean, default: false },
data: { type: Object, default: () => ({}) }
},
components: { UserAutocomplete },
data() {
return {
roles: [], // 角色列表
transferOptions: {
props: { key: 'id', label: 'name' },
titles: ['未选择', '已选择']
},
form: { sso_id: '', role_ids: [] },
rules: {
sso_id: [{ required: true, message: '请选择紫荆账号', trigger: 'blur' }]
}
}
},
watch: {
data: {
immediate: true,
handler(data) {
this.form = Object.assign({}, this.form, data)
}
}
},
computed: {
appid() {
return this.$store.state.appid
},
title() {
return this.isEdit ? '修改成员' : '新增成员'
}
},
beforeMount() {
this.getRoleList()
},
methods: {
getRoleList() {
getRoleList({ app_id: this.appid, limit: 100 }).then(res => {
this.roles = res.data.data
})
},
// 取消
onCancel() {
this.$emit('update:visible', false)
},
// 确定
onPrimary() {
this.$refs.form.validate().then(() => {
this.isEdit ? this.edit() : this.create()
})
},
// 新增成员
create() {
const params = Object.assign({}, this.form)
params.role_ids = JSON.stringify(params.role_ids)
createUser(this.appid, params).then(res => {
this.$message.success('创建成功')
this.$emit('update:visible', false)
this.$emit('success', res.data)
})
},
// 编辑成员
edit() {
const params = Object.assign({}, this.form)
params.role_ids = JSON.stringify(params.role_ids)
updateUser(this.form.id, params).then(res => {
this.$message.success('修改成功')
this.$emit('update:visible', false)
this.$emit('success', res.data)
})
}
}
}
</script>
<style></style>
<template>
<app-card>
<app-list v-bind="tableOptions" ref="list">
<app-list v-bind="tableOptions" ref="list" @selection-change="handleSelectionChange">
<template #header-aside>
<el-button type="primary">新增成员</el-button>
<el-button type="primary" @click="handleCreate">新增成员</el-button>
</template>
<template v-slot:table-roles="{ row }">
<el-tag v-for="(item, index) in row.roles" :key="index" style="margin: 5px 5px 5px 0">{{ item.name }}</el-tag>
</template>
<template v-slot:table-status="{ row }">
<el-switch
v-model="row.status"
active-text="启用"
inactive-text="停用"
:active-value="0"
:inactive-value="1"
@change="changeStatus(row)"
>
</el-switch>
</template>
<template v-slot:table-x="{ row }">
<el-button type="text" @click="onRemove(row)">删除</el-button>
<el-button type="text" @click="handleUpdate(row)">修改</el-button>
</template>
<template #footer>
<el-button type="primary" @click="onRemove" :disabled="!multipleSelection.length">删除</el-button>
</template>
</app-list>
<editform
:visible.sync="visible"
:isEdit="isEdit"
:data="editRaw"
@success="handleSuccess"
v-if="visible"
></editform>
</app-card>
</template>
......@@ -15,81 +39,94 @@
// 组件
import AppList from '@/components/base/AppList.vue'
import AppCard from '@/components/base/AppCard.vue'
import Editform from '../components/Editform.vue'
// 接口
// import { getUserList } from '../api'
import { getUserList, deleteUsers, getRoleList, updateUserStatus } from '../api'
export default {
components: { AppCard, AppList },
components: { AppCard, AppList, Editform },
data() {
return {
roleList: [
{ role_id: '1', role_name: '管理员' },
{ role_id: '2', role_name: '教师' },
{ role_id: '3', role_name: '助教' }
]
roles: [],
visible: false,
isEdit: false, // 是否是编辑状态
editRaw: {}, // 编辑的数据
multipleSelection: [] // 已选择的数据
}
},
computed: {
appid() {
return this.$store.state.appid
},
// 列表配置
tableOptions() {
return {
// remote: {
// httpRequest: getUserList,
// params: {},
// },
filters: [
{
type: 'input',
prop: 'name',
placeholder: '输入邮箱/手机号码搜索'
remote: {
httpRequest: getUserList,
params: { app_id: this.$store.state.appid, role_id: '' }
},
filters: [
// {
// type: 'input',
// prop: 'name',
// placeholder: '输入邮箱/手机号码搜索'
// },
{
type: 'select',
prop: 'rold_id',
options: this.roleList,
labelKey: 'role_name',
valueKey: 'role_id',
placeholder: '请选择的角色'
prop: 'role_id',
options: this.roles,
labelKey: 'name',
valueKey: 'id',
placeholder: '选择角色'
}
],
columns: [
{ type: 'selection' },
{ type: 'index' },
{ label: 'a', prop: 'id' },
{ label: '姓名', prop: 'user_name' },
{ label: '昵称', prop: 'nick_name' },
{ label: '所属角色', prop: 'role' },
{ label: '操作', slots: 'table-x', align: 'right' }
],
data: [
{
id: 'id123456',
user_name: '用户姓名',
nick_name: '用户昵称',
role: '管理员'
},
{
id: 'id123456',
user_name: '张三',
nick_name: '用户昵称',
role: '教师'
},
{
id: 'id123456',
user_name: '李四',
nick_name: '用户昵称',
role: '助教'
},
{
id: 'id123456',
user_name: '王武',
nick_name: '用户昵称',
role: '管理员'
}
// { label: 'SSO ID', prop: 'sso_id' },
{ label: '姓名', prop: 'sso_user.realname' },
{ label: '角色', prop: 'roles', slots: 'table-roles' },
{ label: '昵称', prop: 'sso_user.nickname' },
{ label: '手机号', prop: 'sso_user.mobile' },
{ label: '邮箱', prop: 'sso_user.email' },
{ label: '创建时间', prop: 'created_at' },
{ label: '修改时间', prop: 'updated_at' },
{ label: '最后登录时间', prop: 'last_login_time' },
{ label: '状态', prop: 'status', slots: 'table-status', width: '140' },
{ label: '操作', slots: 'table-x', align: 'right', width: '80', fixed: 'right' }
]
}
}
},
beforeMount() {
this.getRoleList()
},
methods: {
getRoleList() {
getRoleList({ app_id: this.appid, limit: 100 }).then(res => {
this.roles = res.data.data
})
},
// 选择
handleSelectionChange(value) {
this.multipleSelection = value
},
// 创建成功刷新列表
handleSuccess() {
this.$refs.list.refetch()
},
// 创建
handleCreate() {
this.isEdit = false
this.editRaw = {}
this.visible = true
},
// 编辑
handleUpdate(row) {
this.isEdit = true
this.editRaw = row
this.visible = true
},
// 删除
onRemove() {
this.$confirm('成员删除请谨慎操作,确定删除?', '删除成员', {
......@@ -99,7 +136,18 @@ export default {
}).then(this.handleRemove)
},
// 删除
handleRemove() {}
handleRemove() {
const ids = this.multipleSelection.map(item => item.id)
deleteUsers(this.appid, { ids: JSON.stringify(ids) }).then(res => {
this.$message({ type: 'success', message: '删除成功' })
this.$refs.list.refetch()
})
},
changeStatus(row) {
updateUserStatus(row.id, { status: row.status }).then(res => {
this.$refs.list.refetch()
})
}
}
}
</script>
......@@ -6,11 +6,15 @@ Vue.use(Vuex)
export default new Vuex.Store({
state: {
user: {}
user: {},
appid: localStorage.getItem('appid') || ''
},
mutations: {
setUser(state, user) {
state.user = user
},
setAppid(state, appid) {
state.appid = appid
}
},
actions: {
......
......@@ -14,6 +14,12 @@ const notSupport = !isMobile && isIe
// https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
export default async function (to, from, next) {
// 设置appid
const appid = to.query.appid || ''
if (appid) {
store.commit('setAppid', appid)
localStorage.setItem('appid', appid)
}
// 浏览器不支持
if (notSupport && to.name !== 'browser') {
next({ path: '/browser' })
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论