content.js 4.3 KB

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