Commit 08144f4331477d08a2d814bef7f17f313e21032d

Authored by ww
1 parent a9a23dd3

feat: implement set variable image

... ... @@ -126,4 +126,12 @@ class ConfigurationNodeApi {
126 126 return defHttp.get(`/plugins/telemetry/DEVICE/${deviceId}/values/attributes?keys=active`)
127 127 }
128 128
  129 + /**
  130 + * @description 上传图片
  131 + * @param data
  132 + * @returns {*}
  133 + */
  134 + static uploadImg(data){
  135 + return defHttp.post('/yt/oss/upload', data)
  136 + }
129 137 }
... ...
... ... @@ -12,24 +12,24 @@
12 12 * copy the output of searchFileData from the browser console to the variable below.
13 13 */
14 14 Sidebar.prototype.searchIndexData = '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';
15   -
  15 +
16 16 /**
17 17 * Overrides gear image URL.
18 18 */
19 19 Sidebar.prototype.gearImage = GRAPH_IMAGE_PATH + '/clipart/Gear_128x128.png';
20   -
  20 +
21 21 /**
22 22 * Aliases for IDs in the libs parameter.
23 23 */
24 24 Sidebar.prototype.libAliases = {'aws2': 'aws3', 'gcp' : 'gcp2'};
25   -
  25 +
26 26 /**
27   - *
  27 + *
28 28 */
29 29 Sidebar.prototype.defaultEntries = 'component;fan;engine;valve;controller;light;button;conduit;instrument;sewage';
30   -
  30 +
31 31 /**
32   - * Library definitions
  32 + * Library definitions
33 33 */
34 34 Sidebar.prototype.signs = ['Animals', 'Food', 'Healthcare', 'Nature', 'People', 'Safety', 'Science', 'Sports', 'Tech', 'Transportation', 'Travel'];
35 35
... ... @@ -38,45 +38,45 @@
38 38 Sidebar.prototype.allied_telesis = ['Buildings', 'Computer and Terminals', 'Media Converters', 'Security', 'Storage', 'Switch', 'Wireless'];
39 39
40 40 Sidebar.prototype.gcp = ['Cards', 'Big Data', 'Compute', 'Developer Tools', 'Extras', 'Identity and Security', 'Machine Learning', 'Management Tools', 'Networking', 'Storage Databases'];
41   -
  41 +
42 42 Sidebar.prototype.gcp2 = ['Paths', 'Zones', 'Service Cards', 'Compute', 'API Management', 'Security', 'Data Analytics', 'Data Transfer', 'Cloud AI', 'Internet of Things', 'Databases', 'Storage', 'Management Tools', 'Networking', 'Developer Tools', 'Expanded Product Cards', 'User Device Cards', 'Product Cards', 'General Icons', 'Icons AI Machine Learning', 'Icons Compute', 'Icons Data Analytics', 'Icons Management Tools', 'Icons Networking', 'Icons Developer Tools', 'Icons API Management', 'Icons Internet of Things', 'Icons Databases', 'Icons Storage', 'Icons Security', 'Icons Migration', 'Icons Hybrid and Multi Cloud'];
43   -
  43 +
44 44 Sidebar.prototype.gcpicons = ['AI and Machine Learning', 'API Management', 'Compute', 'Data Analytics', 'Databases', 'Developer Tools', 'Expanded Product Card Icons', 'Generic', 'Hybrid and Multi Cloud', 'Security', 'Internet of Things', 'Management Tools', 'Migration', 'Networking', 'Open Source Icons', 'Storage'];
45   -
  45 +
