index.vue 20.1 KB
Newer Older
何虹's avatar
何虹 committed
1 2

<template>
何虹's avatar
何虹 committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
  <div
    :id='elId'
    class="selectBoxPlus"
    style='width:100%;height:100%;'
  >
    <div
      class="contarnBox"
      style='width:100%;height:100%;'
    >
      <div
        class="selectTitle"
        v-show="configData.title"
      >{{configData.title}}</div>
      <div
        class="selectCurr"
        style='width:100%;height:100%;'
      >
        <el-select
          :allow-create='configData.allowCreate'
          :default-first-option='configData.defaultFirstOption'
          style="width:100%"
          :class="{'noneStyle':isReadOnly1,'noneStyle2':isReadOnly2}"
          :size='configData.size'
          @clear="clear_select"
          :collapse-tags="configData.collapse_tags"
          :multiple="configData.multiple"
          :disabled="isReadOnly"
          :clearable="configData.clearable"
          ref="select_demo"
          @change="change"
          @focus="select_focus"
          v-model="value_inner"
          :filterable="configData.filterable"
          :remote="configData.remote"
          :remote-method="remoteMethod_"
          :placeholder="configData.placeholder"
        >
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          ></el-option>
        </el-select>
        <el-tooltip
          v-if='linkBtnUiVis'
          el-tooltip
          content="主表"
          placement="bottom"
          effect="light"
        >
          <el-button
            size="mini"
            @click='jumpSelect'
            circle
            icon="el-icon-s-promotion"
          ></el-button>
        </el-tooltip>
何虹's avatar
何虹 committed
61 62
      </div>
    </div>
何虹's avatar
何虹 committed
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
    <jsoneditor
      v-model='jsoneditorVisible'
      :elInfo='elInfo'
      :jsoneditorData='editData'
      :jsoneditorCloseAfter='jsoneditorCloseAfter'
      :jsoneditorOpenAfter='jsoneditorOpenAfter'
    >
    </jsoneditor>
    <dialogIframe
      @closeDialog='closeDialog'
      v-if='linkBtnUiVis'
      @linkBtnUiBack='linkBtnUiBack'
      v-model="dialogIframeVisible"
      :src='dialogIframeSrc'
    ></dialogIframe>
  </div>
何虹's avatar
何虹 committed
79 80 81
</template>

