dealSeoIndex.js 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. export default class DealSeoData {
  2. constructor({ $axios, req, app, redirect }) {
  3. this.$axios = $axios
  4. this.req = req
  5. this.app = app
  6. this.redirect = redirect
  7. this.selected = {
  8. city: 0,
  9. industry: 0,
  10. techType: 0,
  11. }
  12. this.page = {
  13. page: 1,
  14. size: 10,
  15. total: 0
  16. }
  17. this.finished = false
  18. this.dataList = []
  19. this.provinces = []
  20. }
  21. async dealData() {
  22. let { name, query: { page = 1 }, path, params, fullPath } = this.app.context.route
  23. console.log("***", this.app.context.route, this.req)
  24. if (path && path[path.length-1] !== '/') {
  25. let reditUrl = fullPath
  26. reditUrl = reditUrl.replace(path, path+'/')
  27. this.redirect(301, reditUrl)
  28. }
  29. let isSeoList = false
  30. let typeList = await this.getTypeList()
  31. switch (name) {
  32. case "kaifainSeoAll":
  33. //kaifain/s页面进入
  34. isSeoList = true
  35. break
  36. case "kaifainSeoIndex":
  37. //kaifain路由匹配进入
  38. try {
  39. let match = params.pathMatch || ''
  40. let list = match.split('/')
  41. list.length = Math.min(list.length, 3) //防止url超出
  42. let keys = Object.keys(typeList)
  43. //3 * 3 * n的循环 n < 100
  44. list.forEach(item=>{
  45. keys.forEach(keys => {
  46. typeList[keys].list.forEach(typeItem => {
  47. if (typeItem.slug === item) {
  48. this.selected[keys] = typeItem.id
  49. this.selected[keys+'Name'] = typeItem.name
  50. if (keys === 'city') {
  51. this.selected["provice"] = typeItem.prov_id
  52. }
  53. }
  54. })
  55. })
  56. })
  57. if (this.selected["provice"]) {
  58. let item = this.provinces.filter(item=>item.id===this.selected["provice"])[0]
  59. this.selected["proviceName"] = item && item.name
  60. }
  61. } catch (e) {
  62. console.log("解决方案列表", e)
  63. }
  64. break
  65. default:
  66. //其他
  67. page = 1
  68. }
  69. await this.getList()
  70. return {
  71. typeList,
  72. isSeoList, //是否是 /kaifain/s/页面进入
  73. dataList:this.dataList, //首次获取的数据
  74. mobile: this.app.$deviceType.isMobile(),
  75. selected: this.selected,
  76. page: this.page,
  77. finished: this.finished,
  78. head: this.dealThisMeta(isSeoList)
  79. }
  80. }
  81. async getTypeList() {
  82. let res = await this.$axios.get('/api/kaifawu/get_options')
  83. let typeList = {
  84. city: {
  85. title: '地区',
  86. list: []
  87. },
  88. industry: {
  89. title: '行业领域',
  90. list: []
  91. },
  92. techType: {
  93. title: '技术分类',
  94. list: []
  95. }
  96. }
  97. if (Number(res.data.status) === 1) {
  98. res.data.data.cities.unshift({ id: 0, name: "全部地区" })
  99. res.data.data.industries.unshift({ id: 0, name: "全部行业" })
  100. res.data.data.tech_types.unshift({ id: 0, name: "全部分类" })
  101. Object.keys(res.data.data).forEach(key => {
  102. let item = res.data.data[ key ]
  103. if (Array.isArray(item)) {
  104. item.forEach(ii => {
  105. ii.text = ii.name
  106. ii.value = ii.id
  107. })
  108. }
  109. })
  110. typeList.city.list = [ ...res.data.data.cities ]
  111. typeList.industry.list = [ ...res.data.data.industries ]
  112. typeList.techType.list = [ ...res.data.data.tech_types ]
  113. this.provinces = [] = [ ...res.data.data.provinces ]
  114. }
  115. return typeList
  116. }
  117. async getList() {
  118. const { page, selected } = this
  119. let p = {
  120. city: selected.city,
  121. tech_type: selected.techType,
  122. industry: selected.industry,
  123. ...page
  124. }
  125. let res = await this.$axios.post('/api/kaifawu/index', p)
  126. if (Number(res.data.status) === 1) {
  127. let data = res.data.data
  128. this.page.total = data.total
  129. let dataList = data.providers || []
  130. dataList.forEach(item => {
  131. item[ 'successCase' ] = ''
  132. if (Array.isArray(item.successful_case)) {
  133. let tem = item.successful_case.map(item => item.title)
  134. item[ 'successCase' ] = tem.join('、')
  135. }
  136. })
  137. if (this.page.page === 1) {
  138. this.dataList = [...data.providers]
  139. } else {
  140. this.dataList = [ ...this.dataList, ...data.providers ]
  141. }
  142. this.page.page += 1
  143. if (this.page.total <= this.dataList.length) {
  144. this.finished = true
  145. }
  146. }
  147. console.log(this.dataList)
  148. }
  149. dealThisMeta(isSeoList) {
  150. const { city, industry, techType, cityName="", industryName="", techTypeName="", proviceName} = this.selected
  151. const {headers: {host}, url} = this.req
  152. let head = {
  153. title:"", keyword: "", descrption: "", h1: "", canonical: "", metaLocation: ""
  154. }
  155. //拼接canonical
  156. if (host.indexOf('local') !== -1) {
  157. head.canonical = 'http://' + host + url
  158. } else {
  159. head.canonical = 'https://' + host + url
  160. }
  161. console.log('dealThisMeta', this.selected)
  162. //非特定的url
  163. if (!city && !industry && !techType) {
  164. if (isSeoList) {
  165. head.title = "解决方案大全"
  166. } else {
  167. head.title = "开发屋-提供各大行业定制化SaaS、PasS、API、技术组织等互联网领先的技术开发解决方案"
  168. head.keyword = "定制化Saas、PasS、API、行业技术解决方案"
  169. head.descrption = "开发屋为企业提供行业内领先的技术解决方案,包括行业定制化SaaS、PasS、API数据接口服务以及技术组织,保障企业在降低人力开发成本的同时,得到优质的项目开发实力。"
  170. }
  171. } else if (city && !industry && !techType) {
  172. //只有城市的
  173. head.title = `${cityName}技术解决方案商家,${cityName}行业领域互联网技术开发解决方案-开发屋`
  174. head.keyword = `${cityName}技术解决方案, ${cityName}技术解决方案案例`
  175. head.descrption = `开发屋为${cityName}企业提供行业内领先的技术解决方案,包括行业定制化SaaS、PasS、API数据接口服务以及技术组织,保障${cityName}企业在降低人力开发成本的同时,得到优质的项目开发实力。`
  176. head.h1 = `${cityName}技术解决方案`
  177. head.metaLocation = `province=${proviceName};city=${cityName}`
  178. } else if (!city && industry && !techType) {
  179. //只有行业的
  180. head.title = `${industryName}技术解决方案,${industryName}互联网技术开发解决方案提供-开发屋`
  181. head.keyword = `${industryName}技术解决方案`
  182. head.descrption = `开发屋为企业提供${industryName}领先的技术解决方案,包括行业定制化SaaS、PasS、API数据接口服务以及技术组织,保障${industryName}的企业在降低人力开发成本同时,得到优质的项目开发实力。`
  183. head.h1 = `${industryName}技术解决方案`
  184. } else if (!city && !industry && techType) {
  185. //只有技术分类
  186. head.title = `${techTypeName}技术解决方案案例展示,${techTypeName}及时开发解决方案提供-开发屋`
  187. head.keyword = `${techTypeName}技术解决方案`
  188. head.descrption = `开发屋为企业提供行业${techTypeName}领先的技术解决方案,包括行业定制化SaaS、PasS、API数据接口服务以及技术组织,保障行业${techTypeName}的企业在降低人力开发成本同时,得到优质的项目开发实力。`
  189. head.h1 = `${techTypeName}技术解决方案`
  190. } else if (city && industry && !techType) {
  191. //${cityName}${industryName}
  192. head.title = `${cityName}${industryName}技术解决方案,${cityName}${industryName}互联网技术开发解决方案提供-开发屋`
  193. head.keyword = `${cityName}${industryName}技术解决方案`
  194. head.descrption = `开发屋为企业提供${cityName}${industryName}领先的技术解决方案,包括行业定制化SaaS、PasS、API数据接口服务以及技术组织,保障${cityName}${industryName}的企业在降低人力开发成本同时,得到优质的项目开发实力。`
  195. head.h1 = `${cityName}${industryName}技术解决方案`
  196. head.metaLocation = `province=${proviceName};city=${cityName}`
  197. } else if (city && !industry && techType) {
  198. //${cityName}${techTypeName}
  199. head.title = `${cityName}${techTypeName}技术解决方案案例展示,${cityName}${techTypeName}及时开发解决方案提供-开发屋`
  200. head.keyword = `${cityName}${techTypeName}技术解决方案案例展示`
  201. head.descrption = `开发屋为企业提供${cityName}行业${techTypeName}领先的技术解决方案,包括行业定制化SaaS、PasS、API数据接口服务以及技术组织,保障${cityName}行业${techTypeName}的企业在降低人力开发成本同时,得到优质的项目开发实力。`
  202. head.h1 = `${cityName}${techTypeName}技术解决方案案例展示`
  203. head.metaLocation = `province=${proviceName};city=${cityName}`
  204. } else if (!city && industry && techType) {
  205. //${industryName}${techTypeName}
  206. head.title = `${industryName}${techTypeName}技术解决方案,${industryName}${techTypeName}互联网技术开发解决方案提供-开发屋`
  207. head.keyword = `${industryName}${techTypeName}技术解决方案`
  208. head.descrption = `开发屋为企业提供${industryName}${techTypeName}领先的技术解决方案,包括行业定制化SaaS、PasS、API数据接口服务以及技术组织,保障${industryName}${techTypeName}的企业在降低人力开发成本同时,得到优质的项目开发实力。`
  209. head.h1 = `${industryName}${techTypeName}技术解决方案`
  210. }
  211. return head
  212. }
  213. }