Browse Source

add logic for tid1509

tid1509
刘嘉炜 3 months ago
parent
commit
cc96211b29
  1. 6
      src/subpackage/account/components/jurisdiction_item.vue
  2. 3
      src/subpackage/account/components/user_info.vue
  3. 4
      src/subpackage/account/js/handle.js
  4. 47
      src/subpackage/account/pages/permission/edit.vue
  5. 29
      src/subpackage/account/pages/permission/info.vue
  6. 52
      src/subpackage/account/pages/permission/modules/edit/min_jurisdiction.vue
  7. 14
      src/subpackage/account/pages/permission/modules/edit/stadium_jurisdiction.vue
  8. 9
      src/subpackage/account/pages/permission/modules/info/admin_permission.vue
  9. 22
      src/subpackage/account/pages/permission/modules/info/min_permission.vue
  10. 14
      src/subpackage/account/pages/permission/modules/info/stadium_permission.vue
  11. 2
      src/utils/util.js

6
src/subpackage/account/components/jurisdiction_item.vue

@ -1,7 +1,7 @@
<template>
<view class="jurisdiction-item" :class="{ active, centre }">
<view class="ji-txt">账号&订阅</view>
<image class="ji-tag" mode="aspectFit" src="/subpackage/account/static/images/selected_corner.png" ></image>
<view class="jurisdiction-item" :class="{ active, centre }" @click="$emit('click')">
<view class="ji-txt"><slot></slot></view>
<image v-if="active" class="ji-tag" mode="aspectFit" src="/subpackage/account/static/images/selected_corner.png" ></image>
</view>
</template>

3
src/subpackage/account/components/user_info.vue

@ -33,15 +33,12 @@ export default {
default: false
},
name: {
type: String,
default: ''
},
account: {
type: String,
default: ''
},
time: {
type: String,
default: ''
}
}

4
src/subpackage/account/js/handle.js

