Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
confucius
Project
Project
Details
Activity
Releases
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
罗超
confucius
Commits
e6f555f0
Commit
e6f555f0
authored
Aug 18, 2021
by
Mac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
38f3c45f
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1959 additions
and
2 deletions
+1959
-2
wechat.js
src/api/system/wechat.js
+26
-1
chaneelcode-form.vue
src/components/enterprise/chaneelcode-form.vue
+522
-0
choiceapproval.vue
src/components/enterprise/choiceapproval.vue
+210
-0
addchannelcode.vue
src/pages/enterprise/addchannelcode.vue
+867
-0
channelcodeList.vue
src/pages/enterprise/channelcodeList.vue
+324
-0
routes.js
src/router/routes.js
+10
-1
No files found.
src/api/system/wechat.js
View file @
e6f555f0
...
@@ -272,4 +272,29 @@ export function SetSynvEduEmployee(data) {
...
@@ -272,4 +272,29 @@ export function SetSynvEduEmployee(data) {
method
:
'post'
,
method
:
'post'
,
data
data
})
})
}
}
\ No newline at end of file
/**
* 删除分组/标签
*
*/
export
function
getWeChatChannelGroupList
(
data
)
{
return
request
({
url
:
'/QYWeChat/GetWeChatChannelGroupList'
,
method
:
'post'
,
data
})
}
/**
* 删除分组/标签
*
*/
export
function
getWeChatChannelPageList
(
data
)
{
return
request
({
url
:
'/QYWeChat/GetWeChatChannelPageList'
,
method
:
'post'
,
data
})
}
src/components/enterprise/chaneelcode-form.vue
0 → 100644
View file @
e6f555f0
This diff is collapsed.
Click to expand it.
src/components/enterprise/choiceapproval.vue
0 → 100644
View file @
e6f555f0
<
style
>
.choiceappoval
.ApprovalProcessBg
{
background
:
#f8f8f8
;
max-height
:
400px
;
overflow-y
:
auto
;
}
.choiceappoval
.Approval_yxList
{
width
:
300px
;
background
:
#f8f8f8
;
min-height
:
400px
;
max-height
:
400px
;
overflow-y
:
auto
;
}
.choiceappoval
.Approval_yxList
li
{
display
:
inline-block
;
width
:
100%
;
line-height
:
40px
;
text-indent
:
15px
;
border-bottom
:
1px
dotted
#eee
;
}
</
style
>
<
template
>
<div>
<q-dialog
v-model=
"IsShow"
persistent
>
<q-card
style=
"width: 700px; max-width: 80vw;"
class=
"choiceappoval"
>
<q-card-section
class=
"row items-center q-pb-none "
>
<div
class=
"text-h6"
>
选择企业成员
</div>
<q-space
/>
<q-btn
icon=
"close"
flat
round
dense
v-close-popup
/>
</q-card-section>
<q-separator
/>
<q-card-section
class=
"q-pt-none"
style=
"padding: 20px 0;"
>
<div
style=
"display: flex;align-items: flex-start;justify-content: space-between;"
>
<div
style=
"width: 300px; margin: 0 20px;"
>
<p
style=
"margin: 0 0 10px 0;display: flex;align-items: center;"
>
选择:
<el-input
style=
"width: 200px;"
placeholder=
"输入关键字进行过滤"
v-model=
"filterText"
>
</el-input>
</p>
<el-tree
class=
'ApprovalProcessBg'
:filter-node-method=
"filterNode"
:data=
"memberList"
show-checkbox
ref=
"treeUser"
:props=
"defaultProps"
:render-after-expand=
"false"
node-key=
"DeptId"
@
check-change=
"handleNodeChange"
>
</el-tree>
</div>
<div
style=
"width: 300px; margin: 0 20px;"
>
<p
style=
"margin: 0 0 20px 0;"
>
已选:
</p>
<div
class=
"Approval_yxList"
>
<li
v-for=
"item in showMember"
>
{{
item
.
DeptName
}}
<i
@
click=
"mySetCheckedKeys(item.DeptId)"
class=
"el-icon-circle-close showMemberIcon"
></i>
</li>
</div>
</div>
</div>
</q-card-section>
<q-separator
/>
<q-card-actions
align=
"right"
class=
"bg-white"
>
<q-btn
class=
"q-mr-md"
label=
"取消"
@
click=
"closeEditOrder"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
label=
"确定"
@
click=
"saveOrderInfo()"
/>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</
template
>
<
script
>
import
{
getEmployeeAddrBook
}
from
'../../api/users/user'
import
selectMaterial
from
"./selectMaterial"
export
default
{
props
:
{
outerindex
:
{
type
:
String
,
default
:
''
,
},
byval
:{
type
:
Array
,
default
:
[],
},
cptype
:{
//1是列表上使用2 新增使用
type
:
String
,
default
:
'1'
,
}
},
data
()
{
return
{
IsShow
:
true
,
memberList
:
[],
filterText
:
""
,
defaultProps
:
{
children
:
'ChildList'
,
label
:
'DeptName'
,
},
userList
:
[],
showMember
:
[],
memberSetCheckedKeys
:
[],
sysUserKeys
:
[],
}
},
created
()
{
if
(
this
.
byval
.
length
>
0
){
this
.
memberSetCheckedKeys
=
[];
this
.
showMember
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
byval
))
this
.
byval
.
forEach
(
x
=>
{
this
.
memberSetCheckedKeys
.
push
(
x
.
DeptId
)
})
}
this
.
getMember
()
//部门下面选择员工
},
mounted
()
{
},
watch
:
{
filterText
(
val
)
{
this
.
$refs
.
treeUser
.
filter
(
val
);
},
},
methods
:
{
getMember
()
{
let
_arr
=
this
.
sysUserKeys
.
concat
(
this
.
memberSetCheckedKeys
)
getEmployeeAddrBook
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
memberList
=
res
.
Data
let
_this
=
this
;
console
.
log
(
_arr
)
_this
.
$refs
.
treeUser
.
setCheckedKeys
(
_arr
);
}
}).
catch
(()
=>
{
})
},
filterNode
(
value
,
data
)
{
if
(
!
value
)
return
true
;
return
data
.
DeptName
.
indexOf
(
value
)
!==
-
1
;
},
handleNodeChange
(
data
,
checked
)
{
data
.
IsCheck
=
checked
;
if
(
data
.
DataType
==
2
&&
data
.
IsCheck
)
{
//是员工且选中
let
isExsit
=
false
this
.
showMember
.
forEach
(
x
=>
{
if
(
x
.
DeptId
==
data
.
DeptId
)
{
isExsit
=
true
return
false
}
})
if
(
!
isExsit
)
{
this
.
showMember
.
push
({
DeptName
:
data
.
DeptName
,
DeptId
:
data
.
DeptId
})
this
.
memberSetCheckedKeys
.
push
(
data
.
DeptId
)
}
}
else
if
(
data
.
DataType
==
2
&&
!
data
.
IsCheck
)
{
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
DeptId
)
!=
-
1
)
{
this
.
showMember
.
splice
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
DeptId
),
1
)
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
),
1
)
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
ParentId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
ParentId
),
1
)
}
}
}
if
(
data
.
DataType
!=
2
&&
data
.
IsCheck
)
{
if
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
)
==
-
1
)
{
this
.
memberSetCheckedKeys
.
push
(
data
.
DeptId
)
}
}
else
if
(
data
.
DataType
==
2
&&
!
data
.
IsCheck
)
{
if
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
),
1
)
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
ParentId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
ParentId
),
1
)
}
}
}
},
mySetCheckedKeys
(
id
)
{
if
(
this
.
memberSetCheckedKeys
.
length
==
0
)
return
if
(
id
==
-
1
)
{
this
.
$refs
.
treeUser
.
setCheckedKeys
(
this
.
memberSetCheckedKeys
)
return
}
this
.
showMember
.
splice
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
id
),
1
)
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
id
),
1
)
this
.
$refs
.
treeUser
.
setCheckedKeys
(
this
.
memberSetCheckedKeys
);
},
//关闭弹窗
closeEditOrder
()
{
this
.
$emit
(
'close'
)
},
saveOrderInfo
()
{
this
.
$emit
(
'success'
,
this
.
showMember
,
this
.
cptype
)
}
}
}
</
script
>
\ No newline at end of file
src/pages/enterprise/addchannelcode.vue
0 → 100644
View file @
e6f555f0
This diff is collapsed.
Click to expand it.
src/pages/enterprise/channelcodeList.vue
0 → 100644
View file @
e6f555f0
<
template
>
<div
class=
"channelcodeList page-body"
>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-input
@
input=
"changePage(1)"
clearable
standout=
"bg-primary text-white"
v-model=
"msg.Name"
label=
"渠道码名称"
@
clear=
"changePage(1)"
maxlength=
"20"
/>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
@
input=
"changePage(1)"
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.Type"
ref=
"Id"
:options=
"typeList"
label=
"类型"
:dense=
"false"
emit-value
map-options
/>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
@
input=
"changePage(1)"
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.Type"
ref=
"Id"
:options=
"GroupList"
label=
"分组"
:dense=
"false"
emit-value
map-options
/>
</div>
</div>
</div>
<div
class=
"page-content"
>
<q-table
:pagination=
"msg"
:loading=
"loading"
no-data-label=
"暂无相关数据"
flat
class=
"sticky-column-table"
separator=
"none"
title=
""
:data=
"data"
:columns=
"columns"
row-key=
"name"
>
<template
v-slot:top=
"props"
>
<div
class=
"col-2 q-table__title"
>
渠道码
</div>
<q-space
/>
<q-btn
color=
"accent"
style=
"float:right;margin-right:0;"
size=
"sm"
class=
"q-mr-md"
icon=
"add"
label=
"新建"
@
click=
"goadd()"
></q-btn>
</
template
>
<
template
v-slot:body-cell-WXQRCode=
"props"
>
<q-td
:props=
"props"
>
<q-img
v-if=
"props.row.WXQRCode && props.row.WXQRCode!=''"
:src=
"props.row.WXQRCode"
style=
"width: 90px;height: 90px;display: flex;"
>
</q-img>
<div>
{{
props
.
row
.
Type
==
1
?
'单人'
:
'多人'
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-LabelList=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"max-width: 300px;"
v-if=
"props.row.LabelList.length>0"
>
<span
v-for=
"(x,y) in props.row.LabelList"
:key=
'y'
>
{{
x
}}{{
props
.
row
.
LabelList
.
length
!=
y
+
1
?
'、'
:
''
}}
</span>
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-SkipVerify=
"props"
>
<q-td
:props=
"props"
>
<div>
{{
props
.
row
.
SkipVerify
==
1
?
'需要验证'
:
'自动通过'
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-UpdateByName=
"props"
>
<q-td
:props=
"props"
>
<div>
{{
props
.
row
.
UpdateByName
}}
</div>
<div>
{{
props
.
row
.
UpdateTime
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-optioned=
"props"
>
<q-td
:props=
"props"
>
<q-btn
flat
size=
"xs"
icon=
"edit"
style=
"font-weight:400;color: #3FC4FF"
class=
"q-mr-xs"
label=
"编辑"
@
click=
"goedit(props.row)"
/>
<q-btn
flat
size=
"xs"
icon=
"delete"
color=
"negative"
class=
"q-mr-xs"
label=
"删除"
@
click=
"goDetailed(props.row)"
/>
</q-td>
</
template
>
<
template
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
input=
"changePage"
/>
</
template
>
</q-table>
</div>
<q-dialog
v-model=
"isDetails"
>
<q-card
style=
"width: 560px;"
>
<q-card-section
class=
"row items-center q-pb-none"
>
<div
class=
"text-h6"
>
欢迎语详情
</div>
<q-space
/>
<q-btn
icon=
"close"
flat
round
dense
v-close-popup
/>
</q-card-section>
<q-card-section
v-if=
'Detailsobj'
class=
"channelcodeList"
>
</q-card-section>
</q-card>
</q-dialog>
</div>
</template>
<
script
>
import
{
getWeChatChannelPageList
,
getWeChatChannelGroupList
}
from
'../../api/system/wechat'
;
import
{
queryEmployee
}
from
'../../api/users/user'
export
default
{
meta
:
{
title
:
"渠道码"
},
name
:
"channelcodeList"
,
data
()
{
return
{
loading
:
false
,
ISsystem
:
false
,
data
:
[],
pageCount
:
0
,
msg
:
{
pageIndex
:
1
,
pageSize
:
15
,
rowsPerPage
:
15
,
ChannelGroupId
:
0
,
Name
:
''
,
Type
:
0
,
},
typeList
:
[
{
Id
:
0
,
Name
:
'不限'
},
{
Id
:
1
,
Name
:
'单人'
},
{
Id
:
2
,
Name
:
'多人'
},
],
//公告column
columns
:
[{
name
:
'二维码'
,
label
:
'二维码'
,
field
:
'二维码'
,
align
:
'left'
},
{
name
:
'Name'
,
field
:
'Name'
,
label
:
'名称'
,
align
:
'left'
,
},
{
name
:
'ChannelGroupName'
,
field
:
'ChannelGroupName'
,
label
:
'分组'
,
align
:
'left'
},
{
name
:
'CustomerNum'
,
field
:
'CustomerNum'
,
label
:
'客户数'
,
align
:
'left'
},
{
name
:
'LabelList'
,
field
:
'LabelList'
,
label
:
'标签'
,
align
:
'left'
},
{
name
:
'SkipVerify'
,
field
:
'SkipVerify'
,
label
:
'自动添加好友'
,
align
:
'left'
},
{
name
:
'UpdateByName'
,
field
:
'UpdateByName'
,
label
:
'操作人'
,
align
:
'left'
},
{
name
:
'optioned'
,
label
:
'操作'
,
field
:
'DeptId'
}
],
GroupList
:
[],
isDetails
:
false
,
Detailsobj
:
null
}
},
created
()
{
this
.
getChannelGroupList
()
//分租列表
this
.
getList
()
},
methods
:
{
getChannelGroupList
()
{
getWeChatChannelGroupList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
GroupList
=
res
.
Data
;
let
obj
=
{
Id
:
0
,
Name
:
'不限'
}
this
.
GroupList
.
unshift
(
obj
)
}
}).
catch
(()
=>
{
})
},
changePage
(
e
)
{
this
.
msg
.
pageIndex
=
1
this
.
getList
()
},
getList
()
{
this
.
loading
=
true
getWeChatChannelPageList
(
this
.
msg
).
then
(
res
=>
{
this
.
loading
=
false
this
.
data
=
res
.
Data
.
PageData
;
this
.
pageCount
=
res
.
Data
.
PageCount
})
},
goadd
()
{
this
.
$router
.
push
({
path
:
'/enterprise/addchannelcode'
,
});
},
goedit
(
row
)
{
//编辑
this
.
$router
.
push
({
path
:
'/enterprise/addWelcome'
,
query
:
{
Id
:
row
.
Id
}
});
},
goDetailed
(
row
)
{
//删除
this
.
$q
.
dialog
({
title
:
'提示信息'
,
message
:
'是否确定删除所此欢迎语?'
,
cancel
:
true
,
persistent
:
true
,
ok
:
"确定"
,
cancel
:
"取消"
,
}).
onOk
(()
=>
{
delWechatWelcomesInfo
({
WelcomesId
:
row
.
Id
}).
then
(
res
=>
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
timeout
:
2000
,
message
:
res
.
Message
,
position
:
'top'
})
this
.
getList
()
})
}).
onCancel
(()
=>
{
});
},
viewDetails
(
row
)
{
this
.
Detailsobj
=
row
this
.
isDetails
=
true
}
}
}
</
script
>
<
style
>
.channelcodeList
.Sysuser_Date
.el-input--prefix
.el-input__inner
{
background-color
:
red
;
border
:
0
;
}
.channelcodeList
.state-item
{
padding
:
2px
5px
;
border-radius
:
3px
;
text-align
:
center
;
font-size
:
10px
;
}
.channelcodeList
.frIdlist
{
padding
:
3px
10px
;
border-radius
:
3px
;
background
:
#EEEEEF
;
align-items
:
center
;
justify-content
:
center
;
margin-right
:
5px
;
margin-bottom
:
5px
;
cursor
:
pointer
;
}
.class-popover
.q-pr-lg
{
padding-right
:
0
;
margin-top
:
20px
;
}
.channelcodeList
.el-date-editor.el-input
{
width
:
100%
;
}
.channelcodeList
.el-date-editor.el-input
input
{
background-color
:
transparent
!important
;
}
.channelcodeList
.el-range-editor
.el-range-input
{
background
:
none
;
}
.Sysuser_Date
.el-input__inner
{
background
:
transparent
!important
;
border
:
0
!important
;
}
.channelcodeList
.el-drawer.rtl
{
overflow
:
inherit
;
}
.channelcodeList
.box_l
{
width
:
400px
;
border-radius
:
6px
;
margin-right
:
15px
;
background
:
#fff
;
margin-top
:
20px
;
margin-left
:
10px
;
box-shadow
:
0px
0px
10px
rgba
(
191
,
191
,
191
,
0.7
);
}
.channelcodeList
.boxl_title
{
width
:
100%
;
height
:
56px
;
display
:
flex
;
align-items
:
center
;
border-bottom
:
1px
solid
#e8e8e8
;
}
</
style
>
\ No newline at end of file
src/router/routes.js
View file @
e6f555f0
...
@@ -1190,7 +1190,16 @@ const routes = [{
...
@@ -1190,7 +1190,16 @@ const routes = [{
component
:
()
=>
component
:
()
=>
import
(
"pages/enterprise/customerLabel"
)
import
(
"pages/enterprise/customerLabel"
)
},
},
{
path
:
"/enterprise/channelcodeList"
,
//企微 渠道活码
component
:
()
=>
import
(
"pages/enterprise/channelcodeList"
)
},
{
path
:
"/enterprise/addchannelcode"
,
//企微 新增修改渠道活码
component
:
()
=>
import
(
"pages/enterprise/addchannelcode"
)
},
...
...
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