46 46 Sidebar.prototype.rack = ['General', 'APC', 'Cisco', 'Dell', 'F5', 'HP', 'HPE Aruba Gateways Controllers', 'HPE Aruba Security', 'HPE Aruba Switches', 'IBM', 'Oracle'];
47   -
48   - Sidebar.prototype.pids = ['Agitators', 'Apparatus Elements', 'Centrifuges', 'Compressors', 'Compressors ISO', 'Crushers Grinding',
  47 +
  48 + Sidebar.prototype.pids = ['Agitators', 'Apparatus Elements', 'Centrifuges', 'Compressors', 'Compressors ISO', 'Crushers Grinding',
49 49 'Driers', 'Engines', 'Feeders', 'Filters', 'Fittings', 'Flow Sensors', 'Heat Exchangers', 'Instruments', 'Misc',
50 50 'Mixers', 'Piping', 'Pumps', 'Pumps DIN', 'Pumps ISO', 'Separators', 'Shaping Machines', 'Valves', 'Vessels'];
51 51
52 52 Sidebar.prototype.cisco = ['Buildings', 'Computers and Peripherals', 'Controllers and Modules', 'Directors', 'Hubs and Gateways', 'Misc',
53 53 'Modems and Phones', 'People', 'Routers', 'Security', 'Servers', 'Storage', 'Switches', 'Wireless'];
54   -
  54 +
55 55 Sidebar.prototype.cisco19 = ['LAN Switching', 'Routing WAN', 'Network Management', 'Data Center', 'Wireless LAN', 'Collaboration', 'Security Clouds Connectors', 'Endpoint Client Device Icons', 'DNA SD Access', 'SD WAN Viptela', 'ETA Stealthwatch', 'SAFE'];
56 56
57 57 Sidebar.prototype.cisco_safe = ['Architecture', 'Business Icons', 'Capability', 'Design', 'IoT Things Icons', 'People Places Things Icons', 'Security Icons', 'Technology Icons', 'Threat'];
58   -
59   - Sidebar.prototype.sysml = ['Model Elements', 'Blocks', 'Ports and Flows', 'Constraint Blocks', 'Activities', 'Interactions', 'State Machines',
  58 +
  59 + Sidebar.prototype.sysml = ['Model Elements', 'Blocks', 'Ports and Flows', 'Constraint Blocks', 'Activities', 'Interactions', 'State Machines',
60 60 'Use Cases', 'Allocations', 'Requirements', 'Profiles', 'Stereotypes'];
61 61
62   - Sidebar.prototype.eip = ['Message Construction', 'Message Routing', 'Message Transformation', 'Messaging Channels', 'Messaging Endpoints',
  62 + Sidebar.prototype.eip = ['Message Construction', 'Message Routing', 'Message Transformation', 'Messaging Channels', 'Messaging Endpoints',
63 63 'Messaging Systems', 'System Management'];
64 64
65   - Sidebar.prototype.gmdl = ['Bottom Navigation', 'Bottom Sheets', 'Buttons', 'Cards', 'Chips', 'Dialogs', 'Dividers', 'Grid Lists', 'Icons', 'Lists', 'Menus', 'Misc', 'Pickers',
  65 + Sidebar.prototype.gmdl = ['Bottom Navigation', 'Bottom Sheets', 'Buttons', 'Cards', 'Chips', 'Dialogs', 'Dividers', 'Grid Lists', 'Icons', 'Lists', 'Menus', 'Misc', 'Pickers',
66 66 'Selection Controls', 'Sliders', 'Steppers', 'Tabs', 'Text Fields'];
67 67
68   - Sidebar.prototype.aws2 = ['Analytics', 'Application Services', 'Compute', 'Database', 'Developer Tools', 'Enterprise Applications', 'Game Development', 'General', 'Internet of Things',
  68 + Sidebar.prototype.aws2 = ['Analytics', 'Application Services', 'Compute', 'Database', 'Developer Tools', 'Enterprise Applications', 'Game Development', 'General', 'Internet of Things',
69 69 'Management Tools', 'Mobile Services', 'Networking', 'On-Demand Workforce', 'SDKs', 'Security and Identity', 'Storage and Content Delivery', 'Groups'];
70 70
71   - Sidebar.prototype.aws3 = ['Analytics', 'Application Services', 'Artificial Intelligence', 'Business Productivity', 'Compute', 'Contact Center', 'Database', 'Desktop and App Streaming', 'Developer Tools',
72   - 'Game Development', 'General', 'Groups', 'Internet of Things',
  71 + Sidebar.prototype.aws3 = ['Analytics', 'Application Services', 'Artificial Intelligence', 'Business Productivity', 'Compute', 'Contact Center', 'Database', 'Desktop and App Streaming', 'Developer Tools',
  72 + 'Game Development', 'General', 'Groups', 'Internet of Things',
73 73 'Management Tools', 'Messaging', 'Migration', 'Mobile Services', 'Networking and Content Delivery', 'On Demand Workforce', 'SDKs', 'Security Identity and Compliance', 'Storage'];
74   -
  74 +
75 75 Sidebar.prototype.aws4b = ['Arrows', 'General Resources', 'Illustrations', 'Groups Light', 'Groups Dark', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Business Productivity', 'Compute', 'Customer Engagement',
76 76 'Database', 'Desktop App Streaming', 'Developer Tools', 'Game Development', 'Internet of Things', 'IoT Things', 'IoT Resources', 'Machine Learning', 'Management Tools',
77 77 'Media Services', 'Migration', 'Mobile Services', 'Network Content Delivery', 'Security Identity Compliance', 'Storage'];
78   -
79   - Sidebar.prototype.aws4 = ['Arrows', 'General Resources', 'Illustrations', 'Groups', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Blockchain',
  78 +
  79 + Sidebar.prototype.aws4 = ['Arrows', 'General Resources', 'Illustrations', 'Groups', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Blockchain',
80 80 'Business Applications', 'Compute', 'Containers', 'Customer Enablement', 'Customer Engagement',
81 81 'Database', 'Developer Tools', 'End User Computing', 'Front End Web Mobile', 'Game Tech', 'Internet of Things', 'IoT Things', 'IoT Resources', 'Machine Learning', 'Management Governance',
82 82 'Media Services', 'Migration Transfer', 'Network Content Delivery', 'Quantum Technologies', 'Robotics', 'Satellite', 'Serverless', 'Security Identity Compliance', 'Storage'];
... ... @@ -94,7 +94,7 @@
94 94 * Description of custom libraries, see https://www.diagrams.net/doc/faq/configure-diagram-editor
95 95 */
96 96 Sidebar.prototype.customEntries = null;
97   -
  97 +
98 98 /**
99 99 * Array of strings for the built-in libraries to be enabled in the more shapes dialog. Null means all,
100 100 * empty array means none, possible keys are listed for the libs parameter at
... ... @@ -105,13 +105,61 @@
105 105 * https://www.diagrams.net/doc/faq/supported-url-parameters
106 106 */
107 107 Sidebar.prototype.enabledLibraries = null;
108   -
  108 +
109 109 /**
110 110 * Maximum number of custom libraries to preload into the search index.
111 111 */
112 112 Sidebar.prototype.maxPreloadCount = 20;
113 113
114 114 /**
  115 + * @description TODO thingsKit 在Sidebar 原型中新增图库信息
  116 + * @type {Map<any, any>}
  117 + */
  118 + Sidebar.prototype.variableImageLib = new Map()
  119 +
  120 + /**
  121 + * @description TODO thingsKit 设置图库信息
  122 + * @param key
  123 + * @param label
  124 + * @param lib
  125 + */
  126 + Sidebar.prototype.setVariableImageLib = function (key, label, lib) {
  127 + this.variableImageLib.set(key, { label, key, lib })
  128 + }
  129 +
  130 + /**
  131 + * @description TODO thingsKit 通过key获取图库中某个类别
  132 + * @param key
  133 + * @returns {{}|*}
  134 + */
  135 + Sidebar.prototype.getVariableImageLib = function (key) {
  136 + return this.variableImageLib.get(key)
  137 + }
  138 +
  139 + /**
  140 + * @description TODO thingsKit 取所有图库信息
  141 + * @returns {*[]}
  142 + */
  143 + Sidebar.prototype.getAllVariableImageLib = function () {
  144 + const arr = []
  145 + for (const value of this.variableImageLib.values()) {
  146 + arr.push(value)
  147 + }
  148 + return arr
  149 + }
  150 +
  151 + /**
  152 + * @description TODO thingsKit 设置cell attributes
  153 + */
  154 + Sidebar.prototype.setCellAttributes = function (cell, attribute) {
  155 + if (Object.prototype.toString.call(attribute) === '[object Object]') {
  156 + Object.keys(attribute).forEach(key => {
  157 + this.graph.setAttributeForCell(cell, key, attribute[key])
  158 + })
  159 + }
  160 + }
  161 +
  162 + /**
115 163 * 各图形库里面要加载的图形
116 164 */
117 165 Sidebar.prototype.configuration = [{id: 'general', libs: ['general', 'misc', 'advanced']},
... ... @@ -161,7 +209,7 @@
161 209 {id: 'archimate', libs: ['archimate']},
162 210 {id: 'webicons', libs: ['webicons', 'weblogos']},
163 211 {id: 'sysml', prefix: 'sysml', libs: Sidebar.prototype.sysml}];
164   -
  212 +
165 213 /**
166 214 * Removes disabled libraries from search results.
167 215 */
... ... @@ -177,7 +225,7 @@
177 225 else
178 226 {
179 227 return sidebarAddEntry.apply(this, arguments);
180   - }
  228 + }
181 229 };
182 230
183 231 /**
... ... @@ -201,13 +249,13 @@
201 249 * Adds hint for quick tutorial video for certain search terms.
202 250 */
203 251 var siderbarInsertSearchHint = Sidebar.prototype.insertSearchHint;
204   -
  252 +
205 253 Sidebar.prototype.insertSearchHint = function(div, searchTerm, count, page, results, len, more, terms)
206 254 {
207 255 if (terms != null && page == 1)
208 256 {
209 257 var hintText = null;
210   -
  258 +
211 259 // Adds hint for text inserts
212 260 if (mxUtils.indexOf(terms, 'text') >= 0)
213 261 {
... ... @@ -219,7 +267,7 @@
219 267 var words = ['line', 'lines', 'arrow', 'arrows', 'connect', 'connection', 'connections',
220 268 'connector', 'connectors', 'curve', 'curves', 'link', 'links', 'directed',
221 269 'directional', 'bidirectional'];
222   -
  270 +
223 271 for (var i = 0; i < words.length; i++)
224 272 {
225 273 if (mxUtils.indexOf(terms, words[i]) >= 0)
... ... @@ -229,7 +277,7 @@
229 277 }
230 278 }
231 279 }
232   -
  280 +
233 281 if (hintText != null && !this.hideSearchHint)
234 282 {
235 283 var link = document.createElement('a');
... ... @@ -240,7 +288,7 @@
240 288 'border:1px solid black !important;text-align:center;white-space:normal;' +
241 289 'padding:6px 0px 6px 0px !important;margin:4px 4px 8px 2px;font-size:12px;';
242 290 mxUtils.write(link, hintText);
243   -
  291 +
244 292 // Adds close button
245 293 var img = document.createElement('img');
246 294 img.setAttribute('src', Dialog.prototype.closeImage);
... ... @@ -250,22 +298,22 @@
250 298 img.style.cursor = 'default';
251 299 img.style.top = '1px';
252 300 img.style.right = '0px';
253   -
  301 +
254 302 mxEvent.addListener(img, 'click', mxUtils.bind(this, function(evt)
255 303 {
256 304 link.parentNode.removeChild(link);
257 305 this.hideSearchHint = true;
258 306 mxEvent.consume(evt);
259 307 }));
260   -
  308 +
261 309 link.appendChild(img);
262 310 div.appendChild(link);
263   -
  311 +
264 312 // Shows hint only once
265 313 this.hideSearchHint = true;
266 314 }
267 315 }
268   -
  316 +
269 317 siderbarInsertSearchHint.apply(this, arguments);
270 318 };
271 319
... ... @@ -284,7 +332,7 @@
284 332 {
285 333 this.showPalette(id);
286 334 };
287   -
  335 +
288 336 /**
289 337 * Shows or hides palettes.
290 338 */
... ... @@ -302,22 +350,22 @@
302 350 Sidebar.prototype.showPalette = function(id, visible)
303 351 {
304 352 var elts = this.palettes[id];
305   -
  353 +
306 354 if (elts != null)
307 355 {
308 356 var vis = (visible != null) ? ((visible) ? 'block' : 'none') : (elts[0].style.display == 'none') ? 'block' : 'none';
309   -
  357 +
310 358 for (var i = 0; i < elts.length; i++)
311 359 {
312 360 elts[i].style.display = vis;
313 361 }
314 362 }
315   -
  363 +
316 364 return elts;
317 365 };
318   -
  366 +
319 367 /**
320   - *
  368 + *
321 369 */
322 370 Sidebar.prototype.getConfigurationById = function(id)
323 371 {
... ... @@ -328,17 +376,17 @@
328 376 return this.configuration[i];
329 377 }
330 378 }
331   -
  379 +
332 380 if (this.customEntries != null)
333 381 {
334 382 for (var i = 0; i < this.customEntries.length; i++)
335 383 {
336 384 var section = this.customEntries[i];
337   -
  385 +
338 386 for (var j = 0; j < section.entries.length; j++)
339 387 {
340 388 var entry = section.entries[j];
341   -
  389 +
342 390 if (entry.id == id)
343 391 {
344 392 return {id: entry.id, libs: entry.libs};
... ... @@ -346,12 +394,12 @@
346 394 }
347 395 }
348 396 }
349   -
  397 +
350 398 return null;
351 399 };
352   -
  400 +
353 401 /**
354   - *
  402 + *
355 403 */
356 404 Sidebar.prototype.isEntryVisible = function(key)
357 405 {
... ... @@ -362,7 +410,7 @@
362 410 else
363 411 {
364 412 var config = this.getConfigurationById(key);
365   -
  413 +
366 414 if (config != null)
367 415 {
368 416 var id = (config.libs != null) ? ((config.prefix || '') + config.libs[0]) : key;
... ... @@ -373,92 +421,92 @@
373 421 return elts[0].style.display != 'none';
374 422 }
375 423 }
376   -
  424 +
377 425 if (this.customEntries != null)
378 426 {
379 427 for (var i = 0; i < this.customEntries.length; i++)
380 428 {
381 429 var section = this.customEntries[i];
382   -
  430 +
383 431 for (var j = 0; j < section.entries.length; j++)
384 432 {
385 433 var entry = section.entries[j];
386   -
  434 +
387 435 if (entry.id == key)
388 436 {
389 437 if (entry.libs != null && entry.libs.length > 0)
390 438 {
391 439 var elts = this.palettes[entry.id + '.0'];
392   -
  440 +
393 441 if (elts != null)
394 442 {
395 443 return elts[0].style.display != 'none';
396 444 }
397 445 }
398   -
  446 +
399 447 break;
400 448 }
401 449 }
402 450 }
403 451 }
404   -
  452 +
405 453 return false;
406 454 }
407 455 };
408 456
409 457 /**
410   - *
  458 + *
411 459 */
412 460 Sidebar.prototype.showEntries = function(entries, remember, force)
413 461 {
414 462 var all = [];
415   -
  463 +
416 464 if (remember)
417 465 {
418 466 mxSettings.setLibraries(entries);
419 467 mxSettings.save();
420 468 }
421   -
  469 +
422 470 if (entries != null && (force || entries.length > 0))
423 471 {
424 472 all.push(entries);
425 473 }
426   - else
  474 + else
427 475 {
428 476 var done = false;
429   -
430   - if (urlParams['libs'] != null && urlParams['libs'].length > 0)
  477 +
  478 + if (urlParams['libs'] != null && urlParams['libs'].length > 0)
431 479 {
432 480 all.push(decodeURIComponent(urlParams['libs']));
433 481 done = this.editorUi.getServiceName() == 'draw.io';
434 482 }
435   -
  483 +
436 484 // Libs parameter overrides configuration for online app so that
437 485 // links can be created to show just the specifies libraries
438 486 if (!done)
439 487 {
440   - if (mxSettings != null && mxSettings.settings != null)
  488 + if (mxSettings != null && mxSettings.settings != null)
441 489 {
442 490 all.push(mxSettings.getLibraries());
443 491 }
444   - else
  492 + else
445 493 {
446 494 all.push(this.defaultEntries);
447 495 }
448 496 }
449 497 }
450   -
  498 +
451 499 // Merges array of semicolon separated strings into a single array
452 500 var temp = all.join(';').split(';');
453 501
454 502 // Resolves aliases and creates lookup
455 503 var visible = {};
456   -
  504 +
457 505 for (var i = 0; i < temp.length; i++)
458 506 {
459   - visible[this.libAliases[temp[i]] || temp[i]] = true;
  507 + visible[this.libAliases[temp[i]] || temp[i]] = true;
460 508 }
461   -
  509 +
462 510 for (var i = 0; i < this.configuration.length; i++)
463 511 {
464 512 // Search has separate switch in Extras menu
... ... @@ -470,26 +518,26 @@
470 518
471 519 }
472 520 }
473   -
  521 +
474 522 if (this.customEntries != null)
475 523 {
476 524 for (var i = 0; i < this.customEntries.length; i++)
477 525 {
478 526 var section = this.customEntries[i];
479   -
  527 +
480 528 for (var j = 0; j < section.entries.length; j++)
481 529 {
482 530 var entry = section.entries[j];
483   -
  531 +
484 532 if (entry.libs != null && entry.libs.length > 0)
485 533 {
486 534 var libs = [];
487   -
  535 +
488 536 for (var k = 0; k < entry.libs.length; k++)
489 537 {
490 538 libs.push(entry.id + '.' + k);
491 539 }
492   -
  540 +
493 541 this.showPalettes('', libs, visible[entry.id]);
494 542 }
495 543 }
... ... @@ -592,7 +640,7 @@
592 640
593 641 // Uses search.xml index file instead (faster load times)
594 642 this.addStencilsToIndex = false;
595   -
  643 +
596 644 // Contains additional tags for shapes
597 645 this.shapetags = {};
598 646
... ... @@ -600,12 +648,12 @@
600 648 if (this.tagIndex != null)
601 649 {
602 650 this.addTagIndex(Graph.decompress(this.tagIndex));
603   - this.tagIndex = null;
  651 + this.tagIndex = null;
604 652 }
605   -
  653 +
606 654 this.initPalettes();
607 655 }
608   -
  656 +
609 657 /**
610 658 * Overridden to add image export via servlet
611 659 */
... ... @@ -614,21 +662,21 @@
614 662 Sidebar.prototype.addFoldingHandler = function(title, content, funct)
615 663 {
616 664 var initialized = false;
617   -
  665 +
618 666 // Avoids mixed content warning in IE6-8
619 667 if (!mxClient.IS_IE || document.documentMode >= 8)
620 668 {
621 669 title.style.backgroundImage = (content.style.display == 'none') ?
622 670 'url(\'' + this.collapsedImage + '\')' : 'url(\'' + this.expandedImage + '\')';
623 671 }
624   -
  672 +
625 673 title.style.backgroundRepeat = 'no-repeat';
626 674 title.style.backgroundPosition = '0% 50%';
627   -
  675 +
628 676 var btn = document.createElement('button');
629 677 btn.style.marginLeft = '4px';
630 678 mxUtils.write(btn, 'Save');
631   -
  679 +
632 680 mxEvent.addListener(title, 'click', mxUtils.bind(this, function(evt)
633 681 {
634 682 if (mxEvent.getSource(evt).nodeName == 'BUTTON')
... ... @@ -642,58 +690,58 @@
642 690 title2.style.width = '456px';
643 691 title2.style.backgroundColor = '#ffffff';
644 692 title2.style.paddingLeft = '6px';
645   -
  693 +
646 694 var btn2 = title2.getElementsByTagName('button')[0];
647 695 btn2.parentNode.removeChild(btn2);
648   -
  696 +
649 697 var clone = content.cloneNode(true);
650 698 clone.style.backgroundColor = '#ffffff';
651 699 clone.style.borderColor = 'transparent';
652 700 clone.style.width = '456px';
653   -
  701 +
654 702 var parser = new DOMParser();
655 703 var doc = parser.parseFromString('<body style="background:#ffffff;font-family:Helvetica,Arial;">' +
656 704 title2.outerHTML + clone.outerHTML + '</body>', 'text/html');
657   -
  705 +
658 706 this.editorUi.editor.convertImages(doc.documentElement, mxUtils.bind(this, function(body)
659 707 {
660 708 var html = '<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" ' +
661 709 'href="https://www.draw.io/styles/grapheditor.css"></head>' +
662 710 mxUtils.getXml(body) + '</html>';
663   -
  711 +
664 712 clone.style.position = 'absolute';
665 713 window.document.body.appendChild(clone);
666 714 var h = clone.clientHeight + 18;
667 715 clone.parentNode.removeChild(clone);
668   -
  716 +
669 717 this.editorUi.confirm('Image data created', mxUtils.bind(this, function()
670 718 {
671 719 new mxXmlRequest(EXPORT_URL, 'w=456&h=' + h + '&html=' + encodeURIComponent(
672 720 Graph.compress(html))).simulate(document, '_blank');
673 721 }), null, mxResources.get('save'), mxResources.get('cancel'));
674 722 }));
675   -
  723 +
676 724 return;
677 725 }
678   -
  726 +
679 727 if (content.style.display == 'none')
680 728 {
681 729 if (!initialized)
682 730 {
683 731 initialized = true;
684   -
  732 +
685 733 if (funct != null)
686 734 {
687 735 if (btn.parentNode != null)
688 736 {
689 737 btn.parentNode.removeChild(btn);
690 738 }
691   -
  739 +
692 740 // Wait cursor does not show up on Mac
693 741 title.style.cursor = 'wait';
694 742 var prev = title.innerHTML;
695 743 title.innerHTML = mxResources.get('loading') + '...';
696   -
  744 +
697 745 window.setTimeout(function()
698 746 {
699 747 funct(content);
... ... @@ -711,7 +759,7 @@
711 759 {
712 760 title.appendChild(btn);
713 761 }
714   -
  762 +
715 763 title.style.backgroundImage = 'url(\'' + this.expandedImage + '\')';
716 764 content.style.display = 'block';
717 765 }
... ... @@ -719,18 +767,18 @@
719 767 {
720 768 title.style.backgroundImage = 'url(\'' + this.collapsedImage + '\')';
721 769 content.style.display = 'none';
722   -
  770 +
723 771 if (btn.parentNode != null)
724 772 {
725 773 btn.parentNode.removeChild(btn);
726 774 }
727 775 }
728   -
  776 +
729 777 mxEvent.consume(evt);
730 778 }));
731 779 };
732 780 };
733   -
  781 +
734 782 /**
735 783 * Overridden to use shapetags to improve search results.
736 784 */
... ... @@ -739,40 +787,40 @@
739 787 if (style != null && style.substring(0, 6) == 'shape=')
740 788 {
741 789 var semi = style.indexOf(';');
742   -
  790 +
743 791 if (semi < 0)
744 792 {
745 793 semi = style.length;
746 794 }
747   -
  795 +
748 796 return style.substring(6, semi);
749 797 }
750   -
  798 +
751 799 return null;
752 800 };
753   -
  801 +
754 802 /**
755 803 * Overridden to use shapetags to improve search results.
756 804 */
757 805 var sidebarGetTagsForStencil = Sidebar.prototype.getTagsForStencil;
758   -
  806 +
759 807 Sidebar.prototype.getTagsForStencil = function(pkg, stc, moreTags)
760 808 {
761 809 var tags = sidebarGetTagsForStencil.apply(this, arguments);
762   -
  810 +
763 811 // Adds tags from tags file
764 812 if (this.shapetags != null)
765 813 {
766 814 pkg = pkg.toLowerCase();
767 815 stc = stc.toLowerCase();
768   -
  816 +
769 817 if (this.shapetags[pkg] != null)
770 818 {
771 819 tags.push(this.shapetags[pkg]);
772 820 }
773   -
  821 +
774 822 stc = pkg + '.' + stc;
775   -
  823 +
776 824 if (this.shapetags[stc] != null)
777 825 {
778 826 tags.push(this.shapetags[stc]);
... ... @@ -781,25 +829,25 @@
781 829
782 830 return tags;
783 831 };
784   -
  832 +
785 833 /**
786 834 * Overrides the sidebar init.
787 835 */
788 836 Sidebar.prototype.addTagIndex = function(text)
789 837 {
790 838 var lines = text.split('\n');
791   -
  839 +
792 840 for (var i = 0; i < lines.length; i++)
793 841 {
794 842 if (lines[i] != null)
795 843 {
796 844 var tags = lines[i].split('\t');
797   -
  845 +
798 846 if (tags.length > 1)
799 847 {
800 848 var key = tags[0].toLowerCase().replace(' ', '_');
801 849 var value = mxUtils.trim(tags.slice(1, tags.length).join(' ').toLowerCase());
802   -
  850 +
803 851 if (value.length > 0)
804 852 {
805 853 this.shapetags[key] = value;
... ... @@ -808,7 +856,7 @@
808 856 }
809 857 }
810 858 };
811   -
  859 +
812 860 /**
813 861 * Adds shape search UI.
814 862 */
... ... @@ -817,7 +865,7 @@
817 865 if (libs != null && libs.length > 0)
818 866 {
819 867 var offset = mxUtils.getOffset(elt);
820   -
  868 +
821 869 this.editorUi.showPopupMenu(mxUtils.bind(this, function(menu, parent)
822 870 {
823 871 menu.addItem(mxResources.get('openLibrary'), null, mxUtils.bind(this, function()
... ... @@ -827,24 +875,24 @@
827 875 (mxUtils.bind(this, function(lib)
828 876 {
829 877 var config = this.getConfigurationById(lib.id);
830   -
  878 +
831 879 if (config != null)
832 880 {
833 881 this.showPalettes(config.prefix || '', config.libs || [config.id], true);
834 882 var elts = this.showPalette(libs[i].lib || libs[i].id, true);
835   -
  883 +
836 884 if (elts != null && elts.length > 1 && elts[1].firstChild != null &&
837 885 (elts[1].firstChild.firstChild == null ||
838 886 elts[1].firstChild.style.display == 'none'))
839 887 {
840 888 elts[0].click();
841 889 }
842   -
  890 +
843 891 window.setTimeout(function()
844 892 {
845 893 elts[1].scrollIntoView(true);
846 894 }, 0);
847   -
  895 +
848 896 mxEvent.consume(evt);
849 897 }
850 898 }))(libs[i]);
... ... @@ -867,17 +915,17 @@
867 915 {
868 916 var style = shapes[i].style;
869 917 var shapeStyle = this.extractShapeStyle(style);
870   -
  918 +
871 919 if (shapeStyle != null)
872 920 {
873 921 var lastDot = shapeStyle.lastIndexOf('.');
874   -
  922 +
875 923 if (lastDot > 0)
876 924 {
877 925 var pkg = shapeStyle.substring(0, lastDot);
878 926 var stc = shapeStyle.substring(lastDot + 1, shapeStyle.length);
879 927 var tags = this.getTagsForStencil(pkg, stc, shapes[i].tags);
880   -
  928 +
881 929 // TODO: Use shapetags for programmatic stencils
882 930 if (tags != null)
883 931 {
... ... @@ -897,7 +945,7 @@
897 945 }
898 946 }
899 947 };
900   -
  948 +
901 949 /**
902 950 * Overrides the sidebar init.
903 951 */
... ... @@ -910,27 +958,27 @@
910 958 var pids = this.pids;
911 959 var cisco = this.cisco;
912 960 var sysml = this.sysml;
913   -
  961 +
914 962 if (urlParams['createindex'] == '1')
915 963 {
916 964 this.createdSearchIndex = [];
917 965 }
918 966
919 967 this.addSearchPalette(true);
920   -
  968 +
921 969 // Adds custom sections first
922 970 if (this.customEntries != null)
923 971 {
924 972 var preloadCount = 0;
925   -
  973 +
926 974 for (var i = 0; i < this.customEntries.length; i++)
927 975 {
928 976 var section = this.customEntries[i];
929   -
  977 +
930 978 for (var j = 0; j < section.entries.length; j++)
931 979 {
932 980 var entry = section.entries[j];
933   -
  981 +
934 982 for (var k = 0; k < entry.libs.length; k++)
935 983 {
936 984 (mxUtils.bind(this, function(lib)
... ... @@ -939,7 +987,7 @@
939 987 var error = null;
940 988 var content = null;
941 989 var title = null;
942   -
  990 +
943 991 var showError = mxUtils.bind(this, function(err, c)
944 992 {
945 993 var div = document.createElement('span');
... ... @@ -950,7 +998,7 @@
950 998 c.innerHTML = '<img align="top" src="' + mxGraph.prototype.warningImage.src + '"/> ';
951 999 c.appendChild(div);
952 1000 });
953   -
  1001 +
954 1002 var barrier = mxUtils.bind(this, function()
955 1003 {
956 1004 if (content != null && title != null)
... ... @@ -977,7 +1025,7 @@
977 1025 }
978 1026 }
979 1027 });
980   -
  1028 +
981 1029 if (lib.data == null && lib.url != null && (!lib.preload && preloadCount >= this.maxPreloadCount))
982 1030 {
983 1031 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title),
... ... @@ -994,14 +1042,14 @@
994 1042 content.style.display = 'none';
995 1043 title.innerHTML = '';
996 1044 mxUtils.write(title, mxResources.get('loading') + '...');
997   -
  1045 +
998 1046 var url = lib.url;
999   -
  1047 +
1000 1048 if (!this.editorUi.editor.isCorsEnabledForUrl(url))
1001 1049 {
1002 1050 url = PROXY_URL + '?url=' + encodeURIComponent(url);
1003 1051 }
1004   -
  1052 +
1005 1053 this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(data)
1006 1054 {
1007 1055 content.style.display = 'block';
... ... @@ -1011,7 +1059,7 @@
1011 1059 try
1012 1060 {
1013 1061 var doc = mxUtils.parseXml(data);
1014   -
  1062 +
1015 1063 if (doc.documentElement.nodeName == 'mxlibrary')
1016 1064 {
1017 1065 var images = JSON.parse(mxUtils.getTextContent(doc.documentElement));
... ... @@ -1030,7 +1078,7 @@
1030 1078 }));
1031 1079 }
1032 1080 else
1033   - {
  1081 + {
1034 1082 this.addPalette(entry.id + '.' + k, this.editorUi.getResource(lib.title),
1035 1083 false, mxUtils.bind(this, function(c, t)
1036 1084 {
... ... @@ -1038,7 +1086,7 @@
1038 1086 title = t;
1039 1087 barrier();
1040 1088 }));
1041   -
  1089 +
1042 1090 if (lib.data != null)
1043 1091 {
1044 1092 this.setCurrentSearchEntryLibrary(entry.id, entry.id + '.' + k);
... ... @@ -1049,20 +1097,20 @@
1049 1097 }
1050 1098 else if (lib.url != null)
1051 1099 {
1052   - preloadCount++;
  1100 + preloadCount++;
1053 1101 var url = lib.url;
1054   -
  1102 +
1055 1103 if (!this.editorUi.editor.isCorsEnabledForUrl(url))
1056 1104 {
1057 1105 url = PROXY_URL + '?url=' + encodeURIComponent(url);
1058 1106 }
1059   -
  1107 +
1060 1108 this.editorUi.editor.loadUrl(url, mxUtils.bind(this, function(temp)
1061 1109 {
1062 1110 try
1063 1111 {
1064 1112 var doc = mxUtils.parseXml(temp);
1065   -
  1113 +
1066 1114 if (doc.documentElement.nodeName == 'mxlibrary')
1067 1115 {
1068 1116 data = JSON.parse(mxUtils.getTextContent(doc.documentElement));
... ... @@ -1287,13 +1335,13 @@
1287 1335 this.addSignsPalette(signs, dir);
1288 1336 // LATER: Check if conflicts with restore libs after loading file
1289 1337 this.showEntries();
1290   -
  1338 +
1291 1339 if (this.createdSearchIndex != null)
1292 1340 {
1293 1341 console.log('searchFileData', Graph.compress(JSON.stringify(this.createdSearchIndex)));
1294 1342 }
1295 1343 };
1296   -
  1344 +
1297 1345 /**
1298 1346 * Overridden to manually create search index for stencil files which are not pre-loaded
1299 1347 * and no entries are created programmatically.
... ... @@ -1301,12 +1349,12 @@
1301 1349 if (urlParams['createindex'] == '1')
1302 1350 {
1303 1351 var sidebarAddStencilPalette = Sidebar.prototype.addStencilPalette;
1304   -
  1352 +
1305 1353 Sidebar.prototype.addStencilPalette = function(id, title, stencilFile, style, ignore, onInit, scale, tags, customFns, groupId)
1306 1354 {
1307 1355 sidebarAddStencilPalette.apply(this, arguments);
1308 1356 scale = (scale != null) ? scale : 1;
1309   -
  1357 +
1310 1358 // Used for creating index
1311 1359 mxStencilRegistry.loadStencilSet(stencilFile, mxUtils.bind(this, function(packageName, stencilName, displayName, w, h)
1312 1360 {
... ... @@ -1315,18 +1363,18 @@
1315 1363 var entry = {style: 'shape=' + packageName + stencilName + style,
1316 1364 w: Math.round(w * scale), h: Math.round(h * scale)};
1317 1365 var tmpTags = (tags != null) ? tags[stencilName] : null;
1318   -
  1366 +
1319 1367 if (tmpTags != null)
1320 1368 {
1321 1369 entry.tags = tmpTags;
1322 1370 }
1323   -
  1371 +
1324 1372 if (groupId != null)
1325 1373 {
1326 1374 entry.id = groupId;
1327 1375 entry.lib = id;
1328 1376 }
1329   -
  1377 +
1330 1378 this.createdSearchIndex.push(entry);
1331 1379 }
1332 1380 }), true);
... ... @@ -1342,7 +1390,7 @@
1342 1390 {
1343 1391 var sizes = res.icons[i].raster_sizes;
1344 1392 var index = sizes.length - 1;
1345   -
  1393 +
1346 1394 while (index > 0 && sizes[index].size > 128)
1347 1395 {
1348 1396 index--;
... ... @@ -1365,23 +1413,23 @@
1365 1413 }
1366 1414 }
1367 1415 };
1368   -
  1416 +
1369 1417 /**
1370 1418 * Adds server icon results to local search results
1371 1419 */
1372 1420 var sidebarSearchEntries = Sidebar.prototype.searchEntries;
1373   -
  1421 +
1374 1422 Sidebar.prototype.searchEntries = function(searchTerms, count, page, success, error)
1375 1423 {
1376 1424 var succ = success;
1377   -
  1425 +
1378 1426 // Lazy-load indices
1379 1427 if (this.searchIndexData != null)
1380 1428 {
1381 1429 this.addSearchIndex(JSON.parse(Graph.decompress(this.searchIndexData)));
1382 1430 this.searchIndexData = null;
1383 1431 }
1384   -
  1432 +
1385 1433 if (ICONSEARCH_PATH != null)
1386 1434 {
1387 1435 success = mxUtils.bind(this, function(results, len, more, terms)
... ... @@ -1389,7 +1437,7 @@
1389 1437 if (!this.editorUi.isOffline() && results.length <= count / 4)
1390 1438 {
1391 1439 var pg = page - Math.ceil((len - count / 4) / count);
1392   -
  1440 +
1393 1441 mxUtils.get(ICONSEARCH_PATH + '?q=' + encodeURIComponent(searchTerms) +
1394 1442 '&p=' + pg + '&c=' + count, mxUtils.bind(this, function(req)
1395 1443 {
... ... @@ -1402,7 +1450,7 @@
1402 1450 try
1403 1451 {
1404 1452 var res = JSON.parse(req.getText());
1405   -
  1453 +
1406 1454 if (res == null || res.icons == null)
1407 1455 {
1408 1456 succ(results, len, false, terms);
... ... @@ -1442,7 +1490,7 @@
1442 1490 }
1443 1491 });
1444 1492 }
1445   -
  1493 +
1446 1494 sidebarSearchEntries.apply(this, arguments);
1447 1495 };
1448 1496
... ... @@ -1450,16 +1498,16 @@
1450 1498 * Adds a click handler for inserting the cell as target for dangling edge.
1451 1499 */
1452 1500 var sidebarItemClicked = Sidebar.prototype.itemClicked;
1453   -
  1501 +
1454 1502 Sidebar.prototype.itemClicked = function(cells, ds, evt)
1455 1503 {
1456 1504 var graph = this.editorUi.editor.graph;
1457 1505 var handled = false;
1458   -
  1506 +
1459 1507 if (cells != null && graph.getSelectionCount() == 1 && graph.getModel().isVertex(cells[0]))
1460 1508 {
1461 1509 var target = graph.cloneCell(cells[0]);
1462   -
  1510 +
1463 1511 // Inserts cell as target of selected edge if not connected
1464 1512 if (graph.getModel().isEdge(graph.getSelectionCell()) && graph.getModel().getTerminal(graph.getSelectionCell(), false) == null &&
1465 1513 graph.getModel().isVertex(target))
... ... @@ -1468,7 +1516,7 @@
1468 1516 try
1469 1517 {
1470 1518 var edgeState = graph.view.getState(graph.getSelectionCell());
1471   -
  1519 +
1472 1520 if (edgeState != null)
1473 1521 {
1474 1522 var tr = graph.view.translate;
... ... @@ -1478,10 +1526,10 @@
1478 1526 target.geometry.x = pt.x / s - tr.x - target.geometry.width / 2;
1479 1527 target.geometry.y = pt.y / s - tr.y - target.geometry.height / 2;
1480 1528 }
1481   -
  1529 +
1482 1530 graph.addCell(target);
1483 1531 graph.getModel().setTerminal(graph.getSelectionCell(), target, false);
1484   -
  1532 +
1485 1533 if (evt == null || !mxEvent.isShiftDown(evt))
1486 1534 {
1487 1535 graph.fireEvent(new mxEventObject('cellsInserted', 'cells', [target]));
... ... @@ -1495,13 +1543,13 @@
1495 1543 {
1496 1544 graph.getModel().endUpdate();
1497 1545 }
1498   -
  1546 +
1499 1547 graph.scrollCellToVisible(target);
1500 1548 graph.setSelectionCell(target);
1501 1549 handled = true;
1502 1550 }
1503 1551 }
1504   -
  1552 +
1505 1553 if (!handled)
1506 1554 {
1507 1555 sidebarItemClicked.apply(this, arguments);
... ...
1   -(function()
2   -{
  1 +(function () {
3 2 // Adds Atlassian shapes
4   - // 发动机
5   - Sidebar.prototype.addEnginePalette = function()
6   - {
7   - var gn = 'mxgraph.engine';
8   - var dt = 'engine ';
9   - this.setCurrentSearchEntryLibrary('engine');
  3 + // engine 发动机
  4 + Sidebar.prototype.addEnginePalette = function () {
  5 + const gn = 'mxgraph.engine';
  6 + const dt = 'engine';
  7 + const label = '发动机'
  8 + const width = 66;
  9 + const height = 74;
  10 + const staticPath = '/thingskit-drawio/img/lib/thingskit/'
  11 + const prefix = 'image;image=img/lib/thingskit/'
  12 + const defaultStyle = ';imageAspect=0;'
  13 + this.setCurrentSearchEntryLibrary(dt);
10 14
11   - var fns = [
12   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/3-D 发动机.svg;imageAspect=0;',
13   - 66, 66, '', '3-D 发动机', null, null, this.getTagsForStencil(gn, '3-D 发动机', dt).join(' ')),
14   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/步进电机驱动器.svg;imageAspect=0;',
15   - 64, 74, '', '步进电机驱动器', null, null, this.getTagsForStencil(gn, '步进电机驱动器', dt).join(' ')),
16   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/伺服电机.svg;imageAspect=0;',
17   - 64, 74, '', '伺服电机', null, null, this.getTagsForStencil(gn, '伺服电机', dt).join(' ')),
18   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/伺服电机2.svg;imageAspect=0;',
19   - 64, 74, '', '伺服电机2', null, null, this.getTagsForStencil(gn, '伺服电机2', dt).join(' ')),
20   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/促动器.svg;imageAspect=0;',
21   - 64, 74, '', '促动机', null, null, this.getTagsForStencil(gn, '促动器', dt).join(' ')),
22   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/发动机 1.svg;imageAspect=0;',
23   - 64, 74, '', '发动机 1', null, null, this.getTagsForStencil(gn, '发动机 1', dt).join(' ')),
24   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/发动机 2.svg;imageAspect=0;',
25   - 64, 74, '', '发动机 2', null, null, this.getTagsForStencil(gn, '发动机 2', dt).join(' ')),
26   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/发动机 3.svg;imageAspect=0;',
27   - 64, 74, '', '发动机 3', null, null, this.getTagsForStencil(gn, '发动机 3', dt).join(' ')),
28   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/发动机 4.svg;imageAspect=0;',
29   - 64, 74, '', '发动机 4', null, null, this.getTagsForStencil(gn, '发动机 4', dt).join(' ')),
30   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/防爆电动机.svg;imageAspect=0;',
31   - 64, 74, '', '防爆电动机', null, null, this.getTagsForStencil(gn, '防爆电动机', dt).join(' ')),
32   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/工业标准发动机.svg;imageAspect=0;',
33   - 64, 74, '', '工业标准发动机', null, null, this.getTagsForStencil(gn, '工业标准发动机', dt).join(' ')),
34   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/减速器.svg;imageAspect=0;',
35   - 64, 74, '', '减速器', null, null, this.getTagsForStencil(gn, '减速器', dt).join(' ')),
36   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/简单马达.svg;imageAspect=0;',
37   - 64, 74, '', '简单马达', null, null, this.getTagsForStencil(gn, '简单马达', dt).join(' ')),
38   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/气压制动器.svg;imageAspect=0;',
39   - 64, 74, '', '气压制动器', null, null, this.getTagsForStencil(gn, '气压制动器', dt).join(' ')),
40   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/无刷电机.svg;imageAspect=0;',
41   - 64, 74, '', '无刷电机', null, null, this.getTagsForStencil(gn, '无刷电机', dt).join(' ')),
42   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/制动马达.svg;imageAspect=0;',
43   - 64, 74, '', '制动马达', null, null, this.getTagsForStencil(gn, '制动马达', dt).join(' ')),
44   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/智能马达.svg;imageAspect=0;',
45   - 64, 74, '', '智能马达', null, null, this.getTagsForStencil(gn, '智能马达', dt).join(' ')),
46   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/engine/轴角编码器.svg;imageAspect=0;',
47   - 64, 74, '', '轴角编码器', null, null, this.getTagsForStencil(gn, '轴角编码器', dt).join(' ')),
  15 + // 自定义属性
  16 + const cellAttribute = {}
  17 +
  18 + const graphPathLib = [
  19 + { name: '3-D 发动机.svg', path: 'engine/3-D 发动机.svg' },
  20 + { name: '伺服电机.svg', path: 'engine/伺服电机.svg' },
  21 + { name: '伺服电机2.svg', path: 'engine/伺服电机2.svg' },
  22 + { name: '促动器.svg', path: 'engine/促动器.svg' },
  23 + { name: '减速器.svg', path: 'engine/减速器.svg' },
  24 + { name: '制动马达.svg', path: 'engine/制动马达.svg' },
  25 + { name: '发动机 1.svg', path: 'engine/发动机 1.svg' },
  26 + { name: '发动机 2.svg', path: 'engine/发动机 2.svg' },
  27 + { name: '发动机 3.svg', path: 'engine/发动机 3.svg' },
  28 + { name: '发动机 4.svg', path: 'engine/发动机 4.svg' },
  29 + { name: '工业标准发动机.svg', path: 'engine/工业标准发动机.svg' },
  30 + { name: '无刷电机.svg', path: 'engine/无刷电机.svg' },
  31 + { name: '智能马达.svg', path: 'engine/智能马达.svg' },
  32 + { name: '步进电机驱动器.svg', path: 'engine/步进电机驱动器.svg' },
  33 + { name: '气压制动器.svg', path: 'engine/气压制动器.svg' },
  34 + { name: '简单马达.svg', path: 'engine/简单马达.svg' },
  35 + { name: '轴角编码器.svg', path: 'engine/轴角编码器.svg' },
  36 + { name: '防爆电动机.svg', path: 'engine/防爆电动机.svg' },
  37 + ]
  38 +
  39 + const lib = graphPathLib.map(item => {
  40 + item.staticPath = staticPath + item.path
  41 + return item
  42 + })
  43 +
  44 + const fns = graphPathLib.map(item => {
  45 + return this.addEntry(this.getTagsForStencil(gn, item.name, dt).join(' '), mxUtils.bind(this, function () {
  46 + const cell = new mxCell('', new mxGeometry(0, 0, width, height), `${ prefix }${ item.path }${ defaultStyle }`);
  47 + cell.setVertex(true)
  48 + this.setCellAttributes(cell, cellAttribute)
  49 + return this.createVertexTemplateFromCells([ cell ], cell.geometry.width, cell.geometry.height, item.name);
  50 + }));
  51 + })
  52 +
  53 + this.setVariableImageLib(dt, label, lib)
  54 +
  55 + this.addPaletteFunctions(dt, label, false, fns);
48 56
49   - ];
50   - this.addPaletteFunctions('engine', '发动机', false, fns);
51 57 this.setCurrentSearchEntryLibrary();
52 58 };
53 59 })();
... ...
1   -(function()
2   -{
  1 +
  2 +(function () {
3 3 // Adds Atlassian shapes
4   - // 风机
5   - Sidebar.prototype.addFanPalette = function()
6   - {
7   - var gn = 'mxgraph.fan';
8   - var dt = 'fan';
9   - var width = 66;
10   - var height = 74;
11   - this.setCurrentSearchEntryLibrary('fan');
  4 + // fan
  5 + Sidebar.prototype.addFanPalette = function () {
  6 + const gn = 'mxgraph.fan';
  7 + const dt = 'fan';
  8 + const label = '风机'
  9 + const width = 66;
  10 + const height = 74;
  11 + const staticPath = '/thingskit-drawio/img/lib/thingskit/'
  12 + const prefix = 'image;image=img/lib/thingskit/'
  13 + const defaultStyle = ';imageAspect=0;'
  14 + this.setCurrentSearchEntryLibrary(dt);
  15 +
  16 + const graphPathLib = [
  17 + { name: '风机1.png', path: 'fan/风机1.png' },
  18 + { name: '风机2.png', path: 'fan/风机2.png' },
  19 + { name: '风机3.png', path: 'fan/风机3.png' },
  20 + { name: '风机4.png', path: 'fan/风机4.png' },
  21 + { name: '风机5.gif', path: 'fan/风机5.gif' },
  22 + { name: '风机6.gif', path: 'fan/风机6.gif' },
  23 + { name: '风机7.gif', path: 'fan/风机7.gif' },
  24 + { name: '风机8.png', path: 'fan/风机8.png' },
  25 + ]
  26 +
  27 + const lib = graphPathLib.map(item => {
  28 + item.staticPath = staticPath + item.path
  29 + return item
  30 + })
  31 +
  32 + const fns = graphPathLib.map(item => {
  33 + return this.createVertexTemplateEntry(`${ prefix }${ item.path }${ defaultStyle }`, width, height, '', item.name, null, null, this.getTagsForStencil(gn, item.name, dt).join(' '))
  34 + })
12 35
13   - var fns = [
14   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机1.png;imageAspect=0;',
15   - width, height, '', '风机1', null, null, this.getTagsForStencil(gn, '风机1', dt).join(' ')),
16   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机2.png;imageAspect=0;',
17   - width, height, '', '风机2', null, null, this.getTagsForStencil(gn, '风机2', dt).join(' ')),
18   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机3.png;imageAspect=0;',
19   - width, height, '', '风机3', null, null, this.getTagsForStencil(gn, '风机3', dt).join(' ')),
20   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机4.png;imageAspect=0;',
21   - width, height, '', '风机4', null, null, this.getTagsForStencil(gn, '风机4', dt).join(' ')),
22   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机5.gif;imageAspect=0;',
23   - width, height, '', '风机5', null, null, this.getTagsForStencil(gn, '风机5', dt).join(' ')),
24   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机6.gif;imageAspect=0;',
25   - width, height, '', '风机6', null, null, this.getTagsForStencil(gn, '风机6', dt).join(' ')),
26   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机7.gif;imageAspect=0;',
27   - width, height, '', '风机7', null, null, this.getTagsForStencil(gn, '风机7', dt).join(' ')),
28   - this.createVertexTemplateEntry('image;image=img/lib/thingskit/fan/风机8.png;imageAspect=0;',
29   - width, height, '', '风机8', null, null, this.getTagsForStencil(gn, '风机8', dt).join(' ')),
30   - ];
  36 + this.setVariableImageLib(dt, label, lib)
31 37
32   - this.addPalette('fan', '风机', false, mxUtils.bind(this, function(content)
33   - {
34   - for (var i = 0; i < fns.length; i++)
35   - {
36   - content.appendChild(fns[i](content));
37   - }
38   - }));
  38 + this.addPaletteFunctions(dt, label, false, fns);
39 39
40 40 this.setCurrentSearchEntryLibrary();
41 41 };
... ...
... ... @@ -704,9 +704,9 @@ BaseFormatPanel.prototype.installInputHandler = function (
704 704 new mxEventObject(
705 705 "styleChanged",
706 706 "keys",
707   - [ key ],
  707 + [key],
708 708 "values",
709   - [ value ],
  709 + [value],
710 710 "cells",
711 711 cells,
712 712 ),
... ... @@ -1087,9 +1087,9 @@ BaseFormatPanel.prototype.createCellOption = function (
1087 1087 new mxEventObject(
1088 1088 "styleChanged",
1089 1089 "keys",
1090   - [ key ],
  1090 + [key],
1091 1091 "values",
1092   - [ value ],
  1092 + [value],
1093 1093 "cells",
1094 1094 temp,
1095 1095 ),
... ... @@ -1344,9 +1344,9 @@ BaseFormatPanel.prototype.createCellColorOption = function (
1344 1344 new mxEventObject(
1345 1345 "styleChanged",
1346 1346 "keys",
1347   - [ colorKey ],
  1347 + [colorKey],
1348 1348 "values",
1349   - [ color ],
  1349 + [color],
1350 1350 "cells",
1351 1351 cells,
1352 1352 ),
... ... @@ -1523,9 +1523,9 @@ BaseFormatPanel.prototype.createRelativeOption = function (
1523 1523 new mxEventObject(
1524 1524 "styleChanged",
1525 1525 "keys",
1526   - [ key ],
  1526 + [key],
1527 1527 "values",
1528   - [ value ],
  1528 + [value],
1529 1529 "cells",
1530 1530 cells,
1531 1531 ),
... ... @@ -1885,9 +1885,9 @@ ArrangePanel.prototype.addTable = function (div) {
1885 1885 var count = 0;
1886 1886
1887 1887 if (ss.mergeCell != null) {
1888   - count += this.addActions(div, [ "mergeCells" ]);
  1888 + count += this.addActions(div, ["mergeCells"]);
1889 1889 } else if (ss.style["colspan"] > 1 || ss.style["rowspan"] > 1) {
1890   - count += this.addActions(div, [ "unmergeCells" ]);
  1890 + count += this.addActions(div, ["unmergeCells"]);
1891 1891 }
1892 1892
1893 1893 if (count > 0) {
... ... @@ -1904,8 +1904,8 @@ ArrangePanel.prototype.addTable = function (div) {
1904 1904 *
1905 1905 */
1906 1906 ArrangePanel.prototype.addLayerOps = function (div) {
1907   - this.addActions(div, [ "toFront", "toBack" ]);
1908   - this.addActions(div, [ "bringForward", "sendBackward" ]);
  1907 + this.addActions(div, ["toFront", "toBack"]);
  1908 + this.addActions(div, ["bringForward", "sendBackward"]);
1909 1909
1910 1910 return div;
1911 1911 };
... ... @@ -1925,8 +1925,8 @@ ArrangePanel.prototype.addGroupOps = function (div) {
1925 1925
1926 1926 if (!ss.cell && !ss.row) {
1927 1927 count +=
1928   - this.addActions(div, [ "group", "ungroup", "copySize", "pasteSize" ]) +
1929   - this.addActions(div, [ "removeFromGroup" ]);
  1928 + this.addActions(div, ["group", "ungroup", "copySize", "pasteSize"]) +
  1929 + this.addActions(div, ["removeFromGroup"]);
1930 1930 }
1931 1931
1932 1932 var copyBtn = null;
... ... @@ -2023,7 +2023,7 @@ ArrangePanel.prototype.addGroupOps = function (div) {
2023 2023 }
2024 2024
2025 2025 if (graph.getSelectionCount() == 1) {
2026   - count += this.addActions(div, [ "editData", "editLink" ]);
  2026 + count += this.addActions(div, ["editData", "editLink"]);
2027 2027 }
2028 2028
2029 2029 if (count == 0) {
... ... @@ -2103,12 +2103,12 @@ ArrangePanel.prototype.addAlign = function (div) {
2103 2103 stylePanel,
2104 2104 );
2105 2105
2106   - this.styleButtons([ left, center, right, top, middle, bottom ]);
  2106 + this.styleButtons([left, center, right, top, middle, bottom]);
2107 2107 right.style.marginRight = "10px";
2108 2108 }
2109 2109
2110 2110 div.appendChild(stylePanel);
2111   - this.addActions(div, [ "snapToGrid" ]);
  2111 + this.addActions(div, ["snapToGrid"]);
2112 2112
2113 2113 return div;
2114 2114 };
... ... @@ -2797,9 +2797,9 @@ ArrangePanel.prototype.addEdgeGeometry = function (container) {
2797 2797 new mxEventObject(
2798 2798 "styleChanged",
2799 2799 "keys",
2800   - [ "width" ],
  2800 + ["width"],
2801 2801 "values",
2802   - [ value ],
  2802 + [value],
2803 2803 "cells",
2804 2804 cells,
2805 2805 ),
... ... @@ -3030,7 +3030,7 @@ TextFormatPanel.prototype.addFont = function (container) {
3030 3030 var stylePanel2 = stylePanel.cloneNode(false);
3031 3031 stylePanel2.style.marginLeft = "-3px";
3032 3032 var fontStyleItems = this.editorUi.toolbar.addItems(
3033   - [ "bold", "italic", "underline" ],
  3033 + ["bold", "italic", "underline"],
3034 3034 stylePanel2,
3035 3035 true,
3036 3036 );
... ... @@ -3057,7 +3057,7 @@ TextFormatPanel.prototype.addFont = function (container) {
3057 3057 );
3058 3058
3059 3059 var verticalItem = this.editorUi.toolbar.addItems(
3060   - [ "vertical" ],
  3060 + ["vertical"],
3061 3061 stylePanel2,
3062 3062 true,
3063 3063 )[0];
... ... @@ -3065,7 +3065,7 @@ TextFormatPanel.prototype.addFont = function (container) {
3065 3065 container.appendChild(stylePanel2);
3066 3066
3067 3067 this.styleButtons(fontStyleItems);
3068   - this.styleButtons([ verticalItem ]);
  3068 + this.styleButtons([verticalItem]);
3069 3069
3070 3070 var stylePanel3 = stylePanel.cloneNode(false);
3071 3071 stylePanel3.style.marginLeft = "-3px";
... ... @@ -3088,9 +3088,9 @@ TextFormatPanel.prototype.addFont = function (container) {
3088 3088 new mxEventObject(
3089 3089 "styleChanged",
3090 3090 "keys",
3091   - [ mxConstants.STYLE_ALIGN ],
  3091 + [mxConstants.STYLE_ALIGN],
3092 3092 "values",
3093   - [ mxConstants.ALIGN_LEFT ],
  3093 + [mxConstants.ALIGN_LEFT],
3094 3094 "cells",
3095 3095 ss.cells,
3096 3096 ),
... ... @@ -3098,8 +3098,8 @@ TextFormatPanel.prototype.addFont = function (container) {
3098 3098 }
3099 3099 : callFn(
3100 3100 this.editorUi.menus.createStyleChangeFunction(
3101   - [ mxConstants.STYLE_ALIGN ],
3102   - [ mxConstants.ALIGN_LEFT ],
  3101 + [mxConstants.STYLE_ALIGN],
  3102 + [mxConstants.ALIGN_LEFT],
3103 3103 ),
3104 3104 ),
3105 3105 stylePanel3,
... ... @@ -3114,9 +3114,9 @@ TextFormatPanel.prototype.addFont = function (container) {
3114 3114 new mxEventObject(
3115 3115 "styleChanged",
3116 3116 "keys",
3117   - [ mxConstants.STYLE_ALIGN ],
  3117 + [mxConstants.STYLE_ALIGN],
3118 3118 "values",
3119   - [ mxConstants.ALIGN_CENTER ],
  3119 + [mxConstants.ALIGN_CENTER],
3120 3120 "cells",
3121 3121 ss.cells,
3122 3122 ),
... ... @@ -3124,8 +3124,8 @@ TextFormatPanel.prototype.addFont = function (container) {
3124 3124 }
3125 3125 : callFn(
3126 3126 this.editorUi.menus.createStyleChangeFunction(
3127   - [ mxConstants.STYLE_ALIGN ],
3128   - [ mxConstants.ALIGN_CENTER ],
  3127 + [mxConstants.STYLE_ALIGN],
  3128 + [mxConstants.ALIGN_CENTER],
3129 3129 ),
3130 3130 ),
3131 3131 stylePanel3,
... ... @@ -3140,9 +3140,9 @@ TextFormatPanel.prototype.addFont = function (container) {
3140 3140 new mxEventObject(
3141 3141 "styleChanged",
3142 3142 "keys",
3143   - [ mxConstants.STYLE_ALIGN ],
  3143 + [mxConstants.STYLE_ALIGN],
3144 3144 "values",
3145   - [ mxConstants.ALIGN_RIGHT ],
  3145 + [mxConstants.ALIGN_RIGHT],
3146 3146 "cells",
3147 3147 ss.cells,
3148 3148 ),
... ... @@ -3150,14 +3150,14 @@ TextFormatPanel.prototype.addFont = function (container) {
3150 3150 }
3151 3151 : callFn(
3152 3152 this.editorUi.menus.createStyleChangeFunction(
3153   - [ mxConstants.STYLE_ALIGN ],
3154   - [ mxConstants.ALIGN_RIGHT ],
  3153 + [mxConstants.STYLE_ALIGN],
  3154 + [mxConstants.ALIGN_RIGHT],
3155 3155 ),
3156 3156 ),
3157 3157 stylePanel3,
3158 3158 );
3159 3159
3160   - this.styleButtons([ left, center, right ]);
  3160 + this.styleButtons([left, center, right]);
3161 3161
3162 3162 // Quick hack for strikethrough
3163 3163 // TODO: Add translations and toggle state
... ... @@ -3170,14 +3170,14 @@ TextFormatPanel.prototype.addFont = function (container) {
3170 3170 },
3171 3171 stylePanel2,
3172 3172 );
3173   - this.styleButtons([ strike ]);
  3173 + this.styleButtons([strike]);
3174 3174
3175 3175 strike.firstChild.style.background =
3176 3176 "url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjR2MjRIMFYweiIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBjbGlwLXBhdGg9InVybCgjYikiIGZpbGw9IiMwMTAxMDEiIGQ9Ik03LjI0IDguNzVjLS4yNi0uNDgtLjM5LTEuMDMtLjM5LTEuNjcgMC0uNjEuMTMtMS4xNi40LTEuNjcuMjYtLjUuNjMtLjkzIDEuMTEtMS4yOS40OC0uMzUgMS4wNS0uNjMgMS43LS44My42Ni0uMTkgMS4zOS0uMjkgMi4xOC0uMjkuODEgMCAxLjU0LjExIDIuMjEuMzQuNjYuMjIgMS4yMy41NCAxLjY5Ljk0LjQ3LjQuODMuODggMS4wOCAxLjQzLjI1LjU1LjM4IDEuMTUuMzggMS44MWgtMy4wMWMwLS4zMS0uMDUtLjU5LS4xNS0uODUtLjA5LS4yNy0uMjQtLjQ5LS40NC0uNjgtLjItLjE5LS40NS0uMzMtLjc1LS40NC0uMy0uMS0uNjYtLjE2LTEuMDYtLjE2LS4zOSAwLS43NC4wNC0xLjAzLjEzLS4yOS4wOS0uNTMuMjEtLjcyLjM2LS4xOS4xNi0uMzQuMzQtLjQ0LjU1LS4xLjIxLS4xNS40My0uMTUuNjYgMCAuNDguMjUuODguNzQgMS4yMS4zOC4yNS43Ny40OCAxLjQxLjdINy4zOWMtLjA1LS4wOC0uMTEtLjE3LS4xNS0uMjV6TTIxIDEydi0ySDN2Mmg5LjYyYy4xOC4wNy40LjE0LjU1LjIuMzcuMTcuNjYuMzQuODcuNTEuMjEuMTcuMzUuMzYuNDMuNTcuMDcuMi4xMS40My4xMS42OSAwIC4yMy0uMDUuNDUtLjE0LjY2LS4wOS4yLS4yMy4zOC0uNDIuNTMtLjE5LjE1LS40Mi4yNi0uNzEuMzUtLjI5LjA4LS42My4xMy0xLjAxLjEzLS40MyAwLS44My0uMDQtMS4xOC0uMTNzLS42Ni0uMjMtLjkxLS40MmMtLjI1LS4xOS0uNDUtLjQ0LS41OS0uNzUtLjE0LS4zMS0uMjUtLjc2LS4yNS0xLjIxSDYuNGMwIC41NS4wOCAxLjEzLjI0IDEuNTguMTYuNDUuMzcuODUuNjUgMS4yMS4yOC4zNS42LjY2Ljk4LjkyLjM3LjI2Ljc4LjQ4IDEuMjIuNjUuNDQuMTcuOS4zIDEuMzguMzkuNDguMDguOTYuMTMgMS40NC4xMy44IDAgMS41My0uMDkgMi4xOC0uMjhzMS4yMS0uNDUgMS42Ny0uNzljLjQ2LS4zNC44Mi0uNzcgMS4wNy0xLjI3cy4zOC0xLjA3LjM4LTEuNzFjMC0uNi0uMS0xLjE0LS4zMS0xLjYxLS4wNS0uMTEtLjExLS4yMy0uMTctLjMzSDIxeiIvPjwvc3ZnPg==)";
3177 3177 strike.firstChild.style.backgroundPosition = "2px 2px";
3178 3178 strike.firstChild.style.backgroundSize = "18px 18px";
3179 3179
3180   - this.styleButtons([ strike ]);
  3180 + this.styleButtons([strike]);
3181 3181 }
3182 3182
3183 3183 var top = this.editorUi.toolbar.addButton(
... ... @@ -3185,8 +3185,8 @@ TextFormatPanel.prototype.addFont = function (container) {
3185 3185 mxResources.get("top"),
3186 3186 callFn(
3187 3187 this.editorUi.menus.createStyleChangeFunction(
3188   - [ mxConstants.STYLE_VERTICAL_ALIGN ],
3189   - [ mxConstants.ALIGN_TOP ],
  3188 + [mxConstants.STYLE_VERTICAL_ALIGN],
  3189 + [mxConstants.ALIGN_TOP],
3190 3190 ),
3191 3191 ),
3192 3192 stylePanel3,
... ... @@ -3196,8 +3196,8 @@ TextFormatPanel.prototype.addFont = function (container) {
3196 3196 mxResources.get("middle"),
3197 3197 callFn(
3198 3198 this.editorUi.menus.createStyleChangeFunction(
3199   - [ mxConstants.STYLE_VERTICAL_ALIGN ],
3200   - [ mxConstants.ALIGN_MIDDLE ],
  3199 + [mxConstants.STYLE_VERTICAL_ALIGN],
  3200 + [mxConstants.ALIGN_MIDDLE],
3201 3201 ),
3202 3202 ),
3203 3203 stylePanel3,
... ... @@ -3207,14 +3207,14 @@ TextFormatPanel.prototype.addFont = function (container) {
3207 3207 mxResources.get("bottom"),
3208 3208 callFn(
3209 3209 this.editorUi.menus.createStyleChangeFunction(
3210   - [ mxConstants.STYLE_VERTICAL_ALIGN ],
3211   - [ mxConstants.ALIGN_BOTTOM ],
  3210 + [mxConstants.STYLE_VERTICAL_ALIGN],
  3211 + [mxConstants.ALIGN_BOTTOM],
3212 3212 ),
3213 3213 ),
3214 3214 stylePanel3,
3215 3215 );
3216 3216
3217   - this.styleButtons([ top, middle, bottom ]);
  3217 + this.styleButtons([top, middle, bottom]);
3218 3218
3219 3219 container.appendChild(stylePanel3);
3220 3220
... ... @@ -3441,7 +3441,7 @@ TextFormatPanel.prototype.addFont = function (container) {
3441 3441
3442 3442 // NOTE: For automatic we use the value null since automatic
3443 3443 // requires the text to be non formatted and non-wrapped
3444   - var dirs = [ "automatic", "leftToRight", "rightToLeft" ];
  3444 + var dirs = ["automatic", "leftToRight", "rightToLeft"];
3445 3445 var dirSet = {
3446 3446 automatic: null,
3447 3447 leftToRight: mxConstants.TEXT_DIRECTION_LTR,
... ... @@ -3568,9 +3568,9 @@ TextFormatPanel.prototype.addFont = function (container) {
3568 3568 new mxEventObject(
3569 3569 "styleChanged",
3570 3570 "keys",
3571   - [ mxConstants.STYLE_FONTSIZE ],
  3571 + [mxConstants.STYLE_FONTSIZE],
3572 3572 "values",
3573   - [ fontSize ],
  3573 + [fontSize],
3574 3574 "cells",
3575 3575 ss.cells,
3576 3576 ),
... ... @@ -3696,9 +3696,9 @@ TextFormatPanel.prototype.addFont = function (container) {
3696 3696 new mxEventObject(
3697 3697 "styleChanged",
3698 3698 "keys",
3699   - [ mxConstants.STYLE_LABEL_BACKGROUNDCOLOR ],
  3699 + [mxConstants.STYLE_LABEL_BACKGROUNDCOLOR],
3700 3700 "values",
3701   - [ color ],
  3701 + [color],
3702 3702 "cells",
3703 3703 ss.cells,
3704 3704 ),
... ... @@ -3775,9 +3775,9 @@ TextFormatPanel.prototype.addFont = function (container) {
3775 3775 new mxEventObject(
3776 3776 "styleChanged",
3777 3777 "keys",
3778   - [ mxConstants.STYLE_FONTCOLOR ],
  3778 + [mxConstants.STYLE_FONTCOLOR],
3779 3779 "values",
3780   - [ color ],
  3780 + [color],
3781 3781 "cells",
3782 3782 ss.cells,
3783 3783 ),
... ... @@ -3829,9 +3829,9 @@ TextFormatPanel.prototype.addFont = function (container) {
3829 3829 new mxEventObject(
3830 3830 "styleChanged",
3831 3831 "keys",
3832   - [ mxConstants.STYLE_FONTCOLOR ],
  3832 + [mxConstants.STYLE_FONTCOLOR],
3833 3833 "values",
3834   - [ color ],
  3834 + [color],
3835 3835 "cells",
3836 3836 ss.cells,
3837 3837 ),
... ... @@ -4029,7 +4029,7 @@ TextFormatPanel.prototype.addFont = function (container) {
4029 4029 while (
4030 4030 node != null &&
4031 4031 node.nodeType != mxConstants.NODETYPE_ELEMENT
4032   - ) {
  4032 + ) {
4033 4033 node = node.parentNode;
4034 4034 }
4035 4035
... ... @@ -4083,7 +4083,7 @@ TextFormatPanel.prototype.addFont = function (container) {
4083 4083 var insertPanel = stylePanel.cloneNode(false);
4084 4084 insertPanel.style.paddingLeft = "0px";
4085 4085 var insertBtns = this.editorUi.toolbar.addItems(
4086   - [ "link", "image" ],
  4086 + ["link", "image"],
4087 4087 insertPanel,
4088 4088 true,
4089 4089 );
... ... @@ -4754,7 +4754,7 @@ TextFormatPanel.prototype.addFont = function (container) {
4754 4754 tableCell =
4755 4755 currentTable == null
4756 4756 ? null
4757   - : graph.getParentByNames(node, [ "TD", "TH" ], currentTable);
  4757 + : graph.getParentByNames(node, ["TD", "TH"], currentTable);
4758 4758 tableWrapper.style.display = currentTable != null ? "" : "none";
4759 4759
4760 4760 if (document.activeElement != input) {
... ... @@ -4878,10 +4878,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4878 4878 const graph = editor.graph;
4879 4879 const ss = ui.getSelectionState();
4880 4880 const vertices = ss.vertices || []
4881   -
4882   - console.log(Sidebar.prototype)
  4881 + const sidebarInstance = ui.sidebar
4883 4882 // console.log(this.editorUi)
4884 4883 console.log(vertices)
  4884 + console.log(this)
4885 4885
4886 4886
4887 4887 // console.log(vertices[0]?.get('bindType'))
... ... @@ -4899,7 +4899,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4899 4899 const graphId = vertices[0].id;
4900 4900
4901 4901 // 解构全局属性layui要用到的模块
4902   - const { layer, form, jquery: $ } = layui;
  4902 + const { layer, form, jquery: $, colorpicker, upload, element } = layui;
4903 4903
4904 4904 const CONTAINER_FILTER = 'containerFilter'
4905 4905 $(container).addClass('layui-form').attr('lay-filter', CONTAINER_FILTER)
... ... @@ -4942,7 +4942,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4942 4942
4943 4943 /**
4944 4944 * @description 获取弹出层绑定信息
4945   - * @param {'DOWN' | 'UP' | 'SINGLE' | 'DOUBLE' | 'DISPLAY' | 'FLASH' | 'ROTATE'} type - 类型
  4945 + * @param {'DOWN' | 'UP' | 'SINGLE' | 'DOUBLE' | 'DISPLAY' | 'FLASH' | 'ROTATE' | 'IMAGE'} type - 类型
4946 4946 * @param {'event' | 'act' } category - 类别
4947 4947 */
4948 4948 function getLayerBindInfo(category, type) {
... ... @@ -4956,6 +4956,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4956 4956 ACT: 'act',
4957 4957 EVENT: 'event',
4958 4958 DATA_SOURCE: 'dataSources',
  4959 + FUNCTION: 'function',
4959 4960 }
4960 4961
4961 4962 const enumInteractionType = {
... ... @@ -4969,6 +4970,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4969 4970 DISPLAY: 'DISPLAY',
4970 4971 FLASH: 'FLASH',
4971 4972 ROTATE: 'ROTATE',
  4973 + IMAGE: 'IMAGE',
4972 4974 }
4973 4975
4974 4976
... ... @@ -5011,8 +5013,21 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5011 5013 type: enumDynamicEffectType.ROTATE,
5012 5014 category: enumCategory.ACT,
5013 5015 },
  5016 + {
  5017 + label: '设置变量值图片',
  5018 + type: enumDynamicEffectType.IMAGE,
  5019 + category: enumCategory.ACT,
  5020 + },
5014 5021 ];
5015 5022
  5023 + // const functionList = [
  5024 + // {
  5025 + // label: '设置变量值图片',
  5026 + // type: enumFunctionType.VAR_IMAGE,
  5027 + // category: enumCategory.FUNCTION,
  5028 + // },
  5029 + // ]
  5030 +
5016 5031 const enumDataSourceConst = {
5017 5032 ORG_ID: 'orgId',
5018 5033 DEVICE_ID: 'deviceId',
... ... @@ -5021,7 +5036,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5021 5036 GATEWAY: 'GATEWAY',
5022 5037 }
5023 5038
5024   - let echoRefreshFn = null
  5039 + function echoRefreshFn() {
  5040 + }
5025 5041
5026 5042
5027 5043 // 获取url的请求参数函数
... ... @@ -5064,6 +5080,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5064 5080 createInteractionPanel()
5065 5081 createDynamicEffectPanel()
5066 5082 createSubmitPanel()
  5083 + UseLayUi.nextTick(() => form.render())
5067 5084 }
5068 5085
5069 5086 initNode();
... ... @@ -5074,36 +5091,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5074 5091 */
5075 5092 async function getNodeBindInfo() {
5076 5093 const { id } = nodeInfo
5077   - const [ err, res ] = await to(ConfigurationNodeApi.getConfigurationInfo('NODE', id))
  5094 + const [err, res] = await to(ConfigurationNodeApi.getConfigurationInfo('NODE', id))
5078 5095 currentNodeData = res
5079 5096 if (echoRefreshFn && typeof echoRefreshFn === 'function') echoRefreshFn()
5080 5097 }
5081 5098
5082   -
5083   - /**
5084   - * @description 生成数据交互面板
5085   - * @returns {Array}
5086   - */
5087   - function generateDataEventNode() {
5088   - const eventList = []
5089   - const eventNodeCls = 'interaction__container'
5090   - for (const item of interactionList) {
5091   - const checkbox = UseLayUi.createCheckBox({
5092   - dataSource: item,
5093   - layFilter: item.type,
5094   - valueField: 'type',
5095   - labelField: 'label',
5096   - })
5097   - const template = `
5098   - <div class="${ eventNodeCls }">
5099   - ${ checkbox }
5100   - <i id="${ item.type }"></i>
5101   - </div>`
5102   - eventList.push(template)
5103   - }
5104   - return eventList
5105   - }
5106   -
5107 5099 /**
5108 5100 * @description 生成操作节点
5109 5101 * @param {object[]} list
... ... @@ -5114,14 +5106,14 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5114 5106 for (const item of list) {
5115 5107 const checkbox = UseLayUi.createCheckBox({
5116 5108 dataSource: item,
5117   - layFilter: item.checkboxName,
  5109 + layFilter: item.type,
5118 5110 valueField: 'type',
5119 5111 labelField: 'label',
5120 5112 })
5121 5113 const template = `
5122   - <div class="${ eventNodeCls }">
5123   - ${ checkbox }
5124   - <i id="${ item.type }"></i>
  5114 + <div class="${eventNodeCls}">
  5115 + <div>${checkbox}</div>
  5116 + <i id="${item.type}"></i>
5125 5117 </div>`
5126 5118 eventList.push(template)
5127 5119 }
... ... @@ -5132,230 +5124,290 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5132 5124 /**
5133 5125 * @description 创建数据源模块
5134 5126 */
5135   - function createDataSourcePanel() {
5136   - const enumActionEl = {
5137   - ORG_EL: 'dataSourceOrg',
5138   - DEVICE_EL: 'dataSourceDevice',
5139   - SLAVE_DEVICE_EL: 'dataSourceSlaveDevice',
5140   - ATTR_EL: 'dataSourceAttr',
5141   - }
  5127 + // function createDataSourcePanel() {
  5128 + // const enumActionEl = {
  5129 + // ORG_EL: 'dataSourceOrg',
  5130 + // DEVICE_EL: 'dataSourceDevice',
  5131 + // SLAVE_DEVICE_EL: 'dataSourceSlaveDevice',
  5132 + // ATTR_EL: 'dataSourceAttr',
  5133 + // }
  5134 + //
  5135 + // const fragment = document.createDocumentFragment()
  5136 + // const defaultPanel = createPanel()
  5137 + // const title = createTitle('数据源')
  5138 + // let orgPanel, devicePanel, slaveDevicePanel, attrsPanel;
  5139 + // $(title).addClass('override__title--default')
  5140 + // $(defaultPanel).addClass('override__panel--default')
  5141 + //
  5142 + // /**
  5143 + // * @description 设备列表
  5144 + // */
  5145 + // let deviceList = []
  5146 + //
  5147 + //
  5148 + // /**
  5149 + // * @description 生成组织选择
  5150 + // */
  5151 + // async function generatorOrgTres() {
  5152 + // orgPanel = defaultPanel.cloneNode(false)
  5153 + // const orgContainer = `<div id="${ enumActionEl.ORG_EL }"></div>`
  5154 + // $(orgPanel).append(orgContainer)
  5155 + //
  5156 + // const [ err, res ] = await to(ConfigurationNodeApi.getOrgTree())
  5157 + // if (err) return
  5158 + // treeList = res
  5159 + //
  5160 + // UseLayUi.createTreeSelect({
  5161 + // elem: `#${ enumActionEl.ORG_EL }`,
  5162 + // layFilter: enumDataSourceConst.ORG_ID,
  5163 + // className: 'data-source__org--override',
  5164 + // label: '组织',
  5165 + // singleUsage: false,
  5166 + // treeProps: {
  5167 + // data: treeList,
  5168 + // onlyIconControl: true,
  5169 + // click(node) {
  5170 + // currentCheckedOrgNode = node.data.id
  5171 + // getDevicesByOrgId(node.data.id)
  5172 + // },
  5173 + // },
  5174 + // })
  5175 + // }
  5176 + //
  5177 + //
  5178 + // /**
  5179 + // * @description 生成设备选择器
  5180 + // */
  5181 + // function generatorDeviceSelect() {
  5182 + // devicePanel = defaultPanel.cloneNode(false)
  5183 + // const deviceSelect = UseLayUi.createSelect({
  5184 + // label: '设备',
  5185 + // layFilter: enumDataSourceConst.DEVICE_ID,
  5186 + // className: 'data-panel__select',
  5187 + // })
  5188 + // $(devicePanel).attr('id', enumActionEl.DEVICE_EL).append(deviceSelect)
  5189 + // }
  5190 + //
  5191 + // /**
  5192 + // * @description 生成从设备选择器
  5193 + // */
  5194 + // function generatorSlaveDevice() {
  5195 + // slaveDevicePanel = defaultPanel.cloneNode(false)
  5196 + // const slaveDeviceSelect = UseLayUi.createSelect({
  5197 + // label: '子设备',
  5198 + // layFilter: enumDataSourceConst.SLAVE_DEVICE_ID,
  5199 + // className: 'data-panel__select',
  5200 + // onClick(data) {
  5201 + // const { value } = data
  5202 + // getAttrByDeviceId(value)
  5203 + // },
  5204 + // })
  5205 + // $(slaveDevicePanel).css({ display: 'none' }).attr('id', enumActionEl.SLAVE_DEVICE_EL).append(slaveDeviceSelect)
  5206 + // }
  5207 + //
  5208 + // /**
  5209 + // * @description 生成属性选择器
  5210 + // */
  5211 + // function generatorAttrSelect() {
  5212 + // attrsPanel = defaultPanel.cloneNode(false)
  5213 + // const attrsSelect = UseLayUi.createSelect({
  5214 + // label: '属性',
  5215 + // layFilter: enumDataSourceConst.ATTR,
  5216 + // className: 'data-panel__select',
  5217 + // })
  5218 + // $(attrsPanel).attr('id', enumActionEl.ATTR_EL).append(attrsSelect)
  5219 + //
  5220 + // }
  5221 + //
  5222 + //
  5223 + // /**
  5224 + // * @description 根据组织ID获取设备
  5225 + // */
  5226 + // async function getDevicesByOrgId(organizationId) {
  5227 + // if (organizationId) {
  5228 + // const items = deviceList = await ConfigurationNodeApi.getMasterDevice(organizationId);
  5229 + // $(`#${ enumActionEl.DEVICE_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: items }))
  5230 + // form.render('select', CONTAINER_FILTER)
  5231 + // }
  5232 + // }
  5233 + //
  5234 + // /**
  5235 + // * @description 通过主设备ID获取从设备
  5236 + // */
  5237 + // async function getSlaveDeviceByMasterDeviceId(orgId, deviceId) {
  5238 + // if (deviceId && currentCheckedOrgNode) {
  5239 + // const items = await ConfigurationNodeApi.getSlaveDevice(orgId, deviceId);
  5240 + // $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: items }))
  5241 + // form.render('select', CONTAINER_FILTER)
  5242 + // }
  5243 + // }
  5244 + //
  5245 + // /**
  5246 + // * @description 根据设备ID获取属性
  5247 + // */
  5248 + // async function getAttrByDeviceId(tbDeviceId) {
  5249 + // if (tbDeviceId) {
  5250 + // const [ err, res ] = await to(ConfigurationNodeApi.getDeviceAttr(tbDeviceId))
  5251 + // $(`#${ enumActionEl.ATTR_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: res }))
  5252 + // form.render('select', CONTAINER_FILTER)
  5253 + // }
  5254 + // }
  5255 + //
  5256 + //
  5257 + // /**
  5258 + // * @description 数据回显
  5259 + // */
  5260 + // async function echoData() {
  5261 + //
  5262 + // echoRefreshFn = () => {
  5263 + // echoDataSource()
  5264 + // echoActionType()
  5265 + // form.render(null, CONTAINER_FILTER)
  5266 + // }
  5267 + //
  5268 + // await getNodeBindInfo()
  5269 + //
  5270 + //
  5271 + // function echoDataSource() {
  5272 + // const { dataSources = [] } = currentNodeData || {}
  5273 + // const [ dataSource = {} ] = dataSources
  5274 + // const { orgId, deviceId, slaveDeviceId, attr } = dataSource
  5275 + // const queue = []
  5276 + // if (orgId) {
  5277 + // currentCheckedOrgNode = orgId
  5278 + // queue.push(getDevicesByOrgId(orgId))
  5279 + // }
  5280 + // if (slaveDeviceId) {
  5281 + // queue.push(getSlaveDeviceByMasterDeviceId(orgId, deviceId))
  5282 + // $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' })
  5283 + // queue.push(getAttrByDeviceId(slaveDeviceId))
  5284 + // } else {
  5285 + // queue.push(getAttrByDeviceId(deviceId))
  5286 + // }
  5287 + // Promise.all(queue)
  5288 + // .finally(() => {
  5289 + // const orgNode = UseLayUi.findTreeObjectByField(treeList, currentCheckedOrgNode)
  5290 + // $(`#${ enumActionEl.ORG_EL } input[name="${ enumDataSourceConst.ORG_ID }"]`).parent().find('span').html(orgNode?.name)
  5291 + // form.val(CONTAINER_FILTER, {
  5292 + // orgId,
  5293 + // deviceId,
  5294 + // slaveDeviceId,
  5295 + // attr,
  5296 + // })
  5297 + // })
  5298 + // }
  5299 + //
  5300 + // async function echoActionType() {
  5301 + // const act = currentNodeData.act ?? []
  5302 + // const event = currentNodeData.event ?? []
  5303 + // const actionType = {}
  5304 + // for (const item of act) {
  5305 + // if (!item.condition || !item.condition?.length) {
  5306 + // $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', true)
  5307 + // } else {
  5308 + // $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', false)
  5309 + // }
  5310 + // actionType[item.type] = item.enabled
  5311 + // }
  5312 + // for (const item of event) {
  5313 + // if (!item.content) {
  5314 + // $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', true)
  5315 + // } else {
  5316 + // $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', false)
  5317 + // }
  5318 + // actionType[item.type] = item.enabled
  5319 + // }
  5320 + // form.val(CONTAINER_FILTER, actionType)
  5321 + // }
  5322 + // }
  5323 + //
  5324 + // function mount() {
  5325 + // generatorOrgTres()
  5326 + // generatorDeviceSelect()
  5327 + // generatorSlaveDevice()
  5328 + // generatorAttrSelect()
  5329 + // echoData()
  5330 + //
  5331 + // $(fragment).append(title).append(orgPanel).append(devicePanel).append(slaveDevicePanel).append(attrsPanel)
  5332 + //
  5333 + // $(container).append(fragment)
  5334 + //
  5335 + // }
  5336 + //
  5337 + // mount()
  5338 + //
  5339 + // }
5142 5340
  5341 + function createDataSourcePanel() {
5143 5342 const fragment = document.createDocumentFragment()
5144 5343 const defaultPanel = createPanel()
5145 5344 const title = createTitle('数据源')
5146   - let orgPanel, devicePanel, slaveDevicePanel, attrsPanel;
5147   - $(title).addClass('override__title--default')
5148 5345 $(defaultPanel).addClass('override__panel--default')
5149   -
5150   - /**
5151   - * @description 设备列表
5152   - */
5153   - let deviceList = []
5154   -
5155   -
5156   - /**
5157   - * @description 生成组织选择
5158   - */
5159   - async function generatorOrgTres() {
5160   - orgPanel = defaultPanel.cloneNode(false)
5161   - const orgContainer = `<div id="${ enumActionEl.ORG_EL }"></div>`
5162   - $(orgPanel).append(orgContainer)
5163   -
5164   - const [ err, res ] = await to(ConfigurationNodeApi.getOrgTree())
5165   - if (err) return
5166   - treeList = res
5167   -
5168   - UseLayUi.createTreeSelect({
5169   - elem: `#${ enumActionEl.ORG_EL }`,
5170   - layFilter: enumDataSourceConst.ORG_ID,
5171   - className: 'data-source__org--override',
5172   - label: '组织',
5173   - singleUsage: false,
5174   - treeProps: {
5175   - data: treeList,
5176   - onlyIconControl: true,
5177   - click(node) {
5178   - currentCheckedOrgNode = node.data.id
5179   - getDevicesByOrgId(node.data.id)
5180   - },
5181   - },
5182   - })
5183   - }
5184   -
5185   - /**
5186   - * @description 生成设备选择器
5187   - */
5188   - function generatorDeviceSelect() {
5189   - devicePanel = defaultPanel.cloneNode(false)
5190   - const deviceSelect = UseLayUi.createSelect({
5191   - label: '设备',
5192   - layFilter: enumDataSourceConst.DEVICE_ID,
5193   - className: 'data-panel__select',
5194   - onClick(data) {
5195   - const { value } = data
5196   - const selected = deviceList.find(item => item.id === value)
5197   - if (selected.deviceType === enumDataSourceConst.GATEWAY) {
5198   - $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' })
5199   - getSlaveDeviceByMasterDeviceId(currentCheckedOrgNode, selected.id)
5200   - } else {
5201   - $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'none' })
5202   - getAttrByDeviceId(selected.id)
5203   - }
5204   - },
5205   - })
5206   - $(devicePanel).attr('id', enumActionEl.DEVICE_EL).append(deviceSelect)
5207   - }
5208   -
5209   - /**
5210   - * @description 生成从设备选择器
5211   - */
5212   - function generatorSlaveDevice() {
5213   - slaveDevicePanel = defaultPanel.cloneNode(false)
5214   - const slaveDeviceSelect = UseLayUi.createSelect({
5215   - label: '子设备',
5216   - layFilter: enumDataSourceConst.SLAVE_DEVICE_ID,
5217   - className: 'data-panel__select',
5218   - onClick(data) {
5219   - const { value } = data
5220   - getAttrByDeviceId(value)
5221   - },
5222   - })
5223   - $(slaveDevicePanel).css({ display: 'none' }).attr('id', enumActionEl.SLAVE_DEVICE_EL).append(slaveDeviceSelect)
5224   - }
5225   -
5226   - /**
5227   - * @description 生成属性选择器
5228   - */
5229   - function generatorAttrSelect() {
5230   - attrsPanel = defaultPanel.cloneNode(false)
5231   - const attrsSelect = UseLayUi.createSelect({
5232   - label: '属性',
5233   - layFilter: enumDataSourceConst.ATTR,
5234   - className: 'data-panel__select',
5235   - })
5236   - $(attrsPanel).attr('id', enumActionEl.ATTR_EL).append(attrsSelect)
5237   -
5238   - }
5239   -
5240   -
5241   - /**
5242   - * @description 根据组织ID获取设备
5243   - */
5244   - async function getDevicesByOrgId(organizationId) {
5245   - if (organizationId) {
5246   - const items = deviceList = await ConfigurationNodeApi.getMasterDevice(organizationId);
5247   - $(`#${ enumActionEl.DEVICE_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: items }))
5248   - form.render('select', CONTAINER_FILTER)
5249   - }
5250   - }
5251   -
5252   - /**
5253   - * @description 通过主设备ID获取从设备
5254   - */
5255   - async function getSlaveDeviceByMasterDeviceId(orgId, deviceId) {
5256   - if (deviceId && currentCheckedOrgNode) {
5257   - const items = await ConfigurationNodeApi.getSlaveDevice(orgId, deviceId);
5258   - $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: items }))
5259   - form.render('select', CONTAINER_FILTER)
5260   - }
5261   - }
5262   -
5263   - /**
5264   - * @description 根据设备ID获取属性
5265   - */
5266   - async function getAttrByDeviceId(tbDeviceId) {
5267   - if (tbDeviceId) {
5268   - const [ err, res ] = await to(ConfigurationNodeApi.getDeviceAttr(tbDeviceId))
5269   - $(`#${ enumActionEl.ATTR_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: res }))
5270   - form.render('select', CONTAINER_FILTER)
5271   - }
5272   - }
  5346 + $(title).css({ padding: '6px 0 6px 6px' })
5273 5347
5274 5348
5275   - /**
5276   - * @description 数据回显
5277   - */
5278   - async function echoData() {
  5349 + async function mount() {
  5350 + const { component, echoDataSource } = generatorDataSourceComponent({ validate: false })
  5351 + $(fragment).append(title).append(component)
  5352 + $(container).append(fragment)
5279 5353
5280   - echoRefreshFn = () => {
5281   - echoDataSource()
  5354 + /**
  5355 + * @description 回显数据
  5356 + * @type {Function}
  5357 + */
  5358 + const refreshFn = echoRefreshFn
  5359 + echoRefreshFn = function () {
  5360 + refreshFn.apply(this)
  5361 + const { dataSources: [dataSource] = [] } = currentNodeData || {}
  5362 + echoDataSource(dataSource)
5282 5363 echoActionType()
5283 5364 form.render(null, CONTAINER_FILTER)
5284 5365 }
5285 5366
5286 5367 await getNodeBindInfo()
  5368 + }
5287 5369
5288   -
5289   - function echoDataSource() {
5290   - const { dataSources = [] } = currentNodeData || {}
5291   - const [ dataSource = {} ] = dataSources
5292   - const { orgId, deviceId, slaveDeviceId, attr } = dataSource
5293   - const queue = []
5294   - if (orgId) {
5295   - currentCheckedOrgNode = orgId
5296   - queue.push(getDevicesByOrgId(orgId))
5297   - }
5298   - if (slaveDeviceId) {
5299   - queue.push(getSlaveDeviceByMasterDeviceId(orgId, deviceId))
5300   - $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' })
5301   - queue.push(getAttrByDeviceId(slaveDeviceId))
  5370 + async function echoActionType() {
  5371 + const act = currentNodeData.act ?? []
  5372 + const event = currentNodeData.event ?? []
  5373 + const actionType = {}
  5374 + for (const item of act) {
  5375 + if (!item.condition || !item.condition?.length) {
  5376 + $(`.interaction__container input[name="${item.type}"]`).attr('disabled', true)
5302 5377 } else {
5303   - queue.push(getAttrByDeviceId(deviceId))
  5378 + $(`.interaction__container input[name="${item.type}"]`).attr('disabled', false)
5304 5379 }
5305   - Promise.all(queue)
5306   - .finally(() => {
5307   - const orgNode = UseLayUi.findTreeObjectByField(treeList, currentCheckedOrgNode)
5308   - $(`#${ enumActionEl.ORG_EL } input[name="${ enumDataSourceConst.ORG_ID }"]`).parent().find('span').html(orgNode?.name)
5309   - form.val(CONTAINER_FILTER, {
5310   - orgId,
5311   - deviceId,
5312   - slaveDeviceId,
5313   - attr,
5314   - })
5315   - })
  5380 + actionType[item.type] = item.enabled
5316 5381 }
5317   -
5318   - async function echoActionType() {
5319   - const act = currentNodeData.act ?? []
5320   - const event = currentNodeData.event ?? []
5321   - const actionType = {}
5322   - for (const item of act) {
5323   - if (!item.condition || !item.condition?.length) {
5324   - $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', true)
5325   - } else {
5326   - $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', false)
5327   - }
5328   - actionType[item.type] = item.enabled
5329   - }
5330   - for (const item of event) {
5331   - if (!item.content) {
5332   - $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', true)
5333   - } else {
5334   - $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', false)
5335   - }
5336   - actionType[item.type] = item.enabled
  5382 + for (const item of event) {
  5383 + if (!item.content) {
  5384 + $(`.interaction__container input[name="${item.type}"]`).attr('disabled', true)
  5385 + } else {
  5386 + $(`.interaction__container input[name="${item.type}"]`).attr('disabled', false)
5337 5387 }
5338   - form.val(CONTAINER_FILTER, actionType)
  5388 + actionType[item.type] = item.enabled
5339 5389 }
5340   - }
5341   -
5342   - function mount() {
5343   - generatorOrgTres()
5344   - generatorDeviceSelect()
5345   - generatorSlaveDevice()
5346   - generatorAttrSelect()
5347   - echoData()
5348   -
5349   - $(fragment).append(title).append(orgPanel).append(devicePanel).append(slaveDevicePanel).append(attrsPanel)
5350   -
5351   - $(container).append(fragment)
5352   -
  5390 + form.val(CONTAINER_FILTER, actionType)
5353 5391 }
5354 5392
5355 5393 mount()
5356   -
5357 5394 }
5358 5395
  5396 + // /**
  5397 + // * @description 创建功能模块
  5398 + // */
  5399 + // function createFunctionPanel() {
  5400 + // const fragment = document.createDocumentFragment()
  5401 + // const title = createTitle('功能')
  5402 + // $(title).addClass('override__title--default')
  5403 + // fragment.append(title)
  5404 + // generateActionEventNode(functionList).forEach(item => {
  5405 + // const panel = createPanel()
  5406 + // $(panel).addClass('override__panel--default').append(item)
  5407 + // $(fragment).append(panel)
  5408 + // })
  5409 + // $(container).append(fragment)
  5410 + // }
5359 5411
5360 5412 /**
5361 5413 * @description 创建数据交互模块
... ... @@ -5365,16 +5417,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5365 5417 const title = createTitle('数据交互')
5366 5418 $(title).addClass('override__title--default')
5367 5419 fragment.append(title)
5368   - generateDataEventNode().forEach(item => {
  5420 + generateActionEventNode(interactionList).forEach(item => {
5369 5421 const panel = createPanel()
5370 5422 $(panel).addClass('override__panel--default').append(item)
5371 5423 $(fragment).append(panel)
5372 5424 })
5373   - // Object.keys(enumInteractionType).forEach(key => {
5374   - // form.on(`checkbox(${ key })`, event => {
5375   - // const isChecked = $(event.othis).hasClass('layui-form-checked')
5376   - // })
5377   - // })
5378 5425 $(container).append(fragment)
5379 5426 }
5380 5427
... ... @@ -5419,7 +5466,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5419 5466 [enumDataSourceConst.ATTR]: field[enumDataSourceConst.ATTR],
5420 5467 },
5421 5468 }
5422   - const allType = [ ...interactionList, ...dynamicEffectList ]
  5469 + const allType = [...interactionList, ...dynamicEffectList]
5423 5470 for (const item of allType) {
5424 5471 if (field[item.type] === ENABLED_FLAG) {
5425 5472 const enableItem = currentNodeData[item.category].find(each => each.type === item.type)
... ... @@ -5435,7 +5482,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5435 5482 })
5436 5483 }
5437 5484 }
5438   - const [ err, res ] = await to(ConfigurationNodeApi.updateNodeInfo(value))
  5485 + const [err, res] = await to(ConfigurationNodeApi.updateNodeInfo(value))
5439 5486 if (err) return
5440 5487 UseLayUi.successMsg()
5441 5488 await getNodeBindInfo()
... ... @@ -5444,96 +5491,767 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5444 5491 }
5445 5492
5446 5493 /**
5447   - * @description 处理数据交互 - down || up 按下与抬起
  5494 + * @description
5448 5495 */
5449   - function handleDownOrUpEvent(event) {
5450   -
5451   - if (!currentCheckedOrgNode) {
5452   - layer.msg('请先选择组织')
5453   - return
5454   - }
5455   - // 事件类型
5456   - const enumEventType = {
5457   - DOWN: "按下",
5458   - UP: "抬起",
5459   - SINGLE: "单击",
5460   - DOUBLE: "双击",
5461   - };
  5496 + function handleSettingVarImage(event) {
5462 5497
5463 5498 const enumActionEl = {
5464 5499 /**
5465   - * @description 表体节点
  5500 + * @description layer 保存按钮
5466 5501 */
5467   - DEVICE_DATA_BODY_EL: 'deviceDataTbody',
  5502 + LAYER_SUBMIT_FILTER: 'varImageLayerFilter',
5468 5503
5469 5504 /**
5470   - * @description 删除行节点
  5505 + * @description 上传图片layer 按钮控制
5471 5506 */
5472   - DEL_ROW_EL: 'deleteRow',
  5507 + IMAGE_LAYER_FILTER: 'uploadImageLayerFilter',
5473 5508
5474 5509 /**
5475   - * @description 增加行节点
  5510 + * @description 行控制
5476 5511 */
5477   - ADD_ROW_EL: 'addRow',
  5512 + ROW_FILTER: 'varImageTableRowFilter',
5478 5513
5479 5514 /**
5480   - * @descripton
  5515 + * @description 颜色控制
5481 5516 */
5482   - ROW_FILTER: 'interactionRowFilter',
  5517 + COLOR_PICKER_FILTER: 'varImageTableColorPickerFilter',
5483 5518
5484 5519 /**
5485   - * @description json editor
  5520 + * @description 最小值控制
5486 5521 */
5487   - EDITOR_JSON: 'editor__json-',
  5522 + MIN_FILTER: 'varImageTableMinFilter',
5488 5523
5489 5524 /**
5490   - * @description 弹出层保存 filter
  5525 + * @description 最大值控制
5491 5526 */
5492   - LAYER_SUBMIT_FILTER: 'interactionLayerSubmit',
  5527 + MAX_FILTER: 'varImageTableMaxFilter',
5493 5528
5494 5529 /**
5495   - * @description ace builder
  5530 + * @description 表体
5496 5531 */
5497   - JSON: 'ace__builder-json',
5498   - }
  5532 + TABLE_BODY_EL: 'variableImageTable',
5499 5533
  5534 + /**
  5535 + * @description 添加行控制
  5536 + */
  5537 + ADD_ROW_EL: 'variableImageTableAddRow',
5500 5538
5501   - /**
5502   - * @description 所有设备选项
5503   - * @type {*[]}
5504   - */
5505   - let allDeviceOptions = []
  5539 + /**
  5540 + * @description 设置图片控制
  5541 + */
  5542 + SET_IMG_EL: 'variableImageTableSetImgEl',
5506 5543
5507   - let addRowNumber = 0
  5544 + /**
  5545 + * @description 预览区域控制
  5546 + */
  5547 + PREVIEW_IMG_CONTAINER: 'img__container',
5508 5548
5509   - const getRowFilter = (rowNumber) => `${ enumActionEl.ROW_FILTER }${ rowNumber }`
  5549 + /**
  5550 + * @description 删除图片控制
  5551 + */
  5552 + DEL_PREVIEW_IMG: 'img__delete',
5510 5553
5511   - /**
5512   - * @description 枚举常量
5513   - * @enum DEVICE
5514   - */
5515   - const enumConst = {
5516 5554 /**
5517   - * @description 设备
  5555 + * @description 删除行控制
5518 5556 */
5519   - DEVICE: 'deviceId',
  5557 + DEL_ROW_EL: 'variableImageTableDelRow',
  5558 +
5520 5559 /**
5521   - * @description 子设备
  5560 + * @description 图片选中区域节点
5522 5561 */
5523   - SLAVE_DEVICE: 'slaveDeviceId',
  5562 + IMG_SELECT_CONTAINER_EL: 'imgSelectContainerEl',
  5563 +
5524 5564 /**
5525   - * @description 变量
  5565 + * @description 切换图片来源控制
5526 5566 */
5527   - ATTR: 'attr',
  5567 + SWITCH_IMG_ORIGIN_FILTER: 'switchImgOriginFilter',
  5568 +
5528 5569 /**
5529   - * @description 下发值
  5570 + * @description 图片选中侧边栏节点
5530 5571 */
5531   - VALUE: 'value',
  5572 + VAR_IMG_CONTAINER_SIDEBAR: 'var-image__container-sidebar',
5532 5573
5533 5574 /**
5534   - * @description 方式
  5575 + * @description 图库图形选择区域
5535 5576 */
5536   - WAY: 'way',
  5577 + VAR_IMG_CONTAINER_CONTENT: 'var-image__container-content',
  5578 +
  5579 + /**
  5580 + * @description 图库图形项
  5581 + */
  5582 + VAR_IMG_ITEM: 'var-image__img-item',
  5583 +
  5584 + /**
  5585 + * @description 图库图形选中控制
  5586 + */
  5587 + VAR_IMG_ITEM_CHECKED: 'var-image__img-item--checked',
  5588 +
  5589 + /**
  5590 + * @description 图库图形类别节点
  5591 + */
  5592 + VAR_IMG_CATEGORY: 'var-image__category',
  5593 +
  5594 + /**
  5595 + * @description 图库图形类别选择状态
  5596 + */
  5597 + VAR_IMG_CATEGORY_CHECKED: 'var-image__category--checked',
  5598 +
  5599 + /**
  5600 + * @description 本地上传图片节点
  5601 + */
  5602 + UPLOAD_LOCAL_FILE_EL: 'var-image__container--local',
  5603 +
  5604 + /**
  5605 + * @description 本地上传图片状态
  5606 + */
  5607 + IMAGE_UPLOAD_STATE_EL: 'var-image__upload-state',
  5608 +
  5609 + /**
  5610 + * @description 预览图片状态
  5611 + */
  5612 + IMAGE_PREVIEW_EL: 'preview__img--preview',
  5613 +
  5614 + /**
  5615 + * @description 本地图片上传删除按钮
  5616 + */
  5617 + IMAGE_DEL_PREVIEW_EL: 'var-image__del-icon',
  5618 +
  5619 + /**
  5620 + * @description
  5621 + */
  5622 + DATA_SOURCE_COMP_EL: 'varImgDataSourceEl',
  5623 + }
  5624 +
  5625 + const enumConst = {
  5626 +
  5627 + /**
  5628 + * @description 最小值
  5629 + */
  5630 + MIN: 'min',
  5631 +
  5632 + /**
  5633 + * @description 最大值
  5634 + */
  5635 + MAX: 'max',
  5636 +
  5637 + /**
  5638 + * @description 图片字段 key
  5639 + */
  5640 + IMAGE: 'image',
  5641 +
  5642 + /**
  5643 + * @description 颜色
  5644 + */
  5645 + COLOR: 'color',
  5646 +
  5647 + /**
  5648 + * @description 图片来源
  5649 + */
  5650 + IMAGE_ORIGIN: 'imageOrigin',
  5651 +
  5652 + /**
  5653 + * @description 图库图形类别
  5654 + */
  5655 + IMAGE_GALLERY_CATEGORY: 'category',
  5656 +
  5657 + /**
  5658 + * @description 图表图形路径
  5659 + */
  5660 + IMAGE_GALLERY_IMG_PATH: 'imgPath',
  5661 + }
  5662 +
  5663 + const enumImageOriginType = {
  5664 + LOCAL: 'local',
  5665 + GALLERY: 'gallery',
  5666 + }
  5667 +
  5668 + /**
  5669 + * @description 图片状态保存
  5670 + */
  5671 + let imageState = {}
  5672 +
  5673 + let addRowNumber = 0
  5674 +
  5675 + let getDataSourceValue = () => {
  5676 + }
  5677 +
  5678 + const getRowFilter = (rowNumber) => `${enumActionEl.ROW_FILTER}${rowNumber}`
  5679 +
  5680 + const getColorPickerFilter = (rowNumber) => `${enumActionEl.COLOR_PICKER_FILTER}${rowNumber}`
  5681 +
  5682 + /**
  5683 + * @description 监听表格中的事件
  5684 + */
  5685 + function generatorEventListen() {
  5686 + createInputListener()
  5687 + createAddRowEvent()
  5688 + createDelRowEvent()
  5689 + createSetImgEvent()
  5690 + createDelPreviewImgEvent()
  5691 + }
  5692 +
  5693 + /**
  5694 + * @description 删除行
  5695 + */
  5696 + function createDelRowEvent() {
  5697 + $(`#${enumActionEl.TABLE_BODY_EL}`).on('click', `.${enumActionEl.DEL_ROW_EL}`, (event) => {
  5698 + $(event.target).parents('tr').remove()
  5699 + })
  5700 + }
  5701 +
  5702 + /**
  5703 + * @description 添加行事件
  5704 + */
  5705 + function createAddRowEvent() {
  5706 + $(`#${enumActionEl.ADD_ROW_EL}`).on('click', () => {
  5707 + addRecord()
  5708 + })
  5709 + }
  5710 +
  5711 + /**
  5712 + * @description 删除已选择的变量图片
  5713 + */
  5714 + function createDelPreviewImgEvent() {
  5715 + $(`#${enumActionEl.TABLE_BODY_EL}`).on('click', `.${enumActionEl.DEL_PREVIEW_IMG}`, (event) => {
  5716 + $(event.target)
  5717 + .parents(`div.${enumActionEl.PREVIEW_IMG_CONTAINER}`).find('img').attr('src', '')
  5718 + const rowFilter = $(event.target).parents(`tr`).attr('lay-filter')
  5719 + form.val(rowFilter, {
  5720 + [enumConst.IMAGE_ORIGIN]: null,
  5721 + [enumConst.IMAGE_GALLERY_CATEGORY]: null,
  5722 + [enumConst.IMAGE_GALLERY_IMG_PATH]: null,
  5723 + })
  5724 + })
  5725 + }
  5726 +
  5727 + /**
  5728 + * @description 选择图片
  5729 + */
  5730 + function createSetImgEvent() {
  5731 + $(`#${enumActionEl.TABLE_BODY_EL}`).on('click', `.${enumActionEl.SET_IMG_EL}`, (event) => {
  5732 + if ($(event.target).hasClass(enumActionEl.DEL_PREVIEW_IMG)) return
  5733 + const rowFilter = $(event.target).parents('tr').attr('lay-filter')
  5734 + createUploadImgLayer(rowFilter)
  5735 + })
  5736 + }
  5737 +
  5738 + /**
  5739 + * @description 创建本地图片上传区域
  5740 + */
  5741 + function createLocalFileContainer() {
  5742 + return `
  5743 + <div id="${enumActionEl.UPLOAD_LOCAL_FILE_EL}" class="layui-upload">
  5744 + <div class="preview__img">
  5745 + <img src="" class="layui-upload-img" id="${enumActionEl.IMAGE_PREVIEW_EL}">
  5746 + <div class="var_image__add-icon">+</div>
  5747 + <div class="var-image__del-icon">x</div>
  5748 + </div>
  5749 + <div class="layui-upload-list"></div>
  5750 + </div>
  5751 + <div id="${enumActionEl.IMAGE_UPLOAD_STATE_EL}"></div>
  5752 + <div style="margin-top: 30px;">图片格式支持pngjpg(jpeg)gif,大小不能超过5M</div>
  5753 + `
  5754 + }
  5755 +
  5756 + /**
  5757 + * @description 上传
  5758 + */
  5759 + function uploadFileEvent() {
  5760 + $(`.${enumActionEl.IMAGE_DEL_PREVIEW_EL}`).on('click', (event) => {
  5761 + event.stopPropagation()
  5762 + $(`#${enumActionEl.IMAGE_PREVIEW_EL}`).attr('src', '')
  5763 + imageState[enumConst.IMAGE_GALLERY_IMG_PATH] = null
  5764 + })
  5765 + const uploadInst = upload.render({
  5766 + elem: `#${enumActionEl.UPLOAD_LOCAL_FILE_EL}`,
  5767 + auto: false,
  5768 + size: 1024 * 5,
  5769 + url: '/yt/oss/upload',
  5770 + method: 'post',
  5771 + choose(obj) {
  5772 + obj.preview(async function (index, file, result) {
  5773 + const formData = new FormData()
  5774 + formData.set('file', file)
  5775 + const [err, res] = await to(ConfigurationNodeApi.uploadImg(formData))
  5776 + if (!err) {
  5777 + $(`#${enumActionEl.IMAGE_PREVIEW_EL}`).attr('src', result)
  5778 + const { fileStaticUri = '' } = res
  5779 + imageState[enumConst.IMAGE_GALLERY_IMG_PATH] = fileStaticUri
  5780 + }
  5781 + });
  5782 + },
  5783 + });
  5784 + }
  5785 +
  5786 + /**
  5787 + * @description 设置选中样式
  5788 + * @param event
  5789 + * @param nodeClass
  5790 + * @param styleClass
  5791 + */
  5792 + function setImageSelectedStyle(event, nodeClass, styleClass) {
  5793 + if (!$(event.target).hasClass(nodeClass)) return
  5794 + $(`.${nodeClass}`).each(function () {
  5795 + $(this).removeClass(styleClass)
  5796 + })
  5797 + $(event.target).addClass(styleClass)
  5798 + }
  5799 +
  5800 + /**
  5801 + * @description 切换图库图形
  5802 + * @param event
  5803 + */
  5804 + function switchGalleryLib(event) {
  5805 + const key = $(event.target).attr(enumConst.IMAGE_GALLERY_CATEGORY)
  5806 + const category = sidebarInstance.getVariableImageLib(key)
  5807 + if (key && category) {
  5808 + $(`#${enumActionEl.VAR_IMG_CONTAINER_CONTENT}`).html(
  5809 + category.lib.reduce((prev, next) => prev + `<div class="${enumActionEl.VAR_IMG_ITEM}" title="${next.name}"><img src="${next.staticPath}" alt=""></div>`, ''),
  5810 + )
  5811 + }
  5812 + }
  5813 +
  5814 + /**
  5815 + * @description 图片来源事件监听
  5816 + */
  5817 + function generatorSelectImgEventListener() {
  5818 + $(`#${enumActionEl.VAR_IMG_CONTAINER_CONTENT}`).on('click', event => {
  5819 + setImageSelectedStyle(event, enumActionEl.VAR_IMG_ITEM, enumActionEl.VAR_IMG_ITEM_CHECKED)
  5820 + imageState[enumConst.IMAGE_GALLERY_IMG_PATH] = $(event.target).find('img').attr('src')
  5821 + })
  5822 + $(`#${enumActionEl.VAR_IMG_CONTAINER_SIDEBAR}`).on('click', event => {
  5823 + setImageSelectedStyle(event, enumActionEl.VAR_IMG_CATEGORY, enumActionEl.VAR_IMG_CATEGORY_CHECKED)
  5824 + imageState[enumConst.IMAGE_GALLERY_CATEGORY] = $(event.target).attr(enumConst.IMAGE_GALLERY_CATEGORY)
  5825 + imageState[enumConst.IMAGE_GALLERY_IMG_PATH] = null
  5826 + switchGalleryLib(event)
  5827 + })
  5828 + }
  5829 +
  5830 + /**
  5831 + * @description 创建图库图形上传区域
  5832 + */
  5833 + function createGalleryFileContainer() {
  5834 + const category = sidebarInstance.getAllVariableImageLib()
  5835 + const defaultShow = category[0] || { lib: [] }
  5836 + return `
  5837 + <div class="var-image__container--gallery">
  5838 + <div id="${enumActionEl.VAR_IMG_CONTAINER_SIDEBAR}">
  5839 + ${category.reduce((prev, next) => prev + `<div class="${enumActionEl.VAR_IMG_CATEGORY}" ${enumConst.IMAGE_GALLERY_CATEGORY}="${next.key}">${next.label}</div>`, '')}
  5840 + </div>
  5841 + <div id="${enumActionEl.VAR_IMG_CONTAINER_CONTENT}">
  5842 + ${defaultShow.lib.reduce((prev, next) => prev + `<div class="${enumActionEl.VAR_IMG_ITEM}" title="${next.name}"><img src="${next.staticPath}" alt=""></div>`, '')}
  5843 + </div>
  5844 + </div>
  5845 + `
  5846 + }
  5847 +
  5848 + /**
  5849 + * @description 切换
  5850 + */
  5851 + function switchUploadImgTypeEventListener() {
  5852 + form.on(`radio(${enumActionEl.SWITCH_IMG_ORIGIN_FILTER})`, event => {
  5853 + const { value } = event
  5854 + imageState = {}
  5855 + if (value === enumImageOriginType.LOCAL) {
  5856 + $(`#${enumActionEl.IMG_SELECT_CONTAINER_EL}`).html(createLocalFileContainer())
  5857 + imageState[enumConst.IMAGE_ORIGIN] = enumImageOriginType.LOCAL
  5858 + uploadFileEvent()
  5859 + } else if (value === enumImageOriginType.GALLERY) {
  5860 + $(`#${enumActionEl.IMG_SELECT_CONTAINER_EL}`).html(createGalleryFileContainer())
  5861 + const defaultChecked = $(`.${enumActionEl.VAR_IMG_CATEGORY}`).eq(0)
  5862 + defaultChecked.addClass(enumActionEl.VAR_IMG_CATEGORY_CHECKED)
  5863 + imageState[enumConst.IMAGE_GALLERY_CATEGORY] = defaultChecked.attr(enumConst.IMAGE_GALLERY_CATEGORY)
  5864 + imageState[enumConst.IMAGE_ORIGIN] = enumImageOriginType.GALLERY
  5865 + generatorSelectImgEventListener()
  5866 + }
  5867 + })
  5868 + }
  5869 +
  5870 + /**
  5871 + * @description 设置选中图片及绑定参数
  5872 + * @param rowFilter
  5873 + */
  5874 + function setCheckedImg(rowFilter) {
  5875 + $(`#${enumActionEl.TABLE_BODY_EL}`)
  5876 + .find(`tr[lay-filter="${rowFilter}"]`)
  5877 + .find('img').attr('src', imageState[enumConst.IMAGE_GALLERY_IMG_PATH])
  5878 +
  5879 + form.val(rowFilter, {
  5880 + [enumConst.IMAGE_ORIGIN]: imageState[enumConst.IMAGE_ORIGIN],
  5881 + [enumConst.IMAGE_GALLERY_CATEGORY]: imageState[enumConst.IMAGE_GALLERY_CATEGORY],
  5882 + [enumConst.IMAGE_GALLERY_IMG_PATH]: imageState[enumConst.IMAGE_GALLERY_IMG_PATH],
  5883 + })
  5884 + }
  5885 +
  5886 + /**
  5887 + * @description 初始化并设置默认值
  5888 + */
  5889 + function initSelectImg() {
  5890 + switchUploadImgTypeEventListener()
  5891 + uploadFileEvent()
  5892 + imageState[enumConst.IMAGE_ORIGIN] = enumImageOriginType.LOCAL
  5893 + form.render()
  5894 + }
  5895 +
  5896 + /**
  5897 + * @description 创建上传图片layer
  5898 + */
  5899 + function createUploadImgLayer(rowFilter) {
  5900 + const content = `
  5901 + <div class="layui-form">
  5902 + <div class="layui-form-item">
  5903 + <div class="var-image__radio">
  5904 + <input type="radio" lay-filter="${enumActionEl.SWITCH_IMG_ORIGIN_FILTER}" name="${enumConst.IMAGE}" value="${enumImageOriginType.LOCAL}" title="本地图片" checked="">
  5905 + <input type="radio" lay-filter="${enumActionEl.SWITCH_IMG_ORIGIN_FILTER}" name="${enumConst.IMAGE}" value="${enumImageOriginType.GALLERY}" title="图库图形">
  5906 + </div>
  5907 + </div>
  5908 + </div>
  5909 + <div id="${enumActionEl.IMG_SELECT_CONTAINER_EL}">
  5910 + ${createLocalFileContainer()}
  5911 + </div>
  5912 + `
  5913 +
  5914 + layer.open({
  5915 + title: '图片',
  5916 + type: 1,
  5917 + content,
  5918 + skin: 'event-layer__override',
  5919 + area: '600px',
  5920 + btn: ["应用", "取消"],
  5921 + shade: ["0.7", "#fafafa"],
  5922 + yes(index) {
  5923 + layer.close(index)
  5924 + setCheckedImg(rowFilter)
  5925 + },
  5926 + but2(index, layero) {
  5927 + imageState = {}
  5928 + layer.close(index)
  5929 + },
  5930 + zIndex: layer.zIndex,
  5931 + async success(layero, index) {
  5932 + layer.setTop(layero);
  5933 + $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({
  5934 + 'lay-submit': '',
  5935 + 'lay-filter': enumActionEl.IMAGE_LAYER_FILTER,
  5936 + })
  5937 + initSelectImg()
  5938 + },
  5939 + })
  5940 + }
  5941 +
  5942 + /**
  5943 + * @description 创建输入验证
  5944 + */
  5945 + function createInputListener() {
  5946 + $(`#${enumActionEl.TABLE_BODY_EL}`)
  5947 + .on('input', `.${enumActionEl.MIN_FILTER}`, event => {
  5948 + const minVal = $(event.target).val()
  5949 + const maxVal = $(event.target).parents('tr').find(`input.${enumActionEl.MAX_FILTER}`).val()
  5950 + if (maxVal !== '' && Number(minVal) > Number(maxVal)) {
  5951 + layer.tips('输入值大于最大值', $(event.target), {
  5952 + tips: 1,
  5953 + });
  5954 + }
  5955 + })
  5956 + .on('input', `.${enumActionEl.MAX_FILTER}`, event => {
  5957 + const maxVal = $(event.target).val()
  5958 + const minVal = $(event.target).parents('tr').find(`input.${enumActionEl.MIN_FILTER}`).val()
  5959 + if (minVal !== '' && Number(maxVal) < Number(minVal)) {
  5960 + layer.tips('输入值小于最小值', $(event.target), {
  5961 + tips: 1,
  5962 + });
  5963 + }
  5964 + })
  5965 + }
  5966 +
  5967 + /**
  5968 + * @description 添加记录
  5969 + */
  5970 + function addRecord() {
  5971 + const rowFormFilter = getRowFilter(addRowNumber)
  5972 + const content = `
  5973 + <tr class="layui-form" lay-filter="${rowFormFilter}">
  5974 + <td>
  5975 + <div class="layui-form-item">
  5976 + <input class="layui-input ${enumActionEl.MIN_FILTER}" autocomplete="off" type="number" name="${enumConst.MIN}" lay-filter="${enumConst.MIN}" lay-verType="tips" lay-verify="required" />
  5977 + </div>
  5978 + </td>
  5979 + <td>
  5980 + <div class="layui-form-item">
  5981 + <input class="layui-input ${enumActionEl.MAX_FILTER}"" autocomplete="off" type="number" name="${enumConst.MAX}" lay-filter="${enumConst.MAX}" lay-verType="tips" lay-verify="required" />
  5982 + </div>
  5983 + </td>
  5984 + <td>
  5985 + <div class="${enumActionEl.SET_IMG_EL}">
  5986 + <input name="${enumConst.IMAGE_GALLERY_CATEGORY}" type="text" style="display: none">
  5987 + <input name="${enumConst.IMAGE_GALLERY_IMG_PATH}" type="text" style="display: none">
  5988 + <input name="${enumConst.IMAGE_ORIGIN}" type="text" style="display: none">
  5989 + <div class="${enumActionEl.PREVIEW_IMG_CONTAINER}">
  5990 + <img src="" alt="">
  5991 + <div class="${enumActionEl.DEL_PREVIEW_IMG}">x</div>
  5992 + <div class="add__button">+</div>
  5993 + </div>
  5994 + </div>
  5995 + </td>
  5996 +<!-- <td>-->
  5997 +<!-- <div style="display: flex">-->
  5998 +<!-- <input class="layui-input" style="border-width: 1px; border-right: none;" autocomplete="off" ype="number" name="${enumConst.COLOR}" lay-filter="${enumConst.COLOR}" lay-verType="tips" lay-verify="required" />-->
  5999 +<!-- <div id="${getColorPickerFilter(addRowNumber)}"></div>-->
  6000 +<!-- </div>-->
  6001 +<!-- </td>-->
  6002 + <td style="text-align: center">
  6003 + <button type="button" class="layui-btn layui-btn-primary layui-border-red ${enumActionEl.DEL_ROW_EL}">删除</button>
  6004 + </td>
  6005 + </tr>
  6006 + `
  6007 + $(`#${enumActionEl.TABLE_BODY_EL}`).append(content)
  6008 + // colorpicker.render({
  6009 + // elem: $(`#${getColorPickerFilter(addRowNumber)}`),
  6010 + // done(color) {
  6011 + // $(`#${enumActionEl.TABLE_BODY_EL} tr[lay-filter="${rowFormFilter}"]`).find(`input[lay-filter="${enumConst.COLOR}"]`).val(color)
  6012 + // },
  6013 + // predefine: true,
  6014 + // });
  6015 + form.render()
  6016 + addRowNumber++
  6017 + }
  6018 +
  6019 +
  6020 + /**
  6021 + * @description 回显数据
  6022 + */
  6023 + function echoFormData(info) {
  6024 + const { condition = [] } = info
  6025 + condition.forEach((item, index) => {
  6026 + addRecord()
  6027 + const rowFilter = getRowFilter(index)
  6028 + $(`#${enumActionEl.TABLE_BODY_EL}`).find(`.${enumActionEl.PREVIEW_IMG_CONTAINER}>img`).attr('src', item[enumConst.IMAGE_GALLERY_IMG_PATH])
  6029 + form.val(rowFilter, { ...item })
  6030 + })
  6031 + }
  6032 +
  6033 + /**
  6034 + * @description 验证最大最小值
  6035 + * @param tableData
  6036 + * @returns {boolean}
  6037 + */
  6038 + function validate(tableData) {
  6039 + let validateFlag = true
  6040 + for (let i = 0; i < tableData.length; i++) {
  6041 + const { min, max } = tableData[i]
  6042 + if (Number(min) > Number(max)) {
  6043 + validateFlag = false
  6044 + layer.tips('输入值大于最大值', $(`#${enumActionEl.TABLE_BODY_EL} tr`).eq(i).find(`input[name="${enumConst.MIN}"]`))
  6045 + break
  6046 + } else if (Number(max) < Number(min)) {
  6047 + validateFlag = false
  6048 + layer.tips('输入值小于最小值', $(`#${enumActionEl.TABLE_BODY_EL} tr`).eq(i).find(`input[name="${enumConst.MAX}"]`))
  6049 + break
  6050 + }
  6051 + }
  6052 + return validateFlag
  6053 + }
  6054 +
  6055 + /**
  6056 + * @description
  6057 + */
  6058 + async function submit(callback) {
  6059 + const data = Array.from({ length: addRowNumber }).map((_, row) => form.val(getRowFilter(row))).filter(item => Object.keys(item).length)
  6060 + if (!validate(data)) return
  6061 + const formVal = getDataSourceValue()
  6062 + const formModel = {
  6063 + configurationId,
  6064 + contentId: currentPageId.id,
  6065 + ...formVal,
  6066 + id: graphId,
  6067 + condition: data,
  6068 + type: event.data.type,
  6069 + }
  6070 + const [err, res] = await to(ConfigurationNodeApi.updateNodeAct(formModel))
  6071 + if (err) return
  6072 + UseLayUi.successMsg()
  6073 + callback()
  6074 + }
  6075 +
  6076 + function createLayerForm(type) {
  6077 + const content = `
  6078 + <div style="width: 300px; padding: 20px 0 0 20px;" id="${enumActionEl.DATA_SOURCE_COMP_EL}"></div>
  6079 + <div class="override__table" style="padding: 0 20px">
  6080 + <table class="layui-table" >
  6081 + <thead>
  6082 + <tr>
  6083 + <th style="text-align:center">最小值(<=)</th>
  6084 + <th style="text-align:center">最大值(>=)</th>
  6085 + <th style="text-align:center">对应图片</th>
  6086 +<!-- <th style="text-align:center">对应的颜色</th>-->
  6087 + <th style="text-align:center">操作</th>
  6088 + </tr>
  6089 + </thead>
  6090 + <tbody id="${enumActionEl.TABLE_BODY_EL}"></tbody>
  6091 + </table>
  6092 + </div>
  6093 + <div style="display:flex;justify-content:center;">
  6094 + <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${enumActionEl.ADD_ROW_EL}">添加一条</button>
  6095 + </div>
  6096 + `
  6097 +
  6098 + layer.open({
  6099 + title: '变量值图片功能',
  6100 + type: 1,
  6101 + content,
  6102 + skin: 'event-layer__override',
  6103 + area: '700px',
  6104 + btn: ["保存", "取消"],
  6105 + shade: ["0.7", "#fafafa"],
  6106 + offset: '100px',
  6107 + yes(index) {
  6108 + form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => {
  6109 + submit(() => {
  6110 + layer.close(index)
  6111 + getNodeBindInfo()
  6112 + })
  6113 + })
  6114 + },
  6115 + but2(index, layero) {
  6116 + return false
  6117 + },
  6118 + async success(layero, index) {
  6119 + $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({
  6120 + 'lay-submit': '',
  6121 + 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER,
  6122 + })
  6123 + const { component, echoDataSource, getValue } = generatorDataSourceComponent()
  6124 + getDataSourceValue = getValue
  6125 + $(`#${enumActionEl.DATA_SOURCE_COMP_EL}`).append(component)
  6126 + const info = getLayerBindInfo('act', type)
  6127 + const { condition = [] } = info
  6128 + if (!info && !condition.length) {
  6129 + addRecord()
  6130 + } else {
  6131 + echoDataSource(info)
  6132 + echoFormData(info)
  6133 + }
  6134 + generatorEventListen()
  6135 + },
  6136 + })
  6137 + }
  6138 +
  6139 + createLayerForm(event.data.type)
  6140 + }
  6141 +
  6142 + /**
  6143 + * @description 处理数据交互 - down || up 按下与抬起
  6144 + */
  6145 + function handleDownOrUpEvent(event) {
  6146 +
  6147 + // if (!currentCheckedOrgNode) {
  6148 + // layer.msg('请先选择组织')
  6149 + // return
  6150 + // }
  6151 + // 事件类型
  6152 + const enumEventType = {
  6153 + DOWN: "按下",
  6154 + UP: "抬起",
  6155 + SINGLE: "单击",
  6156 + DOUBLE: "双击",
  6157 + };
  6158 +
  6159 + const enumActionEl = {
  6160 +
  6161 + /**
  6162 + * @description 表单控制 filter
  6163 + */
  6164 + FORM_FILTER: 'interactionFormFilter',
  6165 +
  6166 + /**
  6167 + * @description 表体节点
  6168 + */
  6169 + DEVICE_DATA_BODY_EL: 'deviceDataTbody',
  6170 +
  6171 + /**
  6172 + * @description 删除行节点
  6173 + */
  6174 + DEL_ROW_EL: 'deleteRow',
  6175 +
  6176 + /**
  6177 + * @description 增加行节点
  6178 + */
  6179 + ADD_ROW_EL: 'addRow',
  6180 +
  6181 + /**
  6182 + * @descripton
  6183 + */
  6184 + ROW_FILTER: 'interactionRowFilter',
  6185 +
  6186 + /**
  6187 + * @description json editor
  6188 + */
  6189 + EDITOR_JSON: 'editor__json-',
  6190 +
  6191 + /**
  6192 + * @description 弹出层保存 filter
  6193 + */
  6194 + LAYER_SUBMIT_FILTER: 'interactionLayerSubmit',
  6195 +
  6196 + /**
  6197 + * @description ace builder
  6198 + */
  6199 + JSON: 'ace__builder-json',
  6200 +
  6201 + /**
  6202 + * @description 组织树节点
  6203 + */
  6204 + ORG_EL: 'interactionOrgTree',
  6205 + }
  6206 +
  6207 +
  6208 + /**
  6209 + * @description 所有设备选项
  6210 + * @type {{id: string, name: string, deviceType: string}[]}
  6211 + */
  6212 + let allDeviceOptions = []
  6213 +
  6214 + let addRowNumber = 0
  6215 +
  6216 + /**
  6217 + * @description 组织id
  6218 + * @type {null}
  6219 + */
  6220 + let orgId = null
  6221 +
  6222 + const getRowFilter = (rowNumber) => `${enumActionEl.ROW_FILTER}${rowNumber}`
  6223 +
  6224 + /**
  6225 + * @description 枚举常量
  6226 + * @enum DEVICE
  6227 + */
  6228 + const enumConst = {
  6229 + /**
  6230 + * @description 设备
  6231 + */
  6232 + DEVICE: 'deviceId',
  6233 + /**
  6234 + * @description 子设备
  6235 + */
  6236 + SLAVE_DEVICE: 'slaveDeviceId',
  6237 + /**
  6238 + * @description 变量
  6239 + */
  6240 + ATTR: 'attr',
  6241 + /**
  6242 + * @description 下发值
  6243 + */
  6244 + VALUE: 'value',
  6245 +
  6246 + /**
  6247 + * @description 方式
  6248 + */
  6249 + WAY: 'way',
  6250 +
  6251 + /**
  6252 + * @description 组织id
  6253 + */
  6254 + ORG_ID: 'orgId',
5537 6255 }
5538 6256
5539 6257 const sendInstructionWay = {
... ... @@ -5545,11 +6263,19 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5545 6263 * @description 创建回显数据 查询出所有网关设备和直连设备
5546 6264 */
5547 6265 async function getMaterDevice() {
5548   - if (!currentCheckedOrgNode) return
5549   - const [ err, res ] = await to(ConfigurationNodeApi.getMasterDevice(currentCheckedOrgNode))
  6266 + if (!orgId) return
  6267 + const [err, res] = await to(ConfigurationNodeApi.getMasterDevice(orgId))
5550 6268 allDeviceOptions = res
  6269 + const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res })
  6270 + $(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
  6271 + UseLayUi.nextTick(() => form.render('select'))
5551 6272 }
5552 6273
  6274 + /**
  6275 + * @description 创建JSON编辑器
  6276 + * @param el
  6277 + * @param datum
  6278 + */
5553 6279 function createEditor(el, datum = {}) {
5554 6280 const editor = ace.edit(el, {
5555 6281 maxLines: 10, // 最大行数,超过会自动出现滚动条
... ... @@ -5559,46 +6285,72 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5559 6285 });
5560 6286 editor.session.setMode("ace/mode/json");
5561 6287 editor.getSession().on('change', (event, editor) => {
5562   - $(`#${ el }`).parent().find(`textarea[name="${ enumConst.VALUE }"]`).val(editor.getValue())
  6288 + $(`#${el}`).parent().find(`textarea[name="${enumConst.VALUE}"]`).val(editor.getValue())
5563 6289 })
5564 6290 editor.setValue(datum[enumConst.VALUE] ? datum[enumConst.VALUE] : "{}")
5565 6291 }
5566 6292
  6293 + /**
  6294 + * @description 创建组织树
  6295 + */
  6296 + function createOrgTreeSelect() {
  6297 + UseLayUi.createTreeSelect({
  6298 + elem: `#${enumActionEl.ORG_EL}`,
  6299 + layFilter: enumConst.ORG_ID,
  6300 + label: '组织',
  6301 + singleUsage: false,
  6302 + layVerify: 'required',
  6303 + layVerType: 'tips',
  6304 + treeProps: {
  6305 + data: treeList,
  6306 + onlyIconControl: true,
  6307 + click(node) {
  6308 + orgId = node.data.id
  6309 + getMaterDevice()
  6310 + },
  6311 + },
  6312 + })
  6313 + }
  6314 +
  6315 + /**
  6316 + * @description 添加行
  6317 + * @param datum
  6318 + */
5567 6319 function addRecord(datum) {
5568 6320 const content = `
5569   - <tr class="layui-form" lay-filter="${ getRowFilter(addRowNumber) }">
  6321 + <tr class="layui-form" lay-filter="${getRowFilter(addRowNumber)}">
5570 6322 <td>
5571   - <select name="${ enumConst.DEVICE }" lay-filter="${ enumConst.DEVICE }" lay-verType="tips" lay-verify="required"></select>
  6323 + <select name="${enumConst.DEVICE}" lay-filter="${enumConst.DEVICE}" lay-verType="tips" lay-verify="required"></select>
5572 6324 </td>
5573 6325 <td>
5574   - <select name="${ enumConst.SLAVE_DEVICE }" lay-filter="${ enumConst.SLAVE_DEVICE }" lay-verType="tips"></select>
  6326 + <select name="${enumConst.SLAVE_DEVICE}" lay-filter="${enumConst.SLAVE_DEVICE}" lay-verType="tips"></select>
5575 6327 </td>
5576 6328 <td>
5577 6329 <form action="" style="display: flex">
5578 6330 <div class="override__radio-default">
5579   - <input id="${ getRowFilter(addRowNumber) }${ sendInstructionWay.ONE_WAR }" type="radio" name="${ enumConst.WAY }" lay-ignore value="${ sendInstructionWay.ONE_WAR }" title="单向" checked="">
5580   - <label for="${ getRowFilter(addRowNumber) }${ sendInstructionWay.ONE_WAR }" class="override__radio-label">单向</label>
  6331 + <input id="${getRowFilter(addRowNumber)}${sendInstructionWay.ONE_WAR}" type="radio" name="${enumConst.WAY}" lay-ignore value="${sendInstructionWay.ONE_WAR}" title="单向" checked="">
  6332 + <label for="${getRowFilter(addRowNumber)}${sendInstructionWay.ONE_WAR}" class="override__radio-label">单向</label>
5581 6333 </div>
5582 6334 <div class="override__radio-default">
5583   - <input id="${ getRowFilter(addRowNumber) }${ sendInstructionWay.TWO_WAY }" type="radio" name="${ enumConst.WAY }" lay-ignore value="${ sendInstructionWay.TWO_WAY }" title="双向">
5584   - <label for="${ getRowFilter(addRowNumber) }${ sendInstructionWay.TWO_WAY }" class="override__radio-label">双向</label>
  6335 + <input id="${getRowFilter(addRowNumber)}${sendInstructionWay.TWO_WAY}" type="radio" name="${enumConst.WAY}" lay-ignore value="${sendInstructionWay.TWO_WAY}" title="双向">
  6336 + <label for="${getRowFilter(addRowNumber)}${sendInstructionWay.TWO_WAY}" class="override__radio-label">双向</label>
5585 6337 </div>
5586 6338 </form>
5587 6339 </td>
5588   - <td class="${ enumActionEl.JSON }">
  6340 + <td class="${enumActionEl.JSON}">
5589 6341 <div style="width: 100%;height: 100%;">
5590   - <div id="${ enumActionEl.EDITOR_JSON }${ addRowNumber }"></div>
5591   - <textarea style="display: none" name="${ enumConst.VALUE }" placeholder="请输入命令" lay-verType="tips" class="layui-textarea"></textarea>
  6342 + <div id="${enumActionEl.EDITOR_JSON}${addRowNumber}"></div>
  6343 + <textarea style="display: none" name="${enumConst.VALUE}" placeholder="请输入命令" lay-verType="tips" class="layui-textarea"></textarea>
5592 6344 </div>
5593 6345 </td>
5594 6346 <td>
5595   - <button type="button" class="layui-btn layui-btn-primary layui-border-red ${ enumActionEl.DEL_ROW_EL }">删除</button>
  6347 + <button type="button" class="layui-btn layui-btn-primary layui-border-red ${enumActionEl.DEL_ROW_EL}">删除</button>
5596 6348 </td>
5597 6349 </tr>
5598 6350 `
5599   - $(`#${ enumActionEl.DEVICE_DATA_BODY_EL }`).append(content)
  6351 + $(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).append(content)
5600 6352 setDeviceOptions(addRowNumber)
5601   - createEditor(`${ enumActionEl.EDITOR_JSON }${ addRowNumber }`, datum)
  6353 + createEditor(`${enumActionEl.EDITOR_JSON}${addRowNumber}`, datum)
5602 6354 form.render('select', getRowFilter(addRowNumber))
5603 6355 addRowNumber++
5604 6356 }
... ... @@ -5608,10 +6360,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5608 6360 */
5609 6361 async function updateVariableOptions(data) {
5610 6362 if (!data.value) return
5611   - const [ err, res ] = await to(ConfigurationNodeApi.getDeviceAttr(data.value))
  6363 + const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(data.value))
5612 6364 if (!res) return
5613 6365 const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res })
5614   - $(data.elem).parents('tr').find(`select[name="${ enumConst.ATTR }"]`).html(generateOption)
  6366 + $(data.elem).parents('tr').find(`select[name="${enumConst.ATTR}"]`).html(generateOption)
5615 6367 form.render('select')
5616 6368 }
5617 6369
... ... @@ -5619,19 +6371,23 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5619 6371 * @description 选择设备监听事件
5620 6372 */
5621 6373 function createSelectDeviceListenEvent() {
5622   - form.on(`select(${ enumConst.DEVICE })`, async (data) => {
  6374 + form.on(`select(${enumConst.DEVICE})`, async (data) => {
  6375 + const filter = $(data.elem).parents('tr').attr('lay-filter')
  6376 + form.val(filter, {
  6377 + [enumConst.SLAVE_DEVICE]: null,
  6378 + })
5623 6379 const isGATEWAY = allDeviceOptions.find(item => item.id === data.value)?.deviceType === "GATEWAY"
5624 6380 // 网关设备请求子设备
5625   - if (isGATEWAY && data.value) {
5626   - const [ err, res ] = await to(ConfigurationNodeApi.getSlaveDevice(currentCheckedOrgNode, data.value))
  6381 + if (orgId && isGATEWAY && data.value) {
  6382 + const [err, res] = await to(ConfigurationNodeApi.getSlaveDevice(orgId, data.value))
5627 6383 if (!res) return
5628 6384 const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res })
5629   - $(data.elem).parents('tr').find(`select[name="${ enumConst.SLAVE_DEVICE }"]`).html(generateOption)
  6385 + $(data.elem).parents('tr').find(`select[name="${enumConst.SLAVE_DEVICE}"]`).html(generateOption)
5630 6386 }
5631 6387 // else {
5632 6388 // updateVariableOptions(data)
5633 6389 // }
5634   - form.render('select')
  6390 + UseLayUi.nextTick(() => form.render(`select`, filter))
5635 6391 })
5636 6392 // form.on(`select(${ enumConst.SLAVE_DEVICE })`, (data) => {
5637 6393 // updateVariableOptions(data)
... ... @@ -5642,7 +6398,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5642 6398 * @description 删除行
5643 6399 */
5644 6400 function createDeleteRowListenEvent() {
5645   - $(`.${ enumActionEl.DEL_ROW_EL }`).click((event) => {
  6401 + $(`.${enumActionEl.DEL_ROW_EL}`).on('click', (event) => {
5646 6402 // $(event.target).parents('tr').find('editor')
5647 6403 $(event.target).parents('tr').remove()
5648 6404 })
... ... @@ -5652,10 +6408,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5652 6408 * @description 新增行
5653 6409 */
5654 6410 function createAddRowListenEvent() {
5655   - $(`#${ enumActionEl.ADD_ROW_EL }`).click(() => {
  6411 + $(`#${enumActionEl.ADD_ROW_EL}`).on('click', () => {
5656 6412 addRecord()
5657 6413 const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions })
5658   - $(`#${ enumActionEl.DEVICE_DATA_BODY_EL } tr`).last().find(`select[name="${ enumConst.DEVICE }"]`).html(generateOption)
  6414 + $(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr`).last().find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
5659 6415 createDeleteRowListenEvent()
5660 6416 form.render('select')
5661 6417 })
... ... @@ -5666,7 +6422,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5666 6422 */
5667 6423 function setDeviceOptions(row) {
5668 6424 const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions })
5669   - $(`#${ enumActionEl.DEVICE_DATA_BODY_EL } tr[lay-filter="${ getRowFilter(row) }"]`).find(`select[name="${ enumConst.DEVICE }"]`).html(generateOption)
  6425 + $(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr[lay-filter="${getRowFilter(row)}"]`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
5670 6426 }
5671 6427
5672 6428 /**
... ... @@ -5686,14 +6442,14 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5686 6442 */
5687 6443 function mountSelectOptions(row, key, data) {
5688 6444 const generateOption = UseLayUi.generateOptionTemplate({ dataSource: data })
5689   - $(`#${ enumActionEl.DEVICE_DATA_BODY_EL }`).find(`tr[lay-filter="${ getRowFilter(row) }"] select[name="${ key }"]`).html(generateOption)
  6445 + $(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).find(`tr[lay-filter="${getRowFilter(row)}"] select[name="${key}"]`).html(generateOption)
5690 6446 }
5691 6447
5692 6448 /**
5693 6449 * @description 根据主设备ID获取从设备
5694 6450 */
5695 6451 async function getSlaveDeviceByMasterDevice(deviceId, row) {
5696   - const res = await ConfigurationNodeApi.getSlaveDevice(currentCheckedOrgNode, deviceId)
  6452 + const res = await ConfigurationNodeApi.getSlaveDevice(orgId, deviceId)
5697 6453 mountSelectOptions(row, enumConst.SLAVE_DEVICE, res)
5698 6454 }
5699 6455
... ... @@ -5709,11 +6465,20 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5709 6465 * @description 回显表单数据
5710 6466 */
5711 6467 function echoFormData(info) {
5712   - const { content: { data = [] } = {} } = info
  6468 + const { content: { data = [] } = {}, orgId } = info
  6469 + echoOrgTree(orgId)
5713 6470 data.forEach((datum, index) => echoEachData(datum, index))
5714 6471 }
5715 6472
5716 6473 /**
  6474 + * @description 回显组织树
  6475 + */
  6476 + function echoOrgTree(id) {
  6477 + const node = UseLayUi.findTreeObjectByField(treeList, id)
  6478 + $(`#${enumActionEl.ORG_EL}`).find(`input[name="${enumConst.ORG_ID}"]`).parent().find('span').html(node?.name)
  6479 + }
  6480 +
  6481 + /**
5717 6482 * @description 回显每条数据
5718 6483 */
5719 6484 function echoEachData(datum = {}, row) {
... ... @@ -5751,13 +6516,22 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5751 6516 return false
5752 6517 }
5753 6518
  6519 + /**
  6520 + * @description 表单验证
  6521 + * @param tableData
  6522 + * @returns {boolean}
  6523 + */
5754 6524 function validate(tableData) {
5755 6525 let validateFlag = true
  6526 +
  6527 + const formModel = form.val(enumActionEl.FORM_FILTER)
  6528 + if (!formModel[enumConst.ORG_ID]) return false
  6529 +
5756 6530 for (let i = 0; i < tableData.length; i++) {
5757 6531 const { value } = tableData[i]
5758 6532 if (!isJson(value)) {
5759 6533 validateFlag = false
5760   - layer.tips('下发值不正确', $(`#${ enumActionEl.DEVICE_DATA_BODY_EL } tr`).eq(i).find(`td.${ enumActionEl.JSON }`), { tips: 1 })
  6534 + layer.tips('下发值不正确', $(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr`).eq(i).find(`td.${enumActionEl.JSON}`), { tips: 1 })
5761 6535 break
5762 6536 }
5763 6537 }
... ... @@ -5772,6 +6546,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5772 6546 if (!validate(data)) return
5773 6547 const formModal = {
5774 6548 configurationId,
  6549 + orgId,
5775 6550 contentId: currentPageId.id,
5776 6551 id: graphId,
5777 6552 content: {
... ... @@ -5779,7 +6554,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5779 6554 },
5780 6555 type: event.data.type,
5781 6556 };
5782   - const [ err, res ] = await to(ConfigurationNodeApi.updateNodeEvent(formModal))
  6557 + const [err, res] = await to(ConfigurationNodeApi.updateNodeEvent(formModal))
5783 6558 if (err) return
5784 6559 UseLayUi.successMsg()
5785 6560 callback()
... ... @@ -5791,12 +6566,12 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5791 6566 */
5792 6567 function createLayerForm(type) {
5793 6568 const content = `
5794   - <form class="layui-form" lay-filter="formModal">
  6569 + <form class="layui-form" lay-filter="${enumActionEl.FORM_FILTER}">
5795 6570 <div style="width:400px">
5796 6571 <div class="layui-form-item">
5797 6572 <label class="layui-form-label">事件</label>
5798 6573 <div class="layui-input-block">
5799   - <input type="text" name="event" class="layui-input" value="${ enumEventType[type] }" disabled>
  6574 + <input type="text" name="event" class="layui-input" value="${enumEventType[type]}" disabled>
5800 6575 </div>
5801 6576 </div>
5802 6577 <div class="layui-form-item">
... ... @@ -5814,6 +6589,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5814 6589 <input type="radio" name="type" value="2" title="产品/场景" disabled>
5815 6590 </div>
5816 6591 </div>
  6592 + <div id="${enumActionEl.ORG_EL}"></div>
5817 6593 </div>
5818 6594 </form>
5819 6595 <div class="override__table">
... ... @@ -5827,10 +6603,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5827 6603 <th style="text-align:center">操作</th>
5828 6604 </tr>
5829 6605 </thead>
5830   - <tbody id="${ enumActionEl.DEVICE_DATA_BODY_EL }"></tbody>
  6606 + <tbody id="${enumActionEl.DEVICE_DATA_BODY_EL}"></tbody>
5831 6607 </table>
5832 6608 <div style="display:flex;justify-content:center;">
5833   - <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${ enumActionEl.ADD_ROW_EL }">添加一条</button>
  6609 + <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${enumActionEl.ADD_ROW_EL}">添加一条</button>
5834 6610 </div>
5835 6611 </div>`
5836 6612
... ... @@ -5839,11 +6615,12 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5839 6615 content,
5840 6616 skin: 'event-layer__override',
5841 6617 // area: ["1100px", "700px"],
5842   - area: '1200px',
5843   - btn: [ "保存", "取消" ],
5844   - shade: [ "0.7", "#fafafa" ],
  6618 + area: '1100px',
  6619 + offset: '100px',
  6620 + btn: ["保存", "取消"],
  6621 + shade: ["0.7", "#fafafa"],
5845 6622 yes(index) {
5846   - form.on(`submit(${ enumActionEl.LAYER_SUBMIT_FILTER })`, data => {
  6623 + form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => {
5847 6624 submit(() => {
5848 6625 layer.close(index)
5849 6626 getNodeBindInfo()
... ... @@ -5858,11 +6635,13 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5858 6635 'lay-submit': '',
5859 6636 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER,
5860 6637 })
5861   - await getMaterDevice()
  6638 + createOrgTreeSelect()
5862 6639 const info = getLayerBindInfo('event', type)
5863   - if (!info) {
  6640 + const { content: { data = [] } = {} } = info
  6641 + if (!info || !data.length) {
5864 6642 addRecord()
5865 6643 } else {
  6644 + await getMaterDevice()
5866 6645 echoFormData(info)
5867 6646 }
5868 6647 generatorEventListen()
... ... @@ -5947,8 +6726,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5947 6726 [enumGetValue[content.type]]: content.value,
5948 6727 }
5949 6728 if (content.type === enumActionType.PAGE) {
5950   - $(`#${ enumActionEl.PAGE_EL_ID }`).css({ display: 'block' })
5951   - $(`#${ enumActionEl.LINK_EL_ID }`).css({ display: 'none' })
  6729 + $(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'block' })
  6730 + $(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' })
5952 6731 }
5953 6732 form.val(enumActionEl.FORM_FILTER, val)
5954 6733 }
... ... @@ -5968,7 +6747,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5968 6747 value: formVal[enumGetValue[formVal[enumConst.ACTION]]],
5969 6748 },
5970 6749 }
5971   - const [ err ] = await to(ConfigurationNodeApi.updateNodeEvent(data))
  6750 + const [err] = await to(ConfigurationNodeApi.updateNodeEvent(data))
5972 6751 if (err) return
5973 6752 UseLayUi.successMsg()
5974 6753 callback()
... ... @@ -5995,14 +6774,14 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5995 6774 }
5996 6775
5997 6776 function generatorEventListen() {
5998   - form.on(`select(${ enumActionEl.ACTION_SELECT_FILTER })`, (data) => {
  6777 + form.on(`select(${enumActionEl.ACTION_SELECT_FILTER})`, (data) => {
5999 6778 const { value } = data
6000 6779 if (value === enumActionType.PAGE) {
6001   - $(`#${ enumActionEl.LINK_EL_ID }`).css({ display: 'none' })
6002   - $(`#${ enumActionEl.PAGE_EL_ID }`).css({ display: 'block' })
  6780 + $(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' })
  6781 + $(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'block' })
6003 6782 } else if (value === enumActionType.LINK) {
6004   - $(`#${ enumActionEl.PAGE_EL_ID }`).css({ display: 'none' })
6005   - $(`#${ enumActionEl.LINK_EL_ID }`).css({ display: 'block' })
  6783 + $(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'none' })
  6784 + $(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'block' })
6006 6785 }
6007 6786 })
6008 6787 }
... ... @@ -6013,33 +6792,33 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6013 6792 function createLayerForm(type) {
6014 6793
6015 6794 const content = `
6016   - <form class="layui-form" lay-filter="${ enumActionEl.FORM_FILTER }">
  6795 + <form class="layui-form" lay-filter="${enumActionEl.FORM_FILTER}">
6017 6796 <div style="width:400px">
6018 6797 <div class="layui-form-item">
6019 6798 <label class="layui-form-label">事件</label>
6020 6799 <div class="layui-input-block">
6021   - <input type="text" name="${ enumConst.EVENT }" disabled class="layui-input" value="${ enumEventType[type] }">
  6800 + <input type="text" name="${enumConst.EVENT}" disabled class="layui-input" value="${enumEventType[type]}">
6022 6801 </div>
6023 6802 </div>
6024 6803 <div class="layui-form-item">
6025 6804 <label class="layui-form-label">动作</label>
6026 6805 <div class="layui-input-block">
6027   - <select name="${ enumConst.ACTION }" lay-verType="tips" lay-verify="required" lay-filter="${ enumActionEl.ACTION_SELECT_FILTER }">
6028   - ${ generatorActionOptions() }
  6806 + <select name="${enumConst.ACTION}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.ACTION_SELECT_FILTER}">
  6807 + ${generatorActionOptions()}
6029 6808 </select>
6030 6809 </div>
6031 6810 </div>
6032   - <div class="layui-form-item" id="${ enumActionEl.LINK_EL_ID }">
  6811 + <div class="layui-form-item" id="${enumActionEl.LINK_EL_ID}">
6033 6812 <label class="layui-form-label">链接</label>
6034 6813 <div class="layui-input-block">
6035   - <input type="text" lay-verType="tips" name="${ enumConst.LINK_VALUE }" class="layui-input">
  6814 + <input type="text" lay-verType="tips" name="${enumConst.LINK_VALUE}" class="layui-input">
6036 6815 </div>
6037 6816 </div>
6038   - <div class="layui-form-item" id="${ enumActionEl.PAGE_EL_ID }" style="display:none">
  6817 + <div class="layui-form-item" id="${enumActionEl.PAGE_EL_ID}" style="display:none">
6039 6818 <label class="layui-form-label">页面</label>
6040 6819 <div class="layui-input-block">
6041   - <select name="${ enumConst.PAGE_VALUE }" lay-verType="tips" id="pageSelect">
6042   - ${ generatorPageOptions() }
  6820 + <select name="${enumConst.PAGE_VALUE}" lay-verType="tips" id="pageSelect">
  6821 + ${generatorPageOptions()}
6043 6822 </select>
6044 6823 </div>
6045 6824 </div>
... ... @@ -6050,10 +6829,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6050 6829 layer.open({
6051 6830 title: "创建交互",
6052 6831 content,
6053   - area: [ "800px", "500px" ],
6054   - btn: [ "保存", "取消" ],
  6832 + area: ["800px", "500px"],
  6833 + btn: ["保存", "取消"],
6055 6834 yes(index) {
6056   - form.on(`submit(${ enumActionEl.LAYER_SUBMIT_FILTER })`, data => {
  6835 + form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => {
6057 6836 submit(() => {
6058 6837 layer.close(index)
6059 6838 getNodeBindInfo()
... ... @@ -6073,7 +6852,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6073 6852 form.render(null, enumActionEl.FORM_FILTER)
6074 6853 if (info) echoFormData(info)
6075 6854 },
6076   - shade: [ "0.7", "#fafafa" ],
  6855 + shade: ["0.7", "#fafafa"],
6077 6856 });
6078 6857 }
6079 6858
... ... @@ -6098,20 +6877,16 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6098 6877 FORM_FILTER: 'dataDynamicEffectFormFilter',
6099 6878 TABLE_BODY_EL: 'dataDynamicEffectTbody',
6100 6879 TYPE_EL: 'dataDynamicEffectType',
6101   - ORG_EL: 'dataDynamicEffectOrg',
6102   - ORG_FILTER: 'dataDynamicEffectOrgFilter',
6103   - DEVICE_EL: 'dataDynamicEffectDevice',
6104   - SLAVE_DEVICE_EL: 'dataDynamicEffectSlaveDevice',
6105   - ATTR_EL: 'dataDynamicEffectAtt',
6106 6880 DEL_BTN_EL: 'dataDynamicEffectDelBtn',
6107 6881 ADD_BTN_EL: 'dataDynamicEffectAddBtn',
6108 6882 DISPLAY_SWITCH_EL: 'visibleOrHidden',
6109 6883 LAYER_SUBMIT_FILTER: 'dynamicEffectLayerFilter',
6110 6884 MIN_FILTER: 'dynamicEffectMinFilter',
6111 6885 MAX_FILTER: 'dynamicEffectMaxFilter',
  6886 + DATA_SOURCE_COMP_EL: 'dynamicDataSourceCompEl',
6112 6887 }
6113 6888
6114   - const getRowFilter = (rowNumber) => `${ enumActionEl.ROW_FILTER }${ rowNumber }`
  6889 + const getRowFilter = (rowNumber) => `${enumActionEl.ROW_FILTER}${rowNumber}`
6115 6890
6116 6891 /**
6117 6892 * @description
... ... @@ -6130,83 +6905,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6130 6905 const enumDisplayType = HandleDynamicEffect.enumDisplayType
6131 6906
6132 6907 /**
6133   - * @description 设备列表
6134   - */
6135   - let deviceList = []
6136   -
6137   - /**
6138   - * @description 当前组织ID
6139   - * @type {null | string}
6140   - */
6141   - let currentOrgId = null
6142   -
6143   - /**
6144 6908 * @description
6145 6909 */
6146 6910 let addRowNumber = 0
6147 6911
6148   -
6149   - /**
6150   - * @description 生成组织下拉树
6151   - */
6152   - function generatorOrgTreeSelect() {
6153   - UseLayUi.createTreeSelect({
6154   - elem: `#${ enumActionEl.ORG_EL }`,
6155   - layFilter: enumConst.ORG_ID,
6156   - label: '组织',
6157   - singleUsage: false,
6158   - treeProps: {
6159   - data: treeList,
6160   - onlyIconControl: true,
6161   - click(node) {
6162   - currentOrgId = node.data.id
6163   - getDeviceByOrg(node.data.id)
6164   - },
6165   - },
6166   - })
6167   - }
6168   -
6169   -
6170   - /**
6171   - * @description 通过组织获取设备
6172   - */
6173   - async function getDeviceByOrg(id) {
6174   - if (!id) return
6175   - const [ err, res ] = await to(ConfigurationNodeApi.getMasterDevice(id))
6176   - if (!res) return
6177   - deviceList = res
6178   - const template = UseLayUi.generateOptionTemplate({ dataSource: res })
6179   - $(`#${ enumActionEl.DEVICE_EL } select`).html(template)
6180   - form.render('select', enumActionEl.FORM_FILTER)
6181   - }
6182   -
6183   - /**
6184   - * @description 通过主设备ID获取从设备
6185   - */
6186   - async function getSlaveDeviceByMasterDevice(orgId, id) {
6187   - if (!orgId || !id) return
6188   - const [ err, res ] = await to(ConfigurationNodeApi.getSlaveDevice(orgId, id))
6189   - if (res) {
6190   - const template = UseLayUi.generateOptionTemplate({ dataSource: res })
6191   - $(`#${ enumActionEl.SLAVE_DEVICE_EL } select`).html(template)
6192   - form.render('select', enumActionEl.FORM_FILTER)
6193   - }
6194   - }
6195   -
6196   - /**
6197   - * @description 通过设备ID获取设备属性
6198   - */
6199   - async function getAttrsByDevice(id) {
6200   - if (!id) return
6201   - const [ err, res ] = await to(ConfigurationNodeApi.getDeviceAttr(id))
6202   - if (res) {
6203   - const template = UseLayUi.generateOptionTemplate({ dataSource: res })
6204   - $(`#${ enumActionEl.ATTR_EL } select`).html(template)
6205   - // form.render('select')
6206   - form.render('select', enumActionEl.FORM_FILTER)
6207   - }
6208   - }
6209   -
6210 6912 function generatorDisplayOptions() {
6211 6913 const options = [
6212 6914 { name: '显示', id: enumDisplayType.SHOW },
... ... @@ -6216,7 +6918,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6216 6918 return `
6217 6919 <div class="layui-form-item" style="margin-bottom: 0px">
6218 6920 <div class="layui-input-block" style="margin-left: 0px;">
6219   - <select name="${ enumConst.TYPE }" lay-verify="required">${ template }</select>
  6921 + <select name="${enumConst.TYPE}" lay-verType="tips" lay-verify="required">${template}</select>
6220 6922 </div>
6221 6923 </div>
6222 6924 `
... ... @@ -6227,23 +6929,22 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6227 6929 */
6228 6930 function addRecord() {
6229 6931 const content = `
6230   - <tr class="layui-form" lay-filter="${ getRowFilter(addRowNumber) }">
6231   - ${ IS_DISPLAY && `<td>${ generatorDisplayOptions() }</td>` }
  6932 + <tr class="layui-form" lay-filter="${getRowFilter(addRowNumber)}">
  6933 + ${IS_DISPLAY && `<td>${generatorDisplayOptions()}</td>`}
6232 6934 <td>
6233   - <input lay-verType="tips" lay-verify="required" type="number" name="${ enumConst.MIN }" class="layui-input ${ enumActionEl.MIN_FILTER }">
  6935 + <input autocomplete="off" lay-verType="tips" lay-verify="required" type="number" name="${enumConst.MIN}" class="layui-input ${enumActionEl.MIN_FILTER}">
6234 6936 </td>
6235 6937 <td>
6236   - <input lay-verType="tips" lay-verify="required" type="number" name="${ enumConst.MAX }" class="layui-input ${ enumActionEl.MAX_FILTER }">
  6938 + <input autocomplete="off" lay-verType="tips" lay-verify="required" type="number" name="${enumConst.MAX}" class="layui-input ${enumActionEl.MAX_FILTER}">
6237 6939 </td>
6238 6940 <td style="text-align: center;">
6239   - <button type="button" class="layui-btn layui-btn-primary layui-border-red ${ enumActionEl.DEL_BTN_EL }">删除</button>
  6941 + <button type="button" class="layui-btn layui-btn-primary layui-border-red ${enumActionEl.DEL_BTN_EL}">删除</button>
6240 6942 </td>
6241 6943 </tr>
6242 6944 `
6243 6945 addRowNumber++
6244   - $(`#${ enumActionEl.TABLE_BODY_EL }`).append(content)
  6946 + $(`#${enumActionEl.TABLE_BODY_EL}`).append(content)
6245 6947 if (IS_DISPLAY) {
6246   - // form.render(null, getRowFilter(addRowNumber))
6247 6948 form.render()
6248 6949 }
6249 6950 }
... ... @@ -6252,7 +6953,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6252 6953 * @description 创建添加记录事件
6253 6954 */
6254 6955 function createAddRowListenEvent() {
6255   - $(`#${ enumActionEl.ADD_BTN_EL }`).click(() => {
  6956 + $(`#${enumActionEl.ADD_BTN_EL}`).on('click', () => {
6256 6957 addRecord()
6257 6958 createDeleteRowListenEvent()
6258 6959 })
... ... @@ -6262,49 +6963,29 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6262 6963 * @description 创建删除行事件
6263 6964 */
6264 6965 function createDeleteRowListenEvent() {
6265   - $(`.${ enumActionEl.DEL_BTN_EL }`).click((event) => {
  6966 + $(`.${enumActionEl.DEL_BTN_EL}`).on('click', (event) => {
6266 6967 $(event.target).parents('tr').remove()
6267 6968 })
6268 6969 }
6269 6970
6270   - /**
6271   - * @description 创建下拉联动事件
6272   - */
6273   - function createSelectLinkageListenEvent() {
6274   - form.on(`select(${ enumActionEl.DEVICE_EL })`, (data) => {
6275   - const { value } = data
6276   - const selected = deviceList.find(item => item.id === value)
6277   - if (selected.deviceType === enumConst.GATEWAY) {
6278   - $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' })
6279   - getSlaveDeviceByMasterDevice(currentOrgId, selected.id)
6280   - } else {
6281   - $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'none' })
6282   - getAttrsByDevice(selected.id)
6283   - }
6284   - })
6285   -
6286   - form.on(`select(${ enumActionEl.SLAVE_DEVICE_EL })`, (data) => {
6287   - getAttrsByDevice(data.value)
6288   - })
6289   - }
6290 6971
6291 6972 /**
6292 6973 * @description 创建输入监听
6293 6974 */
6294 6975 function createInputListener() {
6295   - $(`#${ enumActionEl.TABLE_BODY_EL }`)
6296   - .on('input', `.${ enumActionEl.MIN_FILTER }`, event => {
  6976 + $(`#${enumActionEl.TABLE_BODY_EL}`)
  6977 + .on('input', `.${enumActionEl.MIN_FILTER}`, event => {
6297 6978 const minVal = $(event.target).val()
6298   - const maxVal = $(event.target).parents('tr').find(`input.${ enumActionEl.MAX_FILTER }`).val()
  6979 + const maxVal = $(event.target).parents('tr').find(`input.${enumActionEl.MAX_FILTER}`).val()
6299 6980 if (maxVal !== '' && Number(minVal) > Number(maxVal)) {
6300 6981 layer.tips('输入值大于最大值', $(event.target), {
6301 6982 tips: 1,
6302 6983 });
6303 6984 }
6304 6985 })
6305   - .on('input', `.${ enumActionEl.MAX_FILTER }`, event => {
  6986 + .on('input', `.${enumActionEl.MAX_FILTER}`, event => {
6306 6987 const maxVal = $(event.target).val()
6307   - const minVal = $(event.target).parents('tr').find(`input.${ enumActionEl.MIN_FILTER }`).val()
  6988 + const minVal = $(event.target).parents('tr').find(`input.${enumActionEl.MIN_FILTER}`).val()
6308 6989 if (minVal !== '' && Number(maxVal) < Number(minVal)) {
6309 6990 layer.tips('输入值小于最小值', $(event.target), {
6310 6991 tips: 1,
... ... @@ -6318,7 +6999,6 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6318 6999 */
6319 7000 function createEventListen() {
6320 7001 createInputListener()
6321   - createSelectLinkageListenEvent()
6322 7002 createAddRowListenEvent()
6323 7003 createDeleteRowListenEvent()
6324 7004 }
... ... @@ -6327,23 +7007,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6327 7007 * @description 回显数据
6328 7008 */
6329 7009 function echoData(info) {
6330   - const { slaveDeviceId, deviceId, attr, orgId, condition = [] } = info
  7010 + const { condition = [] } = info
6331 7011 echoEachData(condition)
6332   - echoOrgTree(orgId)
6333   - const queue = []
6334   - if (orgId) {
6335   - queue.push(getDeviceByOrg(orgId))
6336   - }
6337   - if (slaveDeviceId) {
6338   - $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' })
6339   - queue.push(getSlaveDeviceByMasterDevice(orgId, deviceId))
6340   - queue.push(getAttrsByDevice(slaveDeviceId))
6341   - } else {
6342   - queue.push(getAttrsByDevice(deviceId))
6343   - }
6344   - Promise.all(queue).finally(() => {
6345   - form.val(enumActionEl.FORM_FILTER, { slaveDeviceId, deviceId, attr, orgId })
6346   - })
6347 7012 }
6348 7013
6349 7014 /**
... ... @@ -6356,25 +7021,17 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6356 7021 })
6357 7022 }
6358 7023
6359   - /**
6360   - * @description 回显组织树
6361   - */
6362   - function echoOrgTree(id) {
6363   - const node = UseLayUi.findTreeObjectByField(treeList, id)
6364   - $(`#${ enumActionEl.ORG_EL }`).find(`input[name="${ enumConst.ORG_ID }"]`).parent().find('span').html(node?.name)
6365   - }
6366   -
6367 7024 function validate(tableData) {
6368 7025 let validateFlag = true
6369 7026 for (let i = 0; i < tableData.length; i++) {
6370 7027 const { min, max } = tableData[i]
6371 7028 if (Number(min) > Number(max)) {
6372 7029 validateFlag = false
6373   - layer.tips('输入值大于最大值', $(`#${ enumActionEl.TABLE_BODY_EL } tr`).eq(i).find(`input[name="${ enumConst.MIN }"]`), { tips: 1 })
  7030 + layer.tips('输入值大于最大值', $(`#${enumActionEl.TABLE_BODY_EL} tr`).eq(i).find(`input[name="${enumConst.MIN}"]`), { tips: 1 })
6374 7031 break
6375 7032 } else if (Number(max) < Number(min)) {
6376 7033 validateFlag = false
6377   - layer.tips('输入值小于最小值', $(`#${ enumActionEl.TABLE_BODY_EL } tr`).eq(i).find(`input[name="${ enumConst.MAX }"]`), { tips: 1 })
  7034 + layer.tips('输入值小于最小值', $(`#${enumActionEl.TABLE_BODY_EL} tr`).eq(i).find(`input[name="${enumConst.MAX}"]`), { tips: 1 })
6378 7035 break
6379 7036 }
6380 7037 }
... ... @@ -6393,7 +7050,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6393 7050 condition: tableData,
6394 7051 type: event.data.type,
6395 7052 }
6396   - const [ err, res ] = await to(ConfigurationNodeApi.updateNodeAct(formModel))
  7053 + const [err, res] = await to(ConfigurationNodeApi.updateNodeAct(formModel))
6397 7054 if (err) return
6398 7055 UseLayUi.successMsg()
6399 7056 callback()
... ... @@ -6403,10 +7060,9 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6403 7060 return Number(value) >= Number(min) && Number(value) <= Number(max)
6404 7061 }
6405 7062
6406   -
6407 7063 function createLayerForm(type) {
6408 7064 const content = `
6409   - <form class="layui-form" lay-filter="${ enumActionEl.FORM_FILTER }">
  7065 + <form class="layui-form" lay-filter="${enumActionEl.FORM_FILTER}">
6410 7066 <div style="width:400px">
6411 7067 <div class="layui-form-item">
6412 7068 <label class="layui-form-label">类型</label>
... ... @@ -6415,47 +7071,25 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6415 7071 <input type="radio" name="type" value="2" title="产品/场景" disabled>
6416 7072 </div>
6417 7073 </div>
6418   -
6419   - <div id="${ enumActionEl.ORG_EL }">组织</div>
6420   -
6421   - <div class="layui-form-item" id="${ enumActionEl.DEVICE_EL }">
6422   - <label class="layui-form-label">设备</label>
6423   - <div class="layui-input-block">
6424   - <select name="${ enumConst.DEVICE_ID }" lay-verType="tips" lay-verify="required" lay-filter="${ enumActionEl.DEVICE_EL }">
6425   - </select>
6426   - </div>
6427   - </div>
6428   -
6429   - <div class="layui-form-item" id="${ enumActionEl.SLAVE_DEVICE_EL }" style="display: none">
6430   - <label class="layui-form-label">子设备</label>
6431   - <div class="layui-input-block">
6432   - <select name="${ enumConst.SLAVE_DEVICE_ID }" lay-verType="tips" lay-filter="${ enumActionEl.SLAVE_DEVICE_EL }">
6433   - </select>
6434   - </div>
6435   - </div>
6436   -
6437   - <div class="layui-form-item" id="${ enumActionEl.ATTR_EL }">
6438   - <label class="layui-form-label">属性</label>
6439   - <div class="layui-input-block">
6440   - <select name="${ enumConst.ATTR }" lay-verType="tips" lay-verify="required" lay-filter="${ enumActionEl.ATTR_EL }"></select>
6441   - </div>
6442   - </div>
  7074 +
  7075 + <div id="${enumActionEl.DATA_SOURCE_COMP_EL}"></div>
  7076 +
6443 7077 </div>
6444 7078 </form>
6445 7079 <div class="override__table">
6446 7080 <table class="layui-table" >
6447 7081 <thead>
6448 7082 <tr>
6449   - ${ IS_DISPLAY ? '<th style="text-align:center">类型</th>' : '' }
  7083 + ${IS_DISPLAY ? '<th style="text-align:center">类型</th>' : ''}
6450 7084 <th style="text-align:center">最小值(<=)</th>
6451 7085 <th style="text-align:center">最大值(>=)</th>
6452 7086 <th style="text-align:center">操作</th>
6453 7087 </tr>
6454 7088 </thead>
6455   - <tbody id="${ enumActionEl.TABLE_BODY_EL }"></tbody>
  7089 + <tbody id="${enumActionEl.TABLE_BODY_EL}"></tbody>
6456 7090 </table>
6457 7091 <div style="display:flex;justify-content:center;">
6458   - <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${ enumActionEl.ADD_BTN_EL }">添加一条</button>
  7092 + <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${enumActionEl.ADD_BTN_EL}">添加一条</button>
6459 7093 </div>
6460 7094 </div>
6461 7095 `
... ... @@ -6464,16 +7098,23 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6464 7098 title: enumEventType[type],
6465 7099 content,
6466 7100 skin: 'event-layer__override',
6467   - btn: [ '保存', '取消' ],
  7101 + btn: ['保存', '取消'],
  7102 + offset: '100px',
6468 7103 area: IS_DISPLAY ? '1000px' : '800PX',
6469 7104 success(layero) {
6470 7105 $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({
6471 7106 'lay-submit': '',
6472 7107 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER,
6473 7108 })
6474   - generatorOrgTreeSelect()
  7109 + const {
  7110 + component,
  7111 + echoDataSource,
  7112 + } = generatorDataSourceComponent({ overrideClass: 'dynamic-effect__data-source-comp--override' })
  7113 + $(`#${enumActionEl.DATA_SOURCE_COMP_EL}`).append(component)
6475 7114 const info = getLayerBindInfo('act', type)
6476   - if (info) {
  7115 + const { condition = [] } = info
  7116 + if (info && condition.length) {
  7117 + echoDataSource(info)
6477 7118 echoData(info)
6478 7119 } else {
6479 7120 addRecord()
... ... @@ -6482,7 +7123,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6482 7123 form.render()
6483 7124 },
6484 7125 yes(index) {
6485   - form.on(`submit(${ enumActionEl.LAYER_SUBMIT_FILTER })`, data => {
  7126 + form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => {
6486 7127 submit(() => {
6487 7128 layer.close(index)
6488 7129 getNodeBindInfo()
... ... @@ -6499,18 +7140,239 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6499 7140
6500 7141 }
6501 7142
  7143 + /**
  7144 + * @description 生成数据源组件
  7145 + * @param {object} options
  7146 + * @param {string} [options.overrideClass = ''] options.overrideClass
  7147 + * @param {boolean} [options.validate = true ] options.validate
  7148 + */
  7149 + function generatorDataSourceComponent(options = {}) {
  7150 + const { overrideClass = '', validate = true } = options
  7151 + const componentFilter = `data-source__component-filter-${Date.now()}`
  7152 + const componentId = `data-source__component-${Date.now()}`
  7153 +
  7154 + const validateRule = validate ? { layVerify: 'required', layVerType: 'tips' } : {}
  7155 +
  7156 + const enumDataSourceConst = {
  7157 + ORG_ID: 'orgId',
  7158 + DEVICE_ID: 'deviceId',
  7159 + SLAVE_DEVICE_ID: 'slaveDeviceId',
  7160 + ATTR: 'attr',
  7161 + GATEWAY: 'GATEWAY',
  7162 + }
  7163 + /**
  7164 + * @description
  7165 + * @type {{id: string, deviceType: string, name: string}[]}
  7166 + */
  7167 + let deviceList = []
  7168 +
  7169 + const component = document.createElement('div')
  7170 +
  7171 + $(component)
  7172 + .addClass(`layui-form data-source__component-style ${overrideClass}`)
  7173 + .attr({
  7174 + id: componentId,
  7175 + 'lay-filter': componentFilter,
  7176 + })
  7177 +
  7178 + init()
  7179 +
  7180 + function init() {
  7181 + generatorOrgTres()
  7182 + generatorDeviceSelect()
  7183 + generatorSlaveDevice()
  7184 + generatorAttrSelect()
  7185 + }
  7186 +
  7187 +
  7188 + /**
  7189 + * @description 根据组织ID获取设备
  7190 + */
  7191 + async function getDevicesByOrgId(organizationId) {
  7192 + if (organizationId) {
  7193 + const items = deviceList = await ConfigurationNodeApi.getMasterDevice(organizationId);
  7194 + $(`#${componentId} `).find(`select[name="${enumDataSourceConst.DEVICE_ID}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items }))
  7195 + form.render('select', componentFilter)
  7196 + }
  7197 + }
  7198 +
  7199 + /**
  7200 + * @description 通过主设备ID获取从设备
  7201 + */
  7202 + async function getSlaveDeviceByMasterDeviceId(orgId, deviceId) {
  7203 + if (deviceId && currentCheckedOrgNode) {
  7204 + const items = await ConfigurationNodeApi.getSlaveDevice(orgId, deviceId);
  7205 + $(`#${componentId} `).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items }))
  7206 + form.render('select', componentFilter)
  7207 + }
  7208 + }
  7209 +
  7210 + /**
  7211 + * @description 根据设备ID获取属性
  7212 + */
  7213 + async function getAttrByDeviceId(tbDeviceId) {
  7214 + if (tbDeviceId) {
  7215 + const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(tbDeviceId))
  7216 + $(`#${componentId} `).find(`select[name="${enumDataSourceConst.ATTR}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: res }))
  7217 + form.render('select', componentFilter)
  7218 + }
  7219 + }
  7220 +
  7221 +
  7222 + /**
  7223 + * @description 生成组织选择
  7224 + */
  7225 + async function generatorOrgTres() {
  7226 + const orgContainerId = `data-source__component--org-${Date.now()}`
  7227 + const orgContainer = `<div id="${orgContainerId}"></div>`
  7228 + $(component).append(orgContainer)
  7229 +
  7230 + const [err, res] = await to(ConfigurationNodeApi.getOrgTree())
  7231 + if (err) return
  7232 + treeList = res
  7233 +
  7234 + UseLayUi.createTreeSelect({
  7235 + elem: `#${orgContainerId}`,
  7236 + layFilter: enumDataSourceConst.ORG_ID,
  7237 + label: '组织',
  7238 + singleUsage: false,
  7239 + className: 'data-source__component-select',
  7240 + ...validateRule,
  7241 + treeProps: {
  7242 + data: treeList,
  7243 + onlyIconControl: true,
  7244 + click(node) {
  7245 + form.val(componentFilter, {
  7246 + [enumDataSourceConst.DEVICE_ID]: null,
  7247 + [enumDataSourceConst.SLAVE_DEVICE_ID]: null,
  7248 + [enumDataSourceConst.ATTR]: null,
  7249 + })
  7250 + getDevicesByOrgId(node.data.id)
  7251 + },
  7252 + },
  7253 + })
  7254 + }
  7255 +
  7256 + /**
  7257 + * @description 生成设备选择器
  7258 + */
  7259 + function generatorDeviceSelect() {
  7260 + const deviceSelect = UseLayUi.createSelect({
  7261 + label: '设备',
  7262 + bindValueFiled: enumDataSourceConst.DEVICE_ID,
  7263 + layFilter: `${componentFilter}--${enumDataSourceConst.DEVICE_ID}`,
  7264 + className: 'data-source__component-select',
  7265 + ...validateRule,
  7266 + onClick(data) {
  7267 + const { value } = data
  7268 + const selected = deviceList.find(item => item.id === value)
  7269 + form.val(componentFilter, {
  7270 + [enumDataSourceConst.SLAVE_DEVICE_ID]: null,
  7271 + [enumDataSourceConst.ATTR]: null,
  7272 + })
  7273 + if (selected.deviceType === enumDataSourceConst.GATEWAY) {
  7274 + $(`#${componentId}`).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`)
  7275 + .attr('lay-verify', 'required').attr('lay-verType', 'tips')
  7276 + .parentsUntil(`#${componentId}`).show()
  7277 + getSlaveDeviceByMasterDeviceId(currentCheckedOrgNode, selected.id)
  7278 + } else {
  7279 + $(`#${componentId}`).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`)
  7280 + .attr('lay-verify', '').attr('lay-verType', 'tips')
  7281 + .parentsUntil(`#${componentId}`).hide()
  7282 + getAttrByDeviceId(selected.id)
  7283 + }
  7284 + },
  7285 + })
  7286 + $(component).append(deviceSelect)
  7287 + }
  7288 +
  7289 + /**
  7290 + * @description 生成从设备选择器
  7291 + */
  7292 + function generatorSlaveDevice() {
  7293 + const slaveDeviceSelect = UseLayUi.createSelect({
  7294 + label: '子设备',
  7295 + bindValueFiled: enumDataSourceConst.SLAVE_DEVICE_ID,
  7296 + layFilter: `${componentFilter}--${enumDataSourceConst.SLAVE_DEVICE_ID}`,
  7297 + className: 'data-source__component-select',
  7298 + onClick(data) {
  7299 + const { value } = data
  7300 + form.val(componentFilter, {
  7301 + [enumDataSourceConst.ATTR]: null,
  7302 + })
  7303 + getAttrByDeviceId(value)
  7304 + },
  7305 + })
  7306 + $(component).append(slaveDeviceSelect)
  7307 + }
  7308 +
  7309 + /**
  7310 + * @description 生成属性选择器
  7311 + */
  7312 + function generatorAttrSelect() {
  7313 + const attrsSelect = UseLayUi.createSelect({
  7314 + label: '属性',
  7315 + bindValueFiled: enumDataSourceConst.ATTR,
  7316 + layFilter: `${componentFilter}--${enumDataSourceConst.ATTR}`,
  7317 + className: 'data-source__component-select',
  7318 + ...validateRule,
  7319 + })
  7320 + $(component).append(attrsSelect)
  7321 + }
  7322 +
  7323 + /**
  7324 + * @description 回显数据
  7325 + * @param {{orgId: string, deviceId: string, slaveDeviceId?: string, attr: string}} dataSource
  7326 + */
  7327 + function echoDataSource(dataSource = {}) {
  7328 + const { orgId, deviceId, slaveDeviceId, attr } = dataSource
  7329 + const queue = []
  7330 + if (orgId) {
  7331 + currentCheckedOrgNode = orgId
  7332 + queue.push(getDevicesByOrgId(orgId))
  7333 + }
  7334 + if (slaveDeviceId) {
  7335 + queue.push(getSlaveDeviceByMasterDeviceId(orgId, deviceId))
  7336 + $(`#${componentId}`).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`).parentsUntil(`#${componentId}`).show()
  7337 + queue.push(getAttrByDeviceId(slaveDeviceId))
  7338 + } else {
  7339 + $(`#${componentId}`).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`).parentsUntil(`#${componentId}`).hide()
  7340 + queue.push(getAttrByDeviceId(deviceId))
  7341 + }
  7342 + Promise.all(queue)
  7343 + .finally(() => {
  7344 + const orgNode = UseLayUi.findTreeObjectByField(treeList, currentCheckedOrgNode)
  7345 + $(`#${componentId} input[name="${enumDataSourceConst.ORG_ID}"]`).parent().find('span').html(orgNode?.name)
  7346 + form.val(componentFilter, {
  7347 + orgId,
  7348 + deviceId,
  7349 + slaveDeviceId,
  7350 + attr,
  7351 + })
  7352 + })
  7353 + }
  7354 +
  7355 + function getValue() {
  7356 + return form.val(componentFilter)
  7357 + }
  7358 +
  7359 + return { component, getValue, componentId, componentFilter, echoDataSource }
  7360 + }
  7361 +
6502 7362 // 异步设置此处才能生效 -- 设置默认select和样式和初始化侧边栏生成组件和事件绑定
6503 7363 setTimeout(() => {
6504 7364
6505 7365 // TODO 数据交互事件
6506   - $(`#${ enumInteractionType.DOWN }`).click({ type: enumInteractionType.DOWN }, handleDownOrUpEvent);
6507   - $(`#${ enumInteractionType.UP }`).click({ type: enumInteractionType.UP }, handleDownOrUpEvent);
6508   - $(`#${ enumInteractionType.SINGLE }`).click({ type: enumInteractionType.SINGLE }, handleClickOrDbClick);
6509   - $(`#${ enumInteractionType.DOUBLE }`).click({ type: enumInteractionType.DOUBLE }, handleClickOrDbClick);
  7366 + $(`#${enumDynamicEffectType.IMAGE}`).click({ type: enumDynamicEffectType.IMAGE }, handleSettingVarImage);
  7367 +
  7368 + $(`#${enumInteractionType.DOWN}`).click({ type: enumInteractionType.DOWN }, handleDownOrUpEvent);
  7369 + $(`#${enumInteractionType.UP}`).click({ type: enumInteractionType.UP }, handleDownOrUpEvent);
  7370 + $(`#${enumInteractionType.SINGLE}`).click({ type: enumInteractionType.SINGLE }, handleClickOrDbClick);
  7371 + $(`#${enumInteractionType.DOUBLE}`).click({ type: enumInteractionType.DOUBLE }, handleClickOrDbClick);
6510 7372 // 数据动效事件
6511   - $(`#${ enumDynamicEffectType.FLASH }`).click({ type: enumDynamicEffectType.FLASH }, handleDataDynamicEffect);
6512   - $(`#${ enumDynamicEffectType.DISPLAY }`).click({ type: enumDynamicEffectType.DISPLAY }, handleDataDynamicEffect);
6513   - $(`#${ enumDynamicEffectType.ROTATE }`).click({ type: enumDynamicEffectType.ROTATE }, handleDataDynamicEffect);
  7373 + $(`#${enumDynamicEffectType.FLASH}`).click({ type: enumDynamicEffectType.FLASH }, handleDataDynamicEffect);
  7374 + $(`#${enumDynamicEffectType.DISPLAY}`).click({ type: enumDynamicEffectType.DISPLAY }, handleDataDynamicEffect);
  7375 + $(`#${enumDynamicEffectType.ROTATE}`).click({ type: enumDynamicEffectType.ROTATE }, handleDataDynamicEffect);
6514 7376 });
6515 7377 };
6516 7378
... ... @@ -6848,9 +7710,9 @@ StyleFormatPanel.prototype.addFill = function (container) {
6848 7710 var tmpColor = mxUtils.getValue(ss.style, fillKey, null);
6849 7711 gradientPanel.style.display =
6850 7712 tmpColor != null &&
6851   - tmpColor != mxConstants.NONE &&
6852   - ss.fill &&
6853   - ss.style.shape != "image"
  7713 + tmpColor != mxConstants.NONE &&
  7714 + ss.fill &&
  7715 + ss.style.shape != "image"
6854 7716 ? ""
6855 7717 : "none";
6856 7718
... ... @@ -6912,7 +7774,7 @@ StyleFormatPanel.prototype.addFill = function (container) {
6912 7774 fillStyleSelect.style.display = ss.style.sketch == "1" ? "" : "none";
6913 7775 gradientPanel.style.display =
6914 7776 !ss.containsImage &&
6915   - (ss.style.sketch != "1" || fillStyle == "solid" || fillStyle == "auto")
  7777 + (ss.style.sketch != "1" || fillStyle == "solid" || fillStyle == "auto")
6916 7778 ? ""
6917 7779 : "none";
6918 7780 }
... ... @@ -6936,9 +7798,9 @@ StyleFormatPanel.prototype.addFill = function (container) {
6936 7798 new mxEventObject(
6937 7799 "styleChanged",
6938 7800 "keys",
6939   - [ mxConstants.STYLE_GRADIENT_DIRECTION ],
  7801 + [mxConstants.STYLE_GRADIENT_DIRECTION],
6940 7802 "values",
6941   - [ gradientSelect.value ],
  7803 + [gradientSelect.value],
6942 7804 "cells",
6943 7805 ss.cells,
6944 7806 ),
... ... @@ -6952,9 +7814,9 @@ StyleFormatPanel.prototype.addFill = function (container) {
6952 7814 new mxEventObject(
6953 7815 "styleChanged",
6954 7816 "keys",
6955   - [ "fillStyle" ],
  7817 + ["fillStyle"],
6956 7818 "values",
6957   - [ fillStyleSelect.value ],
  7819 + [fillStyleSelect.value],
6958 7820 "cells",
6959 7821 ss.cells,
6960 7822 ),
... ... @@ -7030,7 +7892,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7030 7892 styleSelect.style.border = "1px solid rgb(160, 160, 160)";
7031 7893 styleSelect.style.borderRadius = "4px";
7032 7894
7033   - var styles = [ "sharp", "rounded", "curved" ];
  7895 + var styles = ["sharp", "rounded", "curved"];
7034 7896
7035 7897 for (var i = 0; i < styles.length; i++) {
7036 7898 var styleOption = document.createElement("option");
... ... @@ -7042,14 +7904,14 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7042 7904 mxEvent.addListener(styleSelect, "change", function (evt) {
7043 7905 graph.getModel().beginUpdate();
7044 7906 try {
7045   - var keys = [ mxConstants.STYLE_ROUNDED, mxConstants.STYLE_CURVED ];
  7907 + var keys = [mxConstants.STYLE_ROUNDED, mxConstants.STYLE_CURVED];
7046 7908 // Default for rounded is 1
7047   - var values = [ "0", null ];
  7909 + var values = ["0", null];
7048 7910
7049 7911 if (styleSelect.value == "rounded") {
7050   - values = [ "1", null ];
  7912 + values = ["1", null];
7051 7913 } else if (styleSelect.value == "curved") {
7052   - values = [ null, "1" ];
  7914 + values = [null, "1"];
7053 7915 }
7054 7916
7055 7917 for (var i = 0; i < keys.length; i++) {
... ... @@ -7150,36 +8012,36 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7150 8012 menu,
7151 8013 75,
7152 8014 "solid",
7153   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7154   - [ null, null ],
  8015 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8016 + [null, null],
7155 8017 ).setAttribute("title", mxResources.get("solid"));
7156 8018 addItem(
7157 8019 menu,
7158 8020 75,
7159 8021 "dashed",
7160   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7161   - [ "1", null ],
  8022 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8023 + ["1", null],
7162 8024 ).setAttribute("title", mxResources.get("dashed"));
7163 8025 addItem(
7164 8026 menu,
7165 8027 75,
7166 8028 "dotted",
7167   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7168   - [ "1", "1 1" ],
  8029 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8030 + ["1", "1 1"],
7169 8031 ).setAttribute("title", mxResources.get("dotted") + " (1)");
7170 8032 addItem(
7171 8033 menu,
7172 8034 75,
7173 8035 "dotted",
7174   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7175   - [ "1", "1 2" ],
  8036 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8037 + ["1", "1 2"],
7176 8038 ).setAttribute("title", mxResources.get("dotted") + " (2)");
7177 8039 addItem(
7178 8040 menu,
7179 8041 75,
7180 8042 "dotted",
7181   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7182   - [ "1", "1 4" ],
  8043 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8044 + ["1", "1 4"],
7183 8045 ).setAttribute("title", mxResources.get("dotted") + " (3)");
7184 8046 }),
7185 8047 );
... ... @@ -7203,7 +8065,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7203 8065 mxConstants.STYLE_ENDSIZE,
7204 8066 "width",
7205 8067 ],
7206   - [ null, null, null, null ],
  8068 + [null, null, null, null],
7207 8069 "geIcon geSprite geSprite-connection",
7208 8070 null,
7209 8071 true,
... ... @@ -7219,7 +8081,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7219 8081 mxConstants.STYLE_ENDSIZE,
7220 8082 "width",
7221 8083 ],
7222   - [ "link", null, null, null ],
  8084 + ["link", null, null, null],
7223 8085 "geIcon geSprite geSprite-linkedge",
7224 8086 null,
7225 8087 true,
... ... @@ -7235,7 +8097,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7235 8097 mxConstants.STYLE_ENDSIZE,
7236 8098 "width",
7237 8099 ],
7238   - [ "flexArrow", null, null, null ],
  8100 + ["flexArrow", null, null, null],
7239 8101 "geIcon geSprite geSprite-arrow",
7240 8102 null,
7241 8103 true,
... ... @@ -7251,7 +8113,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7251 8113 mxConstants.STYLE_ENDSIZE,
7252 8114 "width",
7253 8115 ],
7254   - [ "arrow", null, null, null ],
  8116 + ["arrow", null, null, null],
7255 8117 "geIcon geSprite geSprite-simplearrow",
7256 8118 null,
7257 8119 true,
... ... @@ -7270,36 +8132,36 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7270 8132 menu,
7271 8133 33,
7272 8134 "solid",
7273   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7274   - [ null, null ],
  8135 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8136 + [null, null],
7275 8137 ).setAttribute("title", mxResources.get("solid"));
7276 8138 addItem(
7277 8139 menu,
7278 8140 33,
7279 8141 "dashed",
7280   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7281   - [ "1", null ],
  8142 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8143 + ["1", null],
7282 8144 ).setAttribute("title", mxResources.get("dashed"));
7283 8145 addItem(
7284 8146 menu,
7285 8147 33,
7286 8148 "dotted",
7287   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7288   - [ "1", "1 1" ],
  8149 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8150 + ["1", "1 1"],
7289 8151 ).setAttribute("title", mxResources.get("dotted") + " (1)");
7290 8152 addItem(
7291 8153 menu,
7292 8154 33,
7293 8155 "dotted",
7294   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7295   - [ "1", "1 2" ],
  8156 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8157 + ["1", "1 2"],
7296 8158 ).setAttribute("title", mxResources.get("dotted") + " (2)");
7297 8159 addItem(
7298 8160 menu,
7299 8161 33,
7300 8162 "dotted",
7301   - [ mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN ],
7302   - [ "1", "1 4" ],
  8163 + [mxConstants.STYLE_DASHED, mxConstants.STYLE_DASH_PATTERN],
  8164 + ["1", "1 4"],
7303 8165 ).setAttribute("title", mxResources.get("dotted") + " (3)");
7304 8166 }),
7305 8167 );
... ... @@ -7335,9 +8197,9 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7335 8197 new mxEventObject(
7336 8198 "styleChanged",
7337 8199 "keys",
7338   - [ mxConstants.STYLE_STROKEWIDTH ],
  8200 + [mxConstants.STYLE_STROKEWIDTH],
7339 8201 "values",
7340   - [ value ],
  8202 + [value],
7341 8203 "cells",
7342 8204 ss.cells,
7343 8205 ),
... ... @@ -7359,9 +8221,9 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7359 8221 new mxEventObject(
7360 8222 "styleChanged",
7361 8223 "keys",
7362   - [ mxConstants.STYLE_STROKEWIDTH ],
  8224 + [mxConstants.STYLE_STROKEWIDTH],
7363 8225 "values",
7364   - [ value ],
  8226 + [value],
7365 8227 "cells",
7366 8228 ss.cells,
7367 8229 ),
... ... @@ -7407,7 +8269,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7407 8269 mxConstants.STYLE_CURVED,
7408 8270 mxConstants.STYLE_NOEDGESTYLE,
7409 8271 ],
7410   - [ null, null, null ],
  8272 + [null, null, null],
7411 8273 "geIcon geSprite geSprite-straight",
7412 8274 null,
7413 8275 true,
... ... @@ -7422,7 +8284,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7422 8284 mxConstants.STYLE_CURVED,
7423 8285 mxConstants.STYLE_NOEDGESTYLE,
7424 8286 ],
7425   - [ "orthogonalEdgeStyle", null, null ],
  8287 + ["orthogonalEdgeStyle", null, null],
7426 8288 "geIcon geSprite geSprite-orthogonal",
7427 8289 null,
7428 8290 true,
... ... @@ -7438,7 +8300,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7438 8300 mxConstants.STYLE_CURVED,
7439 8301 mxConstants.STYLE_NOEDGESTYLE,
7440 8302 ],
7441   - [ "elbowEdgeStyle", null, null, null ],
  8303 + ["elbowEdgeStyle", null, null, null],
7442 8304 "geIcon geSprite geSprite-horizontalelbow",
7443 8305 null,
7444 8306 true,
... ... @@ -7454,7 +8316,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7454 8316 mxConstants.STYLE_CURVED,
7455 8317 mxConstants.STYLE_NOEDGESTYLE,
7456 8318 ],
7457   - [ "elbowEdgeStyle", "vertical", null, null ],
  8319 + ["elbowEdgeStyle", "vertical", null, null],
7458 8320 "geIcon geSprite geSprite-verticalelbow",
7459 8321 null,
7460 8322 true,
... ... @@ -7470,7 +8332,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7470 8332 mxConstants.STYLE_CURVED,
7471 8333 mxConstants.STYLE_NOEDGESTYLE,
7472 8334 ],
7473   - [ "isometricEdgeStyle", null, null, null ],
  8335 + ["isometricEdgeStyle", null, null, null],
7474 8336 "geIcon geSprite geSprite-horizontalisometric",
7475 8337 null,
7476 8338 true,
... ... @@ -7486,7 +8348,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7486 8348 mxConstants.STYLE_CURVED,
7487 8349 mxConstants.STYLE_NOEDGESTYLE,
7488 8350 ],
7489   - [ "isometricEdgeStyle", "vertical", null, null ],
  8351 + ["isometricEdgeStyle", "vertical", null, null],
7490 8352 "geIcon geSprite geSprite-verticalisometric",
7491 8353 null,
7492 8354 true,
... ... @@ -7503,7 +8365,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7503 8365 mxConstants.STYLE_CURVED,
7504 8366 mxConstants.STYLE_NOEDGESTYLE,
7505 8367 ],
7506   - [ "orthogonalEdgeStyle", "1", null ],
  8368 + ["orthogonalEdgeStyle", "1", null],
7507 8369 "geIcon geSprite geSprite-curved",
7508 8370 null,
7509 8371 true,
... ... @@ -7520,7 +8382,7 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7520 8382 mxConstants.STYLE_CURVED,
7521 8383 mxConstants.STYLE_NOEDGESTYLE,
7522 8384 ],
7523   - [ "entityRelationEdgeStyle", null, null ],
  8385 + ["entityRelationEdgeStyle", null, null],
7524 8386 "geIcon geSprite geSprite-entity",
7525 8387 null,
7526 8388 true,
... ... @@ -7544,8 +8406,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7544 8406 var item = this.editorUi.menus.edgeStyleChange(
7545 8407 menu,
7546 8408 "",
7547   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7548   - [ mxConstants.NONE, 0 ],
  8409 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8410 + [mxConstants.NONE, 0],
7549 8411 "geIcon",
7550 8412 null,
7551 8413 false,
... ... @@ -7562,8 +8424,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7562 8424 this.editorUi.menus.edgeStyleChange(
7563 8425 menu,
7564 8426 "",
7565   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7566   - [ mxConstants.ARROW_CLASSIC, 1 ],
  8427 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8428 + [mxConstants.ARROW_CLASSIC, 1],
7567 8429 null,
7568 8430 null,
7569 8431 false,
... ... @@ -7574,8 +8436,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7574 8436 this.editorUi.menus.edgeStyleChange(
7575 8437 menu,
7576 8438 "",
7577   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7578   - [ mxConstants.ARROW_CLASSIC_THIN, 1 ],
  8439 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8440 + [mxConstants.ARROW_CLASSIC_THIN, 1],
7579 8441 null,
7580 8442 null,
7581 8443 false,
... ... @@ -7586,8 +8448,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7586 8448 this.editorUi.menus.edgeStyleChange(
7587 8449 menu,
7588 8450 "",
7589   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7590   - [ mxConstants.ARROW_OPEN, 0 ],
  8451 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8452 + [mxConstants.ARROW_OPEN, 0],
7591 8453 null,
7592 8454 null,
7593 8455 false,
... ... @@ -7598,8 +8460,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7598 8460 this.editorUi.menus.edgeStyleChange(
7599 8461 menu,
7600 8462 "",
7601   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7602   - [ mxConstants.ARROW_OPEN_THIN, 0 ],
  8463 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8464 + [mxConstants.ARROW_OPEN_THIN, 0],
7603 8465 null,
7604 8466 null,
7605 8467 false,
... ... @@ -7610,8 +8472,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7610 8472 this.editorUi.menus.edgeStyleChange(
7611 8473 menu,
7612 8474 "",
7613   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7614   - [ "openAsync", 0 ],
  8475 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8476 + ["openAsync", 0],
7615 8477 null,
7616 8478 null,
7617 8479 false,
... ... @@ -7622,8 +8484,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7622 8484 this.editorUi.menus.edgeStyleChange(
7623 8485 menu,
7624 8486 "",
7625   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7626   - [ mxConstants.ARROW_BLOCK, 1 ],
  8487 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8488 + [mxConstants.ARROW_BLOCK, 1],
7627 8489 null,
7628 8490 null,
7629 8491 false,
... ... @@ -7634,8 +8496,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7634 8496 this.editorUi.menus.edgeStyleChange(
7635 8497 menu,
7636 8498 "",
7637   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7638   - [ mxConstants.ARROW_BLOCK_THIN, 1 ],
  8499 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8500 + [mxConstants.ARROW_BLOCK_THIN, 1],
7639 8501 null,
7640 8502 null,
7641 8503 false,
... ... @@ -7646,8 +8508,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7646 8508 this.editorUi.menus.edgeStyleChange(
7647 8509 menu,
7648 8510 "",
7649   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7650   - [ "async", 1 ],
  8511 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8512 + ["async", 1],
7651 8513 null,
7652 8514 null,
7653 8515 false,
... ... @@ -7658,8 +8520,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7658 8520 this.editorUi.menus.edgeStyleChange(
7659 8521 menu,
7660 8522 "",
7661   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7662   - [ mxConstants.ARROW_OVAL, 1 ],
  8523 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8524 + [mxConstants.ARROW_OVAL, 1],
7663 8525 null,
7664 8526 null,
7665 8527 false,
... ... @@ -7670,8 +8532,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7670 8532 this.editorUi.menus.edgeStyleChange(
7671 8533 menu,
7672 8534 "",
7673   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7674   - [ mxConstants.ARROW_DIAMOND, 1 ],
  8535 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8536 + [mxConstants.ARROW_DIAMOND, 1],
7675 8537 null,
7676 8538 null,
7677 8539 false,
... ... @@ -7682,8 +8544,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7682 8544 this.editorUi.menus.edgeStyleChange(
7683 8545 menu,
7684 8546 "",
7685   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7686   - [ mxConstants.ARROW_DIAMOND_THIN, 1 ],
  8547 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8548 + [mxConstants.ARROW_DIAMOND_THIN, 1],
7687 8549 null,
7688 8550 null,
7689 8551 false,
... ... @@ -7694,8 +8556,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7694 8556 this.editorUi.menus.edgeStyleChange(
7695 8557 menu,
7696 8558 "",
7697   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7698   - [ mxConstants.ARROW_CLASSIC, 0 ],
  8559 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8560 + [mxConstants.ARROW_CLASSIC, 0],
7699 8561 null,
7700 8562 null,
7701 8563 false,
... ... @@ -7706,8 +8568,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7706 8568 this.editorUi.menus.edgeStyleChange(
7707 8569 menu,
7708 8570 "",
7709   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7710   - [ mxConstants.ARROW_CLASSIC_THIN, 0 ],
  8571 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8572 + [mxConstants.ARROW_CLASSIC_THIN, 0],
7711 8573 null,
7712 8574 null,
7713 8575 false,
... ... @@ -7718,8 +8580,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7718 8580 this.editorUi.menus.edgeStyleChange(
7719 8581 menu,
7720 8582 "",
7721   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7722   - [ mxConstants.ARROW_BLOCK, 0 ],
  8583 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8584 + [mxConstants.ARROW_BLOCK, 0],
7723 8585 null,
7724 8586 null,
7725 8587 false,
... ... @@ -7730,8 +8592,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7730 8592 this.editorUi.menus.edgeStyleChange(
7731 8593 menu,
7732 8594 "",
7733   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7734   - [ mxConstants.ARROW_BLOCK_THIN, 0 ],
  8595 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8596 + [mxConstants.ARROW_BLOCK_THIN, 0],
7735 8597 null,
7736 8598 null,
7737 8599 false,
... ... @@ -7742,8 +8604,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7742 8604 this.editorUi.menus.edgeStyleChange(
7743 8605 menu,
7744 8606 "",
7745   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7746   - [ "async", 0 ],
  8607 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8608 + ["async", 0],
7747 8609 null,
7748 8610 null,
7749 8611 false,
... ... @@ -7754,8 +8616,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7754 8616 this.editorUi.menus.edgeStyleChange(
7755 8617 menu,
7756 8618 "",
7757   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7758   - [ mxConstants.ARROW_OVAL, 0 ],
  8619 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8620 + [mxConstants.ARROW_OVAL, 0],
7759 8621 null,
7760 8622 null,
7761 8623 false,
... ... @@ -7766,8 +8628,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7766 8628 this.editorUi.menus.edgeStyleChange(
7767 8629 menu,
7768 8630 "",
7769   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7770   - [ mxConstants.ARROW_DIAMOND, 0 ],
  8631 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8632 + [mxConstants.ARROW_DIAMOND, 0],
7771 8633 null,
7772 8634 null,
7773 8635 false,
... ... @@ -7778,8 +8640,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7778 8640 this.editorUi.menus.edgeStyleChange(
7779 8641 menu,
7780 8642 "",
7781   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7782   - [ mxConstants.ARROW_DIAMOND_THIN, 0 ],
  8643 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8644 + [mxConstants.ARROW_DIAMOND_THIN, 0],
7783 8645 null,
7784 8646 null,
7785 8647 false,
... ... @@ -7790,8 +8652,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7790 8652 this.editorUi.menus.edgeStyleChange(
7791 8653 menu,
7792 8654 "",
7793   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7794   - [ "box", 0 ],
  8655 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8656 + ["box", 0],
7795 8657 null,
7796 8658 null,
7797 8659 false,
... ... @@ -7802,8 +8664,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7802 8664 this.editorUi.menus.edgeStyleChange(
7803 8665 menu,
7804 8666 "",
7805   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7806   - [ "halfCircle", 0 ],
  8667 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8668 + ["halfCircle", 0],
7807 8669 null,
7808 8670 null,
7809 8671 false,
... ... @@ -7814,8 +8676,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7814 8676 this.editorUi.menus.edgeStyleChange(
7815 8677 menu,
7816 8678 "",
7817   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7818   - [ "dash", 0 ],
  8679 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8680 + ["dash", 0],
7819 8681 null,
7820 8682 null,
7821 8683 false,
... ... @@ -7826,8 +8688,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7826 8688 this.editorUi.menus.edgeStyleChange(
7827 8689 menu,
7828 8690 "",
7829   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7830   - [ "cross", 0 ],
  8691 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8692 + ["cross", 0],
7831 8693 null,
7832 8694 null,
7833 8695 false,
... ... @@ -7838,8 +8700,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7838 8700 this.editorUi.menus.edgeStyleChange(
7839 8701 menu,
7840 8702 "",
7841   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7842   - [ "circlePlus", 0 ],
  8703 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8704 + ["circlePlus", 0],
7843 8705 null,
7844 8706 null,
7845 8707 false,
... ... @@ -7850,8 +8712,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7850 8712 this.editorUi.menus.edgeStyleChange(
7851 8713 menu,
7852 8714 "",
7853   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7854   - [ "circle", 1 ],
  8715 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8716 + ["circle", 1],
7855 8717 null,
7856 8718 null,
7857 8719 false,
... ... @@ -7862,8 +8724,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7862 8724 this.editorUi.menus.edgeStyleChange(
7863 8725 menu,
7864 8726 "",
7865   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7866   - [ "baseDash", 0 ],
  8727 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8728 + ["baseDash", 0],
7867 8729 null,
7868 8730 null,
7869 8731 false,
... ... @@ -7874,8 +8736,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7874 8736 this.editorUi.menus.edgeStyleChange(
7875 8737 menu,
7876 8738 "",
7877   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7878   - [ "ERone", 0 ],
  8739 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8740 + ["ERone", 0],
7879 8741 null,
7880 8742 null,
7881 8743 false,
... ... @@ -7886,8 +8748,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7886 8748 this.editorUi.menus.edgeStyleChange(
7887 8749 menu,
7888 8750 "",
7889   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7890   - [ "ERmandOne", 0 ],
  8751 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8752 + ["ERmandOne", 0],
7891 8753 null,
7892 8754 null,
7893 8755 false,
... ... @@ -7898,8 +8760,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7898 8760 this.editorUi.menus.edgeStyleChange(
7899 8761 menu,
7900 8762 "",
7901   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7902   - [ "ERmany", 0 ],
  8763 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8764 + ["ERmany", 0],
7903 8765 null,
7904 8766 null,
7905 8767 false,
... ... @@ -7910,8 +8772,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7910 8772 this.editorUi.menus.edgeStyleChange(
7911 8773 menu,
7912 8774 "",
7913   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7914   - [ "ERoneToMany", 0 ],
  8775 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8776 + ["ERoneToMany", 0],
7915 8777 null,
7916 8778 null,
7917 8779 false,
... ... @@ -7922,8 +8784,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7922 8784 this.editorUi.menus.edgeStyleChange(
7923 8785 menu,
7924 8786 "",
7925   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7926   - [ "ERzeroToOne", 0 ],
  8787 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8788 + ["ERzeroToOne", 0],
7927 8789 null,
7928 8790 null,
7929 8791 false,
... ... @@ -7934,8 +8796,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7934 8796 this.editorUi.menus.edgeStyleChange(
7935 8797 menu,
7936 8798 "",
7937   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7938   - [ "ERzeroToMany", 0 ],
  8799 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8800 + ["ERzeroToMany", 0],
7939 8801 null,
7940 8802 null,
7941 8803 false,
... ... @@ -7946,8 +8808,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7946 8808 this.editorUi.menus.edgeStyleChange(
7947 8809 menu,
7948 8810 "",
7949   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7950   - [ "doubleBlock", 0 ],
  8811 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8812 + ["doubleBlock", 0],
7951 8813 null,
7952 8814 null,
7953 8815 false,
... ... @@ -7958,8 +8820,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7958 8820 this.editorUi.menus.edgeStyleChange(
7959 8821 menu,
7960 8822 "",
7961   - [ mxConstants.STYLE_STARTARROW, "startFill" ],
7962   - [ "doubleBlock", 1 ],
  8823 + [mxConstants.STYLE_STARTARROW, "startFill"],
  8824 + ["doubleBlock", 1],
7963 8825 null,
7964 8826 null,
7965 8827 false,
... ... @@ -7971,8 +8833,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
7971 8833 .edgeStyleChange(
7972 8834 menu,
7973 8835 "",
7974   - [ mxConstants.STYLE_STARTARROW ],
7975   - [ mxConstants.ARROW_BLOCK ],
  8836 + [mxConstants.STYLE_STARTARROW],
  8837 + [mxConstants.ARROW_BLOCK],
7976 8838 "geIcon geSprite geSprite-startblocktrans",
7977 8839 null,
7978 8840 false,
... ... @@ -8008,8 +8870,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8008 8870 var item = this.editorUi.menus.edgeStyleChange(
8009 8871 menu,
8010 8872 "",
8011   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8012   - [ mxConstants.NONE, 0 ],
  8873 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8874 + [mxConstants.NONE, 0],
8013 8875 "geIcon",
8014 8876 null,
8015 8877 false,
... ... @@ -8026,8 +8888,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8026 8888 this.editorUi.menus.edgeStyleChange(
8027 8889 menu,
8028 8890 "",
8029   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8030   - [ mxConstants.ARROW_CLASSIC, 1 ],
  8891 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8892 + [mxConstants.ARROW_CLASSIC, 1],
8031 8893 null,
8032 8894 null,
8033 8895 false,
... ... @@ -8039,8 +8901,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8039 8901 this.editorUi.menus.edgeStyleChange(
8040 8902 menu,
8041 8903 "",
8042   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8043   - [ mxConstants.ARROW_CLASSIC_THIN, 1 ],
  8904 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8905 + [mxConstants.ARROW_CLASSIC_THIN, 1],
8044 8906 null,
8045 8907 null,
8046 8908 false,
... ... @@ -8052,8 +8914,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8052 8914 this.editorUi.menus.edgeStyleChange(
8053 8915 menu,
8054 8916 "",
8055   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8056   - [ mxConstants.ARROW_OPEN, 0 ],
  8917 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8918 + [mxConstants.ARROW_OPEN, 0],
8057 8919 null,
8058 8920 null,
8059 8921 false,
... ... @@ -8065,8 +8927,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8065 8927 this.editorUi.menus.edgeStyleChange(
8066 8928 menu,
8067 8929 "",
8068   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8069   - [ mxConstants.ARROW_OPEN_THIN, 0 ],
  8930 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8931 + [mxConstants.ARROW_OPEN_THIN, 0],
8070 8932 null,
8071 8933 null,
8072 8934 false,
... ... @@ -8078,8 +8940,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8078 8940 this.editorUi.menus.edgeStyleChange(
8079 8941 menu,
8080 8942 "",
8081   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8082   - [ "openAsync", 0 ],
  8943 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8944 + ["openAsync", 0],
8083 8945 null,
8084 8946 null,
8085 8947 false,
... ... @@ -8091,8 +8953,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8091 8953 this.editorUi.menus.edgeStyleChange(
8092 8954 menu,
8093 8955 "",
8094   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8095   - [ mxConstants.ARROW_BLOCK, 1 ],
  8956 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8957 + [mxConstants.ARROW_BLOCK, 1],
8096 8958 null,
8097 8959 null,
8098 8960 false,
... ... @@ -8104,8 +8966,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8104 8966 this.editorUi.menus.edgeStyleChange(
8105 8967 menu,
8106 8968 "",
8107   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8108   - [ mxConstants.ARROW_BLOCK_THIN, 1 ],
  8969 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8970 + [mxConstants.ARROW_BLOCK_THIN, 1],
8109 8971 null,
8110 8972 null,
8111 8973 false,
... ... @@ -8117,8 +8979,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8117 8979 this.editorUi.menus.edgeStyleChange(
8118 8980 menu,
8119 8981 "",
8120   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8121   - [ "async", 1 ],
  8982 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8983 + ["async", 1],
8122 8984 null,
8123 8985 null,
8124 8986 false,
... ... @@ -8130,8 +8992,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8130 8992 this.editorUi.menus.edgeStyleChange(
8131 8993 menu,
8132 8994 "",
8133   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8134   - [ mxConstants.ARROW_OVAL, 1 ],
  8995 + [mxConstants.STYLE_ENDARROW, "endFill"],
  8996 + [mxConstants.ARROW_OVAL, 1],
8135 8997 null,
8136 8998 null,
8137 8999 false,
... ... @@ -8143,8 +9005,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8143 9005 this.editorUi.menus.edgeStyleChange(
8144 9006 menu,
8145 9007 "",
8146   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8147   - [ mxConstants.ARROW_DIAMOND, 1 ],
  9008 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9009 + [mxConstants.ARROW_DIAMOND, 1],
8148 9010 null,
8149 9011 null,
8150 9012 false,
... ... @@ -8156,8 +9018,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8156 9018 this.editorUi.menus.edgeStyleChange(
8157 9019 menu,
8158 9020 "",
8159   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8160   - [ mxConstants.ARROW_DIAMOND_THIN, 1 ],
  9021 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9022 + [mxConstants.ARROW_DIAMOND_THIN, 1],
8161 9023 null,
8162 9024 null,
8163 9025 false,
... ... @@ -8169,8 +9031,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8169 9031 this.editorUi.menus.edgeStyleChange(
8170 9032 menu,
8171 9033 "",
8172   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8173   - [ mxConstants.ARROW_CLASSIC, 0 ],
  9034 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9035 + [mxConstants.ARROW_CLASSIC, 0],
8174 9036 null,
8175 9037 null,
8176 9038 false,
... ... @@ -8182,8 +9044,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8182 9044 this.editorUi.menus.edgeStyleChange(
8183 9045 menu,
8184 9046 "",
8185   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8186   - [ mxConstants.ARROW_CLASSIC_THIN, 0 ],
  9047 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9048 + [mxConstants.ARROW_CLASSIC_THIN, 0],
8187 9049 null,
8188 9050 null,
8189 9051 false,
... ... @@ -8195,8 +9057,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8195 9057 this.editorUi.menus.edgeStyleChange(
8196 9058 menu,
8197 9059 "",
8198   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8199   - [ mxConstants.ARROW_BLOCK, 0 ],
  9060 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9061 + [mxConstants.ARROW_BLOCK, 0],
8200 9062 null,
8201 9063 null,
8202 9064 false,
... ... @@ -8208,8 +9070,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8208 9070 this.editorUi.menus.edgeStyleChange(
8209 9071 menu,
8210 9072 "",
8211   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8212   - [ mxConstants.ARROW_BLOCK_THIN, 0 ],
  9073 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9074 + [mxConstants.ARROW_BLOCK_THIN, 0],
8213 9075 null,
8214 9076 null,
8215 9077 false,
... ... @@ -8221,8 +9083,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8221 9083 this.editorUi.menus.edgeStyleChange(
8222 9084 menu,
8223 9085 "",
8224   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8225   - [ "async", 0 ],
  9086 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9087 + ["async", 0],
8226 9088 null,
8227 9089 null,
8228 9090 false,
... ... @@ -8234,8 +9096,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8234 9096 this.editorUi.menus.edgeStyleChange(
8235 9097 menu,
8236 9098 "",
8237   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8238   - [ mxConstants.ARROW_OVAL, 0 ],
  9099 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9100 + [mxConstants.ARROW_OVAL, 0],
8239 9101 null,
8240 9102 null,
8241 9103 false,
... ... @@ -8247,8 +9109,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8247 9109 this.editorUi.menus.edgeStyleChange(
8248 9110 menu,
8249 9111 "",
8250   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8251   - [ mxConstants.ARROW_DIAMOND, 0 ],
  9112 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9113 + [mxConstants.ARROW_DIAMOND, 0],
8252 9114 null,
8253 9115 null,
8254 9116 false,
... ... @@ -8260,8 +9122,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8260 9122 this.editorUi.menus.edgeStyleChange(
8261 9123 menu,
8262 9124 "",
8263   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8264   - [ mxConstants.ARROW_DIAMOND_THIN, 0 ],
  9125 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9126 + [mxConstants.ARROW_DIAMOND_THIN, 0],
8265 9127 null,
8266 9128 null,
8267 9129 false,
... ... @@ -8273,8 +9135,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8273 9135 this.editorUi.menus.edgeStyleChange(
8274 9136 menu,
8275 9137 "",
8276   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8277   - [ "box", 0 ],
  9138 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9139 + ["box", 0],
8278 9140 null,
8279 9141 null,
8280 9142 false,
... ... @@ -8286,8 +9148,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8286 9148 this.editorUi.menus.edgeStyleChange(
8287 9149 menu,
8288 9150 "",
8289   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8290   - [ "halfCircle", 0 ],
  9151 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9152 + ["halfCircle", 0],
8291 9153 null,
8292 9154 null,
8293 9155 false,
... ... @@ -8299,8 +9161,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8299 9161 this.editorUi.menus.edgeStyleChange(
8300 9162 menu,
8301 9163 "",
8302   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8303   - [ "dash", 0 ],
  9164 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9165 + ["dash", 0],
8304 9166 null,
8305 9167 null,
8306 9168 false,
... ... @@ -8312,8 +9174,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8312 9174 this.editorUi.menus.edgeStyleChange(
8313 9175 menu,
8314 9176 "",
8315   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8316   - [ "cross", 0 ],
  9177 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9178 + ["cross", 0],
8317 9179 null,
8318 9180 null,
8319 9181 false,
... ... @@ -8325,8 +9187,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8325 9187 this.editorUi.menus.edgeStyleChange(
8326 9188 menu,
8327 9189 "",
8328   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8329   - [ "circlePlus", 0 ],
  9190 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9191 + ["circlePlus", 0],
8330 9192 null,
8331 9193 null,
8332 9194 false,
... ... @@ -8338,8 +9200,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8338 9200 this.editorUi.menus.edgeStyleChange(
8339 9201 menu,
8340 9202 "",
8341   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8342   - [ "circle", 0 ],
  9203 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9204 + ["circle", 0],
8343 9205 null,
8344 9206 null,
8345 9207 false,
... ... @@ -8351,8 +9213,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8351 9213 this.editorUi.menus.edgeStyleChange(
8352 9214 menu,
8353 9215 "",
8354   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8355   - [ "baseDash", 0 ],
  9216 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9217 + ["baseDash", 0],
8356 9218 null,
8357 9219 null,
8358 9220 false,
... ... @@ -8364,8 +9226,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8364 9226 this.editorUi.menus.edgeStyleChange(
8365 9227 menu,
8366 9228 "",
8367   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8368   - [ "ERone", 0 ],
  9229 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9230 + ["ERone", 0],
8369 9231 null,
8370 9232 null,
8371 9233 false,
... ... @@ -8377,8 +9239,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8377 9239 this.editorUi.menus.edgeStyleChange(
8378 9240 menu,
8379 9241 "",
8380   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8381   - [ "ERmandOne", 0 ],
  9242 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9243 + ["ERmandOne", 0],
8382 9244 null,
8383 9245 null,
8384 9246 false,
... ... @@ -8390,8 +9252,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8390 9252 this.editorUi.menus.edgeStyleChange(
8391 9253 menu,
8392 9254 "",
8393   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8394   - [ "ERmany", 0 ],
  9255 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9256 + ["ERmany", 0],
8395 9257 null,
8396 9258 null,
8397 9259 false,
... ... @@ -8403,8 +9265,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8403 9265 this.editorUi.menus.edgeStyleChange(
8404 9266 menu,
8405 9267 "",
8406   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8407   - [ "ERoneToMany", 0 ],
  9268 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9269 + ["ERoneToMany", 0],
8408 9270 null,
8409 9271 null,
8410 9272 false,
... ... @@ -8416,8 +9278,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8416 9278 this.editorUi.menus.edgeStyleChange(
8417 9279 menu,
8418 9280 "",
8419   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8420   - [ "ERzeroToOne", 0 ],
  9281 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9282 + ["ERzeroToOne", 0],
8421 9283 null,
8422 9284 null,
8423 9285 false,
... ... @@ -8429,8 +9291,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8429 9291 this.editorUi.menus.edgeStyleChange(
8430 9292 menu,
8431 9293 "",
8432   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8433   - [ "ERzeroToMany", 0 ],
  9294 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9295 + ["ERzeroToMany", 0],
8434 9296 null,
8435 9297 null,
8436 9298 false,
... ... @@ -8442,8 +9304,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8442 9304 this.editorUi.menus.edgeStyleChange(
8443 9305 menu,
8444 9306 "",
8445   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8446   - [ "doubleBlock", 0 ],
  9307 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9308 + ["doubleBlock", 0],
8447 9309 null,
8448 9310 null,
8449 9311 false,
... ... @@ -8455,8 +9317,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8455 9317 this.editorUi.menus.edgeStyleChange(
8456 9318 menu,
8457 9319 "",
8458   - [ mxConstants.STYLE_ENDARROW, "endFill" ],
8459   - [ "doubleBlock", 1 ],
  9320 + [mxConstants.STYLE_ENDARROW, "endFill"],
  9321 + ["doubleBlock", 1],
8460 9322 null,
8461 9323 null,
8462 9324 false,
... ... @@ -8469,8 +9331,8 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8469 9331 .edgeStyleChange(
8470 9332 menu,
8471 9333 "",
8472   - [ mxConstants.STYLE_ENDARROW ],
8473   - [ mxConstants.ARROW_BLOCK ],
  9334 + [mxConstants.STYLE_ENDARROW],
  9335 + [mxConstants.ARROW_BLOCK],
8474 9336 "geIcon geSprite geSprite-endblocktrans",
8475 9337 null,
8476 9338 false,
... ... @@ -8693,14 +9555,14 @@ StyleFormatPanel.prototype.addStroke = function (container) {
8693 9555 edgeStyleDiv.className =
8694 9556 "geSprite " +
8695 9557 (mxUtils.getValue(ss.style, mxConstants.STYLE_ELBOW, null) ==
8696   - "vertical"
  9558 + "vertical"
8697 9559 ? "geSprite-verticalelbow"
8698 9560 : "geSprite-horizontalelbow");
8699 9561 } else if (es == "isometricEdgeStyle") {
8700 9562 edgeStyleDiv.className =
8701 9563 "geSprite " +
8702 9564 (mxUtils.getValue(ss.style, mxConstants.STYLE_ELBOW, null) ==
8703   - "vertical"
  9565 + "vertical"
8704 9566 ? "geSprite-verticalisometric"
8705 9567 : "geSprite-horizontalisometric");
8706 9568 } else {
... ... @@ -8957,7 +9819,7 @@ StyleFormatPanel.prototype.addLineJumps = function (container) {
8957 9819 styleSelect.style.border = "1px solid rgb(160, 160, 160)";
8958 9820 styleSelect.style.borderRadius = "4px";
8959 9821
8960   - var styles = [ "none", "arc", "gap", "sharp", "line" ];
  9822 + var styles = ["none", "arc", "gap", "sharp", "line"];
8961 9823
8962 9824 for (var i = 0; i < styles.length; i++) {
8963 9825 var styleOption = document.createElement("option");
... ... @@ -8974,9 +9836,9 @@ StyleFormatPanel.prototype.addLineJumps = function (container) {
8974 9836 new mxEventObject(
8975 9837 "styleChanged",
8976 9838 "keys",
8977   - [ "jumpStyle" ],
  9839 + ["jumpStyle"],
8978 9840 "values",
8979   - [ styleSelect.value ],
  9841 + [styleSelect.value],
8980 9842 "cells",
8981 9843 ss.cells,
8982 9844 ),
... ... @@ -9126,7 +9988,7 @@ StyleFormatPanel.prototype.addStyleOps = function (div) {
9126 9988 div.style.paddingTop = "10px";
9127 9989 div.style.paddingBottom = "10px";
9128 9990
9129   - this.addActions(div, [ "setAsDefaultStyle" ]);
  9991 + this.addActions(div, ["setAsDefaultStyle"]);
9130 9992
9131 9993 return div;
9132 9994 };
... ... @@ -9327,7 +10189,7 @@ DiagramStylePanel.prototype.addView = function (div) {
9327 10189 labelBackgroundColor:
9328 10190 graphStyle != null ? graphStyle.background : null,
9329 10191 },
9330   - [ cells[i] ],
  10192 + [cells[i]],
9331 10193 );
9332 10194 }
9333 10195
... ... @@ -9503,7 +10365,7 @@ DiagramStylePanel.prototype.addView = function (div) {
9503 10365 v1,
9504 10366 "edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;endSize=5;strokeWidth=2;",
9505 10367 );
9506   - e1.geometry.points = [ new mxPoint(32, 70) ];
  10368 + e1.geometry.points = [new mxPoint(32, 70)];
9507 10369 e1.geometry.offset = new mxPoint(0, 8);
9508 10370 } finally {
9509 10371 graph2.model.endUpdate();
... ... @@ -10252,8 +11114,8 @@ DiagramFormatPanel.prototype.addPaperSize = function (div) {
10252 11114 * Adds the label menu items to the given menu and parent.
10253 11115 */
10254 11116 DiagramFormatPanel.prototype.addStyleOps = function (div) {
10255   - this.addActions(div, [ "editData" ]);
10256   - this.addActions(div, [ "clearDefaultStyle" ]);
  11117 + this.addActions(div, ["editData"]);
  11118 + this.addActions(div, ["clearDefaultStyle"]);
10257 11119
10258 11120 return div;
10259 11121 };
... ... @@ -10281,7 +11143,7 @@ class UseLayUi {
10281 11143 return result === '[object Function]' || result === '[object AsyncFunction]'
10282 11144 }
10283 11145
10284   - static dynamicAttr = (attr, value) => value ? `${ attr }="${ value }"` : ''
  11146 + static dynamicAttr = (attr, value) => value ? `${attr}="${value}"` : ''
10285 11147
10286 11148 /**
10287 11149 * @description format data source to tree structure
... ... @@ -10301,7 +11163,7 @@ class UseLayUi {
10301 11163 if (next[childrenField] && next[childrenField].length) {
10302 11164 children = fn(next.children)
10303 11165 }
10304   - return [ ...prev, { children, ...customSetValue(next) } ]
  11166 + return [...prev, { children, ...customSetValue(next) }]
10305 11167 }, [])
10306 11168 }
10307 11169 return fn(data)
... ... @@ -10350,9 +11212,9 @@ class UseLayUi {
10350 11212 let { renderFn } = options
10351 11213 renderFn = renderFn || ((record) => {
10352 11214 if (typeof record === 'object') {
10353   - return `<option value="${ record[valueField] }" ${ record.disabled ? 'disabled=""' : '' }>${ record[labelField] }</option>`
  11215 + return `<option value="${record[valueField]}" ${record.disabled ? 'disabled=""' : ''}>${record[labelField]}</option>`
10354 11216 } else {
10355   - return `<option value="${ record }">${ record }</option>`
  11217 + return `<option value="${record}">${record}</option>`
10356 11218 }
10357 11219 })
10358 11220 const optionsList = dataSource.map(renderFn)
... ... @@ -10366,8 +11228,8 @@ class UseLayUi {
10366 11228 */
10367 11229 static createSingleUseFormItem(content, props = '') {
10368 11230 return `
10369   - <div class="layui-form" ${ props }>
10370   - ${ content }
  11231 + <div class="layui-form" ${props}>
  11232 + ${content}
10371 11233 </div>
10372 11234 `
10373 11235 }
... ... @@ -10388,7 +11250,9 @@ class UseLayUi {
10388 11250 /**
10389 11251 * @description create layui single select template
10390 11252 * @param {string} [options.layFilter] options.layFilter
  11253 + * @param {string} [options.bindValueFiled] options.bindValueFiled
10391 11254 * @param {string} [options.layVerify] options.layVerify
  11255 + * @param {string} [options.layVerType] options.layVerType
10392 11256 * @param {Function} [options.renderFn] options.renderFn
10393 11257 * @param {Array} [options.dataSource = []] options.dataSource
10394 11258 * @param {string} [options.valueField = id] options.valueField
... ... @@ -10404,7 +11268,9 @@ class UseLayUi {
10404 11268 const {
10405 11269 elem,
10406 11270 layFilter,
  11271 + bindValueFiled,
10407 11272 layVerify,
  11273 + layVerType,
10408 11274 renderFn,
10409 11275 dataSource = [],
10410 11276 valueField = 'id',
... ... @@ -10429,7 +11295,7 @@ class UseLayUi {
10429 11295 return dataSource.map(record => renderFn(record))
10430 11296 }
10431 11297 return formatDataSource(dataSource).map(record => {
10432   - return `<option value="${ record[valueField] }" ${ record.disable ? 'disabled=""' : '' }>${ record[labelField] }</option>`
  11298 + return `<option value="${record[valueField]}" ${record.disable ? 'disabled=""' : ''}>${record[labelField]}</option>`
10433 11299 })
10434 11300 }
10435 11301
... ... @@ -10440,7 +11306,7 @@ class UseLayUi {
10440 11306 }
10441 11307
10442 11308 if (layFilter) {
10443   - form.on(`select(${ layFilter })`, (data) => {
  11309 + form.on(`select(${layFilter})`, (data) => {
10444 11310 if (onClick && this.isFunction(onClick)) {
10445 11311 onClick(data)
10446 11312 }
... ... @@ -10448,11 +11314,11 @@ class UseLayUi {
10448 11314 }
10449 11315
10450 11316 let template = `
10451   - <div class="layui-form-item ${ className }">
10452   - <label class="layui-form-label">${ label }</label>
  11317 + <div class="layui-form-item ${className}">
  11318 + <label class="layui-form-label">${label}</label>
10453 11319 <div class="layui-input-block">
10454   - <select name="${ layFilter }" ${ this.dynamicAttr('lay-filter', layFilter) } ${ this.dynamicAttr('lay-verify', layVerify) }>
10455   - ${ generateOptionTemplate(dataSource) }
  11320 + <select name="${bindValueFiled}" ${this.dynamicAttr('lay-filter', layFilter)} ${this.dynamicAttr('lay-verify', layVerify)} ${this.dynamicAttr('lay-verType', layVerType)}>
  11321 + ${generateOptionTemplate(dataSource)}
10456 11322 </select>
10457 11323 </div>
10458 11324 </div>`
... ... @@ -10464,7 +11330,7 @@ class UseLayUi {
10464 11330 form.render('select', layFilter)
10465 11331 }
10466 11332
10467   - template = singleUsage ? UseLayUi.createSingleUseFormItem(template, this.dynamicAttr('lay-filter', layFilter)) : template
  11333 + template = singleUsage ? UseLayUi.createSingleUseFormItem(template, '') : template
10468 11334
10469 11335
10470 11336 function mount() {
... ... @@ -10490,6 +11356,8 @@ class UseLayUi {
10490 11356 * @param {boolean} [options.singleUsage = true] options.singleUsage
10491 11357 * @param {Function} [options.customSetTree = ((record) => ({ id: record.id, title: record.name }))] options.customSetTree
10492 11358 * @param {boolean} [options.autoFormatDataSource = true] options.autoFormatDataSource
  11359 + * @param {string} [options.layVerify] options.layVerify
  11360 + * @param {string} [options.layVerType] options.layVerType
10493 11361 * @param {Function} [options.treeProps.onReady] options.treeProps.onReady
10494 11362 */
10495 11363 static createTreeSelect(options) {
... ... @@ -10509,23 +11377,25 @@ class UseLayUi {
10509 11377 labelField = 'name',
10510 11378 valueField = 'id',
10511 11379 childrenField = 'children',
  11380 + layVerify,
  11381 + layVerType,
10512 11382 } = options
10513 11383
10514 11384 let { data = [], click, onReady } = treeProps
10515 11385
10516 11386 let template = `
10517   - <div class="layui-form-item ${ CLASS_NAME } ${ className }">
10518   - <label class="layui-form-label">${ label }</label>
  11387 + <div class="layui-form-item ${CLASS_NAME} ${className}">
  11388 + <label class="layui-form-label">${label}</label>
10519 11389 <div class="layui-input-block">
10520   - <div class="layui-unselect layui-form-select ${ SELECT_CLS }">
  11390 + <div class="layui-unselect layui-form-select ${SELECT_CLS}">
10521 11391 <div class="layui-select-title">
10522 11392 <span class="layui-input layui-unselect">请选择</span>
10523   - <input type="hidden" name="${ layFilter }">
  11393 + <input ${this.dynamicAttr('lay-verify', layVerify)} ${this.dynamicAttr('lay-verType', layVerType)} type="text" style="visibility: hidden; position: absolute; top: 0" name="${layFilter}">
10524 11394 <i class="layui-edge"></i>
10525 11395 </div>
10526 11396 <dl class="layui-anim layui-anim-upbit">
10527 11397 <dd>
10528   - <ul id="${ layFilter }"></ul>
  11398 + <ul class="tree-select__tree-mount"></ul>
10529 11399 </dd>
10530 11400 </dl>
10531 11401 </div>
... ... @@ -10543,7 +11413,7 @@ class UseLayUi {
10543 11413 $(elem)
10544 11414 .find('.layui-form-select').removeClass('layui-form-selected').end()
10545 11415 .find(".layui-select-title span").html(title).end()
10546   - .find(`input:hidden[name='${ layFilter }']`).val(id);
  11416 + .find(`input[name='${layFilter}']`).val(id);
10547 11417 }
10548 11418
10549 11419 // init mount
... ... @@ -10556,7 +11426,7 @@ class UseLayUi {
10556 11426 tree.render({
10557 11427 ...treeProps,
10558 11428 ...(autoFormatDataSource ? { data: UseLayUi.formatTreeDataSource(data, customSetTree, valueField, labelField, childrenField) } : {}),
10559   - elem: $(elem).find(`#${ layFilter }`),
  11429 + elem: $(elem).find('.tree-select__tree-mount'),
10560 11430 click(node) {
10561 11431 setValue(node.data)
10562 11432 if (UseLayUi.isFunction(click)) click(node)
... ... @@ -10564,10 +11434,9 @@ class UseLayUi {
10564 11434 })
10565 11435
10566 11436 // focus
10567   - $(`.${ SELECT_CLS }`)
  11437 + $(`.${SELECT_CLS}`).off('click')
10568 11438 .on("click", ".layui-select-title", function (e) {
10569   - $(".layui-form-select").not($(this).parents(".layui-form-select")).removeClass("layui-form-selected");
10570   - $(this).parents(`.${ SELECT_CLS }`).toggleClass("layui-form-selected");
  11439 + $(this).parents(`.${SELECT_CLS}`).toggleClass("layui-form-selected");
10571 11440 layui.stope(e);
10572 11441 })
10573 11442 .on('click', '.layui-anim', (e) => {
... ... @@ -10578,15 +11447,16 @@ class UseLayUi {
10578 11447 })
10579 11448
10580 11449 // blur
10581   - $(document)
10582   - .on("click", function (e) {
10583   - const target = e.target
10584   - const parentNode = document.getElementById(layFilter)
10585   - if (!parentNode) return
10586   - const showClose = UseLayUi.isInNode(parentNode, target, true)
10587   - if (showClose) return
10588   - $(`.${ SELECT_CLS }`).removeClass("layui-form-selected")
10589   - });
  11450 + // $(document)
  11451 + // .on("click", function (e) {
  11452 + // const target = e.target
  11453 + // const parentNode = $(`.${CLASS_NAME} .tree-select__tree-mount`)
  11454 + // if (!parentNode) return
  11455 + // console.log($.contains(parentNode, target))
  11456 + // // const showClose = UseLayUi.isInNode(parentNode, target, true)
  11457 + // // if (showClose) return
  11458 + // // $(`.${ SELECT_CLS }`).removeClass("layui-form-selected")
  11459 + // });
10590 11460
10591 11461 if (UseLayUi.isFunction(onReady)) {
10592 11462 onReady(setValue)
... ... @@ -10616,27 +11486,27 @@ class UseLayUi {
10616 11486 } = options
10617 11487 customSetValue = customSetValue || ((record) => ({ value: record.id, title: record.name }))
10618 11488 if (!Array.isArray(dataSource)) {
10619   - dataSource = [ dataSource ]
  11489 + dataSource = [dataSource]
10620 11490 }
10621 11491
10622 11492 function createOptions(dataSource) {
10623 11493 return dataSource.map((record) => {
10624 11494 return `<input
10625   - type="checkbox" lay-skin="${ laySkin }"
10626   - ${ UseLayUi.dynamicAttr('name', record[valueField]) }
10627   - ${ UseLayUi.dynamicAttr('title', record[labelField]) }
10628   - ${ UseLayUi.dynamicAttr('lay-filter', layFilter) }
10629   - ${ UseLayUi.dynamicAttr('lay-verify', layVerify) }
10630   - ${ UseLayUi.dynamicAttr('checked', record[checkedField]) }
  11495 + type="checkbox" lay-skin="${laySkin}"
  11496 + ${UseLayUi.dynamicAttr('name', record[valueField])}
  11497 + ${UseLayUi.dynamicAttr('title', record[labelField])}
  11498 + ${UseLayUi.dynamicAttr('lay-filter', layFilter)}
  11499 + ${UseLayUi.dynamicAttr('lay-verify', layVerify)}
  11500 + ${UseLayUi.dynamicAttr('checked', record[checkedField])}
10631 11501 >`
10632 11502 })
10633 11503 }
10634 11504
10635 11505 let template = `
10636   - <div class="layui-form-item ${ CLASS_NAME }" >
10637   - <label class="layui-form-label">${ label }</label>
  11506 + <div class="layui-form-item ${CLASS_NAME}" >
  11507 + <label class="layui-form-label">${label}</label>
10638 11508 <div class="layui-input-block">
10639   - ${ createOptions(dataSource).join('') }
  11509 + ${createOptions(dataSource).join('')}
10640 11510 </div>
10641 11511 </div>
10642 11512 `
... ... @@ -10646,7 +11516,7 @@ class UseLayUi {
10646 11516 if (!elem) return template
10647 11517 $(elem).empty()
10648 11518 $(elem).append(template)
10649   - form.on(`checkbox(${ layFilter })`, (data) => {
  11519 + form.on(`checkbox(${layFilter})`, (data) => {
10650 11520 onChange && (onChange(data))
10651 11521 })
10652 11522 form.render()
... ... @@ -10721,13 +11591,13 @@ class UseLayUi {
10721 11591 */
10722 11592 function to(promise, errorExt) {
10723 11593 return promise
10724   - .then((data) => [ null, data ])
  11594 + .then((data) => [null, data])
10725 11595 .catch((err) => {
10726 11596 if (errorExt) {
10727 11597 const parsedError = Object.assign({}, err, errorExt)
10728   - return [ parsedError, undefined ]
  11598 + return [parsedError, undefined]
10729 11599 }
10730   - return [ err, undefined ]
  11600 + return [err, undefined]
10731 11601 })
10732 11602 }
10733 11603
... ... @@ -10757,7 +11627,7 @@ class EventCenter {
10757 11627 this.eventStack.get(eventName).push(callback)
10758 11628 return
10759 11629 }
10760   - this.eventStack.set(eventName, [ callback ])
  11630 + this.eventStack.set(eventName, [callback])
10761 11631 }
10762 11632
10763 11633 /**
... ... @@ -11218,7 +12088,7 @@ class DispatchCenter {
11218 12088 async getContentDataNode() {
11219 12089 const { node: { id } = {} } = this.currentPage
11220 12090 if (!id) return
11221   - const [ err, res ] = await to(ConfigurationNodeApi.getConfigurationInfo('CONTENT', id))
  12091 + const [err, res] = await to(ConfigurationNodeApi.getConfigurationInfo('CONTENT', id))
11222 12092 const { dataSources, event, act } = this.contentData = res
11223 12093 const tsSubCmds = this.generatorDataSourceMapping(dataSources)
11224 12094 this.sendMessageToGetRealTimeData({ tsSubCmds })
... ... @@ -11284,7 +12154,7 @@ class DispatchCenter {
11284 12154 this.eventBus.on(eventName, (message) => {
11285 12155 this.updatePage(() => {
11286 12156 const { data } = message
11287   - const [ [ timespan, value ] ] = data[key]
  12157 + const [[timespan, value]] = data[key]
11288 12158 node.setValue(value)
11289 12159 }, node)
11290 12160 })
... ... @@ -11413,7 +12283,7 @@ class HandleDataInteraction {
11413 12283 if (eventName === mxEvent.MOUSE_UP) {
11414 12284 this.handleMouseUpEvent(eventName, event, sender)
11415 12285 }
11416   - graphFireMouseEvent.apply(this.graph, [ eventName, event, sender ]);
  12286 + graphFireMouseEvent.apply(this.graph, [eventName, event, sender]);
11417 12287 };
11418 12288
11419 12289 DispatchCenter.eventListenerIsExist = true
... ... @@ -11494,7 +12364,7 @@ class HandleDataInteraction {
11494 12364 sendInstruction(list = []) {
11495 12365 const queue = []
11496 12366 const fn = async (way, deviceId, data) => {
11497   - const [ err, res = {} ] = await to(ConfigurationNodeApi.deviceIsOnLine(deviceId))
  12367 + const [err, res = {}] = await to(ConfigurationNodeApi.deviceIsOnLine(deviceId))
11498 12368 const { value } = res
11499 12369 if (value) {
11500 12370 await to(ConfigurationNodeApi.sendInstruction(way, deviceId, data))
... ... @@ -11527,7 +12397,7 @@ class HandleDataInteraction {
11527 12397 * @description 跳转页面
11528 12398 */
11529 12399 jumpPage(page) {
11530   - this.editorUi.handleCustomLink(`data:page/id,${ page }`)
  12400 + this.editorUi.handleCustomLink(`data:page/id,${page}`)
11531 12401 }
11532 12402 }
11533 12403
... ... @@ -11716,7 +12586,7 @@ class HandleDynamicEffect {
11716 12586 deg += 20
11717 12587 let style = node.getStyle()
11718 12588 const reg = /rotation=(-?)\w+(;?)/g
11719   - style = style.replace(reg, `rotation=${ deg }`)
  12589 + style = style.replace(reg, `rotation=${deg}`)
11720 12590 node.setStyle(style)
11721 12591 this.graph.updateCellStyles(style, node)
11722 12592 }
... ... @@ -11788,7 +12658,7 @@ class HandleDynamicEffect {
11788 12658 const result = { condition: {}, flag: false }
11789 12659 for (let i = 0; i < condition.length; i++) {
11790 12660 const { min, max } = condition[i]
11791   - const [ timespan, realValue ] = value[attr][0]
  12661 + const [timespan, realValue] = value[attr][0]
11792 12662 result.flag = this.isExistInArea(min, max, realValue)
11793 12663 if (result.flag) {
11794 12664 result.condition = condition[i]
... ... @@ -11880,7 +12750,6 @@ class UpdateQueue {
11880 12750 this.graph.getModel().endUpdate()
11881 12751 }
11882 12752 }
11883   - console.log('enter')
11884 12753 const cleanFn = RAFSetInterval(callback, time)
11885 12754 this.timeQueue.set(time, cleanFn)
11886 12755 }
... ... @@ -12023,10 +12892,10 @@ function globalInit() {
12023 12892 const allTimeNode = document.querySelectorAll('.thingKit-component__real-time .real-time__now')
12024 12893 for (const time of allTimeNode) {
12025 12894 const date = new Date()
12026   - time.innerHTML = `${ date.getHours() < 10 ? '0' : '' }${ date.getHours() }:${ date.getMinutes() < 10 ? '0' : '' }${ date.getMinutes() }:${ date.getSeconds() < 10 ? '0' : '' }${ date.getSeconds() }`
  12895 + time.innerHTML = `${date.getHours() < 10 ? '0' : ''}${date.getHours()}:${date.getMinutes() < 10 ? '0' : ''}${date.getMinutes()}:${date.getSeconds() < 10 ? '0' : ''}${date.getSeconds()}`
12027 12896 }
12028 12897 }, 1000)
12029 12898 }
12030 12899 }
12031 12900
12032   -globalInit()
\ No newline at end of file
  12901 +globalInit()
... ...
... ... @@ -17,10 +17,6 @@
17 17 display: flex;
18 18 }
19 19
20   -.mxWindowPane .data-panel__select label{
21   - flex: 0 0 50px;
22   -}
23   -
24 20
25 21 /* */
26 22 .override__panel--default {
... ... @@ -52,32 +48,41 @@
52 48 background-image: url(../images/edit20.png);
53 49 }
54 50
55   -
56   -/* ========= 数据源部分 ============ */
57   -.data-source__select-container {
58   - display: flex;
59   - align-items: center;
60   - overflow: visible !important;
61   - padding: 8px 0 8px 14px !important;
62   - margin-left: 0;
  51 +/* ==== 数据源组件样式 ==== */
  52 +.data-source__component-style {
  53 + padding: 10px;
63 54 }
64 55
65   -.data-panel__select {
66   - display: flex;
67   - margin-bottom: 0;
  56 +.data-source__component-style > div {
  57 + margin-bottom: 10px;
68 58 }
69 59
70   -.data-panel__select .layui-form-label {
  60 +.data-source__component-select > .layui-form-label {
  61 + float: left;
  62 + display: block;
71 63 padding: 9px 10px 9px 0;
72   - width: 50px !important;
  64 + width: 60px;
  65 + font-weight: 400;
  66 + line-height: 20px;
  67 + text-align: right;
73 68 box-sizing: border-box;
74 69 }
75 70
76   -.data-panel__select .layui-input-block {
77   - flex: auto;
  71 +.data-source__component-select > .layui-input-block {
  72 + margin-left: 60px;
  73 + min-height: 36px;
  74 +}
  75 +
  76 +/* ========= 数据源部分 ============ */
  77 +.data-source__select-container {
  78 + display: flex;
  79 + align-items: center;
  80 + overflow: visible !important;
  81 + padding: 8px 0 8px 14px !important;
78 82 margin-left: 0;
79 83 }
80 84
  85 +
81 86 .data-source__submit-panel {
82 87 display: flex;
83 88 padding: 10px !important;
... ... @@ -85,23 +90,6 @@
85 90 flex-direction: column-reverse;
86 91 }
87 92
88   -.data-source__org--override {
89   - margin-bottom: 0px !important;
90   - display: flex !important;
91   -}
92   -
93   -.data-source__org--override .layui-form-label {
94   - width: 50px !important;
95   - padding: 9px 10px 9px 0;
96   - box-sizing: border-box;
97   -
98   -}
99   -
100   -.data-source__org--override .layui-input-block {
101   - margin-left: 0px !important;
102   - flex: auto !important;
103   -}
104   -
105 93 /* ============ event layer 事件弹窗 ====================== */
106 94 .event-layer__override .layui-layer-content {
107 95 overflow: visible !important;
... ... @@ -161,7 +149,7 @@
161 149 }
162 150
163 151 .override__table thead {
164   - width: calc(100% - 1rem) !important;
  152 + width: calc(100% - 14px) !important;
165 153 }
166 154
167 155 .override__table tbody {
... ... @@ -247,4 +235,227 @@
247 235
248 236 .override__radio-default input[type="radio"] + .override__radio-label:empty:before {
249 237 margin-right: 0;
250   -}
\ No newline at end of file
  238 +}
  239 +
  240 +/* ======= 图片上传 ====== */
  241 +
  242 +.variableImageTableSetImgEl {
  243 + width: 70px;
  244 + height: 70px;
  245 + position: relative;
  246 + border: 1px solid #f2f2f2;
  247 + color: #d3d2d2;
  248 + cursor: pointer;
  249 +}
  250 +
  251 +.variableImageTableSetImgEl .add__button {
  252 + font-size: 50px;
  253 + text-align: center;
  254 + width: 100%;
  255 + height: 70px;
  256 + line-height: 70px;
  257 + color: #d3d2d2;
  258 + display: none;
  259 +}
  260 +
  261 +.variableImageTableSetImgEl .img__delete {
  262 + position: absolute;
  263 + top: 0;
  264 + width: 8px;
  265 + height: 8px;
  266 + right: 0;
  267 + line-height: 8px;
  268 + cursor: pointer;
  269 +}
  270 +
  271 +.variableImageTableSetImgEl .img__delete:hover {
  272 + color: #5FB878;
  273 +}
  274 +
  275 +.variableImageTableSetImgEl img {
  276 + position: absolute;
  277 + width: 80%;
  278 + height: 80%;
  279 + top: 10%;
  280 + left: 10%;
  281 +}
  282 +
  283 +.variableImageTableSetImgEl img[src=''] {
  284 + opacity: 0;
  285 +}
  286 +
  287 +.variableImageTableSetImgEl img[src=''] ~ .add__button {
  288 + display: block;
  289 +}
  290 +
  291 +.variableImageTableSetImgEl img[src=''] ~ .img__delete {
  292 + display: none;
  293 +}
  294 +
  295 +.var-image__radio {
  296 + padding: 0 20px;
  297 +}
  298 +
  299 +#imgSelectContainerEl {
  300 + color: #666;
  301 + padding: 10px 20px;
  302 +}
  303 +
  304 +#var-image__upload--local {
  305 + width: 100px;
  306 + height: 100px;
  307 + border: 1px solid #F0F0F0;
  308 + margin-bottom: 20px;
  309 + cursor: pointer;
  310 +}
  311 +
  312 +.var-image__container--local {
  313 + padding: 10px 20px;
  314 +}
  315 +
  316 +.var-image__container--gallery {
  317 + display: flex;
  318 + padding: 10px 20px;
  319 +}
  320 +
  321 +#var-image__container-sidebar {
  322 + display: flex;
  323 + flex-direction: column;
  324 + flex: 0 0 150px;
  325 + height: 200px;
  326 + overflow-y: auto;
  327 + margin-right: 5px;
  328 + border: 1px solid #F2F2F2;
  329 +}
  330 +
  331 +.var-image__category {
  332 + height: 20px;
  333 + padding: 10px;
  334 + cursor: pointer;
  335 +}
  336 +
  337 +#var-image__container-content {
  338 + display: flex;
  339 + flex: 0 0 400px;
  340 + flex-wrap: wrap;
  341 + height: 200px;
  342 + overflow: auto;
  343 + justify-content: start;
  344 + align-content: flex-start;
  345 + border: 1px solid #F2F2F2;
  346 +}
  347 +
  348 +.var-image__img-item {
  349 + flex: 0 0 70px;
  350 + height: 70px;
  351 + box-sizing: border-box;
  352 + overflow: hidden;
  353 + margin: 10px;
  354 + padding: 5px;
  355 + cursor: pointer;
  356 +}
  357 +
  358 +.var-image__img-item img {
  359 + width: 100%;
  360 + height: 100%;
  361 + cursor: pointer;
  362 + pointer-events: none;
  363 +}
  364 +
  365 +.var-image__img-item:hover {
  366 + border: 2px solid #5FB878;
  367 +}
  368 +
  369 +.var-image__category--checked {
  370 + background-color: #F2F2F2;
  371 + color: #5FB878;
  372 +}
  373 +
  374 +.var-image__img-item--checked {
  375 + border: 2px solid #5FB878;
  376 +}
  377 +
  378 +#var-image__container--local {
  379 + position: relative;
  380 + cursor: pointer;
  381 + width: 100px;
  382 + height: 100px;
  383 +}
  384 +
  385 +#var-image__container--local .preview__img {
  386 + width: 100%;
  387 + height: 100%;
  388 +}
  389 +
  390 +#preview__img--preview {
  391 + position: absolute;
  392 + top: 10%;
  393 + left: 10%;
  394 + width: 80%;
  395 + height: 80%;
  396 +}
  397 +
  398 +
  399 +#var-image__container--local {
  400 + border: 1px solid #d3d2d2;
  401 +}
  402 +
  403 +#var-image__container--local .var-image__del-icon {
  404 + position: absolute;
  405 + top: 0;
  406 + right: 0;
  407 + width: 8px;
  408 + height: 8px;
  409 + line-height: 8px;
  410 + color: #D3D2D2;
  411 + display: block;
  412 + user-select: none;
  413 +}
  414 +
  415 +#var-image__container--local .var-image__del-icon:hover {
  416 + color: #5FB878;
  417 +}
  418 +
  419 +#var-image__container--local .var_image__add-icon {
  420 + position: absolute;
  421 + top: 0;
  422 + line-height: 100px;
  423 + width: 100%;
  424 + text-align: center;
  425 + font-size: 50px;
  426 + color: #d3d2d2;
  427 + display: none;
  428 +}
  429 +
  430 +#var-image__container--local img[src=""] + .var_image__add-icon {
  431 + display: block;
  432 +}
  433 +
  434 +#var-image__container--local img[src=""] ~ .var-image__del-icon {
  435 + display: none;
  436 +}
  437 +
  438 +#var-image__container--local img[src=""] {
  439 + opacity: 0;
  440 +}
  441 +
  442 +/* ===== 数据动效 */
  443 +.dynamic-effect__data-source-comp--override {
  444 + padding: 0;
  445 +}
  446 +
  447 +.dynamic-effect__data-source-comp--override .data-source__component-select > .layui-form-label {
  448 + float: left;
  449 + display: block;
  450 + padding: 9px 15px;
  451 + width: 80px;
  452 + font-weight: 400;
  453 + line-height: 20px;
  454 + text-align: right;
  455 + box-sizing: content-box;
  456 +}
  457 +
  458 +.dynamic-effect__data-source-comp--override .data-source__component-select > .layui-input-block {
  459 + margin-left: 110px;
  460 + min-height: 36px;
  461 +}
... ...