task.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /* *********************************************************** */
  2. // 创建: Macheng 2019/09/05.
  3. // 修改: Macheng 2019/09/05
  4. // Description:
  5. // 该文件定义了任务类Task。用于执行任务数据。
  6. /* *********************************************************** */
  7. import { isString } from '@/utils'
  8. import Player from './player'
  9. import BaseModel from './baseModel'
  10. import Sheet from './sheet'
  11. class Task extends BaseModel {
  12. id = 0 // 任务ID (就是创建时间 ms)
  13. name = '' // 任务名称
  14. buildingId = 0 // 执行任务的建筑ID
  15. buildingName = '' // 执行任务的建筑名称
  16. floorId = 0 // 执行任务的层级ID
  17. floorName = '' // 执行任务的层级名称
  18. beginTime = 0 // 任务限定开始时间 (ms)
  19. endTime = 0 // 任务限定结束时间 (ms)
  20. status = 0 // 任务状态 0:未运行, 1:运行中, 2:已暂停, 3:已结束
  21. creator = null // 任务创建人
  22. executors = [] // 任务执行人
  23. sheets = [] // 任务权限
  24. desc = '' // 任务描述
  25. get label() {
  26. return this.name
  27. }
  28. get isTask() {
  29. return true
  30. }
  31. constructor(opts) {
  32. if (!opts) opts = {}
  33. super(opts)
  34. this.id = Math.floor(new Date().getTime() / 1000)
  35. this.init(opts)
  36. }
  37. cmpSame(dstTask) {
  38. if (this.beginTime !== dstTask.beginTime ||
  39. this.endTime !== dstTask.endTime ||
  40. this.status !== dstTask.status) {
  41. return false
  42. }
  43. if (this.executors.length !== dstTask.executors.length) {
  44. return false
  45. } else {
  46. for (let i = 0; i < this.executors.length; i++) {
  47. const srcPlayer = this.executors[i]
  48. const dstPlayer = dstTask.executors[i]
  49. if (srcPlayer.id !== dstPlayer.id || srcPlayer.name !== dstPlayer.name) {
  50. return false
  51. }
  52. }
  53. }
  54. return true
  55. }
  56. removeSheet(sheetId) {
  57. for (let i = this.sheets.length - 1; i >= 0; i--) {
  58. const sheet = this.sheets[i]
  59. if (sheet.id === sheetId) {
  60. this.sheets.splice(i, 1)
  61. }
  62. }
  63. }
  64. init(opts) {
  65. if (!opts) opts = {}
  66. super.init(opts)
  67. this.id = Number(opts['id']) || Number(opts['taskId']) || this.id
  68. this.name = opts['name'] || ''
  69. this.buildingId = Number(opts['buildingId']) || 0
  70. this.buildingName = opts['buildingName'] || ''
  71. this.floorId = Number(opts['floorId']) || 0
  72. this.floorName = opts['floorName'] || ''
  73. this.beginTime = Number(opts['beginTime']) || 0
  74. this.endTime = Number(opts['endTime']) || 0
  75. this.creator = null
  76. if (opts['creator']) {
  77. if (isString(opts['creator'])) {
  78. this.creator = new Player(JSON.parse(opts['creator']))
  79. } else {
  80. this.creator = new Player(opts['creator'])
  81. }
  82. }
  83. this.executors = []
  84. if (opts['executors']) {
  85. if (opts['executors'] instanceof Array) {
  86. for (let i = 0; i < opts['executors'].length; i++) {
  87. this.executors.push(new Player(opts['executors'][i]))
  88. }
  89. } else if (isString(opts['executors'])) {
  90. const arr = JSON.parse(opts['executors'])
  91. for (let i = 0; i < arr.length; i++) {
  92. const player = new Player(arr[i])
  93. this.executors.push(player)
  94. }
  95. }
  96. }
  97. this.sheets = []
  98. if (opts['sheets']) {
  99. if (opts['sheets'] instanceof Array) {
  100. for (let i = 0; i < opts['sheets'].length; i++) {
  101. const sheet = new Sheet(opts['sheets'][i])
  102. sheet.setTask(this)
  103. this.sheets.push(sheet)
  104. }
  105. } else if (isString(opts['sheets'])) {
  106. const arr = JSON.parse(opts['sheets'])
  107. for (let i = 0; i < arr.length; i++) {
  108. const sheet = new Sheet(arr[i])
  109. sheet.setTask(this)
  110. this.sheets.push(sheet)
  111. }
  112. }
  113. }
  114. this.desc = opts['desc'] || ''
  115. this.status = Number(opts['status']) || 0
  116. }
  117. setSheetInAtlasVisible(mode, visible) {
  118. for (const sheet of this.sheets) {
  119. if (Number(sheet.mode) === Number(mode)) {
  120. sheet.showInAtlas = visible
  121. }
  122. }
  123. }
  124. toJson() {
  125. const arrSheet = []
  126. for (const v of this.sheets) {
  127. arrSheet.push(v.toJson())
  128. }
  129. const arrExecutor = []
  130. for (const v of this.executors) {
  131. arrExecutor.push(v.toJson())
  132. }
  133. const obj1 = super.toJson()
  134. const obj2 = {
  135. id: this.id,
  136. name: this.name,
  137. buildingId: this.buildingId,
  138. buildingName: this.buildingName,
  139. floorId: this.floorId,
  140. floorName: this.floorName,
  141. beginTime: this.beginTime,
  142. endTime: this.endTime,
  143. creator: this.creator ? this.creator.toJson() : null,
  144. executors: arrExecutor,
  145. sheets: arrSheet,
  146. desc: this.desc,
  147. status: this.status
  148. }
  149. return Object.assign({}, obj1, obj2)
  150. }
  151. }
  152. export default Task