format.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. const _ = require('lodash')
  2. const { Province, City, Area, Street } = require('./sqlite')
  3. const cField = ['code', 'name']
  4. const fField = cField.concat('children')
  5. /**
  6. * 获取省市二级联动数据
  7. * @author https://github.com/modood
  8. * @datetime 2018-02-01 22:08
  9. */
  10. exports.getAddressPC = async () => {
  11. const r = await Province.findAll({
  12. include: [{ model: City }] })
  13. const count = r.length
  14. let index = 0
  15. return _.map(r, p => {
  16. index++
  17. const { code, name } = p.dataValues
  18. log(index, count, code, name, 2)
  19. p.dataValues.children = _.map(p.cities, c =>
  20. _.pick(c.dataValues, cField))
  21. return _.pick(p.dataValues, fField)
  22. })
  23. }
  24. /**
  25. * 获取省市区三级联动数据
  26. * @author https://github.com/modood
  27. * @datetime 2018-02-01 22:13
  28. */
  29. exports.getAddressPCA = async () => {
  30. const r = await Province.findAll({
  31. include: [{ model: City,
  32. include: [{ model: Area }] }] })
  33. const count = r.length
  34. let index = 0
  35. return _.map(r, p => {
  36. index++
  37. const { code, name } = p.dataValues
  38. log(index, count, code, name, 3)
  39. p.dataValues.children = _.map(p.cities, c => {
  40. const { code, name } = c.dataValues
  41. log(index, count, code, name, 3)
  42. c.dataValues.children = _.map(c.areas, a =>
  43. _.pick(a.dataValues, cField))
  44. return _.pick(c.dataValues, fField)
  45. })
  46. return _.pick(p.dataValues, fField)
  47. })
  48. }
  49. /**
  50. * 获取省市区镇四级联动数据
  51. * @author https://github.com/modood
  52. * @datetime 2018-02-02 09:51
  53. */
  54. exports.getAddressPCAS = async () => {
  55. const r = await Province.findAll({
  56. include: [{ model: City,
  57. include: [{ model: Area,
  58. include: [{ model: Street }] }] }] })
  59. const count = r.length
  60. let index = 0
  61. return _.map(r, p => {
  62. index++
  63. const { code, name } = p.dataValues
  64. log(index, count, code, name, 4)
  65. p.dataValues.children = _.map(p.cities, c => {
  66. const { code, name } = c.dataValues
  67. log(index, count, code, name, 4)
  68. c.dataValues.children = _.map(c.areas, a => {
  69. const { code, name } = a.dataValues
  70. log(index, count, code, name, 4)
  71. a.dataValues.children = _.map(a.streets, s =>
  72. _.pick(s.dataValues, cField))
  73. return _.pick(a.dataValues, fField)
  74. })
  75. return _.pick(c.dataValues, fField)
  76. })
  77. return _.pick(p.dataValues, fField)
  78. })
  79. }
  80. function log (index, total, code, name, type) {
  81. if (index >= 0 && index <= 9) index = `0${index}`
  82. const clen = code.length
  83. if ((type === 3 && clen === 2) ||
  84. (type === 4 && clen === 4)) code = `${code} `
  85. else if (type === 4 && clen === 2) code = `${code} `
  86. let text = ''
  87. switch (type) {
  88. case 2:
  89. text = '正在格式化省市二级联动数据'
  90. break
  91. case 3:
  92. text = '正在格式化省市区三级联动数据,请耐心等候'
  93. break
  94. case 4:
  95. text = '正在格式化省市区镇四级联动数据,该步骤比较耗时,请耐心等候'
  96. break
  97. }
  98. console.log(`[${index}/${total}]${text} ${code} ${name}`)
  99. }