{"remainingRequest":"D:\\jenkins\\workspace\\artfess-module\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\artfess-module\\src\\components\\HtSelect.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\artfess-module\\src\\components\\HtSelect.vue","mtime":1675232038590},{"path":"D:\\jenkins\\workspace\\artfess-module\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\artfess-module\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\artfess-module\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nimport utils from \"@/utils.js\";\r\nimport service from \"@/service.js\";\r\nimport HtFieldTail from \"@/components/HtFieldTail.vue\";\r\nimport { Promise } from \"q\";\r\nimport { setTimeout } from \"timers\";\r\nimport deepmerge from \"deepmerge\";\r\n\r\nexport default {\r\n  name: \"ht-select\",\r\n  props: {\r\n    validate: [String, Object],\r\n    value: [String, Number, Boolean, Array],\r\n    name: String,\r\n    permission: {\r\n      type: String,\r\n      default: \"w\",\r\n      validator: function(value) {\r\n        return [\"b\", \"w\", \"r\", \"n\"].indexOf(value) !== -1;\r\n      }\r\n    },\r\n    size: {\r\n      type: String,\r\n      default: \"small\"\r\n    },\r\n    options: Array,\r\n    props: {\r\n      type: Object,\r\n      default: function() {\r\n        return {\r\n          key: \"key\",\r\n          value: \"value\"\r\n        };\r\n      }\r\n    },\r\n    disabled: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    readonly: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    multiple: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    clearable: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    filterable: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    allowCreate: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    linkage: [Object, Array],\r\n    placeholder: String,\r\n    remoteMethod: Function,\r\n    remote: {\r\n      type: Boolean,\r\n      default: false\r\n    }\r\n  },\r\n  components: {\r\n    HtFieldTail\r\n  },\r\n  data() {\r\n    return {\r\n      optionsAry: [],\r\n      tagFormatValue: [],\r\n      remoteMethodFn: null,\r\n      inputName: null,\r\n\t  writeable: true,\r\n      isRemote: false,\r\n      loading: false,\r\n      oldValue: this.value,\r\n      remoteLoaded: false\r\n    };\r\n  },\r\n  watch: {\r\n    options: {\r\n      handler: function(newVal, oldValue) {\r\n        if (newVal && newVal.constructor === Array) {\r\n          // 在加载了数据时，标记远程方法调用状态为已调用\r\n          this.remoteLoaded = true;\r\n          this.optionsAry = [...newVal];\r\n          // 异步加载数据 下拉框不会回显 需要加载完options 重新赋值\r\n          if (\r\n            (!oldValue || oldValue.length == 0) &&\r\n            !utils.isEmpty(this.oldValue)\r\n          ) {\r\n            this.$emit(\"input\", this.oldValue);\r\n          }\r\n        }\r\n      },\r\n      immediate: true\r\n    }\r\n  },\r\n  computed: {\r\n    inputVal: {\r\n      get() {\r\n        if (\r\n          utils.isEmpty(this.value) ||\r\n          !this.optionsAry ||\r\n          this.optionsAry.length == 0\r\n        ) {\r\n          return utils.isEmpty(this.value) ? \"\" : this.value;\r\n        }\r\n        if (this.value.constructor == String) {\r\n          const ary = this.value === \"\" ? [] : this.value.split(\",\");\r\n          if (this.inputWriteable) {\r\n            if (this.multiple) {\r\n              return ary;\r\n            } else {\r\n              return this.value;\r\n            }\r\n          } else {\r\n            // 只读 多选\r\n            if (this.multiple) {\r\n              const ary = this.value === \"\" ? [] : this.value.split(\",\");\r\n              let optionVals = [];\r\n              let tempAry = deepmerge([], ary, { clone: true });\r\n              ary.forEach(m => {\r\n                this.optionsAry.find(opt => {\r\n                  if (opt[this.propKey] === m) {\r\n                    optionVals.push(opt[this.propValue]);\r\n                    tempAry.remove(m);\r\n                  }\r\n                  if (opt.children && opt.children.length > 0) {\r\n                    opt.children.find(childOpt => {\r\n                      if (childOpt[this.propKey] === m) {\r\n                        optionVals.push(childOpt[this.propValue]);\r\n                        tempAry.remove(m);\r\n                      }\r\n                    });\r\n                  }\r\n                });\r\n              });\r\n              optionVals = optionVals.concat(tempAry);\r\n              this.tagFormatValue = optionVals;\r\n              return ary;\r\n            }\r\n            if (this.optionsAry && this.optionsAry.length > 0) {\r\n              let optionVals = [];\r\n              let tempAry = deepmerge([], ary, { clone: true });\r\n              ary.forEach(m => {\r\n                this.optionsAry.find(opt => {\r\n                  if (opt[this.propKey] === m) {\r\n                    optionVals.push(opt[this.propValue]);\r\n                    tempAry.remove(m);\r\n                  }\r\n                  if (opt.children && opt.children.length > 0) {\r\n                    opt.children.find(childOpt => {\r\n                      if (childOpt[this.propKey] === m) {\r\n                        optionVals.push(childOpt[this.propValue]);\r\n                        tempAry.remove(m);\r\n                      }\r\n                    });\r\n                  }\r\n                });\r\n              });\r\n              optionVals = optionVals.concat(tempAry);\r\n              this.tagFormatValue = optionVals;\r\n              return this.value;\r\n            }\r\n          }\r\n        }\r\n        return this.value;\r\n      },\r\n      set(val) {\r\n        let result = \"\";\r\n        if (this.multiple) {\r\n          if (val && val.constructor === Array && val.length > 0) {\r\n            if (val[0].constructor === Number) {\r\n              throw \"多选不支持数字类型\";\r\n            }\r\n            result = val.join(\",\");\r\n          }\r\n        } else {\r\n          result = val;\r\n        }\r\n        this.$emit(\"input\", result);\r\n      }\r\n    },\r\n    inputWriteable: function() {\r\n      return this.writeable ? utils.getWriteable(this.permission):this.writeable;\r\n    },\r\n    inputValidate: function() {\r\n      return utils.addRequiredOrNot(this.permission, this.validate, this);\r\n    },\r\n    propKey: function() {\r\n      if (this.props && this.props.key) {\r\n        return this.props.key;\r\n      }\r\n      return \"key\";\r\n    },\r\n    propValue: function() {\r\n      if (this.props && this.props.value) {\r\n        return this.props.value;\r\n      }\r\n      return \"value\";\r\n    }\r\n  },\r\n  mounted() {\r\n    // 字段联动规则\r\n    const _me = this;\r\n    this.mountedLinkage();\r\n    if (this.value) {\r\n      this.handleRemoteMethod();\r\n    }\r\n  },\r\n  created() {\r\n    this.inputName = this.name ? this.name : utils.getName();\r\n    this.remoteMethodFn = this.remoteMethod;\r\n    this.isRemote =\r\n      (this.remoteMethodFn && this.remoteMethodFn.constructor === Function) ||\r\n      !!(\r\n        this.$vnode.data.directives &&\r\n        this.$vnode.data.directives.find(m => m.name == \"query\")\r\n      );\r\n    this.$validator = this.$root.$validator;\r\n  },\r\n  methods: {\r\n    mountedLinkage(){\r\n      if (this.linkage) {\r\n        const exp = this.linkage;\r\n        //如果要联动的字段权限是只读“r”,则把联动配置里面要联动的字段权限“w”改为只读“r”\r\n        if (exp && exp.length > 0) {\r\n          const frmInst = utils.getOnlineFormInstance(this);\r\n          //表单所有字段的初始权限\r\n          if (frmInst && frmInst.permission) {\r\n            exp.forEach((item) => {\r\n              let effect = item.effect;\r\n              effect.forEach((effectItem) => {\r\n                let initPermission = utils.getValueByPath(frmInst,effectItem.target);\r\n                if (\r\n                  effectItem.target &&\r\n                  effectItem.target.indexOf(\"permission\") != -1 &&\r\n                  effectItem.value != \"n\" && initPermission == \"r\"\r\n                ) {\r\n                  effectItem.value =  initPermission;\r\n                }\r\n              });\r\n            });\r\n          }\r\n        }\r\n        service.linkageHandler(this, exp);\r\n      }\r\n    },\r\n    clickNative: function() {\r\n      // 在远程方法未调用时才触发远程调用\r\n      if (!this.remoteLoaded) {\r\n        this.handleRemoteMethod();\r\n      }\r\n    },\r\n    handleRemoteMethod: function(query) {\r\n      let _me = this;\r\n      if (this.isRemote) {\r\n        this.loading = true;\r\n        var result = this.remoteMethodFn(query);\r\n        if (result && result.finally) {\r\n          result.finally(() => {\r\n            this.loading = false;\r\n          });\r\n        } else {\r\n          setTimeout(() => {\r\n            this.loading = false;\r\n          }, 1000);\r\n        }\r\n      }\r\n    },\r\n    change: function(data) {\r\n      let selectObj = this.optionsAry.find(opt => opt[this.propKey] === data);\r\n      this.$emit(\"change\", data, selectObj);\r\n    },\r\n    clearValue: function() {\r\n      this.oldValue = \"\";\r\n      this.inputVal = \"\";\r\n    },\r\n    visibleChange: function(m) {\r\n      this.$emit(\"visible-change\", m);\r\n    },\r\n    removeTag: function(tag) {\r\n      this.$emit(\"remove-tag\", tag);\r\n    },\r\n    handleClear: function() {\r\n      this.$emit(\"clear\");\r\n    },\r\n    handleBlur: function(event) {\r\n      this.$emit(\"blur\", event);\r\n    },\r\n    handleFocus: function(event) {\r\n      this.$emit(\"focus\", event);\r\n    }\r\n  }\r\n};\r\n",null]}