8 changed files with 513 additions and 31 deletions
			
			
		| 
		 After Width: | Height: | Size: 4.4 KiB  | 
| 
		 After Width: | Height: | Size: 1.0 KiB  | 
@ -0,0 +1,328 @@ | 
				
			|||||
 | 
					<template> | 
				
			||||
 | 
					  <div class="HomeFrameControl"> | 
				
			||||
 | 
					    <ElPopover trigger="manual" :value="activeIcon === 'FrameControl'" :visibleArrow="false" placement="left" | 
				
			||||
 | 
					      popper-class="global-input-search-popover"> | 
				
			||||
 | 
					      <Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference" | 
				
			||||
 | 
					        @click.native="handleClick('FrameControl')"> | 
				
			||||
 | 
					        <img src="@screen/images/home-FrameControl/FrameControl.svg" /> | 
				
			||||
 | 
					      </Button> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					      <div class="body"> | 
				
			||||
 | 
					        <div class="title">批量控制</div> | 
				
			||||
 | 
					        <Form labelWidth="90px" column="2" class="form" ref="FormConfigRef" :formList="formList" /> | 
				
			||||
 | 
					        <div class="footer"> | 
				
			||||
 | 
					          <Button style="background-color: rgba(0, 179, 204, 0.3)" @click.native="handleResetForm"> | 
				
			||||
 | 
					            重置 | 
				
			||||
 | 
					          </Button> | 
				
			||||
 | 
					          <Button @click.native="handleSearch"> 搜索 </Button> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					      </div> | 
				
			||||
 | 
					    </ElPopover> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  </div> | 
				
			||||
 | 
					</template> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<script> | 
				
			||||
 | 
					import Button from "@screen/components/Buttons/Button.vue"; | 
				
			||||
 | 
					import Form from "@screen/components/FormConfig"; | 
				
			||||
 | 
					import * as PresetFormItems from "@screen/common/PresetFormItems.js"; | 
				
			||||
 | 
					import { merge, cloneDeep } from "lodash"; | 
				
			||||
 | 
					import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js" | 
				
			||||
 | 
					import { ChildTypes } from "@screen/utils/enum.js" | 
				
			||||
 | 
					import { getDeviceList } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"; | 
				
			||||
 | 
					import { delay } from "@screen/utils/common"; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import { DeviceForMap } from "@screen/pages/Home/components/RoadAndEvents/utils/buttonEvent" | 
				
			||||
 | 
					const DeviceTopics = {} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Object.keys(DeviceForMap).forEach(DeviceLabel => { | 
				
			||||
 | 
					  DeviceTopics[DeviceForMap[DeviceLabel].deviceType] = DeviceLabel; | 
				
			||||
 | 
					}); | 
				
			||||
 | 
					async function setDeviceOptions(config, filterData, formList) { | 
				
			||||
 | 
					  const data = await getDeviceList(config.deviceType, filterData).then(async (data) => { | 
				
			||||
 | 
					    await delay(600); | 
				
			||||
 | 
					    return data; | 
				
			||||
 | 
					  }); | 
				
			||||
 | 
					  formList[4].options.options = data.map(item => { | 
				
			||||
 | 
					    return { label: `${item.deviceName}${item.stakeMark}`, value: JSON.stringify({ id: item.id, iotDeviceId: item.iotDeviceId }) } | 
				
			||||
 | 
					  }) | 
				
			||||
 | 
					}; | 
				
			||||
 | 
					function changeHandle(data, formList) { | 
				
			||||
 | 
					  const filterData = {}; | 
				
			||||
 | 
					  data.direction && (filterData.direction = data.direction); | 
				
			||||
 | 
					  data.startStakeMark && (filterData.startStakeMark = data.startStakeMark); | 
				
			||||
 | 
					  data.endStakeMark && (filterData.endStakeMark = data.endStakeMark); | 
				
			||||
 | 
					  setDeviceOptions({ deviceType: data.deviceType }, filterData, formList); | 
				
			||||
 | 
					} | 
				
			||||
 | 
					export default { | 
				
			||||
 | 
					  name: "HomeFrameControl",//设备控制 | 
				
			||||
 | 
					  components: { | 
				
			||||
 | 
					    Button, | 
				
			||||
 | 
					    Form, | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  data() { | 
				
			||||
 | 
					    return { | 
				
			||||
 | 
					      activeIcon: null, | 
				
			||||
 | 
					      formList: [ | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					          label: "设备类型:", | 
				
			||||
 | 
					          key: "deviceType", | 
				
			||||
 | 
					          type: "select", | 
				
			||||
 | 
					          options: { | 
				
			||||
 | 
					            clearable: true, | 
				
			||||
 | 
					            options: [], | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          ons: { //on监听 element事件 | 
				
			||||
 | 
					            change(value, ...args) { | 
				
			||||
 | 
					              const { data, formList } = args.slice(-1)[0]; //data 为数据  formList为传入的配置项 | 
				
			||||
 | 
					              data.deviceType && changeHandle(data, formList); | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					          label: "设备方向:", | 
				
			||||
 | 
					          key: "direction", | 
				
			||||
 | 
					          type: "select", | 
				
			||||
 | 
					          options: { | 
				
			||||
 | 
					            options: [ | 
				
			||||
 | 
					              { key: "1", label: "济南方向" }, | 
				
			||||
 | 
					              { key: "3", label: "菏泽方向" }, | 
				
			||||
 | 
					              { key: "2", label: "双向" }, | 
				
			||||
 | 
					            ], | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          ons: { //on监听 element事件 | 
				
			||||
 | 
					            change(value, ...args) { | 
				
			||||
 | 
					              const { data, formList } = args.slice(-1)[0]; //data 为数据  formList为传入的配置项 | 
				
			||||
 | 
					              data.deviceType && changeHandle(data, formList); | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        merge({}, PresetFormItems.startStation, | 
				
			||||
 | 
					          { | 
				
			||||
 | 
					            options: { | 
				
			||||
 | 
					              options: [ | 
				
			||||
 | 
					                { | 
				
			||||
 | 
					                  prefix: { | 
				
			||||
 | 
					                    text: "K", | 
				
			||||
 | 
					                    style: { | 
				
			||||
 | 
					                      color: "#3DE8FF", | 
				
			||||
 | 
					                    }, | 
				
			||||
 | 
					                  }, | 
				
			||||
 | 
					                  key: "startStakeMark[0]", | 
				
			||||
 | 
					                  default: "55", | 
				
			||||
 | 
					                  rules: [ | 
				
			||||
 | 
					                    { | 
				
			||||
 | 
					                      message: "请补全桩号", | 
				
			||||
 | 
					                      callback(value, data) { | 
				
			||||
 | 
					                        console.log(value, data.startStakeMark); | 
				
			||||
 | 
					                        if ( | 
				
			||||
 | 
					                          !((value + "")?.trim() && (data.startStakeMark[1] + "")?.trim()) | 
				
			||||
 | 
					                        ) | 
				
			||||
 | 
					                          return false; | 
				
			||||
 | 
					                        else return true; | 
				
			||||
 | 
					                      }, | 
				
			||||
 | 
					                    }, | 
				
			||||
 | 
					                  ], | 
				
			||||
 | 
					                  ons: { //on监听 element事件 | 
				
			||||
 | 
					                    change(value, ...args) { | 
				
			||||
 | 
					                      const { data, formList } = args.slice(-1)[0]; //data 为数据  formList为传入的配置项 | 
				
			||||
 | 
					                      data.deviceType && changeHandle(data, formList); | 
				
			||||
 | 
					                    } | 
				
			||||
 | 
					                  }, | 
				
			||||
 | 
					                }, | 
				
			||||
 | 
					                { | 
				
			||||
 | 
					                  prefix: { | 
				
			||||
 | 
					                    text: "+", | 
				
			||||
 | 
					                    style: { | 
				
			||||
 | 
					                      color: "#3DE8FF", | 
				
			||||
 | 
					                    }, | 
				
			||||
 | 
					                  }, | 
				
			||||
 | 
					                  default: "378", | 
				
			||||
 | 
					                  key: "startStakeMark[1]", | 
				
			||||
 | 
					                  ons: { //on监听 element事件 | 
				
			||||
 | 
					                    change(value, ...args) { | 
				
			||||
 | 
					                      const { data, formList } = args.slice(-1)[0]; //data 为数据  formList为传入的配置项 | 
				
			||||
 | 
					                      data.deviceType && changeHandle(data, formList); | 
				
			||||
 | 
					                    } | 
				
			||||
 | 
					                  }, | 
				
			||||
 | 
					                }, | 
				
			||||
 | 
					              ], | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          }), | 
				
			||||
 | 
					        merge({}, PresetFormItems.endStation, { | 
				
			||||
 | 
					          options: { | 
				
			||||
 | 
					            options: [ | 
				
			||||
 | 
					              { | 
				
			||||
 | 
					                prefix: { | 
				
			||||
 | 
					                  text: "K", | 
				
			||||
 | 
					                  style: { | 
				
			||||
 | 
					                    color: "#3DE8FF", | 
				
			||||
 | 
					                  }, | 
				
			||||
 | 
					                }, | 
				
			||||
 | 
					                key: "endStakeMark[0]", | 
				
			||||
 | 
					                default: "208", | 
				
			||||
 | 
					                rules: [ | 
				
			||||
 | 
					                  { | 
				
			||||
 | 
					                    message: "请补全桩号", | 
				
			||||
 | 
					                    callback(value, data) { | 
				
			||||
 | 
					                      if ( | 
				
			||||
 | 
					                        !((value + "")?.trim() && (data.endStakeMark[1] + "")?.trim()) | 
				
			||||
 | 
					                      ) | 
				
			||||
 | 
					                        return false; | 
				
			||||
 | 
					                      else return true; | 
				
			||||
 | 
					                    }, | 
				
			||||
 | 
					                  }, | 
				
			||||
 | 
					                ], | 
				
			||||
 | 
					                ons: { //on监听 element事件 | 
				
			||||
 | 
					                  change(value, ...args) { | 
				
			||||
 | 
					                    const { data, formList } = args.slice(-1)[0]; //data 为数据  formList为传入的配置项 | 
				
			||||
 | 
					                    data.deviceType && changeHandle(data, formList); | 
				
			||||
 | 
					                  } | 
				
			||||
 | 
					                }, | 
				
			||||
 | 
					              }, | 
				
			||||
 | 
					              { | 
				
			||||
 | 
					                prefix: { | 
				
			||||
 | 
					                  text: "+", | 
				
			||||
 | 
					                  style: { | 
				
			||||
 | 
					                    color: "#3DE8FF", | 
				
			||||
 | 
					                  }, | 
				
			||||
 | 
					                }, | 
				
			||||
 | 
					                default: "153", | 
				
			||||
 | 
					                key: "endStakeMark[1]", | 
				
			||||
 | 
					                ons: { //on监听 element事件 | 
				
			||||
 | 
					                  change(value, ...args) { | 
				
			||||
 | 
					                    const { data, formList } = args.slice(-1)[0]; //data 为数据  formList为传入的配置项 | 
				
			||||
 | 
					                    data.deviceType && changeHandle(data, formList); | 
				
			||||
 | 
					                  } | 
				
			||||
 | 
					                }, | 
				
			||||
 | 
					              }, | 
				
			||||
 | 
					            ], | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }), | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					          label: "设备名称:", | 
				
			||||
 | 
					          key: "childType", | 
				
			||||
 | 
					          type: "select", | 
				
			||||
 | 
					          isAlone: true, | 
				
			||||
 | 
					          options: { | 
				
			||||
 | 
					            clearable: true, | 
				
			||||
 | 
					            options: [], | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          visible: data => { | 
				
			||||
 | 
					            return true; | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					          label: "控制操作:", | 
				
			||||
 | 
					          key: "controlOp", | 
				
			||||
 | 
					          type: "select", | 
				
			||||
 | 
					          default: null, | 
				
			||||
 | 
					          options: { | 
				
			||||
 | 
					            clearable: true, | 
				
			||||
 | 
					            options: [{ | 
				
			||||
 | 
					              label: "在线", | 
				
			||||
 | 
					              value: "1" | 
				
			||||
 | 
					            }, { | 
				
			||||
 | 
					              label: "离线", | 
				
			||||
 | 
					              value: "0" | 
				
			||||
 | 
					            }] | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          visible: data => { | 
				
			||||
 | 
					            // if (find(this.activeDeviceTypes, (type => type.match("路测设备_")))) | 
				
			||||
 | 
					            //   return true; | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					      ] | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  inject: ["activeDeviceTypes"], | 
				
			||||
 | 
					  watch: { | 
				
			||||
 | 
					    activeDeviceTypes: { | 
				
			||||
 | 
					      handler(val) { | 
				
			||||
 | 
					        const activeTopicOptions = [] | 
				
			||||
 | 
					        this.activeDeviceTypes.filter(activeDeviceType => { | 
				
			||||
 | 
					          const match = activeDeviceType.match(/路测设备_(\d+)/); | 
				
			||||
 | 
					          if (match) { | 
				
			||||
 | 
					            const deviceType = match[1]; | 
				
			||||
 | 
					            activeTopicOptions.push({ label: DeviceTopics[deviceType], value: deviceType }); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					        this.formList[0].options.options = activeTopicOptions; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      immediate: true, | 
				
			||||
 | 
					      deep: true | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  methods: { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    handleClick(type) { | 
				
			||||
 | 
					      console.log("type: ", type); | 
				
			||||
 | 
					      this.activeIcon = this.activeIcon === type ? null : type; | 
				
			||||
 | 
					      console.log("this.activeIcon", this.activeIcon); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    filterEnd(data) { | 
				
			||||
 | 
					      this.activeIcon = null; | 
				
			||||
 | 
					      // this.filterData = data; | 
				
			||||
 | 
					      this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					}; | 
				
			||||
 | 
					</script> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<style lang="scss"> | 
				
			||||
 | 
					div.el-popper.global-input-search-popover { | 
				
			||||
 | 
					  background: rgba(6, 66, 88, 0.8); | 
				
			||||
 | 
					  border: 1px solid rgba(42, 217, 253, 0.6); | 
				
			||||
 | 
					  position: relative; | 
				
			||||
 | 
					  padding-top: 36px; | 
				
			||||
 | 
					  transform: translateY(24px); | 
				
			||||
 | 
					  // margin-top: 6vh; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  .body { | 
				
			||||
 | 
					    .title { | 
				
			||||
 | 
					      background: linear-gradient(90deg, | 
				
			||||
 | 
					          #237e9b 0%, | 
				
			||||
 | 
					          rgba(23, 145, 184, 0) 100%); | 
				
			||||
 | 
					      padding: 3px 9px; | 
				
			||||
 | 
					      position: absolute; | 
				
			||||
 | 
					      top: 0; | 
				
			||||
 | 
					      left: 0; | 
				
			||||
 | 
					      width: 100%; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    .close { | 
				
			||||
 | 
					      padding: 3px 9px; | 
				
			||||
 | 
					      cursor: pointer; | 
				
			||||
 | 
					      position: absolute; | 
				
			||||
 | 
					      top: 0; | 
				
			||||
 | 
					      right: 0; | 
				
			||||
 | 
					      width: fit-content; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					</style> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<style lang="scss" scoped> | 
				
			||||
 | 
					.image { | 
				
			||||
 | 
					  width: 50vw; | 
				
			||||
 | 
					  height: 65vh; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.HomeFrameControl { | 
				
			||||
 | 
					  .btn { | 
				
			||||
 | 
					    padding: 9px; | 
				
			||||
 | 
					    background: linear-gradient(180deg, #152e3c 0%, #163a45 100%); | 
				
			||||
 | 
					    border-radius: 4px; | 
				
			||||
 | 
					    overflow: hidden; | 
				
			||||
 | 
					    height: unset; | 
				
			||||
 | 
					    border: 1px solid rgba(40, 144, 167, 1); | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  .btn-active { | 
				
			||||
 | 
					    background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					</style> | 
				
			||||
@ -0,0 +1,97 @@ | 
				
			|||||
 | 
					<template> | 
				
			||||
 | 
					  <div class="HomeVectorControl"> | 
				
			||||
 | 
					    <Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference" | 
				
			||||
 | 
					      @click.native="handleClick('VectorControl')"> | 
				
			||||
 | 
					      <img src="@screen/images/home-VectorControl/VectorControl.svg" /> | 
				
			||||
 | 
					    </Button> | 
				
			||||
 | 
					  </div> | 
				
			||||
 | 
					</template> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<script> | 
				
			||||
 | 
					import Button from "@screen/components/Buttons/Button.vue"; | 
				
			||||
 | 
					import Form from "@screen/components/FormConfig"; | 
				
			||||
 | 
					import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js"; | 
				
			||||
 | 
					import { merge, cloneDeep } from "lodash"; | 
				
			||||
 | 
					import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js" | 
				
			||||
 | 
					export default { | 
				
			||||
 | 
					  name: "HomeVectorControl", | 
				
			||||
 | 
					  components: { | 
				
			||||
 | 
					    Button, | 
				
			||||
 | 
					    Form, | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  data() { | 
				
			||||
 | 
					    return { | 
				
			||||
 | 
					      activeIcon: null, | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  methods: { | 
				
			||||
 | 
					    handleClick(type) { | 
				
			||||
 | 
					      this.activeIcon = this.activeIcon === type ? null : type; | 
				
			||||
 | 
					      if (this.activeIcon) window.showStakeText = true; | 
				
			||||
 | 
					      else window.showStakeText = false; | 
				
			||||
 | 
					      markerClusterIns.setData(); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    filterEnd(data) { | 
				
			||||
 | 
					      this.activeIcon = null; | 
				
			||||
 | 
					      // this.filterData = data; | 
				
			||||
 | 
					      this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					}; | 
				
			||||
 | 
					</script> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<style lang="scss"> | 
				
			||||
 | 
					div.el-popper.global-input-search-popover { | 
				
			||||
 | 
					  background: rgba(6, 66, 88, 0.8); | 
				
			||||
 | 
					  border: 1px solid rgba(42, 217, 253, 0.6); | 
				
			||||
 | 
					  position: relative; | 
				
			||||
 | 
					  padding-top: 36px; | 
				
			||||
 | 
					  transform: translateY(24px); | 
				
			||||
 | 
					  // margin-top: 6vh; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  .body { | 
				
			||||
 | 
					    .title { | 
				
			||||
 | 
					      background: linear-gradient(90deg, | 
				
			||||
 | 
					          #237e9b 0%, | 
				
			||||
 | 
					          rgba(23, 145, 184, 0) 100%); | 
				
			||||
 | 
					      padding: 3px 9px; | 
				
			||||
 | 
					      position: absolute; | 
				
			||||
 | 
					      top: 0; | 
				
			||||
 | 
					      left: 0; | 
				
			||||
 | 
					      width: 100%; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    .close { | 
				
			||||
 | 
					      padding: 3px 9px; | 
				
			||||
 | 
					      cursor: pointer; | 
				
			||||
 | 
					      position: absolute; | 
				
			||||
 | 
					      top: 0; | 
				
			||||
 | 
					      right: 0; | 
				
			||||
 | 
					      width: fit-content; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					</style> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<style lang="scss" scoped> | 
				
			||||
 | 
					.image { | 
				
			||||
 | 
					  width: 50vw; | 
				
			||||
 | 
					  height: 65vh; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.HomeVectorControl { | 
				
			||||
 | 
					  .btn { | 
				
			||||
 | 
					    padding: 9px; | 
				
			||||
 | 
					    background: linear-gradient(180deg, #152e3c 0%, #163a45 100%); | 
				
			||||
 | 
					    border-radius: 4px; | 
				
			||||
 | 
					    overflow: hidden; | 
				
			||||
 | 
					    height: unset; | 
				
			||||
 | 
					    border: 1px solid rgba(40, 144, 167, 1); | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					  .btn-active { | 
				
			||||
 | 
					    background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					</style> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue