DynamicList.vue 65 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092
  1. <template>
  2. <el-card class="info-list-card gray" v-loading="listState.loading">
  3. <div class="collect-list-header">
  4. <div class="c-tab-container">
  5. <div class="left">
  6. <input @click="changeAllCheck($event)" class="has-top custom-checkbox title-text-checkbox"
  7. style="margin: 16px;" type="checkbox"/>
  8. <div class="list-title" v-if="config.isWinner">项目动态</div>
  9. <div class="list-title" v-else>招标动态</div>
  10. </div>
  11. <div class="right">
  12. <div class="right-line">
  13. <div class="icon-box" :class="{active: !isTable}" @click="toggleActiveIcon('list')"><span
  14. class="j-icon icon-list"></span> <span class="icon-text">列表</span></div>
  15. <div class="icon-box" :class="{active: isTable}" @click="toggleActiveIcon('table')"><span
  16. class="j-icon icon-table"></span> <span class="icon-text">表格</span></div>
  17. </div>
  18. <div class="icon-box right-line" @click="onClickDataExport">
  19. <span class="j-icon icon-data-export"></span> <span class="icon-text">数据导出</span>
  20. </div>
  21. <div class="icon-box" @click="onClickDataCollect"><span class="j-icon icon-star"></span> <span
  22. class="icon-text">标讯收藏</span></div>
  23. </div>
  24. </div>
  25. </div>
  26. <el-dialog class="unit-dialog-group" :title="getDialogInfo.title" :visible.sync="isDialogShow">
  27. <div class="unit-dialog-content">{{ getDialogInfo.content }}</div>
  28. <span slot="footer" class="unit-dialog-footer">
  29. <el-button type="primary" @click="openBigPage">{{ getButtonTip }}</el-button>
  30. <el-button @click="isDialogShow = false">取消</el-button>
  31. </span>
  32. </el-dialog>
  33. <div class="info-list" v-show="!isTable&&!showEmpty">
  34. <portrayal-article-item
  35. class="list-item"
  36. :class="{ visited: item.visited }"
  37. v-for="item in listState.list"
  38. :key="item.id"
  39. :article="item"
  40. :selected="selected[item.id]"
  41. @change="changeCheckInput"
  42. @onCollect="onCollect"
  43. @onClick="toDetail(item)"
  44. />
  45. </div>
  46. <empty v-show="!listState.list.length">
  47. <div>
  48. <span>暂无动态</span>
  49. </div>
  50. </empty>
  51. <div class="info-list collect-table-list" v-show="isTable&&!showEmpty">
  52. <table class="table" v-show="tableList.length" style="max-width: 856px">
  53. <thead class="thead">
  54. <tr>
  55. <td width="48">序号</td>
  56. <td width="315" class="deep-border">项目名称</td>
  57. <td width="84">公告类型</td>
  58. <td width="73" class="deep-border">预算<br/>(万元)</td>
  59. <td width="181" class="buyer-column" v-if="config.isWinner">招标单位</td>
  60. <td width="133" class="deep-border">开标日期</td>
  61. <td width="174" class="winner-column" v-if="!config.isWinner">中标单位</td>
  62. <td width="76" class="deep-border">中标金额<br/>(万元)</td>
  63. <td width="133">发布日期</td>
  64. </tr>
  65. </thead>
  66. <tbody>
  67. <tr v-for="(item, index) in tableList" :class="{ visited: item.visited }" :key="index + '_' + item.id"
  68. @click="toDetail(item)">
  69. <td width="48">{{ (listState.pageNum - 1) * listState.pageSize + index + 1 }}</td>
  70. <td width="315" class="tt-l">{{ item.title }}</td>
  71. <td width="84">{{ item.bidstatus }}</td>
  72. <td width="73" class="tt-r">{{ calcBudget(item.budget) }}</td>
  73. <td width="181" class="tt-l buyer-column" v-if="config.isWinner"
  74. v-on:click.stop="goPortrayalDetail(item.buyer)">{{ item.buyer }}
  75. </td>
  76. <td width="133">{{
  77. dateFormatter(item.bidopentime ? item.bidopentime * 1000 : null, 'yyyy-MM-dd HH:mm')
  78. }}
  79. </td>
  80. <td width="174" class="tt-l winner-column" v-if="!config.isWinner">
  81. <a v-for="(w, i) in getWinnerList(item)" :key="i" style="text-decoration:none"
  82. v-on:click.stop="goPortrayalDetail(w.id)"><span v-if="i > 0">,</span>
  83. {{ w.name }}</a>
  84. </td>
  85. <td width="76" class="tt-r">{{ calcAmount(item.bidamount) }}</td>
  86. <td width="133">{{ dateFormatter(item.firsttime * 1000, 'yyyy-MM-dd') || '--' }}</td>
  87. </tr>
  88. </tbody>
  89. </table>
  90. <empty v-show="!tableList.length">
  91. <div>
  92. <span>暂时无动态</span>
  93. </div>
  94. </empty>
  95. </div>
  96. <div class="el-pagination-container center" v-if="listState.total > listState.pageSize">
  97. <el-pagination
  98. background
  99. layout="prev, pager, next, ->"
  100. :hide-on-single-page="true"
  101. :current-page.sync="listState.pageNum"
  102. :page-size="listState.pageSize"
  103. :total="listState.total"
  104. @current-change="onPageChange"
  105. >
  106. </el-pagination>
  107. </div>
  108. <div class="tags-box">
  109. <div class="tags-inputs">
  110. <div class="tag-input">
  111. <div class="tag-labels"></div>
  112. <input type="text" class="clear-input" maxlength="10" oninput="this.value=this.value.replace(/\s+/g,'')">
  113. <div class="tag-placeholder">新增标签回车保存</div>
  114. </div>
  115. <div class="add-tag-button">添加并使用</div>
  116. </div>
  117. <div class="tags-list clearfix"></div>
  118. <div class="tags-footer">
  119. <div class="tags-button button-confirm">确认添加</div>
  120. <div class="tags-button button-cancel">暂不添加</div>
  121. </div>
  122. </div>
  123. <el-dialog
  124. :visible.sync="tipDialog"
  125. title="提示信息"
  126. :show-close="false"
  127. class="tip-dialog"
  128. width="380px"
  129. center>
  130. <div>
  131. 当月采购单位画像余额为0,如需查看更多,请前往充值
  132. </div>
  133. <div slot="footer" class="dialog-footer">
  134. <el-button type="primary" @click.stop="goHandle(dialogBtnText)">{{ dialogBtnText }}</el-button>
  135. <el-button @click="tipDialog = false">取 消</el-button>
  136. </div>
  137. </el-dialog>
  138. </el-card>
  139. </template>
  140. <script>
  141. import { Button, Card, Dialog, Pagination } from 'element-ui'
  142. import Empty from '@/components/common/Empty.vue'
  143. import PortrayalArticleItem from './DynamicListItem.vue'
  144. import { dateFormatter, moneyUnit } from '@/utils/'
  145. import { mapState } from 'vuex'
  146. import { mixinVisited } from '@/utils/mixins/visited'
  147. import { getNewMsg, getPortrayalSearchExportId, getSvipNewMsg, getUnitDt, getVipUnitDt } from '@/api/modules'
  148. /* eslint-disable */
  149. export default {
  150. name: 'portrayal-dynamic-list',
  151. mixins: [mixinVisited],
  152. components: {
  153. [Pagination.name]: Pagination,
  154. [Card.name]: Card,
  155. [Button.name]: Button,
  156. [Dialog.name]: Dialog,
  157. PortrayalArticleItem,
  158. Empty
  159. },
  160. props: {
  161. subManager: {
  162. type: Boolean,
  163. default: false
  164. },
  165. config: {
  166. type: Object,
  167. default () {
  168. return {
  169. isWinner: false,
  170. hasPower: false,
  171. baseParam: {
  172. buyer: '',
  173. entId: '',
  174. }
  175. }
  176. }
  177. },
  178. filters: {
  179. type: Object,
  180. default () {
  181. return {
  182. area: '',
  183. time: ''
  184. }
  185. }
  186. },
  187. usage: {
  188. type: Object,
  189. default () {
  190. return {}
  191. }
  192. },
  193. },
  194. computed: {
  195. ...mapState({
  196. userInfo: state => state.user.info
  197. }),
  198. isTable () {
  199. return this.showIcon === 'table'
  200. },
  201. showEmpty () {
  202. return this.listState.list.length === 0 && this.listState.loaded
  203. },
  204. getFilters () {
  205. return Object.assign({}, this.config.baseParam, this.filters)
  206. },
  207. canSubmanager () {
  208. return !this.$store.state.user.info?.isSubCount
  209. },
  210. getButtonTip () {
  211. let btnText = ''
  212. const info = this.userInfo
  213. const usage = this.usage
  214. // 【立即解锁】:未体验过采购单位画像的免费用户,点击进行“欢迎体验采购单位全景分析”留资
  215. // 【去开通】:已体验过1次采购单位画像的免费用户,点击进入超级订阅购买页
  216. // 【前往升级】:超级订阅老版用户+购买了非全国采购单位画像余额为0的超级订阅新版用户,点击进入超级订阅升级页
  217. // 【联系客服】:购买了全国采购单位画像余额为0的超级订阅新版用户+无采购单位画像权限的大会员客户;点击调起智齿在线客服
  218. if (info.isFree) {
  219. if (info.freeBuyerPort === 0) {
  220. btnText = '立即解锁'
  221. } else {
  222. btnText = '去开通'
  223. }
  224. } else {
  225. // 老超级订阅用户
  226. const oldVip = info.vipStatus > 0 && !info.viper
  227. // 新超级订阅用户
  228. const newVip = info.vipStatus > 0 && info.viper
  229. // 大会员用户
  230. const member = info.memberStatus > 0
  231. // 新超级订阅用户买的非全国 余额为0
  232. const noAllProvinNoCounts = newVip && usage.provin !== -1 && usage.balance <= 0
  233. // 超级订阅新用户 购买的全国 余额为0
  234. const allProvinNoCounts = newVip && usage.provin === -1 && usage.balance <= 0
  235. // 无权限的大会员用户
  236. const noAuthMember = info.memberStatus > 0 && info.power.indexOf(5) === -1
  237. // 纯商机管理用户
  238. const entniche = info.entniche && !oldVip && !newVip && !member
  239. if (oldVip || noAllProvinNoCounts) {
  240. btnText = '前往升级'
  241. } else if (allProvinNoCounts || noAuthMember || entniche) {
  242. btnText = '联系客服'
  243. }
  244. }
  245. return btnText
  246. },
  247. dialogBtnText () {
  248. // if (this.usage.provin === -1) {
  249. // return '联系客服'
  250. // } else {
  251. // return '前往升级'
  252. // }
  253. return '立即充值'
  254. },
  255. getDialogInfo () {
  256. //采购单位画像弹框
  257. const info = {}
  258. const str = this.getButtonTip
  259. if (str === '去开通') {
  260. info.title = '开通超级订阅'
  261. info.content = '您已经免费解锁过【采购单位全景分析】权益1次,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。'
  262. } else if (str === '前往升级') {
  263. info.title = '升级超级订阅'
  264. info.content = '对不起,暂无权限,您可升级超级订阅解锁采购单位全景分析,查看更多招标动态。'
  265. } else if (str === '立即解锁') {
  266. console.log('立即解锁')
  267. } else {
  268. info.title = '开通大会员'
  269. info.content = '采购单位项目动态全面获取,帮助企业洞察采购需求,开发新客户!'
  270. }
  271. return info
  272. }
  273. },
  274. data () {
  275. return {
  276. showIcon: 'list',
  277. isAllFirst: false,
  278. isDialogShow: false,
  279. tipDialog: false,
  280. selected: {}, // 已选中的信息
  281. tableList: [],
  282. listState: {
  283. loaded: true, // 是否已经搜索过
  284. loading: false,
  285. pageNum: 1, // 当前页
  286. pageSize: 5, // 每页多少条数据
  287. lastNum: 1, // 上次页面
  288. total: 0, // 一共多少条数据
  289. list: [] // 查询请求返回的数据
  290. }
  291. }
  292. },
  293. created () {
  294. this.doQuery()
  295. },
  296. mounted () {
  297. this.initCollectEvent()
  298. },
  299. methods: {
  300. getCheckStatus (id) {
  301. console.log('id', id, this.selected[id])
  302. return this.selected[id]
  303. },
  304. changeCheckInput (id) {
  305. this.$set(this.selected, id, !this.selected[id])
  306. },
  307. dateFormatter,
  308. calcBudget (budget) {
  309. if (budget) {
  310. return moneyUnit(budget).replace('万元', '')
  311. } else {
  312. return budget
  313. }
  314. },
  315. calcAmount (bidamount) {
  316. if (bidamount) {
  317. return moneyUnit(bidamount).replace('万元', '')
  318. } else {
  319. return bidamount
  320. }
  321. },
  322. getWinnerList (item) {
  323. const {
  324. winner: names = [],
  325. winnerIds: ids = []
  326. } = item
  327. let list = []
  328. if (names.length === ids.length) {
  329. list = names.map((v, i) => {
  330. return {
  331. name: v,
  332. id: ids[i],
  333. }
  334. })
  335. }
  336. return list
  337. },
  338. goHandle (data) {
  339. const usage = this.usage
  340. if (data === '立即充值') {
  341. if (usage.provin === -1) {
  342. this.$router.push('/free/filePack/buy?type=1')
  343. } else {
  344. this.$emit('vipClick')
  345. }
  346. this.tipDialog = false
  347. } else if (data === '联系客服') {
  348. $('.help-slide-zx.open-customer').trigger('click')
  349. this.tipDialog = false
  350. } else {
  351. this.$router.push('/free/svip/buy?type=upgrade')
  352. }
  353. },
  354. goPortrayalDetail (flag) {
  355. if (this.config.isWinner) {
  356. window.open('/swordfish/page_big_pc/unit_portrayal/' + flag)
  357. } else {
  358. if (this.userInfo.power.indexOf(5) > -1) {
  359. window.open('/swordfish/page_big_pc/ent_portrait/' + flag)
  360. } else {
  361. window.open('/swordfish/page_big_pc/svip/ent_ser_portrait/' + flag)
  362. }
  363. }
  364. },
  365. showToDataExportAlert () {
  366. this.$confirm('如需查看更多表格数据,请前往进行数据导出', '', {
  367. confirmButtonText: '数据导出',
  368. cancelButtonText: '取消',
  369. center: true,
  370. showClose: false,
  371. customClass: 'exportDialog'
  372. }).then(() => {
  373. this.onClickDataExport()
  374. }).catch(() => {
  375. this.showIcon = 'list'
  376. })
  377. },
  378. async onClickDataExport () {
  379. const nowCheckItems = this.getAllSelectId()
  380. let param = this.getFilters
  381. if (nowCheckItems.length) {//有选择导出选择条
  382. param.selectIds = nowCheckItems.join(',')
  383. }
  384. const res = await getPortrayalSearchExportId(this.userInfo.memberStatus > 0, this.config.isWinner, param)
  385. if (res.error_code === 0) {
  386. if (res.data) {
  387. location.href = '/front/dataExport/toCreateOrderPage/' + res.data
  388. }
  389. }
  390. },
  391. onClickDataCollect () {
  392. const nowCheckItems = this.getAllSelectId(function (id) {
  393. return {
  394. id: id,
  395. }
  396. })
  397. this.onCollect({
  398. list: nowCheckItems
  399. })
  400. },
  401. toggleActiveIcon (type) {
  402. if (type === 'table') {
  403. if (this.listState.pageNum > 4) {
  404. this.showToDataExportAlert()
  405. return false
  406. }
  407. }
  408. this.showIcon = type
  409. },
  410. changeAllCheck (e) {
  411. //次页数据全选或这全不选切换
  412. var _this = this
  413. const nowStatus = $(e.target).prop('checked')
  414. $('.custom-checkbox:not(.has-top)').prop('checked', nowStatus)
  415. this.getPageInputObj(function () {
  416. _this.selected[$(this).attr('dataid')] = nowStatus
  417. })
  418. },
  419. getPageInputObj (callback) {
  420. const arr = []
  421. $('.custom-checkbox:not(.has-top)').each(function () {
  422. const tempN = callback.bind(this)()
  423. arr.push(tempN)
  424. })
  425. return arr
  426. },
  427. getAllSelectId (callback) {
  428. const arr = []
  429. for (var id in this.selected) {
  430. if (this.selected[id]) {
  431. if (callback) {
  432. arr.push(callback(id))
  433. } else {
  434. arr.push(id)
  435. }
  436. }
  437. }
  438. return arr
  439. },
  440. // 恢复数据至第一次请求的状态(页码等)
  441. resetListState () {
  442. const state = {
  443. loaded: false,
  444. loading: false,
  445. pageNum: 1,
  446. total: 0,
  447. list: []
  448. }
  449. Object.assign(this.listState, state)
  450. },
  451. doQuery () {
  452. this.resetListState()
  453. this.getList()
  454. },
  455. async getList () {
  456. let query = {
  457. pageNum: this.listState.pageNum,
  458. pageSize: this.listState.pageSize,
  459. }
  460. query = Object.assign(this.getFilters, query)
  461. this.listState.loading = true
  462. this.listState.loaded = false
  463. // 判断是否无筛选条件
  464. this.isAllFirst = true
  465. let res = {}
  466. if (this.userInfo.memberStatus > 0) {
  467. if (this.config.isWinner) {
  468. // 大会员-企业画像
  469. // fix: 新增自定义版大会员判断
  470. if (this.userInfo.power.indexOf(13) > -1) {
  471. res = await getNewMsg(query)
  472. } else {
  473. res = await getSvipNewMsg(query)
  474. }
  475. } else {//大会员-采购单位画像
  476. res = await getUnitDt(query)
  477. }
  478. } else {
  479. if (this.config.isWinner) {//超级订阅及免费用户-企业画像
  480. res = await getSvipNewMsg(query)
  481. } else {//超级订阅及免费用户-采购单位画像
  482. res = await getVipUnitDt(query)
  483. }
  484. }
  485. this.listState.loading = false
  486. this.listState.loaded = true
  487. if (res.data?.count) {
  488. if (this.listState.pageNum === 1) {
  489. this.listState.total = res.data.count
  490. if (res.data.count !== res.data.list.length) {
  491. this.listState.pageSize = res.data.list.length
  492. }
  493. }
  494. try {
  495. res.data.list = res.data.list.map(item => {
  496. const visited = this.pathVisited(
  497. this.createPathItem(
  498. '/article/content/*.html',
  499. `id=${item.id}`
  500. )
  501. )
  502. return {
  503. ...item,
  504. visited
  505. }
  506. })
  507. } catch (error) {
  508. }
  509. this.listState.list = res.data.list.map(v => {
  510. v.collection = 0
  511. return v
  512. }) || []
  513. this.tableList = res.data.list || []
  514. this.$nextTick(() => {
  515. this.getCollectStatusForList()
  516. })
  517. } else {
  518. this.listState.total = 0
  519. this.listState.list = []
  520. this.tableList = []
  521. }
  522. },
  523. toDetail (item) {
  524. item.visited = true
  525. this.pathVisiting(
  526. this.createPathItem(
  527. '/article/content/*.html',
  528. `id=${item.id}`
  529. )
  530. )
  531. window.open(`/article/content/${item.id}.html`)
  532. },
  533. onPageChange (p) {
  534. //免费用户仅展示前三条
  535. //付费用户展示前4页 20条表格数据
  536. if (this.isTable) {
  537. if (this.config.hasPower) {
  538. if (p > 4) {
  539. this.listState.pageNum = this.listState.lastNum
  540. this.showToDataExportAlert()
  541. return false
  542. }
  543. } else {
  544. this.listState.pageNum = this.listState.lastNum
  545. this.showToDataExportAlert()
  546. return false
  547. }
  548. } else {
  549. if (!this.config.isWinner) { //采购单位无权限留资等逻辑
  550. const isFree = this.userInfo.isFree && this.userInfo.freeBuyerPort === 0
  551. const usage = this.usage
  552. // 免费体验 - 去留资
  553. if (p !== 1 && isFree) {
  554. this.$emit('onClickUnlock', 'buyer_portrait_getNewMsg_freeuser')
  555. this.listState.pageNum = this.listState.lastNum
  556. return false
  557. }
  558. // 没有权限 弹出对应弹框
  559. if (p !== 1 && !this.config.hasPower) {
  560. if (usage.provin === -1 && usage.balance === 0) {
  561. this.tipDialog = true
  562. } else if (usage.provin >= 1 && usage.balance === 0) {
  563. this.tipDialog = true
  564. } else {
  565. this.isDialogShow = true
  566. }
  567. this.listState.pageNum = this.listState.lastNum
  568. return false
  569. }
  570. }
  571. }
  572. $('.custom-checkbox').prop('checked', false) //清除选择框
  573. this.listState.pageNum = p
  574. this.listState.lastNum = p
  575. this.getList()
  576. },
  577. openBigPage () {
  578. this.isDialogShow = false
  579. this.$emit('click', '招标动态', { button: this.getButtonTip })
  580. },
  581. showTip (text, duration) {
  582. if (duration) {
  583. duration = 1000
  584. }
  585. var _html = ''
  586. _html += '<div class="custom-toast"><div class="mask" style="background-color: transparent;"></div><div class="toast-container">'
  587. _html += '<span>' + text + '</span></div></div>'
  588. $('body').append(_html)
  589. setTimeout(function () {
  590. $('.custom-toast').fadeOut().remove()
  591. }, duration)
  592. }
  593. ,
  594. ajaxForCollectChange (baction, binfo, callback) {
  595. /*
  596. 收藏或取消收藏ajax
  597. params: {
  598. baction: String, //用户行为:R:移除收藏;C:收藏(默认)非必填
  599. binfo: Array, // 招标信息数组 必填
  600. bid: String, // 招标信息加密后id 必填
  601. }
  602. 参数示例 (baction=R binfo数组只需要bid即可)
  603. */
  604. function collBidAction (baction, binfo, callback) {
  605. var params = {
  606. baction: baction,
  607. binfo: binfo
  608. }
  609. $.ajax({
  610. type: 'post',
  611. contentType: 'application/json',
  612. url: '/publicapply/bidcoll/action',
  613. data: JSON.stringify(params),
  614. dataType: 'json',
  615. success: function (r) {
  616. if (r) {
  617. callback && callback(r)
  618. }
  619. }
  620. })
  621. }
  622. return collBidAction(baction, binfo, callback)
  623. }
  624. ,
  625. onCollect (data) {
  626. let {
  627. item,
  628. event,
  629. list
  630. } = data
  631. let binfo = []
  632. if (list) {
  633. binfo = list.map(v => ({ bid: v.id }))
  634. item = {}
  635. event = {}
  636. } else {
  637. binfo = [{ bid: item.id }]
  638. }
  639. var _this = this
  640. if (binfo.length === 0) {
  641. return _this.showTip(list.length ? '已收藏' : '尚未选择标讯,请选择', 800)
  642. }
  643. if (item.collection) {
  644. // 单个取消收藏行为
  645. this.ajaxForCollectChange('R', binfo, function (res) {
  646. if (res.data) {
  647. item.collection = 0
  648. _this.showTip('已取消收藏', 800)
  649. } else {
  650. _this.showTip(res.error_msg, 1000)
  651. }
  652. })
  653. } else {
  654. // 将本次收藏的标讯id缓存起来 用于绑定标签时使用
  655. sessionStorage.setItem('$save-tags-binfo', JSON.stringify(binfo))
  656. this.ajaxForCollectChange('C', binfo, function (res) {
  657. if (res.data) {
  658. _this.showTip('收藏成功', 1500)
  659. if (list) {
  660. const tempList = list.map(v => v.id)
  661. _this.listState.list.forEach(v => {
  662. const tempIndex = tempList.indexOf(v.id)
  663. if (tempIndex > -1) {
  664. v.collection = 1
  665. }
  666. })
  667. event = {
  668. target: $('.info-list .list-item i.icon-collect')
  669. }
  670. } else {
  671. item.collection = 1
  672. }
  673. var top = (parseInt($(event.target).position().top) + 30 - (list ? 28 : 0)) + 'px'
  674. var left = (parseInt($(event.target).position().left) - 300)
  675. if (left < 0) {
  676. top = (parseInt($('.collect-list-header .j-icon.icon-star').position().top) + 30 - (list ? 28 : 0)) + 33 + 'px'
  677. left = (parseInt($('.collect-list-header .j-icon.icon-star').position().left) - 300 + 54)
  678. }
  679. left += 'px'
  680. $('.tags-box').show(function () {
  681. window.activeTags = []
  682. $('.tag-labels').empty()
  683. $('.clear-input').val('')
  684. $('.tags-list').find('.tags-item').removeClass('tags-active')
  685. $('.tag-placeholder').show()
  686. }).css({
  687. top: top,
  688. right: 'unset',
  689. left: left
  690. })
  691. window.getUserTags()
  692. } else {
  693. if (res.error_msg.indexOf('付费') > -1) {
  694. _this.showTip('您的标讯收藏上限为5000条,请联系客服人员。', 1500)
  695. }
  696. }
  697. })
  698. }
  699. }
  700. ,
  701. initCollectEvent () {
  702. const _this = this
  703. function toastFn (text, duration) {
  704. _this.showTip(text, duration)
  705. }
  706. // 自定义标签
  707. // 标签输入框事件
  708. $('.tags-box').click(function (e) {
  709. e.stopPropagation()
  710. })
  711. $('.tag-input').click(function (e) {
  712. e.stopPropagation()
  713. $(this).children('.tag-placeholder').hide()
  714. $(this).children('input').focus()
  715. })
  716. // 标签输入框回车事件
  717. $('.tag-input .clear-input').keydown(function (event) {
  718. event.stopPropagation()
  719. if (event.keyCode == 13) {
  720. if (!$('.tags-box').is(':hidden')) {
  721. $('.tags-inputs .add-tag-button').trigger('click')
  722. }
  723. }
  724. })
  725. // 标签输入框失去焦点事件
  726. $('.tag-input .clear-input').blur(function () {
  727. if ($('.tag-labels').children().length == 0 && $(this).val() == '') {
  728. $('.tag-placeholder').show()
  729. }
  730. })
  731. // 添加标签按钮事件
  732. $('.tags-inputs .add-tag-button').on('click', function () {
  733. var input = $('.tag-input .clear-input')
  734. if (input.val().length >= 2 && input.val().length < 11) {
  735. // ajax提交自定义标签
  736. addTagsAjax(input.val())
  737. }
  738. })
  739. // 点击确定按钮,绑定标签
  740. $('.tags-footer .button-confirm').on('click', function () {
  741. if (!$('.tags-box').is(':hidden')) {
  742. var lids = ''
  743. var lname = ''
  744. $('.tags-item.tags-active').each(function () {
  745. if ($(this).attr('data-id')) {
  746. if (lids != '') {
  747. lids += ','
  748. }
  749. if (lname != '') {
  750. lname += ','
  751. }
  752. lids += $(this).attr('data-id')
  753. lname += $(this).text()
  754. }
  755. })
  756. var params = {
  757. lids: lids,
  758. laction: 'S',
  759. binfo: JSON.parse(sessionStorage.getItem('$save-tags-binfo'))
  760. }
  761. // 执行保存绑定标签操作
  762. if (params.lids !== '') {
  763. saveChooseTags(params, function () {
  764. $('.tags-footer .button-cancel').trigger('click')
  765. })
  766. }
  767. }
  768. })
  769. $('.tags-footer .button-cancel').on('click', function () {
  770. $('.tags-box').hide(function () {
  771. // 标签弹框消失时 清除上次选择的标签分类
  772. activeTags = []
  773. $('.tag-labels').empty()
  774. $('.clear-input').val('')
  775. $('.tags-list').find('.tags-item').removeClass('tags-active')
  776. $('.tag-placeholder').show()
  777. })
  778. })
  779. window.activeTags = [] // 选中的自定义标签 作为全局变量使用
  780. // 解绑自定义标签
  781. function deleteInputTag (item) {
  782. var index = $(item).parent().attr('data-index')
  783. var id = $(item).parent().attr('data-id')
  784. activeTags.splice(index, 1)
  785. inputTagList()
  786. $('.tags-item[data-id="' + id + '"]').removeClass('tags-active')
  787. }
  788. window.deleteInputTag = deleteInputTag
  789. function inputTagList () {
  790. var ht = ''
  791. $('.tag-labels').html(ht)
  792. activeTags.forEach(function (v, i) {
  793. ht += '<span class="tag-label" data-index=' + i + ' data-id="' + v.lid + '">'
  794. ht += '<em>' + v.lname + '</em>'
  795. ht += '<i class="tag-close" onclick="deleteInputTag(this)"></i>'
  796. ht += '</span>'
  797. })
  798. $('.tag-labels').html(ht)
  799. if ($('.tag-labels').children('.tag-label').length > 0) {
  800. $('.tag-placeholder').hide()
  801. }
  802. checkTagDisabled()
  803. }
  804. // 渲染标签列表数据
  805. function renderTagsList (data) {
  806. if (data && data.length > 0) {
  807. var ht = ''
  808. data.forEach(function (v, i) {
  809. ht += '<span class="tags-item" data-count=' + v.count + ' data-id=' + v.lid + '>' + v.lanme + '</span>'
  810. })
  811. $('.tags-list').html(ht)
  812. activeTags.forEach(function (s, j) {
  813. $('.tags-list .tags-item[data-id="' + s.lid + '"]').addClass('tags-active')
  814. })
  815. $('.tags-item').click(function (e) {
  816. e.stopPropagation()
  817. if ($(this).hasClass('disabled')) return
  818. var id = $(this).attr('data-id')
  819. var name = $(this).text()
  820. $(this).toggleClass('tags-active')
  821. if ($(this).hasClass('tags-active')) {
  822. activeTags.push({
  823. lid: id,
  824. lname: name
  825. })
  826. inputTagList()
  827. } else {
  828. var newArr = activeTags.filter(function (item) {
  829. return item.lid != id
  830. })
  831. activeTags = newArr
  832. console.log(activeTags, newArr, 'quxiao')
  833. inputTagList()
  834. }
  835. })
  836. }
  837. inputTagList()
  838. }
  839. // 获取用户自定义标签
  840. function getUserTags () {
  841. $.ajax({
  842. type: 'post',
  843. url: '/publicapply/bidcoll/getLabel?t=' + Date.now(),
  844. success: function (r) {
  845. if (r.error_code == 0 && $.isArray(r.data)) {
  846. renderTagsList(r.data.reverse())
  847. }
  848. }
  849. })
  850. }
  851. window.getUserTags = getUserTags
  852. /*
  853. 保存或清除标签 ajax
  854. params: {
  855. lids: String 标签id(加密后), 非必传
  856. lname: String 标签名称, 非必传
  857. laction: String 用户行为:S添加或绑定标签;D删除标签 非必传
  858. binfo: Array 招标信息数组(已收藏的招标信息) 非必传
  859. bid: String 招标信息加密后id 必传
  860. }
  861. 1:lids为空;lname不为空;laction=”S”;binfo数组不为空->新增标签并且绑定收藏信息
  862. 2:lids不为空;laction=”S”;binfo数组不为空->收藏信息绑定标签
  863. 3:lids不为空;laction=”D”;->删除标签 并解绑收藏的信息
  864. */
  865. function saveChooseTags (params, callback) {
  866. $.ajax({
  867. type: 'post',
  868. url: '/publicapply/bidcoll/label',
  869. contentType: 'application/json',
  870. data: JSON.stringify(params),
  871. dataType: 'json',
  872. success: function (r) {
  873. if (r.data) {
  874. toastFn('标签绑定成功', 1000)
  875. callback && callback()
  876. }
  877. }
  878. })
  879. }
  880. // 新增标签
  881. function addTagsAjax (name) {
  882. $.ajax({
  883. type: 'post',
  884. url: '/publicapply/bidcoll/addLabel',
  885. data: {
  886. name: name
  887. },
  888. dataType: 'json',
  889. success: function (r) {
  890. if (r.data) {
  891. $('.tag-input .clear-input').val('')
  892. // 添加标签成功后 绑定标签
  893. if (activeTags.length < 3) {
  894. activeTags.push({
  895. lid: r.data,
  896. lname: name
  897. })
  898. }
  899. getUserTags()
  900. } else {
  901. // toastFn(r.error_msg, 1000)
  902. toastFn('标签已经存在,无需添加', 1000)
  903. }
  904. }
  905. })
  906. }
  907. /*
  908. 收藏或取消收藏ajax
  909. params: {
  910. baction: String, //用户行为:R:移除收藏;C:收藏(默认)非必填
  911. binfo: Array, // 招标信息数组 必填
  912. bid: String, // 招标信息加密后id 必填
  913. }
  914. 参数示例 (baction=R binfo数组只需要bid即可)
  915. */
  916. function collBidAction (baction, binfo, callback) {
  917. var params = {
  918. baction: baction,
  919. binfo: binfo
  920. }
  921. $.ajax({
  922. type: 'post',
  923. contentType: 'application/json',
  924. url: '/publicapply/bidcoll/action',
  925. data: JSON.stringify(params),
  926. dataType: 'json',
  927. success: function (r) {
  928. if (r) {
  929. callback && callback(r)
  930. }
  931. }
  932. })
  933. }
  934. function checkTagDisabled () {
  935. if (activeTags.length >= 3) {
  936. // 禁用标签
  937. $('.tags-list').find('.tags-item:not(.tags-active)').addClass('disabled')
  938. } else {
  939. // 解除禁用
  940. $('.tags-list').find('.disabled').removeClass('disabled')
  941. }
  942. }
  943. function baiduEvent (str) {
  944. try {
  945. // eslint-disable-next-line no-undef
  946. _hmt.push(['_trackEvent', '大会员-pc', 'click', str])
  947. } catch (e) {
  948. console.log('未初始化百度统计')
  949. }
  950. }
  951. // 收藏点击事件
  952. function collectClick () {
  953. // console.log(vipState, '是否是超级订阅用户')
  954. // 单个收藏点击事件
  955. $('.icon-collect').on('click', function (e) {
  956. baiduEvent('列表页标讯收藏-星标') // 百度统计代码
  957. e.stopPropagation()
  958. var $that = $(this)
  959. var checked = $(this).hasClass('checked')
  960. var checkedId = $(this).attr('dataid')
  961. var binfo = [{
  962. bid: checkedId
  963. }]
  964. if (checked) {
  965. // 单个取消收藏行为
  966. collBidAction('R', binfo, function (res) {
  967. if (res.data) {
  968. $that.removeClass('checked')
  969. toastFn('已取消收藏', 800)
  970. } else {
  971. toastFn(res.error_msg, 1000)
  972. }
  973. })
  974. } else {
  975. // 将本次收藏的标讯id缓存起来 用于绑定标签时使用
  976. sessionStorage.setItem('$save-tags-binfo', JSON.stringify(binfo))
  977. collBidAction('C', binfo, function (res) {
  978. if (res.data) {
  979. toastFn('收藏成功', 1500)
  980. if (selectType == 'title') {
  981. $that.addClass('checked')
  982. } else {
  983. $that.addClass('checked')
  984. }
  985. var top = (parseInt($that.position().top) + 50) + 'px'
  986. $('.tags-box').show(function () {
  987. activeTags = []
  988. $('.tag-labels').empty()
  989. $('.clear-input').val('')
  990. $('.tags-list').find('.tags-item').removeClass('tags-active')
  991. $('.tag-placeholder').show()
  992. }).css('top', top)
  993. getUserTags()
  994. } else {
  995. // 是超级订阅用户或者其他付费用户
  996. if (vipState || res.error_msg.indexOf('付费') > -1) {
  997. toastFn('您的标讯收藏上限为5000条,请联系客服人员。', 1500)
  998. } else {
  999. updateVipDialog('标讯收藏满100条-去升级')
  1000. }
  1001. }
  1002. })
  1003. }
  1004. })
  1005. // 批量收藏
  1006. $('#bid-collect').off('click').bind('click', function (e) {
  1007. baiduEvent('列表页标讯收藏-星标') // 百度统计代码
  1008. e.stopPropagation()
  1009. var top = (parseInt($(this).position().top) + 60) + 'px'
  1010. var len = $('.custom-checkbox:not(".check-all"):checked').length
  1011. var checkedId = [] // 提交后端需要的标讯id数组
  1012. var leftArr = [] // checkbox选中的数据
  1013. var rightArr = [] // 当前已收藏过的数据
  1014. var notSameArr = [] // 选中的数据 与 收藏过的数据相比不同的数组
  1015. $('.custom-checkbox:not(".check-all"):checked').each(function () {
  1016. if ($(this).attr('dataid')) {
  1017. checkedId.push({
  1018. bid: $(this).attr('dataid')
  1019. })
  1020. leftArr.push($(this).attr('dataid'))
  1021. }
  1022. })
  1023. $('.icon-collect.checked').each(function () {
  1024. if ($(this).attr('dataid')) {
  1025. rightArr.push($(this).attr('dataid'))
  1026. }
  1027. })
  1028. var $that = $(this)
  1029. // 判断有无选中的标讯信息
  1030. if (len > 0) {
  1031. if (leftArr.length <= rightArr.length) {
  1032. for (key in leftArr) {
  1033. var stra = leftArr[key]
  1034. var count = 0
  1035. for (var j = 0; j < rightArr.length; j++) {
  1036. var strb = rightArr[j]
  1037. if (stra == strb) {
  1038. count++
  1039. }
  1040. }
  1041. if (count === 0) { // 表示数组1的这个值没有重复的,放到notSameArr列表中
  1042. notSameArr.push(stra)
  1043. }
  1044. }
  1045. // 如果没有不同的值 即为选中的标讯都已收藏过 有不同的值即为有未收藏的标讯
  1046. console.log(notSameArr, 'notSameArr')
  1047. if (notSameArr.length == 0) {
  1048. toastFn('已收藏', 800)
  1049. return
  1050. }
  1051. }
  1052. sessionStorage.setItem('$save-tags-binfo', JSON.stringify(checkedId)) // 将本次收藏的标讯id缓存起来 用于绑定标签时使用
  1053. collBidAction('C', checkedId, function (res) {
  1054. if (res.data) {
  1055. toastFn('收藏成功', 1500)
  1056. if (selectType == 'title') {
  1057. $('.custom-checkbox:not(".check-all"):checked').siblings().children('.icon-collect').addClass('checked')
  1058. } else {
  1059. $('.custom-checkbox:not(".check-all"):checked').parents('.liLuceneList').find('.icon-collect').addClass('checked')
  1060. }
  1061. // 收藏成功后再查一次收藏状态,为了区分达到收藏上限点时部分收藏成功,部分收藏失败
  1062. getBidIsColl()
  1063. // 弹出标签弹框时 清除上次选择的标签
  1064. $('.tags-box').show().css('top', top)
  1065. getUserTags()
  1066. } else {
  1067. // 是超级订阅用户或者其他付费用户
  1068. if (vipState || res.error_msg.indexOf('付费') > -1) {
  1069. toastFn('您的标讯收藏上限为5000条,请联系客服人员。', 1500)
  1070. } else {
  1071. updateVipDialog('标讯收藏满100条-去升级')
  1072. }
  1073. }
  1074. })
  1075. } else {
  1076. toastFn('尚未选择标讯,请选择', 1000)
  1077. }
  1078. })
  1079. }
  1080. getUserTags()
  1081. }
  1082. ,
  1083. getCollectStatusForList () {
  1084. const _this = this
  1085. // 获取当前页信息流收藏状态
  1086. function getBidIsColl () {
  1087. // collectClick()
  1088. var bids = ''
  1089. var dataId = ''
  1090. // 区分标题搜索和全文搜索收藏
  1091. var $dom = $('.info-list-card .title-text-checkbox[name="bid-list"]')
  1092. $dom.each(function () {
  1093. if ($(this).attr('dataid')) {
  1094. dataId = $(this).attr('dataid')
  1095. if (bids != '') {
  1096. bids += ','
  1097. }
  1098. bids += dataId
  1099. }
  1100. })
  1101. $.ajax({
  1102. type: 'post',
  1103. url: '/publicapply/bidcoll/isColl?t=' + Date.now(),
  1104. data: {
  1105. bids: bids
  1106. },
  1107. dataType: 'json',
  1108. success: function (r) {
  1109. if (r.data) {
  1110. var data = r.data
  1111. $('.icon-collect').removeClass('checked')
  1112. data.forEach(function (item, index) {
  1113. _this.listState.list.forEach(v => {
  1114. if (v.id === item) {
  1115. v.collection = 1
  1116. }
  1117. })
  1118. $('.icon-collect[dataid="' + item + '"]').addClass('checked')
  1119. })
  1120. }
  1121. }
  1122. })
  1123. }
  1124. getBidIsColl()
  1125. }
  1126. }
  1127. }
  1128. /* eslint-enable */
  1129. </script>
  1130. <style lang="scss" scoped>
  1131. .tip-dialog {
  1132. ::v-deep {
  1133. .el-button--primary,
  1134. .el-button--primary:hover,
  1135. .el-button--primary:focus {
  1136. width: 132px;
  1137. height: 36px;
  1138. margin-right: 52px;
  1139. text-align: center;
  1140. background: #2CB7CA;
  1141. border-radius: 6px;
  1142. font-size: 16px;
  1143. color: #fff;
  1144. border: 0;
  1145. }
  1146. .el-dialog__header {
  1147. padding-top: 32px !important;
  1148. }
  1149. .el-dialog__body {
  1150. padding: 20px 32px;
  1151. color: #686868;
  1152. font-size: 14px;
  1153. line-height: 22px;
  1154. text-align: justify;
  1155. }
  1156. .el-dialog__body i {
  1157. color: #2CB7CA;
  1158. }
  1159. .el-button--default,
  1160. .el-button--default:hover,
  1161. .el-button--default:focus {
  1162. width: 132px;
  1163. height: 36px;
  1164. text-align: center;
  1165. background: #fff;
  1166. border-radius: 6px;
  1167. font-size: 16px;
  1168. color: #686868;
  1169. border: 1px solid #DCDFE6;
  1170. }
  1171. .el-dialog__footer {
  1172. padding-bottom: 32px;
  1173. }
  1174. }
  1175. }
  1176. </style>
  1177. <style lang="scss">
  1178. .info-list-card .custom-checkbox {
  1179. float: left;
  1180. width: 14px;
  1181. height: 14px;
  1182. border: 1px solid #E0E0E0;
  1183. border-radius: 3px;
  1184. background-color: #fff;
  1185. margin-right: 16px;
  1186. cursor: pointer;
  1187. }
  1188. .custom-checkbox:checked {
  1189. width: 14px;
  1190. height: 14px;
  1191. background: url(https://cdn-ali.jianyu360.com/images/biddingSearch/icon-checked.png) no-repeat center;
  1192. background-size: contain;
  1193. border: 0;
  1194. }
  1195. .tags-box {
  1196. display: none;
  1197. position: absolute;
  1198. top: 0;
  1199. right: 0;
  1200. width: 332px;
  1201. padding: 20px 16px;
  1202. background: #FFFFFF;
  1203. border: 1px solid #ECECEC;
  1204. box-sizing: border-box;
  1205. border-radius: 8px;
  1206. box-shadow: 0px 0px 28px 0px rgba(0, 0, 0, 0.08);
  1207. z-index: 99;
  1208. }
  1209. .tags-box .tags-inputs {
  1210. position: relative;
  1211. width: 100%;
  1212. display: flex;
  1213. align-items: center;
  1214. justify-content: space-between;
  1215. }
  1216. .tags-box .tags-inputs .tag-input {
  1217. width: 100%;
  1218. padding: 0;
  1219. min-height: 34px;
  1220. max-height: 74px;
  1221. overflow-y: scroll;
  1222. display: inline-block;
  1223. border: 1px solid #ccc;
  1224. border-radius: 4px;
  1225. background-color: #fff;
  1226. cursor: text;
  1227. }
  1228. .tags-inputs .tag-input::-webkit-scrollbar {
  1229. width: 8px;
  1230. }
  1231. .tags-inputs .tag-input::-webkit-scrollbar-thumb {
  1232. border-radius: 4px;
  1233. background-color: #ECECEC;
  1234. }
  1235. .tag-input > .tag-labels {
  1236. display: inline;
  1237. vertical-align: middle;
  1238. }
  1239. .tag-input > .clear-input {
  1240. display: inline-block;
  1241. padding: 0 10px;
  1242. width: 160px;
  1243. height: 36px;
  1244. line-height: 1;
  1245. background: #fff;
  1246. border-radius: 2px;
  1247. vertical-align: middle;
  1248. border: none;
  1249. background-color: transparent;
  1250. box-shadow: none;
  1251. box-sizing: border-box;
  1252. font-size: 14px;
  1253. color: #1d1d1d;
  1254. }
  1255. .tag-input > .tag-labels > .tag-label {
  1256. display: inline-block;
  1257. padding: 5px 12px;
  1258. font-size: 14px;
  1259. line-height: 1.2;
  1260. margin: 5px;
  1261. cursor: pointer;
  1262. border: 1px solid #ECECEC;
  1263. box-sizing: border-box;
  1264. border-radius: 4px;
  1265. background: #F5F6F7;
  1266. color: #1D1D1D;
  1267. }
  1268. .tag-close {
  1269. display: inline-block;
  1270. width: 16px;
  1271. height: 16px;
  1272. margin-left: 8px;
  1273. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEwSURBVHgB7ZWxDYMwEEXPER1NRmEFJggUiJpJQiahRhSECViBUdzQIYgdgYQIPnwXmkT+DcbY/s9n3wHg5PTPKoriejRGYB+rqrpP0xT1fR9mWSaBaO77fiuEeCZJ8gAqwGyez68dBWIxV83gbSJEboK47HXWda1DF626Ar2gTUi35lo6iqbxuwBxHEvP80JF3lEg9sxhjp5pDnoHdCSGYWjVDj4W3B4HZo4dHQpgC8E1twI4gtANrrk1AAYxP1nmJAAEArjmZIADiI5TsC5AlJRS5zWcJVIEDLd9LXIUrCNgSjVqsWIBYHnOqZhrHR6BTZGhVEwSAKXCcSHEGebfQBjvAKe8cv6iRgC1i4ZijkHotUxz0TtQlmWuFrpxKtxyHOM4Nmma5sAVJaednH5SLxmyS6JIrGjkAAAAAElFTkSuQmCC);
  1274. background-position: center 2px;
  1275. background-repeat: no-repeat;
  1276. background-size: contain;
  1277. }
  1278. .tag-placeholder {
  1279. position: absolute;
  1280. top: 12px;
  1281. left: 16px;
  1282. color: #bbb;
  1283. font-size: 14px;
  1284. }
  1285. .tags-box .tags-list {
  1286. margin-top: 12px;
  1287. overflow-y: auto;
  1288. height: 220px;
  1289. }
  1290. .tags-box .tags-list::-webkit-scrollbar {
  1291. width: 8px;
  1292. }
  1293. .tags-box .tags-list::-webkit-scrollbar-thumb {
  1294. border-radius: 4px;
  1295. background-color: #ECECEC;
  1296. }
  1297. .tags-box .tags-list .tags-item {
  1298. float: left;
  1299. min-width: 44px;
  1300. padding: 0 8px;
  1301. margin: 10px 8px 0 0;
  1302. height: 24px;
  1303. line-height: 24px;
  1304. border-radius: 4px;
  1305. border: 1px solid #ECECEC;
  1306. box-sizing: border-box;
  1307. color: #1D1D1D;
  1308. text-align: center;
  1309. font-size: 14px;
  1310. background: #F5F6F7;
  1311. cursor: pointer;
  1312. }
  1313. .tags-item.tags-active {
  1314. padding: 0 8px 0 24px !important;
  1315. background: #2CB7CA url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADPSURBVHgB7ZNREcIwDIYjYRImYRLmZHPAHAwHlUAdIAEJSKiESgjpEY7Qg7uFdXnKd5eXdMmfpX8BHMdxDEDEgSJQ9GANiU4UGZ9cwBISXPFNGWIAKyrxZLr+suq/xdkwV4oFlFBNR3ET4veS0zaJosGoqOtZ8EVUi4tGWbM+rklC/Ax7KH++dY18ZbmZuGi8iKbhxzdTJT5DSyo/LNXZSZxljV80A3T4aayR86vIJTzyjX8xZTATF0NIU24y5xFDSFNGU3ExxNzsmTmO4zAPYEiZdz83IV0AAAAASUVORK5CYII=) no-repeat 6px center !important;
  1316. color: #fff !important;
  1317. background-size: 16px !important;
  1318. border: 0 !important;
  1319. }
  1320. .tags-item.disabled {
  1321. color: #8E8E8E !important;
  1322. }
  1323. .tag-label em {
  1324. font-style: normal;
  1325. }
  1326. .add-tag-button {
  1327. margin-left: 16px;
  1328. color: #2cb7ca;
  1329. font-size: 14px;
  1330. line-height: 22px;
  1331. white-space: nowrap;
  1332. cursor: pointer;
  1333. }
  1334. .tags-footer {
  1335. margin-top: 20px;
  1336. display: flex;
  1337. align-items: center;
  1338. justify-content: center;
  1339. }
  1340. .tags-button {
  1341. padding: 3px 17px;
  1342. color: #1d1d1d;
  1343. font-size: 14px;
  1344. line-height: 22px;
  1345. border-radius: 4px;
  1346. border: 1px solid #e0e0e0;
  1347. text-shadow: 0px 0px 28px 0px rgba(0, 0, 0, 0.08);
  1348. cursor: pointer;
  1349. }
  1350. .button-confirm {
  1351. margin-right: 16px;
  1352. color: #fff;
  1353. background: #2cb7ca;
  1354. border-color: #2cb7ca;
  1355. }
  1356. .j-icon {
  1357. display: inline-block;
  1358. width: 20px;
  1359. height: 20px;
  1360. }
  1361. .icon-list {
  1362. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAYCAYAAACSuF9OAAAApElEQVRIie2UwQkDIRBFn7JNbEkWYAWmrTSg96Si3aQLc3AFI0H3EE0O82AufuEPKE957w1wJeGAu7UWgBACQM5XxvIAnC7K1mKxkhnLkPt1dagmFLdQGrgAT2AjPVlNzkezAW4BbrSfpJd/FRVjnNV1ivoP/RxZqMdyyO+NSoxT0SQT78eYD3dyHgfPDhgxdQcxdRcxdQ9ZqIeYujFi6jP8n6lfC3duA8uNLvEAAAAASUVORK5CYII=);
  1363. background-repeat: no-repeat;
  1364. background-size: contain;
  1365. }
  1366. .icon-box.active .icon-list {
  1367. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAYCAYAAACSuF9OAAAAmklEQVRIie3UsQ2DMBCF4d+IJcIMULJDModZizmcGaBkBscZgwIswBE4KQwp7qtsn6U76aSnStM9gJaJBgxbvn4jLQdoVZrutWrmgCL4uK6n5rLgQZ3UeI/KgAZ4A5ZpZSFfT80yr+yEXvuGe725hyu7nAwUIwPF5CxJDBckdfXs/VGS+huS1B8kqX8lA8X83UCS1BGS1EcsoEd3djhI1jC4DwAAAABJRU5ErkJggg==);
  1368. background-repeat: no-repeat;
  1369. background-size: contain;
  1370. }
  1371. .icon-table {
  1372. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAA3ElEQVRIie3XQUrDQBiG4SdDeghdeABX9QZScCH0EuqhulPX/wVcCD2DXqELewcttAsbO2jNys4UzAuBBD743vlDhkwTEad4xCVGyrDCM+5a3OOqUHFHi2s8JEwKl+dMkt3YVxijOfB1se2CUcps3vD694v8wQuW3UPqCR6SdW2BLwaBNrs/k72bUlSfwFEJLPy+eUyz3KwnN8ty057cYp9AFQaB6gJNRBT/9nOqT+CoBIZ94F8JNPsETnBeoHy87fo0iYh35Q4k3/lImFcqh3nCDZ7s/tVL0B3NbjcYbCQMu974QgAAAABJRU5ErkJggg==);
  1373. background-repeat: no-repeat;
  1374. background-size: contain;
  1375. }
  1376. .icon-box.active .icon-table {
  1377. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAA30lEQVRIie3XQUrDQBiG4SdDeghdeICSRb2BFFwUegnbQ3VXvUUWQg+QlV6hC71DLejCph1qzcrOFMwLgQQ++N75Q4ZMUdXNNZ5wh4E0bPGMeYkl7hMVt5SY4DFgnLg8Zhwcxr7FCMWZr9tdFwxCZPOG179f5A9e8N4+hI7gOfnMLbCnFyij+xvRu0lF9glclMDa75vHNMotOnKLKDftyK1PCWShF8guUFR1k/zbj8k+gYsS6PeBfyVQnBK4wjBB+WjX9W1S1c1GugPJMR8Bq0zlsAp4QO3wr56C9mg2+wJlxSMZcnbbKAAAAABJRU5ErkJggg==);
  1378. background-repeat: no-repeat;
  1379. background-size: contain;
  1380. }
  1381. .icon-data-export {
  1382. 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);
  1383. background-repeat: no-repeat;
  1384. background-size: contain;
  1385. }
  1386. /* /images/collected.png */
  1387. .icon-star {
  1388. 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);
  1389. background-repeat: no-repeat;
  1390. background-size: contain;
  1391. }
  1392. .icon-star-active {
  1393. 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);
  1394. background-repeat: no-repeat;
  1395. background-size: contain;
  1396. }
  1397. .icon-hot-vip {
  1398. display: inline-block;
  1399. width: 42px;
  1400. height: 20px;
  1401. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAAAkCAYAAAAjMNwcAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAyMSURBVHgBpVrdj1VXFV/rMuX7417AGWihDEIoJYEZIonyUaDxQZuY0uijD6XGF6MW+hdAffERbfTRgG8+mFAT44sxnUpJhWoL1FgSpR2odqApzIydKczXWe6918de+54zFOkOzD33nH32x2//1m+tvfZFeIhy98NzhwlpsEXVISAaDLfaABT/A/8Pf4jiH8T4hSoIn1RRJd8pfA/1MNXDWBPT7QpTB6E+NxSeEbfpnhM3T5jv8zWkTvk69YH5WbgcDZfXAavhcPcSVLOvr9j5gyH4Pws+aEX64LX27MKFxyqojoX+2zyoYoIFWICUhhv7EMAScLkigU4c0wsg7RE4kECAT58MQIWp+QhlFfpAAa0K7+pqSFsGmGuPFMz0l663gIYWtHpOLtnx/evwAOVzAYtAzSxadCK0f1wH7lZQQSDUVSdmTpq84AfFhImrG4ACTHokTCEDFN3kuL34jvabgGNQ0mfFgAtzIbFNgM1gZ+bxYIXFCGfmZu693Nn90vBDAzZ148Jz0DN7mhnFg40gVZWuGAkmBIU5ArOLJ1IwJsxJWAmRdWk26E1HzZU/GTv0rIvUCm3ofVCErV0GwSwXZOFQzRXygsuiOSYOhzsvr9z1wzPzYdKa78HMyIUT2FOdDX23Ddkw2IQVaLe82Ap7mgwJE1BXP923d+I1pscofwCyBqV3pKKAxWJnvaa64VmL+0rf+Z71Ea/5HZSGUHD3TQvYNmZuvT/8Of3pu788AfOURoZNj/zldGjkaJaEOnuY7mJioj0yITMxp1GuHRmsiH1mpz7K3805iOCrSfO1sBOcs3Cib9on3UlFSmMVk3XvSb98LWZ7ZuWuH73QjU2NYTMfvXUqvHNUFj91lFiB3gpMdVD1CKw+qrtiIhlzjCXROJCgoTAzuzis/VhBsXPEjLQQkjyV8xOvnQwcMvERyvrKuvTx/KdXfnEK7gfYzMhbJwir4zxUEiKBfkUzMwEJ8wxseUSAy6mUtE8Wo5O1d8WJgIGZrRAUem7DQhGyJ+kmmvmBstOaSiCzZqoSOHBkiXM7zMkQBh0ff+eV4x4jg/juyJv9C2DBB6jsYMoqlfMEnJfUuVi44MILcgItDsIJu8qKAkeYQw4TZxVvnllVmadTEfchgzPlNH7U7yYb0paOIcsYeA+r950UjAfgdqv3NIYFsE6rAGoUiBYhJWwpf0FybM6U4vVW5ihrVLgwM7E0SCLHpoQhClhMFH3OAg9ZxF0z2EKmrhoja4m+aISGLifC601ZL9QTZVlpL0A8bf2kJyNvH5qB2dcSQJWJInqXnsWV4J9vD8Hk+McupAFcuHgp7Nj7TV5p7H4H4NqlczAx9okKaip9j2+Ddf3b0r2rF/8E0/c+0xnYbLbs+iosW7U6Pbt6cQi8g6As5nVLyHBY/fhv+1f20iOLFoOwt3RqdYdj8V9g2dOBZUM98eEszJ0EJnmq3pLXEjuquiddtGQpnD/7W/SgJ8C+9g3QPQ/ygKK7oJvD7+H53/2quxn49os/tflMBUCu/Pn3tTobt+1MgC1ctAQmxu/A++9egC9Sdu5/uthuARQOxRYhX2KK5QLLToR7Q62oXQGmw+Bm7wzEVI6yN6TV6/trA4kMmBi/Xfg5CSzwX5feqNXfMrAvALEWfL9NpdO30a4nx2/DFymd3vWg5sj27rolJQkbnboPdVbh8vDoO6fagWELDhetmjdioWTdIY0Zkh0sb/cmRqkJabk1/B4sHzgAsulO/YdJ0rXLb9TwiIABiO+lCPjd+gTXbXAzAQp1au1s33Mw/H9KhDs6Qt4yXTn/R3j/738r6mZTVMgq4DgXVLsZu+Sv1MhUQgmD5R1t9SAecWGBuGL2cCLm6Dwkguy91vXvqE3w9siwhhvGzUtDZ2uT7Nv0BKzbtN0FAQB3bn1Ya2/5ytU5BKAI/p16nVWdwNQOLF3ZDp/hf3gnfp/472hjXfFNIj5Z3tNIJIaUHYrGuhZrBjwGQoYmbQcUW4nMORKQrQe4+JOhDjWWd3prA7pz8zpfiKOZHP8kiH3dHAcOPSsOPHvRbrbGsqy9xq6npz4L/+ssjPomQ1drSF/Hbn1Uq7t0xSoOM3LUwHMWuBw44uO7Jg4w2AoK3692akxDWVLkvZZVVzgiwzbXGTYaANM4JtYO7IImECLDLAYRHRm99e9a3dW9GyyeG20AIJZHgjPQ8fE8kKaCeU9P3avVFYYlM8Nu3qPpmk5VwuiiYn9IB8Eq/cZbFsbKkFPbLrYRUV/6awOKLJkcu520bnJsHnYdPCJNSZgeupiZukvQUCJ71Cwiw5pKAkENDVh/xz5uBjearJAB1Tv7XYpNM28AfSAaSxT90kGVu/d0xyJ//R7/rmivxSbhvzn8D9jafgouz8OurYP7VVV18xxM+Uajk1ydRJ8XenLsTlMVePMPv5FBZZc3fe9eY91lKztgO29UQZfEgfOY5LIn4hR0M4o94ASaPQ1g9jiq4ZCtWp1AmHAQfrxx9a/FoKKOTYxtD6HEudqABw4+5+NOG1yTh1y4eEk0N9u3Tow3A3brxjV4kBLZFdmYs8QacKHMv3K3NZHic3UJh9GCYWSxHFh+KYOnwObtRpPwx2i+WbvWwpbBfUZUlKA2AtLkITt9G6T79Ddo2H8aWfggpXfjZtj7zHd42BZpmtyIx9RCOT5jtHy/13vKprOz7bJTyPELWZp39fpNtUnEWKzJ4w0eOiKoU06riGlOjN2utbNcvJ84aWxqc8/Xj8ATew7GjYvb/pHtPTVDzPGzy325T9Fq0oArJ0HdlsngiWcA4L8XQIk4Uqaw6yne7+t/ErpLc3iwNmjXAQCgDJVtqFNwW3snMkydQ6zUFIN1eh+DvJBAHgNEcfNpzk7kJeaxHB9YJK8D04hBov6MSDDaV3Xb6GA0fLALI42ZTBBXtL+UIv7PK1sH9vugBMDSUDy4JpBXtNeQ5LdT/NUUg3X6HgXRe9mViLrahQY4mmsjAMvaCjiW+pHhoYg8dGeJUxlqgbNAD2gZg6n31HotTVgFT9YP9yvLk3Yd8IPKMxD4m2KwZavWgMbkQb9qz8UpQI4o0nmDkDJNV6yjmJQkOFEXX7OZVManfkduKaOhmBMrTBKLnJe/71ytBmhiXEHH4H6lr3970KO8yeZV5SbjwCd5w14r7d7HLPKbaWJX76Oc8sr7G93/dQmwL3q854Nw+a/xPrgUOmKOIFqtk/GzR1nEee7MAkk1Cx8xmyIC+PTIk3ufwc66x/UtWUQJTcLnuhjVCx1RB0CyGwifjyxcgvuefd6JAqVUDl9xQ1Gr9n7ru1lkw+eixYvJ4NIQqDQtm0POSmj+EEFjQDMVHj/6dyFnZ4dW7Hrx9fRseuSibX0w0VqP8yu/i88BHvtddOlluaX59lwvn+poIEg2aUkbQ74PoIlHoPKw1QeS5eGvjkvTs3PmIc051k6GVJNI1Qwgt29z8+MKmGyupahjF5UEahwkZVlLzDO65VXUkyGfDoJM0cJgpA+joDROrnsZo6UJZHWLFkgZAE4fFBgWGyOTjpuKfmwBja8oJ2McFRRhRAKrOA1XwEjSOZKVthd5gKJtLW4ZbIUpvwv+sFWQFiKhmxhydZuEmYAZP2IZ3hSuWn/cYgsjLl3aAcwU0gNlPegl442dLSCCIQeGoLNRpJ8FsE6CKwoYCnUdDmDiJZ5FE2kAOjBRNTFbOYbLx1kqo9GrAubJAImw+nW3Qeq+n9txKRsLErLQ6it6RkQ6lqzquT33XrYM3QppAoyNIkgT0K9XDRx/CbpK90GuMkpwzjMyjeIjeLeiouPq+sR55JMkgiygPE5+19mT3NAwQudahgbcgYLTXWy1TdZN6ArPmBch2aue/+WBhXpzAD/pDBw72tAN9BRdUna7PpujqNvvs6RvKoaOuicrPJVIrxdex3nSdihrro1BDo8ZRNLAND/PjsBF67pOJKNmJ+GHbXqrX9DiM8DRuYq+19n941dhntLqGnw2CXCJQwIXuxCacnSRBLKmyJQpL7w+12PvBECL/Msgq6/7fnACY/FBVzANReMyTnVaecxWVwek6XcSJxCq/nxubvrL9wMrFpetyAvPtNcffJjlycoCmOV6gSTLaAC6zbpzHqIXXhMr7JptYT7gDnSl3WTa7ld0boGUYfJOyX7A8iBHJzZawdwr1dzSIO4vjMEDlB7rTicsR+r22y0onZb+EEQnSZ6fdvLiNwzxTqUxij3I2lRYJ+ghriUYXYoFpQf7+YFLdlIeGzdfMju2Oh6mNIYVXQotDM0CXe48xE82/wdmDZ+o06UeQQAAAABJRU5ErkJggg==) no-repeat center center;
  1402. background-size: contain;
  1403. }
  1404. .icon-box {
  1405. display: flex;
  1406. align-items: center;
  1407. color: #252627;
  1408. font-size: 14px;
  1409. }
  1410. .icon-box .icon-text {
  1411. margin-left: 6px;
  1412. }
  1413. .icon-box.active {
  1414. color: #2abed1;
  1415. }
  1416. .tab-title {
  1417. margin: 40px 0 44px;
  1418. font-size: 24px;
  1419. line-height: 36px;
  1420. }
  1421. [class*=el-icon-] {
  1422. transition: transform .2s ease;
  1423. }
  1424. [class*=no-select] {
  1425. user-select: none;
  1426. }
  1427. .rotate180 {
  1428. transform: rotate(180deg);
  1429. }
  1430. /* selector样式定制 */
  1431. .tag-list-container .j-button-item:not(.all) {
  1432. border: 1px solid #ECECEC;
  1433. background-color: #F5F6F7;
  1434. }
  1435. .selector-card:not(:last-of-type) {
  1436. border-bottom: 1px dashed #ECECEC;
  1437. }
  1438. .other-filter .el-select {
  1439. margin: 0 12px;
  1440. }
  1441. .other-filter .el-select input::placeholder {
  1442. color: inherit;
  1443. }
  1444. .manage-tags {
  1445. display: inline-block;
  1446. position: relative;
  1447. right: 0;
  1448. top: 3px;
  1449. font-size: 14px;
  1450. height: 22px;
  1451. line-height: 22px;
  1452. color: #2CB7CA;
  1453. cursor: pointer;
  1454. }
  1455. .collect-list-container {
  1456. margin-top: 28px;
  1457. }
  1458. .collect-list-container .el-checkbox {
  1459. margin: 16px;
  1460. }
  1461. .collect-list-content,
  1462. .collect-list-content .list {
  1463. min-height: 400px;
  1464. }
  1465. .c-tab-container .left,
  1466. .c-tab-container .right,
  1467. .c-tab-container .right-line {
  1468. display: flex;
  1469. flex-direction: row;
  1470. }
  1471. .c-tab-container .left .custom-checkbox {
  1472. float: unset;
  1473. }
  1474. .c-tab-container {
  1475. display: flex;
  1476. flex-direction: row;
  1477. height: 49px;
  1478. width: 100%;
  1479. justify-content: space-between;
  1480. }
  1481. .c-tab-container .list-title {
  1482. position: relative;
  1483. height: 100%;
  1484. line-height: 49px;
  1485. text-align: center;
  1486. font-size: 18px;
  1487. font-weight: 400;
  1488. color: #1D1D1D;
  1489. }
  1490. .c-tab-container .icon-box {
  1491. cursor: pointer;
  1492. }
  1493. .c-tab-container .j-icon {
  1494. width: 16px;
  1495. height: 16px;
  1496. background-position: center;
  1497. }
  1498. .c-tab-container .icon-box {
  1499. padding: 0 10px;
  1500. }
  1501. .c-tab-container .right-line {
  1502. position: relative;
  1503. }
  1504. .c-tab-container .right-line::after {
  1505. content: '';
  1506. position: absolute;
  1507. margin-top: -8px;
  1508. width: 1px;
  1509. height: 16px;
  1510. right: 0;
  1511. top: 50%;
  1512. background-color: #ECECEC;
  1513. }
  1514. .list-item {
  1515. border-bottom: 1px solid #ECECEC;
  1516. }
  1517. .list-item:hover {
  1518. background-color: #F5F6F7;
  1519. box-shadow: inset 0px -1px 0px rgb(0, 0, 0, .05);
  1520. }
  1521. .list-index {
  1522. margin-right: 2px;
  1523. }
  1524. .append-container .j-icon {
  1525. margin: 0 16px 0 8px;
  1526. cursor: pointer;
  1527. }
  1528. /* table */
  1529. .collect-table-list table {
  1530. width: 1199px;
  1531. border-collapse: collapse;
  1532. }
  1533. .buyer-column {
  1534. max-width: 181px;
  1535. word-break: break-all;
  1536. }
  1537. .winner-column {
  1538. max-width: 174px;
  1539. word-break: break-all;
  1540. }
  1541. .winner-column a {
  1542. color: #1D1D1D;
  1543. }
  1544. .collect-table-list table {
  1545. border: none;
  1546. border-left: 1px solid #ECECEC;
  1547. border-top: 1px solid #ECECEC;
  1548. }
  1549. .collect-table-list .thead tr {
  1550. font-size: 14px;
  1551. color: #888;
  1552. background: #F9FAFB;
  1553. }
  1554. .collect-table-list tbody tr:hover {
  1555. background-color: #F5F6F7;
  1556. box-shadow: inset 0px -1px 0px rgb(0, 0, 0, .05);
  1557. cursor: pointer;
  1558. }
  1559. .collect-table-list table tr td {
  1560. vertical-align: middle;
  1561. text-align: center;
  1562. line-height: 26px;
  1563. border: none;
  1564. border-right: 1px solid #ECECEC;
  1565. border-bottom: 1px solid #ECECEC;
  1566. font-size: 14px;
  1567. color: #1D1D1D;
  1568. }
  1569. .collect-table-list table tr td.tt-l {
  1570. text-align: left;
  1571. }
  1572. .collect-table-list table tr td.tt-c {
  1573. text-align: center;
  1574. }
  1575. .collect-table-list table tr td.tt-r {
  1576. text-align: right;
  1577. }
  1578. .collect-table-list .thead td {
  1579. padding: 6px 0;
  1580. border-top: 3px solid #2cb7ca;
  1581. }
  1582. .collect-table-list .tbody tr {
  1583. cursor: pointer;
  1584. }
  1585. .collect-table-list .thead .deep {
  1586. border-top: 3px solid #2C90CB;
  1587. }
  1588. .tag-drawer .el-drawer__header {
  1589. margin-bottom: 0;
  1590. padding-bottom: 22px;
  1591. font-size: 20px;
  1592. line-height: 32px;
  1593. border-bottom: 1px solid #ebebeb;
  1594. /* box-shadow: 0px -1px 0px 0px rgba(0,0,0,0.05) inset; */
  1595. }
  1596. .tag-drawer .tag-title {
  1597. flex: unset;
  1598. color: #1D1D1D;
  1599. }
  1600. .tag-drawer .tag-count {
  1601. margin-left: 8px;
  1602. color: #2CB7CA;
  1603. }
  1604. .add-tag-confirm-button {
  1605. height: 100%;
  1606. color: #2CB7CA;
  1607. white-space: nowrap;
  1608. cursor: pointer;
  1609. }
  1610. .tag-drawer .add-tag-confirm-button {
  1611. margin-left: 16px;
  1612. }
  1613. .tag-drawer .el-drawer__body {
  1614. overflow-y: scroll;
  1615. }
  1616. .tag-drawer .tag-container {
  1617. height: 100%;
  1618. display: flex;
  1619. flex-direction: column;
  1620. }
  1621. .tag-drawer .tag-header {
  1622. padding: 28px 28px 20px;
  1623. justify-content: space-between;
  1624. }
  1625. .tag-drawer .tag-main {
  1626. padding: 0 20px;
  1627. flex: 1;
  1628. overflow-y: scroll;
  1629. }
  1630. .tag-drawer .tag-footer {
  1631. padding: 0 20px;
  1632. display: flex;
  1633. align-items: center;
  1634. justify-content: center;
  1635. height: 100px;
  1636. box-shadow: 0px -8px 8px 0px rgba(0, 0, 0, 0.05);
  1637. }
  1638. .tag-drawer .el-tag {
  1639. margin: 6px;
  1640. padding: 1px 8px;
  1641. height: auto;
  1642. color: #1d1d1d;
  1643. background-color: #f5f6f7;
  1644. border: 1px solid #ececec;
  1645. border-radius: 5px;
  1646. line-height: 22px;
  1647. cursor: pointer;
  1648. }
  1649. .tag-drawer .el-tag:hover {
  1650. color: #2CB7CA;
  1651. border-color: #2CB7CA;
  1652. }
  1653. .tag-drawer .el-tag:hover .el-icon-close {
  1654. color: #2CB7CA;
  1655. background-color: transparent;
  1656. }
  1657. .tag-drawer .el-tag .el-icon-close {
  1658. font-weight: 700;
  1659. }
  1660. .select-title {
  1661. color: #686868;
  1662. font-size: 14px;
  1663. line-height: 22px;
  1664. }
  1665. .el-select + .select-title {
  1666. margin-left: 14px;
  1667. }
  1668. .vip .selector-card-header {
  1669. padding-right: 50px;
  1670. }
  1671. .selector-card-header .icon-hot-vip {
  1672. position: absolute;
  1673. right: 0;
  1674. top: 6px;
  1675. }
  1676. .selector-card-header .s-h-title {
  1677. font-weight: 700;
  1678. color: #996118;
  1679. }
  1680. .shade_table {
  1681. width: 1199px;
  1682. position: absolute;
  1683. margin-top: -150px;
  1684. height: 150px;
  1685. background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 1));
  1686. }
  1687. .shade_table .more {
  1688. position: absolute;
  1689. height: 35px;
  1690. width: 120px;
  1691. left: 50%;
  1692. margin-left: -60px;
  1693. bottom: 0px;
  1694. color: #2cb7ca;
  1695. border-radius: 5px;
  1696. border: 1px solid #2cb7ca;
  1697. line-height: 35px;
  1698. text-align: center;
  1699. cursor: pointer;
  1700. }
  1701. .exportDialog {
  1702. width: 380px;
  1703. height: 154px;
  1704. background: #FFFFFF;
  1705. border-radius: 8px 8px 8px 8px;
  1706. padding: 32px;
  1707. .el-message-box__header {
  1708. display: none;
  1709. }
  1710. .el-message-box__content {
  1711. padding: 0px;
  1712. font-size: 14px;
  1713. font-weight: 400;
  1714. color: #686868;
  1715. line-height: 22px;
  1716. }
  1717. .el-message-box__btns {
  1718. margin-top: 20px;
  1719. display: flex;
  1720. justify-content: space-between;
  1721. flex-direction: row-reverse;
  1722. .el-button {
  1723. width: 132px;
  1724. height: 36px;
  1725. border-radius: 6px 6px 6px 6px;
  1726. opacity: 1;
  1727. font-weight: 400;
  1728. font-size: 16px;
  1729. padding: 0;
  1730. margin: 0;
  1731. color: #686868;
  1732. }
  1733. .el-button--primary {
  1734. background: #2CB7CA;
  1735. color: #fff;
  1736. border-color: #2CB7CA;
  1737. }
  1738. }
  1739. }
  1740. </style>
  1741. <style lang="scss" scoped>
  1742. @include diy-icon('edit', 20, 20);
  1743. // card样式重置
  1744. ::v-deep {
  1745. .el-card__header {
  1746. margin: 0 40px;
  1747. padding-left: 0;
  1748. padding-right: 0;
  1749. }
  1750. .el-card__body {
  1751. padding: 20px 40px;
  1752. }
  1753. .get-more {
  1754. display: flex;
  1755. .el-icon-arrow-right {
  1756. margin-left: 4px;
  1757. order: 2;
  1758. }
  1759. }
  1760. .a-i-left {
  1761. color: #303133;
  1762. font-size: 16px;
  1763. }
  1764. }
  1765. .sub-manager {
  1766. display: flex;
  1767. align-items: center;
  1768. padding: 8px 16px;
  1769. font-size: 14px;
  1770. line-height: 24px;
  1771. color: #1d1d1d;
  1772. border-color: #E0E0E0;
  1773. &.el-button:focus,
  1774. &.el-button:hover {
  1775. color: inherit;
  1776. background-color: inherit;
  1777. }
  1778. }
  1779. .info-list-card {
  1780. &.gray {
  1781. padding: 0;
  1782. box-shadow: unset;
  1783. border: none;
  1784. ::v-deep {
  1785. .el-card__body {
  1786. padding: 0;
  1787. }
  1788. }
  1789. }
  1790. .card-title {
  1791. font-size: 24px;
  1792. color: #1d1d1d;
  1793. line-height: 36px;
  1794. }
  1795. .sub-manager {
  1796. float: right;
  1797. }
  1798. .info-list {
  1799. min-height: 150px;
  1800. border-top: 1px solid transparent;
  1801. position: relative;
  1802. }
  1803. .add-key-button {
  1804. display: flex;
  1805. align-items: center;
  1806. justify-content: center;
  1807. margin-top: 32px;
  1808. padding: 8px 16px;
  1809. color: #F7F9FA;
  1810. border-radius: 6px;
  1811. background-color: #2ABED1;
  1812. cursor: pointer;
  1813. .icon-chahao {
  1814. margin-right: 4px;
  1815. transform: rotate(-45deg);
  1816. }
  1817. .button-text {
  1818. margin-left: 4px;
  1819. white-space: nowrap;
  1820. }
  1821. }
  1822. .icon-chahao {
  1823. position: relative;
  1824. display: inline-block;
  1825. width: 14px;
  1826. height: 14px;
  1827. &:before,
  1828. &:after {
  1829. position: absolute;
  1830. content: '';
  1831. background-color: #fff;
  1832. top: 50%;
  1833. left: 50%;
  1834. width: 14px;
  1835. height: 2px;
  1836. border-radius: 2px;
  1837. }
  1838. &:before {
  1839. transform: translate(-50%, -50%) rotate(45deg);
  1840. }
  1841. &:after {
  1842. transform: translate(-50%, -50%) rotate(-45deg);
  1843. }
  1844. }
  1845. .el-pagination-container.center {
  1846. .el-pagination {
  1847. left: 50%;
  1848. right: unset;
  1849. transform: translateX(-50%);
  1850. }
  1851. }
  1852. }
  1853. .unit-dialog-group {
  1854. ::v-deep {
  1855. .el-dialog__header {
  1856. display: none;
  1857. }
  1858. .el-dialog {
  1859. width: 380px;
  1860. height: auto;
  1861. background: #ffffff;
  1862. border-radius: 8px;
  1863. }
  1864. .el-dialog__header {
  1865. text-align: center;
  1866. padding: 32px;
  1867. padding-bottom: 20px;
  1868. }
  1869. .el-dialog__body {
  1870. padding: 32px;
  1871. font-size: 14px;
  1872. font-family: Microsoft YaHei, Microsoft YaHei-Regular;
  1873. font-weight: 400;
  1874. text-align: CENTER;
  1875. color: #686868;
  1876. line-height: 22px;
  1877. }
  1878. .el-dialog__title {
  1879. font-size: 18px;
  1880. font-family: Microsoft YaHei, Microsoft YaHei-Regular;
  1881. font-weight: 400;
  1882. color: #1d1d1d;
  1883. line-height: 28px;
  1884. }
  1885. .el-dialog__footer {
  1886. padding: 0;
  1887. }
  1888. }
  1889. .unit-dialog-footer {
  1890. display: flex;
  1891. flex-direction: row;
  1892. align-items: center;
  1893. justify-content: space-between;
  1894. padding: 32px;
  1895. padding-top: 0;
  1896. ::v-deep {
  1897. .el-button--default {
  1898. border: 1px solid #e0e0e0;
  1899. color: #686868;
  1900. background: #fff;
  1901. }
  1902. .el-button {
  1903. width: 132px;
  1904. height: 36px;
  1905. display: flex;
  1906. flex-direction: column;
  1907. align-items: center;
  1908. justify-content: center;
  1909. font-size: 16px;
  1910. font-family: Microsoft YaHei, Microsoft YaHei-Regular;
  1911. font-weight: 400;
  1912. text-align: CENTER;
  1913. border-radius: 6px;
  1914. }
  1915. .el-button--primary {
  1916. background: #2cb7ca;
  1917. color: #ffffff;
  1918. border-color: #2CB7CA;
  1919. }
  1920. }
  1921. }
  1922. }
  1923. </style>