@ -4,14 +4,12 @@ import { showModal, showLoad, hideLoad } from "@/utils/util.js";
// B会员管理-小程序用户管理-用户信息列表-用户信息详情
export function getStadiumList({ brand_id }){
showLoad();
return server.post({
url: ACCOUNT_API.stadiumList,
data: { brand_id },
isDefaultGet: false,
})
.then(res => {
hideLoad();
let _data = res?.data || {};
if(_data.code === 0){
console.log('subpackage account js handle stadiumList res --->', _data);
@ -21,7 +19,7 @@ export function getStadiumList({ brand_id }){
}
})
.catch(err => {
showModal({ content: err.message || '加载失败!' });
showModal({ content: err.message || '加载店铺列表失败!' });
console.warn('subpackage account js handle stadiumList err --->', err);
// return Promise.reject(err);
})

47
src/subpackage/account/pages/permission/edit.vue

@ -1,10 +1,13 @@
<template>
<view class="permission-edit">
<user-info></user-info>
<user-info
:name="userInfo.name"
:account="userInfo.account"
></user-info>
<admin-jurisdiction></admin-jurisdiction>
<min-jurisdiction></min-jurisdiction>
<min-jurisdiction v-model="miniPermissionLs"></min-jurisdiction>
<cashier-jurisdiction></cashier-jurisdiction>
<stadium-jurisdiction></stadium-jurisdiction>
<stadium-jurisdiction ref="stadiumJurisdiction"></stadium-jurisdiction>
<fixed-button @click="saveBtn">保存</fixed-button>
</view>
</template>
@ -16,7 +19,7 @@ import min_jurisdiction from "./modules/edit/min_jurisdiction.vue";
import cashier_jurisdiction from "./modules/edit/cashier_jurisdiction.vue";
import stadium_jurisdiction from "./modules/edit/stadium_jurisdiction.vue";
import fixedButton from "../../components/fixed_button.vue";
import { showModal, debounce } from "@/utils/util.js";
import { showModal, debounce, jsonPar } from "@/utils/util.js";
export default {
components: {
'user-info': user_info,
@ -26,13 +29,43 @@ export default {
'stadium-jurisdiction': stadium_jurisdiction,
'fixed-button': fixedButton
},
computed: {
userInfo(){
return this.optionsQuery?.userInfo ?? {};
},
// miniPermissionLs(){
// return this.optionsQuery?.miniPermissionLs ?? [];
// },
stadiumPermissionLs(){
return this.optionsQuery?.stadiumPermissionLs ?? [];
},
},
data(){
return {
brand_id: '',
optionsQuery: {
/**
* @param {Array} miniPermissionLs 商家助手小程序权限列表
* @param {Array} stadiumPermissionLs 门店权限列表
* @param {Object} userInfo 用户信息
* @param {Number} userInfo.id
* @param {String} userInfo.account
* @param {String} userInfo.name
*/
},
miniPermissionLs: [],
}
},
onLoad(){
onReady(){
let { brand_id } = this;
this.$refs.stadiumJurisdiction?.getStadiumLs?.(brand_id);
},
onLoad(options){
let { brand_id, query_json } = options;
this.brand_id = brand_id ?? '';
this.optionsQuery = jsonPar(query_json ?? '{}');
let optQuery = jsonPar(query_json ?? '{}');
this.miniPermissionLs = optQuery?.miniPermissionLs ?? [];
},
methods: {
saveBtn: debounce(function(){

29
src/subpackage/account/pages/permission/info.vue

@ -15,10 +15,15 @@
></admin-permission>
<min-permission
@click:unbind="unbindWXAccount"
:obtained-permission-arr="permissionMenu"
:obtained-permission-arr="miniPermissionLs"
:is-bind-wx="userInfo.status === 1"
:nick-name="userInfo.nickname"
></min-permission>
<cashier-permission></cashier-permission>
<stadium-permission ref="stadiumPermisson"></stadium-permission>
<stadium-permission
ref="stadiumPermisson"
:permission-list="stadiumPermissionLs"
></stadium-permission>
<fixed-button @click="editAuthority">修改权限</fixed-button>
<edit-password ref="editPassword"></edit-password>
@ -36,7 +41,7 @@ import fixedButton from "../../components/fixed_button.vue";
import editPassword from "./modules/info/edit_password.vue";
import edit_account from "./modules/info/edit_account.vue";
import { routeTo, showModal, showLoad, hideLoad, showNone } from "@/utils/util.js";
import { routeTo, showModal, showLoad, hideLoad, showNone, jsonStr } from "@/utils/util.js";
import { ACCOUNT_API } from "../../js/api.js";
import server from "../../js/server.js";
export default {
@ -56,7 +61,7 @@ export default {
return this.userInfo?.extension?.permission ?? {};
},
//
permissionMenu(){
miniPermissionLs(){
return this.userInfo?.extension?.assistant_permission?.menu ?? [];
},
//
@ -70,9 +75,9 @@ export default {
userInfo: {},
}
},
onLoad(options){
async onLoad(options){
this.brand_id = options?.brand_id || '';
this.userGet({ id: options?.id });
await this.userGet({ id: options?.id });
this.$refs.stadiumPermisson?.getStadiumLs?.(options?.brand_id);
},
methods: {
@ -96,7 +101,17 @@ export default {
showModal({ content: '是否删除该账号?', });
},
editAuthority(){
routeTo(`/subpackage/account/pages/permission/edit?brand_id=${this.brand_id}`, 'nT');
let { brand_id, userInfo, miniPermissionLs, stadiumPermissionLs } = this;
let _query = {
userInfo: {
id: userInfo?.id ?? '',
name: userInfo?.actual_name ?? '',
account: userInfo?.username ?? '',
},
miniPermissionLs,
stadiumPermissionLs
}
routeTo(`/subpackage/account/pages/permission/edit?brand_id=${this.brand_id}&query_json=${jsonStr(_query)}`, 'nT');
},
unbindWXAccount(){
showModal({ content: '是否解绑该账号?', });

52
src/subpackage/account/pages/permission/modules/edit/min_jurisdiction.vue

@ -1,11 +1,12 @@
<template>
<select-container title="商家助手小程序权限" :is-all="isAll" @click:all="isAll = !isAll">
<select-container title="商家助手小程序权限" :is-all="isAll" @click:all="allSelectedBtn">
<view class="jurisdiction-content">
<view class="mjc-item" v-for="i in 5" :key="i">
<view class="mjc-item" v-for="(e, i) in permissionArr" :key="i">
<jurisdiction-item
centre
:active='i%2 === 0'
></jurisdiction-item>
:active='selectedIds.includes(+e.key)'
@click="itemClick(e)"
>{{ e.name || '' }}</jurisdiction-item>
</view>
</view>
@ -15,21 +16,52 @@
<script>
import select_container from '../../../../components/select_container.vue';
import jurisdiction_item from '../../../../components/jurisdiction_item.vue';
import { mapGetters } from "vuex";
export default {
components: {
'select-container': select_container,
'jurisdiction-item': jurisdiction_item
},
data(){
return {
isAll: false
props: {
value: {
type: Array,
default: []
}
},
onLoad(){
computed: {
...mapGetters(['permissionArr']),
selectedIds: {
get(){
return this.value?.map?.(item=>+item);
},
set(val){
this.$emit('input', val);
}
},
isAll(){
let { permissionArr, selectedIds } = this;
return permissionArr.every(item=>selectedIds.includes(+item.key));
}
},
methods: {
itemClick(e){
let { selectedIds } = this;
if(selectedIds.includes(+e.key)){
this.selectedIds = selectedIds.filter(item=>item !== +e.key);
}else{
this.selectedIds = selectedIds.concat(+e.key);
}
},
//
allSelectedBtn(){
let { permissionArr, selectedIds, isAll } = this;
let _pIds = permissionArr.map(item => +item.key);
if(isAll){
this.selectedIds = selectedIds.filter(item => !_pIds.includes(item));
}else{
this.selectedIds = [ ...new Set([...selectedIds, ..._pIds]) ];
}
}
}
}
</script>

14
src/subpackage/account/pages/permission/modules/edit/stadium_jurisdiction.vue

@ -1,10 +1,10 @@
<template>
<select-container title="门店权限" :is-all="isAll" @click:all="isAll = !isAll">
<view class="jurisdiction-content">
<view class="mjc-item" v-for="i in 4" :key="i">
<view class="mjc-item" v-for="(e, i) in stadiumLs" :key="i">
<jurisdiction-item
:active='i%2 === 0'
></jurisdiction-item>
>{{ e.name || '-' }}</jurisdiction-item>
</view>
</view>
@ -14,6 +14,7 @@
<script>
import select_container from '../../../../components/select_container.vue';
import jurisdiction_item from '../../../../components/jurisdiction_item.vue';
import { getStadiumList } from "../../../../js/handle";
export default {
components: {
'select-container': select_container,
@ -21,14 +22,19 @@ export default {
},
data(){
return {
isAll: false
isAll: false,
stadiumLs: [],
}
},
onLoad(){
},
methods: {
async getStadiumLs(bid){
let _res = await getStadiumList({ brand_id: bid });
let _ls = _res?.list ?? [];
this.stadiumLs = _ls;
}
}
}
</script>

9
src/subpackage/account/pages/permission/modules/info/admin_permission.vue

@ -4,7 +4,7 @@
<template v-slot:title-right>
<view class="ap-title-right">
<view class="atr-name">修改需前往后台定义权限组</view>
<switch disabled color="#009874" style="transform:scale(0.7)" :checked="isAdmin" @click="switchClick"></switch>
<switch disabled color="#009874" style="transform:scale(0.7)" :checked="isAdmin"></switch>
</view>
</template>
<template v-slot:content>
@ -33,10 +33,7 @@ export default {
},
methods: {
switchClick(e){
console.log(e);
showModal({ content: '请前往后台定义权限组!' });
},
}
}
</script>
@ -50,6 +47,6 @@ export default {
}
.ap-content{
padding: 0upx 20upx;
@include flcw(28upx, 40 px, #1A1A1A);
@include flcw(28upx, 40upx, #1A1A1A);
}
</style>

22
src/subpackage/account/pages/permission/modules/info/min_permission.vue

@ -3,8 +3,15 @@
<info-container title="商家助手小程序权限">
<template v-slot:title-right>
<view class="mp-tr-content">
<view class="mtc-name">已绑定微信用户</view>
<view class="mtc-status" @click="$emit('click:unbind')">解绑</view>
<block v-if="isBindWx">
<view class="mtc-name">已绑定{{ nickName || '-' }}</view>
<view class="mtc-status" @click="$emit('click:unbind')">解绑</view>
</block>
<block v-else>
<view class="mtc-name"> </view>
<view class="mtc-status green">去绑定</view>
</block>
</view>
</template>
<template v-slot:content>
@ -34,6 +41,14 @@ export default {
obtainedPermissionArr: {
type: Array,
default: () => []
},
isBindWx: {
type: Boolean,
default: false
},
nickName: {
type: String,
default: ''
}
},
onLoad(){
@ -55,6 +70,9 @@ export default {
margin-left: 10upx;
flex-shrink: 0;
@include flcw(24upx, 34upx, #EA5061);
&.green{
color: $mColor;
}
}
}
.mp-content{

14
src/subpackage/account/pages/permission/modules/info/stadium_permission.vue

@ -4,7 +4,7 @@
<template v-slot:content>
<view class="sp-content">
<view class="sp-item" v-for="(e, i) in stadiumLs" :key="i">
<permission-item :active="i%3 === 0">{{ e.name || '-' }}</permission-item>
<permission-item :active="permissionList.includes(e.id + '')">{{ e.name || '-' }}</permission-item>
</view>
</view>
@ -17,19 +17,29 @@
import infoContainer from '../../../../components/info_container.vue';
import permissionItem from '../../../../components/permission_item.vue';
import { getStadiumList } from "../../../../js/handle";
import { showLoad, hideLoad } from "@/utils/util.js";
export default {
components: {
'info-container': infoContainer,
'permission-item': permissionItem
},
props: {
permissionList: {
type: Array,
default: () => []
}
},
data(){
return {
stadiumLs: []
stadiumLs: [],
}
},
methods: {
async getStadiumLs(bid){
showLoad();
let _res = await getStadiumList({ brand_id: bid });
hideLoad();
let _ls = _res?.list ?? [];
this.stadiumLs = _ls;
}

2
src/utils/util.js

@ -158,7 +158,7 @@ export function jsonStr(data){
return encodeURIComponent(JSON.stringify(data))
}
export function jsonPar(json){
return JSON.parse(decodeURIComponent(json))
return JSON.parse(decodeURIComponent(decodeURIComponent(json)))
}
export let promisify = api => {

Loading…
Cancel
Save