content.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. // TDK
  25. tdk: {
  26. title: '',
  27. keywords: '',
  28. description: ''
  29. }
  30. }
  31. return contentModel
  32. }
  33. formatModel(data, isInit = false) {
  34. const result = this.createModel()
  35. const { baseInfo, detailInfo } = data
  36. result.id = baseInfo.id
  37. result.title = baseInfo.title
  38. result.projectName = baseInfo?.projectName
  39. result.projectCode = baseInfo?.projectCode
  40. result.isSelfSite = baseInfo?.site === '剑鱼信息发布平台'
  41. result.time = baseInfo?.publishTime
  42. ? dateFormatter(baseInfo.publishTime * 1000, 'yyyy-MM-dd')
  43. : ''
  44. result.highlightKeys = this.splitUrlKeys()
  45. result.content = detailInfo.detail || ''
  46. // TDK
  47. result.tdk.title = baseInfo.title
  48. result.tdk.description = baseInfo?.description
  49. result.tdk.keywords = baseInfo?.keywords
  50. // Tags
  51. result.tags = this.tranTags(data)
  52. return result
  53. }
  54. tranTags(data) {
  55. const { baseInfo } = data
  56. const defaultURL = 'javascript:volid(0);'
  57. const area = [baseInfo?.area, baseInfo?.city, baseInfo?.district]
  58. .filter((v) => v)
  59. .join('-')
  60. const typeItem = {
  61. label: baseInfo?.topType,
  62. link: defaultURL
  63. }
  64. if (baseInfo?.subType) {
  65. typeItem.label = baseInfo.subType
  66. typeItem.link = baseInfo?.subTypeUrl
  67. }
  68. const amountItem = {
  69. label: formatMoney(baseInfo?.bidAmount ?? baseInfo?.budget ?? ''),
  70. link: defaultURL
  71. }
  72. const tags = [
  73. // 地区
  74. {
  75. label: area,
  76. link: baseInfo?.areaUrl || defaultURL
  77. },
  78. // type
  79. typeItem,
  80. // buyer_class
  81. {
  82. label: baseInfo?.buyerClass,
  83. link: defaultURL
  84. },
  85. // amount
  86. amountItem
  87. ].filter((v) => v.label)
  88. return tags
  89. }
  90. // 获取url高亮字符, 并截取
  91. splitUrlKeys() {
  92. const kds = getQueryParam('kds')
  93. const keywords = getQueryParam('keywords')
  94. const s_words = kds || keywords
  95. let keysList = []
  96. // 移动端订阅预览等跳转过来传的词
  97. if (/^(subkey_)/.test(s_words)) {
  98. keysList = s_words.replace(/^(subkey_)/, '').split('_')
  99. let keyListArr = []
  100. keysList.forEach((v) => {
  101. const vArr = v.split('+')
  102. keyListArr = keyListArr.concat(vArr)
  103. })
  104. } else {
  105. const reg = /[_\+\s+]/ // 匹配 _+空格
  106. if (reg.test(s_words)) {
  107. keysList = s_words.split(reg).filter(w => !!w)
  108. } else {
  109. keysList.push(s_words)
  110. }
  111. }
  112. return keysList
  113. }
  114. }
  115. function useCommonContentModel() {
  116. return new CommonContentModel()
  117. }
  118. export default useCommonContentModel