high_set.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. var winnerMatchTypeList = [
  2. {
  3. label: '项目名称/标的物',
  4. value: 'purchasing'
  5. },
  6. {
  7. label: '采购单位',
  8. value: 'buyer'
  9. },
  10. {
  11. label: '招标代理机构',
  12. value: 'agency'
  13. }
  14. ]
  15. var buyerMatchTypeList = [
  16. {
  17. label: '项目名称/标的物',
  18. value: 'purchasing'
  19. },
  20. {
  21. label: '中标企业',
  22. value: 'winner'
  23. },
  24. {
  25. label: '招标代理机构',
  26. value: 'agency'
  27. }
  28. ]
  29. var matchTypeList = []
  30. if (utils.getParam('header').indexOf('采购单位') > -1) {
  31. matchTypeList = buyerMatchTypeList
  32. } else {
  33. matchTypeList = winnerMatchTypeList
  34. }
  35. var highSet = new Vue({
  36. delimiters: ['${', '}'],
  37. el: '#high-set',
  38. components: {
  39. popupSelectComponent: popupSelectComponent,
  40. areaComponent: areaComponent,
  41. industryComponent: industryComponent,
  42. dateComponent: dateComponent,
  43. yearsComponent: yearsComponent
  44. },
  45. data () {
  46. return {
  47. conf: {
  48. keywords: '',
  49. scope: '项目名称/标的物',
  50. area: '全国',
  51. industry: '全部',
  52. start: new Date().getFullYear() - 2 + '年',
  53. end: new Date().getFullYear() + '年',
  54. match: 1
  55. },
  56. popInfo: {
  57. title: '',
  58. show: false,
  59. type: ''
  60. },
  61. entInfo: {
  62. eid: '',
  63. entName: ''
  64. },
  65. reqSign: 'bigmember',
  66. filterInitData: {
  67. areaArr: [],
  68. infoType: [],
  69. timeRange: [],
  70. industry: []
  71. },
  72. selectAreaList: ['全国'],
  73. selectIndustryList: [],
  74. selectScopeList: ['purchasing'],
  75. matchTypeList: matchTypeList,
  76. startRange: [],
  77. endRange: []
  78. }
  79. },
  80. computed: {
  81. disabledConfirm: function () {
  82. var key = this.conf.keywords
  83. var scope = this.conf.scope
  84. var area = this.conf.area
  85. var industry = this.conf.industry
  86. var start = this.conf.start
  87. var end = this.conf.end
  88. return !(key || scope || area || industry || start || end)
  89. },
  90. hasSpace () {
  91. var key = this.conf.keywords
  92. return key.length > 1 && key.replace(/^\s\s*/,'').indexOf(' ') > -1
  93. },
  94. filterInfoUrl: function () {
  95. var path = ''
  96. if (this.entInfo.eid) {
  97. path = 'winner/selects'
  98. } else if (this.entInfo.entName) {
  99. path = 'buyer/selects'
  100. }
  101. var urlMap = {
  102. bigmember: '/bigmember/portrait/' + path, // 大会员
  103. svip: '/bigmember/portrait/subVipPortrait/selects' // 超级订阅
  104. }
  105. var url = urlMap.bigmember
  106. if (urlMap[this.reqSign]) {
  107. url = urlMap[this.reqSign]
  108. }
  109. return url
  110. },
  111. },
  112. created () {
  113. var eid = utils.getParam('eid')
  114. var reqSign = utils.getParam('reqSign')
  115. var entName = decodeURIComponent(utils.getParam('entName'))
  116. var winnerStorage = JSON.parse(sessionStorage.getItem('winner_high_set'))
  117. var buyerStorage = JSON.parse(sessionStorage.getItem('buyer_high_set'))
  118. if (eid) {
  119. this.entInfo.eid = decodeURIComponent(eid)
  120. if (winnerStorage) {
  121. this.formatterStorage(winnerStorage)
  122. }
  123. }
  124. if (entName) {
  125. this.entInfo.entName = entName
  126. if (buyerStorage) {
  127. this.formatterStorage(buyerStorage)
  128. }
  129. }
  130. if (reqSign) {
  131. this.reqSign = reqSign
  132. }
  133. },
  134. mounted () {
  135. var header = decodeURIComponent(utils.getParam('header'))
  136. this.setHeaderTitle(header)
  137. this.getFilterApi()
  138. },
  139. methods: {
  140. // 设置title
  141. setHeaderTitle: function setHeaderTitle (header) {
  142. document.title = header || document.title
  143. },
  144. // 将缓存中的项目搜索范围英文字段转换为中文用于在输入框展示
  145. formatterLabel: function(data) {
  146. var arr = []
  147. var list = this.matchTypeList
  148. var sArr = data.split(',')
  149. list.forEach(function(item){
  150. sArr.forEach(function(v){
  151. if(item.value == v) {
  152. arr.push(item.label)
  153. }
  154. })
  155. })
  156. return arr.join(',')
  157. },
  158. // 回显缓存中的数据
  159. formatterStorage: function (data) {
  160. var timeRange = data.timeRange.split('_')
  161. this.conf.keywords = data.match
  162. this.conf.area = data.area ? data.area : '全国'
  163. this.conf.scope = this.formatterLabel(data.matchRange)
  164. this.conf.industry = data.scopeClass ? data.scopeClass : '全部'
  165. this.conf.start = timeRange[0]
  166. this.conf.end = timeRange[1]
  167. this.conf.match = data.exactMatch
  168. this.selectAreaList = data.area ? data.area.split(',') : ['全国']
  169. this.selectScopeList = data.matchRange.split(',')
  170. this.selectIndustryList = data.scopeClass.split(',')
  171. },
  172. // 取近四年的年份
  173. getCurFourYears: function () {
  174. var endYear = new Date().getFullYear()
  175. var startYear = endYear - 4
  176. var years = []
  177. for(var i = startYear ; i <= endYear; i ++) {
  178. years.push(i + '年')
  179. }
  180. return years
  181. },
  182. // 处理截止日期
  183. getEndRangeYears: function () {
  184. var endArr = []
  185. var years = this.getCurFourYears()
  186. var start = this.conf.start
  187. if (start) {
  188. endArr = years.filter(function (v) {
  189. return v.replace('年', '') >= start.replace('年', '')
  190. })
  191. } else {
  192. endArr =years
  193. }
  194. return endArr
  195. },
  196. showToast: function (message) {
  197. this.$toast({
  198. duration: 1500,
  199. forbidClick: true,
  200. message: message,
  201. })
  202. },
  203. showLoading: function () {
  204. var loading = this.$toast.loading({
  205. duration: 0,
  206. forbidClick: true,
  207. message: 'loading...',
  208. })
  209. return loading
  210. },
  211. // 获取筛选条件
  212. getFilterApi () {
  213. var _this = this
  214. var loading = this.showLoading()
  215. var data = this.entInfo.eid ? {
  216. entId: _this.entInfo.eid
  217. } : {
  218. buyer: _this.entInfo.entName
  219. }
  220. $.ajax({
  221. type: 'POST',
  222. url: this.filterInfoUrl,
  223. data: data,
  224. success: function (res) {
  225. if (res.error_code == 0) {
  226. loading.clear()
  227. _this.filterInitData = res.data
  228. // _this.initSelector(res.data)
  229. } else {
  230. _this.showToast(res.error_msg)
  231. }
  232. },
  233. error: function (error) {
  234. loading.clear()
  235. console.log(error)
  236. }
  237. })
  238. },
  239. // 选择器
  240. popClick: function (type) {
  241. this.popInfo.type = type
  242. switch (type) {
  243. case 'scope':
  244. this.popInfo.show = true
  245. this.initSelector()
  246. this.popInfo.title = '请选择项目搜索范围'
  247. break;
  248. case 'area':
  249. this.popInfo.show = true
  250. this.initSelector(this.filterInitData)
  251. this.popInfo.title = '请选择项目地区'
  252. break;
  253. case 'industry':
  254. this.popInfo.show = true
  255. this.initSelector(this.filterInitData)
  256. this.popInfo.title = '请选择行业'
  257. break;
  258. case 'start':
  259. this.popInfo.show = true
  260. this.initSelector()
  261. this.popInfo.title = '请选择开始年份'
  262. break;
  263. case 'end':
  264. this.popInfo.show = true
  265. this.initSelector()
  266. this.popInfo.title = '请选择结束年份'
  267. break;
  268. }
  269. },
  270. initSelector: function (data) {
  271. var _this = this
  272. this.$nextTick(function() {
  273. switch (_this.popInfo.type) {
  274. case 'scope':
  275. _this.initMatchTypeSelector()
  276. break;
  277. case 'area':
  278. _this.filterInitData.areaArr = data.areaArr
  279. _this.initProjectAreaSelector(data.areaArr)
  280. break;
  281. case 'industry':
  282. _this.filterInitData.industry = data.scopeArr
  283. _this.initProjectIndustrySelector(data.scopeArr)
  284. break;
  285. case 'start':
  286. _this.startRange = _this.getCurFourYears()
  287. break;
  288. case 'end':
  289. _this.endRange = _this.getEndRangeYears()
  290. break;
  291. }
  292. })
  293. },
  294. // 项目搜索范围
  295. initMatchTypeSelector: function () {
  296. this.$refs.matchTypeSelector.setState(this.selectScopeList)
  297. },
  298. // 过滤地区
  299. initProjectAreaSelector: function (areaArr) {
  300. if (!Array.isArray(areaArr)) return
  301. if (areaArr.indexOf('全国') === -1) {
  302. areaArr.unshift('全国')
  303. }
  304. var areaMap = this.$refs.projectAreaSelector.provinceListMap
  305. var map = {}
  306. for (var key in areaMap) {
  307. var arr = []
  308. areaMap[key].forEach(function (item) {
  309. if (areaArr.indexOf(item) !== -1) {
  310. arr.push(item)
  311. }
  312. })
  313. if (arr.length) {
  314. map[key] = arr
  315. }
  316. }
  317. this.$refs.projectAreaSelector.arrangeListMap(map)
  318. console.log(this.selectAreaList, '111')
  319. this.$refs.projectAreaSelector.setState(this.selectAreaList)
  320. },
  321. // 过滤行业数据
  322. initProjectIndustrySelector: function (data) {
  323. var arr = []
  324. data.forEach(function(s) {
  325. var key = s.substring(0, s.indexOf('_'))
  326. var value = s.substring(s.indexOf('_') + 1)
  327. arr.push({
  328. name: key,
  329. value: value
  330. })
  331. })
  332. var newArr = []
  333. arr.forEach(function(item, index) {
  334. let newItem = newArr.find(function(i) {
  335. return i.name == item.name
  336. })
  337. if (!newItem) {
  338. newArr.push({
  339. name: item.name,
  340. value: [item.value]
  341. })
  342. } else {
  343. newItem.value.push(item.value)
  344. }
  345. })
  346. var resArr = []
  347. newArr.forEach(function(s) {
  348. var obj = {}
  349. obj[s.name] = s.value
  350. resArr.push(obj)
  351. })
  352. console.log(resArr, '过滤好的行业数据')
  353. this.$refs.industryCom.formatIndustryData(resArr)
  354. this.$refs.industryCom.setState(this.selectIndustryList)
  355. },
  356. // 分析方式
  357. checkMatch: function (item) {
  358. this.conf.match = item
  359. },
  360. onKeywords: function (val) {
  361. // 过滤首个空格
  362. this.conf.keywords = val.replace(/^\s\s*/,'')
  363. },
  364. onCancel: function (data) {
  365. if (!data) {
  366. this.selectScopeList = ['purchasing']
  367. this.$refs.matchTypeSelector.setState(this.selectScopeList)
  368. } else if (data.name == 'areaItem') {
  369. this.$refs.projectAreaSelector.setState(this.selectAreaList)
  370. } else if (data.name == 'industryItem') {
  371. this.$refs.industryCom.setState(this.selectIndustryList)
  372. }
  373. },
  374. onConfirm: function (data) {
  375. console.log(data)
  376. if (data.name === 'areaItem') {
  377. if (data.data.length === 0) {
  378. this.conf.area = '全国'
  379. this.selectAreaList = ['全国']
  380. } else {
  381. this.conf.area = data.data.join(',')
  382. this.selectAreaList = data.data
  383. }
  384. } else if (data.name === 'scopeItem') {
  385. if (data.data.length === 0) {
  386. this.conf.scope = ''
  387. } else {
  388. this.conf.scope = data.checkedList.map(function(v) {
  389. return v.label
  390. }).join(',')
  391. this.selectScopeList = data.data
  392. }
  393. } else if (data.name === 'industryItem') {
  394. if (data.data.length === 0) {
  395. this.conf.industry = '全部'
  396. } else {
  397. this.conf.industry = data.data.join(',')
  398. this.selectIndustryList = data.data
  399. }
  400. } else if (data.name === 'yearsItem') {
  401. if (data.type === 'start') {
  402. this.conf.start = data.data
  403. } else if (data.type === 'end') {
  404. this.conf.end = data.data
  405. }
  406. } else {
  407. return console.log('暂无数据')
  408. }
  409. this.setToggle()
  410. },
  411. setToggle: function() {
  412. this.popInfo.show = false
  413. },
  414. // 开始分析
  415. startStatistic: function() {
  416. var conf = this.conf
  417. var list = this.matchTypeList
  418. var arr = []
  419. var sArr = conf.scope.split(',')
  420. list.forEach(function(item){
  421. sArr.forEach(function(v){
  422. if(item.label == v) {
  423. arr.push(item.value)
  424. }
  425. })
  426. })
  427. var obj = {
  428. match: conf.keywords,
  429. exactMatch: conf.match,
  430. matchRange: arr.join(','),
  431. area: conf.area.indexOf('全国') > -1 ? '' : conf.area,
  432. scopeClass: conf.industry.indexOf('全部') > -1 ? '' : conf.industry,
  433. timeRange: conf.start.replace('年', '') + '_' + conf.end.replace('年', '')
  434. }
  435. if (this.entInfo.entName) {
  436. window.sessionStorage.setItem('buyer_high_set', JSON.stringify(obj))
  437. window.sessionStorage.setItem('buyer_high_name', encodeURIComponent(this.entInfo.entName))
  438. } else if (this.entInfo.eid) {
  439. window.sessionStorage.setItem('winner_high_set', JSON.stringify(obj))
  440. window.sessionStorage.setItem('winner_high_eid', this.entInfo.eid)
  441. }
  442. window.history.back()
  443. },
  444. // 重置
  445. onReset: function () {
  446. this.conf.keywords = ''
  447. this.conf.scope = '项目名称/标的物'
  448. this.conf.area = '全国'
  449. this.conf.industry = '全部'
  450. this.conf.start = new Date().getFullYear() - 2 + '年'
  451. this.conf.end = new Date().getFullYear() + '年'
  452. this.conf.match = 1
  453. this.filterInitData.area = []
  454. this.selectIndustryList = []
  455. this.selectScopeList = ['purchasing']
  456. }
  457. }
  458. })