index.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. import { taskStatus } from '@/utils/status'
  2. export const columns = (_this) => [
  3. {
  4. prop: 'taskName',
  5. label: '任务名称',
  6. align: 'left',
  7. width: '200px'
  8. },
  9. {
  10. prop: 'taskCode',
  11. label: '任务代号'
  12. },
  13. {
  14. prop: 'taskTime',
  15. label: '任务时间',
  16. width: '200px'
  17. },
  18. {
  19. prop: 'taskDuration',
  20. label: '任务时长/小时'
  21. },
  22. {
  23. prop: 'flyingSession',
  24. label: '飞行场次'
  25. },
  26. {
  27. prop: 'env',
  28. label: '飞行环境'
  29. },
  30. {
  31. prop: 'transferLabel',
  32. label: '转场形式'
  33. },
  34. {
  35. prop: 'teamLeader',
  36. label: '带队领导'
  37. },
  38. {
  39. prop: 'taskAircraftNum',
  40. label: '任务要求飞机数量'
  41. },
  42. {
  43. prop: 'carryingAvmatNumber',
  44. label: '携带航材数量'
  45. },
  46. {
  47. prop: 'taskType',
  48. label: '任务类型'
  49. },
  50. {
  51. prop: 'taskSite',
  52. label: '任务地点'
  53. },
  54. // {
  55. // prop: 'riskFactor',
  56. // label: '风险系数'
  57. // },
  58. // {
  59. // prop: 'taskStrengthLabel',
  60. // label: '任务强度'
  61. // },
  62. {
  63. prop: 'status',
  64. label: '状态',
  65. width: '150px',
  66. render: (h, params) => taskStatus(h, params.row.status)
  67. },
  68. {
  69. prop: 'updateTime',
  70. label: '更新时间',
  71. width: '120px'
  72. },
  73. {
  74. button: true,
  75. label: '操作',
  76. width: '250px',
  77. align: 'left',
  78. group: [
  79. {
  80. name: '编辑',
  81. type: 'text',
  82. round: false,
  83. plain: false,
  84. statusKey: 'status',
  85. unDisableKey: '1',
  86. onClick: (row, index, scope) => {
  87. _this.edit(row)
  88. }
  89. },
  90. {
  91. name: '任务飞机',
  92. type: 'text',
  93. round: false,
  94. plain: false,
  95. statusKey: 'status',
  96. showType: '1', //0:父级;1:子级
  97. onClick: (row, index, scope) => {
  98. _this.toAircraft(row)
  99. }
  100. },
  101. {
  102. name: '删除',
  103. type: 'text',
  104. round: false,
  105. plain: false,
  106. statusKey: 'status',
  107. unDisableKey: '1',
  108. onClick: (row, index, scope) => {
  109. _this.remove(row)
  110. }
  111. },
  112. {
  113. name: '提交',
  114. type: 'text',
  115. round: false,
  116. plain: false,
  117. statusKey: 'status',
  118. unDisableKey: '1',
  119. showType: '0', //0:父级;1:子级
  120. onClick: (row, index, scope) => {
  121. _this.audit(row)
  122. }
  123. }
  124. ]
  125. }
  126. ]
  127. export const options = {
  128. treeProps: {
  129. children: 'children',
  130. hasChildren: 'hasChildren'
  131. },
  132. rowKey: 'taskId',
  133. stripe: true, // 斑马纹
  134. mutiSelect: true, // 多选框
  135. index: false, // 显示序号, 多选则 mutiSelect
  136. loading: false, // 表格动画
  137. initTable: true, // 是否一挂载就加载数据
  138. border: true,
  139. rowKey: 'taskId',
  140. height: 'calc(100vh - 240px)'
  141. }
  142. // export const findParents = (tree, targetId, path = []) => {
  143. // for (const node of tree) {
  144. // path.push(node.aircaftTypeCode)
  145. // if (node.aircaftTypeCode === targetId) {
  146. // return path
  147. // }
  148. // if (node.children && Array.isArray(node.children) && node.children.length > 0) {
  149. // const result = findParents(node.children, targetId, path)
  150. // if (result) {
  151. // return result
  152. // }
  153. // }
  154. // path.pop()
  155. // }
  156. // return null
  157. // }
  158. export const modalConfig = (_this) => ({
  159. formItems: [
  160. {
  161. key: 'parentId',
  162. type: 'select',
  163. label: '主任务',
  164. placeHolder: '请选择主任务',
  165. valueOptions: [],
  166. colLayout: { span: 24 }
  167. },
  168. { key: 'taskName', type: 'input', label: '任务名称', placeHolder: '请输入任务名称' },
  169. { key: 'taskCode', type: 'input', label: '任务代号', placeHolder: '请输入任务代号' },
  170. { key: 'teamLeader', type: 'input', label: '带队领导', placeHolder: '请输入带队领导' },
  171. {
  172. key: 'taskTime',
  173. type: 'daterange',
  174. label: '任务时间',
  175. options: {
  176. format: 'yyyy-M-d',
  177. placeHolder: '请选择任务时间',
  178. 'range-separator': '至',
  179. 'start-placeholder': '开始日期',
  180. 'end-placeholder': '结束日期',
  181. 'value-format': 'yyyy-MM-dd'
  182. }
  183. },
  184. {
  185. key: 'taskDuration',
  186. type: 'inputNumber',
  187. label: '任务时长',
  188. placeHolder: '请输入任务时长',
  189. options: {
  190. style: 'width: 100%'
  191. }
  192. },
  193. {
  194. key: 'envFactorId',
  195. type: 'select',
  196. label: '飞行环境',
  197. placeHolder: '请选择飞行环境',
  198. valueOptions: []
  199. },
  200. {
  201. key: 'flyingSession',
  202. type: 'inputNumber',
  203. label: '飞行场次',
  204. placeHolder: '请输入飞行场次',
  205. options: {
  206. style: 'width: 100%'
  207. }
  208. },
  209. { key: 'taskType', type: 'input', label: '任务类型', placeHolder: '请输入任务类型' },
  210. {
  211. key: 'taskAircraftNum',
  212. type: 'inputNumber',
  213. label: '任务飞机数量',
  214. placeHolder: '请输入任务飞机数量',
  215. options: {
  216. style: 'width: 100%'
  217. }
  218. },
  219. // {
  220. // key: 'carryingAvmatNumber',
  221. // type: 'inputNumber',
  222. // label: '携带航材数量',
  223. // placeHolder: '请输入携带航材数量',
  224. // options: {
  225. // style: 'width: 100%'
  226. // }
  227. // },
  228. { key: 'taskSite', type: 'input', label: '任务地点', placeHolder: '请输入任务地点' },
  229. {
  230. key: 'transferModality',
  231. type: 'select',
  232. label: '转场形式',
  233. placeHolder: '请选择转场形式',
  234. valueOptions: []
  235. },
  236. { key: 'riskFactor', type: 'input', label: '风险系数', placeHolder: '请输入危险系数' },
  237. {
  238. key: 'taskStrength',
  239. type: 'select',
  240. label: '任务强度',
  241. placeHolder: '请选择任务强度',
  242. valueOptions: []
  243. },
  244. {
  245. key: 'taskDescribe',
  246. type: 'input',
  247. label: '任务描述',
  248. // 文本域,不写则是普通文本框
  249. inputOptions: {
  250. type: 'textarea',
  251. rows: '2',
  252. style: 'width: 100%'
  253. },
  254. colLayout: { span: 24 }
  255. }
  256. ],
  257. labelWidth: '120px',
  258. width: '800px',
  259. itemStyle: { padding: '10px' },
  260. rules: {
  261. taskName: [{ required: true, message: '请输入任务名称', trigger: 'blur' }],
  262. taskCode: [{ required: true, message: '请输入任务代号', trigger: 'blur' }],
  263. teamLeader: [{ required: true, message: '请输入带队领导', trigger: 'blur' }],
  264. taskTime: [{ required: true, message: '请选择任务时间', trigger: 'blur' }],
  265. taskDuration: [
  266. { required: true, message: '请输入任务时长', trigger: 'blur' },
  267. { validator: taskDurationvalidate, trigger: 'blur' }
  268. ],
  269. envFactorId: [{ required: true, message: '请选择飞行环境', trigger: 'blur' }],
  270. flyingSession: [
  271. { required: true, message: '请输入飞行场次', trigger: 'blur' },
  272. { validator: flyingSessionvalidate, trigger: 'blur' }
  273. ],
  274. taskType: [{ required: true, message: '请输入任务类型', trigger: 'blur' }],
  275. taskAircraftNum: [
  276. { required: true, message: '请输入任务飞机数量', trigger: 'blur' },
  277. { validator: taskAircraftNumvalidate, trigger: 'blur' }
  278. ],
  279. carryingAvmatNumber: [
  280. { required: true, message: '请输入携带航材数量', trigger: 'blur' },
  281. { validator: taskAircraftNumvalidate, trigger: 'blur' }
  282. ],
  283. taskSite: [{ required: true, message: '请输入任务地点', trigger: 'blur' }],
  284. transferModality: [{ required: true, message: '请选择转场形式', trigger: 'blur' }],
  285. // taskDescribe: [{ required: true, message: '请输入任务描述', trigger: 'blur' }]
  286. riskFactor: [
  287. { required: true, message: '请输入危险系数', trigger: 'blur' },
  288. {
  289. validator: (rule, value, callback) => {
  290. if (value === '') {
  291. callback(new Error('请输入数字'))
  292. } else {
  293. const reg = /^(\d+|\d+\.\d+)$/
  294. if (reg.test(value)) {
  295. callback()
  296. } else {
  297. callback(new Error('请输入整数或小数'))
  298. }
  299. }
  300. }
  301. }
  302. ],
  303. taskStrength: [{ required: true, message: '请选择任务强度', trigger: 'blur' }]
  304. }
  305. })
  306. const taskDurationvalidate = (rule, value, callback) => {
  307. if (!Number.isInteger(Number(value)) || Number(value) <= 0) {
  308. callback(new Error('任务时长必须大于0'))
  309. } else {
  310. callback()
  311. }
  312. }
  313. const flyingSessionvalidate = (rule, value, callback) => {
  314. if (!Number.isInteger(Number(value)) || Number(value) <= 0) {
  315. callback(new Error('飞行场次必须大于0且为正整数'))
  316. } else {
  317. callback()
  318. }
  319. }
  320. const taskAircraftNumvalidate = (rule, value, callback) => {
  321. if (!Number.isInteger(Number(value)) || Number(value) <= 0) {
  322. callback(new Error('飞机数量必须大于0且为正整数'))
  323. } else {
  324. callback()
  325. }
  326. }