index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772
  1. <template>
  2. <view v-if="noteDetail" class="main_content" :data-theme="theme" :class="!noteDetail.platReplySwitch?'bodyNo':''">
  3. <popup-header v-if="!isShowCommentView && noteDetail.platReplySwitch && fromTo==='popupView'" title="评论" :num="noteDetail.replyNum" @close="close"></popup-header>
  4. <!-- 评论列表 -->
  5. <scroll-view class="bottom" id="myElements" scroll-y="true" @scrolltolower="onTouchmove" @scroll="followScroll"
  6. v-if="noteDetail.platReplySwitch">
  7. <view class="container">
  8. <view v-if="list.length > 0" id="reply">
  9. <view class="common_list" v-for="(item, index) in list" :key="index">
  10. <view class="commen_one" @click.stop="goUserHomePage(item.uid)">
  11. <image :src="item.avatar || urlDomain+'crmebimage/presets/morenT.png'" class="image">
  12. </image>
  13. </view>
  14. <view class="info_count">
  15. <view class="info">
  16. <view class="message" @click.stop="toReply(item,index)">
  17. <view v-if="item.nickname" class="name">{{item.nickname}}</view>
  18. <view class="desc acea-row">
  19. <view v-if="item.auditStatus==0" class="auditStatus">
  20. <text class="line-heightOne">审核中</text>
  21. </view>
  22. <view style="width: 84%;">{{item.content}}</view>
  23. </view>
  24. <view class="acea-row row-middle" style="margin-top: 4rpx;">
  25. <view class="time">{{item.createTime?$util.getDateDiff(item.createTime):''}}
  26. </view>
  27. <view @click.stop="toReply(item,index)" class="del mr-20">回复</view>
  28. <text @click.stop="onDel(item, index)" v-if="item.uid == uid"
  29. class="del">删除</text>
  30. </view>
  31. </view>
  32. <view v-if="item.auditStatus!==0" class="like acea-row row-middle" @click.stop="starComment(item)">
  33. <view class="iconfont mr-10" :class="item.isLike ? 'icon-yidianzan' : 'icon-dianzan1'">
  34. </view>
  35. {{item.countStart?item.countStart:0}}
  36. </view>
  37. </view>
  38. <view v-if="item.replyList && item.replyList.length > 0" class="reply_count">
  39. <view v-for="(itemn,indexn) in item.replyList" :key="indexn" class="reply_list">
  40. <view class="item">
  41. <view class="item_count" @click.stop="toReply(itemn,index)">
  42. <image class="image" @click.stop="goUserHomePage(itemn.uid)"
  43. :src="itemn.avatar || urlDomain+'crmebimage/presets/morenT.png'">
  44. </image>
  45. <view v-if="itemn.nickname" class="name_two">{{itemn.nickname}}
  46. </view>
  47. <view class="desc acea-row">
  48. <view v-if="itemn.auditStatus==0" class="auditStatus mt10">
  49. <text class="line-heightOne">审核中</text>
  50. </view>
  51. <view class="desc_two">
  52. <text class="reply_user acea-row" v-if="Number(itemn.reviewUid) >0">回复<text class=ml-4>@{{itemn.reviewUserNickname}}</text> </text>{{itemn.content}}
  53. </view>
  54. </view>
  55. <view class="acea-row row-middle" style="margin-top: 4rpx;">
  56. <view class="time_two">
  57. {{itemn.createTime?$util.getDateDiff(itemn.createTime):''}}
  58. </view>
  59. <view @click.stop="toReply(itemn,index)" class="del mr20">回复</view>
  60. <text @click.stop="onDel(itemn, indexn, index)" v-if="itemn.uid == uid"
  61. class="del">删除</text>
  62. </view>
  63. </view>
  64. <view v-if="itemn.auditStatus!==0" class="like_two acea-row"
  65. @click.stop="starComment(itemn)">
  66. <view class="iconfont"
  67. :class="itemn.isLike ? 'icon-yidianzan' : 'icon-dianzan1'"></view>
  68. {{itemn.countStart ? itemn.countStart : 0}}
  69. </view>
  70. </view>
  71. </view>
  72. </view>
  73. </view>
  74. </view>
  75. <view class="end"><text>到底了</text></view>
  76. </view>
  77. <view :hidden="!loading" class="acea-row row-center-wrapper loadingicon">
  78. <text class="iconfont icon-jiazai loading"></text>
  79. </view>
  80. <view v-if="list.length == 0 && !loading" class="empty-box">
  81. <image :src="urlDomain+'crmebimage/presets/noEvaluate.png'"></image>
  82. <text>暂无评论,快去抢沙发吧~</text>
  83. </view>
  84. </view>
  85. </scroll-view>
  86. <!-- 评论弹窗评论触发处 -->
  87. <view v-if="fromTo==='popupView' && !isShowComment" @click="parentPinglun" class="release_bar bottoms">
  88. <image class="image" :src="userInfo.avatar || urlDomain+'crmebimage/presets/morenT.png'"></image>
  89. <view class="lang"
  90. :style="'height: 32px; margin-left: 10px; background-color: #eee; border-radius: 50px; display: flex; flex-direction: row;'">
  91. <text style="font-size: 13px; color: #999; margin-top: 7px; margin-left: 15px;">{{placeholder}}</text>
  92. </view>
  93. </view>
  94. <!-- 真实评论弹窗 -->
  95. <view v-show="isShowComment==true || (isShowCommentView && isClickBtn)" class="mask-popup"
  96. :class="isShowComment==true || (isShowCommentView && isClickBtn)?'on':''">
  97. <view class="release_bar" style="padding: 30rpx 24rpx;">
  98. <image class="image mr-20" :src="userInfo.avatar || urlDomain+'crmebimage/presets/morenT.png'"></image>
  99. <textarea :placeholder="placeholder" placeholder-style="color: #999999; font-size: 26rpx;"
  100. v-model="content" :cursor-spacing="cursorSpacing" confirm-hold
  101. :show-confirm-bar="false" class="input_count"
  102. :focus="autoFocus" :adjust-position="adjustPosition" auto-height />
  103. <button class="send ml-20" @click.stop="submitComment">发送</button>
  104. </view>
  105. </view>
  106. <view class='mask' @touchmove.prevent catchtouchmove="true"
  107. v-show="isShowComment || (isShowCommentView && isClickBtn &&!isShowComment)" @tap="closeComment"></view>
  108. </view>
  109. </template>
  110. <script>
  111. import {
  112. mapGetters
  113. } from "vuex";
  114. import {
  115. discoverNoteLike
  116. } from '@/libs/follow.js';
  117. import {
  118. replyListApi,
  119. noteReplyAddApi,
  120. noteReplyLikeApi,
  121. replyDeleteApi
  122. } from '@/api/discover.js';
  123. import {
  124. toLogin
  125. } from '@/libs/login.js';
  126. import {
  127. Debounce
  128. } from '@/utils/validate.js'
  129. import popupHeader from '@/components/popupHeader.vue'
  130. let app = getApp();
  131. export default {
  132. computed: mapGetters(['isLogin', 'userInfo', 'uid']),
  133. components: {
  134. popupHeader
  135. },
  136. watch: {
  137. noteId: {
  138. handler: function(newV, oldV) {
  139. if (newV) {
  140. this.where.page = 1;
  141. this.loading = false;
  142. this.loaded = false;
  143. this.list = [];
  144. this.getList();
  145. }
  146. },
  147. deep: true
  148. },
  149. noteDetails: {
  150. handler: function(newV, oldV) {
  151. if (newV) {
  152. this.noteDetail = newV
  153. }
  154. },
  155. deep: true
  156. }
  157. },
  158. props: {
  159. /* 哪里引用,页面中使用还是弹窗中使用评论 */
  160. fromTo: {
  161. type: String,
  162. default: ''
  163. },
  164. /* 内容id */
  165. noteId: {
  166. type: Number,
  167. default: 0
  168. },
  169. /* 逛逛详情 */
  170. noteDetails: {
  171. type: Object,
  172. default: function() {
  173. return {};
  174. },
  175. },
  176. // 评论列表是否出现在详情视图内,出现就展示弹窗
  177. isShowCommentView: {
  178. type: Boolean,
  179. default: false,
  180. },
  181. //是否点击了评论按钮
  182. isClickBtn: {
  183. type: Boolean,
  184. default: false,
  185. },
  186. },
  187. data() {
  188. return {
  189. urlDomain: this.$Cache.get("imgHost"),
  190. cursorSpacing: 20, //键盘距离输入框的距离
  191. adjustPosition: true, //默认
  192. autoFocus: false,
  193. noteDetail: this.noteDetails,
  194. theme: app.globalData.theme,
  195. content: '',
  196. isShowComment: false, //真实评论弹窗显示隐藏
  197. placeholder: "快来说点儿什么吧...",
  198. loadTitle: '加载更多',
  199. where: {
  200. page: 1,
  201. limit: 10,
  202. noteId: ''
  203. },
  204. list: [],
  205. loading: false,
  206. replyId: 0,
  207. focus: false,
  208. index: 0,
  209. isChild: false,
  210. bottomVal: 0,
  211. observer: null,
  212. elementId: 'myElements',
  213. }
  214. },
  215. mounted() {
  216. this.getList();
  217. },
  218. onReady() {
  219. },
  220. onUnload() {
  221. },
  222. methods: {
  223. //去个人主页
  224. goUserHomePage(id){
  225. this.$util.navigateTo(`/pages/discover/discover_user/index?id=${id}`);
  226. },
  227. //删除自己的评论
  228. onDel(item, i, idx) {
  229. uni.showModal({
  230. title: '提示',
  231. content: '确认删除评论吗?',
  232. success: res => {
  233. if (res.confirm) {
  234. this.onSub(item, i, idx);
  235. } else if (res.cancel) {
  236. console.log('用户点击取消');
  237. }
  238. }
  239. });
  240. },
  241. onSub(item, i, idx) {
  242. uni.showLoading({
  243. title: '删除中...'
  244. });
  245. replyDeleteApi(item.id).then(res => {
  246. if (item.type === 1) {
  247. this.list.splice(i, 1);
  248. } else {
  249. this.list[idx].replyList.splice(i, 1)
  250. }
  251. uni.showToast({
  252. title: '删除成功',
  253. icon: 'none'
  254. })
  255. this.noteDetail.replyNum = res.data;
  256. this.$emit('getReplyNum', this.noteDetail.replyNum)
  257. uni.hideLoading();
  258. }).catch(err => {
  259. uni.hideLoading();
  260. uni.showToast({
  261. title: err,
  262. icon: 'none'
  263. })
  264. });
  265. },
  266. /*点赞评论*/
  267. starComment: Debounce(function(item) {
  268. let that = this;
  269. noteReplyLikeApi(item.id).then(res => {
  270. this.$set(item, 'isLike', !item.isLike);
  271. if (!item.isLike) {
  272. item.countStart--;
  273. item.countStart = item.countStart == 0 ? 0 : item.countStart
  274. } else {
  275. item.countStart++;
  276. }
  277. }).catch(err => {
  278. uni.showToast({
  279. title: err,
  280. icon: 'none'
  281. })
  282. });
  283. }),
  284. // 模拟触底刷新
  285. onTouchmove(e) {
  286. if (this.loadend || this.loading) return;
  287. this.getList();
  288. },
  289. /**
  290. *
  291. */
  292. followScroll() {
  293. uni.$emit('scroll');
  294. },
  295. close() {
  296. this.$emit('close');
  297. },
  298. //点赞
  299. likeToggle: Debounce(function(item) {
  300. if (this.isLogin) {
  301. discoverNoteLike(item.id).then(() => {
  302. this.$set(item, 'userIsLike', !item.userIsLike);
  303. if (!item.userIsLike) {
  304. item.likeNum--;
  305. item.likeNum = item.likeNum == 0 ? 0 : item.likeNum
  306. } else {
  307. item.likeNum++;
  308. }
  309. });
  310. } else {
  311. toLogin();
  312. }
  313. }),
  314. //回复
  315. toReply(item, index) {
  316. if (item.auditStatus === 0) return this.$util.Tips({
  317. title: '审核中的评论不能进行回复'
  318. });
  319. this.placeholder = '回复:' + item.nickname
  320. this.replyId = item.id
  321. this.isChild = true
  322. this.index = index
  323. this.focus = true
  324. this.content = ""
  325. this.isShowComment = true
  326. },
  327. clickTextarea() {
  328. this.isopen = false;
  329. if (uni.getSystemInfoSync().platform == 'ios') {
  330. this.autoFocus = false;
  331. setTimeout(() => {
  332. this.autoFocus = true;
  333. }, 200)
  334. }
  335. },
  336. linechange(event) {
  337. this.lineheight = event.detail.height
  338. },
  339. //真实评论弹窗 关闭
  340. closeComment() {
  341. this.autoFocus = false;
  342. this.placeholder = "快来说点儿什么吧...";
  343. this.content = ""
  344. this.isChild = false
  345. this.focus = false
  346. this.bottomVal = 0
  347. this.isShowComment = false;
  348. //关闭评论蒙层
  349. this.$emit('closeModelComment')
  350. },
  351. oninput() {
  352. if (Number(this.noteDetail.replyStatus) > 1) {
  353. return this.$util.Tips({
  354. title: '该内容禁止评论'
  355. });
  356. } else {
  357. this.isShowComment = true
  358. }
  359. },
  360. parentPinglun() {
  361. if (!this.isLogin) {
  362. toLogin();
  363. } else {
  364. if (Number(this.noteDetail.replyStatus) > 1) {
  365. return this.$util.Tips({
  366. title: '该内容禁止评论'
  367. });
  368. } else {
  369. this.autoFocus = false;
  370. setTimeout(() => {
  371. this.autoFocus = true;
  372. this.isShowComment = true
  373. }, 50)
  374. }
  375. }
  376. },
  377. //评论发送提交
  378. submitComment: Debounce(function() {
  379. if (!this.content) return;
  380. noteReplyAddApi({
  381. content: this.content,
  382. noteId: this.noteId,
  383. replyId: this.replyId
  384. }).then(res => {
  385. this.isShowComment = false
  386. if (this.isChild) {
  387. if (this.list[this.index]['replyList']) {
  388. this.list[this.index]['replyList'].push(res.data)
  389. } else {
  390. this.list[this.index]['replyList'] = [res.data]
  391. }
  392. } else {
  393. this.list.unshift(res.data)
  394. }
  395. this.noteDetail.replyNum = res.data.noteReplyNum
  396. this.closeComment();
  397. this.$util.Tips({
  398. title: res.message
  399. });
  400. }).catch(err => {
  401. this.isShowComment = false
  402. uni.showToast({
  403. title: err,
  404. icon: 'none'
  405. })
  406. });
  407. }),
  408. //评论列表
  409. getList() {
  410. let that = this;
  411. if (that.loading || that.loaded) return;
  412. that.loading = true;
  413. that.where.noteId = this.noteId;
  414. replyListApi(that.where).then(res => {
  415. that.loading = false;
  416. that.all = res.data.all;
  417. that.loaded = res.data.list.length < that.where.limit;
  418. that.loadTitle = that.loadend ? '没有了' : '加载更多';
  419. that.list.push.apply(that.list, res.data.list);
  420. that.where.page = that.where.page + 1;
  421. },
  422. error => {
  423. that.loading = false;
  424. that.$util.Tips({
  425. title: error.msg
  426. })
  427. }
  428. );
  429. },
  430. }
  431. }
  432. </script>
  433. <style lang="scss" scoped>
  434. .author {
  435. display: flex;
  436. align-items: center;
  437. position: relative;
  438. .level_icon {
  439. position: absolute;
  440. width: 20rpx;
  441. height: 20rpx;
  442. margin: 4rpx 0 0 -4rpx;
  443. border: none;
  444. z-index: 1;
  445. bottom: 2rpx;
  446. left: 50rpx;
  447. }
  448. .picture,
  449. uni-image {
  450. width: 60rpx;
  451. height: 60rpx;
  452. border-radius: 100%;
  453. }
  454. .name {
  455. margin-left: 20rpx;
  456. color: #282828;
  457. font-size: 32rpx;
  458. font-weight: bold;
  459. align-items: center;
  460. }
  461. }
  462. .del {
  463. font-size: 24rpx;
  464. color: #999999;
  465. display: inline-block;
  466. }
  467. .no-border {
  468. position: static !important;
  469. // border: none !important;
  470. background-color: #fff;
  471. z-index: 999 !important;
  472. }
  473. .release_box {
  474. padding: 30rpx 0;
  475. // padding-bottom: constant(safe-area-inset-bottom); // 兼容 IOS<11.2
  476. // padding-bottom: env(safe-area-inset-bottom); // 兼容 IOS>11.2
  477. }
  478. .lang {
  479. width: 628rpx !important;
  480. }
  481. .bodyNo {
  482. padding: 0 !important;
  483. }
  484. .main_content {
  485. padding: 30rpx 24rpx;
  486. }
  487. .fixed {
  488. // bottom: calc(40rpx+ constant(safe-area-inset-bottom)) !important; ///兼容 IOS<11.2/
  489. // bottom: calc(40rpx + env(safe-area-inset-bottom));
  490. position: fixed !important;
  491. //bottom: 0;
  492. // bottom: constant(safe-area-inset-bottom); // 兼容 IOS<11.2
  493. // bottom: env(safe-area-inset-bottom); // 兼容 IOS>11.2
  494. background-color: #fff;
  495. }
  496. .auditStatus {
  497. font-size: 18rpx;
  498. border-radius: 2px;
  499. opacity: 1;
  500. border: 1px solid #FE960F;
  501. color: #FE960F;
  502. height: 32rpx;
  503. padding: 0 4rpx;
  504. margin-right: 8rpx;
  505. }
  506. .textarea {
  507. bottom: constant(safe-area-inset-bottom); // 兼容 IOS<11.2
  508. bottom: env(safe-area-inset-bottom); // 兼容 IOS>11.2
  509. }
  510. .bottom {
  511. bottom: constant(safe-area-inset-bottom); // 兼容 IOS<11.2
  512. bottom: env(safe-area-inset-bottom); // 兼容 IOS>11.2
  513. }
  514. .release_bar_detail {
  515. height: calc(90rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
  516. height: calc(90rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
  517. padding-bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/
  518. padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/
  519. background-color: #fff;
  520. }
  521. .release_bar {
  522. background-color: #fff;
  523. flex-shrink: 0;
  524. width: 100%;
  525. position: absolute; // input 所在盒子设置绝对定位
  526. left: 0;
  527. z-index: 999;
  528. display: flex;
  529. bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/
  530. bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/
  531. align-items: center;
  532. // justify-content: space-between;
  533. padding: 15rpx 24rpx;
  534. border-top: 1px solid #F5F5F5;
  535. .avatar,
  536. image,
  537. uni-image {
  538. width: 54rpx;
  539. height: 54rpx;
  540. border-radius: 100%;
  541. }
  542. .input_count {
  543. width: 440rpx;
  544. background: #F7F7F7;
  545. border-radius: 40rpx;
  546. height: 64rpx;
  547. /* #ifdef H5 */
  548. padding: 10rpx 30rpx;
  549. /* #endif */
  550. /* #ifndef H5 */
  551. padding: 16rpx 30rpx;
  552. /* #endif */
  553. }
  554. textarea {
  555. width: 100%;
  556. }
  557. .send {
  558. font-size: 26rpx;
  559. color: #ffffff;
  560. width: 120rpx;
  561. height: 64rpx;
  562. line-height: 64rpx;
  563. text-align: center;
  564. @include linear-gradient(theme);
  565. border-radius: 30rpx;
  566. text-align: center;
  567. font-weight: 500;
  568. }
  569. .input_bar {
  570. align-items: center;
  571. color: #282828;
  572. font-size: 26rpx;
  573. .iconfont {
  574. font-size: 40rpx;
  575. margin-right: 6rpx;
  576. }
  577. .icon-shoucang1 {
  578. @include main_color(theme);
  579. }
  580. .item {
  581. align-items: center;
  582. &:first-child {
  583. margin-right: 25rpx;
  584. }
  585. }
  586. }
  587. }
  588. .container {
  589. background-color: #fff;
  590. position: relative;
  591. height: 986rpx;
  592. }
  593. .end {
  594. margin-top: 50rpx;
  595. text-align: center;
  596. text {
  597. color: #999999;
  598. font-size: 22rpx;
  599. position: relative;
  600. &::before,
  601. &::after {
  602. content: "";
  603. display: inline-block;
  604. width: 22rpx;
  605. height: 1rpx;
  606. background: #999999;
  607. position: absolute;
  608. top: 18rpx;
  609. opacity: .5;
  610. }
  611. &::before {
  612. left: -30rpx;
  613. }
  614. &::after {
  615. right: -30rpx;
  616. }
  617. }
  618. }
  619. .common_list {
  620. position: relative;
  621. padding-left: 94rpx;
  622. .commen_one {
  623. position: absolute;
  624. top: 0;
  625. left: 0;
  626. .image,
  627. uni-image {
  628. width: 74rpx;
  629. height: 74rpx;
  630. border-radius: 100%;
  631. }
  632. }
  633. .info_count {
  634. margin-bottom: 30rpx;
  635. }
  636. .info {
  637. position: relative;
  638. }
  639. .name,
  640. .name_two {
  641. color: #999999;
  642. font-size: 26rpx;
  643. }
  644. .desc,
  645. .desc_two {
  646. color: #282828;
  647. font-size: 28rpx;
  648. margin-top: 4rpx;
  649. align-items: center;
  650. }
  651. .desc_two {
  652. font-size: 28rpx;
  653. width: 84%;
  654. .reply_user {
  655. font-size: 28rpx;
  656. color: #4A8AC9;
  657. display: inline-block;
  658. margin: 0 6rpx 0 6rpx;
  659. }
  660. }
  661. .time {
  662. color: #bbb;
  663. font-size: 24rpx;
  664. margin-right: 20rpx;
  665. }
  666. .icon-cha2 {
  667. font-size: 26rpx;
  668. margin-top: 4rpx;
  669. }
  670. .time_two {
  671. color: #bbb;
  672. font-size: 24rpx;
  673. margin-right: 20rpx;
  674. }
  675. .like,
  676. .like_two {
  677. color: #999999;
  678. font-size: 26rpx;
  679. text-align: center;
  680. position: absolute;
  681. top: 0;
  682. right: 0;
  683. width: 75rpx;
  684. .icon-yidianzan {
  685. @include main_color(theme);
  686. }
  687. .iconfont{
  688. margin-right: 10rpx;
  689. }
  690. }
  691. .reply_list {
  692. margin-top: 24rpx;
  693. .item {
  694. // padding-right: 140rpx;
  695. position: relative;
  696. }
  697. .item_count {
  698. position: relative;
  699. padding-left: 56rpx;
  700. .image,
  701. un-image {
  702. width: 36rpx;
  703. height: 36rpx;
  704. border-radius: 100%;
  705. position: absolute;
  706. top: 0;
  707. left: 0;
  708. }
  709. }
  710. }
  711. }
  712. </style>