Files
dvcp_v2_webapp/project/xbot/AppSeatManagement/AppSeatManagement.vue

225 lines
6.2 KiB
Vue
Raw Normal View History

2023-08-01 16:39:50 +08:00
<template>
<section class="AppSeatManagement">
<ai-list>
<template slot="title">
<ai-title title="席位管理" isShowBottomBorder></ai-title>
</template>
<template #content>
<ai-search-bar>
<template #left>
2023-08-14 10:43:09 +08:00
<el-select v-model="configInfo.id" filterable placeholder="请选择机位" size="small" @change="configChange">
<el-option
v-for="item in configList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<span class="tips">当前机位1有效期为{{configInfo.validity}}&nbsp;&nbsp;&nbsp;&nbsp;ip地址为{{configInfo.xbotIp}}</span>
2023-08-01 16:39:50 +08:00
</template>
<template #right>
2023-08-17 11:36:33 +08:00
<el-button size="small" :type="configInfo.status != 1 ? 'info' : 'primary'" @click="openWechat()" :disabled="configInfo.status != 1">{{configInfo.status != 1 ? '已启动' : '启动'}}</el-button>
2023-08-01 16:39:50 +08:00
</template>
</ai-search-bar>
2023-08-14 10:43:09 +08:00
<ai-table :tableData="tableData" :total="total" :current.sync="search.current" :size.sync="search.size"
@getList="getTableData()" :col-configs="colConfigs">
<el-table-column slot="groupCount" label="监控群聊" align="center">
2023-08-01 16:39:50 +08:00
<template slot-scope="{ row }">
2023-08-14 10:43:09 +08:00
<div @click="showDialog(row)" style="cursor: pointer;color:#26f">{{row.groupCount}}</div>
2023-08-01 16:39:50 +08:00
</template>
</el-table-column>
</ai-table>
</template>
</ai-list>
<ai-dialog
title="监控群聊"
:visible.sync="dialog"
:destroyOnClose="true"
width="720px"
2023-08-17 15:23:57 +08:00
:customFooter="true">
2023-08-14 17:52:23 +08:00
<ai-table :tableData="tableDataGroup" :isShowPagination="false"
2023-08-14 10:43:09 +08:00
@getList="getTableDataGroup()" :col-configs="colConfigsGroup">
2023-08-14 11:04:45 +08:00
<el-table-column slot="avatar" label="群聊头像" align="left">
<template slot-scope="{ row }">
<img :src="row.avatar" alt="" class="group-avatar">
</template>
</el-table-column>
2023-08-14 10:43:09 +08:00
</ai-table>
2023-08-17 15:23:57 +08:00
<div class="dialog-footer" slot="footer">
<el-button @click="dialog=false">关闭</el-button>
</div>
2023-08-01 16:39:50 +08:00
</ai-dialog>
</section>
</template>
<script>
import { mapState } from "vuex";
export default {
name: "AppSeatManagement",
label: '席位管理',
props: {
instance: Function,
dict: Object,
permissions: Function,
menuName:String
},
data() {
return {
search: {
current: 1,
size: 10,
},
tableData: [],
total: 0,
dialog: false,
2023-08-14 10:43:09 +08:00
configList: [],
configId: '',
configInfo: {id: ''},
groupInfo: {},
searchGroup: {
current: 1,
size: 10,
},
tableDataGroup: [],
totalGroup: 0,
2023-08-01 16:39:50 +08:00
}
},
created() {
2023-08-14 11:04:45 +08:00
this.dict.load('yesOrNo').then(() => {
this.getConfigList()
})
2023-08-01 16:39:50 +08:00
},
computed: {
...mapState(['user']),
colConfigs() {
return [
2023-08-14 10:43:09 +08:00
{ slot: "loginUserId", label: '用户id'},
{ prop: "loginUserName", label: '姓名', align: "left"},
{ prop: "phone", label: '手机号'},
{ prop: "girdNames", label: '管辖区域'},
{ slot: "groupCount", label: '监控群聊'},
// { prop: "status", label: '状态'},
2023-08-01 16:39:50 +08:00
]
},
2023-08-14 10:43:09 +08:00
colConfigsGroup() {
return [
2023-08-14 11:04:45 +08:00
{ slot: "avatar", label: '群聊头像'},
{ prop: "nickname", label: '群聊名称', align: 'center'},
{ prop: "is_manager", label: '是否管理员', dict: 'yesOrNo', align: 'center'},
{ prop: "num", label: '群聊成员(人数)', align: 'center'},
2023-08-14 10:43:09 +08:00
// { prop: "phone", label: '群主'},
]
2023-08-01 16:39:50 +08:00
},
},
methods: {
2023-08-14 10:43:09 +08:00
getConfigList() {
this.instance.post(`/app/appxbotconfig/list?size=1000`).then(res => {
if(res?.data) {
res.data.records.map((item) => {
item.label = item.xbotName
item.value = item.id
})
this.configList = res.data.records
this.configInfo = this.configList[0]
this.getTableData()
}
})
},
configChange(e) {
this.configInfo = this.configList.filter(item => item.id == e)[0]
this.search.current = 1
this.getTableData()
},
openWechat() {
this.instance.post(`/app/appxbotconfig/openWechat?id=${this.configInfo.id}`).then(res => {
if(res.code === 0) {
2023-08-17 11:36:33 +08:00
this.configInfo.status = 0
2023-08-14 10:43:09 +08:00
this.$message.success('启动成功!')
}
})
},
2023-08-01 16:39:50 +08:00
getTableData() {
2023-08-14 10:43:09 +08:00
this.instance.post(`/app/xbotCallback/list`,null,{
2023-08-01 16:39:50 +08:00
params: {
...this.search,
2023-08-14 10:43:09 +08:00
xbotId: this.configInfo.id
2023-08-01 16:39:50 +08:00
}
}).then(res => {
if(res?.data) {
this.tableData = res.data.records
this.total = res.data.total
}
})
},
showDialog(row) {
this.dialog = true
2023-08-14 10:43:09 +08:00
this.groupInfo = row
this.getTableDataGroup()
},
getTableDataGroup() {
this.instance.post(`/app/xbotCallback/groupList`,null,{
params: {
2023-08-14 17:52:23 +08:00
// ...this.searchGroup,
current: 1,
2023-08-14 10:43:09 +08:00
managerWxid: this.groupInfo.loginUserId
}
}).then(res => {
if(res?.data) {
2023-08-14 11:04:45 +08:00
this.tableDataGroup = JSON.parse(res.data)
this.tableDataGroup.map((item) => {
item.num = item.member_list.length
})
2023-08-14 17:52:23 +08:00
// this.totalGroup = res.data.total
2023-08-14 10:43:09 +08:00
}
})
2023-08-01 16:39:50 +08:00
},
},
}
</script>
<style lang="scss" scoped>
.AppSeatManagement {
height: 100%;
.time-select {
padding: 0 16px;
height: 32px;
line-height: 32px;
border: 1px solid #d0d4dc;
border-radius: 4px;
display: flex;
justify-content: space-between;
cursor: pointer;
.el-icon-arrow-down {
line-height: 32px;
}
}
:deep .is-error {
.time-select {
border: 1px solid #f46!important;
}
}
.tips {
display: inline-block;
color: #999;
font-size: 14px;
margin-left: 16px;
}
2023-08-14 11:04:45 +08:00
.group-avatar {
width: 50px;
height: 50px;
border-radius: 50%;
}
2023-08-17 11:36:33 +08:00
:deep .ai-dialog__content--wrapper {
// height: 1000px;
// overflow-y: scroll;
2023-08-14 17:52:23 +08:00
.ai-table {
2023-08-17 11:36:33 +08:00
// height: 1000px;
2023-08-14 17:52:23 +08:00
}
}
2023-08-01 16:39:50 +08:00
}
</style>