UNPKG

ken-form-design

Version:

基于vue、ant-design-vue的表单设计器,可视化开发表单

385 lines (354 loc) 13.7 kB
((typeof self !== 'undefined' ? self : this)["webpackJsonpken_form_design"] = (typeof self !== 'undefined' ? self : this)["webpackJsonpken_form_design"] || []).push([[27],{ /***/ "71c6": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: ./node_modules/core-js/modules/es6.function.name.js var es6_function_name = __webpack_require__("7f7f"); // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"703dcae2-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/KComboBox/KComboBox.vue?vue&type=template&id=cd7b8a5a&scoped=true& var render = function render() { var _vm = this, _c = _vm._self._c; return _c('div', [_c('div', { staticClass: "k-combobox" }, [_c('div', { staticClass: "select-input", class: { 'select-input-color': _vm.iconUnfoldClass['icon-unfold-transform'], disabled: _vm.record.options.disabled } }, [_c('input', { directives: [{ name: "model", rawName: "v-model", value: _vm.resultLabel, expression: "resultLabel" }], staticClass: "inputDom cursor", attrs: { "placeholder": _vm.record.options.placeholder, "autocomplete": "off", "disabled": _vm.record.options.disabled }, domProps: { "value": _vm.resultLabel }, on: { "blur": _vm.handleInputBlur, "input": function input($event) { if ($event.target.composing) return; _vm.resultLabel = $event.target.value; } } }), _c('div', { staticClass: "select-arrow cursor", on: { "click": _vm.handleIcon, "keypress": _vm.handleIcon } }, [_c('i', { staticClass: "iconfont icon-unfold", class: _vm.iconUnfoldClass })])]), _c('div', { staticClass: "select-dropdown", style: { display: _vm.iconUnfoldClass['icon-unfold-transform'] ? 'block' : 'none' } }, [_c('ul', { staticClass: "select-not-found", style: { display: !_vm.isExistedSelectData ? 'block' : 'none' } }, [_c('li', [_vm._v("无匹配数据")])]), _c('ul', { staticClass: "select-dropdown-list", style: { display: _vm.isExistedSelectData ? 'block' : 'none' } }, _vm._l(_vm.record.options.options, function (item, index) { return _c('li', { key: index, staticClass: "select-item", on: { "click": function click($event) { return _vm.selectChange(item.label); }, "keypress": function keypress($event) { return _vm.selectChange(item.label); } } }, [_vm._v(" " + _vm._s(item.label) + " ")]); }), 0)])])]); }; var staticRenderFns = []; // CONCATENATED MODULE: ./packages/components/KComboBox/KComboBox.vue?vue&type=template&id=cd7b8a5a&scoped=true& // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/KComboBox/KComboBox.vue?vue&type=script&lang=js& /* harmony default export */ var KComboBoxvue_type_script_lang_js_ = ({ name: 'KComboBox', /** * 绑定 */ // model: { // prop: 'value', // event: 'change', // }, props: ['record', 'value'], /** * 数据 */ data: function data() { return { /** * 图标样式 */ iconUnfoldClass: { 'icon-unfold-transform': false }, /** * 记录点击切换按钮时对应的事件 */ ev: null, /** * 当前显示值 */ resultLabel: '' // /** // * 当前值 // */ // resultVal: '', }; }, /** * 方法 */ methods: { /** * 筛选值 * 通过传入value设置当前对应值 */ setValue: function setValue(newVal) { // 通过传入值,设置当前选中项目值 var curOption = this.record.options.options.filter(function (item) { return item.label === newVal; }); // 存在则进行相关设置 if (curOption.length > 0) { // 显示值 this.resultLabel = curOption[0].label; // // 实际值 // this.resultVal = curOption[0].value; } else { // 下拉列表中不存在,则设置 // 显示值 this.resultLabel = newVal; // // 实际值 // this.resultVal = newVal; } }, /** *input丢失焦点时触发 */ handleInputBlur: function handleInputBlur() { // 传出值 this.$emit('change', this.resultLabel); }, /** * 选择内容发生改变时触发 */ selectChange: function selectChange(newVal) { // 设置当前值 this.resultLabel = newVal; // 传出值 this.$emit('change', this.resultLabel); // 隐藏下拉框 this.iconUnfoldClass['icon-unfold-transform'] = false; }, /** *点击下拉箭头 * @param {*} e 当前事件对象 */ handleIcon: function handleIcon(e) { // 如果不可编辑禁用此事件 if (this.record.options.disabled) return; // 点击切换图标按钮时,先保存当前点击的事件,在后面监听的click事件中,判断如果不是当前点击的事件,则收起下拉框 this.ev = e; this.showOrHideDropDown(); }, // /** // * 下拉组件不可编辑时调用此方法 // */ // handleClick(e) { // if (this.record.options.disabled) return; // this.ev = e; // this.showOrHideDropDown(); // }, /** * 显示/隐藏下拉列表 */ showOrHideDropDown: function showOrHideDropDown() { // 如果当前下拉框处于显示状态,则再次点击进行隐藏 if (this.iconUnfoldClass['icon-unfold-transform']) { this.iconUnfoldClass['icon-unfold-transform'] = false; } // 当前处于隐藏状态 else { // 处理下拉位置 this.handleDropDown(); // 显示下拉框 this.iconUnfoldClass['icon-unfold-transform'] = true; } }, /** * 处理下拉列表 */ handleDropDown: function handleDropDown() { // 组件监听页面resize只能用addEventListener,否则不会生效 // 取消监听,重新打开下拉处理 // window.addEventListener('resize', this.handleDropDown, false); // body 可视区域高度 var bodyHeight = document.documentElement.clientHeight; // 匹配DOM的高度 var dropDownHeight = this.getHeight(this.dropDownDom); // 取出匹配父级DOM的矩形对象 var parentRect = this.parentDom.getBoundingClientRect(); // 匹配DOM的left与父级一致 this.dropDownDom.style.left = "".concat(parentRect.left, "px"); // 宽度 this.dropDownDom.style.width = "".concat(parentRect.width, "px"); /** * 1、getBoundingClientRect.bottom为元素下边与页面上边的距离 * 2、父级元素底部距离页面底部距离 =页面高度 - getBoundingClientRect.bottom */ // 用于显示下拉框的高度 var showDrowDownHeight = bodyHeight - parentRect.bottom; // 父级距离页面下边的高度大于等于匹配DOM的高度,则往下展示 if (showDrowDownHeight >= dropDownHeight) { // this.dropDownDom.style.bottom = 'auto'; // 匹配DOM的top = 父级矩形对象top + 父级的高度 this.dropDownDom.style.top = "".concat(parentRect.bottom, "px"); } else { // this.dropDownDom.style.top = 'auto'; // 从父元素顶部开始显示 this.dropDownDom.style.bottom = "".concat(showDrowDownHeight + parentRect.height, "px"); /** * 1、向上显示时,如果父元素顶部距离body顶部距离>下拉高度,则正常显示 * 2、如果<下拉高度,则重新设置下拉框高度,并添加滚动条 */ if (parentRect.top < dropDownHeight) { // 设置高度 this.dropDownDom.style.height = "".concat(parentRect.top, "px"); this.dropDownDom.style['overflow-y'] = 'scroll'; } } }, /** *获取元素高度 *@param {Object} el 需要获取高度的元素 */ getHeight: function getHeight(el) { /* 添加行内样式 让隐藏元素变成有物理尺寸存在,但不可见 */ el.style.cssText = 'visibility:hidden'; // 获取高度 var height = el.clientHeight; // 隐藏 el.style.cssText = 'display:none'; // 返回高度 return height; }, /** * 点击切换图标按钮以外的其他地方触发,关闭下拉框 * @param {*} e 点击事件的对象 */ clickOther: function clickOther(e) { // 判断如果不是当前点击的事件,则收起下拉框 if (this.ev === e) return; // 如果下拉框显示则隐藏 if (this.iconUnfoldClass['icon-unfold-transform']) { this.iconUnfoldClass['icon-unfold-transform'] = false; } } }, computed: { /** * 是否存在下拉值 */ isExistedSelectData: function isExistedSelectData() { return this.record.options.options.length > 0; }, /** * 下拉框dom元素 */ dropDownDom: function dropDownDom() { // 匹配框,需要相对于body return this.$el.getElementsByClassName('select-dropdown')[0]; }, /** * 组件顶级元素 */ parentDom: function parentDom() { // 匹配框父级 return this.$el.getElementsByClassName('k-combobox')[0]; } }, // 初始化加载 mounted: function mounted() { // 添加点击事件的监听 window.addEventListener('click', this.clickOther); }, watch: { // 父传子 value: { immediate: true, // 首次加载触发 handler: function handler(newVal) { this.setValue(newVal); } } }, // 销毁之前 destroyed: function destroyed() { // 移除监听 window.removeEventListener('click', this.clickOther); } }); // CONCATENATED MODULE: ./packages/components/KComboBox/KComboBox.vue?vue&type=script&lang=js& /* harmony default export */ var KComboBox_KComboBoxvue_type_script_lang_js_ = (KComboBoxvue_type_script_lang_js_); // EXTERNAL MODULE: ./packages/components/KComboBox/KComboBox.vue?vue&type=style&index=0&id=cd7b8a5a&prod&lang=less&scoped=true& var KComboBoxvue_type_style_index_0_id_cd7b8a5a_prod_lang_less_scoped_true_ = __webpack_require__("725f"); // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js var componentNormalizer = __webpack_require__("2877"); // CONCATENATED MODULE: ./packages/components/KComboBox/KComboBox.vue /* normalize component */ var component = Object(componentNormalizer["a" /* default */])( KComboBox_KComboBoxvue_type_script_lang_js_, render, staticRenderFns, false, null, "cd7b8a5a", null ) /* harmony default export */ var KComboBox = (component.exports); // CONCATENATED MODULE: ./packages/components/KComboBox/index.js KComboBox.install = function (Vue) { Vue.component(KComboBox.name, KComboBox); }; /* harmony default export */ var components_KComboBox = __webpack_exports__["default"] = (KComboBox); /***/ }), /***/ "725f": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_11_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_11_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_11_oneOf_1_2_node_modules_less_loader_dist_cjs_js_ref_11_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_KComboBox_vue_vue_type_style_index_0_id_cd7b8a5a_prod_lang_less_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("d657"); /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_11_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_11_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_11_oneOf_1_2_node_modules_less_loader_dist_cjs_js_ref_11_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_KComboBox_vue_vue_type_style_index_0_id_cd7b8a5a_prod_lang_less_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_11_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_11_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_11_oneOf_1_2_node_modules_less_loader_dist_cjs_js_ref_11_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_KComboBox_vue_vue_type_style_index_0_id_cd7b8a5a_prod_lang_less_scoped_true___WEBPACK_IMPORTED_MODULE_0__); /* unused harmony reexport * */ /***/ }), /***/ "d657": /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }) }]);