Commit d82c242a authored by Mac's avatar Mac

渠道分组

parent 5ddf2473
......@@ -199,4 +199,77 @@ export function SetSynvEduEmployee(data) {
method: 'post',
data
})
}
/**
* 获取渠道分组分页列表
*
*/
export function getWeChatChannelGroupPageList(data) {
return request({
url: '/QYWeChat/GetWeChatChannelGroupPageList',
method: 'post',
data
})
}
/**
* 新增修改渠道分组
*
*/
export function setWeChatChannelGroup(data) {
return request({
url: '/QYWeChat/SetWeChatChannelGroup',
method: 'post',
data
})
}
/**
* 删除渠道分组
*
*/
export function delWeChatChannelGroup(data) {
return request({
url: '/QYWeChat/DelWeChatChannelGroup',
method: 'post',
data
})
}
/**
* 获取客户标签/分组 列表
*
*/
export function getWeChatLableList(data) {
return request({
url: '/QYWeChat/GetWeChatLableList',
method: 'post',
data
})
}
/**
* 新增修改分组/标签
*
*/
export function setWeChatLable(data) {
return request({
url: '/QYWeChat/SetWeChatLable',
method: 'post',
data
})
}
/**
* 删除分组/标签
*
*/
export function delWeChatLable(data) {
return request({
url: '/QYWeChat/DelWeChatLable',
method: 'post',
data
})
}
\ No newline at end of file
<template>
<div class="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="resetSearch" clearable standout="bg-primary text-white" v-model="msg.Name"
label="分组名称" @clear="resetSearch" maxlength="20" />
</div>
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-column-table"
separator="none" :data="dataList" :columns="columns">
<template v-slot:top="props">
<div class="col-2 q-table__title">分组列表</div>
<q-space />
<div class="page-option">
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" label="新增分组"
@click="EditCategory(null)" />
</div>
</template>
<template v-slot:body-cell-CateId="props">
<q-td :props="props">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑"
@click="EditCategory(props.row)" />
<q-btn flat size="xs" icon="delete" color="negative" style="font-weight:400;" label="删除"
@click="deleteCategory(props.row)" />
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary"
:max="msg.PageCount" :input="true" @input="changePage" />
</template>
</q-table>
</div>
<q-dialog v-model="isShow" persistent>
<q-card style="width: 520px; max-width: 80vw;">
<q-card-section>
<div class="text-h6">新增分组</div>
</q-card-section>
<q-separator />
<q-card-section class="q-pt-none" style="margin-top: 15px;padding: 20px;">
<q-input filled clearable standout="bg-primary text-white" v-model="addMsg.Name" label="分组名称"
:rules="[val => !!val || '请输入分组名称']" ref="Name" />
<q-input filled clearable standout="bg-primary text-white" v-model="addMsg.Sort" label="分组排序"
style="margin-top: 20px;" :rules="[val => !!val || '请输入分组排序']" ref="Sort"/>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn class="q-mr-md" label="取消" @click="isShow = false" />
<q-btn color="accent" class="q-mr-md" label="确定" @click="submit()" />
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script>
import {
getWeChatChannelGroupPageList,
setWeChatChannelGroup,
delWeChatChannelGroup
} from '../../api/system/wechat';
const addobj = { Id: 0, Name: '', Sort: 1 }
export default {
meta: {
title: "渠道分组管理"
},
data() {
return {
msg: {
pageIndex: 1,
pageSize: 15,
rowsPerPage: 15,
Name: "", //系列名称
},
currentUrl: "",
dataList: [],
keyWords: '',
isShow: false,
loading: true,
columns: [{
name: 'Id',
label: 'ID',
field: 'Id',
align: 'left'
},
{
name: 'Sort',
label: '排序',
field: 'Sort',
align: 'left'
},
{
name: 'Name',
label: '分组名称',
field: 'Name',
align: 'center'
},
{
name: 'UpdateByName',
label: '创建人',
field: 'UpdateByName',
align: 'center'
},
{
name: 'UpdateTime',
label: '创建时间',
field: 'UpdateTime',
align: 'center'
},
{
name: 'CateId',
label: '操作',
field: 'CateId'
}
],
addMsg: Object.assign({}, addobj)
}
},
mounted() {
this.getcategorypage()
},
methods: {
//重新查询
resetSearch() {
this.msg.pageIndex = 1;
this.getcategorypage();
},
changePage(val) {
this.msg.pageIndex = val;
this.getcategorypage()
},
//删除系列
deleteCategory(item) {
let delMsg = {
MediumId: item.Id,
};
this.$q.dialog({
title: '提示信息',
message: '是否确定删除该分组?',
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
delWeChatChannelGroup(delMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '删除成功!',
position: 'top'
})
this.getcategorypage();
}
})
}).onCancel(() => {
});
},
//刷新页面
refreshPage() {
this.getcategorypage();
},
//获取课程系列分页列表
getcategorypage() {
this.loading = true;
getWeChatChannelGroupPageList(this.msg).then(res => {
this.loading = false;
this.dataList = res.Data.PageData;
this.msg.PageCount = res.Data.PageCount
})
},
//新增修改课程系列
EditCategory(obj) {
if (obj) {
this.addMsg.Id = obj.Id
this.addMsg.Name = obj.Name
this.addMsg.Sort = obj.Sort
} else {
this.addMsg = Object.assign({}, addobj)
}
this.isShow = true;
},
submit() {
this.$refs.Name.validate();
this.$refs.Sort.validate();
if (!this.$refs.Name.hasError&& !this.$refs.Sort.hasError) {
setWeChatChannelGroup(this.addMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.resetSearch()
this.isShow = false;
}
})
}
}
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
<template>
<div class="page-body">
<div class="page-search row items-center">
<div class="text-h5">企业客户标签</div>
<div class="col row wrap q-mr-lg q-col-gutter-md">
</div>
</div>
<div style="color: #787878;">企业标签由企业统一配置,配置后,企业成员可以对客户打企业标签</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-column-table no-bottom-table" separator="none" title="" :data="dataList"
: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="EditCategory()"></q-btn>
</template>
<template v-slot:body-cell-Name="props">
<q-td :props="props">
<div style="display: flex;flex-wrap: wrap;">
<span>{{props.row.Name}}</span>
<i class="iconfont icon-xiugai" style="font-size: 13px;color: #3FC4FF;margin-left: 5px;"
@click="getParent(props.row,1)"></i>
</div>
</q-td>
</template>
<template v-slot:body-cell-ChildList="props">
<q-td :props="props">
<div style="display: flex;flex-wrap: wrap;max-width: 1200px;">
<div v-for="(x,y) in props.row.ChildList" :key='y' style="margin: 5px;">
<q-btn-group >
<q-btn-dropdown auto-close rounded :label="x.Name" split>
<!-- dropdown content goes here -->
<q-list padding style="width: 100px;display: flex;align-items: center;background-color: #3FC4FF;justify-content: center;">
<!-- <q-btn flat style="color: #3FC4FF" icon="edit" @click="getParent(x,2)" size="xs" />
<q-btn flat style="color: #FF0080" icon="delete" @click="goDetailed(x)" size="xs"/> -->
<q-btn flat style="color: white" icon="edit" @click="getParent(x,2)" size="xs" />
<q-btn flat style="color: white" icon="delete" @click="goDetailed(x)" size="xs"/>
</q-list>
</q-btn-dropdown>
</q-btn-group>
</div>
<q-btn flat size="sm" icon="add" style="font-weight:400;color: #3FC4FF;margin-top: 10px;"
label="添加标签" @click="getParent(props.row,3)" />
</div>
</q-td>
</template>
<template v-slot:bottom>
<!-- <q-pagination class="full-width justify-end" v-model="msg.PageIndex" color="primary"
:max="msg.PageCount" :input="true" @input="changePage" /> -->
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<q-btn flat size="xs" icon="delete" color="negative" class="q-mr-xs" label="删除"
@click="goDetailed(props.row)" />
</q-td>
</template>
</q-table>
</div>
<q-dialog v-model="isShow" persistent>
<q-card style="width: 600px; max-width: 80vw;">
<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="margin-top: 15px;padding: 20px;">
<q-input filled clearable standout="bg-primary text-white" v-model="addMsg.Name" label="标签组名称"
:rules="[val => !!val || '请输入分组名称']" ref="Name" />
<q-input filled clearable standout="bg-primary text-white" v-model="addMsg.Sort" label="标签组排序"
:rules="[val => !!val || '请输入分组排序']" ref="Sort" />
<div style="color: #787878;">*注:标签组/标签,排序值越大,排序越靠前!</div>
<div style="width: 100%;" v-if="addMsg.ChildList && addMsg.ChildList.length>0">
<div class="col row wrap q-mr-lg q-col-gutter-md" v-for="(x,y) in addMsg.ChildList" :key='y'
style="margin-top: 0px;">
<div class="col-7">
<q-input filled clearable standout="bg-primary text-white" v-model="x.Name" label="输入标签名称"
maxlength="20" />
</div>
<div class="col-3">
<q-input filled standout="bg-primary text-white" v-model="x.Sort" label="输入排序" maxlength="20"
type="number" />
</div>
<div class="col-2">
<q-btn flat icon="delete" color="negative" class="q-mr-xs" label=""
@click="addMsg.ChildList.splice(y,1)" />
</div>
</div>
</div>
<q-btn flat size="sm" icon="add" style="font-weight:400;color: #3FC4FF;margin-top: 10px;"
label="添加标签" @click="addbiaoqian()" />
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn class="q-mr-md" label="取消" @click="isShow = false" />
<q-btn color="accent" class="q-mr-md" label="确定" @click="submit()" :loading="btnloading"/>
</q-card-actions>
</q-card>
</q-dialog>
<!-- 修改标签组名称 -->
<q-dialog v-model="isParent" persistent>
<q-card style="width: 600px; max-width: 80vw;">
<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="margin-top: 15px;padding: 20px;" >
<q-input filled clearable standout="bg-primary text-white" v-model="addMsg.Name" label="标签组名称"
:rules="[val => !!val || '请输入分组名称']" ref="eName" />
<q-input filled clearable standout="bg-primary text-white" v-model="addMsg.Sort" label="标签组排序"
:rules="[val => !!val || '请输入分组排序']" ref="eSort" />
<div style="color: #787878;">*注:标签组/标签,排序值越大,排序越靠前!</div>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn class="q-mr-md" label="取消" @click="isParent = false" />
<q-btn color="accent" class="q-mr-md" label="确定" @click="submitParent()" :loading="btnloading"/>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script>
import {
getWeChatLableList,
setWeChatLable,
delWeChatLable
} from '../../api/system/wechat';
const addobj = {
Id: 0,
ParentId: 0,
Name: '',
Sort: 1,
ChildList: [{Name: '',Sort: 0, }],
}
export default {
meta: {
title: "客户标签"
},
data() {
return {
msg: {
rowsPerPage: 999999
},
currentUrl: "",
dataList: [],
keyWords: '',
isShow: false,
isParent: false,
loading: true,
btnloading: false,
columns: [{
name: 'Sort',
field: 'Sort',
label: '排序',
align: 'left'
},
{
name: 'Name',
field: 'Name',
label: '标签组名称',
align: 'left',
},
{
name: 'ChildList',
field: 'ChildList',
label: '标签',
align: 'left',
},
{
name: 'optioned',
label: '操作',
field: 'DeptId'
}
],
addMsg: Object.assign({}, addobj),
edittype:1,
}
},
mounted() {
this.getList()
},
methods: {
addbiaoqian() {//添加标签
let obj = {
Name: '',
Sort: 1,
}
this.addMsg.ChildList.push(obj)
},
goDetailed(item) {
let delMsg = {
LableId: item.Id,
};
this.$q.dialog({
title: '提示信息',
message: '是否确定删除?',
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
delWeChatLable(delMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '删除成功!',
position: 'top'
})
this.getList();
}
})
}).onCancel(() => {
});
},
//刷新页面
refreshPage() {
this.getList();
},
//获取课程系列分页列表
getList() {
this.loading = true;
getWeChatLableList({}).then(res => {
this.loading = false;
this.dataList = res.Data;
})
},
//新增修改课程系列
EditCategory() {
this.addMsg = Object.assign({}, addobj)
this.addMsg.ChildList=[{Name: '',Sort: 0, }]
this.isShow = true;
},
isChildList(){
let isName = false;
let issort = false;
if (this.addMsg.ChildList.length > 0) {
this.addMsg.ChildList.map(x => {
console.log(x)
if (x.Name == '') {
isName = true;
return
}
if (x.Sort == '') {
issort = true;
return
}
})
}
if (isName == true) {
this.$q.notify({
type: 'negative',
message: `请填写标签名称`,
position: 'top'
})
return
}
if (issort == true) {
this.$q.notify({
type: 'negative',
message: `请填写标签排序`,
position: 'top'
})
return
}
},
submit() {
this.$refs.Name.validate();
this.$refs.Sort.validate();
this.isChildList()
if (!this.$refs.Name.hasError && !this.$refs.Sort.hasError) {
this.setlable(this.addMsg)
}
},
submitParent(){
this.$refs.eName.validate();
this.$refs.eSort.validate();
if (!this.$refs.eName.hasError && !this.$refs.eSort.hasError) {
let msg
if(this.edittype ==1){
msg ={
Id:this.addMsg.Id,
Name:this.addMsg.Name,
Sort:this.addMsg.Sort,
}
}else {
msg ={
Name:this.addMsg.Name,
Sort:this.addMsg.Sort,
Id:this.addMsg.Id,
ParentId:this.addMsg.ParentId,
}
}
this.setlable(msg)
}
},
setlable(msg) {
this.btnloading = true
setWeChatLable(msg).then(res => {
this.btnloading = false
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.getList()
this.addMsg = Object.assign({}, addobj)
this.isShow = false;
this.isParent = false;
}
})
},
getParent(row,type) {
if(type==1){
this.addMsg = JSON.parse(JSON.stringify(row))
}else if(type==2){
this.addMsg={
ParentId:row.ParentId,
Name:row.Name,
Id:row.Id,
Sort:row.Sort,
}
}else{
this.addMsg={
ParentId:row.Id,
Name:'',
Id:0,
Sort:'0',
}
}
this.isParent = true;
this.edittype=type
},
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
......@@ -29,7 +29,7 @@
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.PageIndex" color="primary"
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary"
:max="msg.PageCount" :input="true" @input="changePage" />
</template>
</q-table>
......@@ -73,8 +73,8 @@
data() {
return {
msg: {
PageIndex: 1,
PageSize: 10,
pageIndex: 1,
pageSize: 15,
rowsPerPage: 15,
Name: "", //系列名称
},
......@@ -129,11 +129,11 @@
methods: {
//重新查询
resetSearch() {
this.msg.PageIndex = 1;
this.msg.pageIndex = 1;
this.getcategorypage();
},
changePage(val) {
this.msg.PageIndex = val;
this.msg.pageIndex = val;
this.getcategorypage()
},
//删除系列
......
......@@ -1165,6 +1165,18 @@ const routes = [{
component: () =>
import("pages/enterprise/groupingManage")
},
{
path: "/enterprise/channelgroupList", //企微 渠道分组
component: () =>
import("pages/enterprise/channelgroupList")
},
{
path: "/enterprise/customerLabel", //企微 客户标签
component: () =>
import("pages/enterprise/customerLabel")
},
],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment