Commit 182ff5aaa3632930b140d2225e1f4698acd4189f

Authored by ww
1 parent ece0f715

feat: implement dynamic effect

Showing 36 changed files with 1563 additions and 213 deletions

Too many changes to show.

To preserve performance only 36 of 40 files are displayed.

  1 +<svg height="26" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 190 26" width="190" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#e90000" id="shape1" d="M0,0L188,0L188,24L0,24L0,0z" stroke-width="0.25" fill="#e90000"/>
  5 + <path stroke="#ffffff" id="shape2" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(-0,0)"/>
  6 + <path stroke="#ffffff" id="shape3" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(26.55,0)"/>
  7 + <path stroke="#ffffff" id="shape4" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(53.09,0)"/>
  8 + <path stroke="#ffffff" id="shape5" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(79.64,0)"/>
  9 + <path stroke="#ffffff" id="shape6" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(106.19,0)"/>
  10 + <path stroke="#ffffff" id="shape7" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(132.73,0)"/>
  11 + <path stroke="#ffffff" id="shape8" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(159.28,0)"/>
  12 + </g>
  13 +</svg>
  1 +<svg height="18" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 18" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#000000" id="shape1" d="M152,16L0,16L0,0L152,0L152,16z" fill="#ffffff"/>
  5 + <g transform="translate(0.13,7.92)">
  6 + <path stroke="#ffffff" id="shape2" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(-0,0)"/>
  7 + <path stroke="#ffffff" id="shape3" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(15.96,0)"/>
  8 + <path stroke="#ffffff" id="shape4" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(31.76,0)"/>
  9 + <path stroke="#ffffff" id="shape5" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(47.72,0)"/>
  10 + <path stroke="#ffffff" id="shape6" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(63.66,0)"/>
  11 + <path stroke="#ffffff" id="shape7" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(79.62,0)"/>
  12 + <path stroke="#ffffff" id="shape8" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(95.42,0)"/>
  13 + <path stroke="#ffffff" id="shape9" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(111.38,0)"/>
  14 + <path stroke="#ffffff" id="shape10" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(143.77,0)"/>
  15 + <path stroke="#ffffff" id="shape11" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(127.81,0)"/>
  16 + </g>
  17 + <g transform="translate(8.11,7.92)">
  18 + <path stroke="#e90000" id="shape12" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(-0,0)"/>
  19 + <path stroke="#e90000" id="shape13" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(15.96,0)"/>
  20 + <path stroke="#e90000" id="shape14" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(31.76,0)"/>
  21 + <path stroke="#e90000" id="shape15" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(47.72,0)"/>
  22 + <path stroke="#e90000" id="shape16" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(63.66,0)"/>
  23 + <path stroke="#e90000" id="shape17" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(79.62,0)"/>
  24 + <path stroke="#e90000" id="shape18" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(95.42,0)"/>
  25 + <path stroke="#e90000" id="shape19" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(111.38,0)"/>
  26 + <path stroke="#e90000" id="shape20" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(127.81,0)"/>
  27 + <path stroke="#e90000" id="shape21" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(127.81,0)"/>
  28 + </g>
  29 + <g transform="translate(0.13,0.17)">
  30 + <path stroke="#e90000" id="shape22" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(0,0)"/>
  31 + <path stroke="#e90000" id="shape23" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(15.96,0)"/>
  32 + <path stroke="#e90000" id="shape24" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(31.76,0)"/>
  33 + <path stroke="#e90000" id="shape25" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(47.72,0)"/>
  34 + <path stroke="#e90000" id="shape26" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(63.66,0)"/>
  35 + <path stroke="#e90000" id="shape27" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(79.62,0)"/>
  36 + <path stroke="#e90000" id="shape28" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(95.42,0)"/>
  37 + <path stroke="#e90000" id="shape29" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(111.38,0)"/>
  38 + <path stroke="#e90000" id="shape30" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(143.77,0)"/>
  39 + <path stroke="#e90000" id="shape31" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#e90000" transform="translate(127.81,0)"/>
  40 + </g>
  41 + <g transform="translate(8.11,0.17)">
  42 + <path stroke="#ffffff" id="shape32" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(-0,0)"/>
  43 + <path stroke="#ffffff" id="shape33" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(15.96,0)"/>
  44 + <path stroke="#ffffff" id="shape34" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(31.76,0)"/>
  45 + <path stroke="#ffffff" id="shape35" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(47.72,0)"/>
  46 + <path stroke="#ffffff" id="shape36" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(63.91,0)"/>
  47 + <path stroke="#ffffff" id="shape37" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(79.62,0)"/>
  48 + <path stroke="#ffffff" id="shape38" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(95.42,0)"/>
  49 + <path stroke="#ffffff" id="shape39" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(111.38,0)"/>
  50 + <path stroke="#ffffff" id="shape40" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(127.81,0)"/>
  51 + <path stroke="#ffffff" id="shape41" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(127.81,0)"/>
  52 + </g>
  53 + </g>
  54 +</svg>
  1 +<svg height="26" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 190 26" width="190" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#000000" id="shape1" d="M0,0L188,0L188,24L0,24L0,0z" fill="#000000"/>
  5 + <path stroke="#000000" id="shape2" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff"/>
  6 + <path stroke="#000000" id="shape3" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(26.55,0)"/>
  7 + <path stroke="#000000" id="shape4" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(53.09,0)"/>
  8 + <path stroke="#000000" id="shape5" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(79.64,0)"/>
  9 + <path stroke="#000000" id="shape6" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(106.19,0)"/>
  10 + <path stroke="#000000" id="shape7" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(132.73,0)"/>
  11 + <path stroke="#000000" id="shape8" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffffff" transform="translate(159.28,0)"/>
  12 + </g>
  13 +</svg>
  1 +<svg height="18" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 18" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#000000" id="shape1" d="M152,16L0,16L0,0L152,0L152,16z" fill="#ffffff"/>
  5 + <g transform="translate(0.13,7.93)">
  6 + <path stroke="#ffffff" id="shape2" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(-0,0)"/>
  7 + <path stroke="#ffffff" id="shape3" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(15.96,0)"/>
  8 + <path stroke="#ffffff" id="shape4" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(31.76,0)"/>
  9 + <path stroke="#ffffff" id="shape5" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(47.72,0)"/>
  10 + <path stroke="#ffffff" id="shape6" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(63.66,0)"/>
  11 + <path stroke="#ffffff" id="shape7" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(79.62,0)"/>
  12 + <path stroke="#ffffff" id="shape8" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(95.42,0)"/>
  13 + <path stroke="#ffffff" id="shape9" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(111.38,0)"/>
  14 + <path stroke="#ffffff" id="shape10" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(143.77,0)"/>
  15 + <path stroke="#ffffff" id="shape11" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(127.81,0)"/>
  16 + </g>
  17 + <g transform="translate(8.11,7.93)">
  18 + <path stroke="#000000" id="shape12" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(-0,0)"/>
  19 + <path stroke="#000000" id="shape13" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(15.96,0)"/>
  20 + <path stroke="#000000" id="shape14" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(31.76,0)"/>
  21 + <path stroke="#000000" id="shape15" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(47.72,0)"/>
  22 + <path stroke="#000000" id="shape16" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(63.66,0)"/>
  23 + <path stroke="#000000" id="shape17" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(79.62,0)"/>
  24 + <path stroke="#000000" id="shape18" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(95.42,0)"/>
  25 + <path stroke="#000000" id="shape19" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(111.38,0)"/>
  26 + <path stroke="#000000" id="shape20" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(127.81,0)"/>
  27 + <path stroke="#000000" id="shape21" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(127.81,0)"/>
  28 + </g>
  29 + <g transform="translate(0.13,0.17)">
  30 + <path stroke="#000000" id="shape22" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(0,0)"/>
  31 + <path stroke="#000000" id="shape23" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(15.96,0)"/>
  32 + <path stroke="#000000" id="shape24" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(31.76,0)"/>
  33 + <path stroke="#000000" id="shape25" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(47.72,0)"/>
  34 + <path stroke="#000000" id="shape26" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(63.66,0)"/>
  35 + <path stroke="#000000" id="shape27" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(79.62,0)"/>
  36 + <path stroke="#000000" id="shape28" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(95.42,0)"/>
  37 + <path stroke="#000000" id="shape29" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(111.38,0)"/>
  38 + <path stroke="#000000" id="shape30" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(143.77,0)"/>
  39 + <path stroke="#000000" id="shape31" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(127.81,0)"/>
  40 + </g>
  41 + <g transform="translate(8.11,0.17)">
  42 + <path stroke="#ffffff" id="shape32" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(-0,0)"/>
  43 + <path stroke="#ffffff" id="shape33" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(15.96,0)"/>
  44 + <path stroke="#ffffff" id="shape34" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(31.76,0)"/>
  45 + <path stroke="#ffffff" id="shape35" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(47.72,0)"/>
  46 + <path stroke="#ffffff" id="shape36" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(63.91,0)"/>
  47 + <path stroke="#ffffff" id="shape37" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(79.62,0)"/>
  48 + <path stroke="#ffffff" id="shape38" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(95.42,0)"/>
  49 + <path stroke="#ffffff" id="shape39" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(111.38,0)"/>
  50 + <path stroke="#ffffff" id="shape40" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(127.81,0)"/>
  51 + <path stroke="#ffffff" id="shape41" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffffff" transform="translate(127.81,0)"/>
  52 + </g>
  53 + </g>
  54 +</svg>
  1 +<svg height="26" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 190 26" width="190" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#000000" id="shape1" d="M0,0L188,0L188,24L0,24L0,0z" fill="#000000"/>
  5 + <path stroke="#ffec00" id="shape2" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffec00" transform="translate(-0,0)"/>
  6 + <path stroke="#ffec00" id="shape3" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffec00" transform="translate(26.55,0)"/>
  7 + <path stroke="#ffec00" id="shape4" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffec00" transform="translate(53.09,0)"/>
  8 + <path stroke="#ffec00" id="shape5" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffec00" transform="translate(79.64,0)"/>
  9 + <path stroke="#ffec00" id="shape6" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffec00" transform="translate(106.19,0)"/>
  10 + <path stroke="#ffec00" id="shape7" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffec00" transform="translate(132.73,0)"/>
  11 + <path stroke="#ffec00" id="shape8" d="M17.3,0L28.7,0L11.4,24L0,24L17.3,0z" fill="#ffec00" transform="translate(159.28,0)"/>
  12 + </g>
  13 +</svg>
  1 +<svg height="18" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 18" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#000000" id="shape1" d="M152,16L0,16L0,0L152,0L152,16z" fill="#ffffff"/>
  5 + <g transform="translate(0.13,7.93)">
  6 + <path stroke="#ffec00" id="shape2" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(-0,0)"/>
  7 + <path stroke="#ffec00" id="shape3" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(15.96,0)"/>
  8 + <path stroke="#ffec00" id="shape4" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(31.76,0)"/>
  9 + <path stroke="#ffec00" id="shape5" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(47.72,0)"/>
  10 + <path stroke="#ffec00" id="shape6" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(63.66,0)"/>
  11 + <path stroke="#ffec00" id="shape7" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(79.62,0)"/>
  12 + <path stroke="#ffec00" id="shape8" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(95.42,0)"/>
  13 + <path stroke="#ffec00" id="shape9" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(111.38,0)"/>
  14 + <path stroke="#ffec00" id="shape10" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(143.77,0)"/>
  15 + <path stroke="#ffec00" id="shape11" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(127.81,0)"/>
  16 + </g>
  17 + <g transform="translate(8.11,7.93)">
  18 + <path stroke="#000000" id="shape12" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(-0,0)"/>
  19 + <path stroke="#000000" id="shape13" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(15.96,0)"/>
  20 + <path stroke="#000000" id="shape14" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(31.76,0)"/>
  21 + <path stroke="#000000" id="shape15" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(47.72,0)"/>
  22 + <path stroke="#000000" id="shape16" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(63.66,0)"/>
  23 + <path stroke="#000000" id="shape17" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(79.62,0)"/>
  24 + <path stroke="#000000" id="shape18" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(95.42,0)"/>
  25 + <path stroke="#000000" id="shape19" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(111.38,0)"/>
  26 + <path stroke="#000000" id="shape20" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(127.81,0)"/>
  27 + <path stroke="#000000" id="shape21" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(127.81,0)"/>
  28 + </g>
  29 + <g transform="translate(0.13,0.17)">
  30 + <path stroke="#000000" id="shape22" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(0,0)"/>
  31 + <path stroke="#000000" id="shape23" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(15.96,0)"/>
  32 + <path stroke="#000000" id="shape24" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(31.76,0)"/>
  33 + <path stroke="#000000" id="shape25" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(47.72,0)"/>
  34 + <path stroke="#000000" id="shape26" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(63.66,0)"/>
  35 + <path stroke="#000000" id="shape27" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(79.62,0)"/>
  36 + <path stroke="#000000" id="shape28" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(95.42,0)"/>
  37 + <path stroke="#000000" id="shape29" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(111.38,0)"/>
  38 + <path stroke="#000000" id="shape30" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(143.77,0)"/>
  39 + <path stroke="#000000" id="shape31" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#000000" transform="translate(127.81,0)"/>
  40 + </g>
  41 + <g transform="translate(8.11,0.17)">
  42 + <path stroke="#ffec00" id="shape32" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(-0,0)"/>
  43 + <path stroke="#ffec00" id="shape33" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(15.96,0)"/>
  44 + <path stroke="#ffec00" id="shape34" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(31.76,0)"/>
  45 + <path stroke="#ffec00" id="shape35" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(47.72,0)"/>
  46 + <path stroke="#ffec00" id="shape36" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(63.91,0)"/>
  47 + <path stroke="#ffec00" id="shape37" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(79.62,0)"/>
  48 + <path stroke="#ffec00" id="shape38" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(95.42,0)"/>
  49 + <path stroke="#ffec00" id="shape39" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(111.38,0)"/>
  50 + <path stroke="#ffec00" id="shape40" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(127.81,0)"/>
  51 + <path stroke="#ffec00" id="shape41" d="M0,0L8,0L8,7.8L0,7.8L0,0z" stroke-width="0.25" fill="#ffec00" transform="translate(127.81,0)"/>
  52 + </g>
  53 + </g>
  54 +</svg>
  1 +<svg height="116" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 116 116" width="116" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#ffffff;font-family:宋体;font-size:26pt}
  4 +]]></style>
  5 + <defs/>
  6 + <g transform="translate(1,1)">
  7 + <path stroke="#000000" id="shape1" d="M80.6,0L114,33.4L114,80.6L80.6,114L33.4,114L0,80.6L0,33.4L33.4,0L80.6,0z" fill="#ffffff"/>
  8 + <g id="shape2" transform="translate(2.85,2.85)">
  9 + <path stroke="#e90000" d="M76.6,0L108.3,31.7L108.3,76.6L76.6,108.3L31.7,108.3L0,76.6L0,31.7L31.7,0L76.6,0z" stroke-width="0.25" fill="#e90000"/>
  10 + <text class="st1">
  11 + <tspan y="68.1" x="18.1">STOP</tspan>
  12 + </text>
  13 + </g>
  14 + </g>
  15 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 102 154.122" width="102" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#303030;font-family:Humnst777 BT;font-size:10pt;font-weight:bold}
  4 +]]></style>
  5 + <defs/>
  6 + <g transform="translate(0.96,1.09)">
  7 + <path stroke="#ffffff" id="shape1" d="M7.9,0L91.6,0C96,0,99.5,3.5,99.5,7.8L99.5,151.7L0,151.7L0,7.8C0,3.5,3.5,0,7.9,0z" fill="#ffffff" transform="translate(0.26,0.15)"/>
  8 + <g>
  9 + <path id="shape2" d="M7.8,0L22.7,.2L.2,22.7C.2,22.7,0,7.8,0,7.8C.6,0,7.8,0,7.8,0z" fill="#e90000" transform="translate(0.22,-0.02)"/>
  10 + <path id="shape3" d="M60.7,0L0,60.7L.6,41.7L42.3,0L60.7,0z" fill="#e90000" transform="translate(0.05,0.18)"/>
  11 + <path id="shape4" d="M91.7,0C95.4,-0.1,97.1,2.1,97.1,2.1L0,99.3L.4,80.4L80.8,0C80.8,0,91.7,0,91.7,0z" fill="#e90000" transform="translate(0.04,-0.08)"/>
  12 + <path id="shape5" d="M94.2,0L94.3,18.2L17.9,94.6L0,94.2L94.2,0z" fill="#e90000" transform="translate(5.43,57.28)"/>
  13 + <path id="shape6" d="M57,0L56.7,18.7L18.6,56.9L0,57L57,0z" fill="#e90000" transform="translate(42.93,95)"/>
  14 + <path id="shape7" d="M99.2,0L99.2,18.3L0,117.5L0,99.1L99.2,0z" fill="#e90000" transform="translate(0.4,19.4)"/>
  15 + <path id="shape8" d="M18.5,0L18.5,18.3L0,18.5L18.5,0z" fill="#e90000" transform="translate(81.17,133.41)"/>
  16 + </g>
  17 + <path stroke="#ffffff" id="shape9" d="M0,0L83,0L83,85.2L0,85.2L0,0z" fill="#ffffff" transform="translate(8.49,55.99)"/>
  18 + <path stroke="#000000" id="shape10" d="M0,0L83,0L83,22L0,22L0,0z" fill="#000000" transform="translate(8.49,21.93)"/>
  19 + <path stroke="#000000" id="shape11" d="M8.6,-0L61.2,-0C65.9,-0,69.8,3.8,69.8,8.6C69.8,13.5,65.9,17.4,61.2,17.4L8.6,17.4C3.9,17.4,0,13.5,0,8.8C0,3.8,3.9,-0,8.6,-0z" fill="#ffffff" transform="translate(15.09,24.24)"/>
  20 + <g id="shape12" transform="translate(16.93,25.71)">
  21 + <path d="M7.2,0L58.9,0C62.9,0,66.1,3.2,66.1,7.2C66.1,11.2,62.9,14.4,58.9,14.4L7.2,14.4C3.2,14.4,0,11.2,0,7.2C0,3.2,3.2,0,7.2,0z" fill="#e90000"/>
  22 + <text class="st1">
  23 + <tspan y="11.7" x="9.1">DANGER</tspan>
  24 + </text>
  25 + </g>
  26 + </g>
  27 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 108 153.999" width="108" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#e90000" id="shape1" d="M0,0L105.7,0L105.7,151.6L0,151.6L0,0z" fill="#ffffff" transform="translate(0.13,0.22)"/>
  5 + <g>
  6 + <path id="shape2" d="M9.8,101.6L64.6,15.1L64.6,0L0,101.8L9.8,101.6z" fill="#e80000" transform="translate(41.25,50.18)"/>
  7 + <path id="shape3" d="M9.5,57.4L36.3,15.2L36.3,0L0,57.3L9.5,57.4z" fill="#e80000" transform="translate(69.66,94.39)"/>
  8 + <path id="shape4" d="M9.6,15.1L9.6,0L0,15.1L9.6,15.1z" fill="#e80000" transform="translate(96.35,136.7)"/>
  9 + <path id="shape5" d="M0,96.6L61.2,0L51.7,0L.1,81.3L0,96.6z" fill="#e80000" transform="translate(0.12,0.1)"/>
  10 + <path id="shape6" d="M0,53.4L33.9,0L24.2,0L.3,37.7L0,53.4z" fill="#e80000" transform="translate(0,0.18)"/>
  11 + <path id="shape7" d="M0,14.8L9.4,0L0,.2L0,14.8z" fill="#e80000" transform="translate(0.21,0.28)"/>
  12 + <path id="shape8" d="M0,139.8L88.6,0L79,0L.3,124.2L0,139.8z" fill="#e80000" transform="translate(0.11,0)"/>
  13 + <path id="shape9" d="M0,151.6L9.6,151.6L96.4,14.7L96.1,0L0,151.6z" fill="#e80000" transform="translate(9.49,0.22)"/>
  14 + </g>
  15 + <path stroke="#ffffff" id="shape10" d="M0,0L82.7,0L82.7,128.6L0,128.6L0,0z" fill="#ffffff" transform="translate(11.63,11.7)"/>
  16 + </g>
  17 +</svg>
  1 +<svg height="48" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 48" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#ffffff;font-family:宋体;font-size:22pt}
  4 +]]></style>
  5 + <defs/>
  6 + <g transform="translate(1,1)">
  7 + <path stroke="#ffec00" id="shape1" d="M0,0L152,0L152,46L0,46L0,0z" fill="#ffec00"/>
  8 + <path id="shape2" d="M19,0L127.3,0C137.8,0,146.3,8.6,146.3,19.2L146.3,21.1C146.3,31.7,137.8,40.3,127.3,40.3L19,40.3C8.5,40.3,0,31.7,0,21.1L0,19.2C0,8.6,8.5,0,19,0z" fill="#ffffff" transform="translate(2.85,2.88)"/>
  9 + <g id="shape3" transform="translate(4.99,5.18)">
  10 + <path d="M18.1,0L124,0C133.9,0,142,8,142,17.8C142,27.7,133.9,35.6,124,35.6L18.1,35.6C8.1,35.6,0,27.7,0,17.8C0,8,8.1,0,18.1,0z" fill="#e90000"/>
  11 + <text class="st1">
  12 + <tspan y="29.3" x="26">DANGER</tspan>
  13 + </text>
  14 + </g>
  15 + </g>
  16 +</svg>
  1 +<svg height="36" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 36" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#000000;font-family:宋体;font-size:16pt}
  4 +]]></style>
  5 + <defs/>
  6 + <g transform="translate(1,1)">
  7 + <path id="shape1" d="M0,0L152,0L152,34L0,34L0,0z" fill="#000000"/>
  8 + <g id="shape2" transform="translate(1.61,1.78)">
  9 + <path d="M0,0L148.8,0L148.8,30.4L0,30.4L0,0z" fill="#f08300"/>
  10 + <text class="st1">
  11 + <tspan y="23.2" x="36.4">WARNING</tspan>
  12 + </text>
  13 + </g>
  14 + </g>
  15 +</svg>
  1 +<svg height="48" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 48" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#000000;font-family:Swis721 BlkCn BT;font-size:24pt}
  4 +]]></style>
  5 + <defs/>
  6 + <g id="shape1" transform="translate(1,1)">
  7 + <path stroke="#ffec00" d="M0,0L152,0L152,46L0,46L0,0z" fill="#ffec00"/>
  8 + <text class="st1">
  9 + <tspan y="36" x="20">CAUTION</tspan>
  10 + </text>
  11 + </g>
  12 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 154.007" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path id="shape1" d="M.7,74.3L74.3,.7C75.2,-0.2,76.8,-0.2,77.7,.7L151.3,74.3C152.2,75.2,152.2,76.8,151.3,77.7L77.7,151.3C76.8,152.2,75.2,152.2,74.3,151.3L.7,77.7C-0.2,76.8,-0.2,75.2,.7,74.3z" fill="#ec6901"/>
  5 + <path id="shape2" d="M.6,68.9L68.9,.6C69.7,-0.2,70.9,-0.2,71.6,.6L140,68.9C140.7,69.7,140.7,70.9,140,71.6L71.6,140C70.9,140.7,69.7,140.7,68.9,140L.6,71.6C-0.2,70.9,-0.2,69.7,.6,68.9z" fill="#000000" transform="translate(5.72,5.72)"/>
  6 + <path id="shape3" d="M.4,67.5L67.5,.4C67.9,0,68.7,0,69.2,.4L136.3,67.5C136.6,67.9,136.6,68.7,136.3,69.2L69.2,136.3C68.7,136.6,67.9,136.6,67.5,136.3L.4,69.2C0,68.7,0,67.9,.4,67.5z" fill="#ec6901" transform="translate(7.69,7.69)"/>
  7 + </g>
  8 +</svg>
  1 +<svg height="104" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 104" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#000000;font-family:宋体;font-size:16pt}
  4 +]]></style>
  5 + <defs/>
  6 + <g transform="translate(1,1)">
  7 + <path stroke="#ec6901" id="shape1" d="M0,0L152,0L152,102L0,102L0,0z" fill="#f08300"/>
  8 + <path id="shape2" d="M0,0L149.6,0L149.6,32.7L0,32.7L0,0z" fill="#000000" transform="translate(1.2,2.62)"/>
  9 + <g id="shape3" transform="translate(2.78,4.33)">
  10 + <path d="M0,0L146.4,0L146.4,29.3L0,29.3L0,0z" fill="#f08300"/>
  11 + <text class="st1">
  12 + <tspan y="22.6" x="35.2">WARNING</tspan>
  13 + </text>
  14 + </g>
  15 + </g>
  16 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 118 154" width="118" xmlns="http://www.w3.org/2000/svg">
  2 + <defs>
  3 + <linearGradient id="lg1" y1="0%" x1="0%" x2="0%" y2="100%">
  4 + <stop stop-color="#b6b6b6" offset="0"/>
  5 + <stop stop-color="#f2f2f2" offset="0.01"/>
  6 + <stop stop-color="#f0f0f0" offset="0.03"/>
  7 + <stop stop-color="#ebebeb" offset="0.64"/>
  8 + <stop stop-color="#eeeeee" offset="0.99"/>
  9 + <stop stop-color="#b9b9b9" offset="1"/>
  10 + </linearGradient>
  11 + </defs>
  12 + <g transform="translate(1,1)">
  13 + <path stroke="#cdcece" id="shape1" d="M17.5,0L100.7,0L83.2,148.1L69.8,148.1L72,130.1L16.1,130.1L13.7,148.1L0,148.1L17.5,0z" fill="#cdcece" transform="translate(-0,0)"/>
  14 + <path stroke="#eeeeee" id="shape2" d="M0,0L83.2,0L96.7,152L83.2,152L81.6,134.3L25.1,134.3L26.7,152L13.5,152L0,0z" fill="#eeeeee" transform="translate(19.29,0)"/>
  15 + <path id="shape3" d="M0,0L83.2,0L84.1,11.9L1,11.9L0,0z" fill="url(#lg1)" transform="translate(19.29,-0)"/>
  16 + <path stroke="#eeeeee" id="shape4" d="M17.5,0L18.8,0L1.3,148.1L0,148.1L17.5,0z" fill="#eeeeee" transform="translate(-0,0)"/>
  17 + </g>
  18 +</svg>
  1 +<svg height="116" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 116" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#ffffff;font-family:宋体;font-size:22pt}
  4 +]]></style>
  5 + <defs/>
  6 + <g transform="translate(1,1)">
  7 + <path stroke="#000000" id="shape1" d="M0,0L152,0L152,114L0,114L0,0z" fill="#ffffff"/>
  8 + <g transform="translate(4.26,3.67)">
  9 + <path stroke="#ffec00" id="shape2" d="M0,0L143.5,0L143.5,43.1L0,43.1L0,0z" fill="#ffec00"/>
  10 + <path id="shape3" d="M17.9,0L120.2,0C130.1,0,138.1,8,138.1,18L138.1,19.7C138.1,29.7,130.1,37.7,120.2,37.7L17.9,37.7C8,37.7,0,29.7,0,19.7L0,18C0,8,8,0,17.9,0z" fill="#ffffff" transform="translate(2.69,2.69)"/>
  11 + <g id="shape4" transform="translate(4.71,4.85)">
  12 + <path d="M17,0L117,0C126.4,0,134.1,7.5,134.1,16.7C134.1,25.9,126.4,33.4,117,33.4L17,33.4C7.6,33.4,0,25.9,0,16.7C0,7.5,7.6,0,17,0z" fill="#e90000"/>
  13 + <text class="st1">
  14 + <tspan y="28.2" x="22">DANGER</tspan>
  15 + </text>
  16 + </g>
  17 + </g>
  18 + </g>
  19 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 154" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#9e9f9f" id="shape1" d="M7.1,0L144.9,0C148.8,0,152,3.2,152,7.1L152,144.9C152,148.8,148.8,152,144.9,152L7.1,152C3.2,152,0,148.8,0,144.9L0,7.1C0,3.2,3.2,0,7.1,0z" fill="#ffffff"/>
  5 + <path id="shape2" d="M0,73.1C0,32.7,32.7,0,73.1,0C113.5,0,146.2,32.7,146.2,73.1C146.2,113.5,113.5,146.2,73.1,146.2C32.7,146.2,0,113.5,0,73.1z" fill="#e90000" transform="translate(2.89,2.89)"/>
  6 + <path id="shape3" d="M2.4,0L123.4,0C124.7,0,125.7,1.1,125.7,2.4L125.7,23.3C125.7,24.6,124.7,25.7,123.4,25.7L2.4,25.7C1.1,25.7,0,24.6,0,23.3L0,2.4C0,1.1,1.1,0,2.4,0z" fill="#ffffff" transform="translate(13.14,63.16)"/>
  7 + </g>
  8 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 154" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#000000;font-family:宋体;font-size:10pt}
  4 +.st2 {fill:#ffffff;font-size:12pt}
  5 +.st3 {fill:#ffffff;font-size:20pt}
  6 +]]></style>
  7 + <defs/>
  8 + <g transform="translate(1,1)">
  9 + <path stroke="#9e9f9f" id="shape1" d="M6.5,0L145.5,0C149.1,0,152,2.9,152,6.5L152,145.5C152,149.1,149.1,152,145.5,152L6.5,152C2.9,152,0,149.1,0,145.5L0,6.5C0,2.9,2.9,0,6.5,0z" fill="#ffffff"/>
  10 + <g id="shape2" transform="translate(5.42,5.41)">
  11 + <path d="M4.7,0L136.4,0C139,0,141.2,2.1,141.2,4.7L141.2,136.5C141.2,139.1,139,141.2,136.4,141.2L4.7,141.2C2.1,141.2,0,139.1,0,136.5L0,4.7C0,2.1,2.1,0,4.7,0z" fill="#e90000"/>
  12 + <text class="st1">
  13 + <tspan y="36.6" x="23.1" class="st2">I ONG-HALRFD</tspan>
  14 + <tspan y="54.6" x="19.1" class="st2">FREAKY PEOPLE</tspan>
  15 + <tspan y="83.6" x="15.1" class="st3">NEED NOT</tspan>
  16 + <tspan y="114.6" x="36.1" class="st3">APPLY</tspan>
  17 + </text>
  18 + </g>
  19 + </g>
  20 +</svg>
  1 +<svg height="134" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 134.002" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1.02,1)">
  4 + <path stroke="#000000" id="shape1" d="M151.1,2C152,3.3,152,5.3,152,5.3L80.1,129.5C80.1,129.5,78.2,132,76,132C73.5,132,71.9,130,71.9,130L0,5.7C0,5.7,-0.2,4.1,1,2.1C2.2,.2,4.8,0,4.8,0L147.1,0C147.1,0,149.5,-0.2,151.1,2z" fill="#ffffff"/>
  5 + <path stroke="#e90000" id="shape2" d="M143,1.5C144.1,3.2,143.9,5,143.9,5L75.9,122.9C75.9,122.9,74,126.2,71.9,126.2C69.5,126.2,68.2,123.4,68.2,123.4L.3,5.4C.3,5.4,-0.6,3.7,.5,1.8C1.7,0,4.8,0,4.8,0L139.1,0C139.1,0,141.9,0,143,1.5z" stroke-width="0.25" fill="#e90000" transform="translate(4.05,2.16)"/>
  6 + <path stroke="#e90000" id="shape3" d="M97.5,1C98.3,2.2,98.1,3.4,98.1,3.4L51.8,83.8C51.8,83.8,50.5,86.1,49.1,86.1C47.4,86.1,46.5,84.2,46.5,84.2L.2,3.7C.2,3.7,-0.4,2.5,.4,1.3C1.1,0,3.3,0,3.3,0L94.9,0C94.9,0,96.8,0,97.5,1z" stroke-width="0.25" fill="#ffffff" transform="translate(26.93,15.95)"/>
  7 + </g>
  8 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 126 153.98" width="126" xmlns="http://www.w3.org/2000/svg">
  2 + <defs>
  3 + <linearGradient gradientUnits="userSpaceOnUse" id="lg1" y1="54" x1="121" x2="-15" y2="91">
  4 + <stop stop-color="#a65d24" offset="0"/>
  5 + <stop stop-color="#f18f45" offset="0.3"/>
  6 + <stop stop-color="#f4bca3" offset="0.35"/>
  7 + <stop stop-color="#ed8638" offset="0.44"/>
  8 + <stop stop-color="#d27200" offset="0.64"/>
  9 + <stop stop-color="#bb6500" offset="1"/>
  10 + </linearGradient>
  11 + <linearGradient id="lg2" y1="0%" x1="100%" x2="0%" y2="0%">
  12 + <stop stop-color="#aa5b00" offset="0"/>
  13 + <stop stop-color="#f3a67c" offset="0.01"/>
  14 + <stop stop-color="#dd7800" offset="0.02"/>
  15 + <stop stop-color="#d97600" offset="0.64"/>
  16 + <stop stop-color="#d57300" offset="0.99"/>
  17 + <stop stop-color="#9e5400" offset="1"/>
  18 + </linearGradient>
  19 + <linearGradient gradientUnits="userSpaceOnUse" id="lg3" y1="3" x1="91" x2="-1" y2="28">
  20 + <stop stop-color="#b1b1b1" offset="0"/>
  21 + <stop stop-color="#ffffff" offset="0.18"/>
  22 + <stop stop-color="#ffffff" offset="0.2"/>
  23 + <stop stop-color="#fcfcfc" offset="0.3"/>
  24 + <stop stop-color="#dfdfdf" offset="0.64"/>
  25 + <stop stop-color="#c7c7c7" offset="1"/>
  26 + </linearGradient>
  27 + <linearGradient gradientUnits="userSpaceOnUse" id="lg4" y1="7" x1="59" x2="-2" y2="24">
  28 + <stop stop-color="#b1b1b1" offset="0"/>
  29 + <stop stop-color="#ffffff" offset="0.24"/>
  30 + <stop stop-color="#ffffff" offset="0.28"/>
  31 + <stop stop-color="#fcfcfc" offset="0.36"/>
  32 + <stop stop-color="#dfdfdf" offset="0.64"/>
  33 + <stop stop-color="#c7c7c7" offset="1"/>
  34 + </linearGradient>
  35 + </defs>
  36 + <g transform="translate(1,1)">
  37 + <path id="shape1" d="M0,144.9L106.1,144.9L63,0L43.7,0L0,144.9z" fill="url(#lg1)" transform="translate(8.96,0)"/>
  38 + <path id="shape2" d="M1.2,-0L122.8,-0C123.4,-0,124,.5,124,1.2L124,5.8C124,6.4,123.4,7,122.8,7L1.2,7C.5,7,0,6.4,0,5.8L0,1.2C0,.5,.5,-0,1.2,-0z" fill="url(#lg2)" transform="translate(0,144.99)"/>
  39 + <path id="shape3" d="M0,31.3L90.4,31.3L81.4,0L9.3,0L0,31.3z" fill="url(#lg3)" transform="translate(16.79,87.68)"/>
  40 + <path id="shape4" d="M0,31.3L57.2,31.3L48,0L9.1,0L0,31.3z" fill="url(#lg4)" transform="translate(33.59,32.81)"/>
  41 + </g>
  42 +</svg>
  1 +<svg height="94" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 190 93.9939" width="190" xmlns="http://www.w3.org/2000/svg">
  2 + <defs>
  3 + <linearGradient id="lg1" y1="0%" x1="100%" x2="0%" y2="0%">
  4 + <stop stop-color="#b4a02e" offset="0"/>
  5 + <stop stop-color="#fee988" offset="0.01"/>
  6 + <stop stop-color="#ead13f" offset="0.02"/>
  7 + <stop stop-color="#e6ce3e" offset="0.64"/>
  8 + <stop stop-color="#e1c93c" offset="0.99"/>
  9 + <stop stop-color="#a7952a" offset="1"/>
  10 + </linearGradient>
  11 + <linearGradient id="lg2" y1="0%" x1="100%" x2="0%" y2="0%">
  12 + <stop stop-color="#b59900" offset="0"/>
  13 + <stop stop-color="#ffe17c" offset="0.01"/>
  14 + <stop stop-color="#ebc800" offset="0.02"/>
  15 + <stop stop-color="#e7c400" offset="0.64"/>
  16 + <stop stop-color="#e2c000" offset="0.99"/>
  17 + <stop stop-color="#a88e00" offset="1"/>
  18 + </linearGradient>
  19 + <linearGradient id="lg3" y1="0%" x1="100%" x2="0%" y2="0%">
  20 + <stop stop-color="#b5a700" offset="0"/>
  21 + <stop stop-color="#fff07c" offset="0.01"/>
  22 + <stop stop-color="#ebd900" offset="0.02"/>
  23 + <stop stop-color="#e7d600" offset="0.64"/>
  24 + <stop stop-color="#e2d100" offset="0.99"/>
  25 + <stop stop-color="#a89b00" offset="1"/>
  26 + </linearGradient>
  27 + </defs>
  28 + <g transform="translate(1,1)">
  29 + <path stroke="#ffec00" id="shape1" d="M0,0L187.4,0L187.4,8L0,8L0,0z" fill="#ffec00" transform="translate(0.55,9.29)"/>
  30 + <path id="shape2" d="M.3,0L159.3,0C159.6,0,159.6,.1,159.6,.2L159.6,5.7C159.6,5.9,159.6,5.9,159.3,5.9L.3,5.9C0,5.9,0,5.9,0,5.7L0,.2C0,.1,0,0,.3,0z" fill="url(#lg1)" transform="translate(28.43,82.89)"/>
  31 + <path id="shape3" d="M.3,-0L159.3,-0C159.6,-0,159.6,.1,159.6,.3L159.6,3.2C159.6,3.4,159.6,3.5,159.3,3.5L.3,3.5C0,3.5,0,3.4,0,3.2L0,.3C0,.1,0,-0,.3,-0z" fill="url(#lg2)" transform="translate(28.43,88.47)"/>
  32 + <path stroke="#ffec00" id="shape4" d="M0,44.4L151.6,44.4L151.6,0L0,0L0,44.4z" fill="#ffec00" transform="translate(32.43,38.5)"/>
  33 + <path stroke="#000000" id="shape5" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(177.73,9.29)"/>
  34 + <path stroke="#000000" id="shape6" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(163.51,9.29)"/>
  35 + <path stroke="#000000" id="shape7" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(149.29,9.29)"/>
  36 + <path stroke="#000000" id="shape8" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(135.07,9.29)"/>
  37 + <path stroke="#000000" id="shape9" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(120.85,9.29)"/>
  38 + <path stroke="#000000" id="shape10" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(106.63,9.29)"/>
  39 + <path stroke="#000000" id="shape11" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(92.27,9.29)"/>
  40 + <path stroke="#000000" id="shape12" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(78.2,9.29)"/>
  41 + <path stroke="#000000" id="shape13" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(63.98,9.29)"/>
  42 + <path stroke="#000000" id="shape14" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(49.76,9.29)"/>
  43 + <path stroke="#000000" id="shape15" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(35.54,9.29)"/>
  44 + <path stroke="#000000" id="shape16" d="M4.1,0L10.3,0L6.1,8L0,8L4.1,0z" fill="#000000" transform="translate(21.32,9.29)"/>
  45 + <path stroke="#000000" id="shape17" d="M.1,44.3L21.5,0L17.5,0L0,36.1L.1,44.3z" fill="#000000" transform="translate(32.38,38.5)"/>
  46 + <path stroke="#000000" id="shape18" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(38.73,38.5)"/>
  47 + <path stroke="#000000" id="shape19" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(49.04,38.5)"/>
  48 + <path stroke="#000000" id="shape20" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(59.35,38.5)"/>
  49 + <path stroke="#000000" id="shape21" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(69.66,38.5)"/>
  50 + <path stroke="#000000" id="shape22" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(79.97,38.5)"/>
  51 + <path stroke="#000000" id="shape23" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(90.28,38.5)"/>
  52 + <path stroke="#000000" id="shape24" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(100.3,38.5)"/>
  53 + <path stroke="#000000" id="shape25" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(110.9,38.5)"/>
  54 + <path stroke="#000000" id="shape26" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(121.21,38.5)"/>
  55 + <path stroke="#000000" id="shape27" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(131.52,38.5)"/>
  56 + <path stroke="#000000" id="shape28" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(141.83,38.5)"/>
  57 + <path stroke="#000000" id="shape29" d="M0,44.3L4.1,44.3L25.5,0L21.4,0L0,44.3z" fill="#000000" transform="translate(152.14,38.5)"/>
  58 + <path stroke="#000000" id="shape30" d="M0,44.3L4.1,44.3L21.5,8.2L21.5,0L0,44.3z" fill="#000000" transform="translate(162.45,38.5)"/>
  59 + <path stroke="#000000" id="shape31" d="M0,23.1L11.2,0L7.1,0L0,14.6L0,23.1z" fill="#000000" transform="translate(32.41,38.5)"/>
  60 + <path stroke="#000000" id="shape32" d="M0,23.4L4.1,23.4L11.3,8.4L11.3,0L0,23.4z" fill="#000000" transform="translate(172.76,59.35)"/>
  61 + <path id="shape33" d="M.2,0L21.1,0C21.2,0,21.3,.2,21.3,.4L21.3,9.2C21.3,9.4,21.2,9.6,21.1,9.6L.2,9.6C.1,9.6,0,9.4,0,9.2L0,.4C0,.2,.1,0,.2,0z" fill="url(#lg2)" transform="translate(-0,0)"/>
  62 + <path id="shape34" d="M.2,0L21.1,0C21.2,0,21.3,.1,21.3,.3L21.3,82C21.3,82.2,21.2,82.3,21.1,82.3L.2,82.3C.1,82.3,0,82.2,0,82L0,.3C0,.1,.1,0,.2,0z" fill="url(#lg3)" transform="translate(-0,9.29)"/>
  63 + <path id="shape35" d="M21.2,0L21.2,5.7L0,18.2L0,12.5L21.2,0z" fill="#000000" transform="translate(0.16,19.03)"/>
  64 + <path id="shape36" d="M21.2,0L21.2,5.7L0,18.2L0,12.5L21.2,0z" fill="#000000" transform="translate(0.16,30.16)"/>
  65 + <path id="shape37" d="M21.2,0L21.2,5.7L0,18.2L0,12.5L21.2,0z" fill="#000000" transform="translate(0.16,41.3)"/>
  66 + <path id="shape38" d="M21.2,0L21.2,5.7L0,18.2L0,12.5L21.2,0z" fill="#000000" transform="translate(0.16,52.44)"/>
  67 + <path id="shape39" d="M21.2,0L21.2,5.7L0,18.2L0,12.5L21.2,0z" fill="#000000" transform="translate(0.16,63.58)"/>
  68 + <path id="shape40" d="M21.2,0L21.2,5.7L2.3,16.8L0,16.8L0,12.5L21.2,0z" fill="#000000" transform="translate(0.16,74.72)"/>
  69 + <path id="shape41" d="M9.7,0L9.7,5.7L0,5.7L9.7,0z" fill="#000000" transform="translate(11.64,85.86)"/>
  70 + <path id="shape42" d="M21.2,.1L21.2,4.4L0,16.9L0,11.2L19,0L21.2,.1z" fill="#000000" transform="translate(0.16,9.2)"/>
  71 + <path id="shape43" d="M9.7,0L0,5.7L0,0L9.7,0z" fill="#000000" transform="translate(0.16,9.19)"/>
  72 + <path id="shape44" d="M.2,0L21.1,0C21.2,0,21.3,0,21.3,0C21.3,.9,21.2,.9,21.1,.9L.2,.9C.1,.9,0,.9,0,.9C0,0,.1,0,.2,0z" fill="url(#lg3)" transform="translate(0,8.38)"/>
  73 + </g>
  74 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 148 154" width="148" xmlns="http://www.w3.org/2000/svg">
  2 + <defs>
  3 + <linearGradient id="lg1" y1="0%" x1="100%" x2="0%" y2="0%">
  4 + <stop stop-color="#ffb545" offset="0"/>
  5 + <stop stop-color="#ffbc65" offset="0.11"/>
  6 + <stop stop-color="#df9900" offset="0.52"/>
  7 + <stop stop-color="#c78800" offset="0.72"/>
  8 + <stop stop-color="#bc8000" offset="0.87"/>
  9 + <stop stop-color="#b17800" offset="1"/>
  10 + </linearGradient>
  11 + <linearGradient gradientUnits="userSpaceOnUse" id="lg2" y1="-0" x1="1" x2="11" y2="12">
  12 + <stop stop-color="#ffffff" offset="0" stop-opacity="0.82"/>
  13 + <stop stop-color="#ffffff" offset="0.36" stop-opacity="0.47"/>
  14 + <stop stop-color="#ffffff" offset="1" stop-opacity="0"/>
  15 + </linearGradient>
  16 + <linearGradient gradientUnits="userSpaceOnUse" id="lg3" y1="-0" x1="0" x2="9" y2="10">
  17 + <stop stop-color="#ffffff" offset="0" stop-opacity="0.86"/>
  18 + <stop stop-color="#ffffff" offset="0.36" stop-opacity="0.47"/>
  19 + <stop stop-color="#ffffff" offset="1" stop-opacity="0"/>
  20 + </linearGradient>
  21 + <linearGradient gradientUnits="userSpaceOnUse" id="lg4" y1="9" x1="13" x2="-1" y2="1">
  22 + <stop stop-color="#ffffff" offset="0" stop-opacity="0.16"/>
  23 + <stop stop-color="#ffffff" offset="0.44" stop-opacity="0.09"/>
  24 + <stop stop-color="#ffffff" offset="1" stop-opacity="0.51"/>
  25 + </linearGradient>
  26 + <linearGradient id="lg5" y1="0%" x1="100%" x2="0%" y2="0%">
  27 + <stop stop-color="#bdaf00" offset="0"/>
  28 + <stop stop-color="#ffed45" offset="0.15"/>
  29 + <stop stop-color="#fff5b3" offset="0.25"/>
  30 + <stop stop-color="#dfcf00" offset="0.52"/>
  31 + <stop stop-color="#c7b800" offset="0.69"/>
  32 + <stop stop-color="#bcad00" offset="0.8"/>
  33 + <stop stop-color="#b1a400" offset="0.92"/>
  34 + <stop stop-color="#cbbc00" offset="1"/>
  35 + </linearGradient>
  36 + <linearGradient id="lg6" y1="0%" x1="100%" x2="0%" y2="0%">
  37 + <stop stop-color="#bda000" offset="0"/>
  38 + <stop stop-color="#ffdc45" offset="0.15"/>
  39 + <stop stop-color="#ffebb3" offset="0.25"/>
  40 + <stop stop-color="#dfbe00" offset="0.52"/>
  41 + <stop stop-color="#c7a900" offset="0.69"/>
  42 + <stop stop-color="#bc9f00" offset="0.8"/>
  43 + <stop stop-color="#b19600" offset="0.92"/>
  44 + <stop stop-color="#cbad00" offset="1"/>
  45 + </linearGradient>
  46 + </defs>
  47 + <g transform="translate(1,1)">
  48 + <g transform="translate(117.33,0)">
  49 + <path id="shape1" d="M0,8.3C0,3.7,3.7,0,8.2,0C9.2,0,10.1,.2,11,.5C14.2,1.6,16.4,4.7,16.4,8.3C16.4,12.9,12.7,16.6,8.2,16.6C4.6,16.6,1.6,14.3,.5,11.1C.2,10.2,0,9.3,0,8.3z" fill="#ffffff" fill-opacity="0.3" transform="translate(0.59,0.6)"/>
  50 + <path id="shape2" d="M0,8.9C0,4,3.9,0,8.8,0C13.7,0,17.6,4,17.6,8.9C17.6,13.8,13.7,17.8,8.8,17.8C3.9,17.8,0,13.8,0,8.9z" fill="url(#lg1)"/>
  51 + <path id="shape3" d="M11.5,8.3C11.5,3.7,7.8,0,3.3,0C2.3,0,1.4,.2,.5,.5C-2.7,1.6,9.9,14.3,11,11.1C11.3,10.2,11.5,9.3,11.5,8.3z" fill="url(#lg2)" transform="translate(5.51,0.59)"/>
  52 + <path id="shape4" d="M9.6,7.3C9.6,3.3,6.4,0,2.4,0C1.6,0,.8,.1,0,.4C6.3,.7,9.2,4.2,9.2,9.7C9.2,10.5,9.6,8.1,9.6,7.3z" fill="url(#lg3)" transform="translate(6.7,1.2)"/>
  53 + <path id="shape5" d="M0,2.4C0,7,3.7,10.7,8.2,10.7C9.2,10.7,11.5,10.4,12.7,9.8C6.4,8.7,2.9,5.9,.6,0C.2,.6,0,1.4,0,2.4z" fill="url(#lg4)" transform="translate(0.32,6.2)"/>
  54 + <path id="shape6" d="M0,8.9C0,4,3.9,0,8.8,0C13.7,0,17.6,4,17.6,8.9C17.6,13.8,13.7,17.8,8.8,17.8C3.9,17.8,0,13.8,0,8.9z" fill="#ffffff" fill-opacity="0.18"/>
  55 + </g>
  56 + <g transform="translate(8.18,-0)">
  57 + <path id="shape7" d="M0,8.3C0,3.7,3.7,0,8.2,0C9.2,0,10.1,.2,11,.5C14.2,1.6,16.4,4.7,16.4,8.3C16.4,12.9,12.7,16.6,8.2,16.6C4.6,16.6,1.6,14.3,.5,11.1C.2,10.2,0,9.3,0,8.3z" fill="#ffffff" fill-opacity="0.3" transform="translate(0.59,0.6)"/>
  58 + <path id="shape8" d="M0,8.9C0,4,3.9,0,8.8,0C13.7,0,17.6,4,17.6,8.9C17.6,13.8,13.7,17.8,8.8,17.8C3.9,17.8,0,13.8,0,8.9z" fill="url(#lg1)"/>
  59 + <path id="shape9" d="M11.5,8.3C11.5,3.7,7.8,0,3.3,0C2.3,0,1.4,.2,.5,.5C-2.7,1.6,9.9,14.3,11,11.1C11.3,10.2,11.5,9.3,11.5,8.3z" fill="url(#lg2)" transform="translate(5.51,0.59)"/>
  60 + <path id="shape10" d="M9.6,7.3C9.6,3.3,6.4,0,2.4,0C1.6,0,.8,.1,0,.4C6.3,.7,9.2,4.2,9.2,9.7C9.2,10.5,9.6,8.1,9.6,7.3z" fill="url(#lg3)" transform="translate(6.7,1.2)"/>
  61 + <path id="shape11" d="M0,2.4C0,7,3.7,10.7,8.2,10.7C9.2,10.7,11.5,10.4,12.7,9.8C6.4,8.7,2.9,5.9,.6,0C.2,.6,0,1.4,0,2.4z" fill="url(#lg4)" transform="translate(0.32,6.2)"/>
  62 + <path id="shape12" d="M0,8.9C0,4,3.9,0,8.8,0C13.7,0,17.6,4,17.6,8.9C17.6,13.8,13.7,17.8,8.8,17.8C3.9,17.8,0,13.8,0,8.9z" fill="#ffffff" fill-opacity="0.18"/>
  63 + </g>
  64 + <path stroke="#ffec00" id="shape13" d="M0,0L93.5,0L93.5,8.5L0,8.5L0,0z" fill="#ffec00" transform="translate(24.81,116.32)"/>
  65 + <path id="shape14" d="M0,0L15.7,0L15.7,128.3L0,128.3L0,0z" fill="url(#lg5)" transform="translate(8.99,23.69)"/>
  66 + <path id="shape15" d="M0,0L15.7,0L15.7,128.3L0,128.3L0,0z" fill="url(#lg5)" transform="translate(118.27,23.69)"/>
  67 + <path id="shape16" d="M0,10.3L17.5,10.3L17.5,0L0,0L0,10.3z" fill="url(#lg6)" transform="translate(8.09,13.55)"/>
  68 + <path id="shape17" d="M0,10.3L17.5,10.3L17.5,0L0,0L0,10.3z" fill="url(#lg6)" transform="translate(117.37,13.55)"/>
  69 + <path stroke="#ffec00" id="shape18" d="M0,0L146,0L146,32.6L0,32.6L0,0z" fill="#ffec00" transform="translate(0,23.84)"/>
  70 + <g transform="translate(0,23.84)">
  71 + <path stroke="#000000" id="shape19" d="M13.5,0L22.3,0L8.8,32.6L0,32.6L13.5,0z" fill="#000000"/>
  72 + <path stroke="#000000" id="shape20" d="M13.5,0L22.3,0L8.8,32.6L0,32.6L13.5,0z" fill="#000000" transform="translate(20.62,0)"/>
  73 + <path stroke="#000000" id="shape21" d="M13.5,0L22.3,0L8.8,32.6L0,32.6L13.5,0z" fill="#000000" transform="translate(41.23,0)"/>
  74 + <path stroke="#000000" id="shape22" d="M13.5,0L22.3,0L8.8,32.6L0,32.6L13.5,0z" fill="#000000" transform="translate(61.85,0)"/>
  75 + <path stroke="#000000" id="shape23" d="M13.5,0L22.3,0L8.8,32.6L0,32.6L13.5,0z" fill="#000000" transform="translate(82.46,0)"/>
  76 + <path stroke="#000000" id="shape24" d="M13.5,0L22.3,0L8.8,32.6L0,32.6L13.5,0z" fill="#000000" transform="translate(103.08,0)"/>
  77 + <path stroke="#000000" id="shape25" d="M13.5,0L22.3,0L8.8,32.6L0,32.6L13.5,0z" fill="#000000" transform="translate(123.7,0)"/>
  78 + </g>
  79 + </g>
  80 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 118 154" width="118" xmlns="http://www.w3.org/2000/svg">
  2 + <defs>
  3 + <linearGradient id="lg1" y1="0%" x1="0%" x2="0%" y2="100%">
  4 + <stop stop-color="#c4b50f" offset="0"/>
  5 + <stop stop-color="#fff07c" offset="0.01"/>
  6 + <stop stop-color="#ffee59" offset="0.03"/>
  7 + <stop stop-color="#fce900" offset="0.64"/>
  8 + <stop stop-color="#ffec19" offset="0.99"/>
  9 + <stop stop-color="#c7b80f" offset="1"/>
  10 + </linearGradient>
  11 + </defs>
  12 + <g transform="translate(1,1)">
  13 + <path stroke="#f9ca31" id="shape1" d="M17.5,0L100.7,0L83.2,148.1L69.8,148.1L72,130.1L16.1,130.1L13.7,148.1L0,148.1L17.5,0z" fill="#f9ca31" transform="translate(-0,-0)"/>
  14 + <path stroke="#ffec00" id="shape2" d="M0,0L83.2,0L96.7,152L83.2,152L81.6,134.3L25.1,134.3L26.7,152L13.5,152L0,0z" fill="#ffec00" transform="translate(19.29,0)"/>
  15 + <path id="shape3" d="M0,0L83.2,0L84.1,11.9L1,11.9L0,0z" fill="url(#lg1)" transform="translate(19.29,0)"/>
  16 + <path stroke="#ffde61" id="shape4" d="M17.5,0L18.8,0L1.3,148.1L0,148.1L17.5,0z" fill="#ffde61" transform="translate(-0,-0)"/>
  17 + </g>
  18 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 154.007" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#000000;font-family:宋体;font-size:20pt}
  4 +]]></style>
  5 + <defs/>
  6 + <g transform="translate(1,1)">
  7 + <path stroke="#ffec00" id="shape1" d="M.7,74.3L74.3,.7C75.2,-0.2,76.8,-0.2,77.7,.7L151.3,74.3C152.2,75.2,152.2,76.8,151.3,77.7L77.7,151.3C76.8,152.2,75.2,152.2,74.3,151.3L.7,77.7C-0.2,76.8,-0.2,75.2,.7,74.3z" fill="#ffec00"/>
  8 + <path id="shape2" d="M.6,68.9L68.9,.6C69.7,-0.2,70.9,-0.2,71.6,.5L140,68.9C140.8,69.7,140.8,70.9,140,71.6L71.7,140C70.9,140.7,69.7,140.7,68.9,140L.6,71.6C-0.2,70.9,-0.2,69.7,.6,68.9z" fill="#000000" transform="translate(5.7,5.73)"/>
  9 + <g id="shape3" transform="translate(7.69,7.69)">
  10 + <path stroke="#ffec00" d="M.4,67.5L67.5,.4C67.9,0,68.7,0,69.2,.4L136.3,67.5C136.6,67.9,136.6,68.7,136.3,69.2L69.2,136.3C68.7,136.6,67.9,136.6,67.5,136.3L.4,69.2C0,68.7,0,67.9,.4,67.5z" fill="#ffec00"/>
  11 + <text class="st1">
  12 + <tspan y="78.8" x="19.3">CAUTION</tspan>
  13 + </text>
  14 + </g>
  15 + </g>
  16 +</svg>
  1 +<svg height="34" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 148 34" width="148" xmlns="http://www.w3.org/2000/svg">
  2 + <defs/>
  3 + <g transform="translate(1,1)">
  4 + <path stroke="#ffec00" id="shape1" d="M0,0L146,0L146,32L0,32L0,0z" fill="#ffec00"/>
  5 + <path stroke="#000000" id="shape2" d="M28.2,0L46.7,0L18.5,32L0,32L28.2,0z" fill="#000000"/>
  6 + <path stroke="#000000" id="shape3" d="M28.2,0L46.7,0L18.5,32L0,32L28.2,0z" fill="#000000" transform="translate(99.34,0)"/>
  7 + </g>
  8 +</svg>
  1 +<svg height="116" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 154 116" width="154" xmlns="http://www.w3.org/2000/svg">
  2 + <style type="text/css"><![CDATA[
  3 +.st1 {fill:#ffec00;font-family:Swis721 BlkCn BT;font-size:24pt}
  4 +]]></style>
  5 + <defs/>
  6 + <g transform="translate(1,1)">
  7 + <path stroke="#ffec00" id="shape1" d="M0,0L152,0L152,114L0,114L0,0z" fill="#ffec00"/>
  8 + <g id="shape2" transform="translate(3.82,3.8)">
  9 + <path stroke="#000000" d="M0,0L144.4,0L144.4,43.3L0,43.3L0,0z" fill="#000000"/>
  10 + <text class="st1">
  11 + <tspan y="34.7" x="16.2">CAUTION</tspan>
  12 + </text>
  13 + </g>
  14 + </g>
  15 +</svg>
  1 +<svg height="154" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 126 153.956" width="126" xmlns="http://www.w3.org/2000/svg">
  2 + <defs>
  3 + <linearGradient gradientUnits="userSpaceOnUse" id="lg1" y1="54" x1="121" x2="-15" y2="91">
  4 + <stop stop-color="#b1a400" offset="0"/>
  5 + <stop stop-color="#ffed45" offset="0.3"/>
  6 + <stop stop-color="#fff29b" offset="0.35"/>
  7 + <stop stop-color="#fce900" offset="0.44"/>
  8 + <stop stop-color="#dfcf00" offset="0.64"/>
  9 + <stop stop-color="#c7b800" offset="1"/>
  10 + </linearGradient>
  11 + <linearGradient id="lg2" y1="0%" x1="100%" x2="0%" y2="0%">
  12 + <stop stop-color="#b5a700" offset="0"/>
  13 + <stop stop-color="#fff07c" offset="0.01"/>
  14 + <stop stop-color="#ebd900" offset="0.02"/>
  15 + <stop stop-color="#e7d600" offset="0.64"/>
  16 + <stop stop-color="#e2d100" offset="0.99"/>
  17 + <stop stop-color="#a89b00" offset="1"/>
  18 + </linearGradient>
  19 + <linearGradient gradientUnits="userSpaceOnUse" id="lg3" y1="3" x1="91" x2="-1" y2="28">
  20 + <stop stop-color="#b1b1b1" offset="0"/>
  21 + <stop stop-color="#ffffff" offset="0.18"/>
  22 + <stop stop-color="#ffffff" offset="0.2"/>
  23 + <stop stop-color="#fcfcfc" offset="0.3"/>
  24 + <stop stop-color="#dfdfdf" offset="0.64"/>
  25 + <stop stop-color="#c7c7c7" offset="1"/>
  26 + </linearGradient>
  27 + <linearGradient gradientUnits="userSpaceOnUse" id="lg4" y1="7" x1="59" x2="-2" y2="24">
  28 + <stop stop-color="#b1b1b1" offset="0"/>
  29 + <stop stop-color="#ffffff" offset="0.24"/>
  30 + <stop stop-color="#ffffff" offset="0.28"/>
  31 + <stop stop-color="#fcfcfc" offset="0.36"/>
  32 + <stop stop-color="#dfdfdf" offset="0.64"/>
  33 + <stop stop-color="#c7c7c7" offset="1"/>
  34 + </linearGradient>
  35 + </defs>
  36 + <g transform="translate(1,1)">
  37 + <path id="shape1" d="M0,144.9L106.1,144.9L63,0L43.7,0L0,144.9z" fill="url(#lg1)" transform="translate(8.97,0)"/>
  38 + <path id="shape2" d="M1.2,-0L122.8,-0C123.4,-0,124,.5,124,1.2L124,5.8C124,6.4,123.4,7,122.8,7L1.2,7C.5,7,0,6.4,0,5.8L0,1.2C0,.5,.5,-0,1.2,-0z" fill="url(#lg2)" transform="translate(0,144.97)"/>
  39 + <path id="shape3" d="M0,31.3L90.4,31.3L81.4,0L9.3,0L0,31.3z" fill="url(#lg3)" transform="translate(16.79,87.67)"/>
  40 + <path id="shape4" d="M0,31.3L57.2,31.3L48,0L9.1,0L0,31.3z" fill="url(#lg4)" transform="translate(33.56,32.81)"/>
  41 + </g>
  42 +</svg>
@@ -16,6 +16,9 @@ @@ -16,6 +16,9 @@
16 <meta name="msapplication-config" content="images/browserconfig.xml"> 16 <meta name="msapplication-config" content="images/browserconfig.xml">
17 <meta name="mobile-web-app-capable" content="yes"> 17 <meta name="mobile-web-app-capable" content="yes">
18 <meta name="theme-color" content="#d89000"> 18 <meta name="theme-color" content="#d89000">
  19 + <!-- 全局变量 -->
  20 + <script src="./js/const/const.js"></script>
  21 +
19 <script src="./plugins/axios.min.js"></script> 22 <script src="./plugins/axios.min.js"></script>
20 <!-- <script src="./js/jquery/jquery-3.3.1.min.js"></script>--> 23 <!-- <script src="./js/jquery/jquery-3.3.1.min.js"></script>-->
21 <!-- <script src="./js/jquery.easyui.min.js"></script>--> 24 <!-- <script src="./js/jquery.easyui.min.js"></script>-->
@@ -32,11 +35,14 @@ @@ -32,11 +35,14 @@
32 <!-- <script type="text/javascript" src="./js/jquery.ztree.exhide.min.js"></script>--> 35 <!-- <script type="text/javascript" src="./js/jquery.ztree.exhide.min.js"></script>-->
33 <!-- <script type="text/javascript" src="./js/jquery.select.zTree.v1.5.min.js"></script>--> 36 <!-- <script type="text/javascript" src="./js/jquery.select.zTree.v1.5.min.js"></script>-->
34 37
35 -<!-- Axios --> 38 + <!-- Axios -->
36 <script src="./plugins/defHttp.js"></script> 39 <script src="./plugins/defHttp.js"></script>
37 40
38 <script src="./js/api/index.js"></script> 41 <script src="./js/api/index.js"></script>
39 42
  43 + <!-- act editor -->
  44 + <script src="./js/plugin/ace/ace.js"></script>
  45 +
40 <script type="text/javascript"> 46 <script type="text/javascript">
41 /** 47 /**
42 * URL Parameters and protocol description are here: 48 * URL Parameters and protocol description are here:
@@ -5,7 +5,7 @@ class ConfigurationNodeApi { @@ -5,7 +5,7 @@ class ConfigurationNodeApi {
5 * @param {string} levelId - 组态资源ID 5 * @param {string} levelId - 组态资源ID
6 */ 6 */
7 static getConfigurationInfo(levelType, levelId) { 7 static getConfigurationInfo(levelType, levelId) {
8 - return defHttp.get(`/yt/configuration/node/${levelType}/${levelId}`) 8 + return defHttp.get(`/yt/configuration/node/${ levelType }/${ levelId }`)
9 } 9 }
10 10
11 /** 11 /**
@@ -22,7 +22,7 @@ class ConfigurationNodeApi { @@ -22,7 +22,7 @@ class ConfigurationNodeApi {
22 * @returns {Promise<*>} 22 * @returns {Promise<*>}
23 */ 23 */
24 static getDeviceAttr(tbDeviceId) { 24 static getDeviceAttr(tbDeviceId) {
25 - return defHttp.get(`/plugins/telemetry/DEVICE/${tbDeviceId}/keys/timeseries`) 25 + return defHttp.get(`/plugins/telemetry/DEVICE/${ tbDeviceId }/keys/timeseries`)
26 } 26 }
27 27
28 /** 28 /**
@@ -32,7 +32,7 @@ class ConfigurationNodeApi { @@ -32,7 +32,7 @@ class ConfigurationNodeApi {
32 * @returns {Promise<*>} 32 * @returns {Promise<*>}
33 */ 33 */
34 static getDeviceUnderTheOrg(deviceType, orgId) { 34 static getDeviceUnderTheOrg(deviceType, orgId) {
35 - return defHttp.get(`/yt/device/list/${deviceType}?organizationId=${orgId}`) 35 + return defHttp.get(`/yt/device/list/${ deviceType }?organizationId=${ orgId }`)
36 } 36 }
37 37
38 /** 38 /**
@@ -41,7 +41,7 @@ class ConfigurationNodeApi { @@ -41,7 +41,7 @@ class ConfigurationNodeApi {
41 * @returns {Promise<*>} 41 * @returns {Promise<*>}
42 */ 42 */
43 static getDeviceChildDevice(deviceId) { 43 static getDeviceChildDevice(deviceId) {
44 - return defHttp.get(`/yt/device/relation?page=1&pageSize=10&fromId=${deviceId}`) 44 + return defHttp.get(`/yt/device/relation?page=1&pageSize=10&fromId=${ deviceId }`)
45 } 45 }
46 46
47 /** 47 /**
@@ -50,7 +50,7 @@ class ConfigurationNodeApi { @@ -50,7 +50,7 @@ class ConfigurationNodeApi {
50 * @returns {Promise<*>} 50 * @returns {Promise<*>}
51 */ 51 */
52 static getMasterDevice(orgId) { 52 static getMasterDevice(orgId) {
53 - return defHttp.get(`/yt/device/list/master/${orgId}`) 53 + return defHttp.get(`/yt/device/list/master/${ orgId }`)
54 } 54 }
55 55
56 /** 56 /**
@@ -60,7 +60,7 @@ class ConfigurationNodeApi { @@ -60,7 +60,7 @@ class ConfigurationNodeApi {
60 * @returns {Promise<*>} 60 * @returns {Promise<*>}
61 */ 61 */
62 static getSlaveDevice(orgId, masterDeviceId) { 62 static getSlaveDevice(orgId, masterDeviceId) {
63 - return defHttp.get(`/yt/device/list/slave/${orgId}?masterId=${masterDeviceId}`) 63 + return defHttp.get(`/yt/device/list/slave/${ orgId }?masterId=${ masterDeviceId }`)
64 } 64 }
65 65
66 /** 66 /**
@@ -72,8 +72,8 @@ class ConfigurationNodeApi { @@ -72,8 +72,8 @@ class ConfigurationNodeApi {
72 72
73 /** 73 /**
74 * @description 编辑动画效果 74 * @description 编辑动画效果
75 - * @param {*} data  
76 - * @returns 75 + * @param {*} data
  76 + * @returns
77 */ 77 */
78 static updateNodeAct(data) { 78 static updateNodeAct(data) {
79 return defHttp.post('/yt/configuration/node/act', data) 79 return defHttp.post('/yt/configuration/node/act', data)
@@ -81,13 +81,49 @@ class ConfigurationNodeApi { @@ -81,13 +81,49 @@ class ConfigurationNodeApi {
81 81
82 /** 82 /**
83 * @description 更新节点绑定信息 83 * @description 更新节点绑定信息
84 - * @param {*} data  
85 - * @returns 84 + * @param {*} data
  85 + * @returns
86 */ 86 */
87 static updateNodeInfo(data) { 87 static updateNodeInfo(data) {
88 return defHttp.post('/yt/configuration/node', data) 88 return defHttp.post('/yt/configuration/node', data)
89 } 89 }
90 90
  91 + /**
  92 + * @description 下发指令 单向
  93 + * @param {string} deviceId - tbDeviceId
  94 + * @param {object} data - 数据
  95 + */
  96 + static sendInstructionOneWay(deviceId, data) {
  97 + return defHttp.post(`/rpc/oneway/${ deviceId }`, data)
  98 + }
  99 +
  100 + /**
  101 + * @description 下发指令 单向
  102 + * @param {string} deviceId - tbDeviceId
  103 + * @param {object} data - 数据
  104 + */
  105 + static sendInstructionTwoWay(deviceId, data) {
  106 + return defHttp.post(`/rpc/twoway/${ deviceId }`, data)
  107 + }
  108 +
  109 + /**
  110 + * @description 下发指令
  111 + * @param {'oneway' | 'twoway'} way
  112 + * @param deviceId
  113 + * @param data
  114 + * @return {*}
  115 + */
  116 + static sendInstruction(way,deviceId, data) {
  117 + return defHttp.post(`/rpc/${way}/${ deviceId }`, data)
  118 + }
  119 +
  120 + /**
  121 + * @description 判断设备是否在线
  122 + * @param deviceId
  123 + * @return {*}
  124 + */
  125 + static deviceIsOnLine(deviceId){
  126 + return defHttp.get(`/plugins/telemetry/DEVICE/${deviceId}/values/attributes?keys=active`)
  127 + }
91 128
92 -  
93 } 129 }
  1 +const GLOBAL_TOKEN = JSON.parse(localStorage.getItem("UNDEFINED__DEVELOPMENT__2.7.1__COMMON__LOCAL__KEY__")).value.JWT_TOKEN.value
  2 +
  3 +const GLOBAL_WS_URL = (() => {
  4 + const { host, href } = location
  5 + const reg = /^https/
  6 + return `${ reg.test(href) ? 'wss' : 'ws' }://${ host }/api/ws/plugins/telemetry?token=${GLOBAL_TOKEN}`
  7 +})()
  8 +
  9 +// const GLOBAL_WS_URL = `ws://47.99.141.212:8080/api/ws/plugins/telemetry?token=${ GLOBAL_TOKEN }`
@@ -313,6 +313,9 @@ if (urlParams['orgChartDev'] == '1') @@ -313,6 +313,9 @@ if (urlParams['orgChartDev'] == '1')
313 //ThingsKit 313 //ThingsKit
314 mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Engine.js'); 314 mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Engine.js');
315 mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Basic-Components.js'); 315 mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Basic-Components.js');
  316 +mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Test-Components.js');
316 mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Controller-Components.js'); 317 mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Controller-Components.js');
317 mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Valve.js'); 318 mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Valve.js');
318 -mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Fan.js');  
  319 +mxscript(drawDevUrl + 'js/diagramly/sidebar/thingskit/Sidebar-Fan.js');
  320 +
  321 +