<script>
何虹's avatar
何虹 committed
82 83 84 85 86 87 88
import uuidv1 from "uuid/v1";
import jsoneditor from "../common/jsoneditor";
import mockData from "../common/initDbConfigDataJson";
import ucComponent from "../ucClass/uc_component";
import _ from "lodash";
import commonUtility from "../funTools/commonUtility";
import dialogIframe from "../common/dialogTemplate/dialogIframe";
何虹's avatar
何虹 committed
89 90
export default {
  mixins: [ucComponent],
何虹's avatar
何虹 committed
91
  name: "hsSelectPlus",
何虹's avatar
何虹 committed
92
  components: {
何虹's avatar
何虹 committed
93 94
    jsoneditor,
    dialogIframe
何虹's avatar
何虹 committed
95 96
  },
  props: {
何虹's avatar
何虹 committed
97 98
    requestMethod: {
      type: Function
何虹's avatar
何虹 committed
99 100 101 102 103
    },
    containerType: {},
    elInfo: {
      type: Object,
      default() {
何虹's avatar
何虹 committed
104
        return {};
何虹's avatar
何虹 committed
105 106 107 108 109
      }
    },
    allSourceData: {
      type: Object,
      default() {
何虹's avatar
何虹 committed
110
        return {};
何虹's avatar
何虹 committed
111 112 113 114 115
      }
    },
    jsoneditorCloseAfter: {
      type: Function,
      default() {
何虹's avatar
何虹 committed
116
        return () => {};
何虹's avatar
何虹 committed
117 118 119 120 121
      }
    },
    jsoneditorOpenAfter: {
      type: Function,
      default() {
何虹's avatar
何虹 committed
122
        return () => {};
何虹's avatar
何虹 committed
123 124
      }
    },
何虹's avatar
何虹 committed
125
    value: "",
何虹's avatar
何虹 committed
126 127
    writeBackObject: {
      default() {
何虹's avatar
何虹 committed
128
        return {};
何虹's avatar
何虹 committed
129 130 131 132 133 134 135 136 137
      }
    },
    readonly: {
      default: false
    }
  },
  data() {
    return {
      options: [],
何虹's avatar
何虹 committed
138
      value_inner: this.multiple ? [] : "",
何虹's avatar
何虹 committed
139 140 141 142
      filterable: false,
      remote: false,
      // url_static: 'commonUtilAPI/ref/items/',
      // url_dynamic: 'commonUtilAPI/ref/table/',
何虹's avatar
何虹 committed
143 144 145 146 147
      url_static: "commonUtilAPI/",
      url_dynamic: "commonUtilAPI/ref/table/",
      url_ipCommonAPI: "ipCommonAPI/",
      real_url: "",
      elId: "",
何虹's avatar
何虹 committed
148 149 150 151 152
      chart: null,
      jsoneditorVisible: false, // 是否显示动态配置的弹框
      editData: {
        config: {},
        sourceData: [],
何虹's avatar
何虹 committed
153
        sql: ""
何虹's avatar
何虹 committed
154 155
      },
      configData: {
何虹's avatar
何虹 committed
156
        url: "",
何虹's avatar
何虹 committed
157
        ref: {
何虹's avatar
何虹 committed
158 159 160 161 162
          const_id: "",
          table_name: "",
          columns: "",
          remote_condition: "",
          displayfield: "", // 默认值
何虹's avatar
何虹 committed
163 164 165 166 167
          writebackfield: []
        },
        multiple: false,
        collapse_tags: true,
        disabled: false,
何虹's avatar
何虹 committed
168
        size: "mini",
何虹's avatar
何虹 committed
169
        clearable: true,
何虹's avatar
何虹 committed
170 171 172
        title: "",
        value: "",
        label: "",
何虹's avatar
何虹 committed
173
        parms: {},
何虹's avatar
何虹 committed
174
        placeholder: "请选择",
何虹's avatar
何虹 committed
175 176 177 178
        is_computed: false,
        remote: false,
        filterable: false
      },
何虹's avatar
何虹 committed
179
      emptyList: [undefined, "undefined", null, "null", ""],
何虹's avatar
何虹 committed
180 181 182 183
      number: 0,
      menuGlobalParams: {},
      focus: false,
      writeBackObject_: {},
何虹's avatar
何虹 committed
184
      dialogIframeSrc: "",
何虹's avatar
何虹 committed
185 186
      dialogIframeVisible: false,
      linkBtnUiVis: false,
何虹's avatar
何虹 committed
187 188
      linkUiBtnTxt: "调整"
    };
何虹's avatar
何虹 committed
189 190 191
  },
  computed: {
    dialogIfameVis: function() {
何虹's avatar
何虹 committed
192 193
      const linkBtnUi = !!this.configData.linkBtnUi;
      return linkBtnUi;
何虹's avatar
何虹 committed
194 195
    },
    isReadOnly: function() {
何虹's avatar
何虹 committed
196
      return this.readonly || this.configData.disabled;
何虹's avatar
何虹 committed
197 198
    },
    isReadOnly1: function() {
何虹's avatar
何虹 committed
199 200 201 202 203
      if (
        this.containerType !== "editArea" &&
        (this.readonly || this.configData.disabled)
      ) {
        return true;
何虹's avatar
何虹 committed
204 205 206 207
      }
    },
    isReadOnly2: function() {
      // 是编辑框
何虹's avatar
何虹 committed
208 209 210 211 212
      if (
        this.containerType === "editArea" &&
        (this.readonly || this.configData.disabled)
      ) {
        return true;
何虹's avatar
何虹 committed
213 214 215 216 217 218
      }
    }
  },
  watch: {
    writeBackObject: {
      handler(newValue, oldValue) {
何虹's avatar
何虹 committed
219 220 221 222 223
        const linkProp = this.configData.linkProp;
        const displayfield = this.configData.ref.displayfield;
        const remote_condition = this.configData.ref.remote_condition;
        const newData = newValue[linkProp];
        const oldData = this.writeBackObject_[linkProp];
何虹's avatar
何虹 committed
224
        if (linkProp && newData !== oldData) {
何虹's avatar
何虹 committed
225 226 227
          this.value_inner = "";
          this.$emit("input", "");
          this.writeBackObject[displayfield] = "";
何虹's avatar
何虹 committed
228
          if (remote_condition) {
何虹's avatar
何虹 committed
229
            this.remoteMethod_();
何虹's avatar
何虹 committed
230 231
          }
        }
何虹's avatar
何虹 committed
232
        this.writeBackObject_ = _.cloneDeep(newValue);
何虹's avatar
何虹 committed
233 234 235 236 237
      },
      deep: true
    },
    value: {
      handler(newValue, oldValue) {
何虹's avatar
何虹 committed
238
        this.initValue(newValue);
何虹's avatar
何虹 committed
239 240 241 242 243
      },
      deep: true
    },
    allSourceData: {
      handler: function(newVal, oldVal) {
何虹's avatar
何虹 committed
244 245
        this.initData(newVal);
        this.initValue(this.value);
何虹's avatar
何虹 committed
246 247 248 249
        this.number += 1;
        if (this.number <= 2) {
          this.clientData();
        }
何虹's avatar
何虹 committed
250 251 252 253 254
      },
      deep: true
    }
  },
  created() {
何虹's avatar
何虹 committed
255
    this.elId = uuidv1(); // 获取随机id
何虹's avatar
何虹 committed
256 257 258
  },
  mounted() {
    this.$nextTick(() => {
何虹's avatar
何虹 committed
259 260 261 262
      this.placeholder = this.elInfo.placeholder;
      this.title = this.elInfo.title;
      this.initData(this.allSourceData);
      this.initValue(this.value);
何虹's avatar
何虹 committed
263
      this.clientData();
何虹's avatar
何虹 committed
264
    });
何虹's avatar
何虹 committed
265 266
  },
  methods: {
何虹's avatar
何虹 committed
267 268 269 270 271 272 273 274 275 276
    async clientData() {
      const { config, sourceData } = this.allSourceData;
      if (config && Object.keys(config).length > 0) {
        const isInnerRequest = config.isInnerRequest;
        if (isInnerRequest) {
          const datas = await this.requestMethod(config);
          this.options = datas || [];
        }
      }
    },
何虹's avatar
何虹 committed
277
    closeDialog() {
何虹's avatar
何虹 committed
278
      this.dialogIframeVisible = false;
何虹's avatar
何虹 committed
279 280
    },
    linkBtnUiBack(data) {
何虹's avatar
何虹 committed
281 282 283 284
      debugger;
      const linkBtnUi = this.configData.linkBtnUi;
      if (!linkBtnUi) return;
      const writeProp = linkBtnUi.writeProp || {};
何虹's avatar
何虹 committed
285
      for (const key in writeProp) {
何虹's avatar
何虹 committed
286 287
        const value = writeProp[key];
        this.$set(this.writeBackObject, key, data[value]);
何虹's avatar
何虹 committed
288
      }
何虹's avatar
何虹 committed
289
      this.dialogIframeVisible = false;
何虹's avatar
何虹 committed
290 291
    },
    jumpSelect() {
何虹's avatar
何虹 committed
292 293 294 295 296 297 298 299 300 301
      const item = this.configData.linkBtnUi;
      const { url, dyncQueryParms, newDefault } = item;
      const newDefaultStr = JSON.stringify(newDefault);
      const parms = _.cloneDeep(dyncQueryParms || {});
      parms.newDefault = newDefaultStr;
      const href = location.href;
      const startUrl = href.split("#")[0];
      let url_ = url;
      const parseQuery = commonUtility.parseUrlQueryString();
      const { db_name } = parseQuery;
何虹's avatar
何虹 committed
302
      if (db_name) {
何虹's avatar
何虹 committed
303
        parms.db_name = db_name;
何虹's avatar
何虹 committed
304
      }
何虹's avatar
何虹 committed
305 306
      if (item.url.includes("?")) {
        url_ = url + "&fromMenu=1";
何虹's avatar
何虹 committed
307
      } else {
何虹's avatar
何虹 committed
308
        url_ = url + "?fromMenu=1";
何虹's avatar
何虹 committed
309
      }
何虹's avatar
何虹 committed
310
      let parmsStr = "";
何虹's avatar
何虹 committed
311
      for (const key in parms) {
何虹's avatar
何虹 committed
312
        parmsStr += `&${key}=${parms[key]}`;
何虹's avatar
何虹 committed
313
      }
何虹's avatar
何虹 committed
314 315 316 317 318 319
      let url__ = "";
      if (url.startsWith("http")) {
        url__ = `${url_}` + parmsStr + "&isInnerDialog=1";
      } else {
        url__ = `${startUrl}#${url_}` + parmsStr + "&isInnerDialog=1";
      }
何虹's avatar
何虹 committed
320 321
      this.dialogIframeSrc = url__;
      this.dialogIframeVisible = true;
何虹's avatar
何虹 committed
322 323 324
    },

    disAbledFun() {
何虹's avatar
何虹 committed
325
      return this.readonly || this.configData.disabled;
何虹's avatar
何虹 committed
326 327
    },
    initValue(value) {
何虹's avatar
何虹 committed
328 329 330
      if (!Object.keys(this.allSourceData.config || {}).length) return;
      const is_computed = this.configData.is_computed;
      const { multiple } = this.configData;
何虹's avatar
何虹 committed
331 332
      if (is_computed) {
        // 计算模式
何虹's avatar
何虹 committed
333
        this.value_inner = this.ten_twe_tans(value);
何虹's avatar
何虹 committed
334 335
      } else {
        if (multiple) {
何虹's avatar
何虹 committed
336
          this.value_inner = value ? value.split(",") : [];
何虹's avatar
何虹 committed
337
        } else {
何虹's avatar
何虹 committed
338
          this.value_inner = value;
何虹's avatar
何虹 committed
339
        }
何虹's avatar
何虹 committed
340 341
        if (value === null || value === "null") {
          this.value_inner = "";
何虹's avatar
何虹 committed
342
        }
何虹's avatar
何虹 committed
343
        this.setDefault();
何虹's avatar
何虹 committed
344 345 346
      }
    },
    getSysParams() {
何虹's avatar
何虹 committed
347 348 349 350 351 352 353
      const { db_name, is_mock, db_code } = commonUtility.parseUrlQueryString();
      const {
        appCode,
        pagename
      } = commonUtility.parseUrlQueryBIDyncAppcodePageName();
      const isMock = this.emptyList.includes(is_mock) ? 1 : is_mock;
      const dbName = db_name || "";
何虹's avatar
何虹 committed
354 355 356 357 358 359
      const obj = _.cloneDeep({
        dbName,
        appCode,
        page: pagename,
        isMock,
        db_code
何虹's avatar
何虹 committed
360 361
      });
      return obj;
何虹's avatar
何虹 committed
362 363
    },
    mergeCinfig(config1, config2) {
何虹's avatar
何虹 committed
364
      Object.assign(config1, config2);
何虹's avatar
何虹 committed
365 366
    },
    initConfig(config) {
何虹's avatar
何虹 committed
367
      this.mergeCinfig(this.configData, _.cloneDeep(config));
何虹's avatar
何虹 committed
368
      if (this.configData.ref) {
何虹's avatar
何虹 committed
369 370
        this.configData.remote = !!this.configData.ref.remote_condition;
        this.configData.filterable = !!this.configData.ref.remote_condition;
何虹's avatar
何虹 committed
371
      }
何虹's avatar
何虹 committed
372 373
      const linkBtnUi = this.configData.linkBtnUi;
      this.linkBtnUiVis = !!linkBtnUi;
何虹's avatar
何虹 committed
374
      if (this.linkBtnUiVis) {
何虹's avatar
何虹 committed
375
        this.linkUiBtnTxt = this.configData.linkBtnUi.label;
何虹's avatar
何虹 committed
376 377 378
      }
    },
    async initData(allSourceData) {
何虹's avatar
何虹 committed
379 380
      const { config, sourceData, is_mock } = _.cloneDeep(allSourceData);
      this.is_mock = is_mock;
何虹's avatar
何虹 committed
381
      if (!sourceData) {
何虹's avatar
何虹 committed
382
        this.initMockData();
何虹's avatar
何虹 committed
383
      } else {
何虹's avatar
何虹 committed
384 385
        this.initConfig(config);
        this.dealWithData(sourceData);
何虹's avatar
何虹 committed
386 387 388
      }
    },
    autoAddNullValue(data) {
何虹's avatar
何虹 committed
389
      const sourceData = _.cloneDeep(data);
何虹's avatar
何虹 committed
390 391
      if (Array.isArray(sourceData)) {
        const list = sourceData.map(item => {
何虹's avatar
何虹 committed
392 393
          if (item.value !== "") {
            return Number(item.value);
何虹's avatar
何虹 committed
394
          }
何虹's avatar
何虹 committed
395 396 397 398 399 400
        });
        const hasNaN = list.find(item => isNaN(item));
        const zeroTarget = list.find(item => item === 0 || item === "0");
        let hasZero = false;
        if (zeroTarget === 0 || hasZero === "0") {
          hasZero = true;
何虹's avatar
何虹 committed
401 402 403
        }
        if (!hasZero && !hasNaN) {
          sourceData.unshift({
何虹's avatar
何虹 committed
404 405 406
            value: "0",
            label: " "
          });
何虹's avatar
何虹 committed
407 408
        }
      }
何虹's avatar
何虹 committed
409
      return sourceData;
何虹's avatar
何虹 committed
410 411
    },
    dealWithData(data) {
何虹's avatar
何虹 committed
412 413
      const sourceData = this.autoAddNullValue(data);
      const sourceData_ = _.cloneDeep(sourceData);
何虹's avatar
何虹 committed
414 415
      this.options = Array.isArray(sourceData_)
        ? this.tansLate(sourceData_)
何虹's avatar
何虹 committed
416
        : this.translate_json(sourceData_);
何虹's avatar
何虹 committed
417 418
    },
    setDefault() {
何虹's avatar
何虹 committed
419 420 421
      const { value, multiple, ref } = this.configData;
      const displayfield = ref && ref.displayfield;
      const writebackfield = ref.writebackfield || [];
何虹's avatar
何虹 committed
422 423 424
      // 查找一下默认值,如果不存在就设置display_field
      const t = this.options.find(xs => {
        if (xs[value] === this.value && this.value !== undefined) {
何虹's avatar
何虹 committed
425
          return xs[value] === this.value;
何虹's avatar
何虹 committed
426
        }
何虹's avatar
何虹 committed
427 428 429 430
      });
      let displayfield_value = "";
      displayfield_value = this.writeBackObject[displayfield];
      if (!t && displayfield_value && displayfield_value !== "null") {
何虹's avatar
何虹 committed
431 432
        // 不存在就设置默认值
        this.value_inner = multiple
何虹's avatar
何虹 committed
433 434
          ? displayfield_value.split(",")
          : displayfield_value;
何虹's avatar
何虹 committed
435
      }
何虹's avatar
何虹 committed
436 437 438
      const targetItem = this.options.find(
        item => item.value === this.value_inner
      );
何虹's avatar
何虹 committed
439 440
      if (targetItem) {
        for (const item of writebackfield) {
何虹's avatar
何虹 committed
441 442
          const [key, value] = item.split("=");
          const result = value ? targetItem[value] : targetItem[key];
何虹's avatar
何虹 committed
443
          if (result !== undefined) {
何虹's avatar
何虹 committed
444
            this.$set(this.writeBackObject, key, result);
何虹's avatar
何虹 committed
445 446 447 448 449
          }
        }
      }
    },
    initMockData() {
何虹's avatar
何虹 committed
450
      this.initMockSelectData(this.elInfo.el);
何虹's avatar
何虹 committed
451 452 453
    },
    // 折线图的模拟数据
    initMockSelectData(type) {
何虹's avatar
何虹 committed
454 455 456 457 458
      const mockData_ = mockData[type];
      if (!mockData_) return;
      this.editData.config = mockData_.config;
      this.editData.sourceData = mockData_.sourceData;
      this.options = mockData_.sourceData;
何虹's avatar
何虹 committed
459 460
    },
    checkUndefinedOrNullOrStr(val) {
何虹's avatar
何虹 committed
461 462
      const result = [undefined, null, ""];
      return result.includes(val);
何虹's avatar
何虹 committed
463 464 465 466 467
    },
    // 复合值转换成2进制
    ten_twe_tans(val) {
      const list = parseInt(val)
        .toString(2)
何虹's avatar
何虹 committed
468 469 470
        .split("")
        .reverse();
      const result = [];
何虹's avatar
何虹 committed
471
      list.forEach((x, index) => {
何虹's avatar
何虹 committed
472 473
        if (typeof this.value === "number") {
          x.toString() === "1" ? result.push(2 ** index) : "";
何虹's avatar
何虹 committed
474
        } else {
何虹's avatar
何虹 committed
475
          x.toString() === "1" ? result.push((2 ** index).toString()) : "";
何虹's avatar
何虹 committed
476
        }
何虹's avatar
何虹 committed
477 478
      });
      return result;
何虹's avatar
何虹 committed
479 480 481
    },
    // 节流
    remoteMethodsDebounce: _.debounce(async function(query) {
何虹's avatar
何虹 committed
482
      if (this.is_mock) return;
何虹's avatar
何虹 committed
483
      const data = await this.requestMethod(this.configData, query || "");
何虹's avatar
何虹 committed
484
      this.options = this.tansLate(data || []);
何虹's avatar
何虹 committed
485 486
    }, 1000),
    async remoteMethod_(query) {
何虹's avatar
何虹 committed
487
      await this.remoteMethodsDebounce(query, this.configData);
何虹's avatar
何虹 committed
488 489
    },
    clear_select() {
何虹's avatar
何虹 committed
490 491
      const { ref, linkBtnUi, cleared, changed } = this.configData;
      const { writebackfield } = ref;
何虹's avatar
何虹 committed
492 493
      if (Array.isArray(writebackfield)) {
        for (const item of writebackfield) {
何虹's avatar
何虹 committed
494 495
          const [key] = item.split("=");
          this.$set(this.writeBackObject, key, "");
何虹's avatar
何虹 committed
496 497 498
        }
      }
      if (linkBtnUi) {
何虹's avatar
何虹 committed
499
        const writeProp = linkBtnUi.writeProp || {};
何虹's avatar
何虹 committed
500
        for (const key in writeProp) {
何虹's avatar
何虹 committed
501
          this.$set(this.writeBackObject, key, "");
何虹's avatar
何虹 committed
502 503
        }
      }
何虹's avatar
何虹 committed
504 505
      this.$emit("input", "");
      this.$emit("clear_callback", "");
何虹's avatar
何虹 committed
506
      this.$nextTick(() => {
何虹's avatar
何虹 committed
507 508 509
        this.exectAction(cleared);
        this.exectAction(changed);
      });
何虹's avatar
何虹 committed
510 511
    },
    select_focus(event) {
何虹's avatar
何虹 committed
512
      const { remote_condition } = this.configData.ref;
何虹's avatar
何虹 committed
513
      debugger;
何虹's avatar
何虹 committed
514
      if (remote_condition && !this.is_mock) {
何虹's avatar
何虹 committed
515
        this.remoteMethod_();
何虹's avatar
何虹 committed
516 517 518
      }
    },
    exectAction(action) {
何虹's avatar
何虹 committed
519 520 521
      const type = typeof action;
      if (type === "function") {
        action(this.value, this.writeBackObject);
何虹's avatar
何虹 committed
522 523 524
      }
    },
    change(val) {
何虹's avatar
何虹 committed
525
      const is_computed = this.configData.is_computed;
何虹's avatar
何虹 committed
526 527 528
      if (is_computed) {
        // 计算模式
        const s = val.reduce((prve, next) => {
何虹's avatar
何虹 committed
529 530 531
          return Number(prve) + Number(next);
        }, 0);
        this.$emit("input", typeof this.value === "number" ? s : s.toString());
何虹's avatar
何虹 committed
532
      } else {
何虹's avatar
何虹 committed
533 534
        const { multiple, ref } = this.configData;
        const { writebackfield } = ref;
何虹's avatar
何虹 committed
535
        if (multiple) {
何虹's avatar
何虹 committed
536
          const f_list = this.options.filter(xs => val.includes(xs.value));
何虹's avatar
何虹 committed
537 538 539
          if (writebackfield) {
            if (Array.isArray(writebackfield)) {
              for (const item of writebackfield) {
何虹's avatar
何虹 committed
540
                const [key, value] = item.split("=");
何虹's avatar
何虹 committed
541
                const r = f_list.map(xs => {
何虹's avatar
何虹 committed
542 543 544
                  return value ? xs[value] : xs[key];
                });
                this.$set(this.writeBackObject, key, r.join());
何虹's avatar
何虹 committed
545 546 547
              }
            } else {
              const f_label = f_list.map(xs => {
何虹's avatar
何虹 committed
548 549 550
                return xs.label;
              });
              this.$set(this.writeBackObject, writebackfield, f_label.join());
何虹's avatar
何虹 committed
551 552
            }
          }
何虹's avatar
何虹 committed
553
          this.$emit("input", val.join());
何虹's avatar
何虹 committed
554 555 556
          const return_obj = {
            val,
            data: this.writeBackObject ? this.writeBackObject : {}
何虹's avatar
何虹 committed
557 558
          };
          this.$emit("change_callback", return_obj);
何虹's avatar
何虹 committed
559 560
        } else {
          // 单选模式
何虹's avatar
何虹 committed
561
          const target = this.options.find(xs => val === xs.value);
何虹's avatar
何虹 committed
562

何虹's avatar
何虹 committed
563 564 565
          if (val === "0" || (target && target.label === " ")) {
            this.$emit("input", "");
            this.value_inner = "";
何虹's avatar
何虹 committed
566 567
          }
          if (val && this.configData.allowCreate) {
何虹's avatar
何虹 committed
568 569
            this.$emit("input", val);
            this.value_inner = val;
何虹's avatar
何虹 committed
570 571 572 573
          }
          if (writebackfield && target) {
            if (Array.isArray(writebackfield)) {
              for (const item of writebackfield) {
何虹's avatar
何虹 committed
574 575 576 577 578
                const [key, value] = item.split("=");
                if (value && !value.startsWith("$")) {
                  const result = value ? target[value] : target[key];
                  if (!value.startsWith("$")) {
                    // 取下拉里面的值
何虹's avatar
何虹 committed
579
                    if (result !== undefined) {
何虹's avatar
何虹 committed
580
                      this.$set(this.writeBackObject, key, result);
何虹's avatar
何虹 committed
581
                    }
何虹's avatar
何虹 committed
582 583 584 585
                  } else {
                    // 直接设置值
                    const str = val.substr(1, length);
                    this.$set(this.writeBackObject, key, str);
何虹's avatar
何虹 committed
586 587 588 589
                  }
                }
              }
            } else {
何虹's avatar
何虹 committed
590
              this.$set(this.writeBackObject, writebackfield, target.label);
何虹's avatar
何虹 committed
591 592 593 594 595
            }
          }
          const return_obj = {
            val,
            data: this.writeBackObject ? this.writeBackObject : {}
何虹's avatar
何虹 committed
596 597 598 599
          };
          if (target.label !== " ") {
            this.$emit("input", val);
            this.$emit("change_callback", return_obj);
何虹's avatar
何虹 committed
600 601 602 603
          }
        }
      }

何虹's avatar
何虹 committed
604
      const changed = this.configData.changed;
何虹's avatar
何虹 committed
605
      this.$nextTick(() => {
何虹's avatar
何虹 committed
606 607
        this.exectAction(changed);
      });
何虹's avatar
何虹 committed
608 609 610 611 612
      // setTimeout(() => {
      //   this.exectAction(changed)
      // }, 1)
    },
    tansLate(data) {
何虹's avatar
何虹 committed
613 614 615
      const arr = data;
      const list = [];
      const { value, label } = this.configData;
何虹's avatar
何虹 committed
616
      arr.forEach(element => {
何虹's avatar
何虹 committed
617
        const parm = {};
何虹's avatar
何虹 committed
618 619
        for (const pro in element) {
          if (pro === value && value === label) {
何虹's avatar
何虹 committed
620 621
            parm.value = element[pro];
            parm.label = element[pro];
何虹's avatar
何虹 committed
622
          } else if (pro === value) {
何虹's avatar
何虹 committed
623
            parm.value = element[pro];
何虹's avatar
何虹 committed
624
          } else if (pro === label) {
何虹's avatar
何虹 committed
625
            parm.label = element[label];
何虹's avatar
何虹 committed
626
          }
何虹's avatar
何虹 committed
627
          parm[pro] = element[pro];
何虹's avatar
何虹 committed
628
        }
何虹's avatar
何虹 committed
629 630
        list.push(parm);
      });
何虹's avatar
何虹 committed
631

何虹's avatar
何虹 committed
632
      return list;
何虹's avatar
何虹 committed
633 634
    },
    tansLateParm(obj) {
何虹's avatar
何虹 committed
635 636 637 638
      const { url } = this.configData;
      let str;
      if (url.includes("/?")) {
        str = "&";
何虹's avatar
何虹 committed
639
      } else {
何虹's avatar
何虹 committed
640
        str = "?";
何虹's avatar
何虹 committed
641 642 643
      }
      for (const prop in obj) {
        if (obj[prop]) {
何虹's avatar
何虹 committed
644
          str += `${prop}=${obj[prop]}&`;
何虹's avatar
何虹 committed
645 646
        }
      }
何虹's avatar
何虹 committed
647
      return str === "?" ? "" : str;
何虹's avatar
何虹 committed
648 649
    },
    translate_json(data = {}) {
何虹's avatar
何虹 committed
650
      const list = [];
何虹's avatar
何虹 committed
651
      for (const prop in data) {
何虹's avatar
何虹 committed
652 653 654 655
        const parm = {};
        parm.value = data[prop];
        parm.label = prop;
        list.push(parm);
何虹's avatar
何虹 committed
656
      }
何虹's avatar
何虹 committed
657
      return list;
何虹's avatar
何虹 committed
658 659
    },
    initRealUrl() {
何虹's avatar
何虹 committed
660 661
      const { url, ref } = this.configData;
      const { const_id, table_name, columns, remote_condition } = ref;
何虹's avatar
何虹 committed
662 663
      if (remote_condition) {
        if (table_name) {
何虹's avatar
何虹 committed
664
          return `${this.url_dynamic}${table_name}/${columns}/`;
何虹's avatar
何虹 committed
665
        } else {
何虹's avatar
何虹 committed
666
          return `${this.url_ipCommonAPI}${url}`;
何虹's avatar
何虹 committed
667 668 669
        }
      } else {
        if (const_id) {
何虹's avatar
何虹 committed
670
          return const_id;
何虹's avatar
何虹 committed
671
        } else if (table_name) {
何虹's avatar
何虹 committed
672
          return `${table_name}/${columns}`;
何虹's avatar
何虹 committed
673
        } else {
何虹's avatar
何虹 committed
674
          return url;
何虹's avatar
何虹 committed
675 676 677 678
        }
      }
    }
  }
何虹's avatar
何虹 committed
679
};
何虹's avatar
何虹 committed
680 681 682
</script>

