content.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import { dateFormatter, formatMoney, getQueryParam } from '@jy/util'
  2. import BaseModel from '../../../core/base'
  3. class CommonContentModel extends BaseModel {
  4. createModel() {
  5. const contentModel = {
  6. id: '',
  7. title: '',
  8. // 项目信息
  9. projectName: '',
  10. projectCode: '',
  11. // 高亮词组
  12. highlightKeys: [],
  13. tags: [],
  14. titleHighlighted: '',
  15. contentHighlighted: '',
  16. time: '',
  17. // 计算信息
  18. isSelfSite: false,
  19. // 正文
  20. content: '',
  21. // 是否需要展示原文链接
  22. originalShow: false,
  23. // 附件列表
  24. attachments: [],
  25. // 是否需要展示供应商报名
  26. recommendedService: false,
  27. // 拟建,采购意向
  28. isNiJian: false,
  29. isCaigouyixiang: false,
  30. isCanRead: false,
  31. // TDK
  32. tdk: {
  33. title: '',
  34. keywords: '',
  35. description: ''
  36. }
  37. }
  38. return contentModel
  39. }
  40. formatModel(data) {
  41. const result = this.createModel()
  42. const { baseInfo, detailInfo } = data
  43. result.id = baseInfo.id ? decodeURIComponent(baseInfo.id) : ''
  44. result.title = baseInfo.title
  45. result.projectName = baseInfo?.projectName
  46. result.projectCode = baseInfo?.projectCode
  47. result.isSelfSite = baseInfo?.site === '剑鱼信息发布平台'
  48. result.time = baseInfo?.publishTime
  49. ? dateFormatter(baseInfo.publishTime * 1000, 'yyyy-MM-dd')
  50. : ''
  51. result.highlightKeys = this.splitUrlKeys()
  52. result.content = detailInfo.detail || ''
  53. // 附件列表
  54. result.attachments = detailInfo.attachments || []
  55. // 原文链接是否显示
  56. result.originalShow = detailInfo.originalShow || false
  57. // 是否显示供应商报名
  58. result.recommendedService = baseInfo?.recommendedService === 1
  59. // 拟建,采购意向
  60. result.isNiJian = this.isNiJianCheck(baseInfo?.subType)
  61. result.isCaigouyixiang = this.isCaigouyixiangCheck(baseInfo?.subType)
  62. result.isCanRead = data?.canRead || false
  63. result.IsCustomTopNet = data?.topnet || false
  64. // TDK
  65. result.tdk.title = baseInfo.title
  66. result.tdk.description = baseInfo?.description
  67. result.tdk.keywords = baseInfo?.keywords
  68. // Tags
  69. result.tags = this.tranTags(data)
  70. result._ob = baseInfo
  71. result._od = detailInfo
  72. return result
  73. }
  74. isNiJianCheck(type) {
  75. return type === '拟建'
  76. }
  77. isCaigouyixiangCheck(type) {
  78. return type === '采购意向'
  79. }
  80. tranTags(data) {
  81. const { baseInfo } = data
  82. const defaultURL = 'javascript:void(0);'
  83. const area = [baseInfo?.area, baseInfo?.city, baseInfo?.district]
  84. .filter(v => v)
  85. .join('-')
  86. const typeItem = {
  87. label: baseInfo?.topType,
  88. link: defaultURL
  89. }
  90. if (baseInfo?.subType) {
  91. typeItem.label = baseInfo.subType
  92. typeItem.link = baseInfo?.subTypeUrl || defaultURL
  93. }
  94. const amountItem = {
  95. label: formatMoney(baseInfo?.bidAmount || baseInfo?.budget || ''),
  96. link: defaultURL
  97. }
  98. const tags = [
  99. // 地区
  100. {
  101. label: area,
  102. link: baseInfo?.areaUrl || defaultURL
  103. },
  104. // type
  105. typeItem,
  106. // buyer_class
  107. {
  108. label: baseInfo?.buyerClass,
  109. link: defaultURL
  110. },
  111. // amount
  112. amountItem
  113. ].filter(v => v.label)
  114. return tags.map((t) => {
  115. return {
  116. ...t,
  117. // 是否有正确格式的链接
  118. hasLink: t.link !== defaultURL
  119. }
  120. })
  121. }
  122. // 获取url高亮字符, 并截取
  123. splitUrlKeys() {
  124. const kds = getQueryParam('kds')
  125. const keywords = getQueryParam('keywords')
  126. const s_words = kds || keywords
  127. let keysList = []
  128. // 移动端订阅预览等跳转过来传的词
  129. const subKeyReg = /^subkey_/
  130. if (subKeyReg.test(s_words)) {
  131. keysList = s_words.replace(subKeyReg, '').split('_')
  132. let keyListArr = []
  133. keysList.forEach((v) => {
  134. const vArr = v.split('+')
  135. keyListArr = keyListArr.concat(vArr)
  136. })
  137. }
  138. else {
  139. const reg = /[_+\s]/ // 匹配 _+空格
  140. if (reg.test(s_words)) {
  141. keysList = s_words.split(reg).filter(w => !!w)
  142. }
  143. else {
  144. keysList.push(s_words)
  145. }
  146. }
  147. return keysList
  148. }
  149. }
  150. function useCommonContentModel() {
  151. return new CommonContentModel()
  152. }
  153. export default useCommonContentModel