setBasicParams.vue 8.82 KB
Newer Older
WuFeiyang's avatar
WuFeiyang committed
1 2
<template>
  <div>
3
    <div v-show="isShowCog" style="width:100%">
WuFeiyang's avatar
WuFeiyang committed
4
      <b-input-group size="lg" prepend="Channel Path">
WuFeiyang's avatar
WuFeiyang committed
5 6 7 8
        <b-input v-model="config.data.url.path" ></b-input>
      </b-input-group><br>
      <b-input-group size="lg" prepend="Channel TimePath">
        <b-input v-model="config.data.url.timePath" ></b-input>
9 10
        <b-input-group-addon>
          <b-button variant="primary" @click="getPathIdParams">OK<span class="glyphicon glyphicon-save"></span></b-button>
WuFeiyang's avatar
WuFeiyang committed
11
          <b-button variant="info" @click="pathPoke">poke</b-button>
12 13
        </b-input-group-addon>
      </b-input-group>
WuFeiyang's avatar
WuFeiyang committed
14 15 16 17 18 19 20 21 22 23 24 25 26
    </div>
    <WidgetParams ref="WidgetParams" v-show="isShowLoad" action="get" @updataVariables="viewLoad"></WidgetParams>
  </div>
</template>

<script lang="ts">
import { Component, Prop, Vue, Watch } from "vue-property-decorator";
import axios from "axios";
import Plotly from "plotly.js";
import global_ from '@/components/Common/global.vue';
import { WidgetConfig } from "@/models/WidgetConfig";
import { UpdatePayload } from "@/models/UpdatePayload";
import PathProcessor from "@/models/PathProcessor";
WuFeiyang's avatar
WuFeiyang committed
27
import { forEach, indexOf } from "typescript-collections/dist/lib/arrays";
WuFeiyang's avatar
WuFeiyang committed
28 29
import { map } from "d3";
import WidgetParams from "@/components/Common/WidgetParams.vue";
30
import StrMapObjChange from "@/models/StrMapObjChange";
WuFeiyang's avatar
WuFeiyang committed
31 32 33 34 35 36 37 38 39 40 41 42 43

@Component({
    components:{
        WidgetParams
    }
})
export default class setBasicParams extends Vue {
  @Prop() wave!: any;
  pathProcessor = new PathProcessor();
  isShowLoad: boolean = false;
  isShowCog: boolean = false;
  pathId!: string;
  userInputData = new Map<string, string>();
WuFeiyang's avatar
WuFeiyang committed
44
  tempUserInputData = new Map<string, string>();
45
  strMapObjChange = new StrMapObjChange();
WuFeiyang's avatar
WuFeiyang committed
46 47 48
  config: WidgetConfig = {
    WidgetComponentName: "WaveView",
    data: {
WuFeiyang's avatar
WuFeiyang committed
49 50 51 52
      url: {
        path:'',
        timePath:''
      },
WuFeiyang's avatar
WuFeiyang committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
      userInputData: "",
      position: {
        x1: "",
        x2: "",
        y1: "",
        y2: ""
      }
    }
  };
  getConfig!: WidgetConfig;
  tempUrl: string = "";
  temp: any = {};

