expand.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import BaseModel from '../../../core/base'
  2. import tranProjectProgress from '../transform/project-progress'
  3. import tranServices from '../transform/services'
  4. import { formatMoney } from '@jy/util'
  5. class ContentExpandModel extends BaseModel {
  6. constructor(config) {
  7. super(config)
  8. }
  9. createModel() {
  10. return {
  11. moduleShow: {
  12. // 招投标进度
  13. timeline: false,
  14. // 投标服务
  15. tbService: false,
  16. // 商机推荐(招标推荐)
  17. zbRecommend: false,
  18. // 客户推荐
  19. customerRecommend: false
  20. },
  21. projectProgress: {
  22. list: [],
  23. name: ''
  24. },
  25. services: [],
  26. recommendProjects: {
  27. list: [],
  28. search: {},
  29. more: false,
  30. total: 0,
  31. title: '超前项目',
  32. popup: false
  33. },
  34. recommendBuyers: {
  35. list: [],
  36. more: false,
  37. total: 0,
  38. title: ''
  39. },
  40. recommendWinners: {
  41. list: [],
  42. more: false,
  43. total: 0,
  44. title: ''
  45. },
  46. recommendCustomers: {}
  47. }
  48. }
  49. preSortBiddingList(list) {
  50. if (Array.isArray(list)) {
  51. return list.map((r) => {
  52. return this.preSortBiddingItem(r)
  53. })
  54. } else {
  55. return []
  56. }
  57. }
  58. preSortBiddingItem(item) {
  59. let bidAmount = ''
  60. // 有中标金额取中标金额,没有取预算,预算没有置空
  61. if (item?.bidAmount) {
  62. bidAmount = formatMoney(item?.bidAmount - 0)
  63. } else if (item?.budget) {
  64. bidAmount = formatMoney(item?.budget - 0)
  65. }
  66. const area = item.area || '全国'
  67. const type = item?.type || item?.subtype
  68. const buyerclass = item.buyerClass || ''
  69. const tagList = [
  70. area,
  71. buyerclass,
  72. type,
  73. bidAmount
  74. ].filter((v) => v)
  75. return {
  76. id: item.id,
  77. title: item.title,
  78. tags: tagList,
  79. area,
  80. type,
  81. buyerclass,
  82. bidAmount,
  83. time: item.publishTime ? item.publishTime * 1000 : undefined,
  84. _o: item
  85. }
  86. }
  87. formatModel(data, isInit = false) {
  88. const result = this.createModel()
  89. // 项目进度
  90. if (data?.schedule) {
  91. result.projectProgress = tranProjectProgress(data.schedule)
  92. }
  93. // 服务推荐
  94. if (data?.services) {
  95. result.services = tranServices(data.services)
  96. }
  97. if (data?.recommend?.ahead) {
  98. result.recommendProjects = data.recommend.ahead
  99. result.recommendProjects.list = this.preSortBiddingList(result.recommendProjects.list)
  100. }
  101. if (data?.recommend?.buyer) {
  102. result.recommendBuyers = data.recommend.buyer
  103. result.recommendBuyers.list = this.preSortBiddingList(result.recommendBuyers.list)
  104. }
  105. if (data?.recommend?.winner) {
  106. result.recommendWinners = data.recommend.winner
  107. result.recommendWinners.list = this.preSortBiddingList(result.recommendWinners.list)
  108. }
  109. if (data?.customerRec) {
  110. if (Array.isArray(data?.customerRec?.list)) {
  111. data.customerRec.list = data.customerRec.list.map((c) => {
  112. const arr = []
  113. if (c.area) {
  114. arr.push(c.area)
  115. }
  116. if (c.city) {
  117. arr.push(c.city)
  118. }
  119. return {
  120. ...c,
  121. totalAmountFormatted: c.totalAmount ? formatMoney(c.totalAmount) : '',
  122. areaCity: arr.length >= 1 ? arr.filter(a => !!a).join(' ') : ''
  123. }
  124. })
  125. }
  126. result.recommendCustomers = data.customerRec
  127. }
  128. // 根据数据情况判断模块是否展示
  129. // 招投标进度
  130. result.moduleShow.timeline = Array.isArray(result.projectProgress?.list) && result.projectProgress?.list.length > 0
  131. // 投标服务
  132. result.moduleShow.tbService = Array.isArray(result.services) && result.services.length > 0
  133. // 商机推荐(招标推荐)
  134. const recProjectsExist = Array.isArray(result.recommendProjects?.list) && result.recommendProjects?.list.length > 0
  135. const recBuyersExist = Array.isArray(result.recommendBuyers?.list) && result.recommendBuyers?.list.length > 0
  136. const recWinnersExist = Array.isArray(result.recommendWinners?.list) && result.recommendWinners?.list.length > 0
  137. result.moduleShow.zbRecommend = recProjectsExist || recBuyersExist || recWinnersExist
  138. // 客户推荐(这个比较特殊。如果是有权限用户(权限7),则有数据展示,无数据不展示。无权限7用户则一直展示,展示广告引导)
  139. // 在页面中使用是请注意权限判断,此处只判断是否有数据
  140. result.moduleShow.customerRecommend = Array.isArray(result.recommendCustomers?.list) && result.recommendCustomers?.list.length > 0
  141. return result
  142. }
  143. }
  144. /**
  145. * /publicapply/detail/advancedInfo
  146. * 扩展信息接口数据模型转换
  147. */
  148. function useContentExpandModel() {
  149. return new ContentExpandModel()
  150. }
  151. export default useContentExpandModel