Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
haoban-3
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
office
haoban-3
Commits
d90e7296
Commit
d90e7296
authored
May 25, 2022
by
caoyanzhi
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/4月-菜单和权限' into dev
parents
b549b277
6715887e
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
259 additions
and
26 deletions
+259
-26
button-code.js
menu-data/button-code.js
+10
-4
menu-data.js
menu-data/menu-data.js
+7
-7
api.js
src/api/api.js
+6
-4
error.js
src/common/js/error.js
+4
-6
user-info.vue
src/components/layout/components/user-info.vue
+3
-1
index.js
src/router/index.js
+10
-0
add-member-show-rules.vue
src/views/apps/customerApp/add-member-show-rules.vue
+212
-0
memberShowSet.vue
src/views/apps/customerApp/memberShowSet.vue
+0
-0
contacts.vue
src/views/business/contacts.vue
+2
-2
gic-error.vue
src/views/errorPage/gic-error.vue
+5
-2
No files found.
menu-data/button-code.js
View file @
d90e7296
...
...
@@ -16,10 +16,16 @@ module.exports = {
// 2.待开启同步标签 (按钮,控制“待开启同步标签”所有操作权限)
willSyncTag
:
[
'待开启同步标签'
,
1
,
2
]
},
// TODO 客户展示设置
// TODO 1.特殊策略配置 (按钮,控制“新增特殊策略配置”弹窗内所有操作权限)
// TODO 2.编辑 (按钮,控制“修改特殊策略配置”弹窗内所有操作权限)
// TODO 3.删除 (按钮)
// 客户展示设置
memberShowSet
:
{
// 按钮名称、是否受权限控制0否1是、是否增删改0跳转1是2其他、按钮跳转路径
// 1.特殊策略配置 (按钮,控制“新增特殊策略配置”弹窗内所有操作权限)
addShowRules
:
[
'新增特殊策略'
,
1
,
0
,
'addMemberShowRules'
],
// 2.编辑 (按钮,控制“修改特殊策略配置”弹窗内所有操作权限)
editShowRules
:
[
'编辑'
,
1
,
0
,
'editMemberShowRules'
],
// 3.删除 (按钮)
delShowRules
:
[
'删除'
,
1
,
1
]
},
memberGroupSet
:
{
// 1.会员分组失效后不展示(按钮)
groupExpire
:
[
'分组失效后不展示'
,
1
,
2
],
...
...
menu-data/menu-data.js
View file @
d90e7296
...
...
@@ -20,13 +20,13 @@ module.exports = [
{
menu
:
[
'客户基础设置'
,
''
,
1
,
'iconkehushezhi'
],
children
:
[
//
{
// menu: ['客户展示设置', '', 1],// TODO 本次新增页面
//
children: [
// { menu: ['新增特殊策略', '', 1] },// TODO 本次新增页面
// { menu: ['编辑特殊策略', '', 1] },// TODO 本次新增页面
//
]
//
},
{
menu
:
[
'客户展示设置'
,
'memberShowSet'
,
1
],
children
:
[
{
menu
:
[
'新增特殊策略'
,
'addMemberShowRules'
,
1
]
},
{
menu
:
[
'编辑特殊策略'
,
'editMemberShowRules'
,
1
]
},
]
},
{
menu
:
[
'客户分组设置'
,
'memberGroupSet'
,
1
],
children
:
[
...
...
src/api/api.js
View file @
d90e7296
...
...
@@ -19,6 +19,8 @@ Vue.axios.defaults.headers.common['platform'] = 'haoban';
Vue
.
axios
.
defaults
.
timeout
=
500000
;
let
local
=
window
.
location
.
origin
;
const
userInfos
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'userInfos'
)
||
'{}'
);
const
gicHost
=
typeof
userInfos
.
gicHost
==
'string'
?
userInfos
.
gicHost
.
replace
(
/
\/
$/
,
''
)
:
''
;
// let local = process.env.NODE_ENV == 'development' ? 'https://www.gicdev.com' : '';
...
...
@@ -75,11 +77,11 @@ Vue.axios.interceptors.response.use(
if
(
window
.
location
.
href
.
indexOf
(
'gic-error'
)
!=
-
1
)
{
return
false
;
}
window
.
location
.
href
=
local
+
'/gic-web/#/login?ishb=1'
;
window
.
location
.
href
=
gicHost
+
'/gic-web/#/login?ishb=1'
;
}
if
(
data
.
data
.
errorCode
==
10
||
data
.
data
.
errorCode
==
7
)
{
window
.
location
.
href
=
local
+
'/haoban-3/#/index'
;
window
.
location
.
href
=
gicHost
+
'/haoban-3/#/index'
;
}
return
data
;
}
...
...
@@ -87,11 +89,11 @@ Vue.axios.interceptors.response.use(
},
err
=>
{
if
(
err
.
response
.
status
==
502
)
{
window
.
location
.
href
=
local
+
'/gic-web/#/login?ishb=1'
;
window
.
location
.
href
=
gicHost
+
'/gic-web/#/login?ishb=1'
;
Message
.
error
({
message
:
'服务异常⊙﹏⊙∥'
});
}
if
(
err
.
response
.
status
!=
403
)
{
window
.
location
.
href
=
local
+
'/gic-web/#/login?ishb=1'
;
window
.
location
.
href
=
gicHost
+
'/gic-web/#/login?ishb=1'
;
Message
.
error
({
message
:
'登录失效!'
});
}
return
Promise
.
resolve
(
err
);
...
...
src/common/js/error.js
View file @
d90e7296
...
...
@@ -8,21 +8,19 @@
*/
/* 后台返回消息提示 */
import
{
Message
}
from
'element-ui'
;
const
userInfos
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'userInfos'
)
||
'{}'
);
const
gicHost
=
typeof
userInfos
.
gicHost
==
'string'
?
userInfos
.
gicHost
.
replace
(
/
\/
$/
,
''
)
:
''
;
// 后台返回异常提示
export
default
{
errorMsg
:
function
(
response
)
{
let
local
=
window
.
location
.
origin
;
/* if (local.indexOf('localhost') != -1) {
local = 'http://www.gicdev.com';
} */
if
(
response
.
errorCode
!=
1
)
{
if
(
response
.
errorCode
==
4
)
{
window
.
location
.
href
=
local
+
'/gic-web/#/login?ishb=1'
;
window
.
location
.
href
=
gicHost
+
'/gic-web/#/login?ishb=1'
;
return
false
;
}
if
(
response
.
errorCode
==
10
)
{
window
.
location
.
href
=
local
+
'/haoban-3/#/index'
;
window
.
location
.
href
=
gicHost
+
'/haoban-3/#/index'
;
return
false
;
}
Message
.
error
({
...
...
src/components/layout/components/user-info.vue
View file @
d90e7296
...
...
@@ -58,7 +58,9 @@ export default {
return
;
}
this
.
$message
.
success
(
'退出成功'
);
window
.
location
.
href
=
location
.
origin
+
'/gic-web/#/login?ishb=1'
;
const
userInfos
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'userInfos'
)
||
'{}'
);
const
gicHost
=
typeof
userInfos
.
gicHost
==
'string'
?
userInfos
.
gicHost
.
replace
(
/
\/
$/
,
''
)
:
''
;
window
.
location
.
href
=
gicHost
+
'/gic-web/#/login?ishb=1'
;
})
.
finally
(()
=>
this
.
$emit
(
'showLoading'
,
false
));
}
...
...
src/router/index.js
View file @
d90e7296
...
...
@@ -217,6 +217,16 @@ export const constantRouterMap = [
component
:
_import
(
'apps/customerApp'
,
'memberShowSet'
)
},
{
path
:
'/addMemberShowRules'
,
name
:
'新增特殊策略'
,
component
:
_import
(
'apps/customerApp'
,
'add-member-show-rules'
)
},
{
path
:
'/editMemberShowRules'
,
name
:
'编辑特殊策略'
,
component
:
_import
(
'apps/customerApp'
,
'add-member-show-rules'
)
},
{
path
:
'/memberGroupSet'
,
name
:
'客户分组设置'
,
component
:
_import
(
'apps/customerApp'
,
'memberGroupSet'
)
...
...
src/views/apps/customerApp/add-member-show-rules.vue
0 → 100644
View file @
d90e7296
<
template
>
<div
class=
"add-rules"
>
<el-form
:model=
"myCustomData"
:rules=
"rules"
ref=
"myCustomData"
label-width=
"100px"
>
<el-form-item
label=
"策略名称"
prop=
"strategyName"
>
<el-input
v-model=
"myCustomData.strategyName"
style=
"width: 460px"
placeholder=
"请输入策略名称"
maxlength=
"10"
show-word-limit
></el-input>
</el-form-item>
<el-form-item
label=
"门店类型"
prop=
"storeType"
>
<el-checkbox-group
v-model=
"myCustomData.storeType"
>
<el-checkbox
v-for=
"el in storeTypes"
:key=
"el.value"
:disabled=
"selectedTypes.includes(el.value)"
:label=
"el.value"
>
{{
el
.
label
}}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item
label=
"设置项"
prop=
"options"
>
<div
class=
"setting-item"
>
<el-checkbox
v-model=
"myCustomData.mainStoreFlag"
:true-label=
"1"
:false-label=
"0"
@
change=
"onOptionsChange"
>
展示服务门店客户
</el-checkbox>
<div
class=
"set-tip-text"
>
保存勾选项后,门店导购和店长可查看本门店作为服务门店名下客户
</div>
</div>
<div
class=
"setting-item"
>
<el-checkbox
v-model=
"myCustomData.minorStoreFlag"
:true-label=
"1"
:false-label=
"0"
@
change=
"onOptionsChange"
>
展示协管门店客户
</el-checkbox>
<div
class=
"set-tip-text"
>
保存勾选项后,门店导购和店长可查看本门店作为协管门店名下客户
</div>
</div>
<div
class=
"setting-item"
>
<el-checkbox
v-model=
"myCustomData.openCardStoreFlag"
:true-label=
"1"
:false-label=
"0"
@
change=
"onOptionsChange"
>
展示开卡门店客户
</el-checkbox>
<div
class=
"set-tip-text"
>
保存勾选项后,门店导购和店长可查看本门店作为开卡门店名下客户
</div>
</div>
<div
class=
"setting-item"
>
<el-checkbox
v-model=
"myCustomData.showFreezeFlag"
:true-label=
"1"
:false-label=
"0"
@
change=
"onOptionsChange"
>
展示冻结会员
</el-checkbox>
<div
class=
"set-tip-text"
>
保存勾选项后,门店导购和店长可查看本门店冻结会员
</div>
</div>
<div
class=
"setting-item"
>
<el-checkbox
v-model=
"myCustomData.isSeeAuthMember"
:true-label=
"1"
:false-label=
"0"
@
change=
"onOptionsChange"
>
展示已开卡会员
</el-checkbox>
<div
class=
"set-tip-text"
>
保存勾选项后,门店导购和店长可查看本门店微信会员(不含未开卡会员)及POS会员,不勾选将展示微信会员(即微信总量,含未开卡会员)及POS会员
</div>
</div>
<div
class=
"setting-item"
>
<el-checkbox
v-model=
"myCustomData.clerkSeeOtherFlag"
:true-label=
"1"
:false-label=
"0"
@
change=
"onOptionsChange"
>
允许导购查看其他导购客户
</el-checkbox>
<div
class=
"set-tip-text"
>
保存勾选项后,门店导购可查看本门店其他导购名下客户
</div>
</div>
</el-form-item>
</el-form>
<hb-form-bottom>
<el-button
@
click=
"$router.go(-1)"
>
取消
</el-button>
<el-button
type=
"primary"
:loading=
"loading"
@
click=
"onSave"
>
保 存
</el-button>
</hb-form-bottom>
</div>
</
template
>
<
script
>
import
errMsg
from
'@/common/js/error'
;
import
{
postRequest
,
getRequest
}
from
'@/api/api'
;
export
default
{
name
:
'AddMemberShowRules'
,
props
:
{
brandId
:
{
type
:
String
,
default
()
{
return
''
;
}
}
},
data
()
{
const
valiStoreType
=
(
rules
,
value
,
callback
)
=>
{
const
data
=
value
.
filter
(
el
=>
!
this
.
selectedTypes
.
includes
(
el
));
if
(
data
.
length
==
0
)
{
return
callback
(
new
Error
(
'请选择门店类型'
));
}
callback
();
};
return
{
// 门店类型 -1:全部;1:自营;2:联营;3:代理;4:代销;5:托管
storeTypes
:
[
{
label
:
'自营'
,
value
:
'1'
},
{
label
:
'联营'
,
value
:
'2'
},
{
label
:
'代理'
,
value
:
'3'
},
{
label
:
'代销'
,
value
:
'4'
},
{
label
:
'托管'
,
value
:
'5'
}
],
selectedTypes
:
[],
wxEnterpriseRelatedId
:
JSON
.
parse
(
sessionStorage
.
getItem
(
'userInfos'
)).
wxEnterpriseId
,
myCustomData
:
{
memberManageSettingId
:
''
,
// 会员设置id,更新时必传
strategyName
:
''
,
storeType
:
[],
//门店类型 -1:全部;1:自营;2:联营;3:代理;4:代销;5:托管
mainStoreFlag
:
0
,
// 服务门店显示,1显示0不现实
minorStoreFlag
:
0
,
// 协管门店显示,1显示0不显示
openCardStoreFlag
:
0
,
// 开卡门店显示,1显示0不显示
clerkSeeOtherFlag
:
0
,
// 导购查看其他导购,1显示0不显示
showFreezeFlag
:
0
,
isSeeAuthMember
:
0
,
options
:
''
},
rules
:
{
strategyName
:
{
required
:
true
,
message
:
'请输入策略名称'
,
trigger
:
'blur'
},
storeType
:
{
required
:
true
,
validator
:
valiStoreType
,
trigger
:
'blur'
},
options
:
{
required
:
true
,
message
:
'请选择设置项'
,
trigger
:
'blur'
}
},
loading
:
false
};
},
methods
:
{
onOptionsChange
()
{
const
{
mainStoreFlag
,
minorStoreFlag
,
openCardStoreFlag
,
clerkSeeOtherFlag
,
showFreezeFlag
,
isSeeAuthMember
}
=
this
.
myCustomData
;
const
flag
=
mainStoreFlag
==
1
||
minorStoreFlag
==
1
||
openCardStoreFlag
==
1
||
clerkSeeOtherFlag
==
1
||
showFreezeFlag
==
1
||
isSeeAuthMember
==
1
;
this
.
myCustomData
.
options
=
flag
?
1
:
''
;
},
getSettingList
()
{
getRequest
(
'/haoban-app-customer-web/customer/find-member-manage-setting-list'
,
{}).
then
(
res
=>
{
const
{
code
,
result
}
=
res
.
data
||
{};
if
(
code
!=
0
)
{
errMsg
.
errorMsg
(
res
.
data
);
return
;
}
this
.
$nextTick
(()
=>
{
this
.
rules
.
storeType
.
trigger
=
'change'
;
});
// storeType = -1时为通用策略
// 通用策略不能修改门店类型
if
(
this
.
myCustomData
.
storeType
.
includes
(
'-1'
))
return
;
if
(
Array
.
isArray
(
result
))
{
this
.
selectedTypes
=
result
.
reduce
((
types
,
el
)
=>
{
if
(
typeof
el
.
storeType
==
'string'
&&
el
.
memberManageSettingId
!=
this
.
myCustomData
.
memberManageSettingId
)
{
let
storeTypes
=
el
.
storeType
.
split
(
','
);
storeTypes
=
storeTypes
.
filter
(
el
=>
!
types
.
includes
(
el
));
types
=
types
.
concat
(
storeTypes
);
}
return
types
;
},
[]);
this
.
myCustomData
.
storeType
=
this
.
myCustomData
.
storeType
.
concat
(
this
.
selectedTypes
);
}
});
},
onSave
()
{
this
.
loading
=
true
;
this
.
onOptionsChange
();
this
.
$refs
.
myCustomData
.
validate
(
vali
=>
{
if
(
!
vali
)
{
this
.
loading
=
false
;
return
;
}
const
{
memberManageSettingId
,
strategyName
,
storeType
,
mainStoreFlag
,
minorStoreFlag
,
openCardStoreFlag
,
clerkSeeOtherFlag
,
showFreezeFlag
,
isSeeAuthMember
}
=
this
.
myCustomData
;
const
params
=
{
memberManageSettingId
,
strategyName
,
mainStoreFlag
,
minorStoreFlag
,
openCardStoreFlag
,
clerkSeeOtherFlag
,
showFreezeFlag
,
isSeeAuthMember
};
params
.
storeType
=
storeType
.
filter
(
el
=>
!
this
.
selectedTypes
.
includes
(
el
)).
join
(
','
);
postRequest
(
'/haoban-app-customer-web/customer/save-member-show-setting'
,
params
)
.
then
(
res
=>
{
const
{
errorCode
}
=
res
.
data
||
{};
if
(
errorCode
!=
1
)
{
errMsg
.
errorMsg
(
res
.
data
);
return
;
}
this
.
$message
.
success
(
'保存成功'
);
this
.
$router
.
go
(
-
1
);
})
.
finally
(()
=>
(
this
.
loading
=
false
));
});
},
getShowSet
()
{
postRequest
(
'/haoban-app-customer-web/customer/find-member-manage-setting-detail'
,
{
memberManageSettingId
:
this
.
myCustomData
.
memberManageSettingId
}).
then
(
res
=>
{
const
{
code
,
result
}
=
res
.
data
||
{};
if
(
code
!=
0
)
{
errMsg
.
errorMsg
(
res
.
data
);
return
;
}
const
{
strategyName
,
storeType
,
mainStoreFlag
,
minorStoreFlag
,
openCardStoreFlag
,
clerkSeeOtherFlag
,
showFreezeFlag
,
isSeeAuthMember
}
=
result
||
{};
Object
.
assign
(
this
.
myCustomData
,
{
strategyName
,
storeType
:
this
.
selectedTypes
.
concat
(
typeof
storeType
==
'string'
?
storeType
.
split
(
','
)
:
[]),
mainStoreFlag
,
minorStoreFlag
,
openCardStoreFlag
,
clerkSeeOtherFlag
,
showFreezeFlag
,
isSeeAuthMember
});
// storeType = -1时为通用策略
// 通用策略不能修改门店类型
if
(
storeType
==
-
'1'
)
{
this
.
selectedTypes
=
this
.
storeTypes
.
map
(
el
=>
el
.
value
);
this
.
myCustomData
.
storeType
=
this
.
storeTypes
.
map
(
el
=>
el
.
value
);
this
.
myCustomData
.
storeType
.
push
(
'-1'
);
}
this
.
$nextTick
(()
=>
{
this
.
rules
.
options
.
trigger
=
'change'
;
});
});
}
},
created
()
{
this
.
getSettingList
();
if
(
this
.
$route
.
query
.
id
)
{
this
.
myCustomData
.
memberManageSettingId
=
this
.
$route
.
query
.
id
;
this
.
getShowSet
();
}
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
.add-rules
{
padding
:
20px
;
}
.setting-item
{
&
+
.setting-item
{
margin-top
:
16px
;
}
.set-tip-text
{
padding
:
0
0
0
25px
;
font-size
:
12px
;
font-weight
:
400
;
color
:
#909399
;
line-height
:
17px
;
}
}
</
style
>
src/views/apps/customerApp/memberShowSet.vue
View file @
d90e7296
This diff is collapsed.
Click to expand it.
src/views/business/contacts.vue
View file @
d90e7296
...
...
@@ -14,8 +14,8 @@
<div
class=
"apps-content-left border-box"
>
<div
class=
"left-tree-body border-box"
>
<div
class=
"left-tree-search"
>
<el-input
placeholder=
"搜索部门"
maxlength=
"50"
v-model=
"searchInput"
class=
"w-225"
@
keyup
.
native=
"value => toInput(value, searchInput)"
clearable
@
clear=
"clearInput"
></el-input>
<
span
class=
"iconfont-hb3 iconshouquanyanzheng m-l-10 cursor-pointer"
@
click=
"toManage"
></span
>
<el-input
placeholder=
"搜索部门"
maxlength=
"50"
v-model=
"searchInput"
@
keyup
.
native=
"value => toInput(value, searchInput)"
clearable
@
clear=
"clearInput"
></el-input>
<
!--
<span
class=
"iconfont-hb3 iconshouquanyanzheng m-l-10 cursor-pointer"
@
click=
"toManage"
></span>
--
>
</div>
<div
v-if=
"$getButtonLimit($buttonCode.refreshStoreMember)"
:limit-code=
"$buttonCode.refreshStoreMember"
class=
"help-body flex flex-space-between"
@
click=
"toRefreshMember"
><span
class=
"font-12 color-2f54eb"
>
刷新企业成员
</span><span
class=
"font-12 color-2f54eb iconfont-hb3 iconshuaxin1"
></span></div>
<!--
<div
class=
"p-t-14"
>
...
...
src/views/errorPage/gic-error.vue
View file @
d90e7296
...
...
@@ -15,7 +15,7 @@
<div
class=
"bullshit"
>
<!--
<div
class=
"bullshit__oops"
>
404
</div>
-->
<div
class=
"bullshit__headline"
>
{{
message
}}
</div>
<a
href=
"/gic-web/#/login?ishb=1
"
class=
"bullshit__return-home"
rel=
"noopener noreferrer"
>
返回好办登录页
</a>
<a
:href=
"gicHost + '/gic-web/#/login?ishb=1'
"
class=
"bullshit__return-home"
rel=
"noopener noreferrer"
>
返回好办登录页
</a>
</div>
</div>
</div>
...
...
@@ -29,7 +29,8 @@ export default {
inject
:
[
'layoutVm'
],
data
()
{
return
{
img_404
img_404
,
gicHost
:
''
};
},
computed
:
{
...
...
@@ -43,6 +44,8 @@ export default {
/* eslint-disable */
mounted
()
{
this
.
layoutVm
.
$emit
(
'command'
,
'hideAside'
);
const
userInfos
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'userInfos'
)
||
'{}'
);
this
.
gicHost
=
typeof
userInfos
.
gicHost
==
'string'
?
userInfos
.
gicHost
.
replace
(
/
\/
$/
,
''
)
:
''
;
}
};
</
script
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment