reportSearch.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. <template>
  2. <view class="searchTarget-container container">
  3. <view class="searchTarget-header">
  4. <input type="text" placeholder="请输入关键字" placeholder-class="sea_ipt_placeholder" class="sea_ipt" v-model="searchTxt" focus="true" confirm-type="search" @confirm="searchHandle" />
  5. <icon type="search" size="15" class="sea_ico" />
  6. <view class="ipt-right">
  7. <icon type="clear" size="16" color="#E0E0E0" v-show="searchTxt" @click="clearIpt" />
  8. <text class="line">|</text>
  9. <text @click="searchHandle" style="color: #3385ff">搜索</text>
  10. </view>
  11. </view>
  12. <view class="radio-content">
  13. <van-radio-group :value="radioSelect" @change="onChangeRadio" direction="horizontal">
  14. <van-radio icon-size="16" name="1">搜报告</van-radio>
  15. <van-radio icon-size="16" name="2">搜资源包</van-radio>
  16. </van-radio-group>
  17. </view>
  18. <view class="search-cont">
  19. <template v-if="!isResult">
  20. <view class="search-cont-top">
  21. <view class="cont-tit">
  22. <text>热搜关键词:</text>
  23. </view>
  24. <view class="targetList">
  25. <view class="target-item" v-for="(item, index) in hotKeyWord" :key="index" @click="chooseTarget(item.KeyWord)"># {{ item.KeyWord }}</view>
  26. </view>
  27. </view>
  28. <view class="search-cont-top">
  29. <view class="cont-tit">
  30. <text>弘则推荐:</text>
  31. </view>
  32. <view class="targetList">
  33. <view class="target-item" v-for="(item, index) in keywordList" :key="index" @click="chooseTarget(item)"># {{ item }}</view>
  34. </view>
  35. </view>
  36. <view class="search-cont-top" v-if="historySearchList.length">
  37. <view class="cont-tit">
  38. <text>搜索历史:</text>
  39. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/empty_ico.png" class="empty_ico" @click="clearHistory"></image>
  40. </view>
  41. <view class="targetList">
  42. <block v-for="(item, index) in historySearchList" :key="index">
  43. <view v-if="index < 8" class="target-item" @click="chooseTarget(item)"># {{ item }}</view>
  44. </block>
  45. </view>
  46. </view>
  47. </template>
  48. <template v-else>
  49. <block v-if="haveResult">
  50. <view class="content-list" v-if="radioSelect == '2'">
  51. <block v-if="ListHz.length">
  52. <view class="resource">
  53. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/zybico.jpg"></image>
  54. <text>弘则资源包</text>
  55. </view>
  56. <text style="height: 1rpx; background: #ececec"></text>
  57. <view class="list-ui" v-for="item in ListHz" :key="item.IndustrialManagementId" @click="themeDetails(item)">
  58. <view class="item-title">
  59. <text>
  60. {{ item.IndustryName }}
  61. </text>
  62. <view class="publish">
  63. {{ item.PublishDate }}更新
  64. <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
  65. </view>
  66. </view>
  67. <view class="read-more" v-if="item.IndustrialSubjectList">
  68. <text class="text-box text_oneLine" v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId">
  69. {{ val.SubjectName }}
  70. </text>
  71. </view>
  72. </view>
  73. </block>
  74. <block v-if="ListYx.length">
  75. <view class="resource">
  76. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/zybico.jpg"></image>
  77. <text>研选主题</text>
  78. </view>
  79. <text style="height: 1rpx; background: #ececec"></text>
  80. <view class="list-ui" v-for="item in ListYx" :key="item.IndustrialManagementId" @click="themeDetails(item)">
  81. <view class="item-title">
  82. <text>
  83. {{ item.IndustryName }}
  84. </text>
  85. <view class="publish">
  86. {{ item.PublishDate }}更新
  87. <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
  88. </view>
  89. </view>
  90. <view class="read-more" @click="themeDetails(item)" v-if="item.IndustrialSubjectList">
  91. <text class="text-box text_oneLine" v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId">
  92. {{ val.SubjectName }}
  93. </text>
  94. </view>
  95. </view>
  96. </block>
  97. </view>
  98. <view class="content-report" v-if="radioSelect == '1'">
  99. <block v-if="ListHz.length">
  100. <text style="height: 10rpx; background: #ececec"></text>
  101. <view class="resource">
  102. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/report_Hz.png"></image>
  103. <text>弘则报告</text>
  104. </view>
  105. <text style="height: 1rpx; background: #ececec"></text>
  106. <view class="content-item" v-for="item in ListHz" :key="item.ArticleId">
  107. <view class="item-title">
  108. <text style="display: inline" @click="goDetailReport(item)">
  109. {{ item.Title }}
  110. </text>
  111. <text class="item-industry" @click="themeDetails(item)" v-if="item.IndustryName">&nbsp;&nbsp;&nbsp;#{{ item.IndustryName }}</text>
  112. </view>
  113. <view class="item-more">
  114. <text>{{ item.PublishDate }}</text>
  115. <!-- <view class="pv-ollect">
  116. <view>
  117. <image class="pv" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
  118. {{ item.Pv }}
  119. </view>
  120. <view @click="collectClick(item)">
  121. <image v-if="item.IsCollect" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_act.png"></image>
  122. <image v-else src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_ico.png"></image>
  123. {{ item.CollectNum }}人收藏
  124. </view>
  125. </view> -->
  126. </view>
  127. </view>
  128. </block>
  129. <block v-if="ListYx.length">
  130. <view class="resource">
  131. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/report_Yx.png"></image>
  132. <text>研选报告</text>
  133. </view>
  134. <text style="height: 1rpx; background: #ececec"></text>
  135. <view class="content-item" v-for="item in ListYx" :key="item.ArticleId">
  136. <view class="item-user">
  137. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/user_report.png"></image>
  138. <text> {{ item.NickName }}</text>
  139. </view>
  140. <view class="item-title">
  141. <text style="display: inline" @click="goDetailReport(item)">
  142. {{ item.Title }}
  143. </text>
  144. <text class="item-industry" v-if="item.IndustryName" @click="themeDetails(item)">&nbsp;&nbsp;&nbsp;#{{ item.IndustryName }}</text>
  145. </view>
  146. <view class="item-more">
  147. <text>{{ item.PublishDate }}</text>
  148. <view class="pv-ollect">
  149. <view>
  150. <image class="pv" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
  151. {{ item.Pv }}
  152. </view>
  153. <view @click="collectClick(item)">
  154. <image v-if="item.IsCollect" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_act.png"></image>
  155. <image v-else src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_ico.png"></image>
  156. {{ item.CollectNum }}人收藏
  157. </view>
  158. </view>
  159. </view>
  160. </view>
  161. </block>
  162. </view>
  163. </block>
  164. <view class="nodata" v-else>
  165. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_img"></image>
  166. <text>未找到您想搜索的内容</text>
  167. <text> 正式客户可联系销售免费发起新调研主题 </text>
  168. </view>
  169. </template>
  170. </view>
  171. <u-modal
  172. v-model="goFollowShow"
  173. :content-style="{ fontSize: '32rpx' }"
  174. @confirm="goFollowShowBtn"
  175. :show-cancel-button="isCancelBtn"
  176. :confirm-text="confirmText"
  177. @cancel="isCancelBtn = false"
  178. :show-title="false"
  179. :cancel-style="{ borderRight: '1rpx solid #EBEBEB' }"
  180. :confirm-style="{ fontWeight: '700' }"
  181. >
  182. <view class="slot-content">
  183. <rich-text :nodes="accounts"></rich-text>
  184. </view>
  185. </u-modal>
  186. <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
  187. </view>
  188. </template>
  189. <script>
  190. import { Search, Reports, Research, Report } from "@/config/api.js";
  191. import { Debounce, Throttle } from "@/config/util.js";
  192. import freeCharge from "@/components/freeCharge";
  193. let app = getApp({ allowDefault: true });
  194. export default {
  195. data() {
  196. return {
  197. searchTxt: "", //搜索关键字
  198. isResult: false, //显示搜索结果
  199. haveResult: true, //是否有搜索数据
  200. // 历史搜索列表
  201. historySearchList: [],
  202. // 关键字列表
  203. keywordList: [],
  204. targetList: [], //所有指标列表
  205. // 搜索结果列表
  206. resultList: [],
  207. indList: [],
  208. hotKeyWord: [],
  209. radioSelect: "",
  210. ListHz: [],
  211. ListYx: [],
  212. goFollowShow: false,
  213. confirmText: "知道了",
  214. isCancelBtn: false,
  215. accounts: "",
  216. };
  217. },
  218. watch: {
  219. searchTxt(newVal) {
  220. if (newVal.length <= 0) {
  221. this.isResult = false;
  222. }
  223. },
  224. },
  225. components: {
  226. freeCharge,
  227. },
  228. methods: {
  229. async researchHotKeyWord() {
  230. const res = await Research.researchHotKeyWord();
  231. if (res.Ret === 200) {
  232. this.hotKeyWord = res.Data.List || [];
  233. }
  234. },
  235. onChangeRadio(value) {
  236. this.radioSelect = value.detail;
  237. let srt = this.searchTxt.replace(/^\s+|\s+$/g, "");
  238. if (!srt) return this.$util.toast("请输入关键字");
  239. this.dataInit();
  240. this.getDataList();
  241. },
  242. /* 获取关键词 */
  243. getKeyWord() {
  244. Search.getKeys().then((res) => {
  245. if (res.Ret === 200) {
  246. this.keywordList = res.Data.Item.ConfigValue ? res.Data.Item.ConfigValue.split(",") : [];
  247. }
  248. });
  249. },
  250. // 选择历史搜索
  251. chooseTarget(item) {
  252. this.searchTxt = item;
  253. this.SecName = item;
  254. this.resultList = [];
  255. this.indList = [];
  256. if (!this.historySearchList.includes(this.searchTxt)) {
  257. this.historySearchList.unshift(this.searchTxt);
  258. this.$db.set("historySearchListReport", JSON.stringify(this.historySearchList));
  259. }
  260. this.getDataList();
  261. },
  262. // 键盘输入过程中
  263. searchDoing() {
  264. this.isResult = false;
  265. //全部指标列表
  266. let arr = JSON.parse(JSON.stringify(this.targetList));
  267. let filterArr = [];
  268. // // 过滤出符合搜索条件的值
  269. arr.forEach((item, index) => {
  270. if (item.SecName.includes(this.searchTxt)) {
  271. item.SecName = this.join(item.SecName, this.searchTxt);
  272. filterArr.unshift(item);
  273. }
  274. });
  275. this.keywordList = filterArr;
  276. },
  277. // 拼接
  278. join(str, key) {
  279. return str.replace(new RegExp(`${key}`, "g"), `%%${key}%%`).split("%%");
  280. },
  281. // 搜索数据
  282. searchHandle: Debounce(function () {
  283. if (this.searchTxt) {
  284. //添加搜索记录
  285. if (!this.historySearchList.includes(this.searchTxt)) {
  286. this.historySearchList.unshift(this.searchTxt);
  287. this.$db.set("historySearchListReport", JSON.stringify(this.historySearchList));
  288. }
  289. this.resultList = [];
  290. this.indList = [];
  291. this.getDataList();
  292. } else {
  293. this.$util.toast("请输入关键字");
  294. }
  295. }),
  296. // 查找数据
  297. async getDataList() {
  298. this.isResult = true;
  299. const res =
  300. this.radioSelect == 2
  301. ? await Reports.getIndustryAndArticle({
  302. KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
  303. })
  304. : await Reports.getReportSearchReport({
  305. KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
  306. });
  307. if (res.Ret === 200) {
  308. this.ListHz = res.Data.ListHz || [];
  309. this.ListYx = res.Data.ListYx || [];
  310. this.haveResult = this.ListHz.length > 0 || this.ListYx.length > 0;
  311. }
  312. },
  313. // 点击数据列表修改数据
  314. itemClick(item) {
  315. let data = encodeURIComponent(JSON.stringify(item));
  316. uni.navigateTo({
  317. url: "/pages/recordData/recordData?data=" + data,
  318. });
  319. },
  320. /* 表单清空 */
  321. clearIpt() {
  322. this.searchTxt = "";
  323. this.isTabAct = false;
  324. },
  325. /* 历史搜索清空 */
  326. clearHistory() {
  327. this.historySearchList = [];
  328. this.$db.del("historySearchListReport");
  329. },
  330. //去往文章详情页面
  331. goDetailReport(item) {
  332. this.$store.dispatch("checkHandle", "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId);
  333. },
  334. /* 进入详情 校验是否有该品种权限 */
  335. goDetail(item) {
  336. uni.navigateTo({
  337. url: "/reportPages/IndustryReport/IndustryReport?id=" + item.IndustrialManagementId,
  338. });
  339. },
  340. goDetailIndust(id) {
  341. this.$store.dispatch("checkHandle", "/pageMy/reportDetail/reportDetail?id=" + id);
  342. },
  343. //去往主题详情
  344. themeDetails(item) {
  345. console.log(item);
  346. if (item.Source === 1) {
  347. //非严选
  348. this.$store.dispatch("checkHandle", "/reportPages/IndustryReport/IndustryReport?id=" + item.IndustrialManagementId);
  349. } else {
  350. //严选
  351. this.$store.dispatch("checkHandle", "/reportPages/researchTheme/researchTheme?id=" + item.IndustrialManagementId);
  352. }
  353. },
  354. //收藏
  355. async collectClick(item) {
  356. const res = await Report.collectRpt({ ArticleId: item.ArticleId });
  357. if (res.Ret === 200) {
  358. item.IsCollect = !item.IsCollect;
  359. item.IsCollect
  360. ? (item.CollectNum += 1) &&
  361. uni.showToast({
  362. title: "收藏成功",
  363. icon: "none",
  364. duration: 2000,
  365. })
  366. : (item.CollectNum -= 1);
  367. !item.IsCollect &&
  368. uni.showToast({
  369. title: "已取消收藏",
  370. icon: "none",
  371. duration: 2000,
  372. });
  373. }
  374. },
  375. //获取数据的初始值
  376. dataInit() {
  377. this.ListHz = [];
  378. this.ListYx = [];
  379. uni.pageScrollTo({
  380. scrollTop: 0,
  381. duration: 0,
  382. });
  383. },
  384. //点击了去关注
  385. goFollowShowBtn() {
  386. if (this.confirmText == "去关注") {
  387. uni.navigateTo({
  388. url: "/activityPages/accountsOfficial/accountsOfficial",
  389. });
  390. }
  391. this.goFollowShow = false;
  392. },
  393. },
  394. onLoad(options) {
  395. this.radioSelect = options.id == 31 ? "1" : "2";
  396. if (options.text) {
  397. this.searchTxt = options.text;
  398. this.getDataList();
  399. }
  400. // 获取历史搜索记录
  401. if (this.$db.get("historySearchListReport")) {
  402. let historyList = JSON.parse(this.$db.get("historySearchListReport"));
  403. this.historySearchList = historyList;
  404. }
  405. },
  406. onShow() {
  407. this.$store.dispatch("statistics", { PageType: "ReportSearch" });
  408. this.getKeyWord();
  409. this.researchHotKeyWord();
  410. },
  411. /**
  412. * 用户点击分享
  413. */
  414. onShareAppMessage: function (res) {
  415. return {
  416. title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "报告",
  417. path: "/reportPages/reportSearch/reportSearch?text=" + this.searchTxt,
  418. success: (res) => {},
  419. fail: (err) => {},
  420. };
  421. },
  422. };
  423. </script>
  424. <style lang="scss">
  425. .searchTarget-container {
  426. background-color: #f7f7f7;
  427. padding-bottom: 30rpx;
  428. .searchTarget-header {
  429. padding: 0 34rpx;
  430. width: 100%;
  431. background-color: #fff;
  432. position: fixed;
  433. top: 0;
  434. left: 0;
  435. z-index: 99;
  436. padding: 30rpx 0;
  437. display: flex;
  438. justify-content: center;
  439. align-items: center;
  440. .sea_ipt_placeholder {
  441. color: #8d8d8d;
  442. }
  443. .sea_ipt {
  444. width: 682rpx;
  445. height: 70rpx;
  446. line-height: 70rpx;
  447. box-sizing: border-box;
  448. border: 1rpx solid #e5e5e5;
  449. background-color: rgba(245, 245, 245, 0.2);
  450. font-size: 26rpx;
  451. color: #4a4a4a;
  452. padding: 0 180rpx 0 78rpx;
  453. border-radius: 70rpx;
  454. }
  455. .sea_ico {
  456. width: 31rpx;
  457. height: 31rpx;
  458. position: absolute;
  459. left: 68rpx;
  460. top: 50%;
  461. transform: translateY(-50%);
  462. }
  463. .ipt-right {
  464. display: flex;
  465. align-items: center;
  466. position: absolute;
  467. right: 59rpx;
  468. top: 50%;
  469. transform: translateY(-50%);
  470. color: #3385ff;
  471. .line {
  472. margin: 0 21rpx;
  473. color: #e0e0e0;
  474. }
  475. }
  476. }
  477. .radio-content {
  478. width: 100%;
  479. padding-left: 58rpx;
  480. background-color: #fff;
  481. position: fixed;
  482. height: 70rpx;
  483. top: 128rpx;
  484. left: 0;
  485. z-index: 99;
  486. display: flex;
  487. }
  488. .resource {
  489. padding: 0 30rpx;
  490. background-color: #fff;
  491. margin-top: 4rpx;
  492. height: 91rpx;
  493. width: 100%;
  494. display: flex;
  495. align-items: center;
  496. justify-content: center;
  497. color: #333333;
  498. font-size: 30rpx;
  499. image {
  500. width: 34rpx;
  501. height: 36rpx;
  502. margin-right: 10rpx;
  503. }
  504. }
  505. .content-list {
  506. .list-ui {
  507. background-color: #fff;
  508. margin-top: 2rpx;
  509. margin-bottom: 10rpx;
  510. }
  511. .item-title {
  512. display: flex;
  513. align-items: center;
  514. justify-content: space-between;
  515. height: 100rpx;
  516. border-bottom: 1px solid #f6f6f6;
  517. padding: 0 30rpx;
  518. background-color: #fff;
  519. .publish {
  520. display: flex;
  521. align-items: center;
  522. color: #999999;
  523. font-style: 26rpx;
  524. }
  525. }
  526. .read-more {
  527. margin-top: 20rpx;
  528. display: flex;
  529. flex-wrap: wrap;
  530. margin-left: 30rpx;
  531. .text-box {
  532. margin-bottom: 27rpx;
  533. margin-right: 15rpx;
  534. padding: 0;
  535. font-size: 24rpx;
  536. color: #408fff;
  537. width: 216rpx;
  538. height: 46rpx;
  539. line-height: 46rpx;
  540. text-align: center !important;
  541. background: url(~@/static/img/report_bg.png) no-repeat;
  542. background-size: 100% 100%;
  543. text-indent: 0em;
  544. }
  545. }
  546. }
  547. .search-cont {
  548. padding-top: 180rpx;
  549. .search-cont-top {
  550. padding: 0 34rpx 0;
  551. margin-bottom: 10rpx;
  552. padding-top: 20rpx;
  553. &:last-child {
  554. margin-bottom: 0;
  555. }
  556. .cont-tit {
  557. font-size: 32rpx;
  558. margin-bottom: 20rpx;
  559. font-weight: 500;
  560. display: flex;
  561. justify-content: space-between;
  562. .empty_ico {
  563. width: 32rpx;
  564. height: 33rpx;
  565. }
  566. }
  567. .targetList {
  568. display: flex;
  569. flex-wrap: wrap;
  570. font-size: 28rpx;
  571. .target-item {
  572. width: 50%;
  573. margin-bottom: 20rpx;
  574. }
  575. }
  576. }
  577. .result-cont {
  578. padding: 0 34rpx 0;
  579. padding-left: 21rpx;
  580. .result-list {
  581. display: flex;
  582. align-items: center;
  583. color: #333;
  584. padding-bottom: 30rpx;
  585. border-bottom: 1rpx solid #ebedf0;
  586. margin-bottom: 30rpx;
  587. .result_ico {
  588. width: 28rpx;
  589. height: 28rpx;
  590. margin-right: 20rpx;
  591. }
  592. text {
  593. display: inline;
  594. }
  595. .highlight {
  596. color: #3385ff;
  597. }
  598. }
  599. }
  600. .result-data {
  601. // margin-top: 80rpx;
  602. min-height: calc(100vh - 130rpx);
  603. padding: 20rpx 34rpx 40rpx;
  604. display: flex;
  605. background-color: #f7f7f7;
  606. }
  607. }
  608. .content-report {
  609. .content-item {
  610. background-color: #fff;
  611. padding: 35rpx 20rpx 0;
  612. .item-title {
  613. font-weight: 500;
  614. .item-industry {
  615. margin-left: 10rpx;
  616. color: #3385ff;
  617. display: inline-block;
  618. }
  619. }
  620. .item-user {
  621. display: flex;
  622. align-items: center;
  623. color: #999999;
  624. font-size: 28rpx;
  625. margin-bottom: 20rpx;
  626. image {
  627. width: 23rpx;
  628. height: 26rpx;
  629. margin-right: 20rpx;
  630. }
  631. }
  632. .item-more {
  633. display: flex;
  634. justify-content: space-between;
  635. color: #cecece;
  636. margin: 20rpx 0 0;
  637. padding-bottom: 30rpx;
  638. border-bottom: 1rpx solid #ececec;
  639. .pv-ollect {
  640. display: flex;
  641. align-items: center;
  642. width: 40%;
  643. justify-content: space-between;
  644. image {
  645. width: 22rpx;
  646. height: 21rpx;
  647. margin-right: 10rpx;
  648. }
  649. .pv {
  650. height: 16rpx;
  651. }
  652. }
  653. }
  654. }
  655. }
  656. }
  657. </style>