/* *********************************************************** */ // 创建: Macheng 2019/09/05. // 修改: Macheng 2019/09/05 // Description: // 该文件定义了任务类Task。用于执行任务数据。 /* *********************************************************** */ import { isString } from '@/utils' import Player from './player' import BaseModel from './baseModel' import Sheet from './sheet' class Task extends BaseModel { id = 0 // 任务ID (就是创建时间 ms) name = '' // 任务名称 buildingId = 0 // 执行任务的建筑ID buildingName = '' // 执行任务的建筑名称 floorId = 0 // 执行任务的层级ID floorName = '' // 执行任务的层级名称 beginTime = 0 // 任务限定开始时间 (ms) endTime = 0 // 任务限定结束时间 (ms) status = 0 // 任务状态 0:未运行, 1:运行中, 2:已暂停, 3:已结束 creator = null // 任务创建人 executors = [] // 任务执行人 sheets = [] // 任务权限 desc = '' // 任务描述 get label() { return this.name } get isTask() { return true } constructor(opts) { if (!opts) opts = {} super(opts) this.id = Math.floor(new Date().getTime() / 1000) this.init(opts) } cmpSame(dstTask) { if (this.beginTime !== dstTask.beginTime || this.endTime !== dstTask.endTime || this.status !== dstTask.status) { return false } if (this.executors.length !== dstTask.executors.length) { return false } else { for (let i = 0; i < this.executors.length; i++) { const srcPlayer = this.executors[i] const dstPlayer = dstTask.executors[i] if (srcPlayer.id !== dstPlayer.id || srcPlayer.name !== dstPlayer.name) { return false } } } return true } removeSheet(sheetId) { for (let i = this.sheets.length - 1; i >= 0; i--) { const sheet = this.sheets[i] if (sheet.id === sheetId) { this.sheets.splice(i, 1) } } } init(opts) { if (!opts) opts = {} super.init(opts) this.id = Number(opts['id']) || Number(opts['taskId']) || this.id this.name = opts['name'] || '' this.buildingId = Number(opts['buildingId']) || 0 this.buildingName = opts['buildingName'] || '' this.floorId = Number(opts['floorId']) || 0 this.floorName = opts['floorName'] || '' this.beginTime = Number(opts['beginTime']) || 0 this.endTime = Number(opts['endTime']) || 0 this.creator = null if (opts['creator']) { if (isString(opts['creator'])) { this.creator = new Player(JSON.parse(opts['creator'])) } else { this.creator = new Player(opts['creator']) } } this.executors = [] if (opts['executors']) { if (opts['executors'] instanceof Array) { for (let i = 0; i < opts['executors'].length; i++) { this.executors.push(new Player(opts['executors'][i])) } } else if (isString(opts['executors'])) { const arr = JSON.parse(opts['executors']) for (let i = 0; i < arr.length; i++) { const player = new Player(arr[i]) this.executors.push(player) } } } this.sheets = [] if (opts['sheets']) { if (opts['sheets'] instanceof Array) { for (let i = 0; i < opts['sheets'].length; i++) { const sheet = new Sheet(opts['sheets'][i]) sheet.setTask(this) this.sheets.push(sheet) } } else if (isString(opts['sheets'])) { const arr = JSON.parse(opts['sheets']) for (let i = 0; i < arr.length; i++) { const sheet = new Sheet(arr[i]) sheet.setTask(this) this.sheets.push(sheet) } } } this.desc = opts['desc'] || '' this.status = Number(opts['status']) || 0 } setSheetInAtlasVisible(mode, visible) { for (const sheet of this.sheets) { if (Number(sheet.mode) === Number(mode)) { sheet.showInAtlas = visible } } } toJson() { const arrSheet = [] for (const v of this.sheets) { arrSheet.push(v.toJson()) } const arrExecutor = [] for (const v of this.executors) { arrExecutor.push(v.toJson()) } const obj1 = super.toJson() const obj2 = { id: this.id, name: this.name, buildingId: this.buildingId, buildingName: this.buildingName, floorId: this.floorId, floorName: this.floorName, beginTime: this.beginTime, endTime: this.endTime, creator: this.creator ? this.creator.toJson() : null, executors: arrExecutor, sheets: arrSheet, desc: this.desc, status: this.status } return Object.assign({}, obj1, obj2) } } export default Task