form.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /*
  2. * @Author: Badguy
  3. * @Date: 2022-03-04 14:45:03
  4. * @LastEditTime: 2022-05-25 15:36:56
  5. * @LastEditors: your name
  6. * @Description: 航站视图通用表单部分
  7. * have a nice day!
  8. */
  9. import { parseTime } from '@/utils'
  10. // const defaultStartTime = new Date(new Date(new Date().toLocaleDateString()).getTime())
  11. // const defaultEndTime = new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1)
  12. const defaultDate = parseTime(new Date(), '{y}-{m}-{d}')
  13. export default {
  14. data() {
  15. return {
  16. formData: {
  17. // 搜索表单数据
  18. currentAirport: [],
  19. relatedAirport: [],
  20. inboundCarrier: [],
  21. outgoingAirline: [],
  22. craftType: [],
  23. flightAttr: [],
  24. startDate: defaultDate,
  25. endDate: defaultDate,
  26. search: ''
  27. },
  28. currentAirportList: [],
  29. relatedAirportList: [],
  30. carrierList: [],
  31. craftTypeList: [],
  32. flightAttrList: [],
  33. currentAirportProps: {
  34. // multiple: true,
  35. checkStrictly: true,
  36. expandTrigger: 'hover',
  37. value: 'code3',
  38. label: 'name',
  39. children: 'builds'
  40. },
  41. relatedAirportProps: {
  42. multiple: true,
  43. value: 'code3',
  44. label: 'name'
  45. },
  46. carrierProps: {
  47. multiple: true,
  48. value: 'code2',
  49. label: 'name'
  50. },
  51. craftTypeProps: {
  52. multiple: true,
  53. value: 'code3',
  54. label: 'name'
  55. },
  56. flightAttrProps: {
  57. multiple: true,
  58. value: 'code',
  59. label: 'name'
  60. },
  61. // 表单规则
  62. rules: {
  63. currentAirport: [{ required: true, message: '请选择当前机场', trigger: 'change' }],
  64. startDate: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
  65. endDate: [{ required: true, message: '请选择结束时间', trigger: 'change' }]
  66. }
  67. }
  68. },
  69. computed: {
  70. currentAirport() {
  71. return this.getSingleData(this.formData.currentAirport)
  72. },
  73. relatedAirport() {
  74. return this.formData.relatedAirport.map(item => item[0])
  75. },
  76. inboundCarrier() {
  77. return this.formData.inboundCarrier.map(item => item[0])
  78. },
  79. outgoingAirline() {
  80. return this.formData.outgoingAirline.map(item => item[0])
  81. },
  82. craftType() {
  83. return this.formData.craftType.map(item => item[0])
  84. },
  85. flightAttr() {
  86. return this.formData.flightAttr.map(item => item[0])
  87. },
  88. startDate() {
  89. // return parseTime(this.formData.startDate).split(' ')[0]
  90. return this.formData.startDate
  91. },
  92. endDate() {
  93. // return parseTime(this.formData.endDate).split(' ')[0]
  94. return this.formData.endDate
  95. }
  96. // computedTableHeight() {
  97. // const { relatedAirport, inboundCarrier, outgoingAirline, craftType, flightAttr } = this.formData
  98. // return relatedAirport.length ||
  99. // inboundCarrier.length ||
  100. // outgoingAirline.length ||
  101. // craftType.length ||
  102. // flightAttr.length
  103. // ? 'calc(100vh - 191px)'
  104. // : 'calc(100vh - 177px)'
  105. // }
  106. },
  107. methods: {
  108. // 机场数据处理(多选)
  109. getMultipleData(arr) {
  110. const newArr = []
  111. arr.length &&
  112. arr.forEach(airport => {
  113. const temp = this._.cloneDeep(this.currentAirportList.find(airport1 => airport1.code3 === airport[0]))
  114. if (temp) {
  115. temp.builds = airport[1] ? [{ name: airport[1] }] : []
  116. const item = newArr.find(item => item.code3 === temp.code3)
  117. if (item) {
  118. item.builds.push(...temp.builds)
  119. } else {
  120. newArr.push(temp)
  121. }
  122. }
  123. })
  124. return newArr
  125. },
  126. // 机场数据处理(单选)
  127. getSingleData(arr) {
  128. const newArr = []
  129. if (arr.length > 0) {
  130. const temp = this._.cloneDeep(this.currentAirportList.find(airport1 => airport1.code3 === arr[0]))
  131. if (temp) {
  132. temp.builds = arr[1] ? [{ name: arr[1] }] : []
  133. newArr.push(temp)
  134. }
  135. }
  136. return newArr
  137. },
  138. // 清除表单数据
  139. formClear(range) {
  140. if (range === 'all') {
  141. this.formData.currentAirport = []
  142. this.currentAirportList = []
  143. }
  144. this.formData.relatedAirport = []
  145. this.relatedAirportList = []
  146. this.formData.inboundCarrier = []
  147. this.formData.outgoingAirline = []
  148. this.carrierList = []
  149. this.formData.craftType = []
  150. this.craftTypeList = []
  151. this.formData.flightAttr = []
  152. this.flightAttrList = []
  153. },
  154. // 文本框清除
  155. inputClear() {
  156. this.onSubmit()
  157. },
  158. // 当前机场变更
  159. setCurrentAirport(data) {
  160. this.formClear()
  161. if (data.length === 0) {
  162. return
  163. }
  164. const params = {
  165. currentAirport: this.currentAirport,
  166. startDate: this.startDate,
  167. endDate: this.endDate
  168. }
  169. this.getFormData(params)
  170. },
  171. // 日期限制
  172. setStartDate(val) {
  173. // this.formClear('all')
  174. if (!val) {
  175. return
  176. }
  177. if (this.formData.endDate && this.formData.endDate < val) {
  178. this.formData.endDate = ''
  179. this.$message.error('结束时间不能小于开始时间,请重新选择')
  180. return false
  181. } else {
  182. this.getTableData()
  183. // this.currentAirportQuery()
  184. return true
  185. }
  186. },
  187. setEndDate(val) {
  188. // this.formClear('all')
  189. if (!val) {
  190. return
  191. }
  192. if (this.formData.startDate && this.formData.startDate > val) {
  193. this.formData.endDate = ''
  194. this.$message.error('结束时间不能小于开始时间,请重新选择')
  195. return false
  196. } else {
  197. this.getTableData()
  198. // this.currentAirportQuery()
  199. return true
  200. }
  201. },
  202. // 搜索
  203. onSubmit(data) {
  204. this.$refs['form'].validate(valid => {
  205. if (valid) {
  206. const az = /^[a-zA-Z]+$/
  207. const azNum = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]*$/
  208. // const top2 = /^[a-zA-Z]{2}\w*$/
  209. const top2 = /^([a-zA-Z][0-9])|([0-9][a-zA-Z])|([a-zA-Z]{2})/
  210. const num = /^[0-9]+$/
  211. const queryData = {
  212. startDate: this.formData.startDate,
  213. endDate: this.formData.endDate
  214. }
  215. if (Number(data) === 1) {
  216. queryData['destination'] = this.formData.currentAirport
  217. } else {
  218. queryData['station'] = this.formData.currentAirport
  219. }
  220. if (az.test(this.formData.search)) {
  221. // 纯字母则为旅客姓名
  222. queryData['name'] = this.formData.search
  223. } else if (azNum.test(this.formData.search) && top2.test(this.formData.search)) {
  224. // 字母加数字且前两位为字母则为航班号
  225. queryData['FlightNO'] = this.formData.search
  226. } else if (num.test(this.formData.search) && this.formData.search.length === 10) {
  227. // 纯数字且位数等于10则为行李牌号
  228. queryData['grade'] = this.formData.search
  229. } else {
  230. // this.$message.error('请输入有效查询信息如航班号、旅客姓名首字母、行李牌号')
  231. }
  232. this.$router.push({
  233. path: '/advance',
  234. query: queryData
  235. })
  236. } else {
  237. return false
  238. }
  239. })
  240. }
  241. }
  242. }