UNPKG

@mdsfe/mds-ui

Version:

A set of enterprise-class Vue UI components.

880 lines (729 loc) 24.8 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("./_mixin/emitter")); else if(typeof define === 'function' && define.amd) define(["./_mixin/emitter"], factory); else { var a = typeof exports === 'object' ? factory(require("./_mixin/emitter")) : factory(root["./_mixin/emitter"]); for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; } })(window, function(__WEBPACK_EXTERNAL_MODULE__14__) { return /******/ (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 = 118); /******/ }) /************************************************************************/ /******/ ({ /***/ 0: /***/ (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 } } /***/ }), /***/ 118: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: ./components/style/index.less var style = __webpack_require__(142); // EXTERNAL MODULE: ./components/form/style/index.less var form_style = __webpack_require__(281); // CONCATENATED MODULE: ./components/form/style/index.js // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./components/form/form-item.vue?vue&type=template&id=20a3a46c& var render = function () { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c("div", { class: _vm.classes }, [ _vm.label || _vm.$slots.label ? _c( "label", { class: _vm.prefixCls + "-label", style: _vm.labelStyle }, [ _vm._t("label", [ _c("div", { class: _vm.prefixCls + "-label-content" }, [ _vm._v(_vm._s(_vm.label)), ]), ]), ], 2 ) : _vm._e(), _c( "div", { class: _vm.prefixCls + "-content", style: { marginLeft: _vm.contentMarginLeft }, }, [ _vm._t("default"), _vm.status === "error" && _vm.errorMessage ? _c( "div", { class: _vm.prefixCls + "-content_error" }, [ _c("mds-icon", { attrs: { type: "fill-solid-wrong-circle" } }), _vm._v("\n " + _vm._s(_vm.errorMessage) + "\n "), ], 1 ) : _vm._e(), ], 2 ), ]) } var staticRenderFns = [] render._withStripped = true // CONCATENATED MODULE: ./components/form/form-item.vue?vue&type=template&id=20a3a46c& // EXTERNAL MODULE: external "babel-runtime/core-js/object/assign" var assign_ = __webpack_require__(6); var assign_default = /*#__PURE__*/__webpack_require__.n(assign_); // EXTERNAL MODULE: external "babel-runtime/core-js/json/stringify" var stringify_ = __webpack_require__(29); var stringify_default = /*#__PURE__*/__webpack_require__.n(stringify_); // EXTERNAL MODULE: external "./_mixin/emitter" var emitter_ = __webpack_require__(14); var emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_); // EXTERNAL MODULE: external "async-validator" var external_async_validator_ = __webpack_require__(78); var external_async_validator_default = /*#__PURE__*/__webpack_require__.n(external_async_validator_); // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./components/form/form-item.vue?vue&type=script&lang=js& // // // // // // // // // // // // // // // // // // // // // // // // // import { oneOf } from 'mds-ui/_util/proptype' /* harmony default export */ var form_itemvue_type_script_lang_js_ = ({ name: 'MdsFormItem', componentName: 'MdsFormItem', props: { label: String, labelWidth: String | Number, prop: String, rules: [Object, Array], required: { type: Boolean, default: undefined }, error: String }, mixins: [emitter_default.a], inject: ['MdsForm'], data: function data() { return { prefixCls: 'mds-form-item', status: '', requiredFromRules: undefined, errorMessage: '', initVal: undefined // 初始值 用于reset }; }, watch: { error: { immediate: true, handler: function handler(val) { this.errorMessage = val || ''; this.status = val ? 'error' : ''; } } }, computed: { contentMarginLeft: function contentMarginLeft() { if (!this.label && !this.$slots.label) { if (this.labelWidth !== undefined) { return this.labelWidth; } if (this.form.labelWidth) return this.form.labelWidth; } }, classes: function classes() { var _this = this; var prefixCls = this.prefixCls; var rules = this.getRules(); if (this.prop) { rules.every(function (rule) { if (rule.required) { _this.requiredFromRules = true; return false; } return true; }); } var required = (this.requiredFromRules || this.required) && prefixCls + '-required' || ''; var tipType = this.status === 'error' ? prefixCls + '-error' : ''; return ['' + prefixCls, required, tipType]; }, labelStyle: function labelStyle() { var ret = {}; if (this.labelWidth !== undefined) { ret.width = this.labelWidth; } else { var labelWidth = this.labelWidth || this.form.labelWidth; if (labelWidth && this.showLableWidth()) { ret.width = labelWidth; } } var extAlignArr = ['start', 'end', 'left', 'right', 'center', 'justify']; if (this.form.labelPosition && extAlignArr.indexOf(this.form.labelPosition) > -1) { ret.textAlign = this.form.labelPosition; } else { ret.textAlign = 'right'; } return ret; }, // contentStyle() { // const ret = {} // const labelWidth = this.labelWidth || this.form.labelWidth // if (labelWidth && this.showLableWidth()) { // ret.marginLeft = labelWidth // } // return ret // }, form: function form() { var parent = this.$parent; var parentName = parent.$options.name; while (parentName !== 'MdsForm') { parent = parent.$parent; parentName = parent.$options.name; } return parent; }, selfValue: function selfValue() { var model = this.form.model; if (!model || !this.prop) return; // form.tableData[1].ehrFieldName var _prop = this.prop.replace(/\[(\w+)\]/g, '.$1'); var propArr = _prop.split('.'); var res = model; for (var i = 0; i < propArr.length; i++) { if (propArr[i]) res = res[propArr[i]]; } console.log('selfValue => ', res); return res; } }, mounted: function mounted() { if (this.prop) { this.initVal = this.selfValue === undefined ? undefined : JSON.parse(stringify_default()(this.selfValue)); this.dispatch('MdsForm', 'formItemValidate', this); this.$on('formItemChange', this.formItemChange); this.$on('formItemBlur', this.formItemBlur); } }, beforeDestroy: function beforeDestroy() { this.dispatch('MdsForm', 'formItemDestroyed', this); }, methods: { clearValidate: function clearValidate() { this.status = ''; this.errorMessage = ''; }, // 重置 resetField: function resetField() { var _this2 = this; this.form.model[this.prop] = this.initVal === undefined ? undefined : JSON.parse(stringify_default()(this.initVal)); this.$nextTick(function () { _this2.clearValidate(); }); }, showLableWidth: function showLableWidth() { var alignPosition = this.form.alignPosition; return alignPosition === 'horizontal' || alignPosition === ''; }, // value change 触发validate formItemChange: function formItemChange() { this.validate('change'); console.log('formItemChange'); }, // input blur 触发validate formItemBlur: function formItemBlur() { this.validate('blur'); console.log('formItemBlur'); }, validate: function validate(trigger) { var _this3 = this; var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; var rules = trigger ? this.getRules().filter(function (item) { return Array.isArray(item.trigger) ? item.trigger.indexOf(trigger) > -1 : item.trigger === trigger; }).map(function (item) { return assign_default()({}, item); }) : this.getRules().map(function (item) { return assign_default()({}, item); }); console.log('rules => ', stringify_default()(rules)); if ((!rules || !rules.length) && this.required === undefined) { callback(null, null, true); return true; } // 删除trigger 解决部分非String类型表单项提示校验未通过 async-validator: ["xxx is not a string"] if (rules && rules.length > 0) { rules.forEach(function (rule) { delete rule.trigger; }); } var descriptor = {}; descriptor[this.prop] = rules; var model = {}; model[this.prop] = this.selfValue; // {name: 'abc'} console.log('descriptor => ', descriptor); var validator = new external_async_validator_default.a(descriptor); validator.validate(model, { firstFields: true }, function (errors, fields) { console.log('errors -> ', errors); console.log('fields -> ', fields); if (errors) { // validation failed, errors is an array of all errors // fields is an object keyed by field name with an array of // errors per field // return handleErrors(errors, fields); _this3.status = 'error'; _this3.errorMessage = errors[0].message; } else { _this3.status = 'success'; _this3.errorMessage = ''; } callback(_this3.errorMessage, fields, !errors); // this.elForm && this.elForm.$emit('validate', this.prop, !errors, this.validateMessage || null); }); }, // 获取当前rules getRules: function getRules() { var rulesFromParent = this.MdsForm.rules && this.MdsForm.rules[this.prop]; var selfRules = this.rules; var requiredRule = this.required !== undefined ? { required: !!this.required } : []; var res = [].concat(selfRules || rulesFromParent || []).concat(requiredRule); return res; } } }); // CONCATENATED MODULE: ./components/form/form-item.vue?vue&type=script&lang=js& /* harmony default export */ var form_form_itemvue_type_script_lang_js_ = (form_itemvue_type_script_lang_js_); // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js var componentNormalizer = __webpack_require__(0); // CONCATENATED MODULE: ./components/form/form-item.vue /* normalize component */ var component = Object(componentNormalizer["a" /* default */])( form_form_itemvue_type_script_lang_js_, render, staticRenderFns, false, null, null, null ) /* hot reload */ if (false) { var api; } component.options.__file = "components/form/form-item.vue" /* harmony default export */ var form_item = (component.exports); // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./components/form/form.vue?vue&type=template&id=68392104& var formvue_type_template_id_68392104_render = function () { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c("form", { class: _vm.classes }, [_vm._t("default")], 2) } var formvue_type_template_id_68392104_staticRenderFns = [] formvue_type_template_id_68392104_render._withStripped = true // CONCATENATED MODULE: ./components/form/form.vue?vue&type=template&id=68392104& // EXTERNAL MODULE: external "babel-runtime/core-js/promise" var promise_ = __webpack_require__(79); var promise_default = /*#__PURE__*/__webpack_require__.n(promise_); // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./components/form/form.vue?vue&type=script&lang=js& // // // // // // // import { oneOf } from 'mds-ui/_util/proptype' /* harmony default export */ var formvue_type_script_lang_js_ = ({ name: 'MdsForm', componentName: 'MdsForm', provide: function provide() { return { MdsForm: this }; }, props: { labelWidth: { type: String, default: '' }, labelPosition: { type: String, default: 'right' }, alignPosition: { type: String, default: '' }, formSize: { type: String, default: 'medium' }, model: { type: Object }, rules: { type: Object } }, data: function data() { return { prefixCls: 'mds-form', clicked: false, timeout: null, delayTimeout: null, isLoading: false, justText: false, fields: [] }; }, watch: { rules: function rules(val) { console.log('form - watch - rules -> ', val); } }, computed: { children: function children() { return this.$slots.default; }, classes: function classes() { var prefixCls = this.prefixCls, alignPosition = this.alignPosition, formSize = this.formSize; var alignPositionCls = alignPosition ? prefixCls + '-' + alignPosition : ''; var sizeCls = !formSize || formSize === 'medium' ? '' : prefixCls + '-size-' + formSize; return ['' + prefixCls, alignPositionCls, sizeCls]; } }, created: function created() { var _this = this; this.$on('formItemValidate', function (field) { console.log('field -> ', field); field.prop && _this.fields.push(field); }); this.$on('formItemDestroyed', function (field) { console.log('field -> ', field); field.prop && _this.fields.splice(_this.fields.indexOf(field), 1); }); }, methods: { // 清除校验 clearValidates: function clearValidates() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var fields = this.getFields(props); fields.forEach(function (item) { item.clearValidate && item.clearValidate(); }); }, // 手动校验 validateFields: function validateFields() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var fields = this.getFields(props); fields.forEach(function (item) { item.clearValidate && item.validate(); }); }, // 重置 resetFields: function resetFields() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var fields = this.getFields(props); console.log('resetFields - fields -> ', fields); fields.forEach(function (item) { item.clearValidate && item.resetField(); }); }, getFields: function getFields(props) { if (!this.fields.length) return []; var fields = [].concat(props); var resFields = this.fields.filter(function (item) { return fields.indexOf(item.prop) > -1; }); return resFields.length ? resFields : this.fields; }, validate: function validate(callback) { var _this2 = this; if (!this.model) { console.log('未绑定model'); return; } var promise = void 0; if (typeof callback !== 'function') { promise = new promise_default.a(function (resolve, reject) { callback = function callback(valid) { valid ? resolve(valid) : reject(valid); }; }); } var valid = true; var count = 0; if (!this.fields.length) { console.log('没有需要验证的 formItem'); callback(valid); return; } var failFields = {}; this.fields.forEach(function (item) { item.validate('', function (errorMessage, fields, validateStatus) { console.log('表单校验'); if (!validateStatus) { valid = false; failFields = assign_default()({}, failFields, fields); } if (typeof callback === 'function' && ++count === _this2.fields.length) { callback(valid, failFields); } }); }); if (promise) return promise; } } }); // CONCATENATED MODULE: ./components/form/form.vue?vue&type=script&lang=js& /* harmony default export */ var form_formvue_type_script_lang_js_ = (formvue_type_script_lang_js_); // CONCATENATED MODULE: ./components/form/form.vue /* normalize component */ var form_component = Object(componentNormalizer["a" /* default */])( form_formvue_type_script_lang_js_, formvue_type_template_id_68392104_render, formvue_type_template_id_68392104_staticRenderFns, false, null, null, null ) /* hot reload */ if (false) { var form_api; } form_component.options.__file = "components/form/form.vue" /* harmony default export */ var form_form = (form_component.exports); // CONCATENATED MODULE: ./components/form/index.js form_form.Item = form_item; /* istanbul ignore next */ form_form.install = function (Vue) { Vue.component(form_item.name, form_item); Vue.component(form_form.name, form_form); }; /* harmony default export */ var components_form = __webpack_exports__["default"] = (form_form); /***/ }), /***/ 14: /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__14__; /***/ }), /***/ 142: /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /***/ 281: /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /***/ 29: /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/json/stringify"); /***/ }), /***/ 6: /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/object/assign"); /***/ }), /***/ 78: /***/ (function(module, exports) { module.exports = require("async-validator"); /***/ }), /***/ 79: /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/promise"); /***/ }) /******/ }); });