index.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852
  1. /* *********************************************************** */
  2. // 创建: Macheng 2019/08/29.
  3. // 修改: Macheng 2019/08/29
  4. // Description:
  5. // 该文件定义了全局单例的vGlobal类。用于保存所有参数和数据的容器。
  6. /* *********************************************************** */
  7. import Project from '../model/project'
  8. import Anchor from '../model/anchor'
  9. import Tag from '../model/tag'
  10. import SysCfg from '../model/sysCfg'
  11. import Sign from '../model/sign'
  12. // import Alarm from '../model/alarm'
  13. // import Task from '../model/task'
  14. // import { fetchRTAlarms } from '../api/alarm'
  15. import { fetchProjects, deleteProject, modifyProject } from '../api/project'
  16. import { fetchAnchors, fetchRTAncStatus, clearAnchor, batchModifyAnchors } from '../api/anchor'
  17. import { fetchTags, fetchRTTagPos, clearTag, batchModifyTags } from '@/api/tag'
  18. import { fetchSigns, clearSign, batchModifySigns } from '@/api/sign'
  19. import { fetchSysCfg } from '@/api/system';
  20. // import { fetchRTTasks } from '../api/task'
  21. import app from '@/main'
  22. // import { getRoles } from '../utils/auth'
  23. // import { isString } from '../utils'
  24. const vGlobal = {
  25. get isRt() {
  26. return vGlobal.mapEngine ? vGlobal.mapEngine.isRt : true
  27. },
  28. set isRt(val) {
  29. if (vGlobal.mapEngine) {
  30. vGlobal.mapEngine.isRt = val
  31. }
  32. },
  33. isInited() {
  34. return vGlobal._isInited
  35. },
  36. isRefreshAnchors() {
  37. return vGlobal._isRefreshAnchors
  38. },
  39. isRefreshProjects() {
  40. return vGlobal._isRefreshProjects
  41. },
  42. isRefreshSigns() {
  43. return vGlobal._isRefreshSigns
  44. },
  45. isRefreshTags() {
  46. return vGlobal._isRefreshTags
  47. },
  48. refreshTick() {
  49. vGlobal._tickRefresh++
  50. app.$store.dispatch('setTickRefresh', vGlobal._tickRefresh)
  51. },
  52. resetInit() {
  53. this.stepInit = 0
  54. this._isInited = false
  55. },
  56. getToken() {
  57. return this._token
  58. },
  59. setToken(tk) {
  60. this._token = tk
  61. }
  62. }
  63. vGlobal.SCHEDULE_INTERVAL = 5000
  64. vGlobal.ancCmdReply = {
  65. optReply: '',
  66. optStatus: 'statusReady',
  67. uploadFlag: false,
  68. updateFlag: false
  69. }
  70. vGlobal.ancDLReply = {
  71. dlFlag: false
  72. }
  73. // 容器相关
  74. vGlobal.gAltases = {} // 场景地图字典
  75. vGlobal.gAnchors = {} // 基站
  76. vGlobal.gTags = {} // 标签字典
  77. vGlobal.vecAlarm = [] // 实时报警列表
  78. vGlobal.vecAnchor = [] // 基站列表
  79. vGlobal.vecProject = [] // 项目列表
  80. vGlobal.vecSign = [] // 标记列表
  81. vGlobal.vecTag = [] // 标签列表
  82. vGlobal.vecTask = [] // 实时任务
  83. // 地图引擎
  84. vGlobal.mapEngine = null
  85. // 索引相关
  86. vGlobal.maxTagIndex = 0
  87. vGlobal.maxAnchorIndex = 0
  88. vGlobal._scheduleId = 0
  89. vGlobal._queueSchedule = []
  90. // 初始化相关
  91. vGlobal._curRoute = null
  92. vGlobal._isInited = false
  93. vGlobal.isLogin = false
  94. vGlobal.stepInit = 0
  95. vGlobal._tickRefresh = 0
  96. vGlobal._isRefreshAnchors = false
  97. vGlobal._isRefreshProjects = false
  98. vGlobal._isRefreshSigns = false
  99. vGlobal._isRefreshTags = false
  100. //
  101. vGlobal.sysCfg = new SysCfg()
  102. vGlobal._token = null
  103. // Step 1 init projects
  104. vGlobal._initProjects = function (logFunc) {
  105. vGlobal.stepInit = 10
  106. vGlobal.refreshProjects(vGlobal._initSigns, logFunc)
  107. }
  108. // Step 2 init signs
  109. vGlobal._initSigns = function (logFunc) {
  110. vGlobal.stepInit = 20
  111. vGlobal.refreshSigns(vGlobal._initTags, logFunc)
  112. }
  113. // Step 3 init tags
  114. vGlobal._initTags = function (logFunc) {
  115. vGlobal.stepInit = 30
  116. vGlobal.refreshTags(vGlobal._initSysCfg, logFunc)
  117. }
  118. vGlobal._initSysCfg = function (logFunc) {
  119. vGlobal.stepInit = 40
  120. vGlobal.refreshSysCfg(vGlobal._initAnchors, logFunc)
  121. }
  122. // Step 4 init anchors
  123. vGlobal._initAnchors = function (logFunc) {
  124. vGlobal.stepInit = 50
  125. vGlobal.refreshAnchors((logFunc) => {
  126. vGlobal._isInited = true
  127. vGlobal._tickRefresh++
  128. vGlobal.stepInit = 70
  129. console.log('vGlobal isInited')
  130. vGlobal.schedule()
  131. }, logFunc)
  132. }
  133. vGlobal.init = function (logFunc) {
  134. vGlobal._isInited = false
  135. vGlobal.stepInit = 0
  136. vGlobal.gAnchors = {}
  137. vGlobal.gTags = {}
  138. vGlobal.vecAlarm.splice(0, vGlobal.vecAlarm.length)
  139. vGlobal.vecProject.splice(0, vGlobal.vecProject.length)
  140. vGlobal.vecSign.splice(0, vGlobal.vecSign.length)
  141. vGlobal.vecTag.splice(0, vGlobal.vecTag.length)
  142. vGlobal.vecTask.splice(0, vGlobal.vecTask.length)
  143. vGlobal._initProjects(logFunc)
  144. clearInterval(vGlobal._scheduleId)
  145. vGlobal._scheduleId = setInterval(vGlobal.schedule, vGlobal.SCHEDULE_INTERVAL)
  146. }
  147. vGlobal.addAnchor = function (anchor) {
  148. const newAnchor = new Anchor(anchor)
  149. if (vGlobal.gAnchors[newAnchor.addr] || newAnchor.addr <= 0) {
  150. return false
  151. }
  152. vGlobal.vecAnchor.push(newAnchor)
  153. vGlobal.gAnchors[newAnchor.addr] = newAnchor
  154. vGlobal.vecAnchor.sort((v1, v2) => { return v1.addr - v2.addr })
  155. return true
  156. }
  157. vGlobal.addTag = function (tag) {
  158. const newTag = new Tag(tag)
  159. if (vGlobal.gTags[newTag.addr] || newTag.addr <= 0) {
  160. return false
  161. }
  162. vGlobal.vecTag.push(newTag)
  163. vGlobal.gTags[newTag.addr] = newTag
  164. vGlobal.vecTag.sort((v1, v2) => { return v1.addr - v2.addr })
  165. return true
  166. }
  167. vGlobal.clearSchedule = function () {
  168. clearInterval(vGlobal._scheduleId)
  169. vGlobal._scheduleId = 0
  170. }
  171. vGlobal.clearAnchors = function () {
  172. clearAnchor({}).then(response => {
  173. if (response.success) {
  174. vGlobal.vecAnchor.splice(0, vGlobal.vecAnchor.length)
  175. vGlobal.gAnchors = {}
  176. }
  177. })
  178. }
  179. vGlobal.clearProjects = function () {
  180. for (const project of vGlobal.vecProject) {
  181. const data = {
  182. projId: project.id
  183. }
  184. deleteProject(data).then(response => {
  185. // if (response.success) {
  186. // }
  187. })
  188. }
  189. vGlobal.vecProject.splice(0, vGlobal.vecProject.length)
  190. }
  191. vGlobal.clearSigns = function () {
  192. clearSign({}).then(response => {
  193. if (response.success) {
  194. vGlobal.vecSign.splice(0, vGlobal.vecSign.length)
  195. }
  196. })
  197. }
  198. vGlobal.clearTags = function () {
  199. clearTag({}).then(response => {
  200. if (response.success) {
  201. vGlobal.vecTag.splice(0, vGlobal.vecTag.length)
  202. vGlobal.gTags = {}
  203. }
  204. })
  205. }
  206. vGlobal.clickMtTag = function (tag) {
  207. if (!tag) {
  208. app.$store.dispatch('setRtSelTag', null)
  209. } else {
  210. app.$store.dispatch('setRtSelTag', tag)
  211. }
  212. }
  213. vGlobal.clickMtTrace = function (tag) {
  214. vGlobal.clearMtTrace()
  215. if (!tag) {
  216. app.$store.dispatch('setRtTraceTag', null)
  217. } else {
  218. tag.isFocus = true
  219. app.$store.dispatch('setRtTraceTag', tag)
  220. }
  221. }
  222. vGlobal.clickMtTraceByAddr = function (tagAddr) {
  223. const tag = vGlobal.getTag(tagAddr)
  224. vGlobal.clickMtTrace(tag)
  225. }
  226. vGlobal.copyProjects = function () {
  227. const vec = []
  228. for (const v of vGlobal.vecProject) {
  229. const project = new Project(v.toJson())
  230. vec.push(project)
  231. }
  232. return vec
  233. }
  234. vGlobal.deleteProject = function (project, successFunc, failFunc) {
  235. if (!project) {
  236. return
  237. }
  238. const data = {
  239. projectId: project.id
  240. }
  241. deleteProject(data).then(response => {
  242. if (response.success) {
  243. for (const v of vGlobal.vecProject) {
  244. if (v.id === project.id) {
  245. vGlobal.vecProject.splice(vGlobal.vecProject.indexOf(v), 1)
  246. break
  247. }
  248. }
  249. if (successFunc) successFunc()
  250. } else {
  251. if (failFunc) failFunc()
  252. }
  253. })
  254. }
  255. vGlobal.getAlarmType = function (type) {
  256. switch (type) {
  257. case 1:
  258. return '求救报警'
  259. case 2:
  260. return '紧急报警'
  261. case 3:
  262. return '心率过速'
  263. case 4:
  264. return '位置报警'
  265. case 5:
  266. return '跌落报警'
  267. case 6:
  268. return '基站离线'
  269. case 7:
  270. return '基站失电'
  271. case 8:
  272. return '标签低电'
  273. }
  274. return '无效报警'
  275. }
  276. vGlobal.getAlarm = function (alarmId) {
  277. for (const v of vGlobal.vecAlarm) {
  278. if (v.id === alarmId) {
  279. return v
  280. }
  281. }
  282. return null
  283. }
  284. vGlobal.getAlarmAllTypes = function () {
  285. return ['求救报警', '紧急报警', '心率过速', '位置报警', '跌落报警', '基站离线', '基站失电', '标签低电']
  286. }
  287. vGlobal.getAlarmVecBySet = function (alarmSet) {
  288. const vec = []
  289. Math.floor(Math.floor(Number(alarmSet))) & (0x1 << 0) ? vec.push(1) : null // 求救报警
  290. Math.floor(Math.floor(Number(alarmSet))) & (0x1 << 1) ? vec.push(2) : null // 紧急报警
  291. Math.floor(Math.floor(Number(alarmSet))) & (0x1 << 2) ? vec.push(3) : null // 心率过速
  292. Math.floor(Math.floor(Number(alarmSet))) & (0x1 << 3) ? vec.push(5) : null // 位置报警
  293. Math.floor(Math.floor(Number(alarmSet))) & (0x1 << 4) ? vec.push(4) : null // 跌落报警
  294. Math.floor(Math.floor(Number(alarmSet))) & (0x1 << 5) ? vec.push(8) : null // 标签低电
  295. return vec
  296. }
  297. vGlobal.getAnchor = function (addr) {
  298. return vGlobal.gAnchors[addr]
  299. }
  300. vGlobal.getBatStr = function (battery) {
  301. if (Number(battery) < 0) {
  302. return 'INF'
  303. }
  304. let vL = Math.round(Number(battery) * 20)
  305. vL = vL > 100 ? 100 : (vL < 0 ? 0 : vL)
  306. return vL + '%'
  307. }
  308. vGlobal.getProject = function (projId) {
  309. for (const v of vGlobal.vecProject) {
  310. if (v.id === Number(projId)) {
  311. return v
  312. }
  313. }
  314. return null
  315. }
  316. vGlobal.getProjName = function (projId) {
  317. for (const p of vGlobal.vecProject) {
  318. if (Number(p.id) == Number(projId)) {
  319. return p.name;
  320. }
  321. }
  322. return ''
  323. }
  324. vGlobal.getLocName = function (projId, locId) {
  325. for (const p of vGlobal.vecProject) {
  326. if (Number(p.id) == Number(projId)) {
  327. for (const loc of p.locations) {
  328. if (Number(loc.id) == Number(locId)) {
  329. return loc.name;
  330. }
  331. }
  332. }
  333. }
  334. return ''
  335. }
  336. /**
  337. * 获取标定
  338. * @param signId
  339. * @returns {Sign}
  340. */
  341. vGlobal.getSign = function (signId) {
  342. for (const v of vGlobal.vecSign) {
  343. if (v.id === signId) {
  344. return v
  345. }
  346. }
  347. return null
  348. }
  349. /**
  350. *
  351. * @param tagAddr
  352. * @returns {Tag}
  353. */
  354. vGlobal.getTag = function (tagAddr) {
  355. return vGlobal.gTags[tagAddr]
  356. }
  357. vGlobal.getTask = function (taskId) {
  358. for (const v of vGlobal.vecTask) {
  359. if (v.id === taskId) {
  360. return v
  361. }
  362. }
  363. return null
  364. }
  365. vGlobal.applySysCfg = function (noSchedule) {
  366. if (document.getElementsByTagName('title')) {
  367. document.getElementsByTagName('title')[0].innerText = vGlobal.sysCfg.sysCfgView.webTitle
  368. }
  369. // if (app.$store.getters && app.$store.getters.navbar) {
  370. // app.$store.getters.navbar.refreshLogo()
  371. // }
  372. clearInterval(vGlobal._scheduleId)
  373. vGlobal._scheduleId = 0
  374. vGlobal.SCHEDULE_INTERVAL = vGlobal.sysCfg.sysCfgView.scheduleInterval
  375. if (!noSchedule) {
  376. vGlobal._scheduleId = setInterval(vGlobal.schedule, vGlobal.SCHEDULE_INTERVAL)
  377. }
  378. }
  379. vGlobal.isAllow = function (arr) {
  380. const arrRole = JSON.parse(getRoles())
  381. for (const v of arr) {
  382. for (const role of arrRole) {
  383. if (v === role) {
  384. return true
  385. }
  386. }
  387. }
  388. return false
  389. }
  390. vGlobal.genScheduleKey = function (vue) {
  391. return vue.$options.name
  392. }
  393. vGlobal.refreshAnchors = function (successFunc, logFunc) {
  394. vGlobal._isRefreshAnchors = false
  395. vGlobal.gAnchors = {}
  396. vGlobal.vecAnchor.splice(0, vGlobal.vecAnchor.length)
  397. fetchAnchors({}).then(response => {
  398. if (response.success) {
  399. for (let j = 0; j < response.items.length; j++) {
  400. const anchor = new Anchor(response.items[j])
  401. vGlobal.vecAnchor.push(anchor)
  402. vGlobal.gAnchors[anchor.addr] = anchor
  403. }
  404. vGlobal.vecAnchor.sort((v1, v2) => { return v1.addr - v2.addr })
  405. vGlobal._isRefreshAnchors = true
  406. if (logFunc) {
  407. logFunc(0, 'refresh anchors success')
  408. }
  409. if (successFunc) {
  410. successFunc(logFunc)
  411. }
  412. } else {
  413. if (logFunc) {
  414. logFunc(2, 'refresh anchors error: ' + response.error)
  415. }
  416. }
  417. })
  418. }
  419. vGlobal.refreshProjects = function (successFunc, logFunc) {
  420. vGlobal._isRefreshProjects = false
  421. vGlobal.vecProject.splice(0, vGlobal.vecProject.length)
  422. fetchProjects({}).then(response => {
  423. if (response.success) {
  424. vGlobal.vecProject.splice(0, vGlobal.vecProject.length);
  425. for (let j = 0; j < response.items.length; j++) {
  426. const project = new Project(response.items[j])
  427. vGlobal.vecProject.push(project)
  428. }
  429. vGlobal.vecProject.sort((v1, v2) => { return v2.id - v1.id })
  430. vGlobal._isRefreshProjects = true
  431. if (logFunc) {
  432. logFunc(0, 'refresh projects success')
  433. }
  434. if (successFunc) {
  435. successFunc(logFunc)
  436. }
  437. } else {
  438. if (logFunc) {
  439. logFunc(2, 'refresh projects error: ' + response.error)
  440. }
  441. }
  442. })
  443. }
  444. vGlobal.refreshSigns = function (successFunc, logFunc) {
  445. vGlobal._isRefreshSigns = false
  446. vGlobal.vecSign.splice(0, vGlobal.vecSign.length)
  447. fetchSigns({}).then(response => {
  448. if (response.success) {
  449. for (let j = 0; j < response.items.length; j++) {
  450. const sign = new Sign(response.items[j])
  451. vGlobal.vecSign.push(sign)
  452. }
  453. vGlobal.vecSign.sort((v1, v2) => { return v1.id - v2.id })
  454. vGlobal._isRefreshSigns = true
  455. if (logFunc) {
  456. logFunc(0, 'refresh signs success')
  457. }
  458. if (successFunc) {
  459. successFunc(logFunc)
  460. }
  461. } else {
  462. if (logFunc) {
  463. logFunc(2, 'refresh signs error: ' + response.error)
  464. }
  465. }
  466. })
  467. }
  468. vGlobal.refreshTags = function (successFunc, logFunc) {
  469. vGlobal._isRefreshTags = false
  470. vGlobal.gTags = {}
  471. vGlobal.vecTag.splice(0, vGlobal.vecTag.length)
  472. fetchTags({}).then(response => {
  473. if (response.success) {
  474. for (let j = 0; j < response.items.length; j++) {
  475. const tag = new Tag(response.items[j])
  476. vGlobal.vecTag.push(tag)
  477. vGlobal.gTags[tag.addr] = tag
  478. }
  479. vGlobal.vecTag.sort((v1, v2) => { return v1.addr - v2.addr })
  480. vGlobal._isRefreshTags = true
  481. if (logFunc) {
  482. logFunc(0, 'refresh tags success')
  483. }
  484. if (successFunc) {
  485. successFunc(logFunc)
  486. }
  487. } else {
  488. if (logFunc) {
  489. logFunc(2, 'refresh tags error: ' + response.error)
  490. }
  491. }
  492. })
  493. }
  494. vGlobal.refreshSysCfg = function (successFunc, logFunc) {
  495. vGlobal._isRefreshTags = false
  496. fetchSysCfg({}).then(response => {
  497. if (response.success) {
  498. vGlobal.sysCfg.init(response.dict);
  499. vGlobal.applySysCfg();
  500. if (logFunc) {
  501. logFunc(0, 'refresh sysCfg success')
  502. }
  503. if (successFunc) {
  504. successFunc(logFunc)
  505. }
  506. } else {
  507. if (logFunc) {
  508. logFunc(2, 'refresh sysCfg error: ' + response.error)
  509. }
  510. }
  511. })
  512. }
  513. vGlobal.refreshTasks = function (successFunc, logFunc) {
  514. fetchRTTasks({}).then(response => {
  515. if (response.success) {
  516. let isModify = false
  517. const vec = []
  518. for (let i = 0; i < response.items.length; i++) {
  519. const item = new Task(response.items[i])
  520. const task = vGlobal.getTask(item.id)
  521. if (!task) {
  522. isModify = true
  523. vGlobal.vecTask.push(item)
  524. } else {
  525. if (!task.cmpSame(item)) {
  526. task.init(item)
  527. }
  528. }
  529. vec.push(item.id)
  530. }
  531. for (let i = vGlobal.vecTask.length - 1; i >= 0; i--) {
  532. const v = vGlobal.vecTask[i]
  533. if (vec.indexOf(v.id) < 0) {
  534. isModify = true
  535. vGlobal.vecTask.splice(i, 1)
  536. }
  537. }
  538. if (isModify) {
  539. console.log('task modify')
  540. vGlobal.vecTask.sort((v1, v2) => {
  541. return v1.id - v2.id
  542. })
  543. }
  544. if (successFunc) {
  545. successFunc(logFunc)
  546. }
  547. }
  548. })
  549. }
  550. vGlobal.schedule = function () {
  551. vGlobal.scheduleRtTagPos()
  552. vGlobal.scheduleRtAncStatus()
  553. }
  554. vGlobal.scheduleRtTagPos = function () {
  555. // fetch rt tag pos
  556. fetchRTTagPos({}).then(response => {
  557. const posList = response.dict
  558. const newTime = new Date().getTime()
  559. for (const k in posList) {
  560. const addr = Number(k)
  561. const tag = vGlobal.gTags[addr]
  562. if (!tag) continue
  563. tag.areaAddr = Number(posList[addr].areaAddr)
  564. tag.status = Number(posList[addr].status)
  565. tag.heart = Number(posList[addr].heart)
  566. tag.battery = Number(posList[addr].battery)
  567. const x = Math.floor(Number(posList[addr].x) * 100) / 100
  568. const y = Math.floor(Number(posList[addr].y) * 100) / 100
  569. const z = Math.floor(Number(posList[addr].z) * 100) / 100
  570. const dx = x - tag.x
  571. const dy = y - tag.y
  572. const dz = z - tag.z
  573. const online = Number(posList[addr].online)
  574. tag.online = online
  575. tag.x = x
  576. tag.y = y
  577. tag.z = z
  578. tag.lastTime = newTime
  579. tag.setAlarmSet(Number(posList[addr].alarmSet))
  580. if (tag.online) {
  581. } else {
  582. }
  583. }
  584. })
  585. }
  586. vGlobal.scheduleRtAncStatus = function () {
  587. //fetch rt anchor status
  588. fetchRTAncStatus({}).then(response => {
  589. if (response.success) {
  590. for (let i = 0; i < response.items.length; i++) {
  591. const item = response.items[i]
  592. const anchor = vGlobal.gAnchors[Number(item.addr) || Number(item.id)]
  593. if (!anchor) continue
  594. anchor.status = Number(item.status)
  595. anchor.battery = Number(item.battery)
  596. anchor.online = Number(item.online)
  597. anchor.x = Number(item.x)
  598. anchor.y = Number(item.y)
  599. anchor.z = Number(item.z)
  600. anchor.lastUpdateTime = Number(item.lastUpdateTime)
  601. }
  602. }
  603. })
  604. }
  605. vGlobal.scheduleRtAlarm = function () {
  606. fetchRTAlarms({}).then(response => {
  607. if (response.success) {
  608. let isModify = false
  609. const vec = []
  610. for (let i = 0; i < response.items.length; i++) {
  611. const item = new Alarm(response.items[i])
  612. const alarm = vGlobal.getAlarm(item.id)
  613. if (!alarm) {
  614. isModify = true
  615. vGlobal.vecAlarm.push(item)
  616. } else {
  617. if (alarm.confirmTime !== Number(item.confirmTime) ||
  618. alarm.endTime !== Number(item.endTime)) {
  619. alarm.init(item)
  620. isModify = true
  621. }
  622. }
  623. vec.push(item.id)
  624. }
  625. for (let i = vGlobal.vecAlarm.length - 1; i >= 0; i--) {
  626. const v = vGlobal.vecAlarm[i]
  627. if (vec.indexOf(v.id) < 0) {
  628. isModify = true
  629. vGlobal.vecAlarm.splice(i, 1)
  630. }
  631. }
  632. if (isModify) {
  633. vGlobal.vecAlarm.sort((v1, v2) => {
  634. return v1.type - v2.type
  635. })
  636. }
  637. }
  638. })
  639. }
  640. /**
  641. * @function Update updateAnchors
  642. * @param {Array}[list=null]
  643. * @param {function}[successFunc=null]
  644. * @param {function}[failedFunc=null]
  645. */
  646. vGlobal.updateAnchors = function (list, successFunc, failedFunc) {
  647. const vec = []
  648. for (const v of list) {
  649. vec.push(v.toJson())
  650. }
  651. batchModifyAnchors({
  652. anchors: vec
  653. }).then((response) => {
  654. if (response.success) {
  655. if (successFunc) {
  656. successFunc(list)
  657. }
  658. } else {
  659. if (failedFunc) {
  660. failedFunc(list)
  661. }
  662. }
  663. })
  664. }
  665. /**
  666. * @function Update updateSigns
  667. * @param {Array}[list=null]
  668. * @param {Boolean}[forceUpdate=false]
  669. * @param {function}[successFunc=null]
  670. * @param {function}[failedFunc=null]
  671. */
  672. vGlobal.updateSigns = function (list, forceUpdate, successFunc, failedFunc) {
  673. let signs = []
  674. if (list) {
  675. for (const id of list) {
  676. signs.push(vGlobal.getSign(id))
  677. }
  678. } else {
  679. signs = vGlobal.vecSign
  680. }
  681. if (!signs) return
  682. const vec = []
  683. for (const v of signs) {
  684. vec.push(v.toJson())
  685. }
  686. batchModifySigns({
  687. signs: vec
  688. }).then((response) => {
  689. if (response.success) {
  690. if (successFunc) {
  691. successFunc(signs)
  692. }
  693. } else {
  694. if (failedFunc) {
  695. failedFunc(signs)
  696. }
  697. }
  698. })
  699. }
  700. /**
  701. * @function Update updateTags
  702. * @param {Array}[list=null]
  703. * @param {function}[successFunc=null]
  704. * @param {function}[failedFunc=null]
  705. */
  706. vGlobal.updateTags = function (list, successFunc, failedFunc) {
  707. console.log('enter');
  708. const vec = []
  709. for (const v of list) {
  710. vec.push(v.toJson())
  711. }
  712. console.log('updateTags', vec);
  713. batchModifyTags({
  714. tags: vec
  715. }).then((response) => {
  716. if (response.success) {
  717. if (successFunc) {
  718. successFunc(list)
  719. }
  720. } else {
  721. if (failedFunc) {
  722. failedFunc(list)
  723. }
  724. }
  725. })
  726. }
  727. vGlobal.updateProject = function (project, successFunc, failedFunc) {
  728. modifyProject({
  729. project: project.toJson()
  730. }).then((response) => {
  731. if (response.success) {
  732. if (successFunc) {
  733. successFunc(project)
  734. }
  735. } else {
  736. if (failedFunc) {
  737. failedFunc(project)
  738. }
  739. }
  740. })
  741. }
  742. export default vGlobal