{"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]}