Commit b8e4016cc46af6a93ba9cb71263494d3bdaf4780
1 parent
27df54ec86
Exists in
master
and in
2 other branches
群聊
Showing 11 changed files with 186 additions and 65 deletions
- littleApp_child/app.js
- littleApp_child/pages/chatroom/chatroom.js
- littleApp_child/pages/chatroom/chatroom.wxml
- littleApp_child/pages/doctorLists/doctorLists.js
- littleApp_child/pages/doctorLists/doctorLists.wxml
- littleApp_child/pages/doctorLists/doctorLists.wxss
- littleApp_child/pages/home/home.js
- littleApp_child/pages/home/home.wxml
- littleApp_child/pages/home/home.wxss
- littleApp_child/source/kefu.png
- littleApp_child/utils/apiFile.js
littleApp_child/app.js
View file @
b8e4016
... | ... | @@ -116,7 +116,7 @@ |
116 | 116 | from: message.from, |
117 | 117 | to: message.to |
118 | 118 | }, |
119 | - username: '', | |
119 | + username: message.from, | |
120 | 120 | yourname: message.from, |
121 | 121 | msg: { |
122 | 122 | type: 'txt', |
... | ... | @@ -134,6 +134,7 @@ |
134 | 134 | data: that.globalData.unrederMsg[messageFrom + myName], |
135 | 135 | success: function () { |
136 | 136 | console.log('setStorage success') |
137 | + disp.fire("em.xmpp.unreadspot", message); | |
137 | 138 | } |
138 | 139 | }) |
139 | 140 | console.log('消息打印',messageFrom + myName,that.globalData.unrederMsg[messageFrom + myName]) |
... | ... | @@ -167,7 +168,7 @@ |
167 | 168 | from: message.from, |
168 | 169 | to: message.to |
169 | 170 | }, |
170 | - username: '', | |
171 | + username: message.from, | |
171 | 172 | yourname: message.from, |
172 | 173 | msg: { |
173 | 174 | type: 'img', |
... | ... | @@ -186,6 +187,7 @@ |
186 | 187 | data: that.globalData.unrederMsg[messageFrom + myName], |
187 | 188 | success: function () { |
188 | 189 | console.log('setStorage success') |
190 | + disp.fire("em.xmpp.unreadspot", message); | |
189 | 191 | } |
190 | 192 | }) |
191 | 193 | } |
... | ... | @@ -210,7 +212,7 @@ |
210 | 212 | from: message.from, |
211 | 213 | to: message.to |
212 | 214 | }, |
213 | - username: '', | |
215 | + username: message.from, | |
214 | 216 | yourname: message.from, |
215 | 217 | msg: { |
216 | 218 | type: 'audio', |
... | ... | @@ -231,6 +233,7 @@ |
231 | 233 | data: that.globalData.unrederMsg[messageFrom+ myName], |
232 | 234 | success: function () { |
233 | 235 | console.log('setStorage success') |
236 | + disp.fire("em.xmpp.unreadspot", message); | |
234 | 237 | } |
235 | 238 | }) |
236 | 239 | } |
littleApp_child/pages/chatroom/chatroom.js
View file @
b8e4016
... | ... | @@ -45,6 +45,7 @@ |
45 | 45 | kfName:'', |
46 | 46 | memberHxName:'', |
47 | 47 | memberName:'', |
48 | + unTotleReadCount:0, | |
48 | 49 | chatMsg: [], |
49 | 50 | username:'', |
50 | 51 | bubbles:false, |
... | ... | @@ -62,7 +63,7 @@ |
62 | 63 | */ |
63 | 64 | onLoad: function (options) { |
64 | 65 | let self=this; |
65 | - console.log(options) | |
66 | + var options=JSON.parse(options.username) | |
66 | 67 | networkUtil._post(api.addBabyChatroom,{doctorId:options.doctorId},function(res){ |
67 | 68 | console.log(res) |
68 | 69 | self.setData({ |
69 | 70 | |
... | ... | @@ -74,14 +75,14 @@ |
74 | 75 | kfName:res.data.data.kfName, |
75 | 76 | memberHxName:res.data.data.memberHxName, |
76 | 77 | memberName:res.data.data.memberName, |
77 | - username:'150346790928385' | |
78 | + username:res.data.data.chatroomId | |
78 | 79 | }) |
79 | 80 | |
80 | 81 | self.initChat() |
81 | 82 | },function(res){ |
82 | 83 | |
83 | 84 | },'application/json') |
84 | - | |
85 | + self.initChat() | |
85 | 86 | disp.on('em.xmpp.error.sendMsgErr', function(err) { |
86 | 87 | curMsgMid = err.data.mid |
87 | 88 | isFail = true |
... | ... | @@ -431,7 +432,7 @@ |
431 | 432 | from: msg.from, |
432 | 433 | to: msg.to |
433 | 434 | }, |
434 | - username: '', | |
435 | + username: msg.from, | |
435 | 436 | yourname: msg.from, |
436 | 437 | msg: { |
437 | 438 | type: type, |
... | ... | @@ -551,7 +552,7 @@ |
551 | 552 | }, |
552 | 553 | onRender(){ |
553 | 554 | wx.pageScrollTo({ |
554 | - scrollTop: 5000, | |
555 | + scrollTop: 50000, | |
555 | 556 | duration: 300, |
556 | 557 | success: function(){console.log('滚动成功')}, |
557 | 558 | fail: function(){console.log('滚动失败')} |
... | ... | @@ -879,6 +880,8 @@ |
879 | 880 | var id = WebIM.conn.getUniqueId(); |
880 | 881 | var msg = new WebIM.message(msgType.AUDIO, id); |
881 | 882 | var dataObj = JSON.parse(res.data); |
883 | + msg.from = myName; | |
884 | + | |
882 | 885 | // 接收消息对象 |
883 | 886 | msg.set({ |
884 | 887 | apiUrl: WebIM.config.apiURL, |
... | ... | @@ -913,7 +916,7 @@ |
913 | 916 | from: msg.from, |
914 | 917 | to: msg.to |
915 | 918 | }, |
916 | - username: '', | |
919 | + username: msg.from, | |
917 | 920 | yourname: msg.from, |
918 | 921 | msg: { |
919 | 922 | type: 'audio', |
littleApp_child/pages/chatroom/chatroom.wxml
View file @
b8e4016
... | ... | @@ -14,8 +14,9 @@ |
14 | 14 | <view class="user"> |
15 | 15 | <text>{{ item.username===doctorHxName?doctorName:item.username===kfHxName?kfName:item.username===memberHxName?memberName:'' }}</text> |
16 | 16 | </view> |
17 | - <image wx:if="{{item.style == 'self'}}" class="avatar" src="https://img1.healthbaby.com.cn/FpMYI-aoXUyTONfNN5IGw3Jr-n_z?imageView2/0/w/200"/> | |
18 | - <image wx:if="{{item.style == ''}}" class="avatar" src="../../source/default_doctor_icon.png"/> | |
17 | + <image wx:if="{{item.username==memberHxName}}" class="avatar" src="https://img1.healthbaby.com.cn/FpMYI-aoXUyTONfNN5IGw3Jr-n_z?imageView2/0/w/200"/> | |
18 | + <image wx:if="{{item.username==doctorHxName}}" class="avatar" src="../../source/default_doctor_icon.png"/> | |
19 | + <image wx:if="{{item.username==kfHxName}}" class="avatar" src="../../source/kefu.png"/> | |
19 | 20 | <view class="msg"> |
20 | 21 | <image |
21 | 22 | class="err {{(item.style == 'self' && item.isFail) ? 'show' : 'hide'}}" |
littleApp_child/pages/doctorLists/doctorLists.js
View file @
b8e4016
... | ... | @@ -3,6 +3,10 @@ |
3 | 3 | var networkUtil = require('../../utils/network_util.js') |
4 | 4 | var api = require('../../utils/apiFile.js') |
5 | 5 | |
6 | +//即时通讯工具类 | |
7 | +let disp = require("../../utils/broadcast"); | |
8 | +var WebIM = require("../../utils/WebIM")["default"]; | |
9 | + | |
6 | 10 | Page({ |
7 | 11 | |
8 | 12 | /** |
9 | 13 | |
... | ... | @@ -10,12 +14,22 @@ |
10 | 14 | */ |
11 | 15 | data: { |
12 | 16 | list: [], |
17 | + chatList:[], | |
13 | 18 | hospitalName: "", |
14 | 19 | hospitalId: "", |
15 | 20 | hostitalprice: 0, |
16 | 21 | totalPrize: 0, //总价 |
17 | 22 | ids: '', //服务id |
18 | 23 | doctorIds: '', //选中的医生id |
24 | + memberId:'', | |
25 | + serviceId:'', | |
26 | + doctorHxName:'', | |
27 | + doctorName:'', | |
28 | + kfHxName:'', | |
29 | + kfName:'', | |
30 | + memberHxName:'', | |
31 | + memberName:'', | |
32 | + username:'', | |
19 | 33 | hospitalList: [], |
20 | 34 | count: 1500, |
21 | 35 | isShowToast: false, |
22 | 36 | |
... | ... | @@ -29,11 +43,12 @@ |
29 | 43 | * 生命周期函数--监听页面加载 |
30 | 44 | */ |
31 | 45 | onLoad: function (options) { |
32 | - console.log(options) | |
46 | + var option=JSON.parse(options.username) | |
47 | + console.log(option) | |
33 | 48 | var that = this; |
34 | 49 | that.setData({ |
35 | - memberId:options.memberId, | |
36 | - serviceId:options.serviceId, | |
50 | + memberId:option.memberId, | |
51 | + serviceId:option.serviceId, | |
37 | 52 | }) |
38 | 53 | networkUtil.showLoading(); |
39 | 54 | networkUtil._get(api.getWxDoctors,{},function(res){ |
40 | 55 | |
... | ... | @@ -49,11 +64,25 @@ |
49 | 64 | that.setData({ |
50 | 65 | hospitalList:hospitals, |
51 | 66 | hospitalName:hospitals[0].name, |
52 | - list:hospitals[0].data | |
67 | + list:that.getChatList(hospitals[0].data) | |
53 | 68 | }) |
54 | 69 | },function(){ |
55 | 70 | |
56 | 71 | }) |
72 | + //监听未读消息数 | |
73 | + disp.on("em.xmpp.unreadspot", function(message){ | |
74 | + that.setData({ | |
75 | + list: that.getChatList(that.data.list), | |
76 | + }); | |
77 | + console.log(that.data.unTotleReadCount) | |
78 | + if(that.data.unTotleReadCount >= 1){ | |
79 | + wx.vibrateLong({ | |
80 | + success:function() { | |
81 | + console.log('震动调取成功') | |
82 | + }, | |
83 | + }) | |
84 | + } | |
85 | + }); | |
57 | 86 | }, |
58 | 87 | |
59 | 88 | /** |
60 | 89 | |
61 | 90 | |
... | ... | @@ -106,37 +135,39 @@ |
106 | 135 | }, |
107 | 136 | chat(e){ |
108 | 137 | var self=this; |
109 | - var doctorId = e.target.dataset.doctorid; | |
138 | + var doctorId = e.currentTarget.dataset.doctorid; | |
110 | 139 | console.log(doctorId) |
111 | 140 | networkUtil._post(api.addBabyChatroom,{doctorId:doctorId},function(res){ |
112 | - console.log(res) | |
113 | - self.setData({ | |
114 | - doctorHxName:res.data.data.doctorHxName, | |
115 | - doctorName:res.data.data.doctorName, | |
116 | - kfHxName:res.data.data.kfHxName, | |
117 | - kfName:res.data.data.kfName, | |
118 | - memberHxName:res.data.data.memberHxName, | |
119 | - memberName:res.data.data.memberName, | |
120 | - username:'150346790928385' | |
121 | - }) | |
141 | + if(res.data.errorcode==0){ | |
142 | + self.data.unTotleReadCount = 0; | |
143 | + console.log(res) | |
144 | + var nameList={ | |
145 | + doctorHxName:res.data.data.doctorHxName, | |
146 | + doctorName:res.data.data.doctorName, | |
147 | + kfHxName:res.data.data.kfHxName, | |
148 | + kfName:res.data.data.kfName, | |
149 | + memberHxName:res.data.data.memberHxName, | |
150 | + memberName:res.data.data.memberName, | |
151 | + username:res.data.data.chatroomId, | |
152 | + doctorId:doctorId | |
153 | + } | |
154 | + console.log(nameList) | |
155 | + | |
156 | + console.log(self.data.unTotleReadCount) | |
157 | + if(self.data.unTotleReadCount >= 1){ | |
158 | + wx.vibrateLong({ | |
159 | + success:function() { | |
160 | + console.log('震动调取成功') | |
161 | + }, | |
162 | + }) | |
163 | + } | |
164 | + wx.redirectTo({ | |
165 | + url: '../chatroom/chatroom?username='+ JSON.stringify(nameList), | |
166 | + }) | |
167 | + } | |
122 | 168 | },function(res){ |
123 | 169 | |
124 | 170 | },'application/json') |
125 | - var nameList={ | |
126 | - memberId:self.memberId, | |
127 | - serviceId:self.serviceId, | |
128 | - doctorHxName:self.doctorHxName, | |
129 | - doctorName:self.doctorName, | |
130 | - kfHxName:self.kfHxName, | |
131 | - kfName:self.kfName, | |
132 | - memberHxName:self.memberHxName, | |
133 | - memberName:self.memberName, | |
134 | - doctorId:self.doctorId | |
135 | - } | |
136 | - console.log(nameList) | |
137 | - wx.navigateTo({ | |
138 | - url: '../chatroom/chatroom?username='+ JSON.stringify(nameList), | |
139 | - }) | |
140 | 171 | }, |
141 | 172 | godoctor: function(e) { |
142 | 173 | var doctorId = e.currentTarget.dataset.doctorid; |
... | ... | @@ -186,7 +217,7 @@ |
186 | 217 | self.setData({ |
187 | 218 | hospitalName: hospitalName, |
188 | 219 | index: e.detail.value, |
189 | - list:doctors | |
220 | + list:self.getChatList(doctors) | |
190 | 221 | }) |
191 | 222 | //self.getDoctorsFromServer() |
192 | 223 | }, |
... | ... | @@ -268,5 +299,28 @@ |
268 | 299 | |
269 | 300 | }) |
270 | 301 | }, |
302 | + | |
303 | + getChatList(data){ | |
304 | + console.log(111) | |
305 | + var member = data || this.data.list; | |
306 | + var myName = wx.getStorageSync("hxName"); | |
307 | + for(let i = 0; i < member.length; i++){ | |
308 | + console.log(member[i].chartroomId,myName) | |
309 | + //let newChatMsgs = wx.getStorageSync('150455922524161' + myName) || []; | |
310 | + //let historyChatMsgs = wx.getStorageSync("rendered_" + '150455922524161' + myName) || []; | |
311 | + let newChatMsgs = wx.getStorageSync(member[i].chartroomId + myName) || []; | |
312 | + let historyChatMsgs = wx.getStorageSync("rendered_" + member[i].chartroomId + myName) || []; | |
313 | + let curChatMsgs = historyChatMsgs.concat(newChatMsgs); | |
314 | + let item = member[i]; | |
315 | + if(curChatMsgs.length){ | |
316 | + item.unReadCount = newChatMsgs.length; | |
317 | + if(item.unReadCount > 99) { | |
318 | + item.unReadCount = "99+"; | |
319 | + } | |
320 | + this.data.unTotleReadCount += item.unReadCount | |
321 | + } | |
322 | + } | |
323 | + return member; | |
324 | + } | |
271 | 325 | }) |
littleApp_child/pages/doctorLists/doctorLists.wxml
View file @
b8e4016
... | ... | @@ -29,14 +29,14 @@ |
29 | 29 | <view class='service_name'>专家咨询</view> |
30 | 30 | </view> |
31 | 31 | <view class='divider'></view> |
32 | - <view class='item' wx:for="{{list}}" bindtap="chat" data-doctorId="{{item.doctorId}}"> | |
32 | + <view class='item' wx:for="{{list}}" bindtap="chat" data-doctorId="{{item.id}}" > | |
33 | 33 | <view class='icon_name_view'> |
34 | 34 | <image class='icon' src="{{item.doctorImage.medium.length>0 ?item.doctorImage.medium:'../../source/default_doctor_icon.png'}}"></image> |
35 | 35 | <view bindtap='godoctor' data-doctorId="{{item.id}}" data-doctor="{{item}}"> |
36 | 36 | <view class='name_text'>{{item.name}}<text class="job_text">{{item.positional}}</text></view> |
37 | 37 | <view class="description_text">专家介绍</view> |
38 | 38 | </view> |
39 | - | |
39 | + <view class="massage_box_txt" wx:if="{{item.unReadCount > 0}}">{{item.unReadCount}}</view> | |
40 | 40 | </view> |
41 | 41 | <view style='height:10px'></view> |
42 | 42 | <view class='divider' hidden='{{index==list[index].item.length}}'></view> |
littleApp_child/pages/doctorLists/doctorLists.wxss
View file @
b8e4016
... | ... | @@ -15,7 +15,19 @@ |
15 | 15 | padding-right: 15px; |
16 | 16 | padding-top: 15px; |
17 | 17 | } |
18 | - | |
18 | +.massage_box_txt{ | |
19 | + float:right; | |
20 | + width: 50rpx; | |
21 | + height: 50rpx; | |
22 | + text-align: center; | |
23 | + border-radius: 50%; | |
24 | + background-color: indianred; | |
25 | + font-size: 15px; | |
26 | + color: #fff; | |
27 | + position: absolute; | |
28 | + right:20px; | |
29 | + top:10px; | |
30 | +} | |
19 | 31 | .top_content_view { |
20 | 32 | background: #fff; |
21 | 33 | border: 1px solid #d8dbd2; |
... | ... | @@ -95,6 +107,7 @@ |
95 | 107 | .icon_name_view { |
96 | 108 | display: flex; |
97 | 109 | padding-left: 15px; |
110 | + position: relative; | |
98 | 111 | } |
99 | 112 | |
100 | 113 | .icon { |
littleApp_child/pages/home/home.js
View file @
b8e4016
... | ... | @@ -13,6 +13,7 @@ |
13 | 13 | |
14 | 14 | //聊天控件 |
15 | 15 | let WebIM = wx.WebIM = require("../../utils/WebIM.js").default; |
16 | +let disp = require("../../utils/broadcast"); | |
16 | 17 | |
17 | 18 | var timeCount = 60; |
18 | 19 | var timer; |
... | ... | @@ -32,6 +33,7 @@ |
32 | 33 | item_small: 0, |
33 | 34 | // 首页类型 1登录 2用户首页 3欢迎页 |
34 | 35 | pageType: 0, |
36 | + unTotleReadCount:0, | |
35 | 37 | time: '0s', |
36 | 38 | list: [], |
37 | 39 | userInfo: '', |
38 | 40 | |
39 | 41 | |
... | ... | @@ -83,10 +85,15 @@ |
83 | 85 | riskDise:false |
84 | 86 | }, |
85 | 87 | /*---------生命周期--------*/ |
86 | - onLoad: function() { | |
88 | + onLoad: function(options) { | |
87 | 89 | this.calculatePageSize() |
90 | + | |
88 | 91 | // 网络监听 |
89 | 92 | this.networkStatusChange() |
93 | + var that = this | |
94 | + disp.on("em.xmpp.unreadspot", function(){ | |
95 | + that.getUnreaderMsgNum() | |
96 | + }) | |
90 | 97 | if (app.globalData.token == null || app.globalData.token == ''||wx.getStorageSync("access_token") == null||!wx.getStorageSync("access_token")) { |
91 | 98 | this.welcomePage() |
92 | 99 | } else { |
... | ... | @@ -115,6 +122,7 @@ |
115 | 122 | if (wx.getStorageSync("access_token") != null&&wx.getStorageSync("access_token")) { |
116 | 123 | console.log(wx.getStorageSync("access_token")) |
117 | 124 | this.connectWebIM() |
125 | + | |
118 | 126 | } |
119 | 127 | if (app.globalData.token.length > 0 && this.data.pageType != 2) { |
120 | 128 | this.getUserInfo() |
... | ... | @@ -126,6 +134,7 @@ |
126 | 134 | if (!app.globalData.token && this.data.pageType != 1) { |
127 | 135 | this.welcomePage() |
128 | 136 | } |
137 | + this.getUnreaderMsgNum() | |
129 | 138 | }, |
130 | 139 | onUnload: function() { |
131 | 140 | // 移除监听 |
... | ... | @@ -805,8 +814,7 @@ |
805 | 814 | }, |
806 | 815 | //专家咨询 |
807 | 816 | consultation(){ |
808 | - console.log(this.data.userData) | |
809 | - if(this.data.userData.disStatus == 0){ | |
817 | + if(this.data.riskGuide){ | |
810 | 818 | var my = wx.getStorageSync('hxName') |
811 | 819 | var nameList = { |
812 | 820 | myName: my, |
813 | 821 | |
... | ... | @@ -818,22 +826,47 @@ |
818 | 826 | wx.navigateTo({ |
819 | 827 | url: '../doctorLists/doctorLists?username='+ JSON.stringify(nameList), |
820 | 828 | }) |
821 | - }else if(this.data.userData.disStatus == 1){ | |
822 | - var my = wx.getStorageSync('hxName') | |
823 | - var serviceId = this.data.userData.disData.serviceId; | |
824 | - var nameList = { | |
825 | - myName: my, | |
826 | - your: this.data.userData.disData.doctorHxName, | |
827 | - serviceId:serviceId, | |
828 | - memberId:this.data.userData.disData.memberId, | |
829 | - doctorId:this.data.userData.disData.doctorId | |
830 | - } | |
831 | - wx.setStorageSync('serviceId',serviceId) | |
832 | - console.log(nameList) | |
833 | - wx.navigateTo({ | |
834 | - url: '../doctorLists/doctorLists?username='+ JSON.stringify(nameList), | |
829 | + }else{ | |
830 | + wx.showModal({ | |
831 | + title: '温馨提示', | |
832 | + content: '您还没有开通该项服务哦', | |
833 | + confirmText: '立即开通', | |
834 | + success: function(res) { | |
835 | + if (res.confirm) { | |
836 | + wx.navigateTo({ | |
837 | + url: '../vipService/vipService', | |
838 | + }) | |
839 | + } | |
840 | + } | |
835 | 841 | }) |
836 | 842 | } |
837 | -}, | |
843 | + }, | |
844 | + // 获取未读总数 | |
845 | + getUnreaderMsgNum(){ | |
846 | + var that = this | |
847 | + var num = 0 | |
848 | + var myName = wx.getStorageSync("hxName"); | |
849 | + WebIM.conn.listRooms({ | |
850 | + success: function(rooms){ | |
851 | + console.log(rooms) | |
852 | + rooms.map((item) => { | |
853 | + wx.getStorage({ | |
854 | + key: item.roomId + myName, | |
855 | + success (res) { | |
856 | + var unreadMas =res.data | |
857 | + if(unreadMas){ | |
858 | + num += unreadMas.length; | |
859 | + } | |
860 | + console.log(num) | |
861 | + that.setData({unTotleReadCount:num}) | |
862 | + } | |
863 | + }) | |
864 | + }) | |
865 | + }, | |
866 | + error: function(){ | |
867 | + | |
868 | + } | |
869 | + }) | |
870 | + } | |
838 | 871 | }) |
littleApp_child/pages/home/home.wxml
View file @
b8e4016
... | ... | @@ -101,6 +101,7 @@ |
101 | 101 | <view class="foundation_item_small_text">眼保健记录</view> |
102 | 102 | </navigator> |
103 | 103 | <navigator class="foundation_item_small" bindtap="consultation"> |
104 | + <view class="unreadCount" wx:if="{{unTotleReadCount>0}}">{{unTotleReadCount}}</view> | |
104 | 105 | <image src="../../source/icon_consult@2x.png" style="{{item_small}}" class="foundation_item_small_image"></image> |
105 | 106 | <view class="foundation_item_small_text">专家咨询</view> |
106 | 107 | </navigator> |
littleApp_child/pages/home/home.wxss
View file @
b8e4016
... | ... | @@ -11,7 +11,19 @@ |
11 | 11 | background: #48C17B; |
12 | 12 | position: relative; |
13 | 13 | } |
14 | - | |
14 | +.unreadCount{ | |
15 | + width: 46rpx; | |
16 | + height: 46rpx; | |
17 | + text-align: center; | |
18 | + border-radius: 50%; | |
19 | + background-color: indianred; | |
20 | + z-index: 10; | |
21 | + font-size: 15px; | |
22 | + color: #fff; | |
23 | + position: absolute; | |
24 | + right:10px; | |
25 | + top:0px; | |
26 | +} | |
15 | 27 | .promptText { |
16 | 28 | background: #f4879b; |
17 | 29 | font: bold; |
... | ... | @@ -203,6 +215,7 @@ |
203 | 215 | flex-direction: column; |
204 | 216 | align-items: center; |
205 | 217 | justify-content: center; |
218 | + position: relative; | |
206 | 219 | } |
207 | 220 | |
208 | 221 | .foundation_item_small_image { |
littleApp_child/source/kefu.png
View file @
b8e4016
11.3 KB