index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. <template>
  2. <view class="page" :style="{height:winHeight +'px',overflow:'hidden'}">
  3. <!-- #ifdef APP-PLUS -->
  4. <view class="topTitle">
  5. <view class="topFont">
  6. 消息{{unread_msg?'('+unread_msg+')':''}}
  7. </view>
  8. <view class="titleLf" @tap="actionMain">
  9. <image src="../../static/theme/default/chat/icon_more_add.png" mode=""></image>
  10. </view>
  11. </view>
  12. <!-- #endif -->
  13. <!-- #ifdef H5 || MP-WEIXIN-->
  14. <view class="topTitle">
  15. <view class="topFont">
  16. 消息{{unread_msg?'('+unread_msg+')':''}}
  17. </view>
  18. <view class="titleLf" @tap="actionMain">
  19. <image src="../../static/theme/default/chat/icon_more_add.png" mode=""></image>
  20. </view>
  21. </view>
  22. <!-- #endif -->
  23. <scroll-diy :height="scrolHeight+'px'" ref="mescrollRef" @init="mescrollInit" @down="downCallback"
  24. :up="{use:false,auto:false}" :down="{auto:false}">
  25. <view class="searchOut">
  26. <uni-search-bar ref="searchBar" placeholder="搜索" bgColor="#F7F7F7" :show="false" @confirm="search"
  27. @search="search">
  28. </uni-search-bar>
  29. </view>
  30. <view class="uni-list" v-if="list.length">
  31. <uni-swipe-action>
  32. <uni-swipe-action-item class="uni-list-cell" v-for="(value,key) of list" :key="key"
  33. :right-options="swipeData(value,key)" :auto-close="false" @click="swipeAction">
  34. <view class="uni-media-list"
  35. @tap="goMessage(value.list_id,key,value.no_reader_num,value.chat_id)">
  36. <view class="uni-media-list-logo">
  37. <image :src="staticPhoto + value.photo_path + '?_=' + imgRan" :lazy-load="true"
  38. style="border-radius: 10px;" :data-index="key" @error="imageError" />
  39. </view>
  40. <view class="red_num">
  41. <uni-badge :text="value.no_reader_num" type="error" />
  42. </view>
  43. <view class="uni-media-list-body" >
  44. <view class="uni-media-list-text-top" >
  45. <text>{{msgHandle(value.show_name+'',12)}}</text>
  46. <text style="float: right;color: #8f8f94;font-size: 23upx;flex-shrink: 0;" >
  47. {{timestampFormat(value.time)}}
  48. </text>
  49. </view>
  50. <view class="uni-media-list-text-bottom uni-ellipsis"
  51. v-if="obj_notice[value.list_id] == 1">
  52. <text style="color: red;">[有人@我]</text>{{value.last_msg+''}}
  53. </view>
  54. <view class="uni-media-list-text-bottom uni-ellipsis" v-else>
  55. {{value.last_msg+''}}
  56. </view>
  57. </view>
  58. </view>
  59. </uni-swipe-action-item>
  60. </uni-swipe-action>
  61. <!-- <view class="uni-list-cell"
  62. v-for="(value,key) of list"
  63. :key="key">
  64. <uni-swipe-action :options="swipeData(value.no_reader_num)"
  65. @click="swipeAction"
  66. @opened="openedAction(key)">
  67. <uni-swipe-action>
  68. <view class="uni-media-list"
  69. @tap="goMessage(value.list_id,key,value.no_reader_num,value.chat_id)">
  70. <view class="uni-media-list-logo">
  71. <image :src="staticPhoto + value.photo_path + '?_=' + imgRan"
  72. :lazy-load="true"
  73. style="border-radius: 10px;"
  74. :data-index="key"
  75. @error="imageError" />
  76. </view>
  77. <view class="red_num">
  78. <uni-badge :text="value.no_reader_num"
  79. type="error" />
  80. </view>
  81. <view class="uni-media-list-body">
  82. <view class="uni-media-list-text-top">
  83. <text>{{msgHandle(value.show_name+'',12)}}</text>
  84. <view style="float: right;color: #8f8f94;font-size: 23upx;">
  85. {{timestampFormat(value.time)}}
  86. </view>
  87. </view>
  88. <view class="uni-media-list-text-bottom uni-ellipsis">{{value.last_msg}}</view>
  89. </view>
  90. </view>
  91. </uni-swipe-action>
  92. </uni-swipe-action>
  93. </view> -->
  94. </view>
  95. <view class="noData" v-if="!list.length" style="
  96. height: 500px;
  97. ">
  98. <image src="../../static/theme/default/chat/defaultpage_nomessages.png" mode=""></image>
  99. <text>暂无聊天消息</text>
  100. </view>
  101. </scroll-diy>
  102. <view :class="['action_main animated faster',(action_menu ? 'bounceInDown' : 'bounceOutUp')]"
  103. v-show="showActionMenu" @tap="actionMain">
  104. <view class="action_base">
  105. <view class="action_item" @tap="goAction(1)">
  106. <view class="uni-media-list-logo action_icon">
  107. <image src="/static/theme/default/chat/1.png" :lazy-load="true" />
  108. </view>
  109. <text class="action_item_text">添加好友</text>
  110. </view>
  111. <view class="action_item" @tap="goAction(0)">
  112. <view class="uni-media-list-logo action_icon">
  113. <image src="/static/theme/default/chat/2.png" :lazy-load="true" />
  114. </view>
  115. <text class="action_item_text">发起群聊</text>
  116. </view>
  117. <view class="action_item" @tap="joinQun(0)">
  118. <view class="uni-media-list-logo action_icon">
  119. <image src="/static/theme/default/chat/5.png" :lazy-load="true" />
  120. </view>
  121. <text class="action_item_text">加入群聊</text>
  122. </view>
  123. <!-- <view class="action_item" @tap="goAction(2)">
  124. <view class="uni-media-list-logo action_icon">
  125. <image src="/static/float/shoucang.png" :lazy-load="true" />
  126. </view>
  127. <text class="action_item_text">我的收藏</text>
  128. </view> -->
  129. <view class="action_item" @tap="goPath('/pages/push/create_group')">
  130. <view class="uni-media-list-logo action_icon">
  131. <image src="/static/theme/default/chat/3.png" :lazy-load="true" />
  132. </view>
  133. <text class="action_item_text">群发助手</text>
  134. </view>
  135. <view class="action_item" @tap="goScanCode">
  136. <view class="uni-media-list-logo action_icon">
  137. <image src="/static/float/saoyisao.png" :lazy-load="true" />
  138. </view>
  139. <text class="action_item_text">扫一扫</text>
  140. </view>
  141. </view>
  142. </view>
  143. </view>
  144. </template>
  145. <script>
  146. import uniIcon from '../../components/uni-icons/uni-icons.vue';
  147. import uniBadge from '../../components/uni-badge/uni-badge.vue';
  148. import uniSwipeAction from '../../components/uni-swipe-action/uni-swipe-action.vue'
  149. import uniSwipeActionItem from '../../components/uni-swipe-action-item/uni-swipe-action-item.vue'
  150. import _get from '../../common/_get';
  151. import _hook from '../../common/_hook';
  152. import _action from '../../common/_action';
  153. import _data from '../../common/_data';
  154. import _page from '../../common/common';
  155. import uniSearchBar from '@/components/mehaotian-search/mehaotian-search.vue';
  156. import scrollDiy from '@/components/mescroll-uni/components/mescroll-diy/xinlang/mescroll-uni.vue';
  157. import {
  158. genTestUserSig
  159. } from '@/debug/GenerateTestUserSig.js';
  160. export default {
  161. components: {
  162. uniIcon,
  163. uniBadge,
  164. uniSwipeAction,
  165. uniSwipeActionItem,
  166. uniSearchBar,
  167. scrollDiy
  168. },
  169. data() {
  170. return {
  171. list: [],
  172. search_list: [],
  173. list_index: '',
  174. action_menu: false,
  175. action_menu_num: 0,
  176. options: [{
  177. text: '取消',
  178. style: {
  179. backgroundColor: '#007aff'
  180. }
  181. }, {
  182. text: '删除',
  183. style: {
  184. backgroundColor: '#dd524d'
  185. }
  186. }],
  187. unread_msg: 0, //未读消息
  188. scrolHeight: 600,
  189. windowBottom: 50,
  190. status_height: 25,
  191. winHeight: 675,
  192. my_data: {},
  193. obj_notice: {}, //todo @提示消息
  194. }
  195. },
  196. onShow() {
  197. this.initData()
  198. },
  199. onLoad() {
  200. let winHeight = uni.getSystemInfoSync().windowHeight;
  201. let windowBottom = uni.getSystemInfoSync().windowBottom;
  202. let status_height = uni.getSystemInfoSync().statusBarHeight;
  203. this.scrolHeight = winHeight - windowBottom - status_height;
  204. this.windowBottom = windowBottom;
  205. this.status_height = windowBottom;
  206. this.winHeight = winHeight;
  207. // console.log("uni.getSystemInfoSync()", uni.getSystemInfoSync())
  208. },
  209. onUnload() {
  210. uni.$off('data_chat_list');
  211. },
  212. // onPullDownRefresh() {
  213. // _get.getChatList();
  214. // setTimeout(function() {
  215. // uni.stopPullDownRefresh();
  216. // }, 300);
  217. // },
  218. onHide() {
  219. //清空search框
  220. if (this.keyword) {
  221. this.$refs.searchBar.clear();
  222. this.list = this.search_list;
  223. }
  224. },
  225. computed: {
  226. showActionMenu() {
  227. return this.action_menu;
  228. },
  229. staticPhoto() {
  230. return _data.staticPhoto();
  231. },
  232. imgRan() {
  233. return Math.random();
  234. },
  235. },
  236. methods: {
  237. joinQun() {
  238. uni.navigateTo({
  239. url:'/pages/friend/adds'
  240. })
  241. },
  242. initData() {
  243. _hook.routeTabBarHook();
  244. this.getUser();
  245. uni.$off('data_chat_list');
  246. let _this = this;
  247. // let chat_list = _data.localData('chat_list');
  248. let chat_list = [];
  249. /** 监听最新数据 */
  250. uni.$on('data_chat_list', function(data) {
  251. // todo屏蔽 如果是屏蔽了,则未读为0
  252. // if(data[0].is_disturb == 1){
  253. // // 如果@本人或者全员则提示
  254. // if(data[0].last_msg.indexOf(_this.my_data.nickname) > -1 ||data[0].last_msg.indexOf('@所有人') > -1){
  255. // }else{
  256. // data[0].no_reader_num = 0;
  257. // }
  258. // }
  259. // todo @提示只要最新未读有就提示@
  260. data.forEach(item => {
  261. if ((item.last_msg.indexOf('@' + _this.my_data.nickname) > -1 || item.last_msg
  262. .indexOf(
  263. '@所有人') >
  264. -1) && item.type == 1 && item.no_reader_num != 0) {
  265. _this.obj_notice[item.list_id] = 1;
  266. }
  267. if (item.no_reader_num == 0) {
  268. _this.obj_notice[item.list_id] = 0;
  269. }
  270. })
  271. _this.list = data;
  272. _this.search_list = _this.list;
  273. console.log("接收到新数据....", data);
  274. });
  275. //有缓存则监听是否有数据更新,有则重新获取
  276. // uni.$once('update_chat_list', function () {
  277. // _get.getChatList();
  278. // })
  279. /** 加载本地缓存数据,让页面秒速渲染出来 */
  280. if (chat_list.length) {
  281. // todo
  282. _this.list = chat_list;
  283. } else {
  284. _get.getChatList();
  285. }
  286. _this.action_menu = false;
  287. // 监听未读消息
  288. uni.$on('unread_msg', (data) => {
  289. this.unread_msg = data;
  290. })
  291. console.log("初始化数据");
  292. },
  293. // 初始化数据
  294. mescrollInit(obj) {
  295. },
  296. getUser() {
  297. let _this = this;
  298. _get.getUserInfo({}, function(data) {
  299. data.photo = data.photo + "?_=" + +Math.random();
  300. data.photo = data.photo.replace(/(\?_=)[\d\.]+$/, "$1" + Math.random());
  301. console.log("res个人资料", data);
  302. _this.my_data = data;
  303. //登陆IM
  304. // #ifdef APP-PLUS
  305. // _this.loginHandler(data);
  306. // #endif
  307. _data.data("user_info", data);
  308. });
  309. },
  310. // 登录IMid
  311. loginHandler(data) {
  312. let userID = data.id.toString();
  313. let _this = this;
  314. try {
  315. const userSig = genTestUserSig(userID).userSig;
  316. // 登录 IM
  317. uni.$TUIKit.login({
  318. userID: userID,
  319. userSig: userSig
  320. });
  321. // 登录原生插件
  322. uni.$TUICalling.login({
  323. sdkAppID: genTestUserSig('').sdkAppID,
  324. userID: userID,
  325. userSig: userSig,
  326. },
  327. res => {
  328. // _this.setNickHandler(data.nickname);
  329. // _this.setUserAvatarHandler(_this.staticPhoto + data.face);
  330. uni.$TUICalling.setSelfInfo({
  331. nickName: data.nickname,
  332. avatar: _this.staticPhoto + data.face
  333. }, (selfInfo) => {
  334. console.log(JSON.stringify(selfInfo),'selfInfo')
  335. })
  336. // 开启悬浮窗
  337. uni.$TUICalling.enableFloatWindow(true);
  338. // uni.showToast({
  339. // title: 'login',
  340. // icon: 'none'
  341. // });
  342. }
  343. );
  344. } catch (e) {
  345. console.log("e");
  346. uni.hideLoading();
  347. }
  348. },
  349. // 设置昵称
  350. setNickHandler(name) {
  351. console.error('--linda')
  352. // console.log(uni.$TUICalling.setSelfInfo,'uni.$TUICalling');
  353. // uni.$TUICalling.setSelfInfo({
  354. // nickName: name,
  355. // }, (res) => {
  356. // console.log(JSON.stringify(res))
  357. // })
  358. uni.$TUICalling.setUserNickname({
  359. nickName: name,
  360. }, (res) => {
  361. console.log(JSON.stringify(res))
  362. })
  363. },
  364. // 设置头像
  365. setUserAvatarHandler(avatar) {
  366. uni.$TUICalling.setUserAvatar({
  367. avatar: avatar
  368. }, (res) => {
  369. console.log(JSON.stringify(res))
  370. })
  371. },
  372. // 下拉刷新
  373. downCallback(obj) {
  374. _get.getChatList();
  375. setTimeout(() => {
  376. obj.endSuccess();
  377. }, 1000)
  378. },
  379. search(chat_msg) {
  380. chat_msg = chat_msg.trim();
  381. let _this = this;
  382. _this.keyword = chat_msg;
  383. console.log(!chat_msg)
  384. if (!chat_msg) {
  385. _this.list = _this.search_list;
  386. return true;
  387. }
  388. _get.serchChatMsg({
  389. 'chat_msg': chat_msg,
  390. 'list_id': ''
  391. }, function(data) {
  392. _this.list = data;
  393. })
  394. },
  395. goPath(path) {
  396. if (path) {
  397. uni.navigateTo({
  398. url: path
  399. })
  400. }
  401. },
  402. imageError(e) {
  403. let index = e.currentTarget.dataset.index
  404. //替换index对应的图片
  405. this.list[index].photo_path = '/default_photo_path.png';
  406. },
  407. msgHandle(msg, num) {
  408. if (num == undefined) num = 16;
  409. if (!msg) return '';
  410. msg = msg.replace(/&lt;/g, '<');
  411. return msg.length > num ? msg.substr(0, num) + '...' : msg;
  412. },
  413. timestampFormat(time) {
  414. return _action.timestampFormat(time);
  415. },
  416. goAction(type) {
  417. let path = '';
  418. switch (type) {
  419. case 0:
  420. path = '../friend/index_list?list_id=0';
  421. break;
  422. case 1:
  423. path = '../friend/add';
  424. break;
  425. case 2:
  426. path = '../my/store';
  427. break;
  428. default:
  429. return;
  430. break;
  431. }
  432. uni.navigateTo({
  433. url: path,
  434. animationType: 'slide-in-bottom',
  435. });
  436. },
  437. actionMain() {
  438. this.action_menu = !this.action_menu;
  439. this.action_menu_num++;
  440. },
  441. openedAction(key) {
  442. this.list_index = key;
  443. },
  444. swipeAction(e) {
  445. let list_index = e.content.number
  446. let _this = this,
  447. list_id = _this.list[list_index].list_id;
  448. if (!list_id) {
  449. return;
  450. }
  451. let top = _this.list[list_index].top;
  452. console.log("top", top)
  453. let value = top == 1 ? 0 : 1;
  454. console.log("value", value)
  455. switch (e.index) {
  456. case 0:
  457. //置顶 /取消置顶
  458. _this.$httpSend({
  459. path: '/im/message/chatTop ',
  460. data: {
  461. list_id: list_id,
  462. value: value
  463. },
  464. success: () => {
  465. _get.getChatList();
  466. }
  467. });
  468. break;
  469. case 1:
  470. /** 删除这条对话 */
  471. _this.$httpSend({
  472. path: '/im/chat/deleteChat',
  473. data: {
  474. list_id,
  475. },
  476. success: (data) => {
  477. _get.getChatList();
  478. }
  479. });
  480. break;
  481. default:
  482. break;
  483. }
  484. },
  485. swipeData(value, index) {
  486. return [{
  487. text: value.top == 1 ? '取消置顶' : '置顶',
  488. number: index,
  489. style: {
  490. },
  491. },
  492. {
  493. text: '删除',
  494. number: index,
  495. style: {
  496. backgroundColor: 'rgb(255,58,49)',
  497. }
  498. }
  499. ];
  500. },
  501. goMessage(list_id, key, no_reader_num, chat_id) {
  502. if (no_reader_num > 0) {
  503. _get.getChatData({
  504. send_data: {
  505. list_id: list_id,
  506. time: 0,
  507. is_up: 1,
  508. },
  509. is_action_data: 1,
  510. });
  511. this.list[key].no_reader_num = 0;
  512. _data.localData('chat_list', this.list);
  513. _action.updataNoReader(list_id);
  514. _action.setStatusTips();
  515. uni.$on('unread_msg', (data) => {
  516. this.unread_msg = data;
  517. })
  518. }
  519. console.log("chat_id", chat_id);
  520. _data.localData('message_list_id', list_id);
  521. // './message?list_id=' + list_id + "&chat_id="+chat_id,
  522. uni.navigateTo({
  523. url: './message?list_id=' + list_id
  524. });
  525. },
  526. goScanCode() {
  527. let _this = this;
  528. // #ifdef APP-PLUS
  529. _this.action_menu = false;
  530. _page.scanCode();
  531. // #endif
  532. // #ifdef H5
  533. uni.navigateTo({
  534. url:'/pages/my/scan'
  535. })
  536. // #endif
  537. },
  538. },
  539. watch: {
  540. },
  541. onNavigationBarButtonTap(e) {
  542. this.action_menu = !this.action_menu;
  543. },
  544. }
  545. </script>
  546. <style lang="scss" scoped>
  547. @import '/static/css/chat/animate.css';
  548. page {
  549. background: #fff;
  550. }
  551. .icon-search {
  552. padding: 0 4rpx !important;
  553. }
  554. .page {
  555. width: 100%;
  556. height: 100%;
  557. background-color: #fff;
  558. }
  559. .uni-list-cell {
  560. overflow: hidden;
  561. }
  562. .uni-media-list-logo {
  563. height: 100upx;
  564. width: 100upx;
  565. }
  566. .search .content {
  567. padding-left: 20upx;
  568. height: 60upx;
  569. background-color: #F7F7F7 !important;
  570. }
  571. .header {
  572. display: flex;
  573. flex-direction: row;
  574. padding: 10px 15px;
  575. align-items: center;
  576. }
  577. .input-view {
  578. display: flex;
  579. align-items: center;
  580. flex-direction: row;
  581. background-color: #e7e7e7;
  582. height: 30px;
  583. border-radius: 5px;
  584. padding: 0 10px;
  585. flex: 1;
  586. }
  587. .input {
  588. flex: 1;
  589. padding: 0 5px;
  590. height: 24px;
  591. line-height: 24px;
  592. font-size: 16px;
  593. }
  594. .red_num {
  595. position: absolute;
  596. z-index: 10;
  597. height: 34upx;
  598. top: 7upx;
  599. /* #ifdef APP-PLUS */
  600. top: 16rpx;
  601. /* #endif */
  602. left: 120upx;
  603. font-size: 23upx !important;
  604. }
  605. /**
  606. .uni-media-list-body {
  607. height: auto;
  608. }
  609. */
  610. .uni-swipe-action,
  611. .uni-swipe,
  612. .uni-view,
  613. .uni-media-list {
  614. width: 750upx !important;
  615. }
  616. .action_main {
  617. position: fixed;
  618. top: 55px;
  619. /* #ifndef H5 */
  620. top: 15px;
  621. /* #endif */
  622. width: 750upx;
  623. height: 1080upx;
  624. z-index: 10000;
  625. }
  626. .action_base {
  627. position: absolute;
  628. right: 30upx;
  629. width: 300upx;
  630. top: -10rpx;
  631. right: 10rpx;
  632. /* #ifdef APP-PLUS */
  633. top: 140rpx;
  634. /* #endif */
  635. background: #ffffff;
  636. border-radius: 30rpx;
  637. box-shadow: 0 0 20rpx 10rpx rgba(0, 0, 0, .1);
  638. }
  639. .action_base::after {
  640. content: '';
  641. width: 0;
  642. height: 0;
  643. border-left: 20upx solid transparent;
  644. border-right: 20upx solid transparent;
  645. border-bottom: 20upx solid #fff;
  646. position: absolute;
  647. top: -14rpx;
  648. right: 20rpx;
  649. }
  650. .action_item {
  651. color: #000;
  652. height: 100upx;
  653. line-height: 100upx;
  654. margin-left: 30upx;
  655. border-bottom: 1px solid #f5f5f5;
  656. display: flex;
  657. align-items: center;
  658. }
  659. .action_icon {
  660. width: 48rpx;
  661. height: 48rpx;
  662. display: flex;
  663. justify-content: center;
  664. align-items: center;
  665. image {
  666. width: 48rpx;
  667. height: 48rpx;
  668. }
  669. }
  670. .action_item:last-child {
  671. border: none;
  672. }
  673. .action_item_text {
  674. font-size: 30upx;
  675. }
  676. .topTitle {
  677. background-color: #fff;
  678. box-sizing: border-box;
  679. padding: 20rpx 30rpx;
  680. /* #ifdef APP-PLUS */
  681. padding-top: var(--status-bar-height);
  682. /* #endif */
  683. display: flex;
  684. justify-content: space-between;
  685. align-items: center;
  686. width: 100vw;
  687. }
  688. .searchOut {
  689. box-sizing: border-box;
  690. padding: 0 14rpx;
  691. }
  692. .topFont {
  693. font-size: 40rpx;
  694. color: #080E18;
  695. font-weight: bold;
  696. margin-left: 10rpx;
  697. }
  698. .titleLf {
  699. display: flex;
  700. justify-content: flex-end;
  701. align-items: center;
  702. }
  703. .titleLf>image {
  704. width: 40rpx;
  705. height: 40rpx;
  706. margin-left: 30rpx;
  707. }
  708. .searchOut {
  709. box-sizing: border-box;
  710. padding: 0 28rpx;
  711. margin: 0 auto;
  712. }
  713. body {
  714. background-color: #fff;
  715. }
  716. .searchBt {
  717. display: flex;
  718. justify-content: flex-start;
  719. align-items: center;
  720. box-sizing: border-box;
  721. padding-left: 28rpx;
  722. padding-bottom: 10rpx;
  723. border-bottom: 2rpx solid #F2F2F2;
  724. }
  725. .searchBtItem {
  726. margin-right: 40rpx;
  727. display: flex;
  728. justify-content: flex-start;
  729. align-items: center;
  730. }
  731. .searchBtItem>text {
  732. color: #ABACAE;
  733. font-size: 28rpx;
  734. }
  735. .searchBtItem>text:first-child {
  736. font-size: 40rpx;
  737. margin-right: 14rpx;
  738. }
  739. .searchBtItem>image {
  740. width: 40rpx;
  741. height: 40rpx;
  742. margin-right: 14rpx;
  743. }
  744. .searchOut .search {
  745. padding: 14rpx 0;
  746. }
  747. .noData {
  748. width: 100%;
  749. display: flex;
  750. justify-content: center;
  751. align-items: center;
  752. flex-wrap: wrap;
  753. align-content: center;
  754. height: 700rpx;
  755. }
  756. .noData>image {
  757. width: 487rpx;
  758. height: 371rpx;
  759. }
  760. .noData>text {
  761. display: block;
  762. width: 100%;
  763. color: #9298A3;
  764. font-size: 32rpx;
  765. text-align: center;
  766. }
  767. </style>