@@ -458,7 +458,6 @@ EditorUi.prototype.initPages = function() @@ -458,7 +458,6 @@ EditorUi.prototype.initPages = function()
458 458
459 // Updates scrollbar positions and backgrounds after validation 459 // Updates scrollbar positions and backgrounds after validation
460 var p = this.currentPage; 460 var p = this.currentPage;
461 - console.log(this)  
462 previewAction(this, this.currentPage) 461 previewAction(this, this.currentPage)
463 462
464 if (p != null && p != lastPage) 463 if (p != null && p != lastPage)
@@ -1082,6 +1082,7 @@ @@ -1082,6 +1082,7 @@
1082 1082
1083 this.addGeneralPalette(this.customEntries == null); 1083 this.addGeneralPalette(this.customEntries == null);
1084 this.addBasicComponentsPalette(); 1084 this.addBasicComponentsPalette();
  1085 + this.addTestPalette ();
1085 this.addControllerComponentsPalette(); 1086 this.addControllerComponentsPalette();
1086 this.addEnginePalette(); 1087 this.addEnginePalette();
1087 this.addValvePalette(); 1088 this.addValvePalette();
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 var currentDate = getCurrentDate(); 9 var currentDate = getCurrentDate();
10 var fns = [ 10 var fns = [
11 this.createVertexTemplateEntry('text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;', 100, 40, 'Title', 'Title', null, null, 'text heading title'), 11 this.createVertexTemplateEntry('text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;', 100, 40, 'Title', 'Title', null, null, 'text heading title'),
  12 + this.createVertexTemplateEntry('text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;', 100, 40, '变量', '变量', null, null, '变量'),
12 this.createEdgeTemplateEntry('shape=filledEdge;rounded=1;fixDash=1;endArrow=none;strokeWidth=10;fillColor=#BAFDFF;edgeStyle=orthogonalEdgeStyle;flowAnimation=1;strokeColor=#6666FF;endFill=1;metaEdit=0;backgroundOutline=0;', 60, 40, '', '线条'), 13 this.createEdgeTemplateEntry('shape=filledEdge;rounded=1;fixDash=1;endArrow=none;strokeWidth=10;fillColor=#BAFDFF;edgeStyle=orthogonalEdgeStyle;flowAnimation=1;strokeColor=#6666FF;endFill=1;metaEdit=0;backgroundOutline=0;', 60, 40, '', '线条'),
13 this.addEntry('timestamp date time text label', mxUtils.bind(this, function () { 14 this.addEntry('timestamp date time text label', mxUtils.bind(this, function () {
14 var cell = new mxCell('%date{yyyy-mm-dd ddd HH:MM:ss}%', new mxGeometry(0, 0, 160, 20), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;'); 15 var cell = new mxCell('%date{yyyy-mm-dd ddd HH:MM:ss}%', new mxGeometry(0, 0, 160, 20), 'text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;');
  1 +(function()
  2 +{
  3 + // Adds Atlassian shapes
  4 + Sidebar.prototype.addTestPalette = function()
  5 + {
  6 + var s = 'html=1;shadow=0;dashed=0;shape=mxgraph.atlassian.';
  7 + var s2 = 'html=1;shadow=0;dashed=0;fillColor=none;strokeColor=none;shape=mxgraph.bootstrap.rect;';
  8 + var s3 = mxConstants.STYLE_STROKEWIDTH + '=1;shadow=0;dashed=0;align=center;html=1;' + mxConstants.STYLE_SHAPE + "=mxgraph.mockup.";
  9 + var gn = 'mxgraph.test';
  10 + var dt = 'test ';
  11 + var sb = this;
  12 + this.setCurrentSearchEntryLibrary('test');
  13 +
  14 + var fns = [
  15 + this.createVertexTemplateEntry('image;image=img/lib/thingskit/test/OSHA安全警示带(红白条).svg;',
  16 + 66, 66, '', 'OSHA安全警示带(红白条)', null, null, this.getTagsForStencil(gn, 'OSHA安全警示带(红白条)', dt).join(' ')),
  17 + this.createVertexTemplateEntry('image;image=img/lib/thingskit/test/OSHA安全警示带(红白格).svg;',
  18 + 64, 74, '', 'OSHA安全警示带(红白格)', null, null, this.getTagsForStencil(gn, 'OSHA安全警示带(红白格)', dt).join(' ')),
  19 + ];
  20 +
  21 + this.addPalette('test', 'Test', false, mxUtils.bind(this, function(content)
  22 + {
  23 + for (var i = 0; i < fns.length; i++)
  24 + {
  25 + content.appendChild(fns[i](content));
  26 + }
  27 + }));
  28 +
  29 + this.setCurrentSearchEntryLibrary();
  30 + };
  31 +})();
@@ -4880,7 +4880,9 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -4880,7 +4880,9 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4880 const vertices = ss.vertices || [] 4880 const vertices = ss.vertices || []
4881 4881
4882 console.log(this.editorUi) 4882 console.log(this.editorUi)
4883 - console.log(ss.vertices) 4883 + console.log(vertices)
  4884 +
  4885 + // console.log(vertices[0]?.get('bindType'))
4884 /** 4886 /**
4885 * @description 不是单一节点则不进入数据绑定 4887 * @description 不是单一节点则不进入数据绑定
4886 */ 4888 */
@@ -4932,7 +4934,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -4932,7 +4934,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4932 4934
4933 /** 4935 /**
4934 * @description 当前节点绑定数据 4936 * @description 当前节点绑定数据
4935 - * @type {null} 4937 + * @type {null | object}
4936 */ 4938 */
4937 let currentNodeData = null 4939 let currentNodeData = null
4938 4940
@@ -4992,21 +4994,21 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -4992,21 +4994,21 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4992 ]; 4994 ];
4993 4995
4994 const dynamicEffectList = [ 4996 const dynamicEffectList = [
4995 - {  
4996 - label: "闪烁",  
4997 - type: enumDynamicEffectType.FLASH,  
4998 - category: enumCategory.ACT  
4999 - }, 4997 + // {
  4998 + // label: "闪烁",
  4999 + // type: enumDynamicEffectType.FLASH,
  5000 + // category: enumCategory.ACT
  5001 + // },
5000 { 5002 {
5001 label: "显示/隐藏", 5003 label: "显示/隐藏",
5002 type: enumDynamicEffectType.DISPLAY, 5004 type: enumDynamicEffectType.DISPLAY,
5003 category: enumCategory.ACT 5005 category: enumCategory.ACT
5004 }, 5006 },
5005 - {  
5006 - label: "旋转",  
5007 - type: enumDynamicEffectType.ROTATE,  
5008 - category: enumCategory.ACT  
5009 - }, 5007 + // {
  5008 + // label: "旋转",
  5009 + // type: enumDynamicEffectType.ROTATE,
  5010 + // category: enumCategory.ACT
  5011 + // },
5010 ]; 5012 ];
5011 5013
5012 const enumDataSourceConst = { 5014 const enumDataSourceConst = {
@@ -5205,7 +5207,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5205,7 +5207,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5205 /** 5207 /**
5206 * @description 生成从设备选择器 5208 * @description 生成从设备选择器
5207 */ 5209 */
5208 - function generatoSlaveDevice() { 5210 + function generatorSlaveDevice() {
5209 slaveDevicePanel = defaultPanel.cloneNode(false) 5211 slaveDevicePanel = defaultPanel.cloneNode(false)
5210 const slaveDeviceSelect = UseLayUi.createSelect({ 5212 const slaveDeviceSelect = UseLayUi.createSelect({
5211 label: '子设备', 5213 label: '子设备',
@@ -5312,9 +5314,23 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5312,9 +5314,23 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5312 } 5314 }
5313 5315
5314 async function echoActionType() { 5316 async function echoActionType() {
5315 - const all = [...(currentNodeData.act ?? []), ...(currentNodeData.event ?? [])] 5317 + const act = currentNodeData.act ?? []
  5318 + const event = currentNodeData.event ?? []
5316 const actionType = {} 5319 const actionType = {}
5317 - for (const item of all) { 5320 + for (const item of act) {
  5321 + if (!item.condition || !item.condition?.length) {
  5322 + $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', true)
  5323 + } else {
  5324 + $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', false)
  5325 + }
  5326 + actionType[item.type] = item.enabled
  5327 + }
  5328 + for (const item of event) {
  5329 + if (!item.content) {
  5330 + $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', true)
  5331 + } else {
  5332 + $(`.interaction__container input[name="${ item.type }"]`).attr('disabled', false)
  5333 + }
5318 actionType[item.type] = item.enabled 5334 actionType[item.type] = item.enabled
5319 } 5335 }
5320 form.val(CONTAINER_FILTER, actionType) 5336 form.val(CONTAINER_FILTER, actionType)
@@ -5324,7 +5340,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5324,7 +5340,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5324 function mount() { 5340 function mount() {
5325 generatorOrgTres() 5341 generatorOrgTres()
5326 generatorDeviceSelect() 5342 generatorDeviceSelect()
5327 - generatoSlaveDevice() 5343 + generatorSlaveDevice()
5328 generatorAttrSelect() 5344 generatorAttrSelect()
5329 echoData() 5345 echoData()
5330 5346
@@ -5352,6 +5368,11 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5352,6 +5368,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5352 $(panel).addClass('override__panel--default').append(item) 5368 $(panel).addClass('override__panel--default').append(item)
5353 $(fragment).append(panel) 5369 $(fragment).append(panel)
5354 }) 5370 })
  5371 + // Object.keys(enumInteractionType).forEach(key => {
  5372 + // form.on(`checkbox(${ key })`, event => {
  5373 + // const isChecked = $(event.othis).hasClass('layui-form-checked')
  5374 + // })
  5375 + // })
5355 $(container).append(fragment) 5376 $(container).append(fragment)
5356 } 5377 }
5357 5378
@@ -5430,7 +5451,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5430,7 +5451,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5430 return 5451 return
5431 } 5452 }
5432 // 事件类型 5453 // 事件类型
5433 - const enumenumEventType = { 5454 + const enumEventType = {
5434 DOWN: "按下", 5455 DOWN: "按下",
5435 UP: "抬起", 5456 UP: "抬起",
5436 SINGLE: "单击", 5457 SINGLE: "单击",
@@ -5459,9 +5480,19 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5459,9 +5480,19 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5459 ROW_FILTER: 'interactionRowFilter', 5480 ROW_FILTER: 'interactionRowFilter',
5460 5481
5461 /** 5482 /**
  5483 + * @description json editor
  5484 + */
  5485 + EDITOR_JSON: 'editor__json-',
  5486 +
  5487 + /**
5462 * @description 弹出层保存 filter 5488 * @description 弹出层保存 filter
5463 */ 5489 */
5464 - LAYER_SUBMIT_FILTER: 'interactionLayerSubmit' 5490 + LAYER_SUBMIT_FILTER: 'interactionLayerSubmit',
  5491 +
  5492 + /**
  5493 + * @description ace builder
  5494 + */
  5495 + JSON: 'ace__builder-json'
5465 } 5496 }
5466 5497
5467 5498
@@ -5495,7 +5526,17 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5495,7 +5526,17 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5495 /** 5526 /**
5496 * @description 下发值 5527 * @description 下发值
5497 */ 5528 */
5498 - VALUE: 'value' 5529 + VALUE: 'value',
  5530 +
  5531 + /**
  5532 + * @description 方式
  5533 + */
  5534 + WAY: 'way'
  5535 + }
  5536 +
  5537 + const sendInstructionWay = {
  5538 + ONE_WAR: 'oneway',
  5539 + TWO_WAY: 'twoway'
5499 } 5540 }
5500 5541
5501 /** 5542 /**
@@ -5507,9 +5548,23 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5507,9 +5548,23 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5507 allDeviceOptions = res 5548 allDeviceOptions = res
5508 } 5549 }
5509 5550
5510 - function addRecord() { 5551 + function createEditor(el, datum = {}) {
  5552 + const editor = ace.edit(el, {
  5553 + maxLines: 10, // 最大行数,超过会自动出现滚动条
  5554 + minLines: 5, // 最小行数,还未到最大行数时,编辑器会自动伸缩大小
  5555 + fontSize: 14, // 编辑器内字体大小
  5556 + tabSize: 2, // 制表符设置为 4 个空格大小
  5557 + });
  5558 + editor.session.setMode("ace/mode/json");
  5559 + editor.getSession().on('change', (event, editor) => {
  5560 + $(`#${ el }`).parent().find(`textarea[name="${ enumConst.VALUE }"]`).val(editor.getValue())
  5561 + })
  5562 + editor.setValue(datum[enumConst.VALUE] ? datum[enumConst.VALUE] : "{}")
  5563 + }
  5564 +
  5565 + function addRecord(datum) {
5511 const content = ` 5566 const content = `
5512 - <tr class="layui-form" lay-filter="${ enumActionEl.ROW_FILTER }${ addRowNumber }"> 5567 + <tr class="layui-form" lay-filter="${ getRowFilter(addRowNumber) }">
5513 <td> 5568 <td>
5514 <select name="${ enumConst.DEVICE }" lay-filter="${ enumConst.DEVICE }" lay-verType="tips" lay-verify="required"></select> 5569 <select name="${ enumConst.DEVICE }" lay-filter="${ enumConst.DEVICE }" lay-verType="tips" lay-verify="required"></select>
5515 </td> 5570 </td>
@@ -5517,10 +5572,22 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5517,10 +5572,22 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5517 <select name="${ enumConst.SLAVE_DEVICE }" lay-filter="${ enumConst.SLAVE_DEVICE }" lay-verType="tips"></select> 5572 <select name="${ enumConst.SLAVE_DEVICE }" lay-filter="${ enumConst.SLAVE_DEVICE }" lay-verType="tips"></select>
5518 </td> 5573 </td>
5519 <td> 5574 <td>
5520 - <select name="${ enumConst.ATTR }" lay-verType="tips" lay-verify="required"></select> 5575 + <form action="" style="display: flex">
  5576 + <div class="override__radio-default">
  5577 + <input id="${ getRowFilter(addRowNumber) }${ sendInstructionWay.ONE_WAR }" type="radio" name="${ enumConst.WAY }" lay-ignore value="${ sendInstructionWay.ONE_WAR }" title="单向" checked="">
  5578 + <label for="${ getRowFilter(addRowNumber) }${ sendInstructionWay.ONE_WAR }" class="override__radio-label">单向</label>
  5579 + </div>
  5580 + <div class="override__radio-default">
  5581 + <input id="${ getRowFilter(addRowNumber) }${ sendInstructionWay.TWO_WAY }" type="radio" name="${ enumConst.WAY }" lay-ignore value="${ sendInstructionWay.TWO_WAY }" title="双向">
  5582 + <label for="${ getRowFilter(addRowNumber) }${ sendInstructionWay.TWO_WAY }" class="override__radio-label">双向</label>
  5583 + </div>
  5584 + </form>
5521 </td> 5585 </td>
5522 - <td>  
5523 - <textarea name="${ enumConst.VALUE }" placeholder="请输入命令" lay-verType="tips" class="layui-textarea" ></textarea> 5586 + <td class="${enumActionEl.JSON}">
  5587 + <div style="width: 100%;height: 100%;">
  5588 + <div id="${ enumActionEl.EDITOR_JSON }${ addRowNumber }"></div>
  5589 + <textarea style="display: none" name="${ enumConst.VALUE }" placeholder="请输入命令" lay-verType="tips" class="layui-textarea"></textarea>
  5590 + </div>
5524 </td> 5591 </td>
5525 <td> 5592 <td>
5526 <button type="button" class="layui-btn layui-btn-primary layui-border-red ${ enumActionEl.DEL_ROW_EL }">删除</button> 5593 <button type="button" class="layui-btn layui-btn-primary layui-border-red ${ enumActionEl.DEL_ROW_EL }">删除</button>
@@ -5529,6 +5596,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5529,6 +5596,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5529 ` 5596 `
5530 $(`#${ enumActionEl.DEVICE_DATA_BODY_EL }`).append(content) 5597 $(`#${ enumActionEl.DEVICE_DATA_BODY_EL }`).append(content)
5531 setDeviceOptions(addRowNumber) 5598 setDeviceOptions(addRowNumber)
  5599 + createEditor(`${ enumActionEl.EDITOR_JSON }${ addRowNumber }`, datum)
5532 form.render('select', getRowFilter(addRowNumber)) 5600 form.render('select', getRowFilter(addRowNumber))
5533 addRowNumber++ 5601 addRowNumber++
5534 } 5602 }
@@ -5557,14 +5625,15 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5557,14 +5625,15 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5557 if (!res) return 5625 if (!res) return
5558 const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res }) 5626 const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res })
5559 $(data.elem).parents('tr').find(`select[name="${ enumConst.SLAVE_DEVICE }"]`).html(generateOption) 5627 $(data.elem).parents('tr').find(`select[name="${ enumConst.SLAVE_DEVICE }"]`).html(generateOption)
5560 - } else {  
5561 - updateVariableOptions(data)  
5562 } 5628 }
  5629 + // else {
  5630 + // updateVariableOptions(data)
  5631 + // }
5563 form.render('select') 5632 form.render('select')
5564 }) 5633 })
5565 - form.on(`select(${ enumConst.SLAVE_DEVICE })`, (data) => {  
5566 - updateVariableOptions(data)  
5567 - }) 5634 + // form.on(`select(${ enumConst.SLAVE_DEVICE })`, (data) => {
  5635 + // updateVariableOptions(data)
  5636 + // })
5568 } 5637 }
5569 5638
5570 /** 5639 /**
@@ -5572,6 +5641,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5572,6 +5641,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5572 */ 5641 */
5573 function createDeleteRowListenEvent() { 5642 function createDeleteRowListenEvent() {
5574 $(`.${ enumActionEl.DEL_ROW_EL }`).click((event) => { 5643 $(`.${ enumActionEl.DEL_ROW_EL }`).click((event) => {
  5644 + // $(event.target).parents('tr').find('editor')
5575 $(event.target).parents('tr').remove() 5645 $(event.target).parents('tr').remove()
5576 }) 5646 })
5577 } 5647 }
@@ -5645,17 +5715,18 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5645,17 +5715,18 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5645 * @description 回显每条数据 5715 * @description 回显每条数据
5646 */ 5716 */
5647 function echoEachData(datum = {}, row) { 5717 function echoEachData(datum = {}, row) {
5648 - addRecord() 5718 + addRecord(datum)
5649 const deviceId = datum[enumConst.DEVICE] 5719 const deviceId = datum[enumConst.DEVICE]
5650 const slaveDeviceId = datum[enumConst.SLAVE_DEVICE] 5720 const slaveDeviceId = datum[enumConst.SLAVE_DEVICE]
5651 const queue = [] 5721 const queue = []
5652 5722
5653 if (slaveDeviceId) { 5723 if (slaveDeviceId) {
5654 queue.push(() => getSlaveDeviceByMasterDevice(deviceId, row)) 5724 queue.push(() => getSlaveDeviceByMasterDevice(deviceId, row))
5655 - queue.push(() => getDeviceAttrByDeviceId(slaveDeviceId, row))  
5656 - } else {  
5657 - queue.push(() => getDeviceAttrByDeviceId(deviceId, row)) 5725 + // queue.push(() => getDeviceAttrByDeviceId(slaveDeviceId, row))
5658 } 5726 }
  5727 + // else {
  5728 + // queue.push(() => getDeviceAttrByDeviceId(deviceId, row))
  5729 + // }
5659 5730
5660 Promise 5731 Promise
5661 .all(queue.map(item => item())) 5732 .all(queue.map(item => item()))
@@ -5664,11 +5735,39 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5664,11 +5735,39 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5664 }) 5735 })
5665 } 5736 }
5666 5737
  5738 + function isJson(string) {
  5739 + if (typeof string === 'string') {
  5740 + try {
  5741 + const obj = JSON.parse(string)
  5742 + if (typeof obj === 'object' && obj !== null) {
  5743 + return true
  5744 + }
  5745 + } catch (e) {
  5746 + return false
  5747 + }
  5748 + }
  5749 + return false
  5750 + }
  5751 +
  5752 + function validate(tableData) {
  5753 + let validateFlag = true
  5754 + for (let i = 0; i < tableData.length; i++) {
  5755 + const { value } = tableData[i]
  5756 + if (!isJson(value)) {
  5757 + validateFlag = false
  5758 + layer.tips('下发值不正确', $(`#${ enumActionEl.DEVICE_DATA_BODY_EL } tr`).eq(i).find(`td.${enumActionEl.JSON}`), { tips: 1 })
  5759 + break
  5760 + }
  5761 + }
  5762 + return validateFlag
  5763 + }
  5764 +
5667 /** 5765 /**
5668 * @description 保存 5766 * @description 保存
5669 */ 5767 */
5670 async function submit(callback) { 5768 async function submit(callback) {
5671 const data = Array.from({ length: addRowNumber }).map((_, row) => form.val(getRowFilter(row))).filter(item => Object.keys(item).length) 5769 const data = Array.from({ length: addRowNumber }).map((_, row) => form.val(getRowFilter(row))).filter(item => Object.keys(item).length)
  5770 + if (!validate(data)) return
5672 const formModal = { 5771 const formModal = {
5673 configurationId, 5772 configurationId,
5674 contentId: currentPageId.id, 5773 contentId: currentPageId.id,
@@ -5695,7 +5794,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5695,7 +5794,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5695 <div class="layui-form-item"> 5794 <div class="layui-form-item">
5696 <label class="layui-form-label">事件</label> 5795 <label class="layui-form-label">事件</label>
5697 <div class="layui-input-block"> 5796 <div class="layui-input-block">
5698 - <input type="text" name="event" class="layui-input" value="${ enumenumEventType[type] }" disabled> 5797 + <input type="text" name="event" class="layui-input" value="${ enumEventType[type] }" disabled>
5699 </div> 5798 </div>
5700 </div> 5799 </div>
5701 <div class="layui-form-item"> 5800 <div class="layui-form-item">
@@ -5714,38 +5813,31 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5714,38 +5813,31 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5714 </div> 5813 </div>
5715 </div> 5814 </div>
5716 </div> 5815 </div>
5717 - <div id="tableContent">  
5718 - <table class="layui-table" >  
5719 - <colgroup>  
5720 - <col width="240">  
5721 - <col width="240">  
5722 - <col width="240">  
5723 - <col width="240">  
5724 - <col width="60">  
5725 - </colgroup>  
5726 - <thead>  
5727 - <tr>  
5728 - <th style="text-align:center">选择设备</th>  
5729 - <th style="text-align:center">选择子设备</th>  
5730 - <th style="text-align:center">变量</th>  
5731 - <th style="text-align:center">下发值</th>  
5732 - <th style="text-align:center">操作</th>  
5733 - </tr>  
5734 - </thead>  
5735 - <tbody id="${ enumActionEl.DEVICE_DATA_BODY_EL }"></tbody>  
5736 - </table>  
5737 - <div style="display:flex;justify-content:center;">  
5738 - <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${ enumActionEl.ADD_ROW_EL }">添加一条</button>  
5739 - </div> 5816 + </form>
  5817 + <div class="override__table">
  5818 + <table class="layui-table" >
  5819 + <thead>
  5820 + <tr>
  5821 + <th style="text-align:center">选择设备</th>
  5822 + <th style="text-align:center">选择子设备</th>
  5823 + <th style="text-align:center">单向 / 双向</th>
  5824 + <th style="text-align:center">下发值</th>
  5825 + <th style="text-align:center">操作</th>
  5826 + </tr>
  5827 + </thead>
  5828 + <tbody id="${ enumActionEl.DEVICE_DATA_BODY_EL }"></tbody>
  5829 + </table>
  5830 + <div style="display:flex;justify-content:center;">
  5831 + <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${ enumActionEl.ADD_ROW_EL }">添加一条</button>
5740 </div> 5832 </div>
5741 - </form>` 5833 + </div>`
5742 5834
5743 layer.open({ 5835 layer.open({
5744 title: '创建交互', 5836 title: '创建交互',
5745 content, 5837 content,
5746 skin: 'event-layer__override', 5838 skin: 'event-layer__override',
5747 - // area: ["800px", "600px"],  
5748 - area: '1100px', 5839 + // area: ["1100px", "700px"],
  5840 + area: '1200px',
5749 btn: ["保存", "取消"], 5841 btn: ["保存", "取消"],
5750 shade: ["0.7", "#fafafa"], 5842 shade: ["0.7", "#fafafa"],
5751 yes(index) { 5843 yes(index) {
@@ -5950,8 +6042,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5950,8 +6042,6 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5950 </div> 6042 </div>
5951 </div> 6043 </div>
5952 </div> 6044 </div>
5953 - <div style="height:200px;overflow-y:scroll" id="tableContent">  
5954 - </div>  
5955 </form> 6045 </form>
5956 ` 6046 `
5957 6047
@@ -6014,7 +6104,9 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6014,7 +6104,9 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6014 DEL_BTN_EL: 'dataDynamicEffectDelBtn', 6104 DEL_BTN_EL: 'dataDynamicEffectDelBtn',
6015 ADD_BTN_EL: 'dataDynamicEffectAddBtn', 6105 ADD_BTN_EL: 'dataDynamicEffectAddBtn',
6016 DISPLAY_SWITCH_EL: 'visibleOrHidden', 6106 DISPLAY_SWITCH_EL: 'visibleOrHidden',
6017 - LAYER_SUBMIT_FILTER: 'dynamicEffectLayerFilter' 6107 + LAYER_SUBMIT_FILTER: 'dynamicEffectLayerFilter',
  6108 + MIN_FILTER: 'dynamicEffectMinFilter',
  6109 + MAX_FILTER: 'dynamicEffectMaxFilter',
6018 } 6110 }
6019 6111
6020 const getRowFilter = (rowNumber) => `${ enumActionEl.ROW_FILTER }${ rowNumber }` 6112 const getRowFilter = (rowNumber) => `${ enumActionEl.ROW_FILTER }${ rowNumber }`
@@ -6033,6 +6125,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6033,6 +6125,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6033 GATEWAY: 'GATEWAY' 6125 GATEWAY: 'GATEWAY'
6034 } 6126 }
6035 6127
  6128 + const enumDisplayType = HandleDynamicEffect.enumDisplayType
  6129 +
6036 /** 6130 /**
6037 * @description 设备列表 6131 * @description 设备列表
6038 */ 6132 */
@@ -6075,19 +6169,20 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6075,19 +6169,20 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6075 * @description 通过组织获取设备 6169 * @description 通过组织获取设备
6076 */ 6170 */
6077 async function getDeviceByOrg(id) { 6171 async function getDeviceByOrg(id) {
  6172 + if (!id) return
6078 const [err, res] = await to(ConfigurationNodeApi.getMasterDevice(id)) 6173 const [err, res] = await to(ConfigurationNodeApi.getMasterDevice(id))
6079 - if (res) {  
6080 - deviceList = res  
6081 - const template = UseLayUi.generateOptionTemplate({ dataSource: res })  
6082 - $(`#${ enumActionEl.DEVICE_EL } select`).html(template)  
6083 - form.render('select', enumActionEl.FORM_FILTER)  
6084 - } 6174 + if (!res) return
  6175 + deviceList = res
  6176 + const template = UseLayUi.generateOptionTemplate({ dataSource: res })
  6177 + $(`#${ enumActionEl.DEVICE_EL } select`).html(template)
  6178 + form.render('select', enumActionEl.FORM_FILTER)
6085 } 6179 }
6086 6180
6087 /** 6181 /**
6088 * @description 通过主设备ID获取从设备 6182 * @description 通过主设备ID获取从设备
6089 */ 6183 */
6090 async function getSlaveDeviceByMasterDevice(orgId, id) { 6184 async function getSlaveDeviceByMasterDevice(orgId, id) {
  6185 + if (!orgId || !id) return
6091 const [err, res] = await to(ConfigurationNodeApi.getSlaveDevice(orgId, id)) 6186 const [err, res] = await to(ConfigurationNodeApi.getSlaveDevice(orgId, id))
6092 if (res) { 6187 if (res) {
6093 const template = UseLayUi.generateOptionTemplate({ dataSource: res }) 6188 const template = UseLayUi.generateOptionTemplate({ dataSource: res })
@@ -6100,6 +6195,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6100,6 +6195,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6100 * @description 通过设备ID获取设备属性 6195 * @description 通过设备ID获取设备属性
6101 */ 6196 */
6102 async function getAttrsByDevice(id) { 6197 async function getAttrsByDevice(id) {
  6198 + if (!id) return
6103 const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(id)) 6199 const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(id))
6104 if (res) { 6200 if (res) {
6105 const template = UseLayUi.generateOptionTemplate({ dataSource: res }) 6201 const template = UseLayUi.generateOptionTemplate({ dataSource: res })
@@ -6111,8 +6207,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6111,8 +6207,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6111 6207
6112 function generatorDisplayOptions() { 6208 function generatorDisplayOptions() {
6113 const options = [ 6209 const options = [
6114 - { name: '显示', id: 'show' },  
6115 - { name: '隐藏', id: 'hidden' } 6210 + { name: '显示', id: enumDisplayType.SHOW },
  6211 + { name: '隐藏', id: enumDisplayType.HIDDEN }
6116 ] 6212 ]
6117 const template = UseLayUi.generateOptionTemplate({ dataSource: options }) 6213 const template = UseLayUi.generateOptionTemplate({ dataSource: options })
6118 return ` 6214 return `
@@ -6132,10 +6228,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6132,10 +6228,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6132 <tr class="layui-form" lay-filter="${ getRowFilter(addRowNumber) }"> 6228 <tr class="layui-form" lay-filter="${ getRowFilter(addRowNumber) }">
6133 ${ IS_DISPLAY && `<td>${ generatorDisplayOptions() }</td>` } 6229 ${ IS_DISPLAY && `<td>${ generatorDisplayOptions() }</td>` }
6134 <td> 6230 <td>
6135 - <input lay-verType="tips" lay-verify="required" type="text" name="${ enumConst.MIN }" class="layui-input"> 6231 + <input lay-verType="tips" lay-verify="required" type="number" name="${ enumConst.MIN }" class="layui-input ${ enumActionEl.MIN_FILTER }">
6136 </td> 6232 </td>
6137 <td> 6233 <td>
6138 - <input lay-verType="tips" lay-verify="required" type="text" name="${ enumConst.MAX }" class="layui-input"> 6234 + <input lay-verType="tips" lay-verify="required" type="number" name="${ enumConst.MAX }" class="layui-input ${ enumActionEl.MAX_FILTER }">
6139 </td> 6235 </td>
6140 <td style="text-align: center;"> 6236 <td style="text-align: center;">
6141 <button type="button" class="layui-btn layui-btn-primary layui-border-red ${ enumActionEl.DEL_BTN_EL }">删除</button> 6237 <button type="button" class="layui-btn layui-btn-primary layui-border-red ${ enumActionEl.DEL_BTN_EL }">删除</button>
@@ -6191,9 +6287,35 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6191,9 +6287,35 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6191 } 6287 }
6192 6288
6193 /** 6289 /**
  6290 + * @description 创建输入监听
  6291 + */
  6292 + function createInputListener() {
  6293 + $(`#${ enumActionEl.TABLE_BODY_EL }`)
  6294 + .on('input', `.${ enumActionEl.MIN_FILTER }`, event => {
  6295 + const minVal = $(event.target).val()
  6296 + const maxVal = $(event.target).parents('tr').find(`input.${ enumActionEl.MAX_FILTER }`).val()
  6297 + if (maxVal !== '' && Number(minVal) > Number(maxVal)) {
  6298 + layer.tips('输入值大于最大值', $(event.target), {
  6299 + tips: 1
  6300 + });
  6301 + }
  6302 + })
  6303 + .on('input', `.${ enumActionEl.MAX_FILTER }`, event => {
  6304 + const maxVal = $(event.target).val()
  6305 + const minVal = $(event.target).parents('tr').find(`input.${ enumActionEl.MIN_FILTER }`).val()
  6306 + if (minVal !== '' && Number(maxVal) < Number(minVal)) {
  6307 + layer.tips('输入值小于最小值', $(event.target), {
  6308 + tips: 1
  6309 + });
  6310 + }
  6311 + })
  6312 + }
  6313 +
  6314 + /**
6194 * @description 创建事件监听 6315 * @description 创建事件监听
6195 */ 6316 */
6196 function createEventListen() { 6317 function createEventListen() {
  6318 + createInputListener()
6197 createSelectLinkageListenEvent() 6319 createSelectLinkageListenEvent()
6198 createAddRowListenEvent() 6320 createAddRowListenEvent()
6199 createDeleteRowListenEvent() 6321 createDeleteRowListenEvent()
@@ -6237,12 +6359,29 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6237,12 +6359,29 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6237 */ 6359 */
6238 function echoOrgTree(id) { 6360 function echoOrgTree(id) {
6239 const node = UseLayUi.findTreeObjectByField(treeList, id) 6361 const node = UseLayUi.findTreeObjectByField(treeList, id)
6240 - console.log(node)  
6241 $(`#${ enumActionEl.ORG_EL }`).find(`input[name="${ enumConst.ORG_ID }"]`).parent().find('span').html(node?.name) 6362 $(`#${ enumActionEl.ORG_EL }`).find(`input[name="${ enumConst.ORG_ID }"]`).parent().find('span').html(node?.name)
6242 } 6363 }
6243 6364
  6365 + function validate(tableData) {
  6366 + let validateFlag = true
  6367 + for (let i = 0; i < tableData.length; i++) {
  6368 + const { min, max } = tableData[i]
  6369 + if (Number(min) > Number(max)) {
  6370 + validateFlag = false
  6371 + layer.tips('输入值大于最大值', $(`#${ enumActionEl.TABLE_BODY_EL } tr`).eq(i).find(`input[name="${ enumConst.MIN }"]`), { tips: 1 })
  6372 + break
  6373 + } else if (Number(max) < Number(min)) {
  6374 + validateFlag = false
  6375 + layer.tips('输入值小于最小值', $(`#${ enumActionEl.TABLE_BODY_EL } tr`).eq(i).find(`input[name="${ enumConst.MAX }"]`), { tips: 1 })
  6376 + break
  6377 + }
  6378 + }
  6379 + return validateFlag
  6380 + }
  6381 +
6244 async function submit(callback) { 6382 async function submit(callback) {
6245 const tableData = Array.from({ length: addRowNumber }).map((_, index) => form.val(getRowFilter(index))).filter(obj => Object.keys(obj).length) 6383 const tableData = Array.from({ length: addRowNumber }).map((_, index) => form.val(getRowFilter(index))).filter(obj => Object.keys(obj).length)
  6384 + if (!validate(tableData)) return
6246 const formVal = form.val(enumActionEl.FORM_FILTER) 6385 const formVal = form.val(enumActionEl.FORM_FILTER)
6247 const formModel = { 6386 const formModel = {
6248 configurationId, 6387 configurationId,
@@ -6258,6 +6397,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6258,6 +6397,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6258 callback() 6397 callback()
6259 } 6398 }
6260 6399
  6400 + function isExistInArea(min, max, value) {
  6401 + return Number(value) >= Number(min) && Number(value) <= Number(max)
  6402 + }
  6403 +
6261 6404
6262 function createLayerForm(type) { 6405 function createLayerForm(type) {
6263 const content = ` 6406 const content = `
@@ -6297,14 +6440,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6297,14 +6440,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6297 </div> 6440 </div>
6298 </div> 6441 </div>
6299 </form> 6442 </form>
6300 - <div> 6443 + <div class="override__table">
6301 <table class="layui-table" > 6444 <table class="layui-table" >
6302 - <colgroup>  
6303 - ${ IS_DISPLAY ? '<col width="240">' : '' }  
6304 - <col width="240">  
6305 - <col width="240">  
6306 - <col>  
6307 - </colgroup>  
6308 <thead> 6445 <thead>
6309 <tr> 6446 <tr>
6310 ${ IS_DISPLAY ? '<th style="text-align:center">类型</th>' : '' } 6447 ${ IS_DISPLAY ? '<th style="text-align:center">类型</th>' : '' }
@@ -10568,6 +10705,9 @@ class UseLayUi { @@ -10568,6 +10705,9 @@ class UseLayUi {
10568 UseLayUi.msg(msg, { ...options, icon: 6 }) 10705 UseLayUi.msg(msg, { ...options, icon: 6 })
10569 } 10706 }
10570 10707
  10708 + static errorMsg(msg = '操作失败', options) {
  10709 + UseLayUi.msg(msg, { ...options, icon: 5 })
  10710 + }
10571 } 10711 }
10572 10712
10573 10713
@@ -10910,6 +11050,12 @@ class DispatchCenter { @@ -10910,6 +11050,12 @@ class DispatchCenter {
10910 nodeMapping 11050 nodeMapping
10911 11051
10912 /** 11052 /**
  11053 + * @description cmd ID 与 node 映射关系
  11054 + * @type {Map<number, string>}
  11055 + */
  11056 + cmdIdMapping = new Map()
  11057 +
  11058 + /**
10913 * @description 11059 * @description
10914 */ 11060 */
10915 editorUi 11061 editorUi
@@ -10942,7 +11088,30 @@ class DispatchCenter { @@ -10942,7 +11088,30 @@ class DispatchCenter {
10942 eventBus 11088 eventBus
10943 11089
10944 /** 11090 /**
  11091 + * @description 页面数据
  11092 + */
  11093 + contentData
  11094 +
  11095 + /**
  11096 + * @description 处理数据动效实例
  11097 + * @type {HandleDynamicEffect}
  11098 + */
  11099 + dynamicEffectInstance
  11100 +
  11101 + /**
  11102 + * @description 处理数据交互实例
  11103 + * @type {HandleDataInteraction}
  11104 + */
  11105 + dataInteractionInstance
  11106 +
  11107 + /**
  11108 + * @description cmd id
  11109 + */
  11110 + cmdIdPrimaryKey = 0
  11111 +
  11112 + /**
10945 * @description 当前实例 11113 * @description 当前实例
  11114 + * @type {DispatchCenter}
10946 */ 11115 */
10947 static instance 11116 static instance
10948 11117
@@ -10979,8 +11148,6 @@ class DispatchCenter { @@ -10979,8 +11148,6 @@ class DispatchCenter {
10979 constructor(editorUi, currentPage) { 11148 constructor(editorUi, currentPage) {
10980 this.nodeMapping = new Map() 11149 this.nodeMapping = new Map()
10981 this.editorUi = editorUi 11150 this.editorUi = editorUi
10982 -  
10983 - // mxEvent.addListener(document, (mxClient.IS_POINTER) ? 'pointerup' : 'mouseup', this.pointerUpHandler);  
10984 this.init(editorUi, currentPage) 11151 this.init(editorUi, currentPage)
10985 } 11152 }
10986 11153
@@ -10989,12 +11156,13 @@ class DispatchCenter { @@ -10989,12 +11156,13 @@ class DispatchCenter {
10989 * @param editorUi 11156 * @param editorUi
10990 * @param currentPage 11157 * @param currentPage
10991 */ 11158 */
10992 - init(editorUi, currentPage) { 11159 + async init(editorUi, currentPage) {
10993 this.createEventBus() 11160 this.createEventBus()
10994 this.saveContentInfo(editorUi, currentPage) 11161 this.saveContentInfo(editorUi, currentPage)
10995 - this.createGraphEventListener()  
10996 this.connectSocket() 11162 this.connectSocket()
10997 - this.getContentDataNode() 11163 + await this.getContentDataNode()
  11164 + this.dataInteractionInstance = new HandleDataInteraction(this)
  11165 + this.dynamicEffectInstance = new HandleDynamicEffect(this)
10998 } 11166 }
10999 11167
11000 /** 11168 /**
@@ -11002,15 +11170,7 @@ class DispatchCenter { @@ -11002,15 +11170,7 @@ class DispatchCenter {
11002 */ 11170 */
11003 connectSocket() { 11171 connectSocket() {
11004 const GLOBAL_TOKEN = JSON.parse(localStorage.getItem("UNDEFINED__DEVELOPMENT__2.7.1__COMMON__LOCAL__KEY__")).value.JWT_TOKEN.value 11172 const GLOBAL_TOKEN = JSON.parse(localStorage.getItem("UNDEFINED__DEVELOPMENT__2.7.1__COMMON__LOCAL__KEY__")).value.JWT_TOKEN.value
11005 -  
11006 - // const { host, href } = location  
11007 - // const reg = /^https/  
11008 - // const wsUrl = `${reg.test(href) ? 'wss' : 'ws'}://${host}/api/ws/plugins/telemetry?token=${GLOBAL_TOKEN}`  
11009 -  
11010 - const wsUrl = `ws://47.99.141.212:8080/api/ws/plugins/telemetry?token=${ GLOBAL_TOKEN }`  
11011 - // const wsUrl = `ws://192.168.10.115:8080/api/ws/plugins/telemetry?token=${GLOBAL_TOKEN}`  
11012 -  
11013 - this.socket = Ws.getInstance({ url: wsUrl, onmessageCallback: this.socketOnmessage }) 11173 + this.socket = Ws.getInstance({ url: GLOBAL_WS_URL, onmessageCallback: this.socketOnmessage })
11014 } 11174 }
11015 11175
11016 /** 11176 /**
@@ -11021,7 +11181,7 @@ class DispatchCenter { @@ -11021,7 +11181,7 @@ class DispatchCenter {
11021 */ 11181 */
11022 socketOnmessage(message, event, ws) { 11182 socketOnmessage(message, event, ws) {
11023 const { subscriptionId, data } = message 11183 const { subscriptionId, data } = message
11024 - DispatchCenter.instance.publishEvent(subscriptionId, data) 11184 + DispatchCenter.instance.publishEvent(subscriptionId, data, message, event, ws)
11025 } 11185 }
11026 11186
11027 /** 11187 /**
@@ -11032,39 +11192,6 @@ class DispatchCenter { @@ -11032,39 +11192,6 @@ class DispatchCenter {
11032 } 11192 }
11033 11193
11034 /** 11194 /**
11035 - * @description 创建图层事件监听器  
11036 - */  
11037 - createGraphEventListener() {  
11038 - if (DispatchCenter.eventListenerIsExist) return  
11039 -  
11040 - const graphDblClick = this.graph.dblClick;  
11041 - this.graph.dblClick = (...args) => {  
11042 - this.handleDoubleClickEvent(...args)  
11043 - graphDblClick.apply(this.graph, args)  
11044 - }  
11045 -  
11046 -  
11047 - const graphClick = this.graph.click;  
11048 - this.graph.click = (...args) => {  
11049 - this.handleClickEvent(...args)  
11050 - graphClick.apply(this.graph, args)  
11051 - }  
11052 -  
11053 - const graphFireMouseEvent = this.graph.fireMouseEvent;  
11054 - this.graph.fireMouseEvent = (eventName, event, sender) => {  
11055 - if (eventName === mxEvent.MOUSE_DOWN) {  
11056 - this.handleMouseDownEvent(eventName, event, sender)  
11057 - }  
11058 - if (eventName === mxEvent.MOUSE_UP) {  
11059 - this.handleMouseUpEvent(eventName, event, sender)  
11060 - }  
11061 - graphFireMouseEvent.apply(this.graph, [eventName, event, sender]);  
11062 - };  
11063 -  
11064 - DispatchCenter.eventListenerIsExist = true  
11065 - }  
11066 -  
11067 - /**  
11068 * @description 保存部分页面信息到实例上 11195 * @description 保存部分页面信息到实例上
11069 * @param editorUi 11196 * @param editorUi
11070 * @param currentPage 11197 * @param currentPage
@@ -11084,14 +11211,9 @@ class DispatchCenter { @@ -11084,14 +11211,9 @@ class DispatchCenter {
11084 const { node: { id } = {} } = this.currentPage 11211 const { node: { id } = {} } = this.currentPage
11085 if (!id) return 11212 if (!id) return
11086 const [err, res] = await to(ConfigurationNodeApi.getConfigurationInfo('CONTENT', id)) 11213 const [err, res] = await to(ConfigurationNodeApi.getConfigurationInfo('CONTENT', id))
11087 - const { dataSources, event, act } = res  
11088 - const sendMsg = {  
11089 - tsSubCmds: this.generatorDataSourceMapping(dataSources)  
11090 - }  
11091 - this.generatorEventMapping(event)  
11092 - this.generatorActionEffectMapping(act)  
11093 - this.sendMessageToGetRealTimeData(sendMsg)  
11094 - console.log(this.nodeMapping) 11214 + const { dataSources, event, act } = this.contentData = res
  11215 + const tsSubCmds = this.generatorDataSourceMapping(dataSources)
  11216 + this.sendMessageToGetRealTimeData({ tsSubCmds })
11095 } 11217 }
11096 11218
11097 /** 11219 /**
@@ -11103,61 +11225,43 @@ class DispatchCenter { @@ -11103,61 +11225,43 @@ class DispatchCenter {
11103 } 11225 }
11104 11226
11105 /** 11227 /**
  11228 + * @description 通过传入NodeId获取cmdId
  11229 + * @param nodeId
  11230 + * @return {number}
  11231 + */
  11232 + getCmdId(nodeId) {
  11233 + const cmdId = this.cmdIdPrimaryKey++
  11234 + this.cmdIdMapping.set(cmdId, nodeId)
  11235 + return cmdId
  11236 + }
  11237 +
  11238 + /**
11106 * @description 生成节点映射表 11239 * @description 生成节点映射表
11107 * @param dataSources 11240 * @param dataSources
11108 * @return {{cmdId: number, entityType: string, keys: *, scope: string, entityId: *}[]} 11241 * @return {{cmdId: number, entityType: string, keys: *, scope: string, entityId: *}[]}
11109 */ 11242 */
11110 generatorDataSourceMapping(dataSources = []) { 11243 generatorDataSourceMapping(dataSources = []) {
11111 - return dataSources.map((datum, eventName) => {  
11112 - const { deviceId, attr } = datum 11244 + return dataSources.map((datum) => {
  11245 + const { deviceId, attr, nodeId } = datum
  11246 + const cmdId = this.getCmdId(nodeId)
11113 const sendMsgTemplate = { 11247 const sendMsgTemplate = {
11114 entityType: "DEVICE", 11248 entityType: "DEVICE",
11115 entityId: deviceId, 11249 entityId: deviceId,
11116 scope: "LATEST_TELEMETRY", 11250 scope: "LATEST_TELEMETRY",
11117 - cmdId: eventName, 11251 + cmdId,
11118 keys: attr 11252 keys: attr
11119 } 11253 }
11120 -  
11121 - this.subscribeDataSources(datum, eventName, attr) 11254 + this.subscribeDataSources(datum, cmdId, attr)
11122 return sendMsgTemplate 11255 return sendMsgTemplate
11123 }) 11256 })
11124 } 11257 }
11125 11258
11126 /** 11259 /**
11127 - * @description 事件映射  
11128 - * @param event  
11129 - */  
11130 - generatorEventMapping(event = []) {  
11131 - for (const item of event) {  
11132 - const { content, id: nodeId, enabled, type } = item  
11133 - if (!enabled) continue  
11134 - if (!this.nodeMapping.has(nodeId)) this.nodeMapping.set(nodeId, new Map())  
11135 - const temp = this.nodeMapping.get(nodeId)  
11136 - temp.set(type, content)  
11137 - }  
11138 - }  
11139 -  
11140 - /**  
11141 - * @description 动效映射  
11142 - * @param act  
11143 - */  
11144 - generatorActionEffectMapping(act = []) {  
11145 - for (const item of act) {  
11146 - const { condition, id: nodeId, enabled, type } = item  
11147 - if (!enabled) continue  
11148 - if (!this.nodeMapping.has(nodeId)) this.nodeMapping.set(nodeId, new Map())  
11149 - const temp = this.nodeMapping.get(nodeId)  
11150 - temp.set(type, condition)  
11151 - }  
11152 - }  
11153 -  
11154 - /**  
11155 * @description 分发事件 11260 * @description 分发事件
11156 */ 11261 */
11157 - publishEvent(eventName, data) { 11262 + publishEvent(eventName, data, message, event, ws) {
11158 Object.keys(data).forEach(() => { 11263 Object.keys(data).forEach(() => {
11159 - this.eventBus.emit(eventName, data)  
11160 - 11264 + this.eventBus.emit(eventName, message, event, ws)
11161 }) 11265 })
11162 } 11266 }
11163 11267
@@ -11170,8 +11274,9 @@ class DispatchCenter { @@ -11170,8 +11274,9 @@ class DispatchCenter {
11170 subscribeDataSources(datum, eventName, key) { 11274 subscribeDataSources(datum, eventName, key) {
11171 const node = this.contentAllCell.find(item => item.id === datum.nodeId) 11275 const node = this.contentAllCell.find(item => item.id === datum.nodeId)
11172 this.eventBus.on(eventName, (message) => { 11276 this.eventBus.on(eventName, (message) => {
11173 - this.updatePage(node, () => {  
11174 - const [[timespan, value]] = message[key] 11277 + this.updatePage(() => {
  11278 + const { data } = message
  11279 + const [[timespan, value]] = data[key]
11175 node.setValue(value) 11280 node.setValue(value)
11176 }) 11281 })
11177 }) 11282 })
@@ -11179,19 +11284,132 @@ class DispatchCenter { @@ -11179,19 +11284,132 @@ class DispatchCenter {
11179 11284
11180 /** 11285 /**
11181 * @description 更新页面 11286 * @description 更新页面
11182 - * @param node  
11183 * @param callback 11287 * @param callback
11184 */ 11288 */
11185 - updatePage(node, callback) { 11289 + updatePage(callback) {
11186 this.graph.getModel().beginUpdate() 11290 this.graph.getModel().beginUpdate()
11187 try { 11291 try {
11188 callback() 11292 callback()
11189 - this.graph.insertVertex(node, null); 11293 + this.graph.refresh();
11190 } finally { 11294 } finally {
11191 this.graph.getModel().endUpdate() 11295 this.graph.getModel().endUpdate()
11192 } 11296 }
11193 } 11297 }
11194 11298
  11299 +
  11300 + /**
  11301 + * @description 返回 DispatchCenter 实例 当contentID变化时重新创建实例
  11302 + * @param editorUi
  11303 + * @param currentPage
  11304 + * @return {*}
  11305 + */
  11306 + static getInstance(editorUi, currentPage = {}) {
  11307 + const { node: { id } = {} } = currentPage
  11308 + if (!id) return
  11309 + if (!DispatchCenter.instance || DispatchCenter.rawContentId !== id) {
  11310 + DispatchCenter.instance?.dynamicEffectInstance?.cleanSetInterval?.()
  11311 + DispatchCenter.instance = new DispatchCenter(editorUi, currentPage)
  11312 + DispatchCenter.rawContentId = id
  11313 + }
  11314 +
  11315 + return DispatchCenter.instance
  11316 + }
  11317 +
  11318 +}
  11319 +
  11320 +class HandleDataInteraction {
  11321 + /**
  11322 + * @description 事件分发中心实例
  11323 + * @type {DispatchCenter}
  11324 + */
  11325 + DispatchInstance
  11326 +
  11327 + /**
  11328 + * @description 事件映射
  11329 + * @type {Map<>}
  11330 + */
  11331 + eventMapping = new Map()
  11332 +
  11333 + constructor(DispatchInstance) {
  11334 + this.DispatchInstance = DispatchInstance
  11335 + this.init()
  11336 + }
  11337 +
  11338 + init() {
  11339 + this.generatorEventMapping()
  11340 + this.createGraphEventListener()
  11341 + }
  11342 +
  11343 + /**
  11344 + * @description DispatchCenter 实例中保存的 graph 对象
  11345 + * @return {*}
  11346 + */
  11347 + get graph() {
  11348 + return this.DispatchInstance.graph
  11349 + }
  11350 +
  11351 + /**
  11352 + * @description DispatchCenter 实例中保存的 editorUi 对象
  11353 + * @return {*}
  11354 + */
  11355 + get editorUi() {
  11356 + return this.DispatchInstance.editorUi
  11357 + }
  11358 +
  11359 + /**
  11360 + * @description DispatchCenter 实例中保存的 contentAllCell 对象
  11361 + * @return {*}
  11362 + */
  11363 + get eventList() {
  11364 + const { event = [] } = this.DispatchInstance.contentData
  11365 + return event
  11366 + }
  11367 +
  11368 + /**
  11369 + * @description 事件映射
  11370 + */
  11371 + generatorEventMapping() {
  11372 + const event = this.eventList
  11373 + console.log(event)
  11374 + for (const item of event) {
  11375 + const { content, id: nodeId, enabled, type } = item
  11376 + if (!enabled) continue
  11377 + if (!this.eventMapping.has(nodeId)) this.eventMapping.set(nodeId, new Map())
  11378 + const temp = this.eventMapping.get(nodeId)
  11379 + temp.set(type, content)
  11380 + }
  11381 + }
  11382 +
  11383 + createGraphEventListener() {
  11384 + if (DispatchCenter.eventListenerIsExist) return
  11385 +
  11386 + const graphDblClick = this.graph.dblClick;
  11387 + this.graph.dblClick = (...args) => {
  11388 + this.handleDoubleClickEvent(...args)
  11389 + graphDblClick.apply(this.graph, args)
  11390 + }
  11391 +
  11392 +
  11393 + const graphClick = this.graph.click;
  11394 + this.graph.click = (...args) => {
  11395 + this.handleClickEvent(...args)
  11396 + graphClick.apply(this.graph, args)
  11397 + }
  11398 +
  11399 + const graphFireMouseEvent = this.graph.fireMouseEvent;
  11400 + this.graph.fireMouseEvent = (eventName, event, sender) => {
  11401 + if (eventName === mxEvent.MOUSE_DOWN) {
  11402 + this.handleMouseDownEvent(eventName, event, sender)
  11403 + }
  11404 + if (eventName === mxEvent.MOUSE_UP) {
  11405 + this.handleMouseUpEvent(eventName, event, sender)
  11406 + }
  11407 + graphFireMouseEvent.apply(this.graph, [eventName, event, sender]);
  11408 + };
  11409 +
  11410 + DispatchCenter.eventListenerIsExist = true
  11411 + }
  11412 +
11195 /** 11413 /**
11196 * @description 处理按下事件 11414 * @description 处理按下事件
11197 * @param eventName 11415 * @param eventName
@@ -11200,10 +11418,10 @@ class DispatchCenter { @@ -11200,10 +11418,10 @@ class DispatchCenter {
11200 */ 11418 */
11201 handleMouseDownEvent(eventName, event, sender) { 11419 handleMouseDownEvent(eventName, event, sender) {
11202 const { state: { cell: { id } = {} } = {} } = event 11420 const { state: { cell: { id } = {} } = {} } = event
11203 - const temp = this.nodeMapping.get(id) 11421 + const temp = this.eventMapping.get(id)
11204 if (temp && temp.has(DispatchCenter.enumEventType.DOWN)) { 11422 if (temp && temp.has(DispatchCenter.enumEventType.DOWN)) {
11205 const content = temp.get(DispatchCenter.enumEventType.DOWN) 11423 const content = temp.get(DispatchCenter.enumEventType.DOWN)
11206 - console.log('mouse down event', content) 11424 + this.sendInstruction(content.data)
11207 } 11425 }
11208 } 11426 }
11209 11427
@@ -11215,10 +11433,10 @@ class DispatchCenter { @@ -11215,10 +11433,10 @@ class DispatchCenter {
11215 */ 11433 */
11216 handleMouseUpEvent(eventName, event, sender) { 11434 handleMouseUpEvent(eventName, event, sender) {
11217 const { state: { cell: { id } = {} } = {} } = event 11435 const { state: { cell: { id } = {} } = {} } = event
11218 - const temp = this.nodeMapping.get(id) 11436 + const temp = this.eventMapping.get(id)
11219 if (temp && temp.has(DispatchCenter.enumEventType.UP)) { 11437 if (temp && temp.has(DispatchCenter.enumEventType.UP)) {
11220 const content = temp.get(DispatchCenter.enumEventType.UP) 11438 const content = temp.get(DispatchCenter.enumEventType.UP)
11221 - console.log('mouse up event', content) 11439 + this.sendInstruction(content.data)
11222 } 11440 }
11223 } 11441 }
11224 11442
@@ -11228,7 +11446,7 @@ class DispatchCenter { @@ -11228,7 +11446,7 @@ class DispatchCenter {
11228 */ 11446 */
11229 handleClickEvent(event) { 11447 handleClickEvent(event) {
11230 const { state: { cell: { id } = {} } = {} } = event 11448 const { state: { cell: { id } = {} } = {} } = event
11231 - const temp = this.nodeMapping.get(id) 11449 + const temp = this.eventMapping.get(id)
11232 if (temp && temp.has(DispatchCenter.enumEventType.SINGLE)) { 11450 if (temp && temp.has(DispatchCenter.enumEventType.SINGLE)) {
11233 const content = temp.get(DispatchCenter.enumEventType.SINGLE) 11451 const content = temp.get(DispatchCenter.enumEventType.SINGLE)
11234 const { type, value } = content 11452 const { type, value } = content
@@ -11247,7 +11465,7 @@ class DispatchCenter { @@ -11247,7 +11465,7 @@ class DispatchCenter {
11247 */ 11465 */
11248 handleDoubleClickEvent(event, cell = {}) { 11466 handleDoubleClickEvent(event, cell = {}) {
11249 const { id } = cell 11467 const { id } = cell
11250 - const temp = this.nodeMapping.get(id) 11468 + const temp = this.eventMapping.get(id)
11251 if (temp && temp.has(DispatchCenter.enumEventType.DOUBLE)) { 11469 if (temp && temp.has(DispatchCenter.enumEventType.DOUBLE)) {
11252 const content = temp.get(DispatchCenter.enumEventType.DOUBLE) 11470 const content = temp.get(DispatchCenter.enumEventType.DOUBLE)
11253 const { type, value } = content 11471 const { type, value } = content
@@ -11259,34 +11477,385 @@ class DispatchCenter { @@ -11259,34 +11477,385 @@ class DispatchCenter {
11259 } 11477 }
11260 } 11478 }
11261 11479
  11480 +
  11481 + /**
  11482 + * @description 下发指令
  11483 + * @param list
  11484 + */
  11485 + sendInstruction(list = []) {
  11486 + const queue = []
  11487 + const fn = async (way, deviceId, data) => {
  11488 + const [err, res = {}] = await to(ConfigurationNodeApi.deviceIsOnLine(deviceId))
  11489 + const { value } = res
  11490 + if (value) {
  11491 + await to(ConfigurationNodeApi.sendInstruction(way, deviceId, data))
  11492 + } else {
  11493 + UseLayUi.errorMsg('设备不在线!')
  11494 + }
  11495 + }
  11496 + for (const item of list) {
  11497 + const { deviceId, slaveDeviceId, value, way } = item
  11498 + console.log(item)
  11499 + if (!value || !deviceId) continue
  11500 + const data = {
  11501 + method: "methodThingskit",
  11502 + params: JSON.parse(value)
  11503 + }
  11504 + if (slaveDeviceId) {
  11505 + queue.push(() => {
  11506 + fn(way, slaveDeviceId, data)
  11507 + })
  11508 + } else if (deviceId) {
  11509 + queue.push(() => {
  11510 + fn(way, deviceId, data)
  11511 + })
  11512 + }
  11513 + }
  11514 +
  11515 + Promise.all(queue.map(fn => fn())).then(res => {
  11516 + console.log(res)
  11517 + })
  11518 + }
  11519 +
11262 /** 11520 /**
11263 * @description 跳转页面 11521 * @description 跳转页面
11264 */ 11522 */
11265 jumpPage(page) { 11523 jumpPage(page) {
11266 - // const page = 'ikp4NlRjQpI8WxeSibFj'  
11267 this.editorUi.handleCustomLink(`data:page/id,${ page }`) 11524 this.editorUi.handleCustomLink(`data:page/id,${ page }`)
11268 } 11525 }
  11526 +}
11269 11527
  11528 +class HandleDynamicEffect {
11270 11529
11271 /** 11530 /**
11272 - * @description 返回 DispatchCenter 实例 当contentID变化时重新创建实例  
11273 - * @param editorUi  
11274 - * @param currentPage  
11275 - * @return {*} 11531 + * @description 事件分发中心实例
  11532 + * @type {DispatchCenter}
11276 */ 11533 */
11277 - static getInstance(editorUi, currentPage = {}) {  
11278 - const { node: { id } = {} } = currentPage  
11279 - if (!id) return  
11280 - if (!DispatchCenter.instance || DispatchCenter.rawContentId !== id) {  
11281 - DispatchCenter.instance = new DispatchCenter(editorUi, currentPage)  
11282 - DispatchCenter.rawContentId = id 11534 + DispatchInstance
  11535 +
  11536 + /**
  11537 + * @description 开启的数据动效
  11538 + * @type {any[]}
  11539 + */
  11540 + enableActList
  11541 +
  11542 + /**
  11543 + * @description 动效节点映射
  11544 + * @type {Map<string, Map<string, any>>}
  11545 + */
  11546 + actNodeMapping = new Map()
  11547 +
  11548 + /**
  11549 + * @description cmdID 与 nodeID 关系映射
  11550 + * @type {Map<number, string>}
  11551 + */
  11552 + cmdIdMapping = new Map()
  11553 +
  11554 + /**
  11555 + * @description clear setInterval
  11556 + */
  11557 + cleanSetInterval
  11558 +
  11559 + static enumConst = {
  11560 + MAX: 'max',
  11561 + MIN: 'min',
  11562 + }
  11563 +
  11564 + static enumActType = {
  11565 + FLASH: 'FLASH',
  11566 + DISPLAY: 'DISPLAY',
  11567 + ROTATE: 'ROTATE'
  11568 + }
  11569 +
  11570 + static enumDisplayType = {
  11571 + SHOW: 'show',
  11572 + HIDDEN: 'hidden'
  11573 + }
  11574 +
  11575 + constructor(DispatchInstance) {
  11576 + this.DispatchInstance = DispatchInstance
  11577 + this.init()
  11578 + }
  11579 +
  11580 + init() {
  11581 + this.getEnableActList()
  11582 + this.generatorMappingRelation()
  11583 + }
  11584 +
  11585 + get graph() {
  11586 + return this.DispatchInstance.graph
  11587 + }
  11588 +
  11589 + /**
  11590 + * @description 获取已开启的数据动效
  11591 + */
  11592 + getEnableActList() {
  11593 + const { act = [] } = this.DispatchInstance.contentData
  11594 + this.enableActList = act.filter(item => item.enabled)
  11595 + }
  11596 +
  11597 + /**
  11598 + * @description 生成映射关系 && 初始化推送消息
  11599 + */
  11600 + generatorMappingRelation() {
  11601 + const tsSubCmds = []
  11602 + this.enableActList.forEach(each => {
  11603 + const { id, type, attr, deviceId } = each
  11604 +
  11605 + if (!this.actNodeMapping.has(id)) this.actNodeMapping.set(id, new Map())
  11606 + const temp = this.actNodeMapping.get(id)
  11607 + temp.set(type, each)
  11608 +
  11609 + const cmdId = this.DispatchInstance.getCmdId(id)
  11610 +
  11611 + tsSubCmds.push(this.generatorMessage(deviceId, cmdId, attr))
  11612 +
  11613 + this.subscribeEvent(cmdId, this.dispatch(type))
  11614 + })
  11615 + this.sendMsg({ tsSubCmds })
  11616 + }
  11617 +
  11618 + /**
  11619 + * @description 推送消息
  11620 + * @param msg
  11621 + */
  11622 + sendMsg(msg) {
  11623 + this.DispatchInstance.sendMessageToGetRealTimeData(msg)
  11624 + }
  11625 +
  11626 + /**
  11627 + * @description 订阅事件 绑定回调
  11628 + * @param eventName
  11629 + * @param callback
  11630 + */
  11631 + subscribeEvent(eventName, callback) {
  11632 + this.DispatchInstance.eventBus.on(eventName, callback)
  11633 + }
  11634 +
  11635 + /**
  11636 + * @description 创建消息
  11637 + * @param deviceId
  11638 + * @param cmdId
  11639 + * @param attr
  11640 + * @return {{cmdId, entityType: string, keys, scope: string, entityId}}
  11641 + */
  11642 + generatorMessage(deviceId, cmdId, attr) {
  11643 + return {
  11644 + entityType: "DEVICE",
  11645 + entityId: deviceId,
  11646 + scope: "LATEST_TELEMETRY",
  11647 + cmdId,
  11648 + keys: attr
11283 } 11649 }
  11650 + }
11284 11651
11285 - return DispatchCenter.instance 11652 + /**
  11653 + * @description 分发事件
  11654 + * @param type
  11655 + * @return Function
  11656 + */
  11657 + dispatch(type) {
  11658 + let invoke = () => {
  11659 + }
  11660 + switch (type) {
  11661 + case HandleDynamicEffect.enumActType.ROTATE:
  11662 + // invoke = this.rotate.bind(this)
  11663 + break
  11664 + case HandleDynamicEffect.enumActType.DISPLAY:
  11665 + invoke = this.display.bind(this)
  11666 + break
  11667 + case HandleDynamicEffect.enumActType.FLASH:
  11668 + break
  11669 + }
  11670 + return invoke
  11671 + }
  11672 +
  11673 + /**
  11674 + * @description 旋转
  11675 + * @param message
  11676 + * @param data
  11677 + */
  11678 + rotate(data) {
  11679 + const { subscriptionId } = data
  11680 + console.log(data)
  11681 + const node = this.getNodeByCmdId(subscriptionId)
  11682 + let deg = 0
  11683 + this.cleanSetInterval = RAFSetInterval(() => {
  11684 + // if (deg === 360) deg = 0
  11685 + // deg += 20
  11686 + // let style = node.getStyle()
  11687 + // const reg = /rotation=(-?)\w+(;?)/g
  11688 + // style = style.replace(reg, `rotation=${ deg }`)
  11689 + // // node.setStyle(style)
  11690 + // console.log(node)
  11691 + // this.graph.getModel().beginUpdate()
  11692 + // try {
  11693 + // node.setStyle(style)
  11694 + // // this.graph.refresh();
  11695 + // } finally {
  11696 + // this.graph.getModel().endUpdate()
  11697 + // }
  11698 + this.DispatchInstance.updatePage(() => {
  11699 + if (deg === 360) deg = 0
  11700 + deg += 20
  11701 + let style = node.getStyle()
  11702 + const reg = /rotation=(-?)\w+(;?)/g
  11703 + style = style.replace(reg, `rotation=${ deg }`)
  11704 + node.setStyle(style)
  11705 + this.graph.updateCellStyles(style, node)
  11706 + })
  11707 + }, 100)
  11708 + }
  11709 +
  11710 + /**
  11711 + * @description 显示与隐藏
  11712 + * @param _
  11713 + * @param message
  11714 + */
  11715 + display(message) {
  11716 + const { subscriptionId, data = {} } = message
  11717 + const { flag, condition } = this.validate(subscriptionId, HandleDynamicEffect.enumActType.DISPLAY, data)
  11718 + if (!flag) return
  11719 + const node = this.getNodeByCmdId(subscriptionId)
  11720 + let isShow = false
  11721 + if (node.visible && condition.type === HandleDynamicEffect.enumDisplayType.SHOW) {
  11722 + return
  11723 + } else if (condition.type === HandleDynamicEffect.enumDisplayType.SHOW) {
  11724 + isShow = true
  11725 + } else if (condition.type === HandleDynamicEffect.enumDisplayType.HIDDEN) {
  11726 + isShow = false
  11727 + }
  11728 + this.DispatchInstance.updatePage(() => {
  11729 + node.setVisible(isShow)
  11730 + })
  11731 + }
  11732 +
  11733 + /**
  11734 + * @description 验证是否满足条件列表中的任意一条
  11735 + * @param subscriptionId
  11736 + * @param type
  11737 + * @param value
  11738 + * @return {{flag: boolean, condition: {}}}
  11739 + */
  11740 + validate(subscriptionId, type, value) {
  11741 + const { condition = [], attr } = this.getBindData(subscriptionId, type)
  11742 + const result = { condition: {}, flag: false }
  11743 + for (let i = 0; i < condition.length; i++) {
  11744 + const { min, max } = condition[i]
  11745 + const [timespan, realValue] = value[attr][0]
  11746 + result.flag = this.isExistInArea(min, max, realValue)
  11747 + if (result.flag) {
  11748 + result.condition = condition[i]
  11749 + break
  11750 + }
  11751 + }
  11752 + return result
  11753 + }
  11754 +
  11755 + /**
  11756 + * @description 判断一个数是否在区间范围内
  11757 + * @param min 最小值
  11758 + * @param max 最大值
  11759 + * @param value 值
  11760 + * @return {boolean}
  11761 + */
  11762 + isExistInArea(min, max, value) {
  11763 + return Number(value) >= Number(min) && Number(value) <= Number(max)
  11764 + }
  11765 +
  11766 + /**
  11767 + * @description 获取绑定的数据
  11768 + * @param subscriptionId
  11769 + * @param actionType
  11770 + * @return {*}
  11771 + */
  11772 + getBindData(subscriptionId, actionType) {
  11773 + const nodeId = this.getNodeIdByCmdId(subscriptionId)
  11774 + const temp = this.actNodeMapping.get(nodeId)
  11775 + return temp.get(actionType)
  11776 + }
  11777 +
  11778 + /**
  11779 + * @description 通过cmdID获取节点id
  11780 + * @param subscriptionId
  11781 + * @return {string}
  11782 + */
  11783 + getNodeIdByCmdId(subscriptionId) {
  11784 + return this.DispatchInstance.cmdIdMapping.get(subscriptionId)
11286 } 11785 }
11287 11786
  11787 + /**
  11788 + * @description 通过cmdID 获取节点
  11789 + * @param subscriptionId
  11790 + * @return {*}
  11791 + */
  11792 + getNodeByCmdId(subscriptionId) {
  11793 + const nodeId = this.getNodeIdByCmdId(subscriptionId)
  11794 + return this.DispatchInstance.contentAllCell.find(item => item.id === nodeId)
  11795 + }
  11796 +
  11797 +}
  11798 +
  11799 +class RAFSetTimeoutImp {
  11800 + constructor(callback, time = 0) {
  11801 + this.callback = callback;
  11802 + this.time = time;
  11803 + this.now = Date.now;
  11804 + this.current = this.now();
  11805 + this.old = this.now();
  11806 + const fn = () => {
  11807 + if (this.current - this.old > this.time) {
  11808 + this.callback();
  11809 + this.old = this.now();
  11810 + this.clear();
  11811 + return;
  11812 + }
  11813 + this.current = this.now();
  11814 + this.instance = window.requestAnimationFrame(fn);
  11815 + };
  11816 + this.instance = window.requestAnimationFrame(fn);
  11817 + }
  11818 +
  11819 + clear() {
  11820 + window.cancelAnimationFrame(this.instance);
  11821 + this.instance = null;
  11822 + }
  11823 +};
  11824 +
  11825 +function RAFSetTimeout(callback, time) {
  11826 + const instance = new RAFSetTimeoutImp(callback, time);
  11827 + return instance.clear.bind(instance);
  11828 +}
  11829 +
  11830 +class RAFSetIntervalImp {
  11831 + constructor(callback, time = 0) {
  11832 + this.callback = callback;
  11833 + this.time = time;
  11834 + this.now = Date.now;
  11835 + this.current = this.now();
  11836 + this.old = this.now();
  11837 + const fn = () => {
  11838 + if (this.current - this.old > this.time) {
  11839 + this.callback();
  11840 + this.old = this.now();
  11841 + }
  11842 + this.current = this.now();
  11843 + this.instance = window.requestAnimationFrame(fn);
  11844 + };
  11845 + this.instance = window.requestAnimationFrame(fn);
  11846 + }
  11847 +
  11848 + clear() {
  11849 + window.cancelAnimationFrame(this.instance);
  11850 + }
  11851 +};
  11852 +
  11853 +function RAFSetInterval(callback, time) {
  11854 + const instance = new RAFSetIntervalImp(callback, time);
  11855 + return instance.clear.bind(instance);
11288 } 11856 }
11289 11857
  11858 +
11290 function globalInit() { 11859 function globalInit() {
11291 init() 11860 init()
11292 11861
@@ -11295,14 +11864,14 @@ function globalInit() { @@ -11295,14 +11864,14 @@ function globalInit() {
11295 } 11864 }
11296 11865
11297 function initRealTime() { 11866 function initRealTime() {
11298 - setInterval(() => { 11867 + RAFSetInterval(() => {
11299 const allTimeNode = document.querySelectorAll('.thingKit-component__real-time .real-time__now') 11868 const allTimeNode = document.querySelectorAll('.thingKit-component__real-time .real-time__now')
11300 for (const time of allTimeNode) { 11869 for (const time of allTimeNode) {
11301 const date = new Date() 11870 const date = new Date()
11302 - time.innerHTML = `${ date.getHours() }:${ date.getMinutes() < 10 ? '0' : '' }${ date.getMinutes() }:${ date.getSeconds() < 10 ? '0' : '' }${ date.getSeconds() }` 11871 + time.innerHTML = `${ date.getHours() < 10 ? '0' : '' }${ date.getHours() }:${ date.getMinutes() < 10 ? '0' : '' }${ date.getMinutes() }:${ date.getSeconds() < 10 ? '0' : '' }${ date.getSeconds() }`
11303 } 11872 }
11304 }, 1000) 11873 }, 1000)
11305 } 11874 }
11306 } 11875 }
11307 11876
11308 -globalInit() 11877 +globalInit()