PushList.vue 80 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533
  1. <template>
  2. <el-card
  3. class="info-list-card"
  4. :class="{ gray: config.gray }"
  5. v-loading="listState.loading"
  6. >
  7. <div slot="header" class="clearfix" v-if="!config.gray">
  8. <span class="card-title">订阅推送</span>
  9. <el-button
  10. v-if="showMButton"
  11. @click="goManage"
  12. class="sub-manager"
  13. type="plain"
  14. icon="el-icon-jy-edit"
  15. >订阅管理
  16. </el-button>
  17. </div>
  18. <div class="collect-list-header" style="" v-else>
  19. <div class="c-tab-container">
  20. <div class="left">
  21. <input
  22. @click="changeAllCheck($event)"
  23. class="has-top custom-checkbox title-text-checkbox"
  24. style="margin: 16px"
  25. type="checkbox"
  26. />
  27. <div class="list-title">订阅信息</div>
  28. <span class="total-count" v-if="checkNum > 0"
  29. >已选<em class="highlight-text">{{ checkNum }}</em
  30. >条信息</span
  31. >
  32. <span class="total-count" v-else
  33. >搜索到<em class="highlight-text">{{ listState.total }}</em
  34. >条信息</span
  35. >
  36. </div>
  37. <div class="right">
  38. <div class="right-line">
  39. <div
  40. class="icon-box"
  41. :class="{ active: !isTable && listModel === 'S' }"
  42. @click="toggleActiveIcon('list', 'S')"
  43. >
  44. <span class="j-icon icon-list"></span>
  45. <span class="icon-text">精简列表</span>
  46. </div>
  47. <div
  48. class="icon-box"
  49. :class="{
  50. active: !isTable && listModel === 'D',
  51. 'icon-have-vip': isFree
  52. }"
  53. @click="toggleActiveIcon('list', 'D')"
  54. >
  55. <span class="j-icon icon-list-detail"></span>
  56. <span class="icon-text">详细列表</span>
  57. </div>
  58. <div
  59. class="icon-box"
  60. :class="{ active: isTable }"
  61. @click="toggleActiveIcon('table')"
  62. >
  63. <span class="j-icon icon-table"></span>
  64. <span class="icon-text">表格</span>
  65. </div>
  66. </div>
  67. <div
  68. class="icon-box right-line"
  69. :class="{ noclick: !listState.total }"
  70. @click="onClickDataExport"
  71. >
  72. <span class="j-icon icon-data-export"></span>
  73. <span class="icon-text">数据导出</span>
  74. </div>
  75. <div class="icon-box" @click="onClickDataCollect($event)">
  76. <span class="j-icon icon-star"></span>
  77. <span class="icon-text">标讯收藏</span>
  78. </div>
  79. <div v-if="vt === 'q'" class="right-line"></div>
  80. <div
  81. v-if="vt === 'q'"
  82. class="icon-box box-distribution"
  83. @click="onClickDataDistribute($event)"
  84. >
  85. <span class="j-icon icon-distribute-gray"></span>
  86. <span class="icon-text">分发</span>
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. <custom-dialog
  92. @close="showDataExportDialog = false"
  93. customClass="export-class-dialog"
  94. width="388px"
  95. :show-footer="false"
  96. :show-close="true"
  97. :visible="showDataExportDialog"
  98. >
  99. <export-tip
  100. @setExport="setExport"
  101. @checkBoxChange="checkBoxChange"
  102. ></export-tip>
  103. </custom-dialog>
  104. <power-person
  105. @filterDiatribution="filterDiatribution"
  106. @manualDiatribution="manualDiatribution"
  107. :userPerson="personList"
  108. :vt="vt"
  109. :list="listState.list"
  110. @addLoadPerson="addLoadPerson"
  111. ref="powerNode"
  112. ></power-person>
  113. <div
  114. class="info-list"
  115. v-show="!isTable"
  116. element-loading-background="rgba(255,255,255, .4)"
  117. element-loading-custom-class="self-export-loading"
  118. v-loading="exportLoading"
  119. >
  120. <article-item
  121. @setShow="setShow(item._id)"
  122. :model="listModel"
  123. :grid-data="statusList"
  124. class="list-item"
  125. v-for="(item, index) in listState.list"
  126. :class="{ visited: item.visited || item.ca_isvisit }"
  127. :key="index"
  128. :index="listState.pageSize * (listState.pageNum - 1) + index + 1"
  129. :article="item"
  130. :config="config"
  131. :vt="vt"
  132. @onCollect="onCollect"
  133. @onClick="toDetail(item)"
  134. @changeCheck="changeCheck($event, item)"
  135. >
  136. <template #right-handle-container>
  137. <span
  138. class="join-bid"
  139. @click.prevent.stop="joinBidHandle(item)"
  140. v-if="item.joinBid !== undefined"
  141. >
  142. <i
  143. class="j-self-icon"
  144. :class="
  145. item.joinBid ? 'icon-canbiao-img-active' : 'icon-canbiao-img'
  146. "
  147. ></i>
  148. <span>{{ item.joinBid ? '终止参标' : '参标' }}</span>
  149. </span>
  150. </template>
  151. </article-item>
  152. <empty v-show="showEmpty">
  153. <div v-if="showManageButton">
  154. <div v-if="isAllFirst && showMButton">
  155. <span>您尚未设置关键词</span>
  156. <div class="add-key-button" @click="goManage">
  157. <!-- <span class="icon-chahao"></span> -->
  158. <span class="button-text">前往订阅设置</span>
  159. </div>
  160. </div>
  161. <div v-else>
  162. <span>对不起,没有匹配到数据,请修改订阅设置</span>
  163. <div class="add-key-button" @click="goManage">
  164. <span class="button-text">前往订阅设置</span>
  165. </div>
  166. </div>
  167. </div>
  168. <div v-else>
  169. <span>暂时无历史推送记录</span>
  170. </div>
  171. </empty>
  172. </div>
  173. <div
  174. class="info-list collect-table-list"
  175. v-show="isTable"
  176. element-loading-background="rgba(255,255,255, .4)"
  177. element-loading-custom-class="self-export-loading"
  178. v-loading="exportLoading"
  179. >
  180. <table class="table" v-show="tableList.length">
  181. <thead class="thead">
  182. <tr>
  183. <td width="48">序号</td>
  184. <td width="315" class="deep-border">项目名称</td>
  185. <td width="84">公告类型</td>
  186. <td width="73" class="deep-border">预算<br />(万元)</td>
  187. <td width="181">招标单位</td>
  188. <td width="103" class="deep-border">开标日期</td>
  189. <td width="174">中标单位</td>
  190. <td width="76" class="deep-border">中标金额<br />(万元)</td>
  191. <td width="103">发布日期</td>
  192. </tr>
  193. </thead>
  194. <tbody>
  195. <tr
  196. v-for="(item, index) in tableList"
  197. :class="{ visited: item.visited }"
  198. :key="index + '_' + item._id"
  199. @click="toDetail(item)"
  200. >
  201. <td width="48">{{ index + 1 }}</td>
  202. <td width="315" class="tt-l" v-html="calcTitle(item, index)"></td>
  203. <td width="84">{{ item.subtype }}</td>
  204. <td width="73" class="tt-r">{{ calcMoney(item.budget) }}</td>
  205. <td width="181" class="tt-l">{{ item.buyer }}</td>
  206. <td width="103">
  207. {{
  208. dateFromNow(
  209. item.bidOpenTime ? item.bidOpenTime * 1000 : null,
  210. 'yyyy-MM-dd HH:mm'
  211. )
  212. }}
  213. </td>
  214. <td width="174" class="tt-l">{{ item.winner }}</td>
  215. <td width="76" class="tt-r">{{ calcMoney(item.bidAmount) }}</td>
  216. <td width="103">{{ dateFromNow(item.publishTime * 1000) }}</td>
  217. </tr>
  218. </tbody>
  219. </table>
  220. <div class="shade_table" v-show="showTableMore">
  221. <div class="more" data-need-bind-phone="" @click="onClickDataExport">
  222. 查看更多&gt;
  223. </div>
  224. </div>
  225. <empty v-show="!tableList.length">
  226. <div v-if="showManageButton">
  227. <div v-if="isAllFirst && showMButton">
  228. <span>您尚未设置关键词</span>
  229. <div class="add-key-button" @click="goManage">
  230. <!-- <span class="icon-chahao"></span> -->
  231. <span class="button-text">前往订阅设置</span>
  232. </div>
  233. </div>
  234. <div v-else>
  235. <span>对不起,没有匹配到数据,请修改订阅设置</span>
  236. <div class="add-key-button" @click="goManage">
  237. <span class="button-text">前往订阅设置</span>
  238. </div>
  239. </div>
  240. </div>
  241. <div v-else>
  242. <span>暂时无历史推送记录</span>
  243. </div>
  244. </empty>
  245. </div>
  246. <div
  247. class="el-pagination-container"
  248. v-if="!isTable && (listState.total > 0 || showMore)"
  249. :class="showMore ? 'center' : ''"
  250. >
  251. <el-pagination
  252. background
  253. popper-class="pagination-custom-select"
  254. layout="prev, pager, next, sizes, jumper"
  255. :current-page="listState.pageNum"
  256. :page-size="listState.pageSize"
  257. :page-sizes="[5, 10, 50, 100]"
  258. :total="listState.total"
  259. :show-confirm-btn="true"
  260. @current-change="onPageChange"
  261. @size-change="onSizeChange"
  262. >
  263. </el-pagination>
  264. <div class="p-right" v-if="showMore && !showEmpty">
  265. <el-button
  266. size="mini"
  267. class="get-more"
  268. type="plain"
  269. icon="el-icon-arrow-right"
  270. @click="getMore"
  271. >更多</el-button
  272. >
  273. </div>
  274. </div>
  275. <div class="sub-collection tags-box" style="display: none">
  276. <div class="tags-inputs">
  277. <div class="tag-input">
  278. <div class="tag-labels"></div>
  279. <input
  280. type="text"
  281. class="clear-input"
  282. maxlength="10"
  283. oninput="this.value=this.value.replace(/\s+/g,'')"
  284. />
  285. <div class="tag-placeholder">新增标签回车保存</div>
  286. </div>
  287. <div class="add-tag-button">添加并使用</div>
  288. </div>
  289. <div class="tags-list clearfix"></div>
  290. <div class="tags-footer">
  291. <div class="tags-button button-confirm">确认添加</div>
  292. <div class="tags-button button-cancel">暂不添加</div>
  293. </div>
  294. </div>
  295. <CustomDialog
  296. title="开通超级订阅"
  297. customClass="open-vip-dialog"
  298. width="380px"
  299. top="30vh"
  300. center
  301. :visible.sync="showVipDialog"
  302. >
  303. 立享列表展示更多公告关键信息,例如:采购单位、中标单位、招标代理机构等,提高公告查看效率
  304. <template #footer>
  305. <button class="action-button confirm" @click="toBuySvip">去开通</button>
  306. <button class="action-button cancel" @click="showVipDialog = false">
  307. 取消
  308. </button>
  309. </template>
  310. </CustomDialog>
  311. <!-- 参标更新状态弹窗 -->
  312. <BidrenewalDialog ref="BidrenewalDialog"></BidrenewalDialog>
  313. <!-- 留资弹窗 -->
  314. <CollectInfo ref="collectRef"></CollectInfo>
  315. </el-card>
  316. </template>
  317. <script>
  318. import { Button, Card, Pagination } from 'element-ui'
  319. import Empty from '@/components/common/Empty.vue'
  320. import { InfoTypeTransform } from '@/utils/format/info-type-transform'
  321. import ArticleItem from '@/components/article-item/ArticleItem.vue'
  322. import powerPerson from '@/components/subscribe-manager/powerPerson.vue'
  323. import CustomDialog from '@/components/dialog/Dialog.vue'
  324. import ExportTip from '@/views/portrayal/components/DataExportTip.vue'
  325. import BidrenewalDialog from '@/views/BidrenewalDialog/index.vue'
  326. import CollectInfo from '@/components/collect-info/CollectInfo.vue'
  327. import {
  328. dateFromNow,
  329. replaceKeyword,
  330. moneyUnit,
  331. openLinkInWorkspace,
  332. scrollTargetView
  333. } from '@/utils/'
  334. import { getEventTarget } from '@/utils/jq-help'
  335. import { mixinVisited } from '@/utils/mixins/visited'
  336. import { tryCallHooks } from '@jianyu/easy-inject-qiankun'
  337. import { mapGetters, mapMutations, mapState } from 'vuex'
  338. import { uniqBy } from 'lodash'
  339. import {
  340. getPushListExport,
  341. getPushList,
  342. bidCollAction,
  343. getBidCollTagList,
  344. saveBidCollAddTag,
  345. createBidTag,
  346. checkBidsIsColl,
  347. setSubscribeInfoRead,
  348. getViewStatus,
  349. getMsgDistributor,
  350. getBidIsJoin,
  351. joinBidAction,
  352. ajaxGetDontPromptAgain,
  353. ajaxSetDontPromptAgain
  354. } from '@/api/modules/'
  355. /* eslint-disable */
  356. var selectedPushList = []
  357. var selectDataIds = []
  358. var getCaIndexIds = []
  359. window.pushIdInfoIdRelationshipMap = {}
  360. export default {
  361. name: 'push-list',
  362. mixins: [mixinVisited],
  363. components: {
  364. [Pagination.name]: Pagination,
  365. [Card.name]: Card,
  366. [Button.name]: Button,
  367. ArticleItem,
  368. powerPerson,
  369. Empty,
  370. CustomDialog,
  371. BidrenewalDialog,
  372. CollectInfo,
  373. ExportTip
  374. },
  375. props: {
  376. showManageButton: {
  377. type: Boolean,
  378. default: false
  379. },
  380. showMore: {
  381. type: Boolean,
  382. default: true
  383. },
  384. subManager: {
  385. type: Boolean,
  386. default: false
  387. },
  388. config: {
  389. type: Object,
  390. default() {
  391. return {
  392. gray: false,
  393. table: false,
  394. collect: false,
  395. push: false
  396. }
  397. }
  398. },
  399. filters: {
  400. type: Object,
  401. default() {
  402. return {
  403. area: '',
  404. selectTime: ''
  405. }
  406. }
  407. },
  408. vt: {
  409. type: String,
  410. default: 'f'
  411. }
  412. },
  413. watch: {
  414. vt: {
  415. handler(newValue, oldValue) {
  416. if (newValue !== oldValue) {
  417. selectDataIds = []
  418. selectedPushList = []
  419. }
  420. },
  421. immediate: true
  422. },
  423. isAllFirst: {
  424. handler() {},
  425. immediate: true
  426. }
  427. },
  428. computed: {
  429. ...mapState({
  430. subscribeListModel: (state) => state.user.subscribeListModel,
  431. subscribeKeyList: (state) => state.user.subscribeKeyList
  432. }),
  433. ...mapGetters('user', ['free']),
  434. isTable() {
  435. return this.showIcon === 'table'
  436. },
  437. showTableMore() {
  438. return this.tableList.length === 20 && this.listState.total > 20
  439. },
  440. showEmpty() {
  441. return this.listState.list.length === 0 && this.listState.loaded
  442. },
  443. getFilters() {
  444. return this.filters
  445. },
  446. showMButton() {
  447. return this.showManageButton && !this.hasKey
  448. },
  449. isFree() {
  450. return this.free
  451. },
  452. listModel() {
  453. if (this.isFree) {
  454. this.setSubscribeListMode('S')
  455. return 'S'
  456. } else {
  457. return this.subscribeListModel
  458. }
  459. },
  460. // 是否有订阅关键词
  461. hasKey() {
  462. return (
  463. Array.isArray(this.subscribeKeyList) && this.subscribeKeyList.length > 0
  464. )
  465. }
  466. },
  467. data() {
  468. return {
  469. showIcon: 'list',
  470. isAllFirst: false,
  471. tableList: [],
  472. listState: {
  473. loaded: true, // 是否已经搜索过
  474. loading: false,
  475. pageNum: 1, // 当前页
  476. pageSize: 50, // 每页多少条数据
  477. total: 0, // 一共多少条数据
  478. list: [] // 查询请求返回的数据
  479. },
  480. nowCheckList: [],
  481. statusList: [],
  482. personList: [],
  483. showVipDialog: false,
  484. checkNum: 0,
  485. showDataExportDialog: false,
  486. exportLoading: false
  487. }
  488. },
  489. created() {
  490. if (!this.config.table) {
  491. this.doQuery(this.filters)
  492. }
  493. const _this = this
  494. // 窗口切换刷新参标数据
  495. document.addEventListener('visibilitychange', function () {
  496. if (document.visibilityState === 'visible') {
  497. _this.getJoinBidInfo()
  498. }
  499. })
  500. },
  501. mounted() {
  502. this.initCollectEvent()
  503. // document.getElementsByClassName(
  504. // "el-pagination__jump"
  505. // )[0].childNodes[0].nodeValue = "跳到";
  506. // console.log(this.$refs.pagination)
  507. },
  508. methods: {
  509. ...mapMutations('user', ['setSubscribeListMode']),
  510. dateFromNow,
  511. // 查看分发状态
  512. async setShow(id) {
  513. const query = {
  514. infoId: id
  515. }
  516. const { data, error_code: code } = await getViewStatus(this.vt, query)
  517. if (code === 0) {
  518. data.forEach((item) => {
  519. if (item.isvisit === 0 || !item.isvisit) {
  520. item.isvisit = '未读'
  521. } else if (item.isvisit === 1) {
  522. item.isvisit = '已读'
  523. }
  524. if (item.visittime) {
  525. item.visittime = `${item.visittime.split(' ')[0]}\n${
  526. item.visittime.split(' ')[1]
  527. }`
  528. } else {
  529. item.visittime = '-'
  530. }
  531. if (item.date) {
  532. item.date = `${item.date.split(' ')[0]}\n${item.date.split(' ')[1]}`
  533. } else {
  534. item.date = '-'
  535. }
  536. })
  537. this.statusList = data
  538. }
  539. },
  540. addLoadPerson() {
  541. // this.getBuyProductList()
  542. },
  543. calcMoney(budget) {
  544. if (budget && budget !== '0') {
  545. // return formatMoney(budget, {
  546. // type: 'number',
  547. // digit: 2,
  548. // level: 1
  549. // })
  550. return moneyUnit(budget, 'fixUnit')
  551. } else {
  552. return ''
  553. }
  554. },
  555. calcTitle(item) {
  556. if (!item.projectName) {
  557. item.projectName = item.title
  558. }
  559. const { projectName, matchKeys } = item
  560. const hightLightedTitle = replaceKeyword(projectName, matchKeys, [
  561. '<span class="highlight-text">',
  562. '</span>'
  563. ])
  564. return `${hightLightedTitle}`
  565. },
  566. async onClickDataExport() {
  567. if (!this.listState.total) return
  568. this.exportLoading = true
  569. const { error_code: code, isPrompt } = await ajaxGetDontPromptAgain()
  570. if (code === 0) {
  571. let countBool = false
  572. if (this.checkNum > 0) {
  573. countBool = this.checkNum >= 20000
  574. } else {
  575. countBool = this.listState.total >= 20000
  576. }
  577. if (isPrompt && countBool) {
  578. this.exportLoading = false
  579. this.showDataExportDialog = isPrompt
  580. } else {
  581. this.toDataExportEvent()
  582. }
  583. } else {
  584. this.toDataExportEvent()
  585. }
  586. },
  587. async checkBoxChange(data) {
  588. const params = {
  589. status: data ? 1 : 0
  590. }
  591. const res = await ajaxSetDontPromptAgain(params)
  592. console.log(res)
  593. },
  594. setExport() {
  595. this.toDataExportEvent()
  596. },
  597. async toDataExportEvent() {
  598. this.getNewData()
  599. let pushSelectedArr = selectedPushList
  600. const query = this.getRequestParam()
  601. if (pushSelectedArr.length > 0) {
  602. query.selectIds = pushSelectedArr.map((v) => v._id).join(',')
  603. query.selectKeys = pushSelectedArr
  604. .map((v) => {
  605. if (Array.isArray(v.matchKeys)) {
  606. return v.matchKeys.join(' ')
  607. } else {
  608. return ''
  609. }
  610. })
  611. .join(',')
  612. }
  613. const res = await getPushListExport(this.vt, query)
  614. this.exportLoading = false
  615. if (res.data) {
  616. const link = `/front/dataExport/toCreateOrderPage/${res.data}`
  617. tryCallHooks({
  618. fn: () => {
  619. this.$BRACE.methods.open({
  620. route: {
  621. link,
  622. openType: '_blank'
  623. }
  624. })
  625. },
  626. spareFn: () => {
  627. // location.href = link
  628. window.open(link)
  629. }
  630. })
  631. }
  632. },
  633. changeCheck(data, article) {
  634. const $ = this.$querySelector.bind(this)
  635. if (selectDataIds.length == 0) {
  636. if (data.check) {
  637. selectedPushList.push(article)
  638. selectDataIds.push(data.id)
  639. getCaIndexIds.push(data.ca_index)
  640. }
  641. }
  642. selectDataIds.forEach((v, i) => {
  643. if (data.check) {
  644. if (!this.contains(selectDataIds, data.id)) {
  645. selectedPushList.push(article)
  646. selectDataIds.push(data.id)
  647. getCaIndexIds.push(data.ca_index)
  648. }
  649. }
  650. })
  651. if (!data.check) {
  652. const index = selectDataIds.indexOf(data.id)
  653. selectedPushList.splice(index, 1)
  654. selectDataIds.splice(index, 1)
  655. getCaIndexIds.splice(index, 1)
  656. $('.custom-checkbox.has-top').prop('checked', false)
  657. }
  658. this.checkNum = selectDataIds ? selectDataIds.length : 0
  659. },
  660. onClickDataCollect(e) {
  661. let _this = this
  662. const $ = this.$querySelector.bind(this)
  663. let nowCheckItems = []
  664. this.getNewData()
  665. $('.custom-checkbox:not(.has-top):checked').each(function (index) {
  666. const tempN = $(this).attr('dataid')
  667. if (!_this.contains(selectDataIds, tempN)) {
  668. selectDataIds.push(tempN)
  669. }
  670. const haschecked = $(this)
  671. .siblings('.a-i-right')
  672. .find('i')
  673. .hasClass('checked')
  674. if (haschecked) {
  675. selectDataIds.splice(index, 1)
  676. }
  677. })
  678. selectDataIds.forEach((item, index) => {
  679. nowCheckItems.push({
  680. id: item,
  681. index: index,
  682. check: $(this).parent().find('.icon-collect.checked').length > 0
  683. })
  684. })
  685. this.onCollect({
  686. list: nowCheckItems,
  687. event: e
  688. })
  689. },
  690. // 手动分发
  691. async onClickDataDistribute(e) {
  692. if (selectDataIds.length === 0) {
  693. this.$toast('尚未选择标讯,请选择', 1000)
  694. return
  695. }
  696. this.$refs.powerNode.titleMsg = '选择接收人员'
  697. this.$refs.powerNode.searchVal = ''
  698. // this.$refs.powerNode.currentIndex = this.currentIndex
  699. this.$refs.powerNode.centerDialogVisible = true
  700. this.$refs.powerNode.selectDataIds = selectDataIds
  701. // if(this.productList.length !== 0) {
  702. // this.$refs.powerNode.empower_count = this.productList[this.proCurrentIndex].empower_count
  703. // }
  704. this.$refs.powerNode.getData('yes')
  705. // let selectAreas = []
  706. // this.listState.list.forEach((v, i) => {
  707. // selectDataIds.forEach((s, index) => {
  708. // if (v._id === s) {
  709. // if (v.area) {
  710. // selectAreas.push(v.area)
  711. // }
  712. // }
  713. // })
  714. // })
  715. // const params = {
  716. // region: selectAreas.toString()
  717. // }
  718. // const res = await getDistributor(this.vt, params)
  719. // if (res.error_code === 0) {
  720. // this.personList = res.data
  721. // }
  722. },
  723. // 手动分发保存
  724. manualDiatribution(data) {
  725. getMsgDistributor({
  726. messageId: getCaIndexIds.toString(),
  727. staffs: data
  728. }).then((res) => {
  729. if (res.error_code === 0) {
  730. if (res.data === 1) {
  731. this.$message({ message: '分发成功', type: 'success' })
  732. } else {
  733. this.$message({ message: res.error_msg, type: 'warning' })
  734. }
  735. } else {
  736. this.$message({ message: res.error_msg, type: 'warning' })
  737. }
  738. })
  739. },
  740. filterDiatribution(data) {
  741. this.filters.staffs = data
  742. this.getList(this.filters)
  743. },
  744. toggleActiveIcon(type, model) {
  745. this.showIcon = type
  746. if (model) {
  747. // 表格没有传model 免费用户可切换
  748. if (this.isFree && model !== 'S') {
  749. // S 为精简列表免费用户可切换
  750. this.showVipDialog = true // 是免费用户并且不是切换的精简或者表格则提醒开通会员
  751. // this.$confirm('立享列表展示更多公告关键信息,例如:采购单位、中标单位、招标代理机构等,提高公告查看效率', '开通超级订阅', {
  752. // confirmButtonText: '去开通',
  753. // cancelButtonText: '取消',
  754. // center: true,
  755. // showClose: false,
  756. // customClass: 'open-vip-dialog',
  757. // appendToBody: false
  758. // }).then(() => {
  759. // window.open('/swordfish/page_big_pc/free/svip/buy')
  760. // }).catch(() => {})
  761. return false
  762. }
  763. // this.listModel = model
  764. this.setSubscribeListMode(model)
  765. }
  766. },
  767. changeAllCheck(e) {
  768. const $ = this.$querySelector.bind(this)
  769. const nowStatus = $(e.target).prop('checked')
  770. $('.custom-checkbox:not(.has-top)').prop('checked', nowStatus)
  771. if (nowStatus) {
  772. let pageCheckList = []
  773. let pageCheckId = []
  774. let pageCaIndex = []
  775. this.listState.list.forEach((v) => {
  776. pageCheckList.push(v)
  777. pageCheckId.push(v._id)
  778. pageCaIndex.push(v.ca_index)
  779. })
  780. if (selectDataIds.length == 0) {
  781. selectedPushList = pageCheckList
  782. selectDataIds = pageCheckId
  783. getCaIndexIds = pageCaIndex
  784. } else {
  785. selectedPushList = selectedPushList.concat(pageCheckList)
  786. selectDataIds = selectDataIds.concat(pageCheckId)
  787. getCaIndexIds = getCaIndexIds.concat(pageCaIndex)
  788. }
  789. // 去重
  790. selectedPushList = uniqBy(selectedPushList, '_id')
  791. selectDataIds = [...new Set(selectDataIds)]
  792. getCaIndexIds = [...new Set(getCaIndexIds)]
  793. } else {
  794. this.listState.list.forEach((v) => {
  795. selectDataIds.forEach((s, index) => {
  796. if (v._id == s) {
  797. selectedPushList.splice(index, 1)
  798. selectDataIds.splice(index, 1)
  799. getCaIndexIds.splice(index, 1)
  800. }
  801. })
  802. })
  803. }
  804. this.checkNum = selectDataIds ? selectDataIds.length : 0
  805. },
  806. getCheckIds(callback) {
  807. const arr = []
  808. const $ = this.$querySelector.bind(this)
  809. $('.custom-checkbox:not(.has-top):checked').each(function () {
  810. const tempN = callback.bind(this)()
  811. arr.push(tempN)
  812. })
  813. return arr
  814. },
  815. goManage() {
  816. this.$emit('goSet')
  817. },
  818. resetAllCheck() {
  819. $('.custom-checkbox.has-top').prop('checked', false)
  820. $('.custom-checkbox:not(.has-top)').prop('checked', false)
  821. selectedPushList = []
  822. selectDataIds = []
  823. getCaIndexIds = []
  824. this.checkNum = 0
  825. },
  826. // 恢复数据至第一次请求的状态(页码等)
  827. resetListState() {
  828. const state = {
  829. loaded: false,
  830. loading: false,
  831. pageNum: 1,
  832. total: 0,
  833. list: []
  834. }
  835. Object.assign(this.listState, state)
  836. this.resetAllCheck()
  837. },
  838. doQuery(filters) {
  839. this.resetListState()
  840. this.getList(filters)
  841. },
  842. formatIndustryMap(item) {
  843. const tempArr = []
  844. Object.keys(item).forEach((v) => {
  845. const tempItem = item[v]
  846. if (Array.isArray(tempItem)) {
  847. tempItem.forEach((vv) => {
  848. tempArr.push(`${v}_${vv}`)
  849. })
  850. }
  851. })
  852. return tempArr
  853. },
  854. getRequestParam(filters) {
  855. if (!filters) {
  856. filters = this.getFilters
  857. }
  858. const query = {
  859. pageNum: this.listState.pageNum,
  860. pageSize: this.listState.pageSize
  861. }
  862. if (query.pageNum === 1) {
  863. query.format = 'table'
  864. }
  865. if (this.getFilters && Object.keys(this.getFilters).length > 0) {
  866. Object.keys(this.getFilters).forEach((v) => {
  867. if (typeof this.getFilters[v] !== 'undefined') {
  868. if (v === 'industry' && typeof filters[v] === 'object') {
  869. if(Object.keys(this.getFilters[v]).length > 0) {
  870. query[v] = this.formatIndustryMap(this.getFilters[v]).join(',')
  871. }
  872. } else if (v === 'buyerClass' && typeof filters[v] === 'object') {
  873. if(Object.keys(this.getFilters[v]).length > 0) {
  874. query[v] = this.formatIndustryMap(this.getFilters[v]).map((v) => v.split('_')[1]).join(',')
  875. }
  876. } else if (v === 'subtype' && typeof filters[v] === 'object') {
  877. const filterSubtype = InfoTypeTransform.mapToList(this.getFilters[v])
  878. if(Object.keys(this.getFilters[v]).length > 0) {
  879. query[v] = filterSubtype.length > 0 ? filterSubtype.join(',') : ''
  880. }
  881. } else {
  882. query[v] = this.getFilters[v]
  883. }
  884. }
  885. })
  886. }
  887. if (filters && Object.keys(filters).length > 0) {
  888. console.log(filters, 'filters')
  889. Object.keys(filters).forEach((v) => {
  890. if (typeof filters[v] !== 'undefined') {
  891. if (v === 'industry' && typeof filters[v] === 'object') {
  892. if(Object.keys(filters[v]).length > 0) {
  893. query[v] = this.formatIndustryMap(filters[v]).join(',')
  894. }
  895. } else if (v === 'buyerClass' && typeof filters[v] === 'object') {
  896. if(Object.keys(filters[v]).length > 0) {
  897. query[v] = this.formatIndustryMap(filters[v]).map((v) => v.split('_')[1]).join(',')
  898. }
  899. } else if (v === 'subtype' && typeof filters[v] === 'object') {
  900. const filterSubtype = InfoTypeTransform.mapToList(filters[v])
  901. if(Object.keys(filters[v]).length > 0) {
  902. query[v] = filterSubtype.length > 0 ? filterSubtype.join(',') : ''
  903. }
  904. } else {
  905. query[v] = filters[v]
  906. }
  907. }
  908. })
  909. }
  910. // 企业订阅-增加参数isEnt
  911. if (this.$route.query?.vt === 'q') {
  912. query.isEnt = true
  913. }
  914. // delete query.item 所有订阅列表都增加item参数
  915. return query
  916. },
  917. async getList(filters) {
  918. let _this = this
  919. const $ = this.$querySelector.bind(this)
  920. const query = this.getRequestParam(filters)
  921. this.listState.loading = true
  922. this.listState.loaded = false
  923. // 判断是否无筛选条件
  924. this.isAllFirst = false
  925. /**
  926. * P330开发时发现遗留缺陷-原来代码为query.time === '',字段key取错,且永远不会等于空(父组件已设置value为'all'),下边判断永远不会生效
  927. * 现修改为:key取query.selectTime value判断不等于'all' || ''
  928. */
  929. if (
  930. query.pageNum === 1 &&
  931. query.area === '' &&
  932. (query.selectTime === '' || query.selectTime === 'all')
  933. ) {
  934. this.isAllFirst = true
  935. }
  936. const res = await getPushList(this.vt, query)
  937. this.listState.loading = false
  938. this.listState.loaded = true
  939. if (filters) {
  940. this.$emit('personCount', filters)
  941. }
  942. if (res.data && Array.isArray(res.data.list)) {
  943. res.data.list.forEach((item) => {
  944. if (item.buyerClass && item.buyerClass !== '其它') {
  945. item.buyerclass = item.buyerClass
  946. }
  947. if (item.subtype) {
  948. item.type = item.subtype
  949. }
  950. if (item.publishTime) {
  951. item.publishtime = item.publishTime
  952. }
  953. const visited = this.pathVisited(
  954. this.createPathItem('/article/content/*.html', `id=${item._id}`)
  955. )
  956. this.$set(item, 'visited', visited)
  957. if (!pushIdInfoIdRelationshipMap[item._id]) {
  958. pushIdInfoIdRelationshipMap[item._id] = item['ca_index']
  959. }
  960. if (item.detail) {
  961. item.detail = item.detail.replace(/<[^>]+>/g, '')
  962. }
  963. })
  964. }
  965. if (query.pageNum === 1 && query.pageSize === 50) {
  966. if (res.data && res.data.list) {
  967. this.tableList = res.data.list.slice(0, 20)
  968. }
  969. }
  970. if (res.data?.count) {
  971. this.listState.total = res.data.count
  972. this.listState.list = res.data.list || []
  973. this.$nextTick(() => {
  974. this.getCollectStatusForList()
  975. // 等dataid赋值完成后再获取值
  976. var $dom = $('.info-list-card .title-text-checkbox[name="bid-list"]')
  977. var selectPageNum = 0
  978. $dom.each(function () {
  979. // 回显列表选中状态
  980. if (!_this.contains(selectDataIds, $(this).attr('dataid'))) {
  981. $(this).prop('checked', false)
  982. }
  983. if (_this.contains(selectDataIds, $(this).attr('dataid'))) {
  984. selectPageNum++
  985. $(this).prop('checked', true)
  986. }
  987. // 全选复选框选中/不选中
  988. if (!$(this).attr('checked')) {
  989. $('.custom-checkbox.has-top').prop('checked', false)
  990. }
  991. if (selectPageNum >= 10) {
  992. $('.custom-checkbox.has-top').prop('checked', true)
  993. }
  994. })
  995. })
  996. } else {
  997. this.listState.total = 0
  998. this.listState.list = []
  999. }
  1000. this.getJoinBidInfo()
  1001. },
  1002. async toDetail(item) {
  1003. const { _id, matchKeys, ca_index } = item
  1004. item.visited = true
  1005. if (this.vt !== 'q' && ca_index) {
  1006. try {
  1007. await setSubscribeInfoRead(this.vt, {
  1008. vsid: ca_index,
  1009. isEnt: this.$route.query?.vt === 'q'
  1010. })
  1011. } catch (error) {
  1012. console.log(error)
  1013. }
  1014. }
  1015. this.pathVisiting(
  1016. this.createPathItem('/article/content/*.html', `id=${_id}`)
  1017. )
  1018. let match = ''
  1019. if (Array.isArray(matchKeys) && matchKeys.length) {
  1020. match = matchKeys.join(' ')
  1021. if (match) {
  1022. match = encodeURIComponent(match)
  1023. }
  1024. }
  1025. // 在工作桌面内打开三级页
  1026. openLinkInWorkspace(true, {
  1027. url: `/article/content/${_id}.html?kds=${match}`,
  1028. newTab: true
  1029. })
  1030. },
  1031. getNewData() {
  1032. const $ = this.$querySelector.bind(this)
  1033. const nowCheckItems = this.getCheckIds(function () {
  1034. return $(this).attr('dataid')
  1035. })
  1036. this.nowCheckList = nowCheckItems
  1037. if (selectDataIds.length === 0) {
  1038. selectDataIds = nowCheckItems
  1039. } else {
  1040. nowCheckItems.forEach((sum, index) => {
  1041. if (!this.contains(selectDataIds, sum)) {
  1042. selectDataIds.push(sum)
  1043. }
  1044. })
  1045. }
  1046. },
  1047. onPageChange(p) {
  1048. this.getNewData()
  1049. this.listState.pageNum = p
  1050. this.getList()
  1051. scrollTargetView('.info-list')
  1052. },
  1053. onSizeChange(size) {
  1054. this.listState.pageSize = size
  1055. this.listState.pageNum = 1
  1056. this.getList()
  1057. },
  1058. contains(arr, ele) {
  1059. if (arr.length == 0) {
  1060. return
  1061. }
  1062. var i = arr.length
  1063. while (i--) {
  1064. if (arr[i] == ele) {
  1065. return true
  1066. }
  1067. }
  1068. return false
  1069. },
  1070. getMore() {
  1071. this.$emit('getMore')
  1072. },
  1073. ajaxForCollectChange(baction, binfo, callback) {
  1074. /*
  1075. 收藏或取消收藏ajax
  1076. params: {
  1077. baction: String, //用户行为:R:移除收藏;C:收藏(默认)非必填
  1078. binfo: Array, // 招标信息数组 必填
  1079. bid: String, // 招标信息加密后id 必填
  1080. }
  1081. 参数示例 (baction=R binfo数组只需要bid即可)onSizeChange
  1082. */
  1083. const params = {
  1084. baction: baction,
  1085. binfo: binfo
  1086. }
  1087. bidCollAction(params).then((r) => {
  1088. callback && callback(r)
  1089. })
  1090. },
  1091. onCollect(data) {
  1092. const $ = this.$querySelector.bind(this)
  1093. let { item, event, list } = data
  1094. const { top, left } = this.calcCardTopLeft(event, !!list)
  1095. let binfo = []
  1096. if (list) {
  1097. binfo = list.filter((v) => !v.check).map((v) => ({ bid: v.id }))
  1098. item = {}
  1099. } else {
  1100. binfo = [{ bid: item._id }]
  1101. }
  1102. var _this = this
  1103. if (binfo.length === 0) {
  1104. return _this.$toast(
  1105. list.length ? '已收藏' : '尚未选择标讯,请选择',
  1106. 800
  1107. )
  1108. }
  1109. if (item.collection) {
  1110. // 单个取消收藏行为
  1111. this.ajaxForCollectChange('R', binfo, function (res) {
  1112. if (res.data) {
  1113. item.collection = 0
  1114. _this.$toast('已取消收藏', 800)
  1115. } else {
  1116. _this.$toast(res.error_msg, 1000)
  1117. }
  1118. })
  1119. } else {
  1120. if (this.isFree) {
  1121. this.$refs.collectRef.isNeedSubmit('article_collection', () => {
  1122. // 将本次收藏的标讯id缓存起来 用于绑定标签时使用
  1123. sessionStorage.setItem('$save-tags-binfo', JSON.stringify(binfo))
  1124. this.ajaxForCollectChange('C', binfo, function (res) {
  1125. if (res.data) {
  1126. _this.$toast('收藏成功', 1500)
  1127. if (list) {
  1128. list
  1129. .filter((v) => !v.check)
  1130. .forEach(function (v) {
  1131. _this.nowCheckList.forEach(function (s, i) {
  1132. if (s === v.id) {
  1133. _this.listState.list[i].collection = 1
  1134. }
  1135. })
  1136. })
  1137. } else {
  1138. item.collection = 1
  1139. }
  1140. _this.getList(_this.filters)
  1141. $('.tags-box')
  1142. .show(function () {
  1143. window.pushListActiveTags = []
  1144. $('.tag-labels').empty()
  1145. $('.clear-input').val('')
  1146. $('.tags-list')
  1147. .find('.tags-item')
  1148. .removeClass('tags-active')
  1149. $('.tag-placeholder').show()
  1150. })
  1151. .css({
  1152. top: top,
  1153. right: 'unset',
  1154. left: left
  1155. })
  1156. window.getUserTags()
  1157. } else {
  1158. if (res.error_msg.indexOf('付费') > -1) {
  1159. _this.$toast(
  1160. '您的标讯收藏上限为5000条,请联系客服人员。',
  1161. 1500
  1162. )
  1163. }
  1164. }
  1165. })
  1166. })
  1167. } else {
  1168. // 将本次收藏的标讯id缓存起来 用于绑定标签时使用
  1169. sessionStorage.setItem('$save-tags-binfo', JSON.stringify(binfo))
  1170. this.ajaxForCollectChange('C', binfo, function (res) {
  1171. if (res.data) {
  1172. _this.$toast('收藏成功', 1500)
  1173. if (list) {
  1174. list
  1175. .filter((v) => !v.check)
  1176. .forEach(function (v) {
  1177. _this.nowCheckList.forEach(function (s, i) {
  1178. if (s === v.id) {
  1179. _this.listState.list[i].collection = 1
  1180. }
  1181. })
  1182. })
  1183. } else {
  1184. item.collection = 1
  1185. }
  1186. _this.getList(_this.filters)
  1187. $('.tags-box')
  1188. .show(function () {
  1189. window.pushListActiveTags = []
  1190. $('.tag-labels').empty()
  1191. $('.clear-input').val('')
  1192. $('.tags-list').find('.tags-item').removeClass('tags-active')
  1193. $('.tag-placeholder').show()
  1194. })
  1195. .css({
  1196. top: top,
  1197. right: 'unset',
  1198. left: left
  1199. })
  1200. window.getUserTags()
  1201. } else {
  1202. if (res.error_msg.indexOf('付费') > -1) {
  1203. _this.$toast('您的标讯收藏上限为5000条,请联系客服人员。', 1500)
  1204. }
  1205. }
  1206. })
  1207. }
  1208. }
  1209. },
  1210. calcCardTopLeft(e, batch) {
  1211. const $ = this.$querySelector.bind(this)
  1212. const containerWidth = this.$el.clientWidth
  1213. const containerHeight = this.$el.clientHeight
  1214. const cardWidth = 332
  1215. const cardHeight = 362
  1216. var top = parseInt($(getEventTarget(e)).position().top) + 30 + 50
  1217. if (batch) {
  1218. top -= 30
  1219. }
  1220. var left = parseInt($(getEventTarget(e)).position().left) - 300
  1221. if (top >= containerHeight - cardHeight) {
  1222. top = containerHeight - cardHeight
  1223. }
  1224. if (left >= containerWidth - cardWidth) {
  1225. left = containerWidth - cardWidth
  1226. }
  1227. left += 'px'
  1228. top += 'px'
  1229. return {
  1230. top,
  1231. left
  1232. }
  1233. },
  1234. initCollectEvent() {
  1235. const _this = this
  1236. const $ = this.$querySelector.bind(this)
  1237. function toastFn(text, duration) {
  1238. _this.$toast(text, duration)
  1239. }
  1240. // 自定义标签
  1241. // 标签输入框事件
  1242. $('.tags-box').click(function (e) {
  1243. e.stopPropagation()
  1244. })
  1245. $('.tag-input').click(function (e) {
  1246. e.stopPropagation()
  1247. $(this).children('.tag-placeholder').hide()
  1248. $(this).children('input').focus()
  1249. })
  1250. // 标签输入框回车事件
  1251. $('.tag-input .clear-input').keydown(function (event) {
  1252. event.stopPropagation()
  1253. if (event.keyCode == 13) {
  1254. if (!$('.tags-box').is(':hidden')) {
  1255. $('.tags-inputs .add-tag-button').trigger('click')
  1256. }
  1257. }
  1258. })
  1259. // 标签输入框失去焦点事件
  1260. $('.tag-input .clear-input').blur(function () {
  1261. if ($('.tag-labels').children().length == 0 && $(this).val() == '') {
  1262. $('.tag-placeholder').show()
  1263. }
  1264. })
  1265. // 添加标签按钮事件
  1266. $('.tags-inputs .add-tag-button').on('click', function () {
  1267. var input = $('.tag-input .clear-input')
  1268. if (input.val().length >= 2 && input.val().length < 11) {
  1269. // ajax提交自定义标签
  1270. addTagsAjax(input.val())
  1271. }
  1272. })
  1273. // 点击确定按钮,绑定标签
  1274. $('.tags-footer .button-confirm').on('click', function () {
  1275. if (!$('.tags-box').is(':hidden')) {
  1276. var lids = ''
  1277. var lname = ''
  1278. $('.tags-item.tags-active').each(function () {
  1279. if ($(this).attr('data-id')) {
  1280. if (lids != '') {
  1281. lids += ','
  1282. }
  1283. if (lname != '') {
  1284. lname += ','
  1285. }
  1286. lids += $(this).attr('data-id')
  1287. lname += $(this).text()
  1288. }
  1289. })
  1290. var params = {
  1291. lids: lids,
  1292. laction: 'S',
  1293. binfo: JSON.parse(sessionStorage.getItem('$save-tags-binfo'))
  1294. }
  1295. // 执行保存绑定标签操作
  1296. if (params.lids !== '') {
  1297. saveChooseTags(params, function () {
  1298. $('.tags-footer .button-cancel').trigger('click')
  1299. })
  1300. }
  1301. }
  1302. })
  1303. $('.tags-footer .button-cancel').on('click', function () {
  1304. $('.tags-box').hide(function () {
  1305. // 标签弹框消失时 清除上次选择的标签分类
  1306. pushListActiveTags = []
  1307. $('.tag-labels').empty()
  1308. $('.clear-input').val('')
  1309. $('.tags-list').find('.tags-item').removeClass('tags-active')
  1310. $('.tag-placeholder').show()
  1311. })
  1312. })
  1313. window.pushListActiveTags = [] // 选中的自定义标签 作为全局变量使用
  1314. // 解绑自定义标签
  1315. function deleteInputTag(item) {
  1316. var index = $(item).parent().attr('data-index')
  1317. var id = $(item).parent().attr('data-id')
  1318. pushListActiveTags.splice(index, 1)
  1319. inputTagList()
  1320. $('.tags-item[data-id="' + id + '"]').removeClass('tags-active')
  1321. }
  1322. function inputTagList() {
  1323. var ht = ''
  1324. $('.tag-labels').html(ht)
  1325. pushListActiveTags.forEach(function (v, i) {
  1326. ht +=
  1327. '<span class="tag-label" data-index=' +
  1328. i +
  1329. ' data-id="' +
  1330. v.lid +
  1331. '">'
  1332. ht += '<em>' + v.lname + '</em>'
  1333. ht += '<i class="tag-close"></i>'
  1334. ht += '</span>'
  1335. })
  1336. $('.tag-labels')
  1337. .html(ht)
  1338. .off('click')
  1339. .on('click', '.tag-close', function (e) {
  1340. const target = getEventTarget(e)
  1341. deleteInputTag(target)
  1342. })
  1343. if ($('.tag-labels').children('.tag-label').length > 0) {
  1344. $('.tag-placeholder').hide()
  1345. }
  1346. checkTagDisabled()
  1347. }
  1348. // 渲染标签列表数据
  1349. function renderTagsList(data) {
  1350. if (data && data.length > 0) {
  1351. var ht = ''
  1352. data.forEach(function (v, i) {
  1353. ht +=
  1354. '<span class="tags-item" data-count=' +
  1355. v.count +
  1356. ' data-id=' +
  1357. v.lid +
  1358. '>' +
  1359. v.lanme +
  1360. '</span>'
  1361. })
  1362. $('.tags-list').html(ht)
  1363. pushListActiveTags.forEach(function (s, j) {
  1364. $('.tags-list .tags-item[data-id="' + s.lid + '"]').addClass(
  1365. 'tags-active'
  1366. )
  1367. })
  1368. $('.tags-item').click(function (e) {
  1369. e.stopPropagation()
  1370. if ($(this).hasClass('disabled')) return
  1371. var id = $(this).attr('data-id')
  1372. var name = $(this).text()
  1373. $(this).toggleClass('tags-active')
  1374. if ($(this).hasClass('tags-active')) {
  1375. pushListActiveTags.push({
  1376. lid: id,
  1377. lname: name
  1378. })
  1379. inputTagList()
  1380. } else {
  1381. var newArr = pushListActiveTags.filter(function (item) {
  1382. return item.lid != id
  1383. })
  1384. pushListActiveTags = newArr
  1385. inputTagList()
  1386. }
  1387. })
  1388. }
  1389. inputTagList()
  1390. }
  1391. // 获取用户自定义标签
  1392. function getUserTags() {
  1393. getBidCollTagList().then((r) => {
  1394. if (r.error_code == 0 && Array.isArray(r.data)) {
  1395. renderTagsList(r.data.reverse())
  1396. }
  1397. })
  1398. }
  1399. window.getUserTags = getUserTags
  1400. /*
  1401. 保存或清除标签 ajax
  1402. params: {
  1403. lids: String 标签id(加密后), 非必传
  1404. lname: String 标签名称, 非必传
  1405. laction: String 用户行为:S添加或绑定标签;D删除标签 非必传
  1406. binfo: Array 招标信息数组(已收藏的招标信息) 非必传
  1407. bid: String 招标信息加密后id 必传
  1408. }
  1409. 1:lids为空;lname不为空;laction=”S”;binfo数组不为空->新增标签并且绑定收藏信息
  1410. 2:lids不为空;laction=”S”;binfo数组不为空->收藏信息绑定标签
  1411. 3:lids不为空;laction=”D”;->删除标签 并解绑收藏的信息
  1412. */
  1413. function saveChooseTags(params, callback) {
  1414. saveBidCollAddTag(params).then((r) => {
  1415. if (r.data) {
  1416. toastFn('标签绑定成功', 1000)
  1417. callback && callback()
  1418. }
  1419. })
  1420. }
  1421. // 新增标签
  1422. function addTagsAjax(name) {
  1423. createBidTag({ name }).then((r) => {
  1424. if (r.data) {
  1425. $('.tag-input .clear-input').val('')
  1426. // 添加标签成功后 绑定标签
  1427. if (pushListActiveTags.length < 3) {
  1428. pushListActiveTags.push({
  1429. lid: r.data,
  1430. lname: name
  1431. })
  1432. }
  1433. getUserTags()
  1434. } else {
  1435. // toastFn(r.error_msg, 1000)
  1436. toastFn('标签已经存在,无需添加', 1000)
  1437. }
  1438. })
  1439. }
  1440. function checkTagDisabled() {
  1441. if (pushListActiveTags.length >= 3) {
  1442. // 禁用标签
  1443. $('.tags-list')
  1444. .find('.tags-item:not(.tags-active)')
  1445. .addClass('disabled')
  1446. } else {
  1447. // 解除禁用
  1448. $('.tags-list').find('.disabled').removeClass('disabled')
  1449. }
  1450. }
  1451. getUserTags()
  1452. },
  1453. getCollectStatusForList() {
  1454. const $ = this.$querySelector.bind(this)
  1455. // 获取当前页信息流收藏状态
  1456. function getBidIsColl() {
  1457. var bids = ''
  1458. var dataId = ''
  1459. // 区分标题搜索和全文搜索收藏
  1460. var $dom = $('.info-list-card .title-text-checkbox[name="bid-list"]')
  1461. $dom.each(function () {
  1462. if ($(this).attr('dataid')) {
  1463. dataId = $(this).attr('dataid')
  1464. if (bids != '') {
  1465. bids += ','
  1466. }
  1467. bids += dataId
  1468. }
  1469. })
  1470. checkBidsIsColl({ bids: bids }).then((r) => {
  1471. if (r.data) {
  1472. var data = r.data
  1473. $('.icon-collect').removeClass('checked')
  1474. data.forEach(function (item, index) {
  1475. $('.icon-collect[dataid="' + item + '"]').addClass('checked')
  1476. })
  1477. }
  1478. })
  1479. }
  1480. getBidIsColl()
  1481. },
  1482. toBuySvip() {
  1483. window.open('/swordfish/page_big_pc/free/svip/buy')
  1484. },
  1485. // 获取参标数据
  1486. async getJoinBidInfo() {
  1487. try {
  1488. const ids = this.listState.list.map((item) => item._id).join()
  1489. const { error_code: jCode, data: jData } = await getBidIsJoin({ ids })
  1490. if (jCode === 0 && jData) {
  1491. for (const temp of jData) {
  1492. for (const item of this.listState.list) {
  1493. if (temp.id === item._id) {
  1494. this.$set(item, 'joinBid', Boolean(temp.value))
  1495. }
  1496. }
  1497. }
  1498. } else {
  1499. return []
  1500. }
  1501. } catch (e) {
  1502. return []
  1503. }
  1504. },
  1505. // 参标
  1506. async joinBidHandle(item) {
  1507. if (item.joinBid) {
  1508. this.$toast('如需终止参标,需要在详情页进行操作。')
  1509. return
  1510. }
  1511. const params = {
  1512. bidIds: item._id
  1513. }
  1514. try {
  1515. const {
  1516. error_code: code,
  1517. error_msg: msg,
  1518. data
  1519. } = await joinBidAction('in', params)
  1520. if (code === 0 && data) {
  1521. // this.$toast('已参标,请前往我的参标项目列表查看。')
  1522. // 拉起参标更新弹窗
  1523. this.$refs.BidrenewalDialog.passVisible = true
  1524. this.$refs.BidrenewalDialog.setid(item._id)
  1525. this.$refs.BidrenewalDialog.refreshData()
  1526. this.listState.list = this.listState.list.map((temp) => {
  1527. if (temp._id === item._id) {
  1528. this.$set(temp, 'joinBid', true)
  1529. }
  1530. return temp
  1531. })
  1532. } else if (code === -1) {
  1533. this.$toast(msg || '操作错误,请稍后重试')
  1534. }
  1535. } catch (e) {
  1536. console.warn(e)
  1537. this.$toast('操作错误,请稍后重试')
  1538. }
  1539. }
  1540. }
  1541. }
  1542. /* eslint-enable */
  1543. </script>
  1544. <style lang="scss">
  1545. .self-export-loading {
  1546. .el-loading-spinner {
  1547. top: 200px;
  1548. }
  1549. }
  1550. </style>
  1551. <style lang="scss">
  1552. .info-list-card {
  1553. position: relative;
  1554. }
  1555. .info-list-card .custom-checkbox {
  1556. float: left;
  1557. width: 16px;
  1558. height: 16px;
  1559. border: 1px solid #e0e0e0;
  1560. border-radius: 3px;
  1561. background-color: #fff;
  1562. margin-right: 16px;
  1563. cursor: pointer;
  1564. }
  1565. .custom-checkbox:checked {
  1566. width: 16px;
  1567. height: 16px;
  1568. background: url(https://cdn-ali.jianyu360.com/images/biddingSearch/icon-checked.png)
  1569. no-repeat center;
  1570. background-size: contain;
  1571. border: 0;
  1572. }
  1573. .tags-box {
  1574. display: flex;
  1575. flex-direction: column;
  1576. min-height: 340px;
  1577. max-height: 360px;
  1578. position: absolute;
  1579. top: 0;
  1580. right: 0;
  1581. width: 332px;
  1582. padding: 20px 16px;
  1583. background: #ffffff;
  1584. border: 1px solid #ececec;
  1585. box-sizing: border-box;
  1586. border-radius: 8px;
  1587. box-shadow: 0px 0px 28px 0px rgba(0, 0, 0, 0.08);
  1588. z-index: 99;
  1589. }
  1590. .tags-box .tags-inputs {
  1591. position: relative;
  1592. width: 100%;
  1593. display: flex;
  1594. align-items: center;
  1595. justify-content: space-between;
  1596. }
  1597. .tags-box .tags-inputs .tag-input {
  1598. width: 100%;
  1599. padding: 0;
  1600. min-height: 34px;
  1601. max-height: 74px;
  1602. overflow-y: scroll;
  1603. display: inline-block;
  1604. border: 1px solid #ccc;
  1605. border-radius: 4px;
  1606. background-color: #fff;
  1607. cursor: text;
  1608. text-align: left;
  1609. }
  1610. .tags-inputs .tag-input::-webkit-scrollbar {
  1611. width: 8px;
  1612. }
  1613. .tags-inputs .tag-input::-webkit-scrollbar-thumb {
  1614. border-radius: 4px;
  1615. background-color: #ececec;
  1616. }
  1617. .tag-input > .tag-labels {
  1618. display: inline;
  1619. vertical-align: middle;
  1620. }
  1621. .tag-input > .clear-input {
  1622. display: inline-block;
  1623. padding: 0 10px;
  1624. width: 160px;
  1625. height: 36px;
  1626. line-height: 1;
  1627. background: #fff;
  1628. border-radius: 2px;
  1629. vertical-align: middle;
  1630. border: none;
  1631. background-color: transparent;
  1632. box-shadow: none;
  1633. box-sizing: border-box;
  1634. font-size: 14px;
  1635. color: #1d1d1d;
  1636. }
  1637. .tag-input > .tag-labels > .tag-label {
  1638. display: inline-block;
  1639. padding: 5px 12px;
  1640. font-size: 14px;
  1641. line-height: 1.2;
  1642. margin: 5px;
  1643. cursor: pointer;
  1644. border: 1px solid #ececec;
  1645. box-sizing: border-box;
  1646. border-radius: 4px;
  1647. background: #f5f6f7;
  1648. color: #1d1d1d;
  1649. }
  1650. .tag-close {
  1651. display: inline-block;
  1652. width: 16px;
  1653. height: 16px;
  1654. margin-left: 8px;
  1655. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEwSURBVHgB7ZWxDYMwEEXPER1NRmEFJggUiJpJQiahRhSECViBUdzQIYgdgYQIPnwXmkT+DcbY/s9n3wHg5PTPKoriejRGYB+rqrpP0xT1fR9mWSaBaO77fiuEeCZJ8gAqwGyez68dBWIxV83gbSJEboK47HXWda1DF626Ar2gTUi35lo6iqbxuwBxHEvP80JF3lEg9sxhjp5pDnoHdCSGYWjVDj4W3B4HZo4dHQpgC8E1twI4gtANrrk1AAYxP1nmJAAEArjmZIADiI5TsC5AlJRS5zWcJVIEDLd9LXIUrCNgSjVqsWIBYHnOqZhrHR6BTZGhVEwSAKXCcSHEGebfQBjvAKe8cv6iRgC1i4ZijkHotUxz0TtQlmWuFrpxKtxyHOM4Nmma5sAVJaednH5SLxmyS6JIrGjkAAAAAElFTkSuQmCC);
  1656. background-position: center 2px;
  1657. background-repeat: no-repeat;
  1658. background-size: contain;
  1659. }
  1660. .tag-placeholder {
  1661. position: absolute;
  1662. top: 12px;
  1663. left: 16px;
  1664. color: #bbb;
  1665. font-size: 14px;
  1666. }
  1667. .tags-box .tags-list {
  1668. margin-top: 12px;
  1669. overflow-y: auto;
  1670. flex: 1;
  1671. }
  1672. .tags-box .tags-list::-webkit-scrollbar {
  1673. width: 8px;
  1674. }
  1675. .tags-box .tags-list::-webkit-scrollbar-thumb {
  1676. border-radius: 4px;
  1677. background-color: #ececec;
  1678. }
  1679. .tags-box .tags-list .tags-item {
  1680. float: left;
  1681. min-width: 44px;
  1682. padding: 0 8px;
  1683. margin: 10px 8px 0 0;
  1684. height: 24px;
  1685. line-height: 24px;
  1686. border-radius: 4px;
  1687. border: 1px solid #ececec;
  1688. box-sizing: border-box;
  1689. color: #1d1d1d;
  1690. text-align: center;
  1691. font-size: 14px;
  1692. background: #f5f6f7;
  1693. cursor: pointer;
  1694. }
  1695. .tags-item.tags-active {
  1696. padding: 0 8px 0 24px !important;
  1697. background: #2cb7ca
  1698. url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADPSURBVHgB7ZNREcIwDIYjYRImYRLmZHPAHAwHlUAdIAEJSKiESgjpEY7Qg7uFdXnKd5eXdMmfpX8BHMdxDEDEgSJQ9GANiU4UGZ9cwBISXPFNGWIAKyrxZLr+suq/xdkwV4oFlFBNR3ET4veS0zaJosGoqOtZ8EVUi4tGWbM+rklC/Ax7KH++dY18ZbmZuGi8iKbhxzdTJT5DSyo/LNXZSZxljV80A3T4aayR86vIJTzyjX8xZTATF0NIU24y5xFDSFNGU3ExxNzsmTmO4zAPYEiZdz83IV0AAAAASUVORK5CYII=)
  1699. no-repeat 6px center !important;
  1700. color: #fff !important;
  1701. background-size: 16px !important;
  1702. border: 0 !important;
  1703. }
  1704. .tags-item.disabled {
  1705. color: #8e8e8e !important;
  1706. }
  1707. .tag-label em {
  1708. font-style: normal;
  1709. }
  1710. .add-tag-button {
  1711. margin-left: 16px;
  1712. color: #2cb7ca;
  1713. font-size: 14px;
  1714. line-height: 22px;
  1715. white-space: nowrap;
  1716. cursor: pointer;
  1717. }
  1718. .tags-footer {
  1719. margin-top: 20px;
  1720. display: flex;
  1721. align-items: center;
  1722. justify-content: center;
  1723. }
  1724. .tags-button {
  1725. padding: 3px 17px;
  1726. color: #1d1d1d;
  1727. font-size: 14px;
  1728. line-height: 22px;
  1729. border-radius: 4px;
  1730. border: 1px solid #e0e0e0;
  1731. text-shadow: 0px 0px 28px 0px rgba(0, 0, 0, 0.08);
  1732. cursor: pointer;
  1733. }
  1734. .button-confirm {
  1735. margin-right: 16px;
  1736. color: #fff;
  1737. background: #2cb7ca;
  1738. border-color: #2cb7ca;
  1739. }
  1740. .j-icon {
  1741. display: inline-block;
  1742. width: 20px;
  1743. height: 20px;
  1744. }
  1745. .icon-list {
  1746. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAYCAYAAACSuF9OAAAApElEQVRIie2UwQkDIRBFn7JNbEkWYAWmrTSg96Si3aQLc3AFI0H3EE0O82AufuEPKE957w1wJeGAu7UWgBACQM5XxvIAnC7K1mKxkhnLkPt1dagmFLdQGrgAT2AjPVlNzkezAW4BbrSfpJd/FRVjnNV1ivoP/RxZqMdyyO+NSoxT0SQT78eYD3dyHgfPDhgxdQcxdRcxdQ9ZqIeYujFi6jP8n6lfC3duA8uNLvEAAAAASUVORK5CYII=);
  1747. background-repeat: no-repeat;
  1748. background-size: contain;
  1749. ::before {
  1750. content: '' !important;
  1751. }
  1752. }
  1753. .icon-list-detail {
  1754. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAAoCAYAAABjPNNTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACUSURBVHgB7dbNCYQwEIbhyVSwJWxXOW4LW0JK2Bb2mK4swQoSI6ioYECJUeF9Lvmbw8dAYEQAADlm68F7/zHG/NL2JRXFGJu0OGvtf7zTTL2TygF7qTHvoTkTzRXLdRbNUXkAQpZCyFJyv7uV6zTzw2bIEMJ3XVxD3xxVdQLcGFPQEUxBZyJkKYQshSnoCKYgANivA7MjJEXo5QuyAAAAAElFTkSuQmCC);
  1755. background-repeat: no-repeat;
  1756. background-size: contain;
  1757. ::before {
  1758. content: '' !important;
  1759. }
  1760. }
  1761. .icon-box.active .icon-list-detail {
  1762. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAAoCAYAAABjPNNTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACeSURBVHgB7da9DcIwEIbh724CRqCkYwYmYQVG8AiswB4sQUeZETIBxooEAiRbInKcRHqfyj8n+dM1PgkAUGK5i931dnTXOS03aigqdtEs3A/7y+vMc8XmMahxwOFd2dbj0Jw3LxVrPl/Nca0AIWshZC2lkL3m031usiEfptNvcQvpd+nT20HAgjEFjcEUNCVC1kLIWpiCxmAKAoD/PQHE9yYzkOMULAAAAABJRU5ErkJggg==);
  1763. background-repeat: no-repeat;
  1764. background-size: contain;
  1765. ::before {
  1766. content: '' !important;
  1767. }
  1768. }
  1769. .icon-box.active .icon-list {
  1770. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAYCAYAAACSuF9OAAAAmklEQVRIie3UsQ2DMBCF4d+IJcIMULJDModZizmcGaBkBscZgwIswBE4KQwp7qtsn6U76aSnStM9gJaJBgxbvn4jLQdoVZrutWrmgCL4uK6n5rLgQZ3UeI/KgAZ4A5ZpZSFfT80yr+yEXvuGe725hyu7nAwUIwPF5CxJDBckdfXs/VGS+huS1B8kqX8lA8X83UCS1BGS1EcsoEd3djhI1jC4DwAAAABJRU5ErkJggg==);
  1771. background-repeat: no-repeat;
  1772. background-size: contain;
  1773. ::before {
  1774. content: '' !important;
  1775. }
  1776. }
  1777. .icon-table {
  1778. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAA3ElEQVRIie3XQUrDQBiG4SdDeghdeABX9QZScCH0EuqhulPX/wVcCD2DXqELewcttAsbO2jNys4UzAuBBD743vlDhkwTEad4xCVGyrDCM+5a3OOqUHFHi2s8JEwKl+dMkt3YVxijOfB1se2CUcps3vD694v8wQuW3UPqCR6SdW2BLwaBNrs/k72bUlSfwFEJLPy+eUyz3KwnN8ty057cYp9AFQaB6gJNRBT/9nOqT+CoBIZ94F8JNPsETnBeoHy87fo0iYh35Q4k3/lImFcqh3nCDZ7s/tVL0B3NbjcYbCQMu974QgAAAABJRU5ErkJggg==);
  1779. background-repeat: no-repeat;
  1780. background-size: contain;
  1781. ::before {
  1782. content: '' !important;
  1783. }
  1784. }
  1785. .icon-box.active .icon-table {
  1786. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAA30lEQVRIie3XQUrDQBiG4SdDeghdeICSRb2BFFwUegnbQ3VXvUUWQg+QlV6hC71DLejCph1qzcrOFMwLgQQ++N75Q4ZMUdXNNZ5wh4E0bPGMeYkl7hMVt5SY4DFgnLg8Zhwcxr7FCMWZr9tdFwxCZPOG179f5A9e8N4+hI7gOfnMLbCnFyij+xvRu0lF9glclMDa75vHNMotOnKLKDftyK1PCWShF8guUFR1k/zbj8k+gYsS6PeBfyVQnBK4wjBB+WjX9W1S1c1GugPJMR8Bq0zlsAp4QO3wr56C9mg2+wJlxSMZcnbbKAAAAABJRU5ErkJggg==);
  1787. background-repeat: no-repeat;
  1788. background-size: contain;
  1789. ::before {
  1790. content: '' !important;
  1791. }
  1792. }
  1793. .icon-box.noclick {
  1794. opacity: 0.5;
  1795. cursor: not-allowed !important;
  1796. }
  1797. .icon-data-export {
  1798. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAFfElEQVRoQ+2ZbYhUVRjHn/+dXWfKD72gvdArW2CW6QdLRIpAKiTb3kwNsbSMKHqVtb3nzJpeiOacGVeG3N7YMisR1jYsCjVoIwtLSKUQoQwphYw+1H6IXXfG3blPnOHOcr3tzN5178w60Pl4z3Oe5/87zznnPudeUJ031Ll++h8gqgwKIVYCWMTMr2qte8L6PSsykEwmL3Vd9wQAMDMT0cNa621hIP4D4DiONTAwsNyyrGZmvgXAJWEclbNh5gEAbyqlWsrZ2LZ9nmVZx4jofGNjIAAsUUp9NFrs0wCklNcx8w4A00cbONb+U6dOTd24ceNfFSDMZPUAiHsQBQAPjQYxDOA4TiKfzx8kouvHKi6E/QGl1M2j2Qkh5gPYTUSTwkIMAySTyaeZ+bVSEGbusSxrs+u6f44WuFK/67onM5nM92F9CCEWAPiMiBrCQAwDCCE2A3jMG7Rfaz0nbNCo7aSU93hLOeaDeEAp9Wkwlh9gH4C53oB1WuuXoxY2Fn9SygeZuQtAEYKIhohoURDCD3AIwI2e8YtKqfaxBKyGrQfxoTley0GcdQCLFy+ONTU1zQBwgRENYCURrfBN0BAzN2utPy/2lzqEEBOSASHEbMuy5jLzbGaeSUQzATRWyigzDwKYoZT6ZUIAbNu+EsBzRLQUwOVnsvxc1707nU7vrCmAEOJaAOuYeZlvc45ZPzPv6e3tvbOzs3OwJgBeqZBm5sdHEs7MeSIyL9FviegYM59oaGg4MTQ0lAfQDWCa7/20p7+/f0FHR4cZU/090NraOicWi5ma5orgVDPzN0S0JZ/Pb89mswP+/paWlimNjY17ANzge/5FX19fc0l81QFs257n1Tfn+MUx83uu6+pMJnNkpPXjid8bmPmdvb2995tl4x9TtSXkzfxXRHSuL/2/MvOKdDq9t9zCLyc+kUjc5ziOeZmd1qoCsHbt2msKhcKBUnnsRdwaj8efdBznZDnxyWTyYtd1vw7M/MeJRGLJSOKrtYQghPgBwCzfzL+jtX7ClPqjiP8OQJPPpuvo0aPLu7u7C+XGRZ4BIcQzADp84ru11ksriXccZ1Iul/sxcA/pUkotqzQu8gx4QszVcIoHcDyXy00PnjDB2Wxra7vKdV1zIys2Zv5Aa21KiLIZK9lGmgEhhDnn3/YJXKiU2lUu/f7nUsp3iciU0W9prV8KIz7yDEgp9xPRTZ6ww0qpUnUbhuGMbCLLQGtr67RYLPazbxms0lqbWR13W7169YWJRAJKqb+DziIDsG37WcuyNnkBcoODg1Pa29v7x6vetu17LcvqMh8qmHmRKeD8PiMDkFJuJ6IlnvNdSqmF4xVvxgsh3gfwiOdri1KqeO2NfBMLIX4DcLV3irRqrTdEBLAVwHLP11alVAmm+CiSDKxZs2ZyY2Nj3/CsALenUqkv6wbA3KoAmNKh2AqFwmWZTOaPugHwNton3vLJa60TUYj39kD1l5CU8ikiesMTfVwpVdwLUTQhRE0AkkT0ipeBg1rr0sts3Aw1ARBCOADWewB7tda3jlu556AmAFJKZY5sD6BHa31HXQEEirhNSqnn6wrA/BTJ5XKvmzI6Ho+vchznn7oCiErsSH5C74FAKdymlEpVU1hY3/4ay3zN0Fo/6h/rLyWGiyZm3q21vitskGrZeTe8I6Uai4i0UkqOCCClfIGIsr7OTYVCYUMmk/m9WgIr+U0mkzNc100BaC7ZAZifSqXMp5rhNpwBc2mIx+M/AbhoIgSHiLlPKTUvaHfaX0rbtpsty9pR+j8VwmmtTA7ncrnbstlsb0UA02nb9iwA2wLfJGslNBjHfATrjMfj68sdzWX/1EsppzKzKcomT5T6fD5/aKRZH3EPTJTI8cb9FyJEG14SVWmfAAAAAElFTkSuQmCC);
  1799. background-repeat: no-repeat;
  1800. background-size: contain;
  1801. ::before {
  1802. content: '' !important;
  1803. }
  1804. }
  1805. /* /images/collected.png */
  1806. .icon-star {
  1807. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANtSURBVHgB7VhbTuMwFL0tBfHUdAeEFdAldHZQPniJD9oVwKygdAewgqQfCPGQyqyAzgomrICwg/wgIfE8J9hgoqR1cPrXI1ncXMf26bm27w0iU0xhj4uLiwM2KREVKQlnZ2fezMzMHe2Xl5ffu7u7QykBVSkJs7OzXW3XarWulIRSFDTV04CKa1AxEkeUoqChXoQWp3xOcCZI9V5fX9vqcfj29nZCA76W7/t1cYQzQVMphLU3Nzd3LB8q1hcXFw/FEU4ElXot9Rhwz21sbJBcn45KpXLgqqITQZzWffxJCFA97Yd9rExnFZ0IYr+1lRmYJ1bZ17RdVaxJQXCx+fn5OtQ7AEGPPlM9DfhOcPUw/PXl5eXu6elpf29vL5SCyL0Hub+q1WqDJLDQqiLTQPPM97AH/+7s7LSy5ri8vLzBuGbKHUJV7tMQP+Ie/eHj42PY6XTirDm+KXh+ft7C4K4ikYQFzwyl5AF9x3l9z8/PPfy4ZsrdUPM1IUDiWFpaYh6PsVbIMWaaTIeYSjQy1uLgSE1wSxvKheMyhVqogsUbOgIYu45WxzPXMfcmfU303cIeaue3EKuUdSNfYbx+eHjo5MnvCu7nlZUV37iqIlVoRPqdb6eYHXxBPlIW0VpYWGjLhIDQ7o8iR2QekrSSvE62t7f7UiKurq5ILhhFLpfgpEnakhtJcFIki5AbS7BskkXJWREsi6S6YwdFyBFWudg43RprUhA6LQKxLTnCulhA/v28C7FA8ZyKy12ZdaQ263vVmiAm/cwwUCOSgmDm0TaKWs92nDVBKPBJ8CdViQqp/l5p2I6zJojE7ikzlxxTFw+U5CMhCDXLJ8gkrya/lwxiKK26SF13PO20s+bA1vinTE/KJqhPISsa049KpQ1i/9F/JB/ViUcb/jv2paaJkkWr1XWxhBXBwWCQLExbn2CEssmCFKav+0B+yKaG0eeTKN9V/ZHus/0MsCJonmCE8BeJMZRGtZzck5ubm0mD3ZGviii55JFFfPi1z/okW2WSVBYwEWNP9lDyZ1bVUK4NcrpCT6OztbUVyBhYKQhyzZQrhno9FLNreeQIXC0BleW76T7bk2z1VYdNvYoJ9WMAYn9sq2x1/x1BzQDzHOHH7qsuz2a8FUGGEZPHT09P/Z/+308RbYMoSR5ivkCmmELkHXyZDJTCB+QVAAAAAElFTkSuQmCC);
  1808. background-repeat: no-repeat;
  1809. background-size: contain;
  1810. ::before {
  1811. content: '' !important;
  1812. }
  1813. }
  1814. .icon-distribute-gray {
  1815. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAA1FJREFUaEPtWb1rFEEUf2/3CNoKR/zGwoAoooVg65V2htzMcVfFP8D4gVYWJrXiR4S0pspxbxO0s7zYCBaCKIqgYPATObDVYndGJtzIZNmdndvd4Abuytv33vx+7735zdtZhB3+wx2OH8YE/ncFxxVIqwAR7Q7DcAoR9+Stku/7Hzjn32z+21KBIAjOSykXAeBoXvDaT0r5sNVqzaXFKZ1AEARMSklFgZv+iLjOGGskxSydABHdB4DLw8U2EHEjLxkp5Tnt6/v+/pmZmR/xWKUTCIKgrxfmnBeKb8aKoqjRbrfXxwSy2sFWASI6jYj3LDFuMsae6+eVqwARfQKAI7YkhGF4qtPpvFY2VSTwGAAuWHXdUJzKEVDAu93uP2Wp1Wr1uOSakllJAkZ/J54XO4JA/LCTUi4g4i1FrgoEbksprwPAE875dLzfk8ALIdZ93+9XgoDu86RDJwl8q9WaV/uiUgSSVCYNvCa8LQS63e5Zz/NmPc87ZpM+IcQb28RoA6/jEtEjAFAKNc05f1X4HFhdXb0qhLibdfLq52mzigv4tDVyy2i/3981GAw+A0DdkcAy5/yiy4ZVPe8YM/9JTETHAeDtcKGvnPNDroum6bySylHAF2qhNFVwJVGkbcw1iOgLABwc/neCc/7OaZwuQsAV/HDTzjomZVCv1w83Go0/hQmsrKxMTkxMTDabzc2J0fzFwSPiPGNsIW5nJsiFgOd515rNZuIYnvjGZKsAEUm1aLynXcFrwL1eb9HzvJMZ8vxeCLHcbrdfpNmNRMByYm4ZzNIy75LtUW0KE3DNvCKfNF6MCrjQHohXAACWzHk+LfNEtPkig4h3GGM3ioI2/QtVwLz2sLWN3je2+528pHIT2JKFFLXRNpUmoLJqkhFCPIufuJUhoIBqMBklP8M5f1m5CihAvV5vXr/+pZEIw3Bvp9P5WUkCGpR5u2ASSZLKSrVQHrUYE7BkLVFG19bW9kVR9F37xZVmlCpIKdVVor5OfMA5vzKKf5Zt6vW3+TqXFcT1OSJyxljgau9iZ72/VxMjIl5yCZRh8xER5xhjT0uItSVE5gcIIjoQRdFU3oWllL9qtZr6WPc7bwybXyaB7Vi0zJhjAmVmM0+scQXyZK1Mn79v+vlPDqqgOQAAAABJRU5ErkJggg==);
  1816. background-repeat: no-repeat;
  1817. background-size: contain;
  1818. ::before {
  1819. content: '' !important;
  1820. }
  1821. }
  1822. .icon-box.box-distribution:hover {
  1823. .icon-distribute-gray {
  1824. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAA35JREFUaEPtmc9PE0EUx9/b4g808WBC8AcaTMTAVloaTUw4ELbFgzc56Bn/APFH5ORBOGv8gYlXPetBbx60u8iBxIOhLXRBMYEoaoyJBxNFYzvPbGHLdtnZne62siTlyM68+X7m/Zg3U4Qt/odbXD80ADbbgw0P8DzQNjXVvPvXjg4kaa9fLzEJF96lej65za+LB+R07gwgGwfAo37Fr8+j+3qyZ5hnp+YAcjp3DpAeBxduQQCcmEvGFCebNQeIatm7RHBpbbElAlzyC4NA/eZcatp2YK5P/mK3VXOALjWnmQvryXgg+1ZbrMiU+dOJiQaAVzi4eSCqTfcwitzh2YhQ8fpsKjFlfg+dB2Q1uwgA7W6bUGSF+NuBEzljTPgAtNxTIDrrBkCWihM6AEN454vpcmWRpEiLveSGHsDcfd55sSUANognNgYo3TDgNh1A1rI3geAaID7TldigPd6dxDMGE1JE0kIBYMa506HjJF5PJUaNvAgVgFOV4Yk3gesCIKvZU0A0RCh1ure0bMatY3QTX05qLfcQiPoR2WBeSWQCnwNRNXeFgG57nbzmd16vIiKet4bvc6BdW9zZTD8+IECLEADiI12JXRBJWCPmhWwGOYmjk3mZCoX82kLLejJ+SHRRbp0nNlaN+EAhxKsKohBBwsa6hqxmPwJAm/E/bGqK5vuiulA7HQRAVLy8mrRDIptCAN9WcM/hJeXI78AAx1/OtMJ2aJ3t6y51jBU7Zr9OIozqSnzMPs66QSIACHg1n4w5tuGONyY3D8hqlkqL2mJ6w85zxJdzRM2ME0jdruWZ2DwYBSIZf80bVxUAD6xa8SK7LjomMICoeAPeqb0QFVoXDyDBg4p+nhM2snmRQbilK/GRoKKt8wN5wPrsAS4xb+aNtVWuFYRvgAoBngm7mvihBDBEVbiUiq/sJ25oPGAILZdRlxhggCfnk7E36yUzJB4oAaSnR83rH49BYtK+2YHur6EEMEVZXxesII43sbXDb9NzwG/lCFUO+IH47wBdk/p+LPz9bIq1V5pqIBDIeEosPSciwr28Er9czXyvsdznb+t1zsuI8HfC83oq9kR4vMBA1/d7Wc0YPxNdFLDjMYTeA0nDeir2PLitSgueP0AcS2cOSow6/C5MyL7/3PVnYbm3d8WvDbd5ngD1WLSWNhsAtdxNP7YaHvCza7Wc8w+pR8VPw6pLEAAAAABJRU5ErkJggg==);
  1825. }
  1826. .icon-text {
  1827. color: #2abed1;
  1828. }
  1829. }
  1830. .icon-distribute-active {
  1831. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAA35JREFUaEPtmc9PE0EUx9/b4g808WBC8AcaTMTAVloaTUw4ELbFgzc56Bn/APFH5ORBOGv8gYlXPetBbx60u8iBxIOhLXRBMYEoaoyJBxNFYzvPbGHLdtnZne62siTlyM68+X7m/Zg3U4Qt/odbXD80ADbbgw0P8DzQNjXVvPvXjg4kaa9fLzEJF96lej65za+LB+R07gwgGwfAo37Fr8+j+3qyZ5hnp+YAcjp3DpAeBxduQQCcmEvGFCebNQeIatm7RHBpbbElAlzyC4NA/eZcatp2YK5P/mK3VXOALjWnmQvryXgg+1ZbrMiU+dOJiQaAVzi4eSCqTfcwitzh2YhQ8fpsKjFlfg+dB2Q1uwgA7W6bUGSF+NuBEzljTPgAtNxTIDrrBkCWihM6AEN454vpcmWRpEiLveSGHsDcfd55sSUANognNgYo3TDgNh1A1rI3geAaID7TldigPd6dxDMGE1JE0kIBYMa506HjJF5PJUaNvAgVgFOV4Yk3gesCIKvZU0A0RCh1ure0bMatY3QTX05qLfcQiPoR2WBeSWQCnwNRNXeFgG57nbzmd16vIiKet4bvc6BdW9zZTD8+IECLEADiI12JXRBJWCPmhWwGOYmjk3mZCoX82kLLejJ+SHRRbp0nNlaN+EAhxKsKohBBwsa6hqxmPwJAm/E/bGqK5vuiulA7HQRAVLy8mrRDIptCAN9WcM/hJeXI78AAx1/OtMJ2aJ3t6y51jBU7Zr9OIozqSnzMPs66QSIACHg1n4w5tuGONyY3D8hqlkqL2mJ6w85zxJdzRM2ME0jdruWZ2DwYBSIZf80bVxUAD6xa8SK7LjomMICoeAPeqb0QFVoXDyDBg4p+nhM2snmRQbilK/GRoKKt8wN5wPrsAS4xb+aNtVWuFYRvgAoBngm7mvihBDBEVbiUiq/sJ25oPGAILZdRlxhggCfnk7E36yUzJB4oAaSnR83rH49BYtK+2YHur6EEMEVZXxesII43sbXDb9NzwG/lCFUO+IH47wBdk/p+LPz9bIq1V5pqIBDIeEosPSciwr28Er9czXyvsdznb+t1zsuI8HfC83oq9kR4vMBA1/d7Wc0YPxNdFLDjMYTeA0nDeir2PLitSgueP0AcS2cOSow6/C5MyL7/3PVnYbm3d8WvDbd5ngD1WLSWNhsAtdxNP7YaHvCza7Wc8w+pR8VPw6pLEAAAAABJRU5ErkJggg==);
  1832. background-repeat: no-repeat;
  1833. background-size: contain;
  1834. ::before {
  1835. content: '' !important;
  1836. }
  1837. }
  1838. .icon-star-active {
  1839. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALRSURBVHgB7ZdPbtNAFMa/GTcuf6QmIFZs6myQumojsUEIqblBb4B6gnKDhBPQGxBOQjcFNojskLppOEGjFqo2KfN4MyTBST32i8dsqnxSEscev/n5mxm/N8BKK8lFn3BAX3CACqVQkegjEsQ4dX8M2uoVjlCBNKpSjM7sOEodB6oSB+fcm2qEpmpjgEBV42Cc4VhcjYvBDma691fDiYtDBCjcQb9TDb72BoEKcnDi3jcHk61gF8McjPEafjigAhfDHDx2cy8paBbk4tIO8rA26DMS+op3AjirBtbR4YfZQQl5HbQQGHNQzb8amw6GXCcJany9rm3GgLrgrzGWUZ97Hbpfgx8cs48b9H0OzwFyLt3jGzr8SfiKd25RnW+rpW69IqhLcsClRQyoGfY33qbT5PwQGwYEu5QD5x6ptmD8PQVq6LAlZ/sk7HKMvfTp+ZARuvw9yItDNc+s4Ej0WIMeBK27Acc5XAj7T+qFa9BGHuQ68sWAtKHKuOn6dgw+QBFkJHAoXnrIM+EyAXMhLdsaZJoO+f3CB/LCTcJkKxNSCpfWQ5U3L3PhcgGRAeldIEWy87J+a14WwhUC3oIs4+BUtbl5KYJz/UMol9429GkQpJXNPkPTlMBZydfZFb/pQ+FYirOOiyWUGPDmSblkPxNxOjxn+2xKjEVFhpMYUBtdHnDMcGdkN1JTiWPJBy2SP3Vabkh/0uLp6gF1RNu0TH1ruPUF+UqxBEItMe1VIm5pXftFtoTyaRvSWJJGrop+qs+Ko9GROmeqay6bijTCI8k2QLRIilcwDYwx+/oZtdVz91LfR0HZJl3JIkAVR54CloZkuAK+pNbaFnqz9i/R40+zAFS0UGSAY9pFNlgz2jJd1fLsJxjUpUlui/8JqNdoc9Yp0Ls21MoDm4PklMZ7jC731ORF8yF1KUFVGp1gh070+/F3weQvkMvpxzgsuw1d6c7pD2qO79xI3BNVAAAAAElFTkSuQmCC);
  1840. background-repeat: no-repeat;
  1841. background-size: contain;
  1842. ::before {
  1843. content: '' !important;
  1844. }
  1845. }
  1846. .icon-hot-vip {
  1847. display: inline-block;
  1848. width: 42px;
  1849. height: 20px;
  1850. background: url(data:image/png;base64,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)
  1851. no-repeat center center;
  1852. background-size: contain;
  1853. ::before {
  1854. content: '' !important;
  1855. }
  1856. }
  1857. .icon-box {
  1858. display: flex;
  1859. align-items: center;
  1860. color: #252627;
  1861. font-size: 14px;
  1862. ::before {
  1863. content: '' !important;
  1864. }
  1865. }
  1866. .icon-box .icon-text {
  1867. margin-left: 6px;
  1868. ::before {
  1869. content: '' !important;
  1870. }
  1871. }
  1872. .icon-box.active {
  1873. color: #2abed1;
  1874. }
  1875. .icon-have-vip {
  1876. position: relative;
  1877. &::after {
  1878. position: absolute;
  1879. content: '';
  1880. width: 32px;
  1881. height: 14px;
  1882. top: 0;
  1883. right: -6px;
  1884. background: url('~@/assets/images/icon/vip.png') no-repeat right center;
  1885. background-size: contain;
  1886. }
  1887. }
  1888. .tab-title {
  1889. margin: 40px 0 44px;
  1890. font-size: 24px;
  1891. line-height: 36px;
  1892. }
  1893. [class*='el-icon-'] {
  1894. transition: transform 0.2s ease;
  1895. }
  1896. [class*='no-select'] {
  1897. user-select: none;
  1898. }
  1899. .rotate180 {
  1900. transform: rotate(180deg);
  1901. }
  1902. /* selector样式定制 */
  1903. .tag-list-container .j-button-item:not(.all) {
  1904. border: 1px solid #ececec;
  1905. background-color: #f5f6f7;
  1906. }
  1907. .selector-card:not(:last-of-type) {
  1908. border-bottom: 1px dashed #ececec;
  1909. }
  1910. .other-filter .el-select {
  1911. margin: 0 12px;
  1912. }
  1913. .other-filter .el-select input::placeholder {
  1914. color: inherit;
  1915. }
  1916. .manage-tags {
  1917. display: inline-block;
  1918. position: relative;
  1919. right: 0;
  1920. top: 3px;
  1921. font-size: 14px;
  1922. height: 22px;
  1923. line-height: 22px;
  1924. color: #2cb7ca;
  1925. cursor: pointer;
  1926. }
  1927. .collect-list-container {
  1928. margin-top: 28px;
  1929. }
  1930. .collect-list-container .el-checkbox {
  1931. margin: 16px;
  1932. }
  1933. .collect-list-header {
  1934. position: sticky;
  1935. top: -1px;
  1936. background: #fff;
  1937. border-bottom: 1px solid #ececec;
  1938. z-index: 9;
  1939. border-radius: 8px 8px 0 0;
  1940. }
  1941. .collect-list-content,
  1942. .collect-list-content .list {
  1943. min-height: 400px;
  1944. }
  1945. .c-tab-container .left,
  1946. .c-tab-container .right,
  1947. .c-tab-container .right-line {
  1948. display: flex;
  1949. flex-direction: row;
  1950. }
  1951. .c-tab-container .left {
  1952. align-items: center;
  1953. .total-count {
  1954. display: inline-block;
  1955. margin: 4px 0 0 12px;
  1956. font-size: 14px;
  1957. color: #686868;
  1958. line-height: 22px;
  1959. }
  1960. }
  1961. .c-tab-container .left .custom-checkbox {
  1962. float: unset;
  1963. }
  1964. .c-tab-container {
  1965. display: flex;
  1966. flex-direction: row;
  1967. height: 49px;
  1968. width: 100%;
  1969. justify-content: space-between;
  1970. }
  1971. .c-tab-container .list-title {
  1972. position: relative;
  1973. height: 100%;
  1974. line-height: 49px;
  1975. text-align: center;
  1976. color: #2abed1;
  1977. }
  1978. .c-tab-container .list-title::after {
  1979. content: '';
  1980. position: absolute;
  1981. left: 0;
  1982. bottom: -1px;
  1983. width: 100%;
  1984. height: 2px;
  1985. background-color: #2abed1;
  1986. }
  1987. .c-tab-container .icon-box {
  1988. cursor: pointer;
  1989. &::before {
  1990. content: '' !important;
  1991. }
  1992. }
  1993. .c-tab-container .j-icon {
  1994. width: 16px;
  1995. height: 16px;
  1996. background-position: center;
  1997. }
  1998. .c-tab-container .icon-box {
  1999. padding: 0 10px;
  2000. &::before {
  2001. content: '' !important;
  2002. }
  2003. }
  2004. .c-tab-container .right-line {
  2005. position: relative;
  2006. }
  2007. .c-tab-container .right-line::after {
  2008. content: '';
  2009. position: absolute;
  2010. margin-top: -8px;
  2011. width: 1px;
  2012. height: 16px;
  2013. right: 0;
  2014. top: 50%;
  2015. background-color: #ececec;
  2016. }
  2017. .list-item {
  2018. border-bottom: 1px solid #ececec;
  2019. }
  2020. .list-item:hover {
  2021. background: #f6f6f6;
  2022. box-shadow: inset 0px -1px 0px rgb(0, 0, 0, 0.05);
  2023. .a-i-left {
  2024. color: #2cb7ca;
  2025. }
  2026. }
  2027. .list-index {
  2028. margin-right: 2px;
  2029. }
  2030. .append-container .j-icon {
  2031. margin: 0 16px 0 8px;
  2032. cursor: pointer;
  2033. }
  2034. /* table */
  2035. .collect-table-list table {
  2036. width: 100%;
  2037. border-collapse: collapse;
  2038. }
  2039. .collect-table-list .thead tr {
  2040. font-size: 14px;
  2041. color: #888;
  2042. background-color: #f3fbff;
  2043. }
  2044. .collect-table-list tbody tr:hover {
  2045. background-color: #f5f6f7;
  2046. box-shadow: inset 0px -1px 0px rgb(0, 0, 0, 0.05);
  2047. cursor: pointer;
  2048. }
  2049. .collect-table-list table tr td {
  2050. vertical-align: middle;
  2051. text-align: center;
  2052. line-height: 26px;
  2053. border: 1px solid #e0e0e0;
  2054. }
  2055. .collect-table-list table tr td.tt-l {
  2056. text-align: left;
  2057. }
  2058. .collect-table-list table tr td.tt-c {
  2059. text-align: center;
  2060. }
  2061. .collect-table-list table tr td.tt-r {
  2062. text-align: right;
  2063. }
  2064. .collect-table-list .thead td {
  2065. padding: 6px 0;
  2066. border-top: 3px solid #2cb7ca;
  2067. }
  2068. .collect-table-list .tbody tr {
  2069. cursor: pointer;
  2070. }
  2071. .collect-table-list .thead .deep {
  2072. border-top: 3px solid #2c90cb;
  2073. }
  2074. .tag-drawer .el-drawer__header {
  2075. margin-bottom: 0;
  2076. padding-bottom: 22px;
  2077. font-size: 20px;
  2078. line-height: 32px;
  2079. border-bottom: 1px solid #ebebeb;
  2080. /* box-shadow: 0px -1px 0px 0px rgba(0,0,0,0.05) inset; */
  2081. }
  2082. .tag-drawer .tag-title {
  2083. flex: unset;
  2084. color: #1d1d1d;
  2085. }
  2086. .tag-drawer .tag-count {
  2087. margin-left: 8px;
  2088. color: #2cb7ca;
  2089. }
  2090. .add-tag-confirm-button {
  2091. height: 100%;
  2092. color: #2cb7ca;
  2093. white-space: nowrap;
  2094. cursor: pointer;
  2095. }
  2096. .tag-drawer .add-tag-confirm-button {
  2097. margin-left: 16px;
  2098. }
  2099. .tag-drawer .el-drawer__body {
  2100. overflow-y: scroll;
  2101. }
  2102. .tag-drawer .tag-container {
  2103. height: 100%;
  2104. display: flex;
  2105. flex-direction: column;
  2106. }
  2107. .tag-drawer .tag-header {
  2108. padding: 28px 28px 20px;
  2109. justify-content: space-between;
  2110. }
  2111. .tag-drawer .tag-main {
  2112. padding: 0 20px;
  2113. flex: 1;
  2114. overflow-y: scroll;
  2115. }
  2116. .tag-drawer .tag-footer {
  2117. padding: 0 20px;
  2118. display: flex;
  2119. align-items: center;
  2120. justify-content: center;
  2121. height: 100px;
  2122. box-shadow: 0px -8px 8px 0px rgba(0, 0, 0, 0.05);
  2123. }
  2124. .tag-drawer .el-tag {
  2125. margin: 6px;
  2126. padding: 1px 8px;
  2127. height: auto;
  2128. color: #1d1d1d;
  2129. background-color: #f5f6f7;
  2130. border: 1px solid #ececec;
  2131. border-radius: 5px;
  2132. line-height: 22px;
  2133. cursor: pointer;
  2134. }
  2135. .tag-drawer .el-tag:hover {
  2136. color: #2cb7ca;
  2137. border-color: #2cb7ca;
  2138. }
  2139. .tag-drawer .el-tag:hover .el-icon-close {
  2140. color: #2cb7ca;
  2141. background-color: transparent;
  2142. }
  2143. .tag-drawer .el-tag .el-icon-close {
  2144. font-weight: 700;
  2145. }
  2146. .select-title {
  2147. color: #686868;
  2148. font-size: 14px;
  2149. line-height: 22px;
  2150. }
  2151. .el-select + .select-title {
  2152. margin-left: 14px;
  2153. }
  2154. .vip .selector-card-header {
  2155. padding-right: 50px;
  2156. }
  2157. .selector-card-header .icon-hot-vip {
  2158. position: absolute;
  2159. right: 0;
  2160. top: 6px;
  2161. }
  2162. .selector-card-header .s-h-title {
  2163. font-weight: 700;
  2164. color: #996118;
  2165. }
  2166. .shade_table {
  2167. width: 100%;
  2168. position: absolute;
  2169. margin-top: -150px;
  2170. height: 150px;
  2171. background: linear-gradient(
  2172. to bottom,
  2173. rgba(255, 255, 255, 0),
  2174. rgba(255, 255, 255, 0.8),
  2175. rgba(255, 255, 255, 1)
  2176. );
  2177. }
  2178. .shade_table .more {
  2179. position: absolute;
  2180. height: 35px;
  2181. width: 120px;
  2182. left: 50%;
  2183. margin-left: -60px;
  2184. bottom: 20px;
  2185. color: #2cb7ca;
  2186. border-radius: 5px;
  2187. border: 1px solid #2cb7ca;
  2188. line-height: 35px;
  2189. text-align: center;
  2190. cursor: pointer;
  2191. }
  2192. .el-card {
  2193. overflow: unset;
  2194. }
  2195. .open-vip-dialog {
  2196. width: 380px;
  2197. .el-dialog__header {
  2198. padding: 32px 32px 20px;
  2199. }
  2200. .el-dialog__body {
  2201. padding: 0 32px 0;
  2202. text-align: center;
  2203. }
  2204. .el-dialog__footer {
  2205. padding: 32px;
  2206. }
  2207. .el-button {
  2208. width: 132px;
  2209. font-size: 16px;
  2210. }
  2211. }
  2212. </style>
  2213. <style lang="scss" scoped>
  2214. @include diy-icon('edit', 20, 20);
  2215. // card样式重置
  2216. ::v-deep {
  2217. .el-card__header {
  2218. margin: 0 40px;
  2219. padding-left: 0;
  2220. padding-right: 0;
  2221. }
  2222. .el-card__body {
  2223. padding: 20px 40px;
  2224. }
  2225. .get-more {
  2226. display: flex;
  2227. .el-icon-arrow-right {
  2228. margin-left: 4px;
  2229. order: 2;
  2230. }
  2231. }
  2232. }
  2233. .collect-table-list .thead td {
  2234. border-top: none;
  2235. }
  2236. .table > tbody > tr > td,
  2237. .table > tbody > tr > th,
  2238. .table > tfoot > tr > td,
  2239. .table > tfoot > tr > th,
  2240. .table > thead > tr > td,
  2241. .table > thead > tr > th {
  2242. padding: 8px;
  2243. }
  2244. .sub-manager {
  2245. display: flex;
  2246. align-items: center;
  2247. padding: 8px 16px;
  2248. font-size: 14px;
  2249. line-height: 24px;
  2250. color: #1d1d1d;
  2251. border-color: #e0e0e0;
  2252. &.el-button:focus,
  2253. &.el-button:hover {
  2254. color: inherit;
  2255. background-color: inherit;
  2256. }
  2257. }
  2258. .info-list-card {
  2259. position: relative;
  2260. &.gray {
  2261. padding: 0;
  2262. box-shadow: unset;
  2263. border: none;
  2264. ::v-deep {
  2265. .el-card__body {
  2266. padding: 0;
  2267. }
  2268. }
  2269. }
  2270. .card-title {
  2271. font-size: 24px;
  2272. color: #1d1d1d;
  2273. line-height: 36px;
  2274. }
  2275. .sub-manager {
  2276. float: right;
  2277. }
  2278. .info-list {
  2279. min-height: 300px;
  2280. border-top: 1px solid transparent;
  2281. position: relative;
  2282. }
  2283. .add-key-button {
  2284. display: flex;
  2285. align-items: center;
  2286. justify-content: center;
  2287. margin: 24px auto 80px;
  2288. width: 108px;
  2289. height: 30px;
  2290. // padding: 8px 16px;
  2291. color: #f7f9fa;
  2292. border-radius: 4px;
  2293. background-color: #2abed1;
  2294. cursor: pointer;
  2295. .icon-chahao {
  2296. margin-right: 4px;
  2297. transform: rotate(-45deg);
  2298. &::before {
  2299. content: '' !important;
  2300. }
  2301. }
  2302. .button-text {
  2303. // margin-left: 4px;
  2304. white-space: nowrap;
  2305. }
  2306. }
  2307. .icon-chahao {
  2308. position: relative;
  2309. display: inline-block;
  2310. width: 14px;
  2311. height: 14px;
  2312. &:before,
  2313. &:after {
  2314. position: absolute;
  2315. content: '' !important;
  2316. background-color: #fff;
  2317. top: 50%;
  2318. left: 50%;
  2319. width: 14px;
  2320. height: 2px;
  2321. border-radius: 2px;
  2322. }
  2323. &:before {
  2324. transform: translate(-50%, -50%) rotate(45deg);
  2325. }
  2326. &:after {
  2327. transform: translate(-50%, -50%) rotate(-45deg);
  2328. }
  2329. }
  2330. .el-pagination-container.center {
  2331. .el-pagination {
  2332. left: 50%;
  2333. right: unset;
  2334. transform: translateX(-50%);
  2335. }
  2336. }
  2337. .j-self-icon {
  2338. display: inline-block;
  2339. width: 20px;
  2340. height: 20px;
  2341. background-position: center;
  2342. vertical-align: text-bottom;
  2343. margin-right: 10px;
  2344. }
  2345. .join-bid {
  2346. display: inline-block;
  2347. cursor: pointer;
  2348. font-size: 14px;
  2349. color: #1d1d1d;
  2350. margin-right: 10px;
  2351. .icon-canbiao-img {
  2352. background: url(~@/assets/images/icon/canbiao.png) no-repeat center;
  2353. background-size: contain;
  2354. }
  2355. .icon-canbiao-img-active {
  2356. background: url(~@/assets/images/icon/canbiao-active.png) no-repeat center;
  2357. background-size: contain;
  2358. }
  2359. }
  2360. }
  2361. </style>