<style scoped>
何虹's avatar
何虹 committed
683
.contarnBox {
何虹's avatar
何虹 committed
684 685
  display: flex;
}
何虹's avatar
何虹 committed
686 687
.selectTitle {
  flex: 1;
何虹's avatar
何虹 committed
688 689 690 691
  display: flex;
  justify-content: center;
  align-items: center;
}
何虹's avatar
何虹 committed
692
.selectCurr {
何虹's avatar
何虹 committed
693 694 695 696 697
  flex: 3;
  display: flex;
  justify-content: center;
  align-items: center;
}
何虹's avatar
何虹 committed
698
.noneStyle >>> .el-input__inner {
何虹's avatar
何虹 committed
699 700 701 702
  background: inherit;
  border: none;
  color: inherit;
}
何虹's avatar
何虹 committed
703 704
.noneStyle >>> .el-input__suffix-inner {
  display: none;
何虹's avatar
何虹 committed
705
}
何虹's avatar
何虹 committed
706
.noneStyle2 >>> .el-input__inner {
何虹's avatar
何虹 committed
707 708 709 710
  /* background: inherit;
  border: none;
  color: inherit; */
}
何虹's avatar
何虹 committed
711 712
.noneStyle2 >>> .el-input__suffix-inner {
  display: none;
何虹's avatar
何虹 committed
713 714 715 716 717 718 719 720
}
/* .selectBoxPlus>>> .el-select>.el-input{
    height: 100%;
}
.selectBoxPlus>>>.el-select .el-input__inner{
  height: 100%;
} */
</style>