index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638
  1. <template>
  2. <view class="trend" :style="{height: `${windowHeight}px`}" @click="getComflag">
  3. <view class="trenda">
  4. <uni-nav-bar title="动态" :background-color="backgroundColor" :border="navborder" :leftWidth="leftwith+'rpx'" statusBar='true' fixed="true" >
  5. <!-- checkPermi(['xiaoYuan:notice:mylist']) -->
  6. <block slot="left">
  7. <!-- <view class="trend_top" @click="getMyTrend">
  8. <image :src="more"></image>
  9. </view> -->
  10. <view class="trend_top" @click="getMyTrend">我的动态</view>
  11. </block>
  12. </uni-nav-bar>
  13. <image :src="addimg" class="addimg" @click="getAdd" ></image>
  14. <block v-if="list.length">
  15. <view class="dtlist" v-for="(ite,idx) in list" :key="idx" @click="getDetail(ite.noticeId)">
  16. <view class="flext">
  17. <image v-if='ite.avatar' :src="baseUrl+ite.avatar" class="listl"></image>
  18. <image v-else :src="avatarimg" class="listl"></image>
  19. <view class="listr">
  20. <view class="top">
  21. <view class="f17 co16 fw5 flex0" v-if="ite.senderName">{{ite.senderName}}</view>
  22. <view class="f14 co6 flex1 ml6 txr" v-if="ite.schoolName">{{ite.schoolName}}</view>
  23. </view>
  24. <view>
  25. <view class="f15 co16 mb8" v-if="ite.noticeContent">{{ite.noticeContent}}</view>
  26. <view class="imgs" v-if="ite.photo">
  27. <image :src="baseUrl+pit" :class="ite.photo.length==0?'img1':''" v-for="(pit,pid) in ite.photo" :key="pid" @click.stop="getPreview(ite.photo,pid)"></image>
  28. </view>
  29. </view>
  30. <view class="flexcj">
  31. <view class="f13 coa">{{ite.createTime}}</view>
  32. <view class="trsta flexc">
  33. <!-- <view class="trstal">
  34. <image :src="tricong"></image>
  35. <button open-type="share" class="sharebox" :data-id="ite.noticeId" :data-tit="ite.noticeContent" :data-img="ite.photo?ite.photo[0]:''"></button>
  36. </view> -->
  37. <view class="trstal" @click.stop="getPin(ite.noticeId,idx)">
  38. <image :src="triconb"></image>
  39. <!-- <view class="cir">2</view> -->
  40. </view>
  41. <view class="trstal" @click.stop="getZan(ite.noticeId,ite.prisedId,idx,2)">
  42. <image :src="tricone" v-if="ite.prisedId"></image>
  43. <image :src="triconc" v-else></image>
  44. </view>
  45. <view class="trstal" @click.stop="getZan(ite.noticeId,ite.collectId,idx,3)">
  46. <image :src="triconf" v-if="ite.collectId"></image>
  47. <image :src="tricond" v-else></image>
  48. </view>
  49. </view>
  50. </view>
  51. </view>
  52. </view>
  53. <!-- 评论 -->
  54. <view class="trcom mt15" >
  55. <view class="trcomz flext" v-if="ite.prisedlist.length">
  56. <view class="trcoml">
  57. <image :src="triconc"></image>
  58. </view>
  59. <view class="trcomr lh20">
  60. <text v-for="(nite,cidx) in ite.prisedlist" :key="cidx">{{nite.name}}
  61. <block v-if="cidx!=ite.prisedlist.length-1">,</block>
  62. </text>
  63. </view>
  64. </view>
  65. <view v-if="ite.prisedlist.length&&ite.commentlist.length" class="trcomline"></view>
  66. <view class="trcomp flext" v-if="ite.commentlist.length">
  67. <view class="trcoml">
  68. <image :src="triconb"></image>
  69. </view>
  70. <view class="flex1">
  71. <view class="trcompr flext" v-for="(cite,cidx) in ite.commentlist" :key="cidx" @click.stop="getComFn(ite.noticeId,cite,idx)">
  72. <image v-if='cite.avatar' :src="baseUrl+cite.avatar" class="listl"></image>
  73. <image v-else :src="avatarimg" class="listl"></image>
  74. <view class="flex1">
  75. <view class="flexcj mb5">
  76. <view class="f14 fw c37 lh20">{{cite.name}}</view>
  77. <!-- <view class="f13 co6">6月23日 14:15</view> -->
  78. </view>
  79. <view class="f14 co16 fw5 lh20">
  80. <block v-if="cite.huserid">回复<text class="c37">{{cite.husername}}:</text></block>
  81. {{cite.text}}</view>
  82. </view>
  83. </view>
  84. </view>
  85. </view>
  86. </view>
  87. </view>
  88. <view class="shax" v-if="wtdt">{{wtdt}}</view>
  89. </block>
  90. <block v-else>
  91. <no-data ></no-data>
  92. </block>
  93. <!-- 弹框 -->
  94. <view class="combox" v-if="comflag" @click.stop="btns" :style="{bottom: `${bottom}px`}">
  95. <view class="comboxl">
  96. <textarea :placeholder="placeholder" :hold-keyboard="comflag" :adjust-position="adjustpos" :auto-focus="comflag" v-model="comment" :auto-height="autoHeight" :cursor-spacing='curspac' fixed="true" :show-confirm-bar="confirmBar" ></textarea>
  97. </view>
  98. <view class="comboxr" @click="getSubmit">发送</view>
  99. </view>
  100. </view>
  101. <footers v-if="isfootflag" :footlist="footlist" :footerindex="footerindex" :color_checked="color_checked" :color_nochecked="color_nochecked" :isHomeIndex="true"></footers>
  102. </view>
  103. </template>
  104. <script>
  105. import config from '@/config'
  106. import {uploadmore,selectDictValue} from '@/utils/common.js'
  107. import footers from '@/components/footer/footer.vue'
  108. const baseUrl = config.baseUrl
  109. import {getNoticeList,getNoticeUpt,getNoticeDetail} from "@/api/mine/trends.js"
  110. import noData from "@/components/nodata/nodata.vue"
  111. import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
  112. export default {
  113. components:{
  114. noData,footers
  115. },
  116. data(){
  117. return{
  118. footlist:[
  119. {module:'home',title:'首页',icon_checked:require('@/static/images/tabbar/home_.png'),icon_nochecked:require('@/static/images/tabbar/home.png'),},
  120. {module:'work',title:'课表',icon_checked:require('@/static/images/tabbar/work_.png'),icon_nochecked:require('@/static/images/tabbar/work.png'),limit:'course:table:list'},
  121. {module:'trends',title:'动态',icon_checked:require('@/static/images/tabbar/trends_.png'),icon_nochecked:require('@/static/images/tabbar/trends.png'),limit:'xiaoYuan:notice:list'},
  122. {module:'mine',title:'我的',icon_checked:require('@/static/images/tabbar/mine_.png'),icon_nochecked:require('@/static/images/tabbar/mine.png')},
  123. ],
  124. footerindex:'trends',
  125. isfootflag:true,
  126. color_checked :'161616',
  127. color_nochecked :'666666',
  128. more:require("@/static/images/more.png"),
  129. addimg:require("@/static/images/tadd.png"),
  130. delimg:require("@/static/images/tdel.png"),
  131. windowHeight: 0,
  132. wtopimg:require("@/static/images/wtop.png"),
  133. tapline:require("@/static/images/hline.png"),
  134. tricona:require("@/static/images/tricoa.png"),
  135. triconb:require("@/static/images/tricob.png"),
  136. triconc:require("@/static/images/tricoc.png"),
  137. tricond:require("@/static/images/tricod.png"),
  138. tricone:require("@/static/images/tricoe.png"),
  139. triconf:require("@/static/images/tricof.png"),
  140. tricong:require("@/static/images/tricog.png"),
  141. backgroundColor:'#ffffff',
  142. navborder:false,
  143. leftwith:'200',
  144. pageSize: 10,
  145. pageNum: 1,
  146. reachflag:true,
  147. wtdt:'',
  148. list:[],
  149. file:[],
  150. baseUrl:'',
  151. zhtype:6,
  152. placeholder:'评论:',
  153. bottom:0,
  154. noticeId:'',//新闻id
  155. comment:'',//评论
  156. comflag:false,
  157. autoHeight:true,
  158. confirmBar:false,
  159. adrfixed:true,
  160. adjustpos:false,
  161. curspac:'0',//光标和键盘距离
  162. userId:this.$store.state.user.userId,
  163. name:this.$store.state.user.name,
  164. selectidx:0,//选择索引,
  165. huiflag:false,
  166. huserid:'',
  167. husername:'',
  168. avatarimg:require("@/static/images/profile.png"),
  169. }
  170. },
  171. computed: {
  172. avatar() {
  173. return this.$store.state.user.avatar
  174. },
  175. },
  176. onUnload(){
  177. uni.$off('refreshdatalist')
  178. },
  179. onShow(){
  180. // #ifndef H5
  181. uni.onKeyboardHeightChange(res=> { //监听键盘高度变化
  182. const res_keyboard = uni.getSystemInfoSync();
  183. let key_height = res.height - (res_keyboard.screenHeight - res_keyboard.windowHeight)
  184. this.bottom = `${ key_height>0 ? key_height : 0}`;
  185. if(this.bottom==0){
  186. this.comflag=false;
  187. }
  188. })
  189. // #endif
  190. return
  191. var newArr=this.$store.state.user.refreshflag
  192. if(newArr&&newArr.length){
  193. if(newArr[2]){
  194. this.reachflag=true;
  195. this.pageNum=1;
  196. this.list=[];
  197. this.getDataFn();
  198. newArr[2]=false
  199. this.$store.dispatch('checkRefresh', newArr).then(() => {
  200. }).catch(() => {
  201. })
  202. }
  203. }
  204. },
  205. onHide() {
  206. // #ifndef H5
  207. uni.offKeyboardHeightChange(); // 取消监听键盘高度变化事件,避免内存消耗
  208. // #endif
  209. },
  210. onPullDownRefresh:function(){
  211. this.reachflag=true;
  212. this.pageNum=1;
  213. this.list=[];
  214. this.getDataFn();
  215. setTimeout(function () {
  216. uni.stopPullDownRefresh();
  217. }, 1000);
  218. },
  219. onPageScroll(e) {
  220. this.comflag=false;
  221. },
  222. onLoad: function() {
  223. uni.$on('refreshdatalist',(e) => {
  224. this.reachflag=true;
  225. this.pageNum=1;
  226. this.list=[];
  227. this.getDataFn();
  228. })
  229. this.baseUrl=baseUrl;
  230. this.getDataFn();
  231. },
  232. mounted() {
  233. var systemInfo=uni.getSystemInfoSync();
  234. this.windowHeight=Number(systemInfo.windowHeight);
  235. },
  236. onReachBottom() {
  237. if (this.reachflag) {
  238. this.pageNum++
  239. this.getDataFn()
  240. }
  241. },
  242. onShareAppMessage(res) {
  243. this.comflag=false;
  244. if (res.from === 'button') {// 来自页面内分享按钮
  245. var data=res.target.dataset;
  246. var newobj={
  247. title: data.tit||"智能校管家",
  248. path: '/mine/pages/trends/trenddetail?type=share&id='+data.id
  249. }
  250. if(data.img){
  251. newobj.imageUrl=this.baseUrl+data.img
  252. }
  253. return newobj
  254. }else{
  255. return {
  256. title: '智能校管家',
  257. path: '/pages/trends/index'
  258. }
  259. }
  260. },
  261. onShareTimeline(res) {
  262. console.log(res,888)
  263. // this.comflag=false;
  264. // if (res.from === 'button') {// 来自页面内分享按钮
  265. // var data=res.target.dataset;
  266. // var newobj={
  267. // title: data.tit||"智能校管家",
  268. // path: '/mine/pages/trends/trenddetail?type=share&id='+data.id
  269. // }
  270. // if(data.img){
  271. // newobj.imageUrl=this.baseUrl+data.img
  272. // }
  273. // return newobj
  274. // }else{
  275. // return {
  276. // title: '智能校管家',
  277. // path: '/pages/trends/index'
  278. // }
  279. // }
  280. },
  281. methods:{
  282. checkPermi, checkRole,
  283. getShare(){
  284. },
  285. refreshdataFn(){
  286. this.reachflag=true;
  287. this.pageNum=1;
  288. this.list=[];
  289. this.getDataFn();
  290. },
  291. getDetail(id){
  292. this.comflag=false;
  293. this.$tab.navigateTo('/mine/pages/trends/trenddetail?id='+id)
  294. },
  295. getPreview(iurl,idx) {
  296. this.comflag=false;
  297. var newArr=[];
  298. iurl.forEach(ite=>{
  299. var ds=this.baseUrl+ite
  300. newArr.push(ds)
  301. })
  302. uni.previewImage({
  303. urls: newArr,
  304. current:idx,
  305. success: function(data) {
  306. },
  307. fail: function(err) {
  308. console.log(err.errMsg);
  309. }
  310. });
  311. },
  312. kaType(val,datas){
  313. var actions = [];
  314. Object.keys(datas).some((key) => {
  315. if (datas[key].userId == ('' + val)) {
  316. actions.push(datas[key].id);
  317. return true;
  318. }
  319. })
  320. return actions.join('');
  321. },
  322. getMyTrend(){
  323. this.$tab.navigateTo('/mine/pages/trends/mytrends')
  324. // this.$tab.navigateTo('/pages/trends/trendb')
  325. },
  326. getAdd(){
  327. this.$tab.navigateTo("/mine/pages/trends/addtrend?from=index")
  328. },
  329. //评论
  330. getComflag(){
  331. this.comflag=false
  332. },
  333. btns(){
  334. },
  335. getPin(notid,idx){
  336. if((notid==this.noticeId)&&this.comflag){
  337. this.comflag=false;
  338. return
  339. }
  340. this.placeholder='评论:';
  341. this.comflag=true;
  342. this.huiflag=false;
  343. this.selectidx=idx;
  344. this.noticeId=notid;
  345. },
  346. //删除评论
  347. getComFn(notid,ite,idx){
  348. var that=this;
  349. this.comflag=false;
  350. if(ite.userId==this.userId){
  351. this.$modal.confirm('确定删除该条评论').then(() => {
  352. that.getZan(notid,ite.id,idx,1)
  353. })
  354. }else{
  355. this.placeholder='回复'+ite.name;
  356. this.comflag=true;
  357. this.selectidx=idx;
  358. this.noticeId=notid;
  359. this.huiflag=true;
  360. this.huserid=ite.userId;
  361. this.husername=ite.name;
  362. }
  363. },
  364. getSubmit(){
  365. var obj={
  366. text:this.comment,//1 点赞 0 取消
  367. userId:this.userId,
  368. name:this.name,
  369. }
  370. if(this.avatar){
  371. obj.avatar=this.avatar
  372. }
  373. // 判断是否是回复
  374. if(this.huiflag){
  375. obj.huserid=this.huserid;
  376. obj.husername=this.husername;
  377. }
  378. var params={
  379. noticeId:this.noticeId,
  380. updateType:1,
  381. comment:JSON.stringify(obj)
  382. }
  383. getNoticeUpt(params).then(res=>{
  384. if(res.code==200){
  385. this.comment='';
  386. this.comflag=false;
  387. this.huiflag=false;
  388. this.getNoticeDetail(this.noticeId)
  389. }else{
  390. this.$toast(res.msg)
  391. }
  392. })
  393. },
  394. // 点赞
  395. getZan(notid,id,idx,type){
  396. this.comflag=false;
  397. this.selectidx=idx;
  398. var obj={
  399. type:1 ,//1 点赞 0 取消
  400. userId:this.userId,
  401. name:this.name,
  402. }
  403. var params={
  404. noticeId:notid,
  405. updateType:type,
  406. }
  407. if(type==2){
  408. params.prised=JSON.stringify(obj);
  409. }else if(type==3){
  410. params.collect=JSON.stringify(obj);
  411. }else if(type==1){
  412. params.comment=JSON.stringify(obj);
  413. }
  414. if(id){//删除
  415. params.deleteId=id;//取消才需要
  416. }
  417. getNoticeUpt(params).then(res=>{
  418. if(res.code==200){
  419. if(type==1&&id){
  420. this.$toast("删除评论成功")
  421. }else if(type==2){
  422. if(id){
  423. this.$toast("取消点赞")
  424. }else{
  425. this.$toast("点赞成功")
  426. }
  427. }else if(type==3){
  428. if(id){
  429. this.$toast("取消收藏")
  430. }else{
  431. this.$toast("收藏成功")
  432. }
  433. }
  434. this.getNoticeDetail(notid)
  435. }else{
  436. this.$toast(res.msg)
  437. }
  438. })
  439. },
  440. //详情
  441. getNoticeDetail(id){
  442. var idx=this.selectidx;
  443. getNoticeDetail(id).then(res=>{
  444. if(res.code==200){
  445. var datainfo=res.data
  446. if(res.data.image){
  447. datainfo.photo=res.data.image.split(',')
  448. }else{
  449. datainfo.photo=[];
  450. }
  451. // 点赞
  452. if(datainfo.prised){
  453. var prisedlist=JSON.parse(datainfo.prised);
  454. datainfo.prisedId=this.kaType(this.userId,prisedlist);
  455. datainfo.prisedlist=JSON.parse(datainfo.prised);
  456. }else{
  457. datainfo.prisedlist=[];
  458. }
  459. //收藏
  460. if(datainfo.collect){
  461. var collectlist=JSON.parse(datainfo.collect);
  462. datainfo.collectId=this.kaType(this.userId,collectlist);
  463. }
  464. //评论
  465. if(datainfo.comment){
  466. datainfo.commentlist=JSON.parse(datainfo.comment);
  467. }else{
  468. datainfo.commentlist=[];
  469. }
  470. var newArr=JSON.parse(JSON.stringify(this.list))
  471. newArr[idx]=JSON.parse(JSON.stringify(datainfo));
  472. this.list=newArr
  473. }else{
  474. // this.$toast(res.msg)
  475. }
  476. })
  477. },
  478. getDataFn(){
  479. var params={
  480. pageSize:this.pageSize,
  481. pageNum: this.pageNum,
  482. noticeType:1
  483. }
  484. var role=this.$store.state.user.choseroles
  485. if(role!="school"){
  486. params['params[role]']=role
  487. }
  488. getNoticeList(params).then(res=>{
  489. if(res.code==200){
  490. if (res.rows.length < this.pageSize) {
  491. this.reachflag = false
  492. this.wtdt = '到底了~';
  493. } else {
  494. var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum - 1)
  495. if (num < res.total) {
  496. this.reachflag = true
  497. this.wtdt = '上拉加载更多'
  498. } else {
  499. this.reachflag = false
  500. this.wtdt = '到底了~';
  501. }
  502. }
  503. var newArr=res.rows||[];
  504. if(newArr.length){
  505. newArr.forEach(ite=>{
  506. if(ite.image){
  507. ite.photo=ite.image.split(',')
  508. }else{
  509. ite.photo=[]
  510. }
  511. // 点赞处理
  512. if(ite.prised){
  513. var prisedlist=JSON.parse(ite.prised);
  514. ite.prisedId=this.kaType(this.userId,prisedlist);
  515. ite.prisedlist=JSON.parse(ite.prised);
  516. }else{
  517. ite.prisedlist=[]
  518. }
  519. //收藏
  520. if(ite.collect){
  521. var collectlist=JSON.parse(ite.collect);
  522. ite.collectId=this.kaType(this.userId,collectlist);
  523. }
  524. //评论
  525. if(ite.comment){
  526. ite.commentlist=JSON.parse(ite.comment)
  527. }else{
  528. ite.commentlist=[];
  529. }
  530. })
  531. }
  532. if (this.pageNum == 1) {
  533. this.list = newArr;
  534. } else {
  535. this.list = this.list.concat(newArr)
  536. }
  537. }else{
  538. this.$toast(res.msg)
  539. }
  540. })
  541. },
  542. },
  543. }
  544. </script>
  545. <style lang="scss" scoped>
  546. .trend{
  547. padding: 0rpx 24rpx 24rpx;box-sizing: border-box;
  548. // padding: 0rpx 24rpx 24rpx;display: flex;flex-direction: column;box-sizing: border-box;overflow: auto;
  549. .trenda{
  550. padding-bottom: 24rpx
  551. }
  552. .trend_top{display: flex;align-items: center;font-size: 30rpx;font-weight: 500;color: #4775EA;padding: 0 10rpx;
  553. image{width: 34rpx;height: 27rpx;}
  554. }
  555. .addimg{width: 136rpx;height: 136rpx;position: fixed;right: 0;bottom: 120rpx;border-radius: 50%;z-index: 4;}
  556. // 评论弹框
  557. .combox{position: fixed;left: 0;right: 0;bottom: 0;background: #E9E9E9;padding: 17rpx 24rpx;box-sizing: border-box;z-index: 5;
  558. display: flex;align-items: flex-end;overflow: hidden;
  559. .comboxl{flex: 1;min-height: 70rpx;background: #FFFFFF;border-radius: 10rpx;
  560. padding:15rpx 32rpx;box-sizing: border-box;line-height: 40rpx;
  561. textarea{width: 100%;font-size: 30rpx;color: #161616;}
  562. }
  563. .comboxr{width: 114rpx;height: 70rpx;background: #1f57e6;border-radius:10rpx;flex: 0 0 auto;font-size: 30rpx;font-weight: bold;
  564. color: #FFFFFF;text-align: center;line-height: 70rpx;margin-left: 22rpx;}
  565. }
  566. }
  567. // 动态
  568. .dtlist{width: 100%;margin-top: 24rpx;background: #FFFFFF;border-radius: 8rpx;padding: 28rpx 30rpx;box-sizing: border-box;
  569. .listl{width: 60rpx;height: 60rpx;margin-right: 20rpx;flex: 0 0 auto;border-radius:50%;}
  570. .listr{flex: 1;
  571. .top{min-height: 60rpx;display: flex;align-items: center;margin-bottom: 10rpx;
  572. }
  573. .imgs{display: flex;flex-wrap: wrap;padding-bottom: 16rpx;
  574. image{width: 180rpx;height: 180rpx;margin-bottom: 24rpx;margin-right: 10rpx;
  575. &:nth-of-type(3n){margin-right: 0;}
  576. &.img1{width: 100%;height: 290rpx;}
  577. }
  578. }
  579. .trsta{
  580. .trstal{width:48rpx ;height: 32rpx;display: flex;align-items: center;justify-content: center;position: relative;margin-left: 20rpx;
  581. .cir{min-width: 20rpx;height: 24rpx;line-height: 24rpx;font-size: 20rpx;color: #FFFFFF;
  582. background: #DF1616;
  583. border: 2rpx solid #FFFFFF;
  584. border-radius: 6rpx;position: absolute;right: -50%;top: -50%;text-align: center;padding: 0 4rpx;box-sizing: border-box;}
  585. }
  586. image{width: 32rpx;height: 32rpx;}
  587. // 分享按钮
  588. .sharebox{position: absolute;left: 0;right: 0;top: 0;bottom: 0;opacity: 0;}
  589. }
  590. }
  591. .delbox{display: flex;align-items: center;font-size: 26rpx;color: #718DD4;
  592. image{width: 24rpx;height: 25rpx ;margin-right: 12rpx;}
  593. }
  594. .trcom{width: 100%;background: #ECECEC;
  595. .trcomz{padding: 24rpx 8rpx 8rpx 24rpx;
  596. .trcomr{display: flex;align-items: center;flex-wrap: wrap;
  597. image{width: 40rpx;height: 40rpx;margin: 0 16rpx 16rpx 0;border-radius: 50%;}
  598. }
  599. }
  600. .trcomline{width: 100%;border-bottom: 2rpx solid #DADADA;}
  601. .trcomp{padding: 24rpx 0 0 24rpx;
  602. .trcompr{padding: 0 24rpx 12rpx 0;border-bottom: 2rpx solid #DADADA;margin-bottom: 12rpx;
  603. &:last-of-type{border-bottom: none;}
  604. .listl{width: 40rpx;height: 40rpx;margin-right:12rpx;border-radius: 50%;flex: 0 0 auto;}
  605. }
  606. }
  607. .trcoml{flex: 0 0 auto;margin-right: 12rpx;width: 40rpx;height: 40rpx;display: flex;align-items: center;
  608. image{width: 26rpx;height: 26rpx;}
  609. }
  610. }
  611. }
  612. </style>