  created() {
    this.config.data.userInputData = this.userInputData;
WuFeiyang's avatar
WuFeiyang committed
68 69
    // this.getConfig = this.config;
    // this.updateConfig();
WuFeiyang's avatar
WuFeiyang committed
70
  }
71 72 73 74 75 76 77 78
  refresh(){
    var Args: UpdatePayload = {
      action: "get",
      variables: (this.$refs.WidgetParams as WidgetParams).getVariableValues(),
      target: ["self"]
    };
    this.viewLoad(Args);
  }
WuFeiyang's avatar
WuFeiyang committed
79 80 81
  pathPoke(){
    this.$emit("pathPoke");
  }
82
  setConfig(config: WidgetConfig) {
WuFeiyang's avatar
WuFeiyang committed
83 84 85
    (this.$refs.WidgetParams as WidgetParams).setVariableList(
      this.pathProcessor.extractVarFromPath(config.data.url.path)
    );
86 87 88 89 90 91 92 93 94
    (this.$refs.WidgetParams as WidgetParams).setVariableInput(config.data.userInputData);
    this.config = config;
    console.log(this.config);
    this.refresh();
  }
  updateUserInputData(){
    this.config.data.userInputData =this.strMapObjChange.strMapToObj((this.$refs.WidgetParams as WidgetParams).getVariableValues());
    this.updateConfig();
  }
WuFeiyang's avatar
WuFeiyang committed
95 96 97 98 99
  updateConfig() {
    this.getConfig = this.config;
    this.$emit("updateConfig", this.getConfig);
  }
  getPathIdParams() {
WuFeiyang's avatar
WuFeiyang committed
100
    if (this.tempUrl != this.config.data.url.path) {
WuFeiyang's avatar
WuFeiyang committed
101
      this.config.data.userInputData.clear();
WuFeiyang's avatar
WuFeiyang committed
102
      this.tempUrl = this.config.data.url.path;
WuFeiyang's avatar
WuFeiyang committed
103 104
    }
    this.updateConfig();
WuFeiyang's avatar
WuFeiyang committed
105
    var url = this.config.data.url.path;
WuFeiyang's avatar
WuFeiyang committed
106 107 108 109 110 111 112
    (this.$refs.WidgetParams as WidgetParams).setVariableList(
      this.pathProcessor.extractVarFromPath(url)
    );
    this.isShowLoad = true;
    this.isShowCog = false;
  }
  showPathIdConfig() {
113 114 115 116 117 118
    if(this.isShowCog || this.isShowLoad){
      this.isShowCog = !this.isShowCog;
      this.isShowLoad = !this.isShowLoad;
    }else{
      this.isShowCog = !this.isShowCog;
    }
WuFeiyang's avatar
WuFeiyang committed
119
  }
120
  async viewLoad(Args: UpdatePayload) {
WuFeiyang's avatar
WuFeiyang committed
121 122 123 124
    this.getConfig.data.position.x1 = "";
    this.getConfig.data.position.x2 = "";
    this.getConfig.data.position.y1 = "";
    this.getConfig.data.position.y2 = "";
125
    this.config.data.userInputData = Args.variables;
WuFeiyang's avatar
WuFeiyang committed
126
    this.tempUserInputData = this.config.data.userInputData;
WuFeiyang's avatar
WuFeiyang committed
127 128
    var url = this.pathProcessor.FillPathWithVar(
      this.config.data.userInputData,
WuFeiyang's avatar
WuFeiyang committed
129 130 131 132 133
      this.config.data.url.path
    );
    var timeUrl = this.pathProcessor.FillPathWithVar(
      this.config.data.userInputData,
      this.config.data.url.timePath
WuFeiyang's avatar
WuFeiyang committed
134
    );
WuFeiyang's avatar
WuFeiyang committed
135 136 137
    var first = url.indexOf("/");
    var second = url.indexOf("/", first+1);
    var third = url.indexOf("/", second+1)
WuFeiyang's avatar
WuFeiyang committed
138 139
    var fouth = url.indexOf("/", third+1)
    this.pathId = url.slice(third+1, fouth);
WuFeiyang's avatar
WuFeiyang committed
140
    var thingPath = url.slice(0, url.indexOf('/', 2))
WuFeiyang's avatar
WuFeiyang committed
141
    var path = this.pathId;
WuFeiyang's avatar
WuFeiyang committed
142 143 144 145 146
    var dealPath = {
      thingPath:thingPath,
      path:path
    }
    this.$emit("getPathId", dealPath);
WuFeiyang's avatar
WuFeiyang committed
147 148
    await this.getData(url);
    await this.getDataTimeAxis(timeUrl);
WuFeiyang's avatar
WuFeiyang committed
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
    var myPlot = this.wave;
    var data_initial = [
      {
        x: this.temp.dataTimeAxis,
        y: this.temp.data
      }
    ];
    var layout_initial = {
      xaxis: {
        range: [this.config.data.position.x1, this.config.data.position.x2]
      },
      yaxis: {
        range: [this.config.data.position.y1, this.config.data.position.y2]
      }
    };
    this.createChannelChart(myPlot, data_initial, layout_initial);
    this.updateConfig();

    var requiredDotNum = this.temp.dataTimeAxis.length;
    var reAskDataScale = 0.8;
    var zoom_xmax = this.temp.dataTimeAxis[this.temp.dataTimeAxis.length - 1];
    var zoom_xmin = this.temp.dataTimeAxis[0];
    var nowRange = zoom_xmax - zoom_xmin;
    var nowDotNum = this.temp.dataTimeAxis.length;
    var getData = this.getData;
    var getDataTimeAxis = this.getDataTimeAxis;
    var createChannelChart = this.createChannelChart;
    var temp = this.temp;
    var getConfig = this.getConfig;
    var updateConfig = this.updateConfig;
WuFeiyang's avatar
WuFeiyang committed
179 180 181
    var pathProcessor = this.pathProcessor
    var config = this.config;
    var tempUserInputData = this.tempUserInputData;
WuFeiyang's avatar
WuFeiyang committed
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201

    zoom();
    function zoom() {
      myPlot.on("plotly_relayout", function(data: any) {
        if (!data["xaxis.autorange"]) {
          var nowZoom_xmin = data["xaxis.range[0]"];
          var nowZoom_xmax = data["xaxis.range[1]"];
          var x_range = nowZoom_xmax - nowZoom_xmin;
          var newZoomedDotNum = Math.round((x_range * nowDotNum) / nowRange);
          nowRange = x_range;
          nowDotNum = newZoomedDotNum;
          if (
            nowDotNum < requiredDotNum * 0.5 ||
            nowZoom_xmin < zoom_xmin ||
            nowZoom_xmax > zoom_xmax
          ) {
            zoom_xmax = nowZoom_xmax;
            zoom_xmin = nowZoom_xmin;
            var zoom_ymin = data["yaxis.range[0]"];
            var zoom_ymax = data["yaxis.range[1]"];
WuFeiyang's avatar
WuFeiyang committed
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
            var params = [zoom_xmin * reAskDataScale, zoom_xmax / reAskDataScale, requiredDotNum]
            var index = 0;
            for(var key of tempUserInputData.keys()){
              tempUserInputData.set(key, params[index]);
              index++;
            }
            var url = pathProcessor.FillPathWithVar(
              tempUserInputData,
              config.data.url.path
            );
            var timeUrl = pathProcessor.FillPathWithVar(
              tempUserInputData,
              config.data.url.timePath
            );
            console.log(url);
            console.log(timeUrl);
WuFeiyang's avatar
WuFeiyang committed
218 219 220 221 222
            getConfig.data.position.x1 = zoom_xmin;
            getConfig.data.position.x2 = zoom_xmax;
            getConfig.data.position.y1 = zoom_ymin;
            getConfig.data.position.y2 = zoom_ymax;
            updateConfig();
WuFeiyang's avatar
WuFeiyang committed
223 224
            // getData(url);
            // getDataTimeAxis(timeUrl);
WuFeiyang's avatar
WuFeiyang committed
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
            var data_update = [
              {
                x: temp.dataTimeAxis,
                y: temp.data
              }
            ];
            var layout_update = {
              xaxis: {
                range: [zoom_xmin, zoom_xmax]
              },
              yaxis: {
                range: [zoom_ymin, zoom_ymax]
              }
            };
            createChannelChart(myPlot, data_update, layout_update);
            zoom();
          }
        }
      });
      myPlot.on("plotly_doubleclick", function() {
        nowRange = temp.dataTimeAxis[temp.dataTimeAxis.length - 1];
        nowDotNum = temp.dataTimeAxis.length;
        createChannelChart(myPlot, data_initial);
        zoom();
      });
    }
  }
  createChannelChart(myPlot: any, data_update: any, data_layout: any = {}) {
    data_layout.margin = { t: 20 };

    var config = {
      modeBarButtonsToRemove: ["resetScale2d"],
      displaylogo: false
    };

WuFeiyang's avatar
WuFeiyang committed
260
    Plotly.newPlot(myPlot, data_update, data_layout, config);
WuFeiyang's avatar
WuFeiyang committed
261
  }
WuFeiyang's avatar
WuFeiyang committed
262
  async getData(url: any) {
WuFeiyang's avatar
WuFeiyang committed
263
    var apiLoad = url;
WuFeiyang's avatar
WuFeiyang committed
264
    console.log(apiLoad);//改
WuFeiyang's avatar
WuFeiyang committed
265
    await axios.get(apiLoad).then(response => {
WuFeiyang's avatar
WuFeiyang committed
266
      this.temp.data = response.data.CFET2CORE_SAMPLE_VAL;
WuFeiyang's avatar
WuFeiyang committed
267 268
    });
  }
WuFeiyang's avatar
WuFeiyang committed
269
  async getDataTimeAxis(url: any) {
WuFeiyang's avatar
WuFeiyang committed
270
    var apiLoad = url;
WuFeiyang's avatar
WuFeiyang committed
271
    await axios.get(apiLoad).then(response => {
WuFeiyang's avatar
WuFeiyang committed
272
      this.temp.dataTimeAxis = response.data.CFET2CORE_SAMPLE_VAL;
WuFeiyang's avatar
WuFeiyang committed
273 274 275 276 277 278
    });
  }
}
</script>
<style scoped>
</style>