Files
crmeb-mp/pages/work/groupInfo/index.vue
karlcarlo a5c5d753b6 feat: 添加静态资源文件及基础组件
- 新增大量图片资源,包括图标、背景图、海报等,用于页面展示
- 添加字体文件及样式配置,支持自定义字体
- 引入 uni-ui 组件库,包括图标、弹窗、日期选择器等常用组件
- 添加网络状态监听、加密工具等基础工具函数
- 配置 Vuex 状态管理,包括购物车数量、热门搜索词等
- 增加页面组件,如用户协议、分销信息、提现状态等
- 配置项目构建和忽略文件,优化开发体验
2026-02-26 17:59:51 +08:00

395 lines
9.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="group_info">
<!-- #ifdef H5 -->
<view class="top_bg"></view>
<view class="header_card acea-row row-middle">
<view class="pic">
<text class="iconfont icon-qunliao"></text>
</view>
<view class="name">
<view class="group_name">{{chatInfo.name}}</view>
<view class="desc">创建时间:{{chatInfo.group_create_time}}</view>
</view>
</view>
<view class="static acea-row row-around row-middle">
<view class="item">
<view class="num">{{chatInfo.member_num}}</view>
<view class="title">当前群成员</view>
</view>
<view class="item v_line">
<view class="num">{{chatInfo.todaySum}}</view>
<view class="title">今日入群</view>
</view>
<view class="item v_line">
<view class="num">{{chatInfo.retreat_group_num}}</view>
<view class="title">累计退群</view>
</view>
</view>
<view class="list">
<view class="search">
<input type="text" v-model="name"
class="search" placeholder="点击搜索客户名称"
placeholder-class="pla_name" @blur="search()">
</view>
<view class="item" v-for="(item,index) in userList" :key="index" @click="toInfo(item)">
<view class="item-info acea-row row-between row-top" >
<view class="pictrue">
<image v-if="item.type == 1 && item.member" :src="item.member.avatar"></image>
<image v-if="item.type == 2 && item.client" :src="item.client.avatar"></image>
</view>
<view class="conten">
<view class="name line1" v-if="item.type == 1 && item.member">{{item.member.name}}
<text class="iconfont" :class="item.member.gender == 1 ? 'icon-xingbie-nan' : 'icon-xingbie-nv'"></text>
</view>
<view class="name line1" v-if="item.type == 2 && item.client">{{item.client.name}}
<text class="iconfont" :class="item.client.gender == 1 ? 'icon-xingbie-nan' : 'icon-xingbie-nv'"></text>
</view>
<text class="label" v-if="item.type == 1">{{item.userid == chatInfo.owner ? "群主" : "成员"}}</text>
<text class="label" v-if="item.type == 2">客户</text>
<text class="label_qita">其他所在群{{item.group_chat_num}}个</text>
</view>
<view class="time">{{item.join_time}}</view>
</view>
<view class="desc line1" v-if="item.tags && item.tags.length">
标签:<text v-for="(item1,index1) in item.tags" :key="index1">{{item1}},</text>
</view>
<view class="desc line1" v-else>
标签:暂无
</view>
</view>
<Loading :loaded="loaded" :loading="loading"></Loading>
</view>
<!-- #endif -->
</view>
</template>
<script>
// #ifdef H5
import { initWxConfig,initAgentConfig } from "@/libs/work.js";
import {getWorkGroupInfo,getWorkGroupMember} from "@/api/work.js"
import Loading from '@/components/Loading/index.vue';
// import {wx} from "@/utils/agent.js"
export default{
data() {
return {
// chat_id:"wrPuqMEwAARnzYsua0WJgATVYu4b3iUg",
chat_id:"",
chatInfo:{},
loaded: false,
loading: false, //是否加载中
loadend: false, //是否加载完毕
loadTitle: '加载更多', //提示语
userList: [], //数组
page: 1,
limit: 20,
name:"",
}
},
components:{Loading},
onLoad(e) {
if(e.back){
this.chat_id = this.$Cache.get('chatId');
if(this.$Cache.get('chatId')){
this.getInfo();
}else{
uni.navigateBack();
return this.$util.Tips({
title: "缺少参数"
});
}
}else{
initWxConfig().then((jWeixin) => {
// initAgentConfig().then(res=>{
this.getChatID();
// })
}).catch((err) => {
return that.$util.Tips({
title: err
});
});
}
// this.getInfo();
},
methods:{
getChatID(){
if (/(iPhone|iPad|iPod|iOS|macintosh|mac os x)/i.test(navigator.userAgent)){
wx.invoke('getContext', {}, (res)=>{
if(res.err_msg == "getContext:ok"){
let entry = res.entry ;
//返回进入H5页面的入口类型,
//目前有normal、contact_profile、single_chat_tools、group_chat_tools、chat_attachment
wx.invoke('getCurExternalChat', {entry}, (response)=>{
if(response.err_msg == "getCurExternalChat:ok"){
this.chat_id = response.chatId;
this.getInfo();
}
});
}
});
}else{
jWeixin.invoke('getContext', {}, (res)=>{
if(res.err_msg == "getContext:ok"){
let entry = res.entry ;
//返回进入H5页面的入口类型,
//目前有normal、contact_profile、single_chat_tools、group_chat_tools、chat_attachment
jWeixin.invoke('getCurExternalChat', {entry}, (response)=>{
if(response.err_msg == "getCurExternalChat:ok"){
this.chat_id = response.chatId;
this.getInfo();
}
});
}
});
}
},
getInfo(){
getWorkGroupInfo({chat_id:this.chat_id}).then(res=>{
this.chatInfo = res.data;
this.getList();
}).catch(err=>{
return this.$util.Tips({
title: err
});
})
},
getList(){
let that = this;
if (that.loadend) return;
if (that.loading) return;
that.loading = true;
that.loadTitle = '加载更多';
getWorkGroupMember(that.chatInfo.id,{
page:this.page,
limit:this.limit,
name:this.name
}).then(res=>{
let list = res.data.list || [];
let loadend = list.length < that.limit;
that.userList = that.$util.SplitArray(list, that.userList);
that.$set(that, 'userList', that.userList);
that.loadend = loadend;
that.loading = false;
that.loadTitle = loadend ? '没有更多内容啦~' : '加载更多';
that.page = that.page + 1;
}).catch(err=>{
return that.$util.Tips({
title: err
});
})
},
search(){
if(this.loading) return
this.loadend = false;
this.page = 1;
this.$set(this, 'userList', []);
this.getList();
},
toInfo(item){
if(item.type == 2){
this.$Cache.set('chatId',this.chat_id);
uni.navigateTo({
url:"/pages/work/userInfo/index?userid=" + item.userid
})
}
}
},
onReachBottom: function() {
this.getList();
}
}
// #endif
</script>
<style lang="scss">
/* #ifdef H5 */
.group_info{
.top_bg{
width: 750rpx;
height: 150rpx;
background: #1890FF;
}
.header_card{
width: 710rpx;
height: 168rpx;
margin: -126rpx auto 0;
background: #FFFFFF;
border-radius: 12rpx;
padding: 28rpx 24rpx;
.pic{
width: 112rpx;
height: 112rpx;
border-radius: 50%;
background: #E1F1FF;
text-align: center;
line-height: 112rpx;
.iconfont{
font-size: 50rpx;
color: #1890FF;
}
}
.name{
margin-left:20rpx;
.group_name{
height: 44rpx;
font-size: 32rpx;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
line-height: 44rpx;
}
.desc{
height: 32rpx;
font-size: 22rpx;
font-weight: 400;
color: rgba(102, 102, 102, 0.85);
line-height: 32rpx;
margin-top: 6rpx;
}
}
}
.static{
width: 710rpx;
height: 172rpx;
background: #FFFFFF;
border-radius: 12rpx;
margin: 20rpx auto 0;
.item{
text-align: center;
width: 33.3%;
.num{
height: 56rpx;
font-size: 40rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
line-height: 56rpx;
}
.title{
height: 32rpx;
font-size: 22rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(102, 102, 102, 0.85);
line-height: 32rpx;
margin-top: 12rpx;
}
}
.v_line{
position: relative;
&::before{
content: '';
position: absolute;
left: 0;
top:23rpx;
width: 1px;
height: 80rpx;
background-color: #eee;
}
}
}
.list{
width: 710rpx;
margin: 20rpx auto 0;
background: #FFFFFF;
border-radius: 12rpx;
padding: 30rpx 24rpx;
.search{
width: 642rpx;
height: 64rpx;
margin:0 auto 0;
line-height: 64rpx;
background: #F5F6F9;
border-radius: 32rpx;
padding-left:20rpx ;
font-size: 28rpx;
}
.pla_name{
font-size: 28rpx;
text-align: center;
font-weight: 400;
color: #CCCCCC;
}
.item {
margin-top: 32rpx;
padding-bottom: 28rpx;
border-bottom: 1px solid #eee;
}
.item-info .pictrue {
width: 100rpx;
height: 100rpx;
}
.item-info .pictrue image {
width: 100%;
height: 100%;
border-radius: 8rpx;
}
.conten{
width: 296rpx;
margin-left:22rpx;
.name{
height: 42rpx;
font-size: 30rpx;
font-weight: 600;
color: #000;
line-height: 42rpx;
}
.iconfont{
font-size: 26rpx;
font-weight: 400;
display: inline-block;
margin-left: 8rpx;
}
.icon-xingbie-nan{
color: #1890FF;
}
.icon-xingbie-nv{
color: #E369A2;
}
.label{
display: inline-block;
margin:10rpx 12rpx 0 0;
height: 38rpx;
padding: 0 12rpx 0;
background: rgba(24, 144, 255, 0.1);
border-radius: 4rpx;
border: 1px solid #1890FF;
// line-height: 44rpx;
text-align: center;
font-size: 24rpx;
color: #1890FF;
}
.label_qita{
display: inline-block;
margin:10rpx 12rpx 0 0;
height: 38rpx;
padding: 0 12rpx 0;
border-radius: 4rpx;
border: 1rpx solid #ccc;
// line-height: 44rpx;
text-align: center;
font-size: 24rpx;
color: #999;
}
}
.time{
font-size: 24rpx;
}
.desc{
width: 460rpx;
height: 34rpx;
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.85);
line-height: 34rpx;
margin-top: 24rpx;
}
}
}
/* #endif */
</style>