index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. <template>
  2. <view class="container Index-container">
  3. <view class="top-content-box">
  4. <view class="nav-bar-wrap" :style="{ height: navBarStyle.height, paddingTop: navBarStyle.paddingTop, paddingBottom: navBarStyle.paddingBottom }">
  5. <view class="content">
  6. <van-icon name="search" size="28px" class="search-icon" @click="goSearch" />
  7. <view class="top-tabs">
  8. <view :class="['item', item.val == topTabsActive && 'tabs-active']" v-for="(item, index) in topTabBars" :key="item.val" @click="topTabsChange(item.val)">
  9. {{ item.type }}
  10. <block v-if="index === topTabBars.length - 1 && isShowChart">
  11. <image class="limit-img tabs-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/limit_icon.png" mode=""></image>
  12. </block>
  13. <view class="active" v-if="item.val == topTabsActive"></view>
  14. </view>
  15. </view>
  16. </view>
  17. </view>
  18. <view class="tabs-content">
  19. <view class="second-tabs" v-if="topTabsActive == '2' || topTabsActive == '3'">
  20. <view
  21. :class="['item', item.ChartPermissionId == secondActive && 'tabs-active text_twoLine']"
  22. v-for="(item, index) in secondBars"
  23. :key="item.ChartPermissionId"
  24. @click="handleClickTopSub(item)"
  25. >
  26. {{ item.PermissionName }}
  27. <block v-if="index === secondBars.length - 1 && topTabsActive == '2' && isShowResearch">
  28. <image class="limit-img tabs-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/limit_icon.png" mode=""></image>
  29. </block>
  30. <view class="active" v-if="item.ChartPermissionId == secondActive"></view>
  31. </view>
  32. </view>
  33. <block v-if="topTabsActive == '3'">
  34. <view class="children-ul">
  35. <view :class="['chart-children', chartChildrenActive == item.CtagId ? 'children-active' : '']" v-for="item in chartChildren" :key="item.CtagId" @click="handleChartChildren(item)">{{
  36. item.Name
  37. }}</view>
  38. </view>
  39. </block>
  40. </view>
  41. </view>
  42. <block v-if="haveData">
  43. <view class="data-cont">
  44. <view class="report-ul">
  45. <view class="report-item" v-for="(report, index) in dataList" :key="index" v-if="index % 2 === 0" @click="goDetail(report)">
  46. <view class="item-content-img" v-if="report.BodyHtml">
  47. <image :src="report.BodyHtml" mode=""></image>
  48. </view>
  49. <view class="item-content" v-else>{{ report.Body }}</view>
  50. <view class="line"></view>
  51. <text :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']">{{ report.Title }}</text>
  52. <view class="item-abstract text_twoLine" v-if="report.ExpertBackground">
  53. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/fenxi_ico.png" class="report_ico"></image>
  54. {{ report.ExpertBackground }}
  55. </view>
  56. <block v-if="report.Source == 1">
  57. <view class="item-createtime">
  58. <text>{{ report.PublishDate }}</text>
  59. <view class="item-examine" v-if="report.IsResearch">
  60. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
  61. <text>{{ report.Pv }}</text>
  62. </view>
  63. </view>
  64. </block>
  65. <block v-else>
  66. <view class="item-createtime chart-tag">
  67. <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
  68. <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
  69. </view>
  70. <view class="chart-collect" v-if="topTabsActive == 3 && secondActive == 0">
  71. <text class="cancel" @click.stop="myChartIsTop(report.ChartId)">{{ report.IsTop ? "取消置顶" : "置顶" }}</text>
  72. <text class="remove" @click.stop="myChartCollect(report.ChartId)">移除</text>
  73. </view>
  74. <view class="my-chart-collect" v-if="topTabsActive == 3 && secondActive == 0 && report.IsTop"></view>
  75. </block>
  76. </view>
  77. </view>
  78. <view class="report-ul">
  79. <view class="report-item" v-for="(report, index) in dataList" :key="index" v-if="index % 2 !== 0" @click="goDetail(report)">
  80. <view class="item-content-img" v-if="report.BodyHtml">
  81. <image :src="report.BodyHtml"></image>
  82. </view>
  83. <view class="item-content" v-else>{{ report.Body }}</view>
  84. <view class="line"></view>
  85. <text :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']">{{ report.Title }}</text>
  86. <view class="item-abstract text_twoLine" v-if="report.ExpertBackground">
  87. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/fenxi_ico.png" class="report_ico"></image>
  88. {{ report.ExpertBackground }}
  89. </view>
  90. <block v-if="report.Source == 1">
  91. <view class="item-createtime">
  92. <text>{{ report.PublishDate }}</text>
  93. <view class="item-examine" v-if="report.IsResearch">
  94. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
  95. <text>{{ report.Pv }}</text>
  96. </view>
  97. </view>
  98. </block>
  99. <block v-else>
  100. <view class="item-createtime chart-tag">
  101. <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
  102. <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
  103. </view>
  104. <view class="chart-collect" v-if="topTabsActive == 3 && secondActive == 0">
  105. <text class="cancel" @click.stop="myChartIsTop(report.ChartId)">{{ report.IsTop ? "取消置顶" : "置顶" }}</text>
  106. <text class="remove" @click.stop="myChartCollect(report.ChartId)">移除</text>
  107. </view>
  108. <view class="my-chart-collect" v-if="topTabsActive == 3 && secondActive == 0 && report.IsTop"></view>
  109. </block>
  110. </view>
  111. </view>
  112. </view>
  113. <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="pageNum > 1" />
  114. </block>
  115. <view class="nodata" v-else-if="haveData === false" style="padding-top: 400rpx">
  116. <block class="nodata" v-if="!isBindingMobile && secondActive == 0">
  117. <text>请先绑定联系方式</text>
  118. <view class="bind-mobile" @click="bindingMobile">绑定联系方式</view>
  119. </block>
  120. <block v-else>
  121. <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
  122. <text>{{ topTabsActive == 3 && secondActive == 0 ? "暂无收藏的图表" : "暂时没有数据" }}</text>
  123. </block>
  124. </view>
  125. <view class="content-intimate" v-if="reportShow">
  126. <van-transition :show="showTransition" name="fade-right">
  127. <view class="content">
  128. <view @click="goSecretDetail('1')">
  129. <text>报告</text>
  130. <text>精选</text>
  131. </view>
  132. <view class="cont-border" @click="goSecretDetail('2')">
  133. <text>本周研</text>
  134. <text>究汇总</text>
  135. </view>
  136. <view @click="goSecretDetail('3')">
  137. <text>上周纪</text>
  138. <text>要汇总</text>
  139. </view>
  140. </view>
  141. </van-transition>
  142. <image @click="showTransition = !showTransition" src="https://hzstatic.hzinsights.com/cygx/czbk/intimate-icon.png" mode=""></image>
  143. </view>
  144. <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
  145. </view>
  146. </template>
  147. <script>
  148. import { Home, Reports, Chart } from "@/config/api.js";
  149. import { Throttle, deepCopy } from "@/config/util.js";
  150. import freeCharge from "@/components/freeCharge";
  151. let app = getApp();
  152. export default {
  153. data() {
  154. return {
  155. navBarStyle: {
  156. height: 60 + "px",
  157. paddingTop: 40 + "px",
  158. paddingBottom: "20px",
  159. },
  160. topTabBars: [
  161. //一级top
  162. { type: "最新", val: 1 },
  163. { type: "纪要", val: 2 },
  164. { type: "图表", val: 3 },
  165. ],
  166. topTabsActive: 1, //一级top的tabs
  167. secondActive: "", //二级的tabs
  168. secondBars: [], //二级的tabs数组
  169. chartChildren: [], //二级的tabs下的标签
  170. chartChildrenActive: 0,
  171. refresh: false,
  172. pageSize: 10, //条数
  173. pageNum: 1, //页码
  174. haveMore: true, //是否有更多数据
  175. haveData: null, //是否有数据
  176. //数据列表
  177. dataList: [],
  178. status: "loadmore",
  179. loadText: {
  180. loadmore: "上拉加载更多",
  181. loading: "加载中",
  182. nomore: "已经到底了",
  183. },
  184. showTransition: false, //点击绝密后的隐现
  185. reportShow: false, //绝密标签的隐现
  186. isShowChart: false, //图表限免
  187. isShowResearch: false, //研选限免
  188. isBindingMobile: true, //图表我的收藏是否绑定手机号
  189. };
  190. },
  191. components: {
  192. freeCharge,
  193. },
  194. watch: {},
  195. onLoad(optios) {
  196. uni.getSystemInfo({
  197. success: function (res) {
  198. if (res.windowWidth > 700) {
  199. uni.reLaunch({
  200. url: "/pages/pcWebViev/pcWebViev",
  201. });
  202. }
  203. },
  204. });
  205. if (optios.topTabsActive) {
  206. this.topTabsActive = optios.topTabsActive;
  207. this.getTabs();
  208. }
  209. this.initNavBar();
  210. this.reportIsShow();
  211. this.getReportList();
  212. },
  213. onShow() {
  214. //进入页面的记录
  215. this.$store.dispatch("statistics", { PageType: "Activit" });
  216. // #ifdef MP-WEIXIN
  217. uni.hideHomeButton();
  218. // #endif
  219. },
  220. methods: {
  221. //获取胶囊位置
  222. initNavBar() {
  223. let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
  224. this.navBarStyle = {
  225. height: menuButtonInfo.height + menuButtonInfo.top + 8 + "px",
  226. paddingTop: menuButtonInfo.top - 4 + "px",
  227. paddingBottom: "4px",
  228. };
  229. },
  230. //点击顶部一级分类
  231. topTabsChange(name) {
  232. this.topTabsActive = name;
  233. this.chartChildren = [];
  234. this.chartChildrenActive = 0;
  235. this.secondActive = "";
  236. this.pageNum = 1;
  237. this.dataList = [];
  238. uni.pageScrollTo({
  239. scrollTop: 0,
  240. duration: 0,
  241. });
  242. if (this.topTabsActive == "2" || this.topTabsActive == "3") {
  243. this.getTabs();
  244. } else {
  245. this.initData();
  246. }
  247. },
  248. //点击顶部二级分类
  249. handleClickTopSub(item) {
  250. this.secondActive = item.ChartPermissionId;
  251. this.chartChildren = [];
  252. this.chartChildrenActive = 0;
  253. this.childrenChartData();
  254. this.initData();
  255. },
  256. //点击图标的二级分类 处理数据
  257. childrenChartData() {
  258. if (this.topTabsActive == 3 && this.secondActive != 0) {
  259. let arr = [];
  260. this.secondBars.forEach((item) => {
  261. if (this.secondActive === item.ChartPermissionId) {
  262. deepCopy(arr, item.List);
  263. arr.unshift({
  264. CtagId: 0,
  265. Name: "全部",
  266. });
  267. this.chartChildren = arr;
  268. }
  269. });
  270. this.chartChildrenActive = 0;
  271. }
  272. },
  273. //点击图标的三级分类
  274. handleChartChildren(item) {
  275. this.chartChildrenActive = item.CtagId;
  276. this.initData();
  277. },
  278. //点击
  279. initData() {
  280. this.pageNum = 1;
  281. this.dataList = [];
  282. uni.pageScrollTo({
  283. scrollTop: 0,
  284. duration: 0,
  285. });
  286. this.getReportList();
  287. },
  288. /* 获取tab分类 */
  289. getTabs() {
  290. this.secondBars = [];
  291. this.topTabsActive == "2"
  292. ? Home.Tab().then((res) => {
  293. if (res.Ret === 200) {
  294. this.secondBars = res.Data.List;
  295. this.secondActive = this.secondBars[0].ChartPermissionId;
  296. this.getReportList();
  297. }
  298. })
  299. : Chart.getChartPatg().then((res) => {
  300. if (res.Ret === 200) {
  301. let arr = res.Data;
  302. arr.unshift({
  303. ChartPermissionId: 0,
  304. PermissionName: "我的收藏",
  305. });
  306. this.secondBars = arr;
  307. this.secondActive = 0;
  308. this.getReportList();
  309. }
  310. });
  311. },
  312. /* 获取列表 */
  313. async getReportList() {
  314. if (this.topTabsActive == "3" && this.secondActive == 0) {
  315. const res = await Chart.getChartcollection({
  316. PageSize: this.pageSize,
  317. CurrentIndex: this.pageNum,
  318. });
  319. if (res.Ret === 200) {
  320. this.status = this.pageNum < res.Data.Paging.Pages ? "loadmore" : "nomore";
  321. this.isBindingMobile = res.Data.IsBindingMobile;
  322. if (this.pageNum === 1) {
  323. this.dataList = res.Data.List || [];
  324. this.haveData = this.dataList.length > 0 ? true : false;
  325. } else {
  326. this.dataList = this.dataList.concat(res.Data.List);
  327. }
  328. }
  329. } else {
  330. const res = await Home.getList({
  331. PageSize: this.pageSize,
  332. CurrentIndex: this.pageNum,
  333. ChartPermissionId: this.secondActive,
  334. CtagId: this.chartChildrenActive,
  335. ListType: this.topTabsActive,
  336. });
  337. if (res.Ret === 200) {
  338. this.processingData(res);
  339. }
  340. }
  341. },
  342. //处理数据
  343. processingData(res) {
  344. if (!res.Data.HaveResearch) {
  345. this.$util.modalShow("", "您暂无查看研选权限", "", () => {
  346. uni.reLaunch({
  347. url: "/pages/index/index",
  348. });
  349. });
  350. }
  351. this.status = this.pageNum < res.Data.Paging.Pages ? "loadmore" : "nomore";
  352. res.Data.List &&
  353. res.Data.List.forEach((item) => {
  354. if (item.BodyHtml) {
  355. item.BodyHtml = item.BodyHtml.replace(/'\'/g, "");
  356. }
  357. });
  358. if (this.topTabsActive == "2") {
  359. if (this.pageNum === 1) {
  360. this.dataList = res.Data.List || [];
  361. this.haveData = this.dataList.length ? true : false;
  362. } else {
  363. this.dataList = this.dataList.concat(res.Data.List);
  364. }
  365. } else {
  366. if (this.pageNum === 1) {
  367. this.haveData = res.Data.List ? true : res.Data.ChartList ? true : false;
  368. }
  369. if (!res.Data.List) {
  370. this.dataList = this.dataList.concat(res.Data.ChartList);
  371. } else if (!res.Data.ChartList) {
  372. this.dataList = this.dataList.concat(res.Data.List);
  373. } else {
  374. this.dataList.push(res.Data.List.shift());
  375. let newArr = [];
  376. let newArrTwo = [];
  377. for (let i = 0; i < res.Data.List.length; i += 2) {
  378. newArr.push(res.Data.List.slice(i, i + 2));
  379. }
  380. for (let i = 0; i < res.Data.ChartList.length; i += 2) {
  381. newArrTwo.push(res.Data.ChartList.slice(i, i + 2));
  382. }
  383. let arr = [];
  384. newArr.forEach((item, index) => {
  385. if (newArrTwo[index]) {
  386. arr.push(newArrTwo[index], item);
  387. } else {
  388. arr.push(item);
  389. }
  390. });
  391. this.dataList = this.dataList.concat(arr.flat(Infinity));
  392. }
  393. }
  394. if (this.refresh) {
  395. uni.stopPullDownRefresh();
  396. this.refresh = false;
  397. }
  398. },
  399. //我的收藏的删除
  400. myChartCollect(id) {
  401. uni.showModal({
  402. content: "确认要将该图表移除我的收藏吗?",
  403. confirmColor: "#3385FF",
  404. cancelColor: "#606266",
  405. success: async (res) => {
  406. if (res.confirm) {
  407. const res = await Chart.myChartCollect({
  408. ChartId: id,
  409. });
  410. if (res.Ret === 200) {
  411. this.initData();
  412. this.$util.toast("已取消收藏");
  413. }
  414. }
  415. },
  416. });
  417. },
  418. //我的收藏 置顶
  419. async myChartIsTop(id) {
  420. const res = await Chart.myChartTop({
  421. ChartId: id,
  422. });
  423. if (res.Ret === 200) {
  424. this.initData();
  425. this.$util.toast(res.Msg);
  426. }
  427. },
  428. /* 进入详情 校验是否有该品种权限 */
  429. goDetail(item) {
  430. if (item.Source == 2) {
  431. /* 无需授权且已绑定 检验是或否有权限 */
  432. this.$store.dispatch("checkHandle", "/pageMy/chartPage/chartPage?id=" + item.ChartId);
  433. } else {
  434. /* 无需授权且已绑定 检验是或否有权限 */
  435. this.$store.dispatch("checkHandle", "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId);
  436. }
  437. },
  438. /* 搜索 */
  439. goSearch() {
  440. this.$store.dispatch("checkHandle", "/pageMy/search/search");
  441. },
  442. /* 绝密标签的隐现 */
  443. async reportIsShow() {
  444. const res = await Reports.reportIsShow();
  445. if (res.Ret === 200) {
  446. this.reportShow = res.Data.IsShow;
  447. this.isShowChart = res.Data.IsShowChart;
  448. this.isShowResearch = res.Data.IsShowResearch;
  449. }
  450. },
  451. /* 绝密标签点击后的跳转 */
  452. goSecretDetail(type) {
  453. uni.navigateTo({
  454. url: "/reportPages/secretDetails/secretDetails?type=" + type,
  455. });
  456. },
  457. /* 绑定联系方式 */
  458. bindingMobile() {
  459. uni.navigateTo({
  460. url: "/pageMy/login/login",
  461. });
  462. },
  463. },
  464. /* 下拉刷新 */
  465. onPullDownRefresh: Throttle(function () {
  466. this.status = "loadmore";
  467. this.refresh = true;
  468. this.dataList = [];
  469. this.pageNum = 1;
  470. this.getReportList();
  471. }),
  472. // 上拉加载
  473. onReachBottom: Throttle(function () {
  474. if (this.status === "nomore") return;
  475. this.status = "loading";
  476. this.pageNum++;
  477. this.getReportList();
  478. }),
  479. /** 用户点击分享*/
  480. onShareAppMessage: function (res) {
  481. return {
  482. title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "您手边的弘则研究素材检索库",
  483. path: "/pages/index/index?topTabsActive=" + this.topTabsActive,
  484. imageUrl: this.topTabsActive == 1 ? "https://hzstatic.hzinsights.com/cygx/czbk/home_share.png" : "",
  485. success: (res) => {},
  486. fail: (err) => {},
  487. };
  488. },
  489. };
  490. </script>
  491. <style lang="scss">
  492. .Index-container {
  493. background-color: #f7f7f7;
  494. font-size: 30rpx;
  495. .top-content-box {
  496. position: sticky;
  497. top: 0;
  498. left: 0;
  499. width: 100%;
  500. z-index: 999;
  501. }
  502. .nav-bar-wrap {
  503. background-color: #fff;
  504. width: 100%;
  505. .content {
  506. position: relative;
  507. height: 90%;
  508. .search-icon {
  509. text-align: center;
  510. position: absolute;
  511. left: 34rpx;
  512. top: 60%;
  513. transform: translateY(-50%);
  514. }
  515. .top-tabs {
  516. width: 460rpx;
  517. position: absolute;
  518. left: 55%;
  519. top: 60%;
  520. transform: translate(-50%, -50%);
  521. display: flex;
  522. align-items: center;
  523. font-size: 34rpx;
  524. &::-webkit-scrollbar {
  525. width: 0;
  526. height: 0;
  527. display: none;
  528. }
  529. .item {
  530. position: relative;
  531. padding-bottom: 16rpx;
  532. margin-right: 50rpx;
  533. flex-shrink: 0;
  534. .limit-img {
  535. position: absolute;
  536. top: -15rpx;
  537. right: -50rpx;
  538. }
  539. .active {
  540. position: absolute;
  541. left: 0;
  542. bottom: 0;
  543. height: 4rpx;
  544. width: 100%;
  545. border-radius: 1rpx;
  546. background: linear-gradient(90deg, #2e85ff 0%, #7eeaf6 100%);
  547. }
  548. }
  549. .tabs-active {
  550. color: #3385ff;
  551. font-weight: 500;
  552. }
  553. }
  554. }
  555. }
  556. .tabs-content {
  557. padding: 0 30rpx;
  558. background-color: #fff;
  559. .children-ul {
  560. display: flex;
  561. flex-wrap: wrap;
  562. .children-active {
  563. background-color: #3385ff;
  564. color: #fff;
  565. }
  566. }
  567. .chart-children {
  568. padding: 10rpx 20rpx;
  569. margin: 0rpx 20rpx 20rpx 0;
  570. background-color: #f9f9f9;
  571. color: #666666;
  572. font-size: 26rpx;
  573. border-radius: 4rpx;
  574. }
  575. }
  576. .second-tabs {
  577. width: 100%;
  578. display: flex;
  579. overflow-x: auto;
  580. background-color: #fff;
  581. font-size: 30rpx;
  582. color: #999999;
  583. padding: 20rpx 0;
  584. &::-webkit-scrollbar {
  585. width: 0;
  586. height: 0;
  587. display: none;
  588. }
  589. .item {
  590. position: relative;
  591. padding-bottom: 16rpx;
  592. margin-right: 50rpx;
  593. flex-shrink: 0;
  594. .limit-img {
  595. position: absolute;
  596. top: -15rpx;
  597. right: -50rpx;
  598. }
  599. .active {
  600. position: absolute;
  601. left: 0;
  602. bottom: 0;
  603. height: 4rpx;
  604. width: 100%;
  605. border-radius: 1rpx;
  606. background: linear-gradient(90deg, #2e85ff 0%, #7eeaf6 100%);
  607. }
  608. }
  609. .tabs-active {
  610. color: #3385ff;
  611. font-weight: 500;
  612. }
  613. }
  614. .data-cont {
  615. padding: 28rpx 20rpx 10rpx;
  616. display: flex;
  617. .report-ul {
  618. width: 50%;
  619. &:first-child {
  620. margin-right: 10rpx;
  621. }
  622. .report-item {
  623. padding: 20rpx 20rpx 24rpx 20rpx;
  624. margin-bottom: 20rpx;
  625. border-radius: 8rpx;
  626. box-shadow: 0 3rpx 6rpx rgba($color: #000000, $alpha: 0.16);
  627. background: #fff;
  628. position: relative;
  629. overflow: hidden;
  630. .my-chart-collect {
  631. content: "";
  632. display: block;
  633. position: absolute;
  634. top: 0;
  635. left: 0;
  636. width: 0;
  637. height: 0;
  638. border-top: 60rpx solid #3385ff;
  639. border-right: 60rpx solid transparent;
  640. }
  641. .item-content-img {
  642. display: flex;
  643. align-items: center;
  644. width: 330rpx;
  645. margin-left: -6rpx;
  646. margin-bottom: -20rpx;
  647. image {
  648. width: 100%;
  649. height: 262rpx;
  650. vertical-align: middle;
  651. }
  652. }
  653. .item-content {
  654. height: 273rpx;
  655. font-size: 24rpx;
  656. line-height: 40rpx;
  657. color: #7f7f7f;
  658. overflow: hidden;
  659. text-overflow: ellipsis;
  660. display: -webkit-box;
  661. -webkit-line-clamp: 7;
  662. -webkit-box-orient: vertical;
  663. image {
  664. width: 100% !important;
  665. }
  666. }
  667. .line {
  668. margin: 18rpx 0;
  669. content: "";
  670. width: 100%;
  671. height: 1px;
  672. padding: 0 32rpx;
  673. box-sizing: border-box;
  674. background-color: #e5e5e5;
  675. -webkit-transform: scale(1, 0.5);
  676. transform: scale(1, 0.5);
  677. -webkit-transform-origin: center bottom;
  678. transform-origin: center bottom;
  679. }
  680. .item-title {
  681. font-size: 28rpx;
  682. color: #4a4a4a;
  683. margin-bottom: 10rpx;
  684. }
  685. .chart-title {
  686. height: 72rpx;
  687. padding-bottom: 10rpx;
  688. }
  689. .item-abstract {
  690. font-size: 26rpx;
  691. color: #6a6a6a;
  692. margin-bottom: 10rpx;
  693. .report_ico {
  694. width: 32rpx;
  695. height: 26rpx;
  696. margin-right: 20rpx;
  697. display: inline-block;
  698. }
  699. }
  700. .item-createtime {
  701. display: flex;
  702. align-items: center;
  703. justify-content: space-between;
  704. color: #acacac;
  705. font-size: 24rpx;
  706. .item-examine {
  707. display: flex;
  708. align-items: center;
  709. image {
  710. width: 30rpx;
  711. height: 24rpx;
  712. margin: 0 10rpx 0 15rpx;
  713. }
  714. }
  715. }
  716. .chart-tag {
  717. padding-top: 1rpx;
  718. height: 36rpx;
  719. .tag-item {
  720. width: 148rpx;
  721. border-radius: 28rpx;
  722. border: 2rpx solid rgba(49, 137, 255, 1);
  723. overflow: hidden;
  724. color: #3385ff;
  725. text-align: center;
  726. line-height: 30rpx;
  727. }
  728. }
  729. .chart-collect {
  730. margin-top: 20rpx;
  731. padding-top: 20rpx;
  732. padding: 20rpx 0 0 20rpx;
  733. border-top: 1rpx solid #dcdfe6;
  734. display: flex;
  735. align-items: center;
  736. .cancel {
  737. background: #3385ff;
  738. margin-right: 20rpx;
  739. color: #ffffff;
  740. }
  741. .remove {
  742. border: 1px solid #3385ff;
  743. color: #3385ff;
  744. }
  745. text {
  746. width: 130rpx;
  747. height: 46rpx;
  748. line-height: 46rpx;
  749. border-radius: 4rpx;
  750. text-align: center;
  751. font-size: 24rpx;
  752. }
  753. }
  754. }
  755. }
  756. }
  757. .content-intimate {
  758. position: fixed;
  759. display: flex;
  760. align-items: center;
  761. bottom: 96rpx;
  762. right: 41rpx;
  763. height: 156rpx;
  764. .content {
  765. width: 432rpx;
  766. height: 112rpx;
  767. background-color: #fff;
  768. display: flex;
  769. border-radius: 56rpx;
  770. overflow: hidden;
  771. .cont-border {
  772. margin: 0 2rpx;
  773. }
  774. view {
  775. flex: 1;
  776. background-color: #3385ff;
  777. font-size: 30rpx;
  778. color: #fff;
  779. padding-top: 15rpx;
  780. text-align: center;
  781. }
  782. }
  783. image {
  784. width: 156rpx;
  785. height: 100%;
  786. z-index: 99;
  787. }
  788. }
  789. .tabs-img {
  790. width: 46rpx;
  791. height: 26rpx;
  792. }
  793. .nodata {
  794. font-size: 40rpx;
  795. .bind-mobile {
  796. width: 244rpx;
  797. height: 58rpx;
  798. background: #3385ff;
  799. border-radius: 8rpx;
  800. font-size: 28rpx;
  801. line-height: 58rpx;
  802. text-align: center;
  803. color: #fff;
  804. margin: 50rpx auto;
  805. }
  806. }
  807. }
  808. </style>