index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955
  1. <template>
  2. <view :style="viewColor">
  3. <view v-if="followDetail != null && followDetail" class="main" @click.stop="showManage = false">
  4. <view v-if="followDetail.status != 1" class="approval_status">
  5. <view class="status_count" :class="followDetail.status == 0 ? 'status1' : 'status0'">
  6. <view class="status_title">
  7. <text class="iconfont" :class="(followDetail.status == -1 || followDetail.status == -2) ? 'icon-tishi' : 'icon-shijian'"></text>
  8. <text v-if="followDetail.status == -1" class="title">审核未通过</text>
  9. <text v-if="followDetail.status == -2" class="title">已下架</text>
  10. <text v-if="followDetail.status == 0" class="title">正在审核</text>
  11. </view>
  12. <view v-if="followDetail.status == -1 || followDetail.status == -2" class="status_info">
  13. {{followDetail.refusal}}
  14. </view>
  15. <view v-if="followDetail.status == 0" class="status_info">
  16. 发布的内容审核通过后,将展示在首页!
  17. </view>
  18. </view>
  19. </view>
  20. <view class="tab-cont">
  21. <view class="follow_count">
  22. <view class="list_count">
  23. <view v-if="followDetail.author" class="title">
  24. <view class="author">
  25. <navigator hover-class="none" :url="'/pages/plantGrass/plant_user/index?id='+followDetail.uid">
  26. <image class="picture" :src="followDetail.author.avatar || '/static/images/f.png'"></image>
  27. </navigator>
  28. <view class="name acea-row">
  29. <text>{{followDetail.author.nickname}}</text>
  30. <image v-if="followDetail.author.member" class="level_icon" :src="followDetail.author.member.brokerage_icon" alt="">
  31. </view>
  32. </view>
  33. <view class="author">
  34. <view class="manageCount" v-if="followDetail.is_author">
  35. <view class="follow_btn" @click.stop="showManage=!showManage">管理</view>
  36. <view class="manage" v-show="showManage">
  37. <navigator hover-class="none" :url="'/pages/plantGrass/plant_release/index?id='+id+'&type=1'" class="items">
  38. <text class="iconfont icon-bianji"></text>
  39. <text>编辑</text>
  40. </navigator>
  41. <view class="items" @click.stop="deleteTopic">
  42. <text class="iconfont icon-shanchu3"></text>
  43. <text>删除</text>
  44. </view>
  45. </view>
  46. </view>
  47. <view v-else @click.stop="followAuthor">
  48. <view v-if="!followDetail.is_fans" class="follow_btn focus"><text class="iconfont icon-jiahao2"></text>关注</view>
  49. <view v-else class="follow_btn focused">已关注</view>
  50. </view>
  51. <!-- #ifdef MP -->
  52. <button v-if="followDetail.status == 1" class="time iconfont icon-fenxiang2" open-type="share" hover-class='none'></button>
  53. <!-- #endif -->
  54. <!-- #ifdef APP-PLUS -->
  55. <button v-if="followDetail.status == 1" @click="appShare('WXSceneSession',followDetail.community_id)" class="time iconfont icon-fenxiang2" hover-class='none'></button>
  56. <!-- #endif -->
  57. </view>
  58. </view>
  59. <view class="product">
  60. <productConSwiper :imgUrls="followDetail.image"></productConSwiper>
  61. </view>
  62. <view class="pro_describle">
  63. <view class="mentioned" v-if="followDetail.relevance.length" @click="openMore(followDetail)">
  64. <text class="title">查看TA提到的宝贝({{followDetail.relevance.length}})</text>
  65. <view class="product_more">
  66. <view class="item">
  67. <image v-if="indexn<=3" v-for="(itemn, indexn) in followDetail.relevance" :key="indexn" :src="(itemn.spu&&itemn.spu.image) || itemn.image" class="more_image"></image>
  68. </view>
  69. <text class="iconfont icon-gengduo3"></text>
  70. </view>
  71. </view>
  72. <view class="product_info">
  73. <text class="text">
  74. {{followDetail.content}}
  75. </text>
  76. </view>
  77. <navigator v-if="followDetail.topic" hover-class="none" class="product_cate" :url="'/pages/plantGrass/plant_search_list/index?id='+followDetail.topic.topic_id">
  78. <view>
  79. <text class="icon">#</text><text class="text">{{followDetail.topic.topic_name}}</text>
  80. </view>
  81. </navigator>
  82. <view class="create_time">{{followDetail.create_time}}</view>
  83. </view>
  84. </view>
  85. </view>
  86. <view v-if="community_reply_status == 1" class="commend_list" @click.stop="loseFocus">
  87. <view class="commen_count">评论{{replyData.all == 0 ? '' : replyData.all}}</view>
  88. <block v-if="commList.length > 0">
  89. <view class="common_list" v-for="(item, index) in commList" :key="index">
  90. <view v-if="item.author" @click.stop="toReply(item,index)" class="commen_one">
  91. <image :src="item.author.avatar ? item.author.avatar : '/static/images/f.png'" class="image"></image>
  92. </view>
  93. <view class="info_count">
  94. <view class="info">
  95. <view class="message">
  96. <view v-if="item.author" class="name">{{item.author.nickname}}</view>
  97. <view class="desc" @click.stop="toReply(item,index)">{{item.content}}</view>
  98. <view class="time">{{item.create_time}}</view>
  99. </view>
  100. <view class="like" @click.stop="starComment(item)">
  101. <view class="iconfont" :class="item.relevance_id ? 'icon-yidianzan' : 'icon-dianzan1'"></view>
  102. {{item.count_start}}
  103. </view>
  104. </view>
  105. <view v-if="item.children&&item.children.length > 0" class="reply_count">
  106. <view v-for="(itemn,indexn) in item.children" :key="indexn" class="reply_list">
  107. <view class="item">
  108. <view class="item_count">
  109. <image v-if="itemn.author" class="image" :src="itemn.author.avatar ? itemn.author.avatar : '/static/images/f.png'" @click.stop="toReply(itemn,index)"></image>
  110. <view v-if="itemn.author" class="name_two">{{itemn.author.nickname}}</view>
  111. <view class="desc_two" @click.stop="toReply(itemn,index)">
  112. <text class="reply_user" v-if="itemn.reply">回复 @{{itemn.reply.nickname}} </text>
  113. {{itemn.content}}
  114. </view>
  115. <view class="time_two">{{itemn.create_time}}</view>
  116. </view>
  117. <view class="like_two" @click.stop="starComment(itemn)">
  118. <view class="iconfont":class="itemn.relevance_id ? 'icon-yidianzan' : 'icon-dianzan1'"></view>
  119. {{itemn.count_start}}
  120. </view>
  121. </view>
  122. </view>
  123. </view>
  124. </view>
  125. </view>
  126. <view :hidden="!loading" class="acea-row row-center-wrapper loadingicon">
  127. <text class="iconfont icon-jiazai loading"></text>
  128. </view>
  129. </block>
  130. <view v-if="commList.length == 0 && !loading" class="empty">
  131. <image :src="`${domain}/static/images/no_commen.png`"></image>
  132. <text>暂无评论,快去抢沙发吧~</text>
  133. </view>
  134. <view v-if="followDetail.status == 1" class="release_bar acea-row">
  135. <view class="input_count" :class="{input_reply:content}">
  136. <form @submit="submitComment">
  137. <input type="text" :placeholder="placeholder" placeholder-style="color: #999999; font-size: 26rpx;" v-model="content" :focus="focus" @confirm.stop="submitComment()" cursorSpacing={20}>
  138. </form>
  139. </view>
  140. <view v-if="content">
  141. <button class="send" @click.stop="submitComment">发送</button>
  142. </view>
  143. <view v-else class="input_bar acea-row">
  144. <view class="item acea-row" @click.stop="likeToggle(followDetail.relevance_id)">
  145. <text class="iconfont" :class="followDetail.relevance_id ? 'icon-shoucang1' : 'icon-dianzan'"></text>
  146. <text>{{followDetail.count_start}}</text>
  147. </view>
  148. <view class="item acea-row">
  149. <text class="iconfont icon-pinglun"></text>
  150. <text>{{replyData.all}}</text>
  151. </view>
  152. </view>
  153. </view>
  154. </view>
  155. </view>
  156. </view>
  157. <view v-if="(!followDetail || followDetail == null) && !loadData" class="no_content">
  158. <view class="count">
  159. <image src="../static/images/no_content.png"></image>
  160. <text>内容不存在,可能被删除了哦~</text>
  161. <navigator class="btn" :open-type="open_grass ? 'switchTab' : 'navigate'" url="/pages/plant_grass/index">返回首页</navigator>
  162. </view>
  163. </view>
  164. <!-- 他提到的宝贝弹窗 -->
  165. <mentioned ref="mentioned" v-if="followDetail" @close="close" :list="followDetail.relevance" :uid="followDetail.uid"></mentioned>
  166. <!-- 绑定手机号 -->
  167. <uni-popup ref="bindmobile" type="bottom">
  168. <bindmobile @close="close"></bindmobile>
  169. </uni-popup>
  170. </view>
  171. </template>
  172. <script>
  173. // +----------------------------------------------------------------------
  174. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  175. // +----------------------------------------------------------------------
  176. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  177. // +----------------------------------------------------------------------
  178. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  179. // +----------------------------------------------------------------------
  180. // | Author: CRMEB Team <admin@crmeb.com>
  181. // +----------------------------------------------------------------------
  182. import request from "@/utils/request.js";
  183. import { HTTP_REQUEST_URL } from '@/config/app.js';
  184. import { toLogin } from '@/libs/login.js';
  185. import { getUserInfo } from '@/api/user.js';
  186. import {plantDetailApi, replyLstApi, replyCreateApi, starCommentApi, deletePlantApi, followAuthorApi, graphicStartApi} from "@/api/community";
  187. import { mapGetters } from "vuex";
  188. import shareScence from "@/libs/spread";
  189. import productConSwiper from '@/components/plantConSwiper';
  190. import mentioned from '@/components/mentioned.vue';
  191. import bindmobile from '@/components/bindmobile.vue';
  192. import { openPlantGrass } from "@/config/app.js";
  193. import { configMap } from '@/utils';
  194. const app = getApp();
  195. export default {
  196. components: {
  197. productConSwiper,
  198. mentioned,
  199. bindmobile
  200. },
  201. data() {
  202. return {
  203. domain: HTTP_REQUEST_URL,
  204. open_grass: openPlantGrass,
  205. followDetail: null,
  206. commList: [], //评论列表
  207. moreList: [],
  208. showManage: false,
  209. content: "", //评论内容
  210. id: "",
  211. replyData: {},
  212. userInfo: {},
  213. loadData: false,
  214. loaded: false,
  215. loading: false,
  216. loadTitle: '加载更多',
  217. where:{
  218. page: 1,
  219. limit: 10
  220. },
  221. reply_id: "",
  222. placeholder: "快来说点儿什么吧...",
  223. isChild: false,
  224. index: 0,
  225. currSpid: '',
  226. focus: false,
  227. actionSheetHidden: true,
  228. type: 0
  229. }
  230. },
  231. created() {},
  232. computed: configMap({community_reply_auth:0,community_reply_status:0},mapGetters(['isLogin', 'uid', 'viewColor'])),
  233. watch: {},
  234. onLoad: function(options) {
  235. let that = this
  236. that.id = options.id;
  237. that.type = options.type;
  238. //#ifdef MP
  239. if (options.spid) {
  240. app.globalData.spid = options.spid;
  241. that.currSpid = options.spid
  242. }
  243. shareScence(that.currSpid, that.isLogin)
  244. //#endif
  245. that.getDetail();
  246. that.getReplyList();
  247. },
  248. onShow() {
  249. uni.hideLoading();
  250. },
  251. mounted: function() {},
  252. methods: {
  253. //分享
  254. //#ifdef MP
  255. plantShare(){
  256. let that = this;
  257. if(that.followDetail.status == 1){
  258. uni.showShareMenu({
  259. withShareTicket: true,
  260. menus: ['shareAppMessage','shareTimeline'],
  261. title: that.followDetail.title || '',
  262. imageUrl: that.followDetail.image[0] || '',
  263. path: '/pages/plantGrass/plant_detail/index?id=' + that.id + '&spid=' + that.uid,
  264. })
  265. }else{
  266. uni.hideShareMenu()
  267. }
  268. },
  269. // #endif
  270. // #ifdef APP-PLUS
  271. appShare(scene,id) {
  272. let that = this
  273. uni.showLoading({
  274. title: '加载中',
  275. mask: true
  276. });
  277. let data = this.followDetail;
  278. let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
  279. let curRoute = routes[routes.length - 1].$page.fullPath // 获取当前页面路由,也就是最后一个打开的页面路由
  280. uni.share({
  281. provider: "weixin",
  282. scene: scene,
  283. type: 0,
  284. href: `${HTTP_REQUEST_URL}${curRoute}`,
  285. title: data.title || '',
  286. summary: data.content || '',
  287. imageUrl: data.image[0] || '',
  288. success: function(res) {
  289. uni.showToast({
  290. title: '分享成功',
  291. icon: 'success'
  292. })
  293. uni.hideLoading();
  294. },
  295. fail: function(err) {
  296. uni.hideLoading();
  297. uni.showToast({
  298. title: '分享失败',
  299. icon: 'none',
  300. duration: 2000
  301. })
  302. }
  303. });
  304. },
  305. // #endif
  306. /**
  307. * 获取个人用户信息
  308. */
  309. getUserInfo: function() {
  310. let that = this;
  311. getUserInfo().then(res => {
  312. that.userInfo = res.data;
  313. /*判断是否绑定手机号*/
  314. if(res.data.phone || that.community_reply_auth == 0){
  315. that.createReply()
  316. }else{
  317. that.$refs.bindmobile.open()
  318. }
  319. });
  320. },
  321. /*获取内容详情*/
  322. getDetail(){
  323. let that = this;
  324. if(that.loadData)return
  325. that.loadData = true
  326. uni.showLoading({
  327. title: '加载中',
  328. mask: true
  329. });
  330. plantDetailApi(that.id).then(res => {
  331. that.loadData = false
  332. that.followDetail = res.data
  333. uni.hideLoading()
  334. // #ifdef MP
  335. that.plantShare();
  336. // #endif
  337. }).catch(err => {
  338. that.followDetail = null
  339. that.loadData = false
  340. uni.hideLoading()
  341. return that.$util.Tips({
  342. title: err
  343. });
  344. })
  345. },
  346. /*获取评论*/
  347. getReplyList(){
  348. let that = this;
  349. if (that.loading || that.loaded) return;
  350. that.loading = true;
  351. that.loadTitle = '';
  352. replyLstApi(that.id,that.where).then(res => {
  353. that.loading = false;
  354. that.replyData = res.data
  355. let list = res.data.list;
  356. let commList = that.$util.SplitArray(list, that.commList);
  357. that.loaded = list.length < that.where.limit;
  358. that.loading = false;
  359. that.loadTitle = that.loaded ? '已全部加载' : '加载更多';
  360. that.$set(that, 'commList', commList);
  361. that.$set(that.where, 'page', that.where.page + 1);
  362. }).catch(err => {
  363. that.loading = false;
  364. uni.showToast({
  365. title: err,
  366. icon: 'none'
  367. })
  368. })
  369. },
  370. /*发表评论*/
  371. submitComment(){
  372. let that = this;
  373. if (that.isLogin === false) {
  374. toLogin()
  375. }else{
  376. that.getUserInfo();
  377. }
  378. },
  379. createReply() {
  380. let that = this;
  381. let reply_id = that.reply_id ? that.reply_id : 0
  382. replyCreateApi(that.id,{content: that.content,reply_id: reply_id}).then(res => {
  383. if (res.status === 200 && res.data.status == 1) {
  384. if(that.isChild){
  385. if(that.commList[that.index]['children']){
  386. that.commList[that.index]['children'].push(res.data)
  387. }else{
  388. that.commList[that.index]['children'] = [res.data]
  389. }
  390. }else{
  391. that.commList.unshift(res.data)
  392. }
  393. that.replyData.all++
  394. }
  395. that.$util.Tips({
  396. title: res.message
  397. });
  398. that.loseFocus()
  399. that.content = ""
  400. }).catch(err => {
  401. uni.showToast({
  402. title: err,
  403. icon: 'none'
  404. })
  405. });
  406. },
  407. toReply(item,index){
  408. this.placeholder = '回复:'+item.author.nickname
  409. this.reply_id = item.reply_id
  410. this.isChild = true
  411. this.index = index
  412. this.focus = true
  413. this.content = ""
  414. },
  415. loseFocus(){
  416. this.focus = false;
  417. this.reply_id = 0;
  418. this.placeholder = "快来说点儿什么吧..."
  419. this.isChild = false
  420. },
  421. /*点赞评论*/
  422. starComment(item){
  423. let that = this;
  424. if (that.isLogin === false) {
  425. toLogin()
  426. }else{
  427. let status = item.relevance_id ? 0 : 1
  428. starCommentApi(item.reply_id,{status: status}).then(res => {
  429. if (res.status === 200) {
  430. if(item.relevance_id){
  431. item.count_start--;
  432. that.replyData.start--
  433. item.count_start = item.count_start == 0 ? 0 : item.count_start
  434. that.replyData.start = that.replyData.start == 0 ? 0 : that.replyData.start
  435. item.relevance_id = false
  436. }else{
  437. item.count_start++;
  438. item.relevance_id = true
  439. that.replyData.start++
  440. }
  441. }
  442. that.$util.Tips({
  443. title: res.message
  444. });
  445. }).catch(err => {
  446. uni.showToast({
  447. title: err,
  448. icon: 'none'
  449. })
  450. });
  451. }
  452. },
  453. /*点赞文章*/
  454. likeToggle(id){
  455. if (this.isLogin === false) {
  456. toLogin()
  457. }else{
  458. let status = id ? 0 : 1
  459. graphicStartApi(this.followDetail.community_id,{status: status}).then(res => {
  460. if(id){
  461. this.followDetail.count_start--;
  462. this.followDetail.count_start = this.followDetail.count_start == 0 ? 0 : this.followDetail.count_start
  463. this.followDetail.relevance_id = false
  464. }else{
  465. this.followDetail.count_start++;
  466. this.followDetail.relevance_id = true
  467. }
  468. uni.$emit('startLike', this.followDetail)
  469. });
  470. }
  471. },
  472. // 关注作者
  473. followAuthor: function() {
  474. if (this.isLogin === false) {
  475. toLogin()
  476. }else{
  477. let status = this.followDetail.is_fans == 0 ? 1 : 0
  478. followAuthorApi(this.followDetail.uid,{status:status}).then(res => {
  479. if (res.status === 200) {
  480. this.followDetail.is_fans = this.followDetail.is_fans == 0 ? 1 : 0
  481. }
  482. this.$util.Tips({
  483. title: res.message
  484. });
  485. }).catch(err => {
  486. this.$util.Tips({
  487. title: err
  488. });
  489. })
  490. }
  491. },
  492. // 删除话题
  493. deleteTopic(){
  494. let that = this;
  495. uni.showModal({
  496. content: '确定要删除该话题么?',
  497. success: function(res) {
  498. if(res.confirm) {
  499. deletePlantApi(that.id).then(res => {
  500. if (res.status === 200) {
  501. that.$util.Tips({
  502. title: res.message
  503. });
  504. setTimeout(function() {
  505. uni.redirectTo({
  506. url: '/pages/plantGrass/plant_user/index?id='+that.followDetail.uid
  507. })
  508. }, 1000);
  509. }
  510. })
  511. } else if(res.cancel) {
  512. console.log('用户点击取消');
  513. }
  514. }
  515. });
  516. },
  517. /*查看提到的宝贝*/
  518. openMore(item){
  519. this.$refs.mentioned.showPopup()
  520. },
  521. close(){
  522. this.$refs.mentioned.closePopup()
  523. this.$refs.bindmobile.close()
  524. }
  525. },
  526. onReachBottom() {
  527. this.getReplyList()
  528. },
  529. onPullDownRefresh(){}
  530. }
  531. </script>
  532. <style lang="scss" scoped>
  533. page{
  534. background: #ffffff;
  535. }
  536. .tab-cont{
  537. background: #fff;
  538. border-radius: 16rpx 16rpx 0 0;
  539. }
  540. .approval_status{
  541. padding: 20rpx;
  542. .status_count{
  543. padding: 26rpx 30rpx 20rpx;
  544. border-radius: 10rpx;
  545. .title{
  546. margin-left: 10rpx;
  547. font-size: 28rpx;
  548. font-weight: bold;
  549. }
  550. &.status0{
  551. background: #FDF3F2;
  552. .title{
  553. color: #E93323;
  554. }
  555. }
  556. &.status1{
  557. background: #FFF4EB;
  558. .title{
  559. color: #FC8327;
  560. }
  561. }
  562. .iconfont{
  563. font-size: 30rpx;
  564. }
  565. .icon-shijian{
  566. color: #FC8327;
  567. }
  568. .icon-tishi{
  569. color: #E93323;
  570. }
  571. .status_info{
  572. font-size: 22rpx;
  573. color: #666666;
  574. margin: 10rpx 0 0 36rpx;
  575. }
  576. }
  577. }
  578. .follow_count{
  579. padding: 20rpx;
  580. border-bottom: 1px solid #F5F5F5;
  581. .title{
  582. display: flex;
  583. align-items: center;
  584. justify-content: space-between;
  585. }
  586. .author{
  587. display: flex;
  588. align-items: center;
  589. .picture, uni-image{
  590. width: 78rpx;
  591. height: 78rpx;
  592. border-radius: 100%;
  593. }
  594. .name{
  595. margin-left: 20rpx;
  596. color: #333333;
  597. font-size: 32rpx;
  598. font-weight: bold;
  599. align-items: center;
  600. }
  601. .follow_btn{
  602. margin-right: 24rpx;
  603. width: 112rpx;
  604. display: flex;
  605. text-align: center;
  606. justify-content: center;
  607. line-height: 42rpx;
  608. font-size: 22rpx;
  609. border-radius: 33rpx;
  610. color: #282828;
  611. border: 1px solid #282828;
  612. &.focus{
  613. color: var(--view-theme);
  614. border: 1px solid var(--view-theme);
  615. .iconfont{
  616. font-size: 15rpx;
  617. margin-right: 5rpx;
  618. }
  619. }
  620. &.focused{
  621. background: #EEEEEE;
  622. border: 1px solid #EEEEEE;
  623. color: #999999;
  624. }
  625. }
  626. .level_icon{
  627. width: 34rpx;
  628. height: 32rpx;
  629. margin: 4rpx 0 0 6rpx;
  630. border: none;
  631. }
  632. }
  633. .time{
  634. color: #282828;
  635. font-size: 46rpx;
  636. }
  637. .product{
  638. margin-top: 20rpx;
  639. border-radius: 16rpx;
  640. }
  641. .manageCount{
  642. position: relative;
  643. .manage{
  644. width: 210rpx;
  645. background: #ffffff;
  646. box-shadow: 0 2rpx 15rpx rgba(0, 0, 0, 0.1);
  647. padding: 0 15rpx;
  648. position: absolute;
  649. bottom: -180rpx;
  650. left: -20rpx;
  651. z-index: 10;
  652. border-radius: 16rpx;
  653. &::before{
  654. content: "";
  655. display: inline-block;
  656. width: 26rpx;
  657. height: 26rpx;
  658. background: #ffffff;
  659. transform: rotate(45deg);
  660. position: absolute;
  661. top: -10rpx;
  662. left: 30rpx;
  663. box-shadow: -1rpx -1rpx 1rpx rgba(0, 0, 0, 0.05);
  664. }
  665. .items{
  666. border-bottom: 1px solid #EEEEEE;
  667. color: #282828;
  668. font-size: 26rpx;
  669. padding: 20rpx 0;
  670. display: flex;
  671. align-items: center;
  672. &:last-child{
  673. border-bottom: none;
  674. }
  675. .iconfont{
  676. margin: 0 16rpx 0;
  677. }
  678. }
  679. }
  680. }
  681. }
  682. .pro_describle{
  683. .create_time{
  684. color: #CCCCCC;
  685. font-size: 22rpx;
  686. margin-left: 10rpx;
  687. margin-top: 5rpx;
  688. }
  689. .mentioned{
  690. padding: 20rpx 0;
  691. display: flex;
  692. align-items: center;
  693. justify-content: space-between;
  694. border-bottom: 1px solid #F5F5F5;
  695. .title{
  696. color: #666666;
  697. font-size: 26rpx;
  698. }
  699. }
  700. .product_more{
  701. max-width: 360rpx;
  702. display: flex;
  703. align-items: center;
  704. .more_image{
  705. width: 58rpx;
  706. height: 58rpx;
  707. border-radius: 5rpx;
  708. border: 1px solid #BBBBBB;
  709. margin-right: 12rpx;
  710. }
  711. .iconfont{
  712. color: #CCCCCC;
  713. margin-left: 10rpx;
  714. }
  715. }
  716. .product_info{
  717. line-height: 45rpx;
  718. margin: 20rpx 0;
  719. .text{
  720. font-size: 28rpx;
  721. color: #282828;
  722. text-align: justify;
  723. text-justify: newspaper;
  724. word-break: break-all;
  725. }
  726. .unfold_btn{
  727. margin-left: 30rpx;
  728. font-size: 30rpx;
  729. color: #282828;
  730. font-weight: bold;
  731. }
  732. }
  733. .product_cate{
  734. margin: 20rpx 0;
  735. display: inline-block;
  736. >view{
  737. display: flex;
  738. align-items: center;
  739. background: var(--view-minorColor);
  740. border-radius: 30rpx;
  741. padding: 0 25rpx;
  742. line-height: 56rpx;
  743. height: 56rpx;
  744. color: var(--view-theme);
  745. .text{
  746. font-size: 28rpx;
  747. }
  748. .icon{
  749. font-size: 35rpx;
  750. font-weight: bold;
  751. margin-right: 10rpx;
  752. }
  753. }
  754. }
  755. }
  756. .main_count{
  757. padding: 30rpx 20rpx;
  758. .list{
  759. width: 710rpx;
  760. height: 280rpx;
  761. margin-bottom: 30rpx;
  762. position: relative;
  763. .picture{
  764. width: 710rpx;
  765. height: 280rpx;
  766. border-radius: 16rpx;
  767. }
  768. }
  769. }
  770. .commend_list{
  771. margin-top: 30rpx;
  772. padding: 0 20rpx;
  773. position: relative;
  774. padding-bottom: 120rpx;
  775. .commen_count{
  776. font-size: 26rpx;
  777. color: #282828;
  778. margin: 30rpx 0;
  779. }
  780. .common_list{
  781. position: relative;
  782. padding-left: 94rpx;
  783. .commen_one{
  784. position: absolute;
  785. top: 0;
  786. left: 0;
  787. .image,uni-image{
  788. width: 74rpx;
  789. height: 74rpx;
  790. border-radius: 100%;
  791. }
  792. }
  793. .info_count{
  794. margin-bottom: 20rpx;
  795. }
  796. .info{
  797. position: relative;
  798. padding-right: 90rpx;
  799. }
  800. .name,.name_two{
  801. color: #999999;
  802. font-size: 26rpx;
  803. }
  804. .desc,.desc_two{
  805. color: #282828;
  806. font-size: 28rpx;
  807. margin-top: 10rpx;
  808. display: inline-block;
  809. }
  810. .desc_two{
  811. font-size: 26rpx;
  812. .reply_user{
  813. font-size: 24rpx;
  814. color: #4A8AC9;
  815. margin: 0 6rpx;
  816. }
  817. }
  818. .time,.time_two{
  819. color: #BBBBBB;
  820. font-size: 22rpx;
  821. margin-top: 15rpx;
  822. }
  823. .like,.like_two{
  824. color: #999999;
  825. font-size: 26rpx;
  826. text-align: center;
  827. position: absolute;
  828. top: 0;
  829. right: 0;
  830. width: 75rpx;
  831. .icon-yidianzan{
  832. color: var(--view-theme);
  833. }
  834. }
  835. .reply_list{
  836. margin-top: 20rpx;
  837. .item{
  838. padding-right: 140rpx;
  839. position: relative;
  840. }
  841. .item_count{
  842. position: relative;
  843. padding-left: 56rpx;
  844. .image,un-image{
  845. width: 36rpx;
  846. height: 36rpx;
  847. border-radius: 100%;
  848. position: absolute;
  849. top: 0;
  850. left: 0;
  851. }
  852. }
  853. }
  854. }
  855. }
  856. .no_content,.main{
  857. min-height: 100vh;
  858. background: #fff;
  859. position: relative;
  860. .count{
  861. position: absolute;
  862. text-align: center;
  863. width: 100%;
  864. top: 50%;
  865. margin-top: -300rpx;
  866. image,uni-image{
  867. width: 424rpx;
  868. height: 305rpx;
  869. }
  870. text{
  871. display: block;
  872. color: #999999;
  873. font-size: 26rpx;
  874. }
  875. }
  876. .btn{
  877. width: 440rpx;
  878. text-align: center;
  879. padding: 15rpx 0;
  880. color: var(--view-theme);
  881. border: 1px solid var(--view-theme);
  882. border-radius: 40rpx;
  883. margin: 44rpx auto 0;
  884. font-size: 32rpx;
  885. }
  886. }
  887. .release_bar{
  888. align-items: center;
  889. width: 100%;
  890. background: #ffffff;
  891. padding: 15rpx 20rpx;
  892. position: fixed;
  893. left: 0;
  894. bottom: 0;
  895. z-index: 10;
  896. border-top: 1px solid #F5F5F5;
  897. justify-content: space-between;
  898. .input_count{
  899. width: 530rpx;
  900. background: #F7F7F7;
  901. border-radius: 30rpx;
  902. padding: 12rpx 30rpx;
  903. input{
  904. font-size: 26rpx;
  905. }
  906. }
  907. .input_bar{
  908. align-items: center;
  909. color: #282828;
  910. font-size: 26rpx;
  911. .iconfont{
  912. font-size: 40rpx;
  913. margin-right: 6rpx;
  914. }
  915. .icon-shoucang1{
  916. color: var(--view-theme);
  917. }
  918. .item{
  919. align-items: center;
  920. &:last-child{
  921. margin-left: 25rpx;
  922. }
  923. }
  924. }
  925. .send{
  926. font-size: 26rpx;
  927. color: #ffffff;
  928. padding: 12rpx 45rpx;
  929. background-image: linear-gradient(126deg, var(--view-bntColor21) 0%, var(--view-bntColor22) 100%);
  930. border-radius: 30rpx;
  931. text-align: center;
  932. }
  933. }
  934. .empty{
  935. margin: 130rpx 0 150rpx;
  936. text-align: center;
  937. image,uni-image{
  938. display: inline-block;
  939. width: 414rpx;
  940. height: 305rpx;
  941. }
  942. text{
  943. display: block;
  944. color: #999999;
  945. font-size: 26rpx;
  946. }
  947. }
  948. </style>