UNPKG

element-nice-ui

Version:

A Component Library for Vue.js.

1,548 lines (1,423 loc) 48.6 kB
module.exports = /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/dist/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 257); /******/ }) /************************************************************************/ /******/ ({ /***/ 121: /***/ (function(module, exports) { module.exports = require("async-validator"); /***/ }), /***/ 13: /***/ (function(module, exports) { module.exports = require("element-nice-ui/lib/mixins/emitter"); /***/ }), /***/ 2: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; }); /* globals __VUE_SSR_CONTEXT__ */ // IMPORTANT: Do NOT use ES2015 features in this file (except for modules). // This module is a runtime utility for cleaner component module output and will // be included in the final webpack user bundle. function normalizeComponent( scriptExports, render, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier /* server only */, shadowMode /* vue-cli only */ ) { // Vue.extend constructor export interop var options = typeof scriptExports === 'function' ? scriptExports.options : scriptExports // render functions if (render) { options.render = render options.staticRenderFns = staticRenderFns options._compiled = true } // functional template if (functionalTemplate) { options.functional = true } // scopedId if (scopeId) { options._scopeId = 'data-v-' + scopeId } var hook if (moduleIdentifier) { // server build hook = function (context) { // 2.3 injection context = context || // cached call (this.$vnode && this.$vnode.ssrContext) || // stateful (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional // 2.2 with runInNewContext: true if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { context = __VUE_SSR_CONTEXT__ } // inject component styles if (injectStyles) { injectStyles.call(this, context) } // register component module identifier for async chunk inferrence if (context && context._registeredComponents) { context._registeredComponents.add(moduleIdentifier) } } // used by ssr in case component is cached and beforeCreate // never gets called options._ssrRegister = hook } else if (injectStyles) { hook = shadowMode ? function () { injectStyles.call( this, (options.functional ? this.parent : this).$root.$options.shadowRoot ) } : injectStyles } if (hook) { if (options.functional) { // for template-only hot-reload because in that case the render fn doesn't // go through the normalizer options._injectStyles = hook // register for functional component in vue file var originalRender = options.render options.render = function renderWithStyleInjection(h, context) { hook.call(context) return originalRender(h, context) } } else { // inject component registration as beforeCreate hook var existing = options.beforeCreate options.beforeCreate = existing ? [].concat(existing, hook) : [hook] } } return { exports: scriptExports, options: options } } /***/ }), /***/ 23: /***/ (function(module, exports) { module.exports = require("element-nice-ui/lib/utils/merge"); /***/ }), /***/ 257: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: external "@vue/babel-helper-vue-jsx-merge-props" var babel_helper_vue_jsx_merge_props_ = __webpack_require__(30); var babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__webpack_require__.n(babel_helper_vue_jsx_merge_props_); // EXTERNAL MODULE: external "element-nice-ui/lib/utils/merge" var merge_ = __webpack_require__(23); var merge_default = /*#__PURE__*/__webpack_require__.n(merge_); // EXTERNAL MODULE: ./packages/row/src/row.js var row = __webpack_require__(74); // CONCATENATED MODULE: ./packages/form/src/utils.js function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } const modifierMethod = { number(v) { let parsed = Number.parseFloat(v); return isNaN(parsed) ? v : parsed; }, trim(v) { return v.trim(); } }; const components = new Set(['el-input', 'el-upload', 'el-input-number', 'el-date-picker', 'el-select', 'el-switch', 'el-radio-group', 'el-radio', 'el-checkbox', 'el-checkbox-group', 'el-slider', 'el-cascader', 'el-time-picker', 'el-date-time-picker', 'el-table-select', 'el-wang-editor' // 'ElInput', 'ElInputNumber', 'ElDatePicker', 'ElSelect', 'ElSwitch', 'ElRadioGroup', 'ElRadio', 'ElCheckbox', 'ElCheckboxGroup', 'ElSlider', 'ElCascader', 'ElTimePicker', 'ElDateTimePicker' ]); let ruleMap = { required: _required => ({ required: _required !== false, message: typeof _required === 'string' ? _required : '该项是必填项' }), len: _len => { let isArr = Array.isArray(_len); let lenVal = isArr ? _len[0] : _len; return { len: lenVal, message: isArr && _len[1] ? _len[1] : "\u5B57\u7B26\u957F\u5EA6\u5E94\u4E3A ".concat(lenVal) }; }, min: (_min, type) => { let isArr = Array.isArray(_min); let minVal = isArr ? _min[0] : _min; let message = type === 'number' ? "\u503C\u4E0D\u80FD\u5C0F\u4E8E ".concat(minVal) : "\u5B57\u7B26\u957F\u5EA6\u4E0D\u80FD\u5C0F\u4E8E ".concat(minVal); return { min: minVal, message: isArr && _min[1] ? _min[1] : message }; }, max: (_max, type) => { let isArr = Array.isArray(_max); let maxVal = isArr ? _max[0] : _max; let message = type === 'number' ? "\u503C\u4E0D\u80FD\u5927\u4E8E ".concat(maxVal) : "\u5B57\u7B26\u957F\u5EA6\u4E0D\u80FD\u5927\u4E8E ".concat(maxVal); return { max: maxVal, message: isArr && _max[1] ? _max[1] : message }; }, range: (_range, type) => { let message = type === 'number' ? "\u503C\u7684\u8303\u56F4\u5728 ".concat(_range[0], " ~ ").concat(_range[1], " \u4E4B\u95F4") : "\u5B57\u7B26\u957F\u5EA6\u5E94\u5728 ".concat(_range[0], " ~ ").concat(_range[1], " \u4E4B\u95F4"); return { min: _range[0], max: _range[1], message: _range[2] || message }; }, match: _match => { let isArr = Array.isArray(_match); let matcher = isArr ? _match[0] : _match; let message; if (typeof matcher === 'string') { let preset = { phone: [/^1\d{10}$/, '手机号格式不正确'], id: [/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/, '身份证格式不正确'], email: [/^([\w\_\-]+)@([\w\-]+[\.]?)*[\w]+\.[a-zA-Z]{2,10}$/, '电子邮件格式不正确'] }; let presetMatcher = preset[matcher]; if (presetMatcher) { matcher = presetMatcher[0]; message = presetMatcher[1]; } else { console.error('match格式错误'); } } if (isArr && _match[1]) { message = _match[1]; } return { pattern: matcher, message }; }, validator: _validator => { return { validator: _validator }; } }; function utils_form(form) { let trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'blur'; const model = {}; const rules = {}; // 初始化数据 Object.keys(form).forEach(key => { if (Object.prototype.toString.call(form[key]) === '[object Object]') { model[key] = form[key].value; } else { model[key] = form[key]; } }); Object.keys(form).forEach(key => { let valueModel = form[key]; if (!valueModel) return; let _trigger = valueModel.trigger || trigger; let type = valueModel.type || (![undefined, null].includes(valueModel.value) ? Object.prototype.toString.call(valueModel.value).slice(8, -1).toLowerCase() : 'string'); Object.keys(valueModel).forEach(vk => { // 如果key为这几种直接跳过ƒ if (vk === 'value' || vk === 'trigger' || vk === 'type') return; // 规则工厂 let ruleFactory = ruleMap[vk]; if (!ruleFactory) return; // 生成具体规则 let rule = _objectSpread(_objectSpread({}, ruleFactory(valueModel[vk], type)), {}, { trigger: _trigger, type }); if (rules[key]) { rules[key].push(rule); } else { rules[key] = [rule]; } }); }); return { model, rules }; } // EXTERNAL MODULE: ./packages/form/src/form-item.vue + 5 modules var form_item = __webpack_require__(75); // EXTERNAL MODULE: external "element-nice-ui/lib/tooltip" var tooltip_ = __webpack_require__(38); var tooltip_default = /*#__PURE__*/__webpack_require__.n(tooltip_); // EXTERNAL MODULE: external "element-nice-ui/lib/utils/util" var util_ = __webpack_require__(5); // CONCATENATED MODULE: ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.28.0_webpack@4.47.0/node_modules/babel-loader/lib!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form.vue?vue&type=script&lang=js function formvue_type_script_lang_js_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function formvue_type_script_lang_js_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? formvue_type_script_lang_js_ownKeys(Object(t), !0).forEach(function (r) { formvue_type_script_lang_js_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : formvue_type_script_lang_js_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function formvue_type_script_lang_js_defineProperty(e, r, t) { return (r = formvue_type_script_lang_js_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function formvue_type_script_lang_js_toPropertyKey(t) { var i = formvue_type_script_lang_js_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function formvue_type_script_lang_js_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* harmony default export */ var formvue_type_script_lang_js = ({ name: 'ElForm', componentName: 'ElForm', inheritAttrs: false, components: { ElRow: row["a" /* default */], ElFormItem: form_item["a" /* default */], ElTooltip: tooltip_default.a }, provide() { return { elForm: this }; }, props: { conceal: Boolean, grid: { type: Boolean, default: true }, originModel: { type: Object }, originRules: { type: Object }, form: { type: Object }, trigger: String, labelPosition: String, labelWidth: String, labelSuffix: { type: String, default: '' }, colspan: { type: [Number, String], default: 12 }, gutter: { type: [String, Number], default: 12 }, readonly: { type: Boolean, default: undefined }, inline: Boolean, inlineMessage: Boolean, statusIcon: Boolean, showMessage: { type: Boolean, default: true }, size: String, disabled: { type: Boolean, default: undefined }, validateOnRuleChange: { type: Boolean, default: true }, hideRequiredAsterisk: { type: Boolean, default: false } }, data() { return { fields: [], model: {}, rules: {}, potentialLabelWidthArr: [] // use this array to calculate auto width }; }, watch: { rules() { this.fields.forEach(field => { field.removeValidateEvents(); field.addValidateEvents(); }); if (this.validateOnRuleChange) { this.validate(() => {}); } }, form() { this.initForm(); } }, computed: { autoLabelWidth() { if (!this.potentialLabelWidthArr.length) return 0; const max = Math.max(...this.potentialLabelWidthArr); return max ? "".concat(max, "px") : ''; } // rules1() { // if (this.originRules && this.originModel) return this.originRules // let ret = {} // let ruleMap = { // required: required => ({ // required: required !== false, // message: typeof required === 'string' ? required : '该项是必填项' // }), // len: len => { // let isArr = Array.isArray(len) // let lenVal = isArr ? len[0] : len // return { // len: lenVal, // message: isArr && len[1] ? len[1] : `字符长度应为 ${lenVal}` // } // }, // min: (min, type) => { // let isArr = Array.isArray(min) // let minVal = isArr ? min[0] : min // let message = // type === 'number' // ? `值不能小于 ${minVal}` // : `字符长度不能小于 ${minVal}` // return { // min: minVal, // message: isArr && min[1] ? min[1] : message // } // }, // max: (max, type) => { // let isArr = Array.isArray(max) // let maxVal = isArr ? max[0] : max // let message = // type === 'number' // ? `值不能大于 ${maxVal}` // : `字符长度不能大于 ${maxVal}` // return { // max: maxVal, // message: isArr && max[1] ? max[1] : message // } // }, // range: (range, type) => { // let message = // type === 'number' // ? `值的范围在 ${range[0]} ~ ${range[1]} 之间` // : `字符长度应在 ${range[0]} ~ ${range[1]} 之间` // return { // min: range[0], // max: range[1], // message: range[2] || message // } // }, // match: match => { // let isArr = Array.isArray(match) // let matcher = isArr ? match[0] : match // let message // if (typeof matcher === 'string') { // let preset = { // phone: [/^1\d{10}$/, '手机号格式不正确'], // id: [ // /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/, // '身份证格式不正确' // ], // email: [ // /^([\w\_\-]+)@([\w\-]+[\.]?)*[\w]+\.[a-zA-Z]{2,10}$/, // '电子邮件格式不正确' // ] // } // let presetMatcher = preset[matcher] // if (presetMatcher) { // matcher = presetMatcher[0] // message = presetMatcher[1] // } else { // console.error('match格式错误') // } // } // if (isArr && match[1]) { // message = match[1] // } // return { // pattern: matcher, // message // } // }, // validator: validator => { // return { validator } // } // } // let { form, trigger } = this // Object.keys(form).forEach(key => { // let valueModel = form[key] // if (!valueModel) return // let _trigger = valueModel.trigger || trigger || 'blur' // let type = // valueModel.type || // (![undefined, null].includes(valueModel.value) // ? Object.prototype.toString // .call(valueModel.value) // .slice(8, -1) // .toLowerCase() // : 'string') // Object.keys(valueModel).forEach(vk => { // // 如果key为这几种直接跳过ƒ // if (vk === 'value' || vk === 'trigger' || vk === 'type') return // // 规则工厂 // let ruleFactory = ruleMap[vk] // if (!ruleFactory) return // // 生成具体规则 // let rule = { // ...ruleFactory(valueModel[vk], type), // trigger: _trigger, // type // } // if (ret[key]) { // ret[key].push(rule) // } else { // ret[key] = [rule] // } // }) // }) // return ret // } }, render(h) { let customSlots = []; if (this.$slots.default) { customSlots = this.transSlots(this.$slots.default); } else if (this.$scopedSlots.data) { customSlots = this.transSlots(this.$scopedSlots.data(this.model)); } const children = customSlots.map(this.getFormNode); const props = { attrs: this.$attrs, class: ['el-form', this.labelPosition ? 'el-form--label-' + this.labelPosition : '', { 'el-form--inline': this.inline }] }; return this.grid ? h("el-row", babel_helper_vue_jsx_merge_props_default()([{}, props, { "attrs": { "gutter": +this.gutter, "tag": 'form', "type": 'flex' } }]), [children]) : h("form", babel_helper_vue_jsx_merge_props_default()([{}, props]), [children]); }, created() { this.initForm(); this.$on('el.form.addField', field => { if (field) { this.fields.push(field); } }); /* istanbul ignore next */ this.$on('el.form.removeField', field => { if (field.prop) { this.fields.splice(this.fields.indexOf(field), 1); } }); !this.conceal && this.notifyParent(); }, methods: { getFormNode(_ref, i) { let { node, prop } = _ref; const h = this.$createElement; let { componentOptions: opts, data, tag } = node; let rawTag = Object(util_["kebabCase"])(tag.replace(/vue-component-\d+-/, '')); if (!opts || !components.has(rawTag)) return node; let { attrs = {} } = data; // 所有表单属性 let formProps = ['prop', 'span', 'label', 'tips'].reduce((acc, cur) => { acc[cur] = attrs["t-".concat(cur)]; return acc; }, {}); // 事件定义 let on = opts.listeners || {}; let input; let modifier = attrs['t-modifier']; if (modifier && modifierMethod[modifier]) { input = v => { this.model[prop] = modifierMethod[modifier](v); this.$emit('change', this.model, prop, this); }; } else { input = v => { this.model[prop] = v; this.$emit('change', this.model, prop, this); }; } if (on.input) { if (Array.isArray(on.input)) { on.input.unshift(input); } else { on.input = [input, on.input]; } } else { on.input = input; } opts.listeners = on; // 生成一个新的节点 let newNode = this.$createElement(rawTag); // 新的属性 if (opts.propsData) { opts.propsData.value = this.model[prop]; } newNode.isRootInsert = node.isRootInsert; newNode.data = node.data; newNode.componentOptions = opts; return h("el-form-item", { "attrs": { "span": formProps.span, "prop": formProps.prop } }, [formProps.label ? h("span", { "slot": 'label' }, [formProps.label, formProps.tips ? h("el-tooltip", { "attrs": { "content": formProps.tips } }, [h("i", { "class": 'el-icon-warning-outline' })]) : null]) : null, newNode]); }, getValue() { return formvue_type_script_lang_js_objectSpread({}, this.model); }, setValue(values) { Object.keys(this.model).forEach(key => { if (values[key] !== undefined) { this.model[key] = values[key]; } }); }, onInput(prop, val) { if (!prop) return; this.model[prop] = val; this.$emit('change', this.model); }, getItemValue(prop) { if (!prop) return; return this.model[prop]; }, transSlots(slots) { if (!slots) return []; return slots.filter(vnode => vnode.tag).map(node => { let { data = {} } = node; let { attrs = {} } = data; let prop = attrs['t-prop']; return { prop, node }; }); }, initForm() { const { originModel, originRules } = this; let model = this.originModel; let rules = this.originRules; if ((!originModel || !originRules) && this.form) { const formModel = utils_form(this.form, this.trigger); model = formModel.model; rules = formModel.rules; } this.model = model; this.rules = rules; }, // initModel() { // // 使用element原始的model // if (this.originRules && this.originModel) { // this.model = this.originModel // return // } // if (!this.form) return // let ret = {} // let { form } = this // Object.keys(form).forEach(key => { // if (Object.prototype.toString.call(form[key]) === '[object Object]') { // ret[key] = form[key].value // } else { // ret[key] = form[key] // } // }) // this.model = ret // }, notifyParent() { let p = this.$parent; while (p) { if (p.acceptForm) { return p.acceptForm(this); } p = p.$parent; } }, resetFields() { let excludes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; if (!this.model) { console.warn('[warn] 你需要传入form方可清除验证'); return; } for (const key in this.model) { if (excludes.includes(key)) continue; let formVal = this.form[key]; let initialVal; if (Object.prototype.toString.call(formVal) === '[object Object]') { if ('value' in formVal) { initialVal = formVal.value; } else if (!formVal.type || formVal.type === 'string') { initialVal = ''; } else if (formVal.type === 'array') { initialVal = []; } else { initialVal = null; } } else { initialVal = formVal; } this.model[key] = initialVal; } this.clearValidate(); }, clearValidate() { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; const fields = props.length ? typeof props === 'string' ? this.fields.filter(field => props === field.prop) : this.fields.filter(field => props.indexOf(field.prop) > -1) : this.fields; fields.forEach(field => { field.clearValidate(); }); }, validate(callback) { if (!this.model) { console.warn('[warn] 你需要传入form方可验证'); return; } let promise; // if no callback, return promise if (typeof callback !== 'function' && window.Promise) { promise = new window.Promise(resolve => { callback = function callback(valid) { resolve(valid); }; }); } let valid = true; let count = 0; // 如果需要验证的fields为空,调用验证时立刻返回callback if (this.fields.length === 0 && callback) { callback(true); } let invalidFields = {}; this.fields.forEach(field => { field.validate('', (message, field) => { if (message) { valid = false; } invalidFields = merge_default()({}, invalidFields, field); if (typeof callback === 'function' && ++count === this.fields.length) { callback(valid, invalidFields); } }); }); this.fields.some(field => { if (field.validateState === 'error') { this.$nextTick(() => { field.$el.scrollIntoView(); }); return true; } }); if (promise) { return promise; } }, validateField(props, cb) { props = [].concat(props); const fields = this.fields.filter(field => props.indexOf(field.prop) !== -1); if (!fields.length) { console.warn('[Element Warn]please pass correct props!'); return; } fields.forEach(field => { field.validate('', cb); }); }, getLabelWidthIndex(width) { const index = this.potentialLabelWidthArr.indexOf(width); // it's impossible if (index === -1) { throw new Error('[ElementForm]unpected width ', width); } return index; }, registerLabelWidth(val, oldVal) { if (val && oldVal) { const index = this.getLabelWidthIndex(oldVal); this.potentialLabelWidthArr.splice(index, 1, val); } else if (val) { this.potentialLabelWidthArr.push(val); } }, deregisterLabelWidth(val) { const index = this.getLabelWidthIndex(val); this.potentialLabelWidthArr.splice(index, 1); } } }); // CONCATENATED MODULE: ./packages/form/src/form.vue?vue&type=script&lang=js /* harmony default export */ var src_formvue_type_script_lang_js = (formvue_type_script_lang_js); // EXTERNAL MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib/runtime/componentNormalizer.js var componentNormalizer = __webpack_require__(2); // CONCATENATED MODULE: ./packages/form/src/form.vue var render, staticRenderFns /* normalize component */ var component = Object(componentNormalizer["a" /* default */])( src_formvue_type_script_lang_js, render, staticRenderFns, false, null, null, null ) /* harmony default export */ var src_form = (component.exports); // CONCATENATED MODULE: ./packages/form/index.js /* istanbul ignore next */ src_form.install = function (Vue) { Vue.component(src_form.name, src_form); }; /* harmony default export */ var packages_form = __webpack_exports__["default"] = (src_form); /***/ }), /***/ 30: /***/ (function(module, exports) { module.exports = require("@vue/babel-helper-vue-jsx-merge-props"); /***/ }), /***/ 38: /***/ (function(module, exports) { module.exports = require("element-nice-ui/lib/tooltip"); /***/ }), /***/ 5: /***/ (function(module, exports) { module.exports = require("element-nice-ui/lib/utils/util"); /***/ }), /***/ 53: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony default export */ __webpack_exports__["a"] = ({ name: 'ElCol', props: { span: { type: Number }, tag: { type: String, default: 'div' }, offset: Number, pull: Number, push: Number, xs: [Number, Object], sm: [Number, Object], md: [Number, Object], lg: [Number, Object], xl: [Number, Object] }, computed: { gutter() { let parent = this.$parent; while (parent && parent.$options.componentName !== 'ElRow') { parent = parent.$parent; } return parent ? parent.gutter : 0; } }, render(h) { let classList = []; let style = {}; if (this.gutter) { style.paddingLeft = this.gutter / 2 + 'px'; style.paddingRight = style.paddingLeft; } if (this.span !== undefined) { classList.push("el-col-".concat(this.span)); } ; ['offset', 'pull', 'push'].forEach(prop => { if (this[prop] !== undefined) { classList.push("el-col-".concat(prop, "-").concat(this[prop])); } }); ['xs', 'sm', 'md', 'lg', 'xl'].forEach(size => { if (typeof this[size] === 'object') { let props = this[size]; return Object.keys(props).forEach(prop => { classList.push(prop !== 'span' ? "el-col-".concat(size, "-").concat(prop, "-").concat(props[prop]) : "el-col-".concat(size, "-").concat(props[prop])); }); } else if (!isNaN(+this[size])) { classList.push("el-col-".concat(size, "-").concat(this[size])); } }); return h(this.tag, { class: ['el-col', classList], style }, this.$slots.default); } }); /***/ }), /***/ 74: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony default export */ __webpack_exports__["a"] = ({ name: 'ElRow', componentName: 'ElRow', props: { tag: { type: String, default: 'div' }, gutter: Number, type: String, justify: { type: String, default: 'start' }, align: { type: String, default: 'top' } }, render(h) { return h(this.tag, { class: ['el-row', this.justify !== 'start' ? "is-justify-".concat(this.justify) : '', this.align !== 'top' ? "is-align-".concat(this.align) : '', { 'el-row--flex': this.type === 'flex' }] }, this.$slots.default); } }); /***/ }), /***/ 75: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // EXTERNAL MODULE: external "async-validator" var external_async_validator_ = __webpack_require__(121); var external_async_validator_default = /*#__PURE__*/__webpack_require__.n(external_async_validator_); // EXTERNAL MODULE: external "element-nice-ui/lib/mixins/emitter" var emitter_ = __webpack_require__(13); var emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_); // EXTERNAL MODULE: external "element-nice-ui/lib/utils/merge" var merge_ = __webpack_require__(23); var merge_default = /*#__PURE__*/__webpack_require__.n(merge_); // EXTERNAL MODULE: external "element-nice-ui/lib/utils/util" var util_ = __webpack_require__(5); // CONCATENATED MODULE: ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.28.0_webpack@4.47.0/node_modules/babel-loader/lib!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/label-wrap.vue?vue&type=script&lang=js /* harmony default export */ var label_wrapvue_type_script_lang_js = ({ props: { isAutoWidth: Boolean, updateAll: Boolean }, inject: ['elForm', 'elFormItem'], render() { const h = arguments[0]; const slots = this.$slots.default; if (!slots) return null; if (this.isAutoWidth) { const autoLabelWidth = this.elForm.autoLabelWidth; const style = {}; if (autoLabelWidth && autoLabelWidth !== 'auto') { const marginLeft = parseInt(autoLabelWidth, 10) - this.computedWidth; if (marginLeft) { style.marginLeft = marginLeft + 'px'; } } return h("div", { "class": "el-form-item__label-wrap", "style": style }, [slots]); } else { return slots[0]; } }, methods: { getLabelWidth() { if (this.$el && this.$el.firstElementChild) { const computedWidth = window.getComputedStyle(this.$el.firstElementChild).width; return Math.ceil(parseFloat(computedWidth)); } else { return 0; } }, updateLabelWidth() { let action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'update'; if (this.$slots.default && this.isAutoWidth && this.$el.firstElementChild) { if (action === 'update') { this.computedWidth = this.getLabelWidth(); } else if (action === 'remove') { this.elForm.deregisterLabelWidth(this.computedWidth); } } } }, watch: { computedWidth(val, oldVal) { if (this.updateAll) { this.elForm.registerLabelWidth(val, oldVal); this.elFormItem.updateComputedLabelWidth(val); } } }, data() { return { computedWidth: 0 }; }, mounted() { this.updateLabelWidth('update'); }, updated() { this.updateLabelWidth('update'); }, beforeDestroy() { this.updateLabelWidth('remove'); } }); // CONCATENATED MODULE: ./packages/form/src/label-wrap.vue?vue&type=script&lang=js /* harmony default export */ var src_label_wrapvue_type_script_lang_js = (label_wrapvue_type_script_lang_js); // EXTERNAL MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib/runtime/componentNormalizer.js var componentNormalizer = __webpack_require__(2); // CONCATENATED MODULE: ./packages/form/src/label-wrap.vue var render, staticRenderFns /* normalize component */ var component = Object(componentNormalizer["a" /* default */])( src_label_wrapvue_type_script_lang_js, render, staticRenderFns, false, null, null, null ) /* harmony default export */ var label_wrap = (component.exports); // EXTERNAL MODULE: ./packages/col/src/col.js var col = __webpack_require__(53); // CONCATENATED MODULE: ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.28.0_webpack@4.47.0/node_modules/babel-loader/lib!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.18_css-loader@5.2.7_webpack@4.47.0__lodash@4.1_bb9a19950a80e648dc95ba33c71fa343/node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form-item.vue?vue&type=script&lang=js /* harmony default export */ var form_itemvue_type_script_lang_js = ({ name: 'ElFormItem', componentName: 'ElFormItem', mixins: [emitter_default.a], provide() { return { elFormItem: this }; }, inject: ['elForm'], props: { label: String, labelWidth: String, span: { type: [String, Number] }, prop: String, required: { type: Boolean, default: undefined }, rules: [Object, Array], error: String, validateStatus: String, for: String, showMessage: { type: Boolean, default: true }, size: String }, components: { // use this component to calculate auto width LabelWrap: label_wrap, ElCol: col["a" /* default */] }, watch: { error: { immediate: true, handler(value) { this.validateMessage = value; this.validateState = value ? 'error' : ''; } }, validateStatus(value) { this.validateState = value; } }, computed: { labelFor() { return this.for || this.prop; }, computedSpan() { const { span, elForm } = this; if (elForm.inline) return; let cols = +(span || elForm.colspan); return isNaN(cols) ? 12 : cols; }, labelStyle() { const ret = {}; if (this.form.labelPosition === 'top') return ret; const labelWidth = this.labelWidth || this.form.labelWidth; if (labelWidth) { ret.width = labelWidth; } return ret; }, contentStyle() { const ret = {}; const label = this.label; if (this.form.labelPosition === 'top' || this.form.inline) return ret; if (!label && !this.labelWidth && this.isNested) return ret; const labelWidth = this.labelWidth || this.form.labelWidth; if (labelWidth === 'auto') { if (this.labelWidth === 'auto') { ret.marginLeft = this.computedLabelWidth; } else if (this.form.labelWidth === 'auto') { ret.marginLeft = this.elForm.autoLabelWidth; } } else { ret.marginLeft = labelWidth; } return ret; }, form() { let parent = this.$parent; let parentName = parent.$options.componentName; while (parentName !== 'ElForm') { if (parentName === 'ElFormItem') { this.isNested = true; } parent = parent.$parent; parentName = parent.$options.componentName; } return parent; }, fieldValue() { const model = this.form.model; if (!model || !this.prop) { return; } let path = this.prop; if (path.indexOf(':') !== -1) { path = path.replace(/:/, '.'); } return Object(util_["getPropByPath"])(model, path, true).v; }, isRequired() { let rules = this.getRules(); let isRequired = false; if (rules && rules.length) { rules.every(rule => { if (rule.required) { isRequired = true; return false; } return true; }); } return isRequired; }, _formSize() { return this.elForm.size; }, elFormItemSize() { return this.size || this._formSize; }, sizeClass() { return this.elFormItemSize || (this.$ELEMENT || {}).size; } }, data() { return { validateState: '', validateMessage: '', validateDisabled: false, validator: {}, isNested: false, computedLabelWidth: '' }; }, render(h) { const formItemClass = ['el-form-item']; this.showMessage && this.form.showMessage && formItemClass.push('el-form-item--showerror'); this.validateState && formItemClass.push("is-".concat(this.validateState)); (this.isRequired || this.required) && formItemClass.push('is-required'); this.elForm && this.elForm.hideRequiredAsterisk && formItemClass.push('is-no-asterisk'); this.elForm && this.elForm.statusIcon && formItemClass.push('el-form-item--feedback'); this.sizeClass && formItemClass.push('el-form-item--' + this.sizeClass); const children = [h("label-wrap", { "attrs": { "is-auto-width": this.labelStyle && this.labelStyle.width === 'auto', "update-all": this.form.labelWidth === 'auto' } }, [this.label || this.$slots.label ? h("label", { "attrs": { "for": this.labelFor, "title": this.label }, "class": 'el-form-item__label', "style": this.labelStyle }, [this.$slots.label || this.label + this.form.labelSuffix]) : null]), h("div", { "class": 'el-form-item__content', "style": this.contentStyle }, [this.$slots.default, h("transition", { "attrs": { "name": 'el-zoom-in-top' } }, [this.validateState === 'error' && this.showMessage && this.form.showMessage ? this.$scopedSlots.error ? this.$scopedSlots.error({ error: this.validateMessage }) : h("div", { "class": 'el-form-item__error' }, [this.validateMessage]) : null])])]; return this.elForm.grid || this.span ? h("el-col", { "attrs": { "span": this.computedSpan }, "class": formItemClass }, [children]) : h("div", { "class": formItemClass }, [children]); }, methods: { validate(trigger) { let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : util_["noop"]; this.validateDisabled = false; const rules = this.getFilteredRule(trigger); if ((!rules || rules.length === 0) && this.required === undefined) { callback(); return true; } this.validateState = 'validating'; const descriptor = {}; if (rules && rules.length > 0) { rules.forEach(rule => { delete rule.trigger; }); } descriptor[this.prop] = rules; const validator = new external_async_validator_default.a(descriptor); const model = this.elForm.model || { [this.prop]: this.fieldValue }; validator.validate(model, { firstFields: true }, (errors, invalidFields) => { this.validateState = !errors ? 'success' : 'error'; this.validateMessage = errors ? errors[0].message : ''; callback(this.validateMessage, invalidFields); this.elForm && this.elForm.$emit('validate', this.prop, !errors, this.validateMessage || null); }); }, clearValidate() { this.validateState = ''; this.validateMessage = ''; this.validateDisabled = true; this.$nextTick(() => { this.validateDisabled = false; }); }, resetField() { this.validateState = ''; this.validateMessage = ''; let model = this.form.model; let value = this.fieldValue; let path = this.prop; if (path.indexOf(':') !== -1) { path = path.replace(/:/, '.'); } let prop = Object(util_["getPropByPath"])(model, path, true); this.validateDisabled = true; if (Array.isArray(value)) { prop.o[prop.k] = [].concat(this.initialValue); } else { prop.o[prop.k] = this.initialValue; } // reset validateDisabled after onFieldChange triggered this.$nextTick(() => { this.validateDisabled = false; }); this.broadcast('ElTimeSelect', 'fieldReset', this.initialValue); }, getRules() { let formRules = this.form.rules; const selfRules = this.rules; const requiredRule = this.required !== undefined ? { required: !!this.required } : []; const prop = Object(util_["getPropByPath"])(formRules, this.prop || ''); formRules = formRules ? prop.o[this.prop || ''] || prop.v : []; return [].concat(selfRules || formRules || []).concat(requiredRule); }, getFilteredRule(trigger) { const rules = this.getRules(); return rules.filter(rule => { if (!rule.trigger || trigger === '') return true; if (Array.isArray(rule.trigger)) { return rule.trigger.indexOf(trigger) > -1; } else { return rule.trigger === trigger; } }).map(rule => merge_default()({}, rule)); }, onFieldBlur() { this.validate('blur'); }, onFieldChange() { if (this.validateDisabled) { this.validateDisabled = false; return; } this.validate('change'); }, updateComputedLabelWidth(width) { this.computedLabelWidth = width ? "".concat(width, "px") : ''; }, addValidateEvents() { const rules = this.getRules(); if (rules.length || this.required !== undefined) { this.$on('el.form.blur', this.onFieldBlur); this.$on('el.form.change', this.onFieldChange); } }, removeValidateEvents() { this.$off(); } }, mounted() { if (this.prop) { this.dispatch('ElForm', 'el.form.addField', [this]); let initialValue = this.fieldValue; if (Array.isArray(initialValue)) { initialValue = [].concat(initialValue); } Object.defineProperty(this, 'initialValue', { value: initialValue }); this.addValidateEvents(); } }, beforeDestroy() { this.dispatch('ElForm', 'el.form.removeField', [this]); } }); // CONCATENATED MODULE: ./packages/form/src/form-item.vue?vue&type=script&lang=js /* harmony default export */ var src_form_itemvue_type_script_lang_js = (form_itemvue_type_script_lang_js); // CONCATENATED MODULE: ./packages/form/src/form-item.vue var form_item_render, form_item_staticRenderFns /* normalize component */ var form_item_component = Object(componentNormalizer["a" /* default */])( src_form_itemvue_type_script_lang_js, form_item_render, form_item_staticRenderFns, false, null, null, null ) /* harmony default export */ var form_item = __webpack_exports__["a"] = (form_item_component.exports); /***/ }) /******/ });