ProjectProgressList.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759
  1. <template>
  2. <el-card class="info-list-card progress_list_card">
  3. <div slot="header" class="flex-r-c">
  4. <span class="card-title"
  5. >关注项目列表<span class="title-tips"
  6. >(可关注 {{ projectAllNum }} 个项目,已关注
  7. <span style="color: #2cb7ca"> {{ projectNum }} </span> 个)</span
  8. ></span
  9. >
  10. <div
  11. class="flex-c-c right follow-manager"
  12. v-if="listState.list.length && !biMode"
  13. >
  14. <el-button @click="goManage" class="unfollow-btn" type="plain"
  15. >批量取消关注30天无更新的项目</el-button
  16. >
  17. </div>
  18. </div>
  19. <Tips tipText="解锁关注更多项目" v-if="!biMode"></Tips>
  20. <div class="info-list" v-loading="listState.loading">
  21. <!-- 工作桌面1.0 删除项目进度悬浮窗 -->
  22. <!-- <PoverTimeLine
  23. v-for="(item, index) in listState.list"
  24. :key="index"
  25. :stepList="item.stepList"
  26. @show="thisAnnouncement(item)">
  27. <template v-slot:content>
  28. <article-item
  29. :class="{ item_class: item.i_apppushunread !== 0 && item.i_apppushunread, visited: item.visited }"
  30. :index="(listState.pageSize * (listState.pageNum - 1)) + index + 1"
  31. :article="sortItemInfo(item)"
  32. @onClick="toDetail(item, index)"
  33. :projectData="projectInfoList">
  34. <span slot="right-time">{{ dateFromNow(item.l_lastpushtime * 1000) }}</span>
  35. </article-item>
  36. </template>
  37. </PoverTimeLine> -->
  38. <article-item
  39. v-for="(item, index) in listState.list"
  40. :key="index"
  41. :class="{
  42. item_class: item.i_apppushunread !== 0 && item.i_apppushunread,
  43. visited: item.visited
  44. }"
  45. :index="listState.pageSize * (listState.pageNum - 1) + index + 1"
  46. :article="sortItemInfo(item)"
  47. @onClick="toDetail(item, index)"
  48. :projectData="projectInfoList"
  49. >
  50. <span slot="right-time">{{ calcTime(item) }}</span>
  51. <!-- bi下显示添加按钮,不显示收藏标签 -->
  52. <button
  53. class="bi-report-inject-button"
  54. :disabled="item.added"
  55. v-if="biMode"
  56. @click="biAddProject(item)"
  57. slot="right-action"
  58. >
  59. {{ item.added ? '已添加' : '添加' }}
  60. </button>
  61. <template #right-handle-container>
  62. <span
  63. class="join-bid"
  64. @click.prevent.stop="joinBidHandle(item)"
  65. v-if="!biMode && item.joinBid !== undefined"
  66. >
  67. <i
  68. class="j-self-icon"
  69. :class="
  70. item.joinBid ? 'icon-canbiao-img-active' : 'icon-canbiao-img'
  71. "
  72. ></i>
  73. {{ item.joinBid ? '终止参标' : '参标' }}
  74. </span>
  75. </template>
  76. </article-item>
  77. <empty v-show="showEmpty && !nullProjectTips" images="jy-back.png">
  78. <div class="flex-c-c center">
  79. <span>暂无项目进度信息,前往招标搜索关注项目</span>
  80. <button class="null_tips_btn" @click="jumpPage" v-if="!biMode">
  81. 添加关注项目
  82. </button>
  83. </div>
  84. </empty>
  85. <empty v-show="nullProjectTips && showEmpty" images="jy-back.png">
  86. <div class="flex-c-c center">
  87. <span>暂无匹配数据</span>
  88. </div>
  89. </empty>
  90. </div>
  91. <div class="el-pagination-container" v-if="listState.total > 0">
  92. <el-pagination
  93. popper-class="pagination-custom-select"
  94. background
  95. layout="prev, pager, next, sizes, jumper"
  96. :current-page="listState.pageNum"
  97. :page-size="listState.pageSize"
  98. :total="listState.total"
  99. @current-change="onPageChange"
  100. :page-sizes="[5, 10, 50, 100]"
  101. :show-confirm-btn="true"
  102. @size-change="onSizeChange"
  103. >
  104. </el-pagination>
  105. </div>
  106. <!-- 参标更新状态弹窗 -->
  107. <BidrenewalDialog ref="BidrenewalDialog"></BidrenewalDialog>
  108. </el-card>
  109. </template>
  110. <script>
  111. import { Pagination, Card, Button } from 'element-ui'
  112. import Tips from '@/components/common/Tips.vue'
  113. import Empty from '@/components/common/Empty.vue'
  114. import ArticleItem from '@/components/article-item/ArticleItem.vue'
  115. import BidrenewalDialog from '@/views/BidrenewalDialog/index.vue'
  116. import {
  117. dateFromNow,
  118. dateFormatter,
  119. replaceKeyword,
  120. scrollTargetView
  121. } from '@/utils/'
  122. import {
  123. getFollowProjectList,
  124. setFollowRemove30Day,
  125. showAnnouncement,
  126. getBiAddedProjects,
  127. addBiProject,
  128. joinBidAction
  129. } from '@/api/modules/'
  130. import { mixinVisited } from '@/utils/mixins/visited'
  131. import { tryCallHooks } from '@jianyu/easy-inject-qiankun'
  132. // import PoverTimeLine from '@/components/time-line/PoverTimeLine.vue'
  133. export default {
  134. name: 'project-list',
  135. mixins: [mixinVisited],
  136. components: {
  137. [Pagination.name]: Pagination,
  138. [Card.name]: Card,
  139. [Button.name]: Button,
  140. ArticleItem,
  141. Tips,
  142. // PoverTimeLine,
  143. Empty,
  144. BidrenewalDialog
  145. },
  146. props: {
  147. biMode: {
  148. type: Boolean,
  149. default: false
  150. },
  151. showMore: {
  152. type: Boolean,
  153. default: false
  154. },
  155. filters: {
  156. type: Object,
  157. default() {
  158. return {
  159. area: '',
  160. time: ''
  161. }
  162. }
  163. },
  164. projectNum: {
  165. type: Number,
  166. default: 0
  167. },
  168. projectAllNum: {
  169. type: Number,
  170. default: 10
  171. },
  172. dataList: {
  173. type: Array,
  174. default: function () {
  175. return []
  176. }
  177. },
  178. areaItem: {
  179. type: String,
  180. default: '全国'
  181. },
  182. nullProjectTips: {
  183. type: Boolean,
  184. default: false
  185. }
  186. },
  187. computed: {
  188. showEmpty() {
  189. return this.listState.list.length === 0 && this.listState.loaded
  190. },
  191. getFilters() {
  192. return this.filters
  193. }
  194. },
  195. data() {
  196. return {
  197. bi: {
  198. loading: false,
  199. addedIds: [] // bi已添加项目列表
  200. },
  201. isAllFirst: false,
  202. listState: {
  203. loaded: true, // 是否已经搜索过
  204. loading: false,
  205. pageNum: 1, // 当前页
  206. pageSize: 10, // 每页多少条数据
  207. total: 0, // 一共多少条数据
  208. list: [] // 查询请求返回的数据
  209. },
  210. thisDataList: [],
  211. activeArea: '',
  212. projectInfoList: [] // 鼠标悬浮项目详细公告
  213. }
  214. },
  215. created() {
  216. // this.doQuery()
  217. this.listState.loading = true
  218. this.listState.loaded = false
  219. setTimeout(() => {
  220. this.listState.loading = false
  221. this.listState.loaded = true
  222. }, 500)
  223. if (this.biMode) {
  224. this.getBiAddedProjects()
  225. }
  226. },
  227. watch: {
  228. dataList(data) {
  229. this.thisDataList = data
  230. this.listState.total = this.thisDataList.length
  231. if (this.listState.total <= this.listState.pageSize) {
  232. this.listState.pageNum = 1
  233. }
  234. let thisList = []
  235. const start = this.listState.pageSize * (this.listState.pageNum - 1)
  236. const end = this.listState.pageSize * this.listState.pageNum
  237. thisList = this.thisDataList.slice(start, end)
  238. this.listState.list = thisList.map((item) => {
  239. const visited = this.pathVisited(
  240. this.createPathItem('/pro_follow_detail/*', `id=${item.sid}`)
  241. )
  242. return {
  243. ...item,
  244. visited
  245. }
  246. })
  247. },
  248. areaItem(name) {
  249. this.activeArea = name
  250. this.listState.pageNum = 1
  251. let thisList = []
  252. const start = this.listState.pageSize * (this.listState.pageNum - 1)
  253. const end = this.listState.pageSize * this.listState.pageNum
  254. thisList = this.thisDataList.slice(start, end)
  255. this.listState.list = thisList.map((item) => {
  256. const visited = this.pathVisited(
  257. this.createPathItem('/pro_follow_detail/*', `id=${item.sid}`)
  258. )
  259. return {
  260. ...item,
  261. visited
  262. }
  263. })
  264. }
  265. },
  266. methods: {
  267. dateFromNow,
  268. goManage() {
  269. setFollowRemove30Day()
  270. .then((res) => {
  271. if (res && res.error_code === 0) {
  272. if (res.data && res.data.flag === 'success') {
  273. this.$emit('showTips', {
  274. message:
  275. res.data.removeNum > 0
  276. ? '已批量取消关注30天无更新的项目'
  277. : '暂无30天无更新的数据可删除'
  278. })
  279. this.$emit('reloadArea')
  280. }
  281. }
  282. this.$emit('reloadData')
  283. // this.doQuery()
  284. })
  285. .catch(() => {
  286. // this.doQuery()
  287. this.$emit('reloadData')
  288. })
  289. },
  290. // 恢复数据至第一次请求的状态(页码等)
  291. resetListState() {
  292. const state = {
  293. loaded: false,
  294. loading: false,
  295. pageNum: 1,
  296. pageSize: 10,
  297. total: 0,
  298. list: []
  299. }
  300. Object.assign(this.listState, state)
  301. },
  302. doQuery(filters) {
  303. this.resetListState()
  304. this.getList(filters)
  305. },
  306. async getList(filters) {
  307. const query = {
  308. pageNum: this.listState.pageNum - 1,
  309. pageSize: this.listState.pageSize
  310. }
  311. if (filters && Object.keys(filters).length > 0) {
  312. Object.keys(filters).forEach((v) => {
  313. if (typeof filters[v] !== 'undefined') {
  314. query[v] = filters[v]
  315. }
  316. })
  317. }
  318. this.listState.loading = true
  319. this.listState.loaded = false
  320. // 判断是否无筛选条件
  321. this.isAllFirst = false
  322. if (query.pagenum === 1 && query.area === '' && query.time === '') {
  323. this.isAllFirst = true
  324. }
  325. const res = await getFollowProjectList(query)
  326. this.listState.loading = false
  327. this.listState.loaded = true
  328. if (res.error_code === 0) {
  329. this.listState.total = res.data.total
  330. if (res.data && Array.isArray(res.data.List)) {
  331. res.data.List.forEach((item) => {
  332. const visited = this.pathVisited(
  333. this.createPathItem('/pro_follow_detail/*', `id=${item.sid}`)
  334. )
  335. this.$set(item, 'visited', visited)
  336. })
  337. }
  338. this.listState.list = res.data.List || []
  339. } else {
  340. this.listState.total = 0
  341. this.listState.list = []
  342. }
  343. this.checkAddedState()
  344. },
  345. toDetail(item) {
  346. const { sid, fid } = item
  347. item.visited = true
  348. item.i_apppushunread = 0
  349. this.pathVisiting(
  350. this.createPathItem('/pro_follow_detail/*', `id=${sid}`)
  351. )
  352. // const link = this.$router.resolve({
  353. // path: '/pro_follow_detail',
  354. // query: {
  355. // sid,
  356. // fid
  357. // }
  358. // })
  359. // window.open(link.href)
  360. const link = `/swordfish/page_big_pc/pro_follow_detail?sid=${sid}&fid=${fid}`
  361. window.open(link)
  362. },
  363. sortItemInfo(item) {
  364. return {
  365. ...item,
  366. type: item.status // 类型
  367. }
  368. },
  369. calcTime(item) {
  370. const minDay = +new Date('2000/01/01')
  371. if (item.l_lastpushtime * 1000 <= minDay) {
  372. return dateFromNow(item.l_createtime * 1000)
  373. } else {
  374. return dateFromNow(item.l_lastpushtime * 1000)
  375. }
  376. },
  377. onPageChange(p) {
  378. scrollTargetView('.info-list')
  379. this.listState.pageNum = p
  380. let thisList = []
  381. const start = this.listState.pageSize * (this.listState.pageNum - 1)
  382. const end = this.listState.pageSize * this.listState.pageNum
  383. thisList = this.thisDataList.slice(start, end)
  384. this.listState.list = thisList
  385. },
  386. onSizeChange(size) {
  387. this.listState.pageNum = 1
  388. this.listState.pageSize = size
  389. let thisList = []
  390. const start = this.listState.pageSize * (this.listState.pageNum - 1)
  391. const end = this.listState.pageSize * this.listState.pageNum
  392. thisList = this.thisDataList.slice(start, end)
  393. this.listState.list = thisList
  394. },
  395. async getBiAddedProjects() {
  396. const { data, error_code: code } = await getBiAddedProjects()
  397. if (code === 0 && Array.isArray(data)) {
  398. this.bi.addedIds = data
  399. this.checkAddedState()
  400. }
  401. },
  402. checkAddedState: function () {
  403. const addedIds = this.bi.addedIds || []
  404. if (!$.isArray(addedIds)) return
  405. if (addedIds.length === 0) return
  406. this.listState.list.forEach((item) => {
  407. const added = addedIds.indexOf(item.sid) !== -1
  408. this.$set(item, 'added', added)
  409. })
  410. },
  411. // 单个添加
  412. biAddProject(item) {
  413. if (item.added) return
  414. const id = item.sid
  415. if (!id) return
  416. this.biBatchAddRequest([id])
  417. },
  418. async biBatchAddRequest(ids) {
  419. if (this.bi.loading) return
  420. this.bi.loading = true
  421. const params = {
  422. info_id: ids.join(','),
  423. source: 3
  424. }
  425. const {
  426. data,
  427. error_code: code,
  428. error_msg: msg
  429. } = await addBiProject(params)
  430. this.bi.loading = false
  431. if (code === 0 && data) {
  432. if (data.status === 1) {
  433. this.$toast('添加成功')
  434. }
  435. this.getBiAddedProjects()
  436. } else {
  437. if (msg) {
  438. this.$toast(msg)
  439. }
  440. }
  441. },
  442. // 鼠标悬浮展示项目公告
  443. thisAnnouncement(itemA) {
  444. if (!itemA.stepList) {
  445. const data = {
  446. sid: itemA.sid
  447. }
  448. showAnnouncement(data).then((res) => {
  449. const thisTag = []
  450. if (res.data.projectInfo.list) {
  451. const list = res.data.projectInfo.list.reverse()
  452. list.forEach((item) => {
  453. // item.s_id = item.s_eid
  454. item.time = dateFormatter(item.l_publishtime * 1000, 'yyyy-MM-dd')
  455. if (item.s_subtype || item.s_toptype) {
  456. item.tags = [item.s_subtype || item.s_toptype]
  457. } else {
  458. item.tags = thisTag
  459. }
  460. item.content = replaceKeyword(
  461. item.s_title,
  462. itemA.title,
  463. `<span class="highlight-text">${itemA.title}</span>`
  464. )
  465. })
  466. this.$set(itemA, 'stepList', list)
  467. } else {
  468. this.$set(itemA, 'stepList', [])
  469. }
  470. })
  471. }
  472. },
  473. jumpPage() {
  474. const url = '/jylab/supsearch/index.html?publishtime=thisyear'
  475. tryCallHooks({
  476. fn: () => {
  477. this.$BRACE.methods.open({
  478. route: {
  479. link: url,
  480. appType: 'iframe'
  481. }
  482. })
  483. },
  484. spareFn: () => {
  485. window.open(url)
  486. }
  487. })
  488. },
  489. // 参标
  490. async joinBidHandle(item) {
  491. if (item.joinBid) {
  492. this.$toast('如需终止参标,需要在详情页进行操作。')
  493. return
  494. }
  495. const params = {
  496. bidIds: item.sid
  497. }
  498. try {
  499. const {
  500. error_code: code,
  501. error_msg: msg,
  502. data
  503. } = await joinBidAction('in', params)
  504. if (code === 0 && data) {
  505. // this.$toast('已参标,请前往我的参标项目列表查看。')
  506. // 拉起参标更新弹窗
  507. this.$refs.BidrenewalDialog.passVisible = true
  508. this.$refs.BidrenewalDialog.setid(item.sid)
  509. this.$refs.BidrenewalDialog.refreshData()
  510. this.$emit('joinBidBack', item)
  511. } else if (code === -1) {
  512. this.$toast(msg || '操作错误,请稍后重试')
  513. }
  514. } catch (e) {
  515. console.warn(e)
  516. this.$toast('操作错误,请稍后重试')
  517. }
  518. }
  519. }
  520. }
  521. </script>
  522. <style lang="scss" scoped>
  523. @include diy-icon('edit', 20, 20);
  524. // card样式重置
  525. ::v-deep {
  526. .el-card__header {
  527. margin: 0 40px;
  528. border-bottom: none;
  529. padding-left: 0;
  530. padding-right: 0;
  531. padding-bottom: 16px;
  532. padding-top: 20px;
  533. }
  534. .el-card__body {
  535. padding: 0 40px 20px 40px;
  536. }
  537. .get-more {
  538. display: flex;
  539. .el-icon-arrow-right {
  540. margin-left: 4px;
  541. order: 2;
  542. }
  543. }
  544. .article-item:hover {
  545. background: #f5f6f7;
  546. box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.05) inset;
  547. }
  548. .article-item:hover .a-i-left {
  549. color: #2cb7ca;
  550. }
  551. .article-item .tags span {
  552. background: #f5f5fb !important;
  553. border: 1px solid #ececec !important;
  554. font-size: 12px;
  555. font-weight: 400;
  556. text-align: center;
  557. color: #686868;
  558. }
  559. .el-icon-jy-time {
  560. display: none;
  561. }
  562. .item_class .a-i-left {
  563. max-width: min-content;
  564. display: flex;
  565. justify-content: flex-start;
  566. align-items: center;
  567. }
  568. .item_class .a-i-left::after {
  569. content: '';
  570. display: block;
  571. width: 8px;
  572. height: 8px;
  573. background: #ff3a20;
  574. border-radius: 50%;
  575. margin-left: 5px;
  576. }
  577. }
  578. .follow-manager {
  579. font-size: 12px;
  580. line-height: 20px;
  581. color: #aaaaaa;
  582. &-button {
  583. border: 1px solid #e0e0e0;
  584. box-sizing: border-box;
  585. border-radius: 6px;
  586. font-size: 13px;
  587. line-height: 20px;
  588. color: #1d1d1d;
  589. padding: 4px 12px;
  590. box-sizing: border-box;
  591. & + span {
  592. margin-top: 4px;
  593. }
  594. }
  595. }
  596. .sub-manager {
  597. display: flex;
  598. align-items: center;
  599. padding: 8px 16px;
  600. font-size: 14px;
  601. line-height: 24px;
  602. color: #1d1d1d;
  603. border-color: #e0e0e0;
  604. &.el-button:focus,
  605. &.el-button:hover {
  606. color: inherit;
  607. background-color: inherit;
  608. }
  609. }
  610. .info-list-card {
  611. .card-title {
  612. font-size: 18px;
  613. color: #1d1d1d;
  614. font-weight: 700;
  615. display: block;
  616. line-height: 34px;
  617. .title-tips {
  618. font-size: 14px;
  619. color: #666666;
  620. font-weight: 400;
  621. }
  622. }
  623. .sub-manager {
  624. float: right;
  625. }
  626. .info-list {
  627. min-height: 300px;
  628. border-top: 1px solid transparent;
  629. position: relative;
  630. }
  631. .add-key-button {
  632. display: flex;
  633. align-items: center;
  634. justify-content: center;
  635. margin-top: 32px;
  636. padding: 8px 16px;
  637. color: #f7f9fa;
  638. border-radius: 6px;
  639. background-color: #2abed1;
  640. cursor: pointer;
  641. .icon-chahao {
  642. margin-right: 4px;
  643. transform: rotate(-45deg);
  644. }
  645. .button-text {
  646. margin-left: 4px;
  647. white-space: nowrap;
  648. }
  649. }
  650. .icon-chahao {
  651. position: relative;
  652. display: inline-block;
  653. width: 14px;
  654. height: 14px;
  655. &:before,
  656. &:after {
  657. position: absolute;
  658. content: '' !important;
  659. background-color: #fff;
  660. top: 50%;
  661. left: 50%;
  662. width: 14px;
  663. height: 2px;
  664. border-radius: 2px;
  665. }
  666. &:before {
  667. transform: translate(-50%, -50%) rotate(45deg);
  668. }
  669. &:after {
  670. transform: translate(-50%, -50%) rotate(-45deg);
  671. }
  672. }
  673. .el-pagination-container.center {
  674. .el-pagination {
  675. left: 50%;
  676. right: unset;
  677. transform: translateX(-50%);
  678. }
  679. }
  680. }
  681. .unfollow-btn {
  682. padding: 9px 16px;
  683. border: 1px solid #2cb7ca;
  684. border-radius: 6px;
  685. font-size: 14px;
  686. font-weight: 400;
  687. text-align: center;
  688. color: #2cb7ca;
  689. line-height: 14px;
  690. }
  691. .unfollow-btn:hover {
  692. background: rgba(44, 183, 202, 0.1);
  693. }
  694. .flex-r-c {
  695. display: flex;
  696. justify-content: space-between;
  697. align-items: center;
  698. padding-top: 10px;
  699. }
  700. .null_tips_btn {
  701. padding: 7px 24px;
  702. background: #2cb7ca;
  703. border-radius: 6px;
  704. font-size: 14px;
  705. color: #fff;
  706. }
  707. .bi-report-inject-button {
  708. display: inline-block;
  709. margin-left: 16px;
  710. border: 1px solid #2cb7ca;
  711. color: #2cb7ca;
  712. background-color: #fff;
  713. padding: 0 6px;
  714. height: 22px;
  715. line-height: 22px;
  716. border-radius: 4px;
  717. font-size: 14px;
  718. text-align: center;
  719. cursor: pointer;
  720. box-sizing: content-box;
  721. min-width: 42px;
  722. }
  723. /* .bi-report-inject-button[disabled] {
  724. opacity: 0.6;
  725. cursor: not-allowed;
  726. } */
  727. .j-self-icon {
  728. display: inline-block;
  729. width: 20px;
  730. height: 20px;
  731. background-position: center;
  732. vertical-align: top;
  733. }
  734. .join-bid {
  735. display: inline-block;
  736. cursor: pointer;
  737. font-size: 14px;
  738. line-height: 22px;
  739. color: #1d1d1d;
  740. .icon-canbiao-img {
  741. background: url(~@/assets/images/icon/canbiao.png) no-repeat center;
  742. background-size: contain;
  743. }
  744. .icon-canbiao-img-active {
  745. background: url(~@/assets/images/icon/canbiao-active.png) no-repeat center;
  746. background-size: contain;
  747. }
  748. }
  749. </style>