+ * ```
+ */
+export default {
+ bind(el, binding, vnode) {
+ nodeList.push(el);
+ const id = seed++;
+ el[ctx] = {
+ id,
+ documentHandler: createDocumentHandler(el, binding, vnode),
+ methodName: binding.expression,
+ bindingFn: binding.value
+ };
+ },
+
+ update(el, binding, vnode) {
+ el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);
+ el[ctx].methodName = binding.expression;
+ el[ctx].bindingFn = binding.value;
+ },
+
+ unbind(el) {
+ let len = nodeList.length;
+
+ for (let i = 0; i < len; i++) {
+ if (nodeList[i][ctx].id === el[ctx].id) {
+ nodeList.splice(i, 1);
+ break;
+ }
+ }
+ delete el[ctx];
+ }
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/date.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/date.js
new file mode 100644
index 0000000..42db030
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/date.js
@@ -0,0 +1,344 @@
+/* Modified from https://github.com/taylorhakes/fecha
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015 Taylor Hakes
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*eslint-disable*/
+// 把 YYYY-MM-DD 改成了 yyyy-MM-dd
+(function (main) {
+ 'use strict';
+
+ /**
+ * Parse or format dates
+ * @class fecha
+ */
+ var fecha = {};
+ var token = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g;
+ var twoDigits = /\d\d?/;
+ var threeDigits = /\d{3}/;
+ var fourDigits = /\d{4}/;
+ var word = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+ var noop = function () {
+ };
+
+ function shorten(arr, sLen) {
+ var newArr = [];
+ for (var i = 0, len = arr.length; i < len; i++) {
+ newArr.push(arr[i].substr(0, sLen));
+ }
+ return newArr;
+ }
+
+ function monthUpdate(arrName) {
+ return function (d, v, i18n) {
+ var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());
+ if (~index) {
+ d.month = index;
+ }
+ };
+ }
+
+ function pad(val, len) {
+ val = String(val);
+ len = len || 2;
+ while (val.length < len) {
+ val = '0' + val;
+ }
+ return val;
+ }
+
+ var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
+ var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
+ var monthNamesShort = shorten(monthNames, 3);
+ var dayNamesShort = shorten(dayNames, 3);
+ fecha.i18n = {
+ dayNamesShort: dayNamesShort,
+ dayNames: dayNames,
+ monthNamesShort: monthNamesShort,
+ monthNames: monthNames,
+ amPm: ['am', 'pm'],
+ DoFn: function DoFn(D) {
+ return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];
+ }
+ };
+
+ var formatFlags = {
+ D: function(dateObj) {
+ return dateObj.getDay();
+ },
+ DD: function(dateObj) {
+ return pad(dateObj.getDay());
+ },
+ Do: function(dateObj, i18n) {
+ return i18n.DoFn(dateObj.getDate());
+ },
+ d: function(dateObj) {
+ return dateObj.getDate();
+ },
+ dd: function(dateObj) {
+ return pad(dateObj.getDate());
+ },
+ ddd: function(dateObj, i18n) {
+ return i18n.dayNamesShort[dateObj.getDay()];
+ },
+ dddd: function(dateObj, i18n) {
+ return i18n.dayNames[dateObj.getDay()];
+ },
+ M: function(dateObj) {
+ return dateObj.getMonth() + 1;
+ },
+ MM: function(dateObj) {
+ return pad(dateObj.getMonth() + 1);
+ },
+ MMM: function(dateObj, i18n) {
+ return i18n.monthNamesShort[dateObj.getMonth()];
+ },
+ MMMM: function(dateObj, i18n) {
+ return i18n.monthNames[dateObj.getMonth()];
+ },
+ yy: function(dateObj) {
+ return String(dateObj.getFullYear()).substr(2);
+ },
+ yyyy: function(dateObj) {
+ return dateObj.getFullYear();
+ },
+ h: function(dateObj) {
+ return dateObj.getHours() % 12 || 12;
+ },
+ hh: function(dateObj) {
+ return pad(dateObj.getHours() % 12 || 12);
+ },
+ H: function(dateObj) {
+ return dateObj.getHours();
+ },
+ HH: function(dateObj) {
+ return pad(dateObj.getHours());
+ },
+ m: function(dateObj) {
+ return dateObj.getMinutes();
+ },
+ mm: function(dateObj) {
+ return pad(dateObj.getMinutes());
+ },
+ s: function(dateObj) {
+ return dateObj.getSeconds();
+ },
+ ss: function(dateObj) {
+ return pad(dateObj.getSeconds());
+ },
+ S: function(dateObj) {
+ return Math.round(dateObj.getMilliseconds() / 100);
+ },
+ SS: function(dateObj) {
+ return pad(Math.round(dateObj.getMilliseconds() / 10), 2);
+ },
+ SSS: function(dateObj) {
+ return pad(dateObj.getMilliseconds(), 3);
+ },
+ a: function(dateObj, i18n) {
+ return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];
+ },
+ A: function(dateObj, i18n) {
+ return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();
+ },
+ ZZ: function(dateObj) {
+ var o = dateObj.getTimezoneOffset();
+ return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);
+ }
+ };
+
+ var parseFlags = {
+ d: [twoDigits, function (d, v) {
+ d.day = v;
+ }],
+ M: [twoDigits, function (d, v) {
+ d.month = v - 1;
+ }],
+ yy: [twoDigits, function (d, v) {
+ var da = new Date(), cent = +('' + da.getFullYear()).substr(0, 2);
+ d.year = '' + (v > 68 ? cent - 1 : cent) + v;
+ }],
+ h: [twoDigits, function (d, v) {
+ d.hour = v;
+ }],
+ m: [twoDigits, function (d, v) {
+ d.minute = v;
+ }],
+ s: [twoDigits, function (d, v) {
+ d.second = v;
+ }],
+ yyyy: [fourDigits, function (d, v) {
+ d.year = v;
+ }],
+ S: [/\d/, function (d, v) {
+ d.millisecond = v * 100;
+ }],
+ SS: [/\d{2}/, function (d, v) {
+ d.millisecond = v * 10;
+ }],
+ SSS: [threeDigits, function (d, v) {
+ d.millisecond = v;
+ }],
+ D: [twoDigits, noop],
+ ddd: [word, noop],
+ MMM: [word, monthUpdate('monthNamesShort')],
+ MMMM: [word, monthUpdate('monthNames')],
+ a: [word, function (d, v, i18n) {
+ var val = v.toLowerCase();
+ if (val === i18n.amPm[0]) {
+ d.isPm = false;
+ } else if (val === i18n.amPm[1]) {
+ d.isPm = true;
+ }
+ }],
+ ZZ: [/[\+\-]\d\d:?\d\d/, function (d, v) {
+ var parts = (v + '').match(/([\+\-]|\d\d)/gi), minutes;
+
+ if (parts) {
+ minutes = +(parts[1] * 60) + parseInt(parts[2], 10);
+ d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;
+ }
+ }]
+ };
+ parseFlags.DD = parseFlags.D;
+ parseFlags.dddd = parseFlags.ddd;
+ parseFlags.Do = parseFlags.dd = parseFlags.d;
+ parseFlags.mm = parseFlags.m;
+ parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;
+ parseFlags.MM = parseFlags.M;
+ parseFlags.ss = parseFlags.s;
+ parseFlags.A = parseFlags.a;
+
+
+ // Some common format strings
+ fecha.masks = {
+ 'default': 'ddd MMM dd yyyy HH:mm:ss',
+ shortDate: 'M/D/yy',
+ mediumDate: 'MMM d, yyyy',
+ longDate: 'MMMM d, yyyy',
+ fullDate: 'dddd, MMMM d, yyyy',
+ shortTime: 'HH:mm',
+ mediumTime: 'HH:mm:ss',
+ longTime: 'HH:mm:ss.SSS'
+ };
+
+ /***
+ * Format a date
+ * @method format
+ * @param {Date|number} dateObj
+ * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'
+ */
+ fecha.format = function (dateObj, mask, i18nSettings) {
+ var i18n = i18nSettings || fecha.i18n;
+
+ if (typeof dateObj === 'number') {
+ dateObj = new Date(dateObj);
+ }
+
+ if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {
+ throw new Error('Invalid Date in fecha.format');
+ }
+
+ mask = fecha.masks[mask] || mask || fecha.masks['default'];
+
+ return mask.replace(token, function ($0) {
+ return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);
+ });
+ };
+
+ /**
+ * Parse a date string into an object, changes - into /
+ * @method parse
+ * @param {string} dateStr Date string
+ * @param {string} format Date parse format
+ * @returns {Date|boolean}
+ */
+ fecha.parse = function (dateStr, format, i18nSettings) {
+ var i18n = i18nSettings || fecha.i18n;
+
+ if (typeof format !== 'string') {
+ throw new Error('Invalid format in fecha.parse');
+ }
+
+ format = fecha.masks[format] || format;
+
+ // Avoid regular expression denial of service, fail early for really long strings
+ // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS
+ if (dateStr.length > 1000) {
+ return false;
+ }
+
+ var isValid = true;
+ var dateInfo = {};
+ format.replace(token, function ($0) {
+ if (parseFlags[$0]) {
+ var info = parseFlags[$0];
+ var index = dateStr.search(info[0]);
+ if (!~index) {
+ isValid = false;
+ } else {
+ dateStr.replace(info[0], function (result) {
+ info[1](dateInfo, result, i18n);
+ dateStr = dateStr.substr(index + result.length);
+ return result;
+ });
+ }
+ }
+
+ return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);
+ });
+
+ if (!isValid) {
+ return false;
+ }
+
+ var today = new Date();
+ if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {
+ dateInfo.hour = +dateInfo.hour + 12;
+ } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {
+ dateInfo.hour = 0;
+ }
+
+ var date;
+ if (dateInfo.timezoneOffset != null) {
+ dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;
+ date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,
+ dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));
+ } else {
+ date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,
+ dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);
+ }
+ return date;
+ };
+
+ /* istanbul ignore next */
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = fecha;
+ } else if (typeof define === 'function' && define.amd) {
+ define(function () {
+ return fecha;
+ });
+ } else {
+ main.fecha = fecha;
+ }
+})(this);
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/dom.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/dom.js
new file mode 100644
index 0000000..0221295
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/dom.js
@@ -0,0 +1,174 @@
+/* istanbul ignore next */
+
+import Vue from 'vue';
+
+const isServer = Vue.prototype.$isServer;
+const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+const MOZ_HACK_REGEXP = /^moz([A-Z])/;
+const ieVersion = isServer ? 0 : Number(document.documentMode);
+
+/* istanbul ignore next */
+const trim = function(string) {
+ return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
+};
+/* istanbul ignore next */
+const camelCase = function(name) {
+ return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+ return offset ? letter.toUpperCase() : letter;
+ }).replace(MOZ_HACK_REGEXP, 'Moz$1');
+};
+
+/* istanbul ignore next */
+export const on = (function() {
+ if (!isServer && document.addEventListener) {
+ return function(element, event, handler) {
+ if (element && event && handler) {
+ element.addEventListener(event, handler, false);
+ }
+ };
+ } else {
+ return function(element, event, handler) {
+ if (element && event && handler) {
+ element.attachEvent('on' + event, handler);
+ }
+ };
+ }
+})();
+
+/* istanbul ignore next */
+export const off = (function() {
+ if (!isServer && document.removeEventListener) {
+ return function(element, event, handler) {
+ if (element && event) {
+ element.removeEventListener(event, handler, false);
+ }
+ };
+ } else {
+ return function(element, event, handler) {
+ if (element && event) {
+ element.detachEvent('on' + event, handler);
+ }
+ };
+ }
+})();
+
+/* istanbul ignore next */
+export const once = function(el, event, fn) {
+ var listener = function() {
+ if (fn) {
+ fn.apply(this, arguments);
+ }
+ off(el, event, listener);
+ };
+ on(el, event, listener);
+};
+
+/* istanbul ignore next */
+export function hasClass(el, cls) {
+ if (!el || !cls) return false;
+ if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
+ if (el.classList) {
+ return el.classList.contains(cls);
+ } else {
+ return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
+ }
+};
+
+/* istanbul ignore next */
+export function addClass(el, cls) {
+ if (!el) return;
+ var curClass = el.className;
+ var classes = (cls || '').split(' ');
+
+ for (var i = 0, j = classes.length; i < j; i++) {
+ var clsName = classes[i];
+ if (!clsName) continue;
+
+ if (el.classList) {
+ el.classList.add(clsName);
+ } else if (!hasClass(el, clsName)) {
+ curClass += ' ' + clsName;
+ }
+ }
+ if (!el.classList) {
+ el.className = curClass;
+ }
+};
+
+/* istanbul ignore next */
+export function removeClass(el, cls) {
+ if (!el || !cls) return;
+ var classes = cls.split(' ');
+ var curClass = ' ' + el.className + ' ';
+
+ for (var i = 0, j = classes.length; i < j; i++) {
+ var clsName = classes[i];
+ if (!clsName) continue;
+
+ if (el.classList) {
+ el.classList.remove(clsName);
+ } else if (hasClass(el, clsName)) {
+ curClass = curClass.replace(' ' + clsName + ' ', ' ');
+ }
+ }
+ if (!el.classList) {
+ el.className = trim(curClass);
+ }
+};
+
+/* istanbul ignore next */
+export const getStyle = ieVersion < 9 ? function(element, styleName) {
+ if (isServer) return;
+ if (!element || !styleName) return null;
+ styleName = camelCase(styleName);
+ if (styleName === 'float') {
+ styleName = 'styleFloat';
+ }
+ try {
+ switch (styleName) {
+ case 'opacity':
+ try {
+ return element.filters.item('alpha').opacity / 100;
+ } catch (e) {
+ return 1.0;
+ }
+ default:
+ return (element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null);
+ }
+ } catch (e) {
+ return element.style[styleName];
+ }
+} : function(element, styleName) {
+ if (isServer) return;
+ if (!element || !styleName) return null;
+ styleName = camelCase(styleName);
+ if (styleName === 'float') {
+ styleName = 'cssFloat';
+ }
+ try {
+ var computed = document.defaultView.getComputedStyle(element, '');
+ return element.style[styleName] || computed ? computed[styleName] : null;
+ } catch (e) {
+ return element.style[styleName];
+ }
+};
+
+/* istanbul ignore next */
+export function setStyle(element, styleName, value) {
+ if (!element || !styleName) return;
+
+ if (typeof styleName === 'object') {
+ for (var prop in styleName) {
+ if (styleName.hasOwnProperty(prop)) {
+ setStyle(element, prop, styleName[prop]);
+ }
+ }
+ } else {
+ styleName = camelCase(styleName);
+ if (styleName === 'opacity' && ieVersion < 9) {
+ element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';
+ } else {
+ element.style[styleName] = value;
+ }
+ }
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-menubar.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-menubar.js
new file mode 100644
index 0000000..a5edc50
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-menubar.js
@@ -0,0 +1,14 @@
+import MenuItem from './aria-menuitem';
+
+const Menu = function(domNode) {
+ this.domNode = domNode;
+ this.init();
+};
+
+Menu.prototype.init = function() {
+ let menuChildren = this.domNode.childNodes;
+ [].filter.call(menuChildren, child => child.nodeType === 1).forEach(child => {
+ new MenuItem(child); // eslint-disable-line
+ });
+};
+export default Menu;
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-menuitem.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-menuitem.js
new file mode 100644
index 0000000..3431ac0
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-menuitem.js
@@ -0,0 +1,49 @@
+import Utils from '../aria-utils';
+import SubMenu from './aria-submenu';
+
+const MenuItem = function(domNode) {
+ this.domNode = domNode;
+ this.submenu = null;
+ this.init();
+};
+
+MenuItem.prototype.init = function() {
+ this.domNode.setAttribute('tabindex', '0');
+ let menuChild = this.domNode.querySelector('.el-menu');
+ if (menuChild) {
+ this.submenu = new SubMenu(this, menuChild);
+ }
+ this.addListeners();
+};
+
+MenuItem.prototype.addListeners = function() {
+ const keys = Utils.keys;
+ this.domNode.addEventListener('keydown', event => {
+ let prevDef = false;
+ switch (event.keyCode) {
+ case keys.down:
+ Utils.triggerEvent(event.currentTarget, 'mouseenter');
+ this.submenu && this.submenu.gotoSubIndex(0);
+ prevDef = true;
+ break;
+ case keys.up:
+ Utils.triggerEvent(event.currentTarget, 'mouseenter');
+ this.submenu && this.submenu.gotoSubIndex(this.submenu.subMenuItems.length - 1);
+ prevDef = true;
+ break;
+ case keys.tab:
+ Utils.triggerEvent(event.currentTarget, 'mouseleave');
+ break;
+ case keys.enter:
+ case keys.space:
+ prevDef = true;
+ event.currentTarget.click();
+ break;
+ }
+ if (prevDef) {
+ event.preventDefault();
+ }
+ });
+};
+
+export default MenuItem;
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-submenu.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-submenu.js
new file mode 100644
index 0000000..06a77bb
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/menu/aria-submenu.js
@@ -0,0 +1,59 @@
+import Utils from '../aria-utils';
+
+const SubMenu = function(parent, domNode) {
+ this.domNode = domNode;
+ this.parent = parent;
+ this.subMenuItems = [];
+ this.subIndex = 0;
+ this.init();
+};
+
+SubMenu.prototype.init = function() {
+ this.subMenuItems = this.domNode.querySelectorAll('li');
+ this.addListeners();
+};
+
+SubMenu.prototype.gotoSubIndex = function(idx) {
+ if (idx === this.subMenuItems.length) {
+ idx = 0;
+ } else if (idx < 0) {
+ idx = this.subMenuItems.length - 1;
+ }
+ this.subMenuItems[idx].focus();
+ this.subIndex = idx;
+};
+
+SubMenu.prototype.addListeners = function() {
+ const keys = Utils.keys;
+ const parentNode = this.parent.domNode;
+ Array.prototype.forEach.call(this.subMenuItems, el => {
+ el.addEventListener('keydown', event => {
+ let prevDef = false;
+ switch (event.keyCode) {
+ case keys.down:
+ this.gotoSubIndex(this.subIndex + 1);
+ prevDef = true;
+ break;
+ case keys.up:
+ this.gotoSubIndex(this.subIndex - 1);
+ prevDef = true;
+ break;
+ case keys.tab:
+ Utils.triggerEvent(parentNode, 'mouseleave');
+ break;
+ case keys.enter:
+ case keys.space:
+ prevDef = true;
+ event.currentTarget.click();
+ break;
+ }
+ if (prevDef) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ return false;
+ });
+ });
+};
+
+export default SubMenu;
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/merge.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/merge.js
new file mode 100644
index 0000000..4ad7f91
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/merge.js
@@ -0,0 +1,15 @@
+export default function(target) {
+ for (let i = 1, j = arguments.length; i < j; i++) {
+ let source = arguments[i] || {};
+ for (let prop in source) {
+ if (source.hasOwnProperty(prop)) {
+ let value = source[prop];
+ if (value !== undefined) {
+ target[prop] = value;
+ }
+ }
+ }
+ }
+
+ return target;
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popper.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popper.js
new file mode 100644
index 0000000..cb3b6d9
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popper.js
@@ -0,0 +1,1276 @@
+/**
+ * @fileOverview Kickass library to create and place poppers near their reference elements.
+ * @version {{version}}
+ * @license
+ * Copyright (c) 2016 Federico Zivolo and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+//
+// Cross module loader
+// Supported: Node, AMD, Browser globals
+//
+;(function (root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like environments that support module.exports,
+ // like Node.
+ module.exports = factory();
+ } else {
+ // Browser globals (root is window)
+ root.Popper = factory();
+ }
+}(this, function () {
+
+ 'use strict';
+
+ var root = window;
+
+ // default options
+ var DEFAULTS = {
+ // placement of the popper
+ placement: 'bottom',
+
+ gpuAcceleration: true,
+
+ // shift popper from its origin by the given amount of pixels (can be negative)
+ offset: 0,
+
+ // the element which will act as boundary of the popper
+ boundariesElement: 'viewport',
+
+ // amount of pixel used to define a minimum distance between the boundaries and the popper
+ boundariesPadding: 5,
+
+ // popper will try to prevent overflow following this order,
+ // by default, then, it could overflow on the left and on top of the boundariesElement
+ preventOverflowOrder: ['left', 'right', 'top', 'bottom'],
+
+ // the behavior used by flip to change the placement of the popper
+ flipBehavior: 'flip',
+
+ arrowElement: '[x-arrow]',
+
+ arrowOffset: 0,
+
+ // list of functions used to modify the offsets before they are applied to the popper
+ modifiers: [ 'shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle'],
+
+ modifiersIgnored: [],
+
+ forceAbsolute: false
+ };
+
+ /**
+ * Create a new Popper.js instance
+ * @constructor Popper
+ * @param {HTMLElement} reference - The reference element used to position the popper
+ * @param {HTMLElement|Object} popper
+ * The HTML element used as popper, or a configuration used to generate the popper.
+ * @param {String} [popper.tagName='div'] The tag name of the generated popper.
+ * @param {Array} [popper.classNames=['popper']] Array of classes to apply to the generated popper.
+ * @param {Array} [popper.attributes] Array of attributes to apply, specify `attr:value` to assign a value to it.
+ * @param {HTMLElement|String} [popper.parent=window.document.body] The parent element, given as HTMLElement or as query string.
+ * @param {String} [popper.content=''] The content of the popper, it can be text, html, or node; if it is not text, set `contentType` to `html` or `node`.
+ * @param {String} [popper.contentType='text'] If `html`, the `content` will be parsed as HTML. If `node`, it will be appended as-is.
+ * @param {String} [popper.arrowTagName='div'] Same as `popper.tagName` but for the arrow element.
+ * @param {Array} [popper.arrowClassNames='popper__arrow'] Same as `popper.classNames` but for the arrow element.
+ * @param {String} [popper.arrowAttributes=['x-arrow']] Same as `popper.attributes` but for the arrow element.
+ * @param {Object} options
+ * @param {String} [options.placement=bottom]
+ * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -right),
+ * left(-start, -end)`
+ *
+ * @param {HTMLElement|String} [options.arrowElement='[x-arrow]']
+ * The DOM Node used as arrow for the popper, or a CSS selector used to get the DOM node. It must be child of
+ * its parent Popper. Popper.js will apply to the given element the style required to align the arrow with its
+ * reference element.
+ * By default, it will look for a child node of the popper with the `x-arrow` attribute.
+ *
+ * @param {Boolean} [options.gpuAcceleration=true]
+ * When this property is set to true, the popper position will be applied using CSS3 translate3d, allowing the
+ * browser to use the GPU to accelerate the rendering.
+ * If set to false, the popper will be placed using `top` and `left` properties, not using the GPU.
+ *
+ * @param {Number} [options.offset=0]
+ * Amount of pixels the popper will be shifted (can be negative).
+ *
+ * @param {String|Element} [options.boundariesElement='viewport']
+ * The element which will define the boundaries of the popper position, the popper will never be placed outside
+ * of the defined boundaries (except if `keepTogether` is enabled)
+ *
+ * @param {Number} [options.boundariesPadding=5]
+ * Additional padding for the boundaries
+ *
+ * @param {Array} [options.preventOverflowOrder=['left', 'right', 'top', 'bottom']]
+ * Order used when Popper.js tries to avoid overflows from the boundaries, they will be checked in order,
+ * this means that the last ones will never overflow
+ *
+ * @param {String|Array} [options.flipBehavior='flip']
+ * The behavior used by the `flip` modifier to change the placement of the popper when the latter is trying to
+ * overlap its reference element. Defining `flip` as value, the placement will be flipped on
+ * its axis (`right - left`, `top - bottom`).
+ * You can even pass an array of placements (eg: `['right', 'left', 'top']` ) to manually specify
+ * how alter the placement when a flip is needed. (eg. in the above example, it would first flip from right to left,
+ * then, if even in its new placement, the popper is overlapping its reference element, it will be moved to top)
+ *
+ * @param {Array} [options.modifiers=[ 'shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle']]
+ * List of functions used to modify the data before they are applied to the popper, add your custom functions
+ * to this array to edit the offsets and placement.
+ * The function should reflect the @params and @returns of preventOverflow
+ *
+ * @param {Array} [options.modifiersIgnored=[]]
+ * Put here any built-in modifier name you want to exclude from the modifiers list
+ * The function should reflect the @params and @returns of preventOverflow
+ *
+ * @param {Boolean} [options.removeOnDestroy=false]
+ * Set to true if you want to automatically remove the popper when you call the `destroy` method.
+ */
+ function Popper(reference, popper, options) {
+ this._reference = reference.jquery ? reference[0] : reference;
+ this.state = {};
+
+ // if the popper variable is a configuration object, parse it to generate an HTMLElement
+ // generate a default popper if is not defined
+ var isNotDefined = typeof popper === 'undefined' || popper === null;
+ var isConfig = popper && Object.prototype.toString.call(popper) === '[object Object]';
+ if (isNotDefined || isConfig) {
+ this._popper = this.parse(isConfig ? popper : {});
+ }
+ // otherwise, use the given HTMLElement as popper
+ else {
+ this._popper = popper.jquery ? popper[0] : popper;
+ }
+
+ // with {} we create a new object with the options inside it
+ this._options = Object.assign({}, DEFAULTS, options);
+
+ // refactoring modifiers' list
+ this._options.modifiers = this._options.modifiers.map(function(modifier){
+ // remove ignored modifiers
+ if (this._options.modifiersIgnored.indexOf(modifier) !== -1) return;
+
+ // set the x-placement attribute before everything else because it could be used to add margins to the popper
+ // margins needs to be calculated to get the correct popper offsets
+ if (modifier === 'applyStyle') {
+ this._popper.setAttribute('x-placement', this._options.placement);
+ }
+
+ // return predefined modifier identified by string or keep the custom one
+ return this.modifiers[modifier] || modifier;
+ }.bind(this));
+
+ // make sure to apply the popper position before any computation
+ this.state.position = this._getPosition(this._popper, this._reference);
+ setStyle(this._popper, { position: this.state.position, top: 0 });
+
+ // fire the first update to position the popper in the right place
+ this.update();
+
+ // setup event listeners, they will take care of update the position in specific situations
+ this._setupEventListeners();
+ return this;
+ }
+
+
+ //
+ // Methods
+ //
+ /**
+ * Destroy the popper
+ * @method
+ * @memberof Popper
+ */
+ Popper.prototype.destroy = function() {
+ this._popper.removeAttribute('x-placement');
+ this._popper.style.left = '';
+ this._popper.style.position = '';
+ this._popper.style.top = '';
+ this._popper.style[getSupportedPropertyName('transform')] = '';
+ this._removeEventListeners();
+
+ // remove the popper if user explicity asked for the deletion on destroy
+ if (this._options.removeOnDestroy) {
+ this._popper.remove();
+ }
+ return this;
+ };
+
+ /**
+ * Updates the position of the popper, computing the new offsets and applying the new style
+ * @method
+ * @memberof Popper
+ */
+ Popper.prototype.update = function() {
+ var data = { instance: this, styles: {} };
+
+ // store placement inside the data object, modifiers will be able to edit `placement` if needed
+ // and refer to _originalPlacement to know the original value
+ data.placement = this._options.placement;
+ data._originalPlacement = this._options.placement;
+
+ // compute the popper and reference offsets and put them inside data.offsets
+ data.offsets = this._getOffsets(this._popper, this._reference, data.placement);
+
+ // get boundaries
+ data.boundaries = this._getBoundaries(data, this._options.boundariesPadding, this._options.boundariesElement);
+
+ data = this.runModifiers(data, this._options.modifiers);
+
+ if (typeof this.state.updateCallback === 'function') {
+ this.state.updateCallback(data);
+ }
+ };
+
+ /**
+ * If a function is passed, it will be executed after the initialization of popper with as first argument the Popper instance.
+ * @method
+ * @memberof Popper
+ * @param {Function} callback
+ */
+ Popper.prototype.onCreate = function(callback) {
+ // the createCallbacks return as first argument the popper instance
+ callback(this);
+ return this;
+ };
+
+ /**
+ * If a function is passed, it will be executed after each update of popper with as first argument the set of coordinates and informations
+ * used to style popper and its arrow.
+ * NOTE: it doesn't get fired on the first call of the `Popper.update()` method inside the `Popper` constructor!
+ * @method
+ * @memberof Popper
+ * @param {Function} callback
+ */
+ Popper.prototype.onUpdate = function(callback) {
+ this.state.updateCallback = callback;
+ return this;
+ };
+
+ /**
+ * Helper used to generate poppers from a configuration file
+ * @method
+ * @memberof Popper
+ * @param config {Object} configuration
+ * @returns {HTMLElement} popper
+ */
+ Popper.prototype.parse = function(config) {
+ var defaultConfig = {
+ tagName: 'div',
+ classNames: [ 'popper' ],
+ attributes: [],
+ parent: root.document.body,
+ content: '',
+ contentType: 'text',
+ arrowTagName: 'div',
+ arrowClassNames: [ 'popper__arrow' ],
+ arrowAttributes: [ 'x-arrow']
+ };
+ config = Object.assign({}, defaultConfig, config);
+
+ var d = root.document;
+
+ var popper = d.createElement(config.tagName);
+ addClassNames(popper, config.classNames);
+ addAttributes(popper, config.attributes);
+ if (config.contentType === 'node') {
+ popper.appendChild(config.content.jquery ? config.content[0] : config.content);
+ }else if (config.contentType === 'html') {
+ popper.innerHTML = config.content;
+ } else {
+ popper.textContent = config.content;
+ }
+
+ if (config.arrowTagName) {
+ var arrow = d.createElement(config.arrowTagName);
+ addClassNames(arrow, config.arrowClassNames);
+ addAttributes(arrow, config.arrowAttributes);
+ popper.appendChild(arrow);
+ }
+
+ var parent = config.parent.jquery ? config.parent[0] : config.parent;
+
+ // if the given parent is a string, use it to match an element
+ // if more than one element is matched, the first one will be used as parent
+ // if no elements are matched, the script will throw an error
+ if (typeof parent === 'string') {
+ parent = d.querySelectorAll(config.parent);
+ if (parent.length > 1) {
+ console.warn('WARNING: the given `parent` query(' + config.parent + ') matched more than one element, the first one will be used');
+ }
+ if (parent.length === 0) {
+ throw 'ERROR: the given `parent` doesn\'t exists!';
+ }
+ parent = parent[0];
+ }
+ // if the given parent is a DOM nodes list or an array of nodes with more than one element,
+ // the first one will be used as parent
+ if (parent.length > 1 && parent instanceof Element === false) {
+ console.warn('WARNING: you have passed as parent a list of elements, the first one will be used');
+ parent = parent[0];
+ }
+
+ // append the generated popper to its parent
+ parent.appendChild(popper);
+
+ return popper;
+
+ /**
+ * Adds class names to the given element
+ * @function
+ * @ignore
+ * @param {HTMLElement} target
+ * @param {Array} classes
+ */
+ function addClassNames(element, classNames) {
+ classNames.forEach(function(className) {
+ element.classList.add(className);
+ });
+ }
+
+ /**
+ * Adds attributes to the given element
+ * @function
+ * @ignore
+ * @param {HTMLElement} target
+ * @param {Array} attributes
+ * @example
+ * addAttributes(element, [ 'data-info:foobar' ]);
+ */
+ function addAttributes(element, attributes) {
+ attributes.forEach(function(attribute) {
+ element.setAttribute(attribute.split(':')[0], attribute.split(':')[1] || '');
+ });
+ }
+
+ };
+
+ /**
+ * Helper used to get the position which will be applied to the popper
+ * @method
+ * @memberof Popper
+ * @param config {HTMLElement} popper element
+ * @param reference {HTMLElement} reference element
+ * @returns {String} position
+ */
+ Popper.prototype._getPosition = function(popper, reference) {
+ var container = getOffsetParent(reference);
+
+ if (this._options.forceAbsolute) {
+ return 'absolute';
+ }
+
+ // Decide if the popper will be fixed
+ // If the reference element is inside a fixed context, the popper will be fixed as well to allow them to scroll together
+ var isParentFixed = isFixed(reference, container);
+ return isParentFixed ? 'fixed' : 'absolute';
+ };
+
+ /**
+ * Get offsets to the popper
+ * @method
+ * @memberof Popper
+ * @access private
+ * @param {Element} popper - the popper element
+ * @param {Element} reference - the reference element (the popper will be relative to this)
+ * @returns {Object} An object containing the offsets which will be applied to the popper
+ */
+ Popper.prototype._getOffsets = function(popper, reference, placement) {
+ placement = placement.split('-')[0];
+ var popperOffsets = {};
+
+ popperOffsets.position = this.state.position;
+ var isParentFixed = popperOffsets.position === 'fixed';
+
+ //
+ // Get reference element position
+ //
+ var referenceOffsets = getOffsetRectRelativeToCustomParent(reference, getOffsetParent(popper), isParentFixed);
+
+ //
+ // Get popper sizes
+ //
+ var popperRect = getOuterSizes(popper);
+
+ //
+ // Compute offsets of popper
+ //
+
+ // depending by the popper placement we have to compute its offsets slightly differently
+ if (['right', 'left'].indexOf(placement) !== -1) {
+ popperOffsets.top = referenceOffsets.top + referenceOffsets.height / 2 - popperRect.height / 2;
+ if (placement === 'left') {
+ popperOffsets.left = referenceOffsets.left - popperRect.width;
+ } else {
+ popperOffsets.left = referenceOffsets.right;
+ }
+ } else {
+ popperOffsets.left = referenceOffsets.left + referenceOffsets.width / 2 - popperRect.width / 2;
+ if (placement === 'top') {
+ popperOffsets.top = referenceOffsets.top - popperRect.height;
+ } else {
+ popperOffsets.top = referenceOffsets.bottom;
+ }
+ }
+
+ // Add width and height to our offsets object
+ popperOffsets.width = popperRect.width;
+ popperOffsets.height = popperRect.height;
+
+ return {
+ popper: popperOffsets,
+ reference: referenceOffsets
+ };
+ };
+
+
+ /**
+ * Setup needed event listeners used to update the popper position
+ * @method
+ * @memberof Popper
+ * @access private
+ */
+ Popper.prototype._setupEventListeners = function() {
+ // NOTE: 1 DOM access here
+ this.state.updateBound = this.update.bind(this);
+ root.addEventListener('resize', this.state.updateBound);
+ // if the boundariesElement is window we don't need to listen for the scroll event
+ if (this._options.boundariesElement !== 'window') {
+ var target = getScrollParent(this._reference);
+ // here it could be both `body` or `documentElement` thanks to Firefox, we then check both
+ if (target === root.document.body || target === root.document.documentElement) {
+ target = root;
+ }
+ target.addEventListener('scroll', this.state.updateBound);
+ this.state.scrollTarget = target;
+ }
+ };
+
+ /**
+ * Remove event listeners used to update the popper position
+ * @method
+ * @memberof Popper
+ * @access private
+ */
+ Popper.prototype._removeEventListeners = function() {
+ // NOTE: 1 DOM access here
+ root.removeEventListener('resize', this.state.updateBound);
+ if (this._options.boundariesElement !== 'window' && this.state.scrollTarget) {
+ this.state.scrollTarget.removeEventListener('scroll', this.state.updateBound);
+ this.state.scrollTarget = null;
+ }
+ this.state.updateBound = null;
+ };
+
+ /**
+ * Computed the boundaries limits and return them
+ * @method
+ * @memberof Popper
+ * @access private
+ * @param {Object} data - Object containing the property "offsets" generated by `_getOffsets`
+ * @param {Number} padding - Boundaries padding
+ * @param {Element} boundariesElement - Element used to define the boundaries
+ * @returns {Object} Coordinates of the boundaries
+ */
+ Popper.prototype._getBoundaries = function(data, padding, boundariesElement) {
+ // NOTE: 1 DOM access here
+ var boundaries = {};
+ var width, height;
+ if (boundariesElement === 'window') {
+ var body = root.document.body,
+ html = root.document.documentElement;
+
+ height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );
+ width = Math.max( body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth );
+
+ boundaries = {
+ top: 0,
+ right: width,
+ bottom: height,
+ left: 0
+ };
+ } else if (boundariesElement === 'viewport') {
+ var offsetParent = getOffsetParent(this._popper);
+ var scrollParent = getScrollParent(this._popper);
+ var offsetParentRect = getOffsetRect(offsetParent);
+
+ // Thanks the fucking native API, `document.body.scrollTop` & `document.documentElement.scrollTop`
+ var getScrollTopValue = function (element) {
+ return element == document.body ? Math.max(document.documentElement.scrollTop, document.body.scrollTop) : element.scrollTop;
+ }
+ var getScrollLeftValue = function (element) {
+ return element == document.body ? Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) : element.scrollLeft;
+ }
+
+ // if the popper is fixed we don't have to substract scrolling from the boundaries
+ var scrollTop = data.offsets.popper.position === 'fixed' ? 0 : getScrollTopValue(scrollParent);
+ var scrollLeft = data.offsets.popper.position === 'fixed' ? 0 : getScrollLeftValue(scrollParent);
+
+ boundaries = {
+ top: 0 - (offsetParentRect.top - scrollTop),
+ right: root.document.documentElement.clientWidth - (offsetParentRect.left - scrollLeft),
+ bottom: root.document.documentElement.clientHeight - (offsetParentRect.top - scrollTop),
+ left: 0 - (offsetParentRect.left - scrollLeft)
+ };
+ } else {
+ if (getOffsetParent(this._popper) === boundariesElement) {
+ boundaries = {
+ top: 0,
+ left: 0,
+ right: boundariesElement.clientWidth,
+ bottom: boundariesElement.clientHeight
+ };
+ } else {
+ boundaries = getOffsetRect(boundariesElement);
+ }
+ }
+ boundaries.left += padding;
+ boundaries.right -= padding;
+ boundaries.top = boundaries.top + padding;
+ boundaries.bottom = boundaries.bottom - padding;
+ return boundaries;
+ };
+
+
+ /**
+ * Loop trough the list of modifiers and run them in order, each of them will then edit the data object
+ * @method
+ * @memberof Popper
+ * @access public
+ * @param {Object} data
+ * @param {Array} modifiers
+ * @param {Function} ends
+ */
+ Popper.prototype.runModifiers = function(data, modifiers, ends) {
+ var modifiersToRun = modifiers.slice();
+ if (ends !== undefined) {
+ modifiersToRun = this._options.modifiers.slice(0, getArrayKeyIndex(this._options.modifiers, ends));
+ }
+
+ modifiersToRun.forEach(function(modifier) {
+ if (isFunction(modifier)) {
+ data = modifier.call(this, data);
+ }
+ }.bind(this));
+
+ return data;
+ };
+
+ /**
+ * Helper used to know if the given modifier depends from another one.
+ * @method
+ * @memberof Popper
+ * @param {String} requesting - name of requesting modifier
+ * @param {String} requested - name of requested modifier
+ * @returns {Boolean}
+ */
+ Popper.prototype.isModifierRequired = function(requesting, requested) {
+ var index = getArrayKeyIndex(this._options.modifiers, requesting);
+ return !!this._options.modifiers.slice(0, index).filter(function(modifier) {
+ return modifier === requested;
+ }).length;
+ };
+
+ //
+ // Modifiers
+ //
+
+ /**
+ * Modifiers list
+ * @namespace Popper.modifiers
+ * @memberof Popper
+ * @type {Object}
+ */
+ Popper.prototype.modifiers = {};
+
+ /**
+ * Apply the computed styles to the popper element
+ * @method
+ * @memberof Popper.modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @returns {Object} The same data object
+ */
+ Popper.prototype.modifiers.applyStyle = function(data) {
+ // apply the final offsets to the popper
+ // NOTE: 1 DOM access here
+ var styles = {
+ position: data.offsets.popper.position
+ };
+
+ // round top and left to avoid blurry text
+ var left = Math.round(data.offsets.popper.left);
+ var top = Math.round(data.offsets.popper.top);
+
+ // if gpuAcceleration is set to true and transform is supported, we use `translate3d` to apply the position to the popper
+ // we automatically use the supported prefixed version if needed
+ var prefixedProperty;
+ if (this._options.gpuAcceleration && (prefixedProperty = getSupportedPropertyName('transform'))) {
+ styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
+ styles.top = 0;
+ styles.left = 0;
+ }
+ // othwerise, we use the standard `left` and `top` properties
+ else {
+ styles.left =left;
+ styles.top = top;
+ }
+
+ // any property present in `data.styles` will be applied to the popper,
+ // in this way we can make the 3rd party modifiers add custom styles to it
+ // Be aware, modifiers could override the properties defined in the previous
+ // lines of this modifier!
+ Object.assign(styles, data.styles);
+
+ setStyle(this._popper, styles);
+
+ // set an attribute which will be useful to style the tooltip (use it to properly position its arrow)
+ // NOTE: 1 DOM access here
+ this._popper.setAttribute('x-placement', data.placement);
+
+ // if the arrow modifier is required and the arrow style has been computed, apply the arrow style
+ if (this.isModifierRequired(this.modifiers.applyStyle, this.modifiers.arrow) && data.offsets.arrow) {
+ setStyle(data.arrowElement, data.offsets.arrow);
+ }
+
+ return data;
+ };
+
+ /**
+ * Modifier used to shift the popper on the start or end of its reference element side
+ * @method
+ * @memberof Popper.modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @returns {Object} The data object, properly modified
+ */
+ Popper.prototype.modifiers.shift = function(data) {
+ var placement = data.placement;
+ var basePlacement = placement.split('-')[0];
+ var shiftVariation = placement.split('-')[1];
+
+ // if shift shiftVariation is specified, run the modifier
+ if (shiftVariation) {
+ var reference = data.offsets.reference;
+ var popper = getPopperClientRect(data.offsets.popper);
+
+ var shiftOffsets = {
+ y: {
+ start: { top: reference.top },
+ end: { top: reference.top + reference.height - popper.height }
+ },
+ x: {
+ start: { left: reference.left },
+ end: { left: reference.left + reference.width - popper.width }
+ }
+ };
+
+ var axis = ['bottom', 'top'].indexOf(basePlacement) !== -1 ? 'x' : 'y';
+
+ data.offsets.popper = Object.assign(popper, shiftOffsets[axis][shiftVariation]);
+ }
+
+ return data;
+ };
+
+
+ /**
+ * Modifier used to make sure the popper does not overflows from it's boundaries
+ * @method
+ * @memberof Popper.modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @returns {Object} The data object, properly modified
+ */
+ Popper.prototype.modifiers.preventOverflow = function(data) {
+ var order = this._options.preventOverflowOrder;
+ var popper = getPopperClientRect(data.offsets.popper);
+
+ var check = {
+ left: function() {
+ var left = popper.left;
+ if (popper.left < data.boundaries.left) {
+ left = Math.max(popper.left, data.boundaries.left);
+ }
+ return { left: left };
+ },
+ right: function() {
+ var left = popper.left;
+ if (popper.right > data.boundaries.right) {
+ left = Math.min(popper.left, data.boundaries.right - popper.width);
+ }
+ return { left: left };
+ },
+ top: function() {
+ var top = popper.top;
+ if (popper.top < data.boundaries.top) {
+ top = Math.max(popper.top, data.boundaries.top);
+ }
+ return { top: top };
+ },
+ bottom: function() {
+ var top = popper.top;
+ if (popper.bottom > data.boundaries.bottom) {
+ top = Math.min(popper.top, data.boundaries.bottom - popper.height);
+ }
+ return { top: top };
+ }
+ };
+
+ order.forEach(function(direction) {
+ data.offsets.popper = Object.assign(popper, check[direction]());
+ });
+
+ return data;
+ };
+
+ /**
+ * Modifier used to make sure the popper is always near its reference
+ * @method
+ * @memberof Popper.modifiers
+ * @argument {Object} data - The data object generated by _update method
+ * @returns {Object} The data object, properly modified
+ */
+ Popper.prototype.modifiers.keepTogether = function(data) {
+ var popper = getPopperClientRect(data.offsets.popper);
+ var reference = data.offsets.reference;
+ var f = Math.floor;
+
+ if (popper.right < f(reference.left)) {
+ data.offsets.popper.left = f(reference.left) - popper.width;
+ }
+ if (popper.left > f(reference.right)) {
+ data.offsets.popper.left = f(reference.right);
+ }
+ if (popper.bottom < f(reference.top)) {
+ data.offsets.popper.top = f(reference.top) - popper.height;
+ }
+ if (popper.top > f(reference.bottom)) {
+ data.offsets.popper.top = f(reference.bottom);
+ }
+
+ return data;
+ };
+
+ /**
+ * Modifier used to flip the placement of the popper when the latter is starting overlapping its reference element.
+ * Requires the `preventOverflow` modifier before it in order to work.
+ * **NOTE:** This modifier will run all its previous modifiers everytime it tries to flip the popper!
+ * @method
+ * @memberof Popper.modifiers
+ * @argument {Object} data - The data object generated by _update method
+ * @returns {Object} The data object, properly modified
+ */
+ Popper.prototype.modifiers.flip = function(data) {
+ // check if preventOverflow is in the list of modifiers before the flip modifier.
+ // otherwise flip would not work as expected.
+ if (!this.isModifierRequired(this.modifiers.flip, this.modifiers.preventOverflow)) {
+ console.warn('WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!');
+ return data;
+ }
+
+ if (data.flipped && data.placement === data._originalPlacement) {
+ // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
+ return data;
+ }
+
+ var placement = data.placement.split('-')[0];
+ var placementOpposite = getOppositePlacement(placement);
+ var variation = data.placement.split('-')[1] || '';
+
+ var flipOrder = [];
+ if(this._options.flipBehavior === 'flip') {
+ flipOrder = [
+ placement,
+ placementOpposite
+ ];
+ } else {
+ flipOrder = this._options.flipBehavior;
+ }
+
+ flipOrder.forEach(function(step, index) {
+ if (placement !== step || flipOrder.length === index + 1) {
+ return;
+ }
+
+ placement = data.placement.split('-')[0];
+ placementOpposite = getOppositePlacement(placement);
+
+ var popperOffsets = getPopperClientRect(data.offsets.popper);
+
+ // this boolean is used to distinguish right and bottom from top and left
+ // they need different computations to get flipped
+ var a = ['right', 'bottom'].indexOf(placement) !== -1;
+
+ // using Math.floor because the reference offsets may contain decimals we are not going to consider here
+ if (
+ a && Math.floor(data.offsets.reference[placement]) > Math.floor(popperOffsets[placementOpposite]) ||
+ !a && Math.floor(data.offsets.reference[placement]) < Math.floor(popperOffsets[placementOpposite])
+ ) {
+ // we'll use this boolean to detect any flip loop
+ data.flipped = true;
+ data.placement = flipOrder[index + 1];
+ if (variation) {
+ data.placement += '-' + variation;
+ }
+ data.offsets.popper = this._getOffsets(this._popper, this._reference, data.placement).popper;
+
+ data = this.runModifiers(data, this._options.modifiers, this._flip);
+ }
+ }.bind(this));
+ return data;
+ };
+
+ /**
+ * Modifier used to add an offset to the popper, useful if you more granularity positioning your popper.
+ * The offsets will shift the popper on the side of its reference element.
+ * @method
+ * @memberof Popper.modifiers
+ * @argument {Object} data - The data object generated by _update method
+ * @returns {Object} The data object, properly modified
+ */
+ Popper.prototype.modifiers.offset = function(data) {
+ var offset = this._options.offset;
+ var popper = data.offsets.popper;
+
+ if (data.placement.indexOf('left') !== -1) {
+ popper.top -= offset;
+ }
+ else if (data.placement.indexOf('right') !== -1) {
+ popper.top += offset;
+ }
+ else if (data.placement.indexOf('top') !== -1) {
+ popper.left -= offset;
+ }
+ else if (data.placement.indexOf('bottom') !== -1) {
+ popper.left += offset;
+ }
+ return data;
+ };
+
+ /**
+ * Modifier used to move the arrows on the edge of the popper to make sure them are always between the popper and the reference element
+ * It will use the CSS outer size of the arrow element to know how many pixels of conjuction are needed
+ * @method
+ * @memberof Popper.modifiers
+ * @argument {Object} data - The data object generated by _update method
+ * @returns {Object} The data object, properly modified
+ */
+ Popper.prototype.modifiers.arrow = function(data) {
+ var arrow = this._options.arrowElement;
+ var arrowOffset = this._options.arrowOffset;
+
+ // if the arrowElement is a string, suppose it's a CSS selector
+ if (typeof arrow === 'string') {
+ arrow = this._popper.querySelector(arrow);
+ }
+
+ // if arrow element is not found, don't run the modifier
+ if (!arrow) {
+ return data;
+ }
+
+ // the arrow element must be child of its popper
+ if (!this._popper.contains(arrow)) {
+ console.warn('WARNING: `arrowElement` must be child of its popper element!');
+ return data;
+ }
+
+ // arrow depends on keepTogether in order to work
+ if (!this.isModifierRequired(this.modifiers.arrow, this.modifiers.keepTogether)) {
+ console.warn('WARNING: keepTogether modifier is required by arrow modifier in order to work, be sure to include it before arrow!');
+ return data;
+ }
+
+ var arrowStyle = {};
+ var placement = data.placement.split('-')[0];
+ var popper = getPopperClientRect(data.offsets.popper);
+ var reference = data.offsets.reference;
+ var isVertical = ['left', 'right'].indexOf(placement) !== -1;
+
+ var len = isVertical ? 'height' : 'width';
+ var side = isVertical ? 'top' : 'left';
+ var translate = isVertical ? 'translateY' : 'translateX';
+ var altSide = isVertical ? 'left' : 'top';
+ var opSide = isVertical ? 'bottom' : 'right';
+ var arrowSize = getOuterSizes(arrow)[len];
+
+ //
+ // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction
+ //
+
+ // top/left side
+ if (reference[opSide] - arrowSize < popper[side]) {
+ data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowSize);
+ }
+ // bottom/right side
+ if (reference[side] + arrowSize > popper[opSide]) {
+ data.offsets.popper[side] += (reference[side] + arrowSize) - popper[opSide];
+ }
+
+ // compute center of the popper
+ var center = reference[side] + (arrowOffset || (reference[len] / 2) - (arrowSize / 2));
+
+ var sideValue = center - popper[side];
+
+ // prevent arrow from being placed not contiguously to its popper
+ sideValue = Math.max(Math.min(popper[len] - arrowSize - 8, sideValue), 8);
+ arrowStyle[side] = sideValue;
+ arrowStyle[altSide] = ''; // make sure to remove any old style from the arrow
+
+ data.offsets.arrow = arrowStyle;
+ data.arrowElement = arrow;
+
+ return data;
+ };
+
+
+ //
+ // Helpers
+ //
+
+ /**
+ * Get the outer sizes of the given element (offset size + margins)
+ * @function
+ * @ignore
+ * @argument {Element} element
+ * @returns {Object} object containing width and height properties
+ */
+ function getOuterSizes(element) {
+ // NOTE: 1 DOM access here
+ var _display = element.style.display, _visibility = element.style.visibility;
+ element.style.display = 'block'; element.style.visibility = 'hidden';
+ var calcWidthToForceRepaint = element.offsetWidth;
+
+ // original method
+ var styles = root.getComputedStyle(element);
+ var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
+ var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
+ var result = { width: element.offsetWidth + y, height: element.offsetHeight + x };
+
+ // reset element styles
+ element.style.display = _display; element.style.visibility = _visibility;
+ return result;
+ }
+
+ /**
+ * Get the opposite placement of the given one/
+ * @function
+ * @ignore
+ * @argument {String} placement
+ * @returns {String} flipped placement
+ */
+ function getOppositePlacement(placement) {
+ var hash = {left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+ return placement.replace(/left|right|bottom|top/g, function(matched){
+ return hash[matched];
+ });
+ }
+
+ /**
+ * Given the popper offsets, generate an output similar to getBoundingClientRect
+ * @function
+ * @ignore
+ * @argument {Object} popperOffsets
+ * @returns {Object} ClientRect like output
+ */
+ function getPopperClientRect(popperOffsets) {
+ var offsets = Object.assign({}, popperOffsets);
+ offsets.right = offsets.left + offsets.width;
+ offsets.bottom = offsets.top + offsets.height;
+ return offsets;
+ }
+
+ /**
+ * Given an array and the key to find, returns its index
+ * @function
+ * @ignore
+ * @argument {Array} arr
+ * @argument keyToFind
+ * @returns index or null
+ */
+ function getArrayKeyIndex(arr, keyToFind) {
+ var i = 0, key;
+ for (key in arr) {
+ if (arr[key] === keyToFind) {
+ return i;
+ }
+ i++;
+ }
+ return null;
+ }
+
+ /**
+ * Get CSS computed property of the given element
+ * @function
+ * @ignore
+ * @argument {Eement} element
+ * @argument {String} property
+ */
+ function getStyleComputedProperty(element, property) {
+ // NOTE: 1 DOM access here
+ var css = root.getComputedStyle(element, null);
+ return css[property];
+ }
+
+ /**
+ * Returns the offset parent of the given element
+ * @function
+ * @ignore
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+ function getOffsetParent(element) {
+ // NOTE: 1 DOM access here
+ var offsetParent = element.offsetParent;
+ return offsetParent === root.document.body || !offsetParent ? root.document.documentElement : offsetParent;
+ }
+
+ /**
+ * Returns the scrolling parent of the given element
+ * @function
+ * @ignore
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+ function getScrollParent(element) {
+ var parent = element.parentNode;
+
+ if (!parent) {
+ return element;
+ }
+
+ if (parent === root.document) {
+ // Firefox puts the scrollTOp value on `documentElement` instead of `body`, we then check which of them is
+ // greater than 0 and return the proper element
+ if (root.document.body.scrollTop || root.document.body.scrollLeft) {
+ return root.document.body;
+ } else {
+ return root.document.documentElement;
+ }
+ }
+
+ // Firefox want us to check `-x` and `-y` variations as well
+ if (
+ ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow')) !== -1 ||
+ ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-x')) !== -1 ||
+ ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-y')) !== -1
+ ) {
+ // If the detected scrollParent is body, we perform an additional check on its parentNode
+ // in this way we'll get body if the browser is Chrome-ish, or documentElement otherwise
+ // fixes issue #65
+ return parent;
+ }
+ return getScrollParent(element.parentNode);
+ }
+
+ /**
+ * Check if the given element is fixed or is inside a fixed parent
+ * @function
+ * @ignore
+ * @argument {Element} element
+ * @argument {Element} customContainer
+ * @returns {Boolean} answer to "isFixed?"
+ */
+ function isFixed(element) {
+ if (element === root.document.body) {
+ return false;
+ }
+ if (getStyleComputedProperty(element, 'position') === 'fixed') {
+ return true;
+ }
+ return element.parentNode ? isFixed(element.parentNode) : element;
+ }
+
+ /**
+ * Set the style to the given popper
+ * @function
+ * @ignore
+ * @argument {Element} element - Element to apply the style to
+ * @argument {Object} styles - Object with a list of properties and values which will be applied to the element
+ */
+ function setStyle(element, styles) {
+ function is_numeric(n) {
+ return (n !== '' && !isNaN(parseFloat(n)) && isFinite(n));
+ }
+ Object.keys(styles).forEach(function(prop) {
+ var unit = '';
+ // add unit if the value is numeric and is one of the following
+ if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && is_numeric(styles[prop])) {
+ unit = 'px';
+ }
+ element.style[prop] = styles[prop] + unit;
+ });
+ }
+
+ /**
+ * Check if the given variable is a function
+ * @function
+ * @ignore
+ * @argument {*} functionToCheck - variable to check
+ * @returns {Boolean} answer to: is a function?
+ */
+ function isFunction(functionToCheck) {
+ var getType = {};
+ return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
+ }
+
+ /**
+ * Get the position of the given element, relative to its offset parent
+ * @function
+ * @ignore
+ * @param {Element} element
+ * @return {Object} position - Coordinates of the element and its `scrollTop`
+ */
+ function getOffsetRect(element) {
+ var elementRect = {
+ width: element.offsetWidth,
+ height: element.offsetHeight,
+ left: element.offsetLeft,
+ top: element.offsetTop
+ };
+
+ elementRect.right = elementRect.left + elementRect.width;
+ elementRect.bottom = elementRect.top + elementRect.height;
+
+ // position
+ return elementRect;
+ }
+
+ /**
+ * Get bounding client rect of given element
+ * @function
+ * @ignore
+ * @param {HTMLElement} element
+ * @return {Object} client rect
+ */
+ function getBoundingClientRect(element) {
+ var rect = element.getBoundingClientRect();
+
+ // whether the IE version is lower than 11
+ var isIE = navigator.userAgent.indexOf("MSIE") != -1;
+
+ // fix ie document bounding top always 0 bug
+ var rectTop = isIE && element.tagName === 'HTML'
+ ? -element.scrollTop
+ : rect.top;
+
+ return {
+ left: rect.left,
+ top: rectTop,
+ right: rect.right,
+ bottom: rect.bottom,
+ width: rect.right - rect.left,
+ height: rect.bottom - rectTop
+ };
+ }
+
+ /**
+ * Given an element and one of its parents, return the offset
+ * @function
+ * @ignore
+ * @param {HTMLElement} element
+ * @param {HTMLElement} parent
+ * @return {Object} rect
+ */
+ function getOffsetRectRelativeToCustomParent(element, parent, fixed) {
+ var elementRect = getBoundingClientRect(element);
+ var parentRect = getBoundingClientRect(parent);
+
+ if (fixed) {
+ var scrollParent = getScrollParent(parent);
+ parentRect.top += scrollParent.scrollTop;
+ parentRect.bottom += scrollParent.scrollTop;
+ parentRect.left += scrollParent.scrollLeft;
+ parentRect.right += scrollParent.scrollLeft;
+ }
+
+ var rect = {
+ top: elementRect.top - parentRect.top ,
+ left: elementRect.left - parentRect.left ,
+ bottom: (elementRect.top - parentRect.top) + elementRect.height,
+ right: (elementRect.left - parentRect.left) + elementRect.width,
+ width: elementRect.width,
+ height: elementRect.height
+ };
+ return rect;
+ }
+
+ /**
+ * Get the prefixed supported property name
+ * @function
+ * @ignore
+ * @argument {String} property (camelCase)
+ * @returns {String} prefixed property (camelCase)
+ */
+ function getSupportedPropertyName(property) {
+ var prefixes = ['', 'ms', 'webkit', 'moz', 'o'];
+
+ for (var i = 0; i < prefixes.length; i++) {
+ var toCheck = prefixes[i] ? prefixes[i] + property.charAt(0).toUpperCase() + property.slice(1) : property;
+ if (typeof root.document.body.style[toCheck] !== 'undefined') {
+ return toCheck;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * The Object.assign() method is used to copy the values of all enumerable own properties from one or more source
+ * objects to a target object. It will return the target object.
+ * This polyfill doesn't support symbol properties, since ES5 doesn't have symbols anyway
+ * Source: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
+ * @function
+ * @ignore
+ */
+ if (!Object.assign) {
+ Object.defineProperty(Object, 'assign', {
+ enumerable: false,
+ configurable: true,
+ writable: true,
+ value: function(target) {
+ if (target === undefined || target === null) {
+ throw new TypeError('Cannot convert first argument to object');
+ }
+
+ var to = Object(target);
+ for (var i = 1; i < arguments.length; i++) {
+ var nextSource = arguments[i];
+ if (nextSource === undefined || nextSource === null) {
+ continue;
+ }
+ nextSource = Object(nextSource);
+
+ var keysArray = Object.keys(nextSource);
+ for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
+ var nextKey = keysArray[nextIndex];
+ var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
+ if (desc !== undefined && desc.enumerable) {
+ to[nextKey] = nextSource[nextKey];
+ }
+ }
+ }
+ return to;
+ }
+ });
+ }
+
+ return Popper;
+}));
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popup/index.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popup/index.js
new file mode 100644
index 0000000..8156b2d
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popup/index.js
@@ -0,0 +1,226 @@
+import Vue from 'vue';
+import merge from 'element-ui/src/utils/merge';
+import PopupManager from 'element-ui/src/utils/popup/popup-manager';
+import getScrollBarWidth from '../scrollbar-width';
+import { getStyle, addClass, removeClass, hasClass } from '../dom';
+
+let idSeed = 1;
+
+let scrollBarWidth;
+
+const getDOM = function(dom) {
+ if (dom.nodeType === 3) {
+ dom = dom.nextElementSibling || dom.nextSibling;
+ getDOM(dom);
+ }
+ return dom;
+};
+
+export default {
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ openDelay: {},
+ closeDelay: {},
+ zIndex: {},
+ modal: {
+ type: Boolean,
+ default: false
+ },
+ modalFade: {
+ type: Boolean,
+ default: true
+ },
+ modalClass: {},
+ modalAppendToBody: {
+ type: Boolean,
+ default: false
+ },
+ lockScroll: {
+ type: Boolean,
+ default: true
+ },
+ closeOnPressEscape: {
+ type: Boolean,
+ default: false
+ },
+ closeOnClickModal: {
+ type: Boolean,
+ default: false
+ }
+ },
+
+ beforeMount() {
+ this._popupId = 'popup-' + idSeed++;
+ PopupManager.register(this._popupId, this);
+ },
+
+ beforeDestroy() {
+ PopupManager.deregister(this._popupId);
+ PopupManager.closeModal(this._popupId);
+
+ this.restoreBodyStyle();
+ },
+
+ data() {
+ return {
+ opened: false,
+ bodyPaddingRight: null,
+ computedBodyPaddingRight: 0,
+ withoutHiddenClass: true,
+ rendered: false
+ };
+ },
+
+ watch: {
+ visible(val) {
+ if (val) {
+ if (this._opening) return;
+ if (!this.rendered) {
+ this.rendered = true;
+ Vue.nextTick(() => {
+ this.open();
+ });
+ } else {
+ this.open();
+ }
+ } else {
+ this.close();
+ }
+ }
+ },
+
+ methods: {
+ open(options) {
+ if (!this.rendered) {
+ this.rendered = true;
+ }
+
+ const props = merge({}, this.$props || this, options);
+
+ if (this._closeTimer) {
+ clearTimeout(this._closeTimer);
+ this._closeTimer = null;
+ }
+ clearTimeout(this._openTimer);
+
+ const openDelay = Number(props.openDelay);
+ if (openDelay > 0) {
+ this._openTimer = setTimeout(() => {
+ this._openTimer = null;
+ this.doOpen(props);
+ }, openDelay);
+ } else {
+ this.doOpen(props);
+ }
+ },
+
+ doOpen(props) {
+ if (this.$isServer) return;
+ if (this.willOpen && !this.willOpen()) return;
+ if (this.opened) return;
+
+ this._opening = true;
+
+ const dom = getDOM(this.$el);
+
+ const modal = props.modal;
+
+ const zIndex = props.zIndex;
+ if (zIndex) {
+ PopupManager.zIndex = zIndex;
+ }
+
+ if (modal) {
+ if (this._closing) {
+ PopupManager.closeModal(this._popupId);
+ this._closing = false;
+ }
+ PopupManager.openModal(this._popupId, PopupManager.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);
+ if (props.lockScroll) {
+ this.withoutHiddenClass = !hasClass(document.body, 'el-popup-parent--hidden');
+ if (this.withoutHiddenClass) {
+ this.bodyPaddingRight = document.body.style.paddingRight;
+ this.computedBodyPaddingRight = parseInt(getStyle(document.body, 'paddingRight'), 10);
+ }
+ scrollBarWidth = getScrollBarWidth();
+ let bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;
+ let bodyOverflowY = getStyle(document.body, 'overflowY');
+ if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && this.withoutHiddenClass) {
+ document.body.style.paddingRight = this.computedBodyPaddingRight + scrollBarWidth + 'px';
+ }
+ addClass(document.body, 'el-popup-parent--hidden');
+ }
+ }
+
+ if (getComputedStyle(dom).position === 'static') {
+ dom.style.position = 'absolute';
+ }
+
+ dom.style.zIndex = PopupManager.nextZIndex();
+ this.opened = true;
+
+ this.onOpen && this.onOpen();
+
+ this.doAfterOpen();
+ },
+
+ doAfterOpen() {
+ this._opening = false;
+ },
+
+ close() {
+ if (this.willClose && !this.willClose()) return;
+
+ if (this._openTimer !== null) {
+ clearTimeout(this._openTimer);
+ this._openTimer = null;
+ }
+ clearTimeout(this._closeTimer);
+
+ const closeDelay = Number(this.closeDelay);
+
+ if (closeDelay > 0) {
+ this._closeTimer = setTimeout(() => {
+ this._closeTimer = null;
+ this.doClose();
+ }, closeDelay);
+ } else {
+ this.doClose();
+ }
+ },
+
+ doClose() {
+ this._closing = true;
+
+ this.onClose && this.onClose();
+
+ if (this.lockScroll) {
+ setTimeout(this.restoreBodyStyle, 200);
+ }
+
+ this.opened = false;
+
+ this.doAfterClose();
+ },
+
+ doAfterClose() {
+ PopupManager.closeModal(this._popupId);
+ this._closing = false;
+ },
+
+ restoreBodyStyle() {
+ if (this.modal && this.withoutHiddenClass) {
+ document.body.style.paddingRight = this.bodyPaddingRight;
+ removeClass(document.body, 'el-popup-parent--hidden');
+ }
+ this.withoutHiddenClass = true;
+ }
+ }
+};
+
+export {
+ PopupManager
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popup/popup-manager.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popup/popup-manager.js
new file mode 100644
index 0000000..2d18ef1
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/popup/popup-manager.js
@@ -0,0 +1,194 @@
+import Vue from 'vue';
+import { addClass, removeClass } from 'element-ui/src/utils/dom';
+
+let hasModal = false;
+let hasInitZIndex = false;
+let zIndex = 2000;
+
+const getModal = function() {
+ if (Vue.prototype.$isServer) return;
+ let modalDom = PopupManager.modalDom;
+ if (modalDom) {
+ hasModal = true;
+ } else {
+ hasModal = false;
+ modalDom = document.createElement('div');
+ PopupManager.modalDom = modalDom;
+
+ modalDom.addEventListener('touchmove', function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ });
+
+ modalDom.addEventListener('click', function() {
+ PopupManager.doOnModalClick && PopupManager.doOnModalClick();
+ });
+ }
+
+ return modalDom;
+};
+
+const instances = {};
+
+const PopupManager = {
+ modalFade: true,
+
+ getInstance: function(id) {
+ return instances[id];
+ },
+
+ register: function(id, instance) {
+ if (id && instance) {
+ instances[id] = instance;
+ }
+ },
+
+ deregister: function(id) {
+ if (id) {
+ instances[id] = null;
+ delete instances[id];
+ }
+ },
+
+ nextZIndex: function() {
+ return PopupManager.zIndex++;
+ },
+
+ modalStack: [],
+
+ doOnModalClick: function() {
+ const topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1];
+ if (!topItem) return;
+
+ const instance = PopupManager.getInstance(topItem.id);
+ if (instance && instance.closeOnClickModal) {
+ instance.close();
+ }
+ },
+
+ openModal: function(id, zIndex, dom, modalClass, modalFade) {
+ if (Vue.prototype.$isServer) return;
+ if (!id || zIndex === undefined) return;
+ this.modalFade = modalFade;
+
+ const modalStack = this.modalStack;
+
+ for (let i = 0, j = modalStack.length; i < j; i++) {
+ const item = modalStack[i];
+ if (item.id === id) {
+ return;
+ }
+ }
+
+ const modalDom = getModal();
+
+ addClass(modalDom, 'v-modal');
+ if (this.modalFade && !hasModal) {
+ addClass(modalDom, 'v-modal-enter');
+ }
+ if (modalClass) {
+ let classArr = modalClass.trim().split(/\s+/);
+ classArr.forEach(item => addClass(modalDom, item));
+ }
+ setTimeout(() => {
+ removeClass(modalDom, 'v-modal-enter');
+ }, 200);
+
+ if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {
+ dom.parentNode.appendChild(modalDom);
+ } else {
+ document.body.appendChild(modalDom);
+ }
+
+ if (zIndex) {
+ modalDom.style.zIndex = zIndex;
+ }
+ modalDom.tabIndex = 0;
+ modalDom.style.display = '';
+
+ this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass });
+ },
+
+ closeModal: function(id) {
+ const modalStack = this.modalStack;
+ const modalDom = getModal();
+
+ if (modalStack.length > 0) {
+ const topItem = modalStack[modalStack.length - 1];
+ if (topItem.id === id) {
+ if (topItem.modalClass) {
+ let classArr = topItem.modalClass.trim().split(/\s+/);
+ classArr.forEach(item => removeClass(modalDom, item));
+ }
+
+ modalStack.pop();
+ if (modalStack.length > 0) {
+ modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;
+ }
+ } else {
+ for (let i = modalStack.length - 1; i >= 0; i--) {
+ if (modalStack[i].id === id) {
+ modalStack.splice(i, 1);
+ break;
+ }
+ }
+ }
+ }
+
+ if (modalStack.length === 0) {
+ if (this.modalFade) {
+ addClass(modalDom, 'v-modal-leave');
+ }
+ setTimeout(() => {
+ if (modalStack.length === 0) {
+ if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom);
+ modalDom.style.display = 'none';
+ PopupManager.modalDom = undefined;
+ }
+ removeClass(modalDom, 'v-modal-leave');
+ }, 200);
+ }
+ }
+};
+
+Object.defineProperty(PopupManager, 'zIndex', {
+ configurable: true,
+ get() {
+ if (!hasInitZIndex) {
+ zIndex = (Vue.prototype.$ELEMENT || {}).zIndex || zIndex;
+ hasInitZIndex = true;
+ }
+ return zIndex;
+ },
+ set(value) {
+ zIndex = value;
+ }
+});
+
+const getTopPopup = function() {
+ if (Vue.prototype.$isServer) return;
+ if (PopupManager.modalStack.length > 0) {
+ const topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1];
+ if (!topPopup) return;
+ const instance = PopupManager.getInstance(topPopup.id);
+
+ return instance;
+ }
+};
+
+if (!Vue.prototype.$isServer) {
+ // handle `esc` key when the popup is shown
+ window.addEventListener('keydown', function(event) {
+ if (event.keyCode === 27) {
+ const topPopup = getTopPopup();
+
+ if (topPopup && topPopup.closeOnPressEscape) {
+ topPopup.handleClose
+ ? topPopup.handleClose()
+ : (topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close());
+ }
+ }
+ });
+}
+
+export default PopupManager;
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/resize-event.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/resize-event.js
new file mode 100644
index 0000000..cd130ba
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/resize-event.js
@@ -0,0 +1,35 @@
+import ResizeObserver from 'resize-observer-polyfill';
+
+const isServer = typeof window === 'undefined';
+
+/* istanbul ignore next */
+const resizeHandler = function(entries) {
+ for (let entry of entries) {
+ const listeners = entry.target.__resizeListeners__ || [];
+ if (listeners.length) {
+ listeners.forEach(fn => {
+ fn();
+ });
+ }
+ }
+};
+
+/* istanbul ignore next */
+export const addResizeListener = function(element, fn) {
+ if (isServer) return;
+ if (!element.__resizeListeners__) {
+ element.__resizeListeners__ = [];
+ element.__ro__ = new ResizeObserver(resizeHandler);
+ element.__ro__.observe(element);
+ }
+ element.__resizeListeners__.push(fn);
+};
+
+/* istanbul ignore next */
+export const removeResizeListener = function(element, fn) {
+ if (!element || !element.__resizeListeners__) return;
+ element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
+ if (!element.__resizeListeners__.length) {
+ element.__ro__.disconnect();
+ }
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/scroll-into-view.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/scroll-into-view.js
new file mode 100644
index 0000000..6d5b692
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/scroll-into-view.js
@@ -0,0 +1,27 @@
+import Vue from 'vue';
+
+export default function scrollIntoView(container, selected) {
+ if (Vue.prototype.$isServer) return;
+
+ if (!selected) {
+ container.scrollTop = 0;
+ return;
+ }
+
+ const offsetParents = [];
+ let pointer = selected.offsetParent;
+ while (pointer && container !== pointer && container.contains(pointer)) {
+ offsetParents.push(pointer);
+ pointer = pointer.offsetParent;
+ }
+ const top = selected.offsetTop + offsetParents.reduce((prev, curr) => (prev + curr.offsetTop), 0);
+ const bottom = top + selected.offsetHeight;
+ const viewRectTop = container.scrollTop;
+ const viewRectBottom = viewRectTop + container.clientHeight;
+
+ if (top < viewRectTop) {
+ container.scrollTop = top;
+ } else if (bottom > viewRectBottom) {
+ container.scrollTop = bottom - container.clientHeight;
+ }
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/scrollbar-width.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/scrollbar-width.js
new file mode 100644
index 0000000..bbaa925
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/scrollbar-width.js
@@ -0,0 +1,29 @@
+import Vue from 'vue';
+
+let scrollBarWidth;
+
+export default function() {
+ if (Vue.prototype.$isServer) return 0;
+ if (scrollBarWidth !== undefined) return scrollBarWidth;
+
+ const outer = document.createElement('div');
+ outer.className = 'el-scrollbar__wrap';
+ outer.style.visibility = 'hidden';
+ outer.style.width = '100px';
+ outer.style.position = 'absolute';
+ outer.style.top = '-9999px';
+ document.body.appendChild(outer);
+
+ const widthNoScroll = outer.offsetWidth;
+ outer.style.overflow = 'scroll';
+
+ const inner = document.createElement('div');
+ inner.style.width = '100%';
+ outer.appendChild(inner);
+
+ const widthWithScroll = inner.offsetWidth;
+ outer.parentNode.removeChild(outer);
+ scrollBarWidth = widthNoScroll - widthWithScroll;
+
+ return scrollBarWidth;
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/shared.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/shared.js
new file mode 100644
index 0000000..3b1ea11
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/shared.js
@@ -0,0 +1,7 @@
+export function isDef(val) {
+ return val !== undefined && val !== null;
+}
+export function isKorean(text) {
+ const reg = /([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;
+ return reg.test(text);
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/util.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/util.js
new file mode 100644
index 0000000..1b9db5f
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/util.js
@@ -0,0 +1,122 @@
+import Vue from 'vue';
+
+const hasOwnProperty = Object.prototype.hasOwnProperty;
+
+export function noop() {};
+
+export function hasOwn(obj, key) {
+ return hasOwnProperty.call(obj, key);
+};
+
+function extend(to, _from) {
+ for (let key in _from) {
+ to[key] = _from[key];
+ }
+ return to;
+};
+
+export function toObject(arr) {
+ var res = {};
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i]) {
+ extend(res, arr[i]);
+ }
+ }
+ return res;
+};
+
+export const getValueByPath = function(object, prop) {
+ prop = prop || '';
+ const paths = prop.split('.');
+ let current = object;
+ let result = null;
+ for (let i = 0, j = paths.length; i < j; i++) {
+ const path = paths[i];
+ if (!current) break;
+
+ if (i === j - 1) {
+ result = current[path];
+ break;
+ }
+ current = current[path];
+ }
+ return result;
+};
+
+export function getPropByPath(obj, path, strict) {
+ let tempObj = obj;
+ path = path.replace(/\[(\w+)\]/g, '.$1');
+ path = path.replace(/^\./, '');
+
+ let keyArr = path.split('.');
+ let i = 0;
+ for (let len = keyArr.length; i < len - 1; ++i) {
+ if (!tempObj && !strict) break;
+ let key = keyArr[i];
+ if (key in tempObj) {
+ tempObj = tempObj[key];
+ } else {
+ if (strict) {
+ throw new Error('please transfer a valid prop path to form item!');
+ }
+ break;
+ }
+ }
+ return {
+ o: tempObj,
+ k: keyArr[i],
+ v: tempObj ? tempObj[keyArr[i]] : null
+ };
+};
+
+export const generateId = function() {
+ return Math.floor(Math.random() * 10000);
+};
+
+export const valueEquals = (a, b) => {
+ // see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
+ if (a === b) return true;
+ if (!(a instanceof Array)) return false;
+ if (!(b instanceof Array)) return false;
+ if (a.length !== b.length) return false;
+ for (let i = 0; i !== a.length; ++i) {
+ if (a[i] !== b[i]) return false;
+ }
+ return true;
+};
+
+export const escapeRegexpString = (value = '') => String(value).replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
+
+// TODO: use native Array.find, Array.findIndex when IE support is dropped
+export const arrayFindIndex = function(arr, pred) {
+ for (let i = 0; i !== arr.length; ++i) {
+ if (pred(arr[i])) {
+ return i;
+ }
+ }
+ return -1;
+};
+
+export const arrayFind = function(arr, pred) {
+ const idx = arrayFindIndex(arr, pred);
+ return idx !== -1 ? arr[idx] : undefined;
+};
+
+// coerce truthy value to array
+export const coerceTruthyValueToArray = function(val) {
+ if (Array.isArray(val)) {
+ return val;
+ } else if (val) {
+ return [val];
+ } else {
+ return [];
+ }
+};
+
+export const isIE = function() {
+ return !Vue.prototype.$isServer && !isNaN(Number(document.documentMode));
+};
+
+export const isEdge = function() {
+ return !Vue.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/vdom.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/vdom.js
new file mode 100644
index 0000000..7b6ee9d
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/vdom.js
@@ -0,0 +1,9 @@
+import { hasOwn } from 'element-ui/src/utils/util';
+
+export function isVNode(node) {
+ return node !== null && typeof node === 'object' && hasOwn(node, 'componentOptions');
+};
+
+export function getFirstComponentChild(children) {
+ return children && children.filter(c => c && c.tag)[0];
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/vue-popper.js b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/vue-popper.js
new file mode 100644
index 0000000..3826161
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/src/utils/vue-popper.js
@@ -0,0 +1,200 @@
+import Vue from 'vue';
+import {
+ PopupManager
+} from 'element-ui/src/utils/popup';
+
+const PopperJS = Vue.prototype.$isServer ? function() {} : require('./popper');
+const stop = e => e.stopPropagation();
+
+/**
+ * @param {HTMLElement} [reference=$refs.reference] - The reference element used to position the popper.
+ * @param {HTMLElement} [popper=$refs.popper] - The HTML element used as popper, or a configuration used to generate the popper.
+ * @param {String} [placement=button] - Placement of the popper accepted values: top(-start, -end), right(-start, -end), bottom(-start, -end), left(-start, -end)
+ * @param {Number} [offset=0] - Amount of pixels the popper will be shifted (can be negative).
+ * @param {Boolean} [visible=false] Visibility of the popup element.
+ * @param {Boolean} [visible-arrow=false] Visibility of the arrow, no style.
+ */
+export default {
+ props: {
+ transformOrigin: {
+ type: [Boolean, String],
+ default: true
+ },
+ placement: {
+ type: String,
+ default: 'bottom'
+ },
+ boundariesPadding: {
+ type: Number,
+ default: 5
+ },
+ reference: {},
+ popper: {},
+ offset: {
+ default: 0
+ },
+ value: Boolean,
+ visibleArrow: Boolean,
+ arrowOffset: {
+ type: Number,
+ default: 35
+ },
+ appendToBody: {
+ type: Boolean,
+ default: true
+ },
+ popperOptions: {
+ type: Object,
+ default() {
+ return {
+ gpuAcceleration: false
+ };
+ }
+ }
+ },
+
+ data() {
+ return {
+ showPopper: false,
+ currentPlacement: ''
+ };
+ },
+
+ watch: {
+ value: {
+ immediate: true,
+ handler(val) {
+ this.showPopper = val;
+ this.$emit('input', val);
+ }
+ },
+
+ showPopper(val) {
+ if (this.disabled) {
+ return;
+ }
+ val ? this.updatePopper() : this.destroyPopper();
+ this.$emit('input', val);
+ }
+ },
+
+ methods: {
+ createPopper() {
+ if (this.$isServer) return;
+ this.currentPlacement = this.currentPlacement || this.placement;
+ if (!/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement)) {
+ return;
+ }
+
+ const options = this.popperOptions;
+ const popper = this.popperElm = this.popperElm || this.popper || this.$refs.popper;
+ let reference = this.referenceElm = this.referenceElm || this.reference || this.$refs.reference;
+
+ if (!reference &&
+ this.$slots.reference &&
+ this.$slots.reference[0]) {
+ reference = this.referenceElm = this.$slots.reference[0].elm;
+ }
+
+ if (!popper || !reference) return;
+ if (this.visibleArrow) this.appendArrow(popper);
+ if (this.appendToBody) document.body.appendChild(this.popperElm);
+ if (this.popperJS && this.popperJS.destroy) {
+ this.popperJS.destroy();
+ }
+
+ options.placement = this.currentPlacement;
+ options.offset = this.offset;
+ options.arrowOffset = this.arrowOffset;
+ this.popperJS = new PopperJS(reference, popper, options);
+ this.popperJS.onCreate(_ => {
+ this.$emit('created', this);
+ this.resetTransformOrigin();
+ this.$nextTick(this.updatePopper);
+ });
+ if (typeof options.onUpdate === 'function') {
+ this.popperJS.onUpdate(options.onUpdate);
+ }
+ this.popperJS._popper.style.zIndex = PopupManager.nextZIndex();
+ this.popperElm.addEventListener('click', stop);
+ },
+
+ updatePopper() {
+ const popperJS = this.popperJS;
+ if (popperJS) {
+ popperJS.update();
+ if (popperJS._popper) {
+ popperJS._popper.style.zIndex = PopupManager.nextZIndex();
+ }
+ } else {
+ this.createPopper();
+ }
+ },
+
+ doDestroy(forceDestroy) {
+ /* istanbul ignore if */
+ if (!this.popperJS || (this.showPopper && !forceDestroy)) return;
+ this.popperJS.destroy();
+ this.popperJS = null;
+ },
+
+ destroyPopper() {
+ if (this.popperJS) {
+ this.resetTransformOrigin();
+ }
+ },
+
+ resetTransformOrigin() {
+ if (!this.transformOrigin) return;
+ let placementMap = {
+ top: 'bottom',
+ bottom: 'top',
+ left: 'right',
+ right: 'left'
+ };
+ let placement = this.popperJS._popper.getAttribute('x-placement').split('-')[0];
+ let origin = placementMap[placement];
+ this.popperJS._popper.style.transformOrigin = typeof this.transformOrigin === 'string'
+ ? this.transformOrigin
+ : ['top', 'bottom'].indexOf(placement) > -1 ? `center ${ origin }` : `${ origin } center`;
+ },
+
+ appendArrow(element) {
+ let hash;
+ if (this.appended) {
+ return;
+ }
+
+ this.appended = true;
+
+ for (let item in element.attributes) {
+ if (/^_v-/.test(element.attributes[item].name)) {
+ hash = element.attributes[item].name;
+ break;
+ }
+ }
+
+ const arrow = document.createElement('div');
+
+ if (hash) {
+ arrow.setAttribute(hash, '');
+ }
+ arrow.setAttribute('x-arrow', '');
+ arrow.className = 'popper__arrow';
+ element.appendChild(arrow);
+ }
+ },
+
+ beforeDestroy() {
+ this.doDestroy(true);
+ if (this.popperElm && this.popperElm.parentNode === document.body) {
+ this.popperElm.removeEventListener('click', stop);
+ document.body.removeChild(this.popperElm);
+ }
+ },
+
+ // call destroy in keep-alive mode
+ deactivated() {
+ this.$options.beforeDestroy[0].call(this);
+ }
+};
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/alert.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/alert.d.ts
new file mode 100644
index 0000000..374a580
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/alert.d.ts
@@ -0,0 +1,27 @@
+import { ElementUIComponent } from './component'
+
+export type AlertType = 'success' | 'warning' | 'info' | 'error'
+
+/** Alert Component */
+export declare class ElAlert extends ElementUIComponent {
+ /** Title */
+ title: string
+
+ /** Component type */
+ type: AlertType
+
+ /** Descriptive text. Can also be passed with the default slot */
+ description: string
+
+ /** If closable or not */
+ closable: boolean
+
+ /** whether to center the text */
+ center: boolean
+
+ /** Customized close button text */
+ closeText: string
+
+ /** If a type icon is displayed */
+ showIcon: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/aside.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/aside.d.ts
new file mode 100644
index 0000000..1d51fea
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/aside.d.ts
@@ -0,0 +1,7 @@
+import { ElementUIComponent } from './component'
+
+/** Aside Component */
+export declare class ElAside extends ElementUIComponent {
+ /** Width of the side section */
+ width: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/autocomplete.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/autocomplete.d.ts
new file mode 100644
index 0000000..a56e8f3
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/autocomplete.d.ts
@@ -0,0 +1,78 @@
+import { ElementUIComponent } from './component'
+
+export type SuggestionPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end'
+
+export interface FetchSuggestionsCallback {
+ /**
+ * Callback function used in fetch-suggestions function
+ *
+ * @param data Suggestions to use
+ */
+ (data: any[]): void
+}
+
+export interface FetchSuggestions {
+ /**
+ * The function passed into the fetch-suggestions property
+ *
+ * @param queryString Current value of the text input
+ * @param callback Callback function used to indicate that suggestions have completely fetched
+ */
+ (queryString: string, callback: FetchSuggestionsCallback): void
+}
+
+/** Autocomplete Component */
+export declare class ElAutocomplete extends ElementUIComponent {
+ /** The placeholder of Autocomplete */
+ placeholder: string
+
+ /** Whether to show clear button */
+ clearable: boolean
+
+ /** Whether Autocomplete is disabled */
+ disabled: boolean
+
+ /** Binding value */
+ value: string
+
+ /** Debounce delay when typing */
+ debounce: number
+
+ /** Placement of the popup menu */
+ placement: SuggestionPlacement
+
+ /** Name for the inner native input */
+ name: string
+
+ /** Key name of the input suggestion object for display */
+ valueKey: string
+
+ /** Whether to emit select event on enter when there is no autocomplete match */
+ selectWhenUnmatched: boolean
+
+ /** A method to fetch input suggestions. When suggestions are ready, invoke callback(data:[]) to return them to Autocomplete */
+ fetchSuggestions: FetchSuggestions
+
+ /** Custom class name for autocomplete's dropdown */
+ popperClass: string
+
+ /** Whether show suggestions when input focus */
+ triggerOnFocus: boolean
+
+ /** Prefix icon class */
+ prefixIcon: string
+
+ /** Suffix icon class */
+ suffixIcon: string
+
+ /** Whether to hide the loading icon in remote search */
+ hideLoading: boolean
+
+ /** Whether to append the dropdown to body */
+ popperAppendToBody: boolean
+
+ /**
+ * Focus the Input component
+ */
+ focus (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/badge.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/badge.d.ts
new file mode 100644
index 0000000..38e763f
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/badge.d.ts
@@ -0,0 +1,16 @@
+import { ElementUIComponent } from './component'
+
+/** Badge Component */
+export declare class ElBadge extends ElementUIComponent {
+ /** Display value */
+ value: string | number
+
+ /** Maximum value, shows '{max}+' when exceeded. Only works if `value` is a number */
+ max: number
+
+ /** If a little dot is displayed */
+ isDot: boolean
+
+ /** Hidden badge */
+ hidden: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/breadcrumb-item.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/breadcrumb-item.d.ts
new file mode 100644
index 0000000..fb55c25
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/breadcrumb-item.d.ts
@@ -0,0 +1,10 @@
+import { ElementUIComponent } from './component'
+
+/** Breadcrumb Item Component */
+export declare class ElBreadcrumbItem extends ElementUIComponent {
+ /** Target route of the link, same as to of vue-router */
+ to: string | object
+
+ /** If true, the navigation will not leave a history record */
+ replace: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/breadcrumb.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/breadcrumb.d.ts
new file mode 100644
index 0000000..24d5ef7
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/breadcrumb.d.ts
@@ -0,0 +1,10 @@
+import { ElementUIComponent } from './component'
+
+/** Displays the location of the current page, making it easier to browser back */
+export declare class ElBreadcrumb extends ElementUIComponent {
+ /** Separator character */
+ separator: string
+
+ /** Class name of the icon separator */
+ separatorClass: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/button-group.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/button-group.d.ts
new file mode 100644
index 0000000..e8738bd
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/button-group.d.ts
@@ -0,0 +1,4 @@
+import { ElementUIComponent } from './component'
+
+/** Button Group Component */
+export declare class ElButtonGroup extends ElementUIComponent {}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/button.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/button.d.ts
new file mode 100644
index 0000000..b81b8f6
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/button.d.ts
@@ -0,0 +1,37 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+/** Button type */
+export type ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text'
+
+/** Same as native button's type */
+export type ButtonNativeType = 'button' | 'submit' | 'reset' | 'menu'
+
+/** Button Component */
+export declare class ElButton extends ElementUIComponent {
+ /** Button size */
+ size: ElementUIComponentSize
+
+ /** Button type */
+ type: ButtonType
+
+ /** Determine whether it's a plain button */
+ plain: boolean
+
+ /** Determine whether it's a round button */
+ round: boolean
+
+ /** Determine whether it's loading */
+ loading: boolean
+
+ /** Disable the button */
+ disabled: boolean
+
+ /** Button icon, accepts an icon name of Element icon component */
+ icon: string
+
+ /** Same as native button's autofocus */
+ autofocus: boolean
+
+ /** Same as native button's type */
+ nativeType: ButtonNativeType
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/card.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/card.d.ts
new file mode 100644
index 0000000..7c5f122
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/card.d.ts
@@ -0,0 +1,26 @@
+import { VNode, VNodeDirective } from 'vue'
+import { ElementUIComponent } from './component'
+
+export interface CardSlots {
+ /** Content of the card */
+ default: VNode[],
+
+ /** Title of the card */
+ header: VNode[]
+
+ [key: string]: VNode[]
+}
+
+/** Integrate information in a card container */
+export declare class ElCard extends ElementUIComponent {
+ /** Title of the card */
+ header: string
+
+ /** CSS style of body */
+ bodyStyle: object
+
+ /** When to show card shadows */
+ shadow: string
+
+ $slots: CardSlots
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/carousel-item.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/carousel-item.d.ts
new file mode 100644
index 0000000..9ae7ce2
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/carousel-item.d.ts
@@ -0,0 +1,10 @@
+import { ElementUIComponent } from './component'
+
+/** Carousel Item Component */
+export declare class ElCarouselItem extends ElementUIComponent {
+ /** Name of the item, can be used in setActiveItem */
+ name: string
+
+ /** Text content for the corresponding indicator */
+ label: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/carousel.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/carousel.d.ts
new file mode 100644
index 0000000..04f5414
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/carousel.d.ts
@@ -0,0 +1,53 @@
+import { ElementUIComponent } from './component'
+
+export type CarouselIndicatorTrigger = 'hover' | 'click'
+export type CarouselIndicatorPosition = 'outside' | 'none'
+export type CarouselArrowVisibility = 'always' | 'hover' | 'never'
+export type CarouselType = 'card'
+
+/** Loop a series of images or texts in a limited space */
+export declare class ElCarousel extends ElementUIComponent {
+ /** Height of the carousel */
+ height: number
+
+ /** Index of the initially active slide (starting from 0) */
+ initialIndex: number
+
+ /** How indicators are triggered */
+ trigger: CarouselIndicatorTrigger
+
+ /** Whether automatically loop the slides */
+ autoplay: boolean
+
+ /** Interval of the auto loop, in milliseconds */
+ interval: number
+
+ /** Position of the indicators */
+ indicatorPosition: CarouselIndicatorPosition
+
+ /** When arrows are shown */
+ arrow: CarouselArrowVisibility
+
+ /** Type of the Carousel */
+ type: CarouselType
+
+ /**
+ * Manually switch slide by index
+ *
+ * @param index Index of the slide to be switched to (starting from 0)
+ */
+ setActiveItem (index: number): void
+
+ /**
+ * Manually switch slide by carousel item's name
+ *
+ * @param name The name of the corresponding `el-carousel-item`
+ */
+ setActiveItem (name: string): void
+
+ /** Switch to the previous slide */
+ prev (): void
+
+ /** Switch to the next slide */
+ next (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/cascader.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/cascader.d.ts
new file mode 100644
index 0000000..a602b6a
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/cascader.d.ts
@@ -0,0 +1,57 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+/** Trigger mode of expanding current item */
+export type ExpandTrigger = 'click' | 'hover'
+
+/** Cascader Option */
+export interface CascaderOption {
+ label: string,
+ value: any,
+ children: CascaderOption[],
+ disabled: boolean
+}
+
+/** Cascader Component */
+export declare class ElCascader extends ElementUIComponent {
+ /** Data of the options */
+ options: CascaderOption[]
+
+ /** Configuration options */
+ props: object
+
+ /** Selected value */
+ value: any[]
+
+ /** Custom class name for Cascader's dropdown */
+ popperClass: string
+
+ /** Input placeholder */
+ placeholder: string
+
+ /** Whether Cascader is disabled */
+ disabled: boolean
+
+ /** Whether selected value can be cleared */
+ clearable: boolean
+
+ /** Trigger mode of expanding current item */
+ expandTrigger: ExpandTrigger
+
+ /** Whether to display all levels of the selected value in the input */
+ showAllLevels: boolean
+
+ /** Whether the options can be searched */
+ filterable: boolean
+
+ /** Debounce delay when typing filter keyword, in millisecond */
+ debounce: number
+
+ /** Whether selecting an option of any level is permitted */
+ changeOnSelect: boolean
+
+ /** Size of Input */
+ size: ElementUIComponentSize
+
+ /** Hook function before filtering with the value to be filtered as its parameter */
+ beforeFilter: (value: string) => boolean | Promise
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox-button.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox-button.d.ts
new file mode 100644
index 0000000..dce7562
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox-button.d.ts
@@ -0,0 +1,22 @@
+import { ElementUIComponent } from './component'
+
+/** Checkbox Button Component */
+export declare class ElCheckboxButton extends ElementUIComponent {
+ /** Value of the checkbox when used inside a checkbox-group */
+ label: string | number | boolean
+
+ /** Value of the checkbox if it's checked */
+ trueLabel: string | number
+
+ /** Value of the checkbox if it's not checked */
+ falseLabel: string | number
+
+ /** Native 'name' attribute */
+ name: string
+
+ /** If the checkbox is disabled */
+ disabled: boolean
+
+ /** If the checkbox is checked */
+ checked: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox-group.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox-group.d.ts
new file mode 100644
index 0000000..250554c
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox-group.d.ts
@@ -0,0 +1,22 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+/** Checkbox Group Component */
+export declare class ElCheckboxGroup extends ElementUIComponent {
+ /** Size of checkbox buttons or bordered checkboxes */
+ size: ElementUIComponentSize
+
+ /** Whether the nesting checkboxes are disabled */
+ disabled: boolean
+
+ /** Minimum number of checkbox checked */
+ min: number
+
+ /** Maximum number of checkbox checked */
+ max: number
+
+ /** Font color when button is active */
+ textColor: string
+
+ /** Border and background color when button is active */
+ fill: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox.d.ts
new file mode 100644
index 0000000..aec7c57
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/checkbox.d.ts
@@ -0,0 +1,34 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+/** Checkbox Component */
+export declare class ElCheckbox extends ElementUIComponent {
+ /** The form input value */
+ value: string | string[]
+
+ /** Value of the checkbox when used inside a checkbox-group */
+ label: string | number | boolean
+
+ /** Value of the checkbox if it's checked */
+ trueLabel: string | number
+
+ /** Value of the checkbox if it's not checked */
+ falseLabel: string | number
+
+ /** Native 'name' attribute */
+ name: string
+
+ /** Whether to add a border around Checkbox */
+ border: boolean
+
+ /** Size of the Checkbox, only works when border is true */
+ size: ElementUIComponentSize
+
+ /** If the checkbox is disabled */
+ disabled: boolean
+
+ /** If the checkbox is checked */
+ checked: boolean
+
+ /** Same as indeterminate in native checkbox */
+ indeterminate: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/col.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/col.d.ts
new file mode 100644
index 0000000..bbdb332
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/col.d.ts
@@ -0,0 +1,46 @@
+import { ElementUIComponent } from './component'
+
+/** Responsive column props */
+export interface ResponsiveColumnProperties {
+ /** Number of column the grid spans */
+ span: number,
+
+ /** Number of spacing on the left side of the grid */
+ offset: number
+}
+
+/** Responsive column property */
+export type ResponsiveColumn = number | ResponsiveColumnProperties
+
+/** Colunm Layout Component */
+export declare class ElCol extends ElementUIComponent {
+ /** Number of column the grid spans */
+ span: number
+
+ /** Number of spacing on the left side of the grid */
+ offset: number
+
+ /** Number of columns that grid moves to the right */
+ push: number
+
+ /** Number of columns that grid moves to the left */
+ pull: number
+
+ /** <768px Responsive columns or column props object */
+ xs: ResponsiveColumn
+
+ /** ≥768px Responsive columns or column props object */
+ sm: ResponsiveColumn
+
+ /** ≥992px Responsive columns or column props object */
+ md: ResponsiveColumn
+
+ /** ≥1200px Responsive columns or column props object */
+ lg: ResponsiveColumn
+
+ /** ≥1920px Responsive columns or column props object */
+ xl: ResponsiveColumn
+
+ /** custom element tag */
+ tag: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/collapse-item.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/collapse-item.d.ts
new file mode 100644
index 0000000..135ce20
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/collapse-item.d.ts
@@ -0,0 +1,23 @@
+import { VNode } from 'vue'
+import { ElementUIComponent } from './component'
+
+export interface CollapseItemSlots {
+ /** Content of the collapse item */
+ default: VNode[],
+
+ /** Title of the collapse item */
+ title: VNode[]
+
+ [key: string]: VNode[]
+}
+
+/** Collapse Item Component */
+export declare class ElCollapseItem extends ElementUIComponent {
+ /** Unique identification of the panel */
+ name: string | number
+
+ /** Title of the panel */
+ title: string
+
+ $slots: CollapseItemSlots
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/collapse.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/collapse.d.ts
new file mode 100644
index 0000000..78af337
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/collapse.d.ts
@@ -0,0 +1,10 @@
+import { ElementUIComponent } from './component'
+
+/** Use Collapse to store contents. */
+export declare class ElCollapse extends ElementUIComponent {
+ /** Whether to activate accordion mode */
+ accordion: boolean
+
+ /** Currently active panel */
+ value: string | number | string[] | number[]
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/color-picker.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/color-picker.d.ts
new file mode 100644
index 0000000..a3bc53c
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/color-picker.d.ts
@@ -0,0 +1,21 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+export type ColorFormat = 'hsl' | 'hsv' | 'hex' | 'rgb'
+
+/** ColorPicker Component */
+export declare class ElColorPicker extends ElementUIComponent {
+ /** Whether to display the alpha slider */
+ showAlpha: boolean
+
+ /** Whether to disable the ColorPicker */
+ disabled: boolean
+
+ /** Size of ColorPicker */
+ size: ElementUIComponentSize
+
+ /** Whether to display the alpha slider */
+ popperClass: string
+
+ /** Custom class name for ColorPicker's dropdown */
+ colorFormat: ColorFormat
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/component.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/component.d.ts
new file mode 100644
index 0000000..61bf6bc
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/component.d.ts
@@ -0,0 +1,13 @@
+import Vue from 'vue'
+
+/** ElementUI component common definition */
+export declare class ElementUIComponent extends Vue {
+ /** Install component into Vue */
+ static install (vue: typeof Vue): void
+}
+
+/** Component size definition for button, input, etc */
+export type ElementUIComponentSize = 'large' | 'medium' | 'small' | 'mini'
+
+/** Horizontal alignment */
+export type ElementUIHorizontalAlignment = 'left' | 'center' | 'right'
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/container.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/container.d.ts
new file mode 100644
index 0000000..b0fc5d5
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/container.d.ts
@@ -0,0 +1,7 @@
+import { ElementUIComponent } from './component'
+
+/** Container Component */
+export declare class ElContainer extends ElementUIComponent {
+ /** Layout direction for child elements */
+ direction: 'horizontal' | 'vertical'
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/date-picker.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/date-picker.d.ts
new file mode 100644
index 0000000..b4e9e6f
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/date-picker.d.ts
@@ -0,0 +1,124 @@
+import { ElementUIComponent, ElementUIComponentSize, ElementUIHorizontalAlignment } from './component'
+
+export type DatePickerType = 'year' | 'month' | 'date' | 'datetime' | 'week' | 'datetimerange' | 'daterange' | 'dates'
+export type FirstDayOfWeek = 1 | 2 | 3 | 4 | 5 | 6 | 7
+
+export interface DisabledDateChecker {
+ /**
+ * Determine if `date` will be disabled in the picker
+ *
+ * @param date The date to check
+ * @returns if `date` will be disabled in the picker
+ */
+ (date: Date): boolean
+}
+
+// Picked date range
+export interface DateRange {
+ minDate: Date,
+ maxDate: Date
+}
+
+export interface PickEventHandler {
+ /**
+ * Callback function that triggers when picks a date range
+ *
+ * @param dateRange The selected date range
+ */
+ (dateRange: DateRange): void
+}
+
+export interface ShortcutClickEventHandler {
+ /**
+ * Callback function that triggers when clicking on a shortcut.
+ * You can change the picker value by emitting the pick event.
+ * Example: `vm.$emit('pick', new Date())`
+ */
+ (vm: ElDatePicker): void
+}
+
+/** Shortcut options */
+export interface Shortcut {
+ /** Title of the shortcut */
+ text: string,
+
+ /** Callback function that triggers when picks a date range */
+ onClick?: ShortcutClickEventHandler
+}
+
+/** Options of el-date-picker */
+export interface DatePickerOptions {
+ /** An object array to set shortcut options */
+ shortcuts?: Shortcut[]
+
+ /** A function determining if a date is disabled. */
+ disabledDate?: DisabledDateChecker
+
+ /** First day of week */
+ firstDayOfWeek?: FirstDayOfWeek
+
+ /** A callback that triggers when the seleted date is changed. Only for daterange and datetimerange. */
+ onPick?: PickEventHandler
+}
+
+/** DatePicker Component */
+export declare class ElDatePicker extends ElementUIComponent {
+ /** The value of the date picker */
+ value: Date | string | Date[] | string[]
+
+ /** Whether DatePicker is read only */
+ readonly: boolean
+
+ /** Whether DatePicker is disabled */
+ disabled: boolean
+
+ /** Size of Input */
+ size: ElementUIComponentSize
+
+ /** Whether the input is editable */
+ editable: boolean
+
+ /** Whether to show clear button */
+ clearable: boolean
+
+ /** Placeholder */
+ placeholder: string
+
+ /** Placeholder for the start date in range mode */
+ startPlaceholder: string
+
+ /** Placeholder for the end date in range mode */
+ endPlaceholder: string
+
+ /** Type of the picker */
+ type: DatePickerType
+
+ /** Format of the picker */
+ format: string
+
+ /** Alignment */
+ align: ElementUIHorizontalAlignment
+
+ /** Custom class name for DatePicker's dropdown */
+ popperClass: string
+
+ /** Additional options, check the table below */
+ pickerOptions: DatePickerOptions
+
+ /** Range separator */
+ rangeSeparator: string
+
+ /** Default date of the calendar */
+ defaultValue: Date | number | string
+
+ /** Format of binding value. If not specified, the binding value will be a Date object */
+ valueFormat: string
+
+ /** name for the inner native input */
+ name: string
+
+ /**
+ * Focus the Input component
+ */
+ focus (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dialog.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dialog.d.ts
new file mode 100644
index 0000000..85c7e3f
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dialog.d.ts
@@ -0,0 +1,59 @@
+import { VNode } from 'vue'
+import { ElementUIComponent } from './component'
+
+export interface DialogSlots {
+ /** Content of the Dialog */
+ default: VNode[],
+
+ /** Content of the Dialog title */
+ title: VNode[],
+
+ /** Content of the Dialog footer */
+ footer: VNode[],
+
+ [key: string]: VNode[]
+}
+
+/** Informs users while preserving the current page state */
+export declare class ElDialog extends ElementUIComponent {
+ /** Title of Dialog */
+ title: string
+
+ /** Width of Dialog */
+ width: string
+
+ /** Whether the Dialog takes up full screen */
+ fullscreen: boolean
+
+ /** Value for margin-top of Dialog CSS */
+ top: string
+
+ /** Whether a mask is displayed */
+ modal: boolean
+
+ /** Whether to append modal to body element. If false, the modal will be appended to Dialog's parent element */
+ modalAppendToBody: boolean
+
+ /** Whether scroll of body is disabled while Dialog is displayed */
+ lockScroll: boolean
+
+ /** Custom class names for Dialog */
+ customClass: string
+
+ /** Whether the Dialog can be closed by clicking the mask */
+ closeOnClickModal: boolean
+
+ /** Whether the Dialog can be closed by pressing ESC */
+ closeOnPressEscape: boolean
+
+ /** Whether to show a close button */
+ showClose: boolean
+
+ /** Callback before Dialog closes, and it will prevent Dialog from closing */
+ beforeClose: (done: Function) => void
+
+ /** Whether to align the header and footer in center */
+ center: boolean
+
+ $slots: DialogSlots
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown-item.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown-item.d.ts
new file mode 100644
index 0000000..0fb9b45
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown-item.d.ts
@@ -0,0 +1,13 @@
+import { ElementUIComponent } from './component'
+
+/** Toggleable menu for displaying lists of links and actions. */
+export declare class ElDropdownItem extends ElementUIComponent {
+ /** A command to be dispatched to Dropdown's command callback */
+ command: string | number | object
+
+ /** Whether the item is disabled */
+ disabled: boolean
+
+ /** Whether a divider is displayed */
+ divided: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown-menu.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown-menu.d.ts
new file mode 100644
index 0000000..74dc4b8
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown-menu.d.ts
@@ -0,0 +1,4 @@
+import { ElementUIComponent } from './component'
+
+/** Dropdown Menu Component */
+export declare class ElDropdownMenu extends ElementUIComponent {}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown.d.ts
new file mode 100644
index 0000000..02b0112
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/dropdown.d.ts
@@ -0,0 +1,26 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+import { ButtonType } from './button'
+
+export type DropdownMenuAlignment = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end'
+export type DropdownMenuTrigger = 'hover' | 'click'
+
+/** Toggleable menu for displaying lists of links and actions */
+export declare class ElDropdown extends ElementUIComponent {
+ /** Menu button type. only works when split-button is true */
+ type: ButtonType
+
+ /** Whether a button group is displayed */
+ splitButton: boolean
+
+ /** menu size, also works on the split button */
+ size: ElementUIComponentSize
+
+ /** Placement of the menu */
+ placement: DropdownMenuAlignment
+
+ /** How to trigger */
+ trigger: DropdownMenuTrigger
+
+ /** Whether to hide menu after clicking menu-item */
+ hideOnClick: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/element-ui.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/element-ui.d.ts
new file mode 100644
index 0000000..6411cdb
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/element-ui.d.ts
@@ -0,0 +1,294 @@
+import Vue from 'vue'
+import { ElementUIComponent, ElementUIComponentSize, ElementUIHorizontalAlignment } from './component'
+
+import { ElAlert } from './alert'
+import { ElAside } from './aside'
+import { ElAutocomplete } from './autocomplete'
+import { ElBadge } from './badge'
+import { ElBreadcrumb } from './breadcrumb'
+import { ElBreadcrumbItem } from './breadcrumb-item'
+import { ElButton } from './button'
+import { ElButtonGroup } from './button-group'
+import { ElCard } from './card'
+import { ElCarousel } from './carousel'
+import { ElCarouselItem } from './carousel-item'
+import { ElCascader } from './cascader'
+import { ElCheckbox } from './checkbox'
+import { ElCheckboxButton } from './checkbox-button'
+import { ElCheckboxGroup } from './checkbox-group'
+import { ElCol } from './col'
+import { ElCollapse } from './collapse'
+import { ElCollapseItem } from './collapse-item'
+import { ElColorPicker } from './color-picker'
+import { ElContainer } from './container'
+import { ElDatePicker } from './date-picker'
+import { ElDialog } from './dialog'
+import { ElDropdown } from './dropdown'
+import { ElDropdownItem } from './dropdown-item'
+import { ElDropdownMenu } from './dropdown-menu'
+import { ElFooter } from './footer'
+import { ElForm } from './form'
+import { ElFormItem } from './form-item'
+import { ElHeader } from './header'
+import { ElInput } from './input'
+import { ElInputNumber } from './input-number'
+import { ElLoading } from './loading'
+import { ElMain } from './main'
+import { ElMenu } from './menu'
+import { ElMenuItem } from './menu-item'
+import { ElMenuItemGroup } from './menu-item-group'
+import { ElMessage } from './message'
+import { ElMessageBox } from './message-box'
+import { ElNotification } from './notification'
+import { ElOption } from './option'
+import { ElOptionGroup } from './option-group'
+import { ElPagination } from './pagination'
+import { ElPopover } from './popover'
+import { ElProgress } from './progress'
+import { ElRate } from './rate'
+import { ElRadio } from './radio'
+import { ElRadioButton } from './radio-button'
+import { ElRadioGroup } from './radio-group'
+import { ElRow } from './row'
+import { ElSelect } from './select'
+import { ElSlider } from './slider'
+import { ElStep } from './step'
+import { ElSteps } from './steps'
+import { ElSubmenu } from './submenu'
+import { ElSwitch } from './switch'
+import { ElTable } from './table'
+import { ElTableColumn } from './table-column'
+import { ElTag } from './tag'
+import { ElTabs } from './tabs'
+import { ElTabPane } from './tab-pane'
+import { ElTimePicker } from './time-picker'
+import { ElTimeSelect } from './time-select'
+import { ElTooltip } from './tooltip'
+import { ElTransfer } from './transfer'
+import { ElTree } from './tree'
+import { ElUpload } from './upload'
+
+export interface InstallationOptions {
+ locale: any,
+ i18n: any,
+ size: string
+}
+
+/** The version of element-ui */
+export const version: string
+
+/**
+ * Install all element-ui components into Vue.
+ * Please do not invoke this method directly.
+ * Call `Vue.use(ElementUI)` to install.
+ */
+export function install (vue: typeof Vue, options: InstallationOptions): void
+
+/** ElementUI component common definition */
+export type Component = ElementUIComponent
+
+/** Component size definition for button, input, etc */
+export type ComponentSize = ElementUIComponentSize
+
+/** Horizontal alignment */
+export type HorizontalAlignment = ElementUIHorizontalAlignment
+
+/** Show animation while loading data */
+export const Loading: ElLoading
+
+/** Used to show feedback after an activity. The difference with Notification is that the latter is often used to show a system level passive notification. */
+export const Message: ElMessage
+
+/** A set of modal boxes simulating system message box, mainly for message prompt, success tips, error messages and query information */
+export const MessageBox: ElMessageBox
+
+/** Displays a global notification message at the upper right corner of the page */
+export const Notification: ElNotification
+
+// TS cannot merge imported class with namespace, so declare subclasses instead
+
+/** Alert Component */
+export class Alert extends ElAlert {}
+
+/** Aside Component */
+export class Aside extends ElAside {}
+
+/** Autocomplete Component */
+export class Autocomplete extends ElAutocomplete {}
+
+/** Bagde Component */
+export class Badge extends ElBadge {}
+
+/** Breadcrumb Component */
+export class Breadcrumb extends ElBreadcrumb {}
+
+/** Breadcrumb Item Component */
+export class BreadcrumbItem extends ElBreadcrumbItem {}
+
+/** Button Component */
+export class Button extends ElButton {}
+
+/** Button Group Component */
+export class ButtonGroup extends ElButtonGroup {}
+
+/** Card Component */
+export class Card extends ElCard {}
+
+/** Cascader Component */
+export class Cascader extends ElCascader {}
+
+/** Carousel Component */
+export class Carousel extends ElCarousel {}
+
+/** Carousel Item Component */
+export class CarouselItem extends ElCarouselItem {}
+
+/** Checkbox Component */
+export class Checkbox extends ElCheckbox {}
+
+/** Checkbox Button Component */
+export class CheckboxButton extends ElCheckboxButton {}
+
+/** Checkbox Group Component */
+export class CheckboxGroup extends ElCheckboxGroup {}
+
+/** Colunm Layout Component */
+export class Col extends ElCol {}
+
+/** Collapse Component */
+export class Collapse extends ElCollapse {}
+
+/** Collapse Item Component */
+export class CollapseItem extends ElCollapseItem {}
+
+/** Color Picker Component */
+export class ColorPicker extends ElColorPicker {}
+
+/** Container Component */
+export class Container extends ElContainer {}
+
+/** Date Picker Component */
+export class DatePicker extends ElDatePicker {}
+
+/** Dialog Component */
+export class Dialog extends ElDialog {}
+
+/** Dropdown Component */
+export class Dropdown extends ElDropdown {}
+
+/** Dropdown Item Component */
+export class DropdownItem extends ElDropdownItem {}
+
+/** Dropdown Menu Component */
+export class DropdownMenu extends ElDropdownMenu {}
+
+/** Footer Component */
+export class Footer extends ElFooter {}
+
+/** Form Component */
+export class Form extends ElForm {}
+
+/** Form Item Component */
+export class FormItem extends ElFormItem {}
+
+/** Header Component */
+export class Header extends ElHeader {}
+
+/** Input Component */
+export class Input extends ElInput {}
+
+/** Input Number Component */
+export class InputNumber extends ElInputNumber {}
+
+/** Main Component */
+export class Main extends ElMain {}
+
+/** Menu that provides navigation for your website */
+export class Menu extends ElMenu {}
+
+/** Menu Item Component */
+export class MenuItem extends ElMenuItem {}
+
+/** Menu Item Group Component */
+export class MenuItemGroup extends ElMenuItemGroup {}
+
+/** Dropdown Select Option Component */
+export class Option extends ElOption {}
+
+/** Dropdown Select Option Group Component */
+export class OptionGroup extends ElOptionGroup {}
+
+/** Pagination Component */
+export class Pagination extends ElPagination {}
+
+/** Popover Component */
+export class Popover extends ElPopover {}
+
+/** Progress Component */
+export class Progress extends ElProgress {}
+
+/** Rate Component */
+export class Rate extends ElRate {}
+
+/** Radio Component */
+export class Radio extends ElRadio {}
+
+/** Radio Button Component */
+export class RadioButton extends ElRadioButton {}
+
+/** Radio Group Component */
+export class RadioGroup extends ElRadioGroup {}
+
+/** Row Layout Component */
+export class Row extends ElRow {}
+
+/** Dropdown Select Component */
+export class Select extends ElSelect {}
+
+/** Slider Component */
+export class Slider extends ElSlider {}
+
+/** Step Component */
+export class Step extends ElStep {}
+
+/** Steps Component */
+export class Steps extends ElSteps {}
+
+/** Submenu Component */
+export class Submenu extends ElSubmenu {}
+
+/** Switch Component */
+export class Switch extends ElSwitch {}
+
+/** Table Component */
+export class Table extends ElTable {}
+
+/** Table Column Component */
+export class TableColumn extends ElTableColumn {}
+
+/** Tabs Component */
+export class Tabs extends ElTabs {}
+
+/** Tab Pane Component */
+export class TabPane extends ElTabPane {}
+
+/** Tag Component */
+export class Tag extends ElTag {}
+
+/** TimePicker Component */
+export class TimePicker extends ElTimePicker {}
+
+/** TimeSelect Component */
+export class TimeSelect extends ElTimeSelect {}
+
+/** Tooltip Component */
+export class Tooltip extends ElTooltip {}
+
+/** Transfer Component */
+export class Transfer extends ElTransfer {}
+
+/** Tree Component */
+export class Tree extends ElTree {}
+
+/** Upload Component */
+export class Upload extends ElUpload {}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/footer.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/footer.d.ts
new file mode 100644
index 0000000..16ea27d
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/footer.d.ts
@@ -0,0 +1,7 @@
+import { ElementUIComponent } from './component'
+
+/** Footer Component */
+export declare class ElFooter extends ElementUIComponent {
+ /** Height of the footer */
+ height: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/form-item.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/form-item.d.ts
new file mode 100644
index 0000000..fdbd68e
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/form-item.d.ts
@@ -0,0 +1,37 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+/** FormItem Component */
+export declare class ElFormItem extends ElementUIComponent {
+ /** A key of `model` of the enclosing `el-form` component */
+ prop: string
+
+ /** Label */
+ label: string
+
+ /** Width of label, e.g. '50px' */
+ labelWidth: string
+
+ /** Whether the field is required or not, will be determined by validation rules if omitted */
+ required: boolean
+
+ /** Validation rules of form */
+ rules: object
+
+ /** Field error message, set its value and the field will validate error and show this message immediately */
+ error: string
+
+ /** Whether to show the error message */
+ showMessage: boolean
+
+ /** Whether to display the error message inline with the form item */
+ inlineMessage: boolean
+
+ /** Controls the size of components in this form */
+ size: ElementUIComponentSize
+
+ /** Reset current field and remove validation result */
+ resetField (): void
+
+ /** Remove validation status of the field */
+ clearValidate (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/form.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/form.d.ts
new file mode 100644
index 0000000..038214e
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/form.d.ts
@@ -0,0 +1,82 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+export type FormItemLabelPosition = 'left' | 'right' | 'top'
+
+export interface ValidateCallback {
+ /**
+ * The callback to tell the validation result
+ *
+ * @param isValid Whether the form is valid
+ * @param invalidFields fields that fail validation
+ */
+ (isValid: boolean, invalidFields: object): void
+}
+
+export interface ValidateFieldCallback {
+ /**
+ * The callback to tell the field validation result
+ *
+ * @param errorMessage The error message. It will be empty if there is no error
+ */
+ (errorMessage: string): void
+}
+
+/** Form Component */
+export declare class ElForm extends ElementUIComponent {
+ /** Data of form component */
+ model: object
+
+ /** Validation rules of form */
+ rules: object
+
+ /** Whether the form is inline */
+ inline: boolean
+
+ /** Whether the form is disabled */
+ disabled: boolean
+
+ /** Position of label */
+ labelPosition: FormItemLabelPosition
+
+ /** Width of label, and all form items will inherit from Form */
+ labelWidth: string
+
+ /** Suffix of the label */
+ labelSuffix: string
+
+ /** Whether to show the error message */
+ showMessage: boolean
+
+ /** Whether to display the error message inline with the form item */
+ inlineMessage: boolean
+
+ /** Whether to display an icon indicating the validation result */
+ statusIcon: boolean
+
+ /** Whether to trigger validation when the `rules` prop is changed */
+ validateOnRuleChange: boolean
+
+ /** Controls the size of components in this form */
+ size: ElementUIComponentSize
+
+ /**
+ * Validate the whole form
+ *
+ * @param callback A callback to tell the validation result
+ */
+ validate (callback: ValidateCallback): void
+ validate (): Promise
+ /**
+ * Validate certain form items
+ *
+ * @param props The property of `model` or array of prop which is going to validate
+ * @param callback A callback to tell the field validation result
+ */
+ validateField (props: string | string[], callback: ValidateFieldCallback): void
+
+ /** reset all the fields and remove validation result */
+ resetFields (): void
+
+ /** clear validation message for certain fields */
+ clearValidate (props?: string | string[]): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/header.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/header.d.ts
new file mode 100644
index 0000000..bb63b82
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/header.d.ts
@@ -0,0 +1,7 @@
+import { ElementUIComponent } from './component'
+
+/** Header Component */
+export declare class ElHeader extends ElementUIComponent {
+ /** Height of the header */
+ height: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/index.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/index.d.ts
new file mode 100644
index 0000000..b02a041
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/index.d.ts
@@ -0,0 +1,4 @@
+export * from './element-ui'
+
+import * as ElementUI from './element-ui'
+export default ElementUI
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/input-number.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/input-number.d.ts
new file mode 100644
index 0000000..deec6f5
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/input-number.d.ts
@@ -0,0 +1,44 @@
+import { ElementUIComponent } from './component'
+
+export type InputNumberSize = 'large' | 'small'
+
+/** InputNumber Component */
+export declare class ElInputNumber extends ElementUIComponent {
+ /** Binding value */
+ value: number
+
+ /** The minimum allowed value */
+ min: number
+
+ /** The maximum allowed value */
+ max: number
+
+ /** Incremental step */
+ step: number
+
+ /** Size of the component */
+ size: InputNumberSize
+
+ /** Whether the component is disabled */
+ disabled: boolean
+
+ /** Whether to enable the control buttons */
+ controls: boolean
+
+ /** Debounce delay when typing, in milliseconds */
+ debounce: number
+
+ /** Position of the control buttons */
+ controlsPosition: string
+
+ /** Same as name in native input */
+ name: string
+
+ /** Precision of input value */
+ precision: Number
+
+ /**
+ * Focus the Input component
+ */
+ focus (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/input.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/input.d.ts
new file mode 100644
index 0000000..33f5369
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/input.d.ts
@@ -0,0 +1,98 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+/** The resizability of el-input component */
+export type Resizability = 'none' | 'both' | 'horizontal' | 'vertical'
+export type InputType = 'text' | 'textarea'
+
+/** Controls how el-input component automatically sets size */
+export interface AutoSize {
+ /** Minimum rows to show */
+ minRows: number,
+
+ /** Maximum rows to show */
+ maxRows: number
+}
+
+/** Input Component */
+export declare class ElInput extends ElementUIComponent {
+ /** Type of input */
+ type: InputType
+
+ /** Binding value */
+ value: string | number
+
+ /** Maximum Input text length */
+ maxlength: number
+
+ /** Minimum Input text length */
+ minlength: number
+
+ /** Placeholder of Input */
+ placeholder: string
+
+ /** Whether Input is disabled */
+ disabled: boolean
+
+ /** Size of Input, works when type is not 'textarea' */
+ size: ElementUIComponentSize
+
+ /** Prefix icon class */
+ prefixIcon: string
+
+ /** Suffix icon class */
+ suffixIcon: string
+
+ /** Number of rows of textarea, only works when type is 'textarea' */
+ rows: number
+
+ /** Whether textarea has an adaptive height, only works when type is 'textarea' */
+ autosize: boolean | AutoSize
+
+ /** @Deprecated in next major version */
+ autoComplete: string
+
+ /** Same as autocomplete in native input */
+ autocomplete: string
+
+ /** Same as name in native input */
+ name: string
+
+ /** Same as readonly in native input */
+ readonly: boolean
+
+ /** Same as max in native input */
+ max: any
+
+ /** Same as min in native input */
+ min: any
+
+ /** Same as step in native input */
+ step: any
+
+ /** Control the resizability */
+ resize: Resizability
+
+ /** Same as autofocus in native input */
+ autofocus: boolean
+
+ /** Same as form in native input */
+ form: string
+
+ /** Whether to trigger form validatio */
+ validateEvent: boolean
+
+ /**
+ * Focus the Input component
+ */
+ focus (): void
+
+ /**
+ * Blur the Input component
+ */
+ blur (): void
+
+ /**
+ * Select the text in input element
+ */
+ select (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/loading.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/loading.d.ts
new file mode 100644
index 0000000..e86df3e
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/loading.d.ts
@@ -0,0 +1,62 @@
+import Vue, { VNodeDirective } from 'vue'
+
+/** Options used in Loading service */
+export interface LoadingServiceOptions {
+ /** The DOM node Loading needs to cover. Accepts a DOM object or a string. If it's a string, it will be passed to `document.querySelector` to get the corresponding DOM node */
+ target?: HTMLElement | string
+
+ /** Whether to make the mask append to the body element */
+ body?: boolean
+
+ /** Whether to show the loading mask in fullscreen */
+ fullscreen?: boolean
+
+ /** Whether to disable scrolling on body */
+ lock?: boolean
+
+ /** Loading text that displays under the spinner */
+ text?: string
+
+ /** Class name of the custom spinner */
+ spinner?: string
+
+ /** Background color of the mask */
+ background?: string
+
+ /** Custom class name for Loading */
+ customClass?: string
+}
+
+/** Loading Component */
+export declare class ElLoadingComponent extends Vue {
+ /** Close the Loading instance */
+ close (): void
+}
+
+/** Loading directive definition */
+export interface ElLoadingDirective extends VNodeDirective {
+ name: 'loading',
+ value: boolean,
+ modifiers: {
+ body: boolean,
+ fullscreen: boolean
+ }
+}
+
+/** Show animation while loading data */
+export interface ElLoading {
+ /** Install Loading directive into Vue */
+ install (vue: typeof Vue): void
+
+ /** If you do not have a specific DOM node to attach the Loading directive, or if you simply prefer not to use Loading as a directive, you can call this service with some configs to open a Loading instance. */
+ service (options: LoadingServiceOptions): ElLoadingComponent
+
+ directive: object
+}
+
+declare module 'vue/types/vue' {
+ interface Vue {
+ /** If you do not have a specific DOM node to attach the Loading directive, or if you simply prefer not to use Loading as a directive, you can call this service with some configs to open a Loading instance. */
+ $loading (options: LoadingServiceOptions): ElLoadingComponent
+ }
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/main.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/main.d.ts
new file mode 100644
index 0000000..5b16bbc
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/main.d.ts
@@ -0,0 +1,4 @@
+import { ElementUIComponent } from './component'
+
+/** Main Component */
+export declare class ElMain extends ElementUIComponent {}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu-item-group.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu-item-group.d.ts
new file mode 100644
index 0000000..cbdaa1a
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu-item-group.d.ts
@@ -0,0 +1,7 @@
+import { ElementUIComponent } from './component'
+
+/** Menu Item Group Component */
+export declare class ElMenuItemGroup extends ElementUIComponent {
+ /** Group title */
+ title: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu-item.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu-item.d.ts
new file mode 100644
index 0000000..30d3db5
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu-item.d.ts
@@ -0,0 +1,10 @@
+import { ElementUIComponent } from './component'
+
+/** Menu Item Component */
+export declare class ElMenuItem extends ElementUIComponent {
+ /** Unique identification */
+ index: string
+
+ /** Vue Router object */
+ route: object
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu.d.ts
new file mode 100644
index 0000000..0f04d24
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/menu.d.ts
@@ -0,0 +1,46 @@
+import { ElementUIComponent } from './component'
+
+export type MenuDisplayMode = 'horizontal' | 'vertical'
+export type MenuTheme = 'light' | 'dark'
+
+/** Menu that provides navigation for your website */
+export declare class ElMenu extends ElementUIComponent {
+ /** Menu display mode */
+ mode: MenuDisplayMode
+
+ /** Whether the menu is collapsed (available only in vertical mode) */
+ collapse: boolean
+
+ /** Background color of Menu (hex format) */
+ backgroundColor: string
+
+ /** Text color of Menu (hex format) */
+ textColor: string
+
+ /** Text color of currently active menu item (hex format) */
+ activeTextColor: string
+
+ /** Index of currently active menu */
+ defaultActive: string
+
+ /** Array that contains keys of currently active sub-menus */
+ defaultOpeneds: string[]
+
+ /** Whether only one sub-menu can be active */
+ uniqueOpened: boolean
+
+ /** How sub-menus are triggered, only works when mode is 'horizontal' */
+ menuTrigger: string
+
+ /** Whether vue-router mode is activated. If true, index will be used as 'path' to activate the route action */
+ router: boolean
+
+ /** Whether the menu collapse transition is active */
+ collapseTransition: boolean
+
+ /** Open the specified sub-menu */
+ open (index: string): void
+
+ /** Close the specified sub-menu */
+ close (index: string): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/message-box.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/message-box.d.ts
new file mode 100644
index 0000000..0622c2b
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/message-box.d.ts
@@ -0,0 +1,176 @@
+import Vue, { VNode } from 'vue'
+import { MessageType } from './message'
+
+export type MessageBoxCloseAction = 'confirm' | 'cancel' | 'close'
+export type MessageBoxData = MessageBoxInputData
+
+export interface MessageBoxInputData {
+ value: string,
+ action: MessageBoxCloseAction
+}
+
+export interface MessageBoxInputValidator {
+ (value: string): boolean | string
+}
+
+export declare class ElMessageBoxComponent extends Vue {
+ title: string
+ message: string
+ type: MessageType
+ iconClass: string
+ customClass: string
+ showInput: boolean
+ showClose: boolean
+ inputValue: string
+ inputPlaceholder: string
+ inputType: string
+ inputPattern: RegExp
+ inputValidator: MessageBoxInputValidator
+ inputErrorMessage: string
+ showConfirmButton: boolean
+ showCancelButton: boolean
+ action: MessageBoxCloseAction
+ dangerouslyUseHTMLString: boolean
+ confirmButtonText: string
+ cancelButtonText: string
+ confirmButtonLoading: boolean
+ cancelButtonLoading: boolean
+ confirmButtonClass: string
+ confirmButtonDisabled: boolean
+ cancelButtonClass: string
+ editorErrorMessage: string
+}
+
+/** Options used in MessageBox */
+export interface ElMessageBoxOptions {
+ /** Title of the MessageBox */
+ title?: string
+
+ /** Content of the MessageBox */
+ message?: string | VNode
+
+ /** Message type, used for icon display */
+ type?: MessageType
+
+ /** Custom icon's class */
+ iconClass?: string
+
+ /** Custom class name for MessageBox */
+ customClass?: string
+
+ /** MessageBox closing callback if you don't prefer Promise */
+ callback?: (action: MessageBoxCloseAction, instance: ElMessageBoxComponent) => void
+
+ /** Callback before MessageBox closes, and it will prevent MessageBox from closing */
+ beforeClose?: (action: MessageBoxCloseAction, instance: ElMessageBoxComponent, done: (() => void)) => void
+
+ /** Whether to lock body scroll when MessageBox prompts */
+ lockScroll?: boolean
+
+ /** Whether to show a cancel button */
+ showCancelButton?: boolean
+
+ /** Whether to show a confirm button */
+ showConfirmButton?: boolean
+
+ /** Whether to show a close button */
+ showClose?: boolean
+
+ /** Text content of cancel button */
+ cancelButtonText?: string
+
+ /** Text content of confirm button */
+ confirmButtonText?: string
+
+ /** Custom class name of cancel button */
+ cancelButtonClass?: string
+
+ /** Custom class name of confirm button */
+ confirmButtonClass?: string
+
+ /** Whether to align the content in center */
+ center?: boolean
+
+ /** Whether message is treated as HTML string */
+ dangerouslyUseHTMLString?: boolean
+
+ /** Whether to use round button */
+ roundButton?: boolean
+
+ /** Whether MessageBox can be closed by clicking the mask */
+ closeOnClickModal?: boolean
+
+ /** Whether MessageBox can be closed by pressing the ESC */
+ closeOnPressEscape?: boolean
+
+ /** Whether to close MessageBox when hash changes */
+ closeOnHashChange?: boolean
+
+ /** Whether to show an input */
+ showInput?: boolean
+
+ /** Placeholder of input */
+ inputPlaceholder?: string
+
+ /** Initial value of input */
+ inputValue?: string
+
+ /** Regexp for the input */
+ inputPattern?: RegExp
+
+ /** Input Type: text, textArea, password or number */
+ inputType?: string
+
+ /** Validation function for the input. Should returns a boolean or string. If a string is returned, it will be assigned to inputErrorMessage */
+ inputValidator?: MessageBoxInputValidator
+
+ /** Error message when validation fails */
+ inputErrorMessage?: string
+
+ /** Whether to distinguish canceling and closing */
+ distinguishCancelAndClose?: boolean
+}
+
+export interface ElMessageBoxShortcutMethod {
+ (message: string, title: string, options?: ElMessageBoxOptions): Promise
+ (message: string, options?: ElMessageBoxOptions): Promise
+}
+
+export interface ElMessageBox {
+ /** Show a message box */
+ (message: string, title?: string, type?: string): Promise
+
+ /** Show a message box */
+ (options: ElMessageBoxOptions): Promise
+
+ /** Show an alert message box */
+ alert: ElMessageBoxShortcutMethod
+
+ /** Show a confirm message box */
+ confirm: ElMessageBoxShortcutMethod
+
+ /** Show a prompt message box */
+ prompt: ElMessageBoxShortcutMethod
+
+ /** Set default options of message boxes */
+ setDefaults (defaults: ElMessageBoxOptions): void
+
+ /** Close current message box */
+ close (): void
+}
+
+declare module 'vue/types/vue' {
+ interface Vue {
+ /** Show a message box */
+ $msgbox: ElMessageBox
+
+ /** Show an alert message box */
+ $alert: ElMessageBoxShortcutMethod
+
+ /** Show a confirm message box */
+ $confirm: ElMessageBoxShortcutMethod
+
+ /** Show a prompt message box */
+ $prompt: ElMessageBoxShortcutMethod
+ }
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/message.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/message.d.ts
new file mode 100644
index 0000000..90b8f94
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/message.d.ts
@@ -0,0 +1,75 @@
+import Vue, {VNode} from 'vue'
+
+export type MessageType = 'success' | 'warning' | 'info' | 'error'
+
+/** Message Component */
+export declare class ElMessageComponent extends Vue {
+ /** Close the Loading instance */
+ close (): void
+}
+
+export interface CloseEventHandler {
+ /**
+ * Triggers when a message is being closed
+ *
+ * @param instance The message component that is being closed
+ */
+ (instance: ElMessageComponent): void
+}
+
+/** Options used in Message */
+export interface ElMessageOptions {
+ /** Message text */
+ message: string | VNode
+
+ /** Message type */
+ type?: MessageType
+
+ /** Custom icon's class, overrides type */
+ iconClass?: string
+
+ /** Custom class name for Message */
+ customClass?: string
+
+ /** Display duration, millisecond. If set to 0, it will not turn off automatically */
+ duration?: number
+
+ /** Whether to show a close button */
+ showClose?: boolean
+
+ /** Whether to center the text */
+ center?: boolean
+
+ /** Whether message is treated as HTML string */
+ dangerouslyUseHTMLString?: boolean
+
+ /** Callback function when closed with the message instance as the parameter */
+ onClose?: CloseEventHandler
+}
+
+export interface ElMessage {
+ /** Show an info message */
+ (text: string): ElMessageComponent
+
+ /** Show message */
+ (options: ElMessageOptions): ElMessageComponent
+
+ /** Show a success message */
+ success (text: string): ElMessageComponent
+
+ /** Show a warning message */
+ warning (text: string): ElMessageComponent
+
+ /** Show an info message */
+ info (text: string): ElMessageComponent
+
+ /** Show an error message */
+ error (text: string): ElMessageComponent
+}
+
+declare module 'vue/types/vue' {
+ interface Vue {
+ /** Used to show feedback after an activity. The difference with Notification is that the latter is often used to show a system level passive notification. */
+ $message: ElMessage
+ }
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/notification.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/notification.d.ts
new file mode 100644
index 0000000..a2cf871
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/notification.d.ts
@@ -0,0 +1,84 @@
+import Vue, { VNode } from 'vue'
+import { MessageType } from './message'
+
+export type NotificationPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'
+
+/** Notification Component */
+export declare class ElNotificationComponent extends Vue {
+ /** Close the Notification instance */
+ close (): void
+}
+
+export interface ElNotificationOptions {
+ /** Title */
+ title: string
+
+ /** Description text */
+ message: string | VNode
+
+ /** Notification type */
+ type?: MessageType
+
+ /** Custom icon's class. It will be overridden by type */
+ iconClass?: string
+
+ /** Custom class name for Notification */
+ customClass?: string
+
+ /** Duration before close. It will not automatically close if set 0 */
+ duration?: number
+
+ /** Whether to show a close button */
+ showClose?: boolean
+
+ /** Whether message is treated as HTML string */
+ dangerouslyUseHTMLString?: boolean
+
+ /** Callback function when closed */
+ onClose?: () => void
+
+ /** Callback function when notification clicked */
+ onClick?: () => void
+
+ /** Offset from the top edge of the screen. Every Notification instance of the same moment should have the same offset */
+ offset?: number
+
+ /** custom position */
+ position?: NotificationPosition
+}
+
+export interface ElNotification {
+ /** Show a notification */
+ (options: ElNotificationOptions): ElNotificationComponent
+
+ /** Show a success notification */
+ success (message: string | VNode): ElNotificationComponent
+
+ /** Show a success notification */
+ success (options: ElNotificationOptions): ElNotificationComponent
+
+ /** Show a warning notification */
+ warning (message: string | VNode): ElNotificationComponent
+
+ /** Show a warning notification */
+ warning (options: ElNotificationOptions): ElNotificationComponent
+
+ /** Show an info notification */
+ info (message: string | VNode): ElNotificationComponent
+
+ /** Show an info notification */
+ info (options: ElNotificationOptions): ElNotificationComponent
+
+ /** Show an error notification */
+ error (message: string | VNode): ElNotificationComponent
+
+ /** Show an error notification */
+ error (options: ElNotificationOptions): ElNotificationComponent
+}
+
+declare module 'vue/types/vue' {
+ interface Vue {
+ /** Displays a global notification message at the upper right corner of the page */
+ $notify: ElNotification
+ }
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/option-group.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/option-group.d.ts
new file mode 100644
index 0000000..1530965
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/option-group.d.ts
@@ -0,0 +1,10 @@
+import { ElementUIComponent } from './component'
+
+/** Dropdown Select Option Group Component */
+export declare class ElOptionGroup extends ElementUIComponent {
+ /** Name of the group */
+ label: string
+
+ /** Whether to disable all options in this group */
+ disabled: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/option.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/option.d.ts
new file mode 100644
index 0000000..d949a54
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/option.d.ts
@@ -0,0 +1,13 @@
+import { ElementUIComponent } from './component'
+
+/** Dropdown Select Option Component */
+export declare class ElOption extends ElementUIComponent {
+ /** Value of option */
+ value: any
+
+ /** Label of option, same as value if omitted */
+ label: string
+
+ /** Whether option is disabled */
+ disabled: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/pagination.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/pagination.d.ts
new file mode 100644
index 0000000..278d820
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/pagination.d.ts
@@ -0,0 +1,40 @@
+import { ElementUIComponent } from './component'
+
+/** Pagination Component */
+export declare class ElPagination extends ElementUIComponent {
+ /** Whether to use small pagination */
+ small: boolean
+
+ /** Item count of each page */
+ pageSize: number
+
+ /** Total item count */
+ total: number
+
+ /** Total page count. Set either total or page-count and pages will be displayed; if you need page-sizes, total is required */
+ pageCount: number
+
+ /** Number of pagers */
+ pagerCount: number
+
+ /** Current page number */
+ currentPage: number
+
+ /**
+ * Layout of Pagination. Elements separated with a comma.
+ * Accepted values: `sizes`, `prev`, `pager`, `next`, `jumper`, `->`, `total`, `slot`
+ */
+ layout: string
+
+ /** Options of item count per page */
+ pageSizes: number[]
+
+ /** Custom class name for the page size Select's dropdown */
+ popperClass: string
+
+ /** Text for the prev button */
+ prevText: string
+
+ /** Text for the prev button */
+ nextText: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/popover.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/popover.d.ts
new file mode 100644
index 0000000..3108840
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/popover.d.ts
@@ -0,0 +1,65 @@
+import { VNode, VNodeDirective } from 'vue'
+import { ElementUIComponent } from './component'
+
+export type PopoverTrigger = 'click' | 'focus' | 'hover' | 'manual'
+export type PopoverPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end'
+
+export interface PopoverSlots {
+ /** Content of popover */
+ default: VNode[],
+
+ /** HTML element that triggers popover */
+ reference: VNode[]
+
+ [key: string]: VNode[]
+}
+
+/** Popover directive definition */
+export interface ElPopoverDirective extends VNodeDirective {
+ name: 'popover',
+ arg: string
+}
+
+/** Popover Component */
+export declare class ElPopover extends ElementUIComponent {
+ /** How the popover is triggered */
+ trigger: PopoverTrigger
+
+ /** Popover title */
+ title: string
+
+ /** Popover content, can be replaced with a default slot */
+ content: string
+
+ /** Popover width */
+ width: string | number
+
+ /** Popover placement */
+ placement: PopoverPlacement
+
+ /** Whether Popover is disabled */
+ disabled: boolean
+
+ /** Whether popover is visible */
+ value: boolean
+
+ /** Popover offset */
+ offset: number
+
+ /** Popover transition animation */
+ transition: string
+
+ /** Whether a tooltip arrow is displayed or not. For more info, please refer to Vue-popper */
+ visibleArrow: boolean
+
+ /** Parameters for popper.js */
+ popperOptions: object
+
+ /** Custom class name for popover */
+ popperClass: string
+
+ /** Delay of appearance when trigger is hover, in milliseconds */
+ openDelay: number
+
+ $slots: PopoverSlots
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/progress.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/progress.d.ts
new file mode 100644
index 0000000..aff7f18
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/progress.d.ts
@@ -0,0 +1,31 @@
+import { ElementUIComponent } from './component'
+
+export type ProgressType = 'line' | 'circle'
+export type ProgressStatus = 'success' | 'exception' | 'text'
+
+/** Progress Component */
+export declare class ElProgress extends ElementUIComponent {
+ /** Percentage, required */
+ percentage: number
+
+ /** The type of progress bar */
+ type: ProgressType
+
+ /** The width of progress bar */
+ strokeWidth: number
+
+ /** Whether to place the percentage inside progress bar, only works when type is 'line' */
+ textInside: boolean
+
+ /** The current status of progress bar */
+ status: ProgressStatus
+
+ /** Background color of progress bar. Overrides `status` prop */
+ color: string
+
+ /** The canvas width of circle progress bar */
+ width: number
+
+ /** Whether to show percentage */
+ showText: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio-button.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio-button.d.ts
new file mode 100644
index 0000000..0b7df8a
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio-button.d.ts
@@ -0,0 +1,16 @@
+import { ElementUIComponent } from './component'
+
+/** Radio Button Component */
+export declare class ElRadioButton extends ElementUIComponent {
+ /** The form input value */
+ value: string
+
+ /** The value of radio */
+ label: string | number
+
+ /** Whether radio is disabled */
+ disabled: boolean
+
+ /** Native 'name' attribute */
+ name: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio-group.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio-group.d.ts
new file mode 100644
index 0000000..f61144b
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio-group.d.ts
@@ -0,0 +1,18 @@
+import { ElementUIComponent } from './component'
+
+export type RadioGroupSize = 'large' | 'small'
+
+/** Radio Group Component */
+export declare class ElRadioGroup extends ElementUIComponent {
+ /** The size of radio buttons */
+ size: RadioGroupSize
+
+ /** Border and background color when button is active */
+ fill: string
+
+ /** Whether the nesting radios are disabled */
+ disabled: boolean
+
+ /** Font color when button is active */
+ textColor: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio.d.ts
new file mode 100644
index 0000000..22826ea
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/radio.d.ts
@@ -0,0 +1,19 @@
+import { ElementUIComponent } from './component'
+
+/** Radio Component */
+export declare class ElRadio extends ElementUIComponent {
+ /** The form input value */
+ value: string
+
+ /** The value of radio */
+ label: string | number | boolean
+
+ /** Whether radio is disabled */
+ disabled: boolean
+
+ /** Whether to add a border around Radio */
+ border: boolean
+
+ /** Native 'name' attribute */
+ name: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/rate.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/rate.d.ts
new file mode 100644
index 0000000..9fe80a2
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/rate.d.ts
@@ -0,0 +1,52 @@
+import { ElementUIComponent } from './component'
+
+/** Rate Component */
+export declare class ElRate extends ElementUIComponent {
+ /** Max rating score */
+ max: number
+
+ /** Whether Rate is read-only */
+ disabled: boolean
+
+ /** Whether picking half start is allowed */
+ allowHalf: boolean
+
+ /** Threshold value between low and medium level. The value itself will be included in low level */
+ lowThreshold: number
+
+ /** Threshold value between medium and high level. The value itself will be included in high level */
+ highThreshold: number
+
+ /** Color array for icons. It should have 3 elements, each of which corresponds with a score level */
+ colors: string[]
+
+ /** Color of unselected icons */
+ voidColor: string
+
+ /** Color of unselected read-only icons */
+ disabledVoidColor: string
+
+ /** Array of class names of icons. It should have 3 elements, each of which corresponds with a score level */
+ iconClasses: string[]
+
+ /** Class name of unselected icons */
+ voidIconClass: string
+
+ /** Class name of unselected read-only icons */
+ disabledVoidIconClass: string
+
+ /** Whether to display texts */
+ showText: boolean
+
+ /** Whether to display current score. show-score and show-text cannot be true at the same time */
+ showScore: boolean
+
+ /** Color of texts */
+ textColor: string
+
+ /** Text array */
+ texts: string[]
+
+ /** Text template when the component is read-only */
+ scoreTemplate: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/row.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/row.d.ts
new file mode 100644
index 0000000..4769de7
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/row.d.ts
@@ -0,0 +1,25 @@
+import { ElementUIComponent } from './component'
+
+/** Horizontal alignment of flex layout */
+export type HorizontalAlignment = 'start' | 'end' | 'center' | 'space-around' | 'space-between'
+
+/** vertical alignment of flex layout */
+export type VertialAlignment = 'top' | 'middle' | 'bottom'
+
+/** Row Layout Component */
+export declare class ElRow extends ElementUIComponent {
+ /** Grid spacing */
+ gutter: number
+
+ /** Layout mode. You can use flex. Works in modern browsers */
+ type: string
+
+ /** Horizontal alignment of flex layout */
+ justify: HorizontalAlignment
+
+ /** Vertical alignment of flex layout */
+ align: VertialAlignment
+
+ /** Custom element tag */
+ tag: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/select.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/select.d.ts
new file mode 100644
index 0000000..110835e
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/select.d.ts
@@ -0,0 +1,90 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+export interface QueryChangeHandler {
+ /**
+ * @param queryString Current value of the text input
+ */
+ (queryString: string): void
+}
+
+/** Dropdown Select Component */
+export declare class ElSelect extends ElementUIComponent {
+ /** The form input value */
+ value: any
+
+ /** Whether multiple-select is activated */
+ multiple: boolean
+
+ /** Whether Select is disabled */
+ disabled: boolean
+
+ /** Unique identity key name for value, required when value is an object */
+ valueKey: string
+
+ /** Size of Input */
+ size: ElementUIComponentSize
+
+ /** Whether single select can be cleared */
+ clearable: boolean
+
+ /** Maximum number of options user can select when multiple is true. No limit when set to 0 */
+ multipleLimit: number
+
+ /** @Deprecated in next major version */
+ autoComplete: string
+
+ /** Same as autocomplete in native input */
+ autocomplete: string
+
+ /** The name attribute of select input */
+ name: string
+
+ /** Placeholder */
+ placeholder: string
+
+ /** Whether Select is filterable */
+ filterable: boolean
+
+ /** Whether creating new items is allowed. To use this, filterable must be true */
+ allowCreate: boolean
+
+ /** Custom filter method */
+ filterMethod: QueryChangeHandler
+
+ /** Whether options are loaded from server */
+ remote: boolean
+
+ /** Custom remote search method */
+ remoteMethod: QueryChangeHandler
+
+ /** Whether Select is loading data from server */
+ loading: boolean
+
+ /** Displayed text while loading data from server */
+ loadingText: string
+
+ /** Displayed text when no data matches the filtering query */
+ noMatchText: string
+
+ /** Displayed text when there is no options */
+ noDataText: string
+
+ /** Custom class name for Select's dropdown */
+ popperClass: string
+
+ /** Select first matching option on enter key. Use with filterable or remote */
+ defaultFirstOption: boolean
+
+ /** Whether to append the popper menu to body */
+ popperAppendToBody: boolean
+
+ /**
+ * Focus the Input component
+ */
+ focus (): void
+
+ /**
+ * Blur the Input component, and hide the dropdown
+ */
+ blur (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/slider.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/slider.d.ts
new file mode 100644
index 0000000..af70675
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/slider.d.ts
@@ -0,0 +1,62 @@
+import { ElementUIComponent } from './component'
+
+export interface SliderTooltipFormat {
+ /**
+ * Format the displayed value of Slider
+ *
+ * @param value Value of the Slider
+ * @returns formatted value
+ */
+ (value: number): string
+}
+
+/** Slider Component */
+export declare class ElSlider extends ElementUIComponent {
+ /** Current value of the slider */
+ value: number | number[]
+
+ /** Minimum value */
+ min: number
+
+ /** Maximum value */
+ max: number
+
+ /** Whether Slider is disabled */
+ disabled: boolean
+
+ /** Step size */
+ step: number
+
+ /** Whether to display an input box, works when range is false */
+ showInput: boolean
+
+ /** Format of displayed tooltip value */
+ formatTooltip: SliderTooltipFormat
+
+ /** Whether to display control buttons when show-input is true */
+ showInputControls: boolean
+
+ /** Size of the input box */
+ inputSize: string
+
+ /** Whether to display breakpoints */
+ showStops: boolean
+
+ /** Whether to display tooltip value */
+ showTooltip: boolean
+
+ /** Whether to select a range */
+ range: boolean
+
+ /** Vertical mode */
+ vertical: boolean
+
+ /** Slider height, required in vertical mode */
+ height: boolean
+
+ /** Debounce delay when typing, in milliseconds, works when show-input is true */
+ debounce: number
+
+ /** Custom class name for the tooltip */
+ tooltipClass: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/step.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/step.d.ts
new file mode 100644
index 0000000..68ed2b3
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/step.d.ts
@@ -0,0 +1,34 @@
+import { VNode } from 'vue'
+import { ElementUIComponent } from './component'
+
+export type StepStatus = 'wait' | 'process' | 'finish' | 'error' | 'success'
+
+export interface StepRenderSlots {
+ /** Custom icon */
+ icon: VNode[],
+
+ /** Step title */
+ title: VNode[],
+
+ /** Step description */
+ description: VNode[],
+
+ [key: string]: VNode[]
+}
+
+/** Step Component */
+export declare class ElStep extends ElementUIComponent {
+ /** Step title */
+ title: string
+
+ /** Step description */
+ description: string
+
+ /** Step icon */
+ icon: string
+
+ /** Current status. It will be automatically set by Steps if not configured. */
+ status: StepStatus
+
+ readonly $slots: StepRenderSlots
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/steps.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/steps.d.ts
new file mode 100644
index 0000000..ed40ab6
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/steps.d.ts
@@ -0,0 +1,28 @@
+import { ElementUIComponent } from './component'
+import { StepStatus } from './step'
+
+export type StepsDirection = 'vertical' | 'horizontal'
+
+/** Guide the user to complete tasks in accordance with the process. Its steps can be set according to the actual application scenario and the number of the steps can't be less than 2. */
+export declare class ElSteps extends ElementUIComponent {
+ /** The spacing of each step, will be responsive if omitted. Support percentage. */
+ space: number | string
+
+ /** Display direction */
+ direction: StepsDirection
+
+ /** Current activation step */
+ active: number
+
+ /** Status of current step */
+ processStatus: StepStatus
+
+ /** Status of end step */
+ finishStatus: StepStatus
+
+ /** Whether step description is centered */
+ alignCenter: boolean
+
+ /** Whether to apply simple theme */
+ simple: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/submenu.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/submenu.d.ts
new file mode 100644
index 0000000..f5e1359
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/submenu.d.ts
@@ -0,0 +1,22 @@
+import { ElementUIComponent } from './component'
+
+/** Submenu Component */
+export declare class ElSubmenu extends ElementUIComponent {
+ /** Unique identification */
+ index: string
+
+ /** Delay time before showing a sub-menu */
+ showTimeout: number
+
+ /** Delay time before hiding a sub-menu */
+ hideTimeout: number
+
+ /** Custom class name for the popup menu */
+ popperClass: string
+
+ /** Whether the sub-menu is disabled */
+ disabled: boolean
+
+ /** Whether to append the popper menu to body */
+ popperAppendToBody: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/switch.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/switch.d.ts
new file mode 100644
index 0000000..b63987b
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/switch.d.ts
@@ -0,0 +1,40 @@
+import { ElementUIComponent } from './component'
+
+/** Switch Component */
+export declare class ElSwitch extends ElementUIComponent {
+ /** Whether Switch is on */
+ value: boolean
+
+ /** Whether Switch is disabled */
+ disabled: boolean
+
+ /** Width of Switch */
+ width: number
+
+ /** Class name of the icon displayed when in on state, overrides on-text */
+ activeIconClass: string
+
+ /** Class name of the icon displayed when in off state, overrides off-text */
+ inactiveIconClass: string
+
+ /** Text displayed when in on state */
+ activeText: string
+
+ /** Text displayed when in off state */
+ inactiveText: string
+
+ /** Background color when in on state */
+ activeColor: string
+
+ /** Background color when in off state */
+ inactiveColor: string
+
+ /** Switch value when in on state */
+ activeValue: string | boolean | number
+
+ /** Switch value when in off state */
+ inactiveValue: string | boolean | number
+
+ /** Input name of Switch */
+ name: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tab-pane.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tab-pane.d.ts
new file mode 100644
index 0000000..b4f6999
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tab-pane.d.ts
@@ -0,0 +1,19 @@
+import { ElementUIComponent } from './component'
+
+/** Tab Pane Component */
+export declare class ElTabPane extends ElementUIComponent {
+ /** Title of the tab */
+ label: string
+
+ /** Whether Tab is disabled */
+ disabled: boolean
+
+ /** Identifier corresponding to the activeName of Tabs, representing the alias of the tab-pane */
+ name: string
+
+ /** Whether Tab is closable */
+ closable: boolean
+
+ /** Whether Tab is lazily rendered */
+ lazy: boolean
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/table-column.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/table-column.d.ts
new file mode 100644
index 0000000..193ce25
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/table-column.d.ts
@@ -0,0 +1,117 @@
+import { CreateElement, VNode } from 'vue'
+import { ElementUIComponent, ElementUIHorizontalAlignment } from './component'
+import { PopoverPlacement } from './popover'
+
+export type TableColumnType = 'default' | 'selection' | 'index' | 'expand'
+export type TableColumnFixedType = 'left' | 'right'
+export type SortOrders = 'ascending' | 'descending' | null
+
+export type TableColumn = {
+ /** Label of the column */
+ label: string,
+
+ /** Property name of the source data */
+ property: string,
+
+ /** Type of the column */
+ type: string,
+
+ /** Whether column is fixed at left/right */
+ fixed: boolean | string
+}
+
+/** Data used in renderHeader function */
+export interface RenderHeaderData {
+ /** The column that is current rendering */
+ column: any,
+
+ /** The index of the rendering column */
+ $index: number
+}
+
+/** Filter Object */
+export interface TableColumnFilter {
+ /** The text to show in the filter's panel */
+ text: string,
+
+ /** The value of the filter */
+ value: any
+}
+
+/** TableColumn Component */
+export declare class ElTableColumn extends ElementUIComponent {
+ /** Type of the column. If set to `selection`, the column will display checkbox. If set to `index`, the column will display index of the row (staring from 1). If set to `expand`, the column will display expand icon. */
+ type: TableColumnType
+
+ /** Column label */
+ label: string
+
+ /** Column's key. If you need to use the filter-change event, you need this attribute to identify which column is being filtered */
+ columnKey: string
+
+ /** Field name. You can also use its alias: property */
+ prop: string
+
+ /** Column width */
+ width: string
+
+ /** Column minimum width. Columns with `width` has a fixed width, while columns with `min-width` has a width that is distributed in proportion */
+ minWidth: string
+
+ /** Whether column is fixed at left/right. Will be fixed at left if `true` */
+ fixed: boolean | TableColumnFixedType
+
+ /** Render function for table header of this column */
+ renderHeader: (h: CreateElement, data: RenderHeaderData) => VNode | string
+
+ /** Whether column can be sorted */
+ sortable: boolean
+
+ /** Sorting method. Works when `sortable` is `true` */
+ sortMethod: (a: any, b: any) => number
+
+ /** The order of the sorting strategies used when sorting the data. Works when `sortable` is `true`. */
+ sortOrders: SortOrders[]
+
+ /** Whether column width can be resized. Works when border of `el-table` is `true` */
+ resizable: boolean
+
+ /** Function that formats content */
+ formatter: (row: object, column: TableColumn) => any
+
+ /** Whether to hide extra content and show them in a tooltip when hovering on the cell */
+ showOverflowTooltip: boolean
+
+ /** Alignment */
+ align: ElementUIHorizontalAlignment
+
+ /** Alignment of the table header. If omitted, the value of the `align` attribute will be applied */
+ headerAlign: ElementUIHorizontalAlignment
+
+ /** Class name of cells in the column */
+ className: string
+
+ /** Class name of the label of this column */
+ labelClassName: string
+
+ /** Function that determines if a certain row can be selected, works when `type` is `'selection'` */
+ selectable: (row: object, index: number) => boolean
+
+ /** Whether to reserve selection after data refreshing, works when `type` is `'selection'` */
+ reserveSelection: boolean
+
+ /** An array of data filtering options */
+ filters: TableColumnFilter[]
+
+ /** Placement for the filter dropdown */
+ filterPlacement: PopoverPlacement
+
+ /** Whether data filtering supports multiple options */
+ filterMultiple: Boolean
+
+ /** Data filtering method. If `filter-multiple` is on, this method will be called multiple times for each row, and a row will display if one of the calls returns `true` */
+ filterMethod: (value: any, row: object) => boolean
+
+ /** Filter value for selected data, might be useful when table header is rendered with `render-header` */
+ filteredValue: TableColumnFilter[]
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/table.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/table.d.ts
new file mode 100644
index 0000000..bc27961
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/table.d.ts
@@ -0,0 +1,157 @@
+import { ElementUIComponent } from './component'
+import { TooltipEffect } from './tooltip'
+
+export type SortOrder = 'ascending' | 'descending'
+
+/** Options to set the default sort column and order */
+export interface DefaultSortOptions {
+ /** Default sort column */
+ prop: string,
+
+ /** Default sort order */
+ order: SortOrder
+}
+
+export interface SummaryMethodParams {
+ columns: object[],
+ data: object
+}
+
+export interface rowCallbackParams {
+ row: object,
+ rowIndex: number
+}
+
+export interface cellCallbackParams {
+ row: object,
+ rowIndex: number,
+ column: object,
+ columnIndex: number
+}
+
+/** Table Component */
+export declare class ElTable extends ElementUIComponent {
+ /** Table data */
+ data: object[]
+
+ /** Table's height. By default it has an auto height. If its value is a number, the height is measured in pixels; if its value is a string, the height is affected by external styles */
+ height: string | number
+
+ /** Table's max-height. The height of the table starts from auto until it reaches the maxHeight limit. The maxHeight is measured in pixels, same as height */
+ maxHeight: string | number
+
+ /** Whether table is striped */
+ stripe: boolean
+
+ /** Whether table has vertical border */
+ border: boolean
+
+ /** Whether width of column automatically fits its container */
+ fit: boolean
+
+ /** Whether table header is visible */
+ showHeader: boolean
+
+ /** Whether current row is highlighted */
+ highlightCurrentRow: boolean
+
+ /** Key of current row, a set only prop */
+ currentRowKey: string | number
+
+ /** Function that returns custom class names for a row, or a string assigning class names for every row */
+ rowClassName: string | ((param: rowCallbackParams) => string)
+
+ /** Function that returns custom style for a row, or an object assigning custom style for every row */
+ rowStyle: object | ((param: rowCallbackParams) => object)
+
+ /** Function that returns custom class names for a cell, or a string assigning class names for every cell */
+ cellClassName: string | ((param: cellCallbackParams) => string)
+
+ /** Function that returns custom style for a cell, or an object assigning custom style for every cell */
+ cellStyle: object | ((param: cellCallbackParams) => object)
+
+ /** Function that returns custom class names for a row in table header, or a string assigning class names for every row in table header */
+ headerRowClassName: string | ((param: rowCallbackParams) => string)
+
+ /** Function that returns custom style for a row in table header, or an object assigning custom style for every row in table header */
+ headerRowStyle: object | ((param: rowCallbackParams) => object)
+
+ /** Function that returns custom class names for a cell in table header, or a string assigning class names for every cell in table header */
+ headerCellClassName: string | ((param: cellCallbackParams) => string)
+
+ /** Function that returns custom style for a cell in table header, or an object assigning custom style for every cell in table header */
+ headerCellStyle: object | ((param: cellCallbackParams) => object)
+
+ /** Key of row data, used for optimizing rendering. Required if reserve-selection is on */
+ rowKey: (row: object) => any
+
+ /** Displayed text when data is empty. You can customize this area with `slot="empty"` */
+ emptyText: String
+
+ /** Whether expand all rows by default. Only works when the table has a column `type="expand"` */
+ defaultExpandAll: Boolean
+
+ /** Set expanded rows by this prop. Prop's value is the keys of expand rows, you should set row-key before using this prop */
+ expandRowKeys: any[]
+
+ /** Set the default sort column and order */
+ defaultSort: DefaultSortOptions
+
+ /** Tooltip effect property */
+ tooltipEffect: TooltipEffect
+
+ /** Whether to display a summary row */
+ showSummary: boolean
+
+ /** Displayed text for the first column of summary row */
+ sumText: string
+
+ /** Custom summary method */
+ summaryMethod: (param: SummaryMethodParams) => any[]
+
+ /** Controls the behavior of master checkbox in multi-select tables when only some rows are selected */
+ selectOnIndeterminate: boolean
+
+ /** Clear selection. Might be useful when `reserve-selection` is on */
+ clearSelection (): void
+
+ /**
+ * Toggle or set if a certain row is selected
+ *
+ * @param row The row that is going to set its selected state
+ * @param selected Whether the row is selected. The selected state will be toggled if not set
+ */
+ toggleRowSelection (row: object, selected?: boolean): void
+
+ /**
+ * Toggle or set all rows
+ */
+ toggleAllSelection (): void
+
+ /**
+ * Set a certain row as selected
+ *
+ * @param row The row that is going to set as selected
+ */
+ setCurrentRow (row?: object): void
+
+ /**
+ * Toggle or set if a certain row is expanded
+ *
+ * @param row The row that is going to set its expanded state
+ * @param expanded Whether the row is expanded. The expanded state will be toggled if not set
+ */
+ toggleRowExpansion (row: object, expanded?: boolean): void
+
+ /** Clear sort status, reset the table to unsorted */
+ clearSort (): void
+
+ /** Clear filter, reset the table to unfiltered */
+ clearFilter (): void
+
+ /** Relayout the table, maybe needed when change the table or it's ancestors visibility */
+ doLayout (): void
+
+ /** Sort Table manually */
+ sort (prop: string, order: string): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tabs.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tabs.d.ts
new file mode 100644
index 0000000..fee7c1a
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tabs.d.ts
@@ -0,0 +1,31 @@
+import { ElementUIComponent } from './component'
+
+export type TabType = 'card' | 'border-card'
+export type TabPosition = 'top' | 'right' | 'bottom' | 'left'
+
+/** Divide data collections which are related yet belong to different types */
+export declare class ElTabs extends ElementUIComponent {
+ /** Type of Tab */
+ type: TabType
+
+ /** Whether Tab is closable */
+ closable: boolean
+
+ /** Whether Tab is addable */
+ addable: boolean
+
+ /** Whether Tab is addable and closable */
+ editable: boolean
+
+ /** Name of the selected tab */
+ value: string
+
+ /** Position of tabs */
+ tabPosition: TabPosition
+
+ /** Whether width of tab automatically fits its container */
+ stretch: Boolean
+
+ /** Hook function before switching tab. If false or a Promise is returned and then is rejected, switching will be prevented */
+ beforeLeave: (activeName: string, oldActiveName: string) => boolean | Promise
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tag.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tag.d.ts
new file mode 100644
index 0000000..5fa0116
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tag.d.ts
@@ -0,0 +1,24 @@
+import { ElementUIComponent, ElementUIComponentSize } from './component'
+
+export type TagType = 'primary' | 'gray' | 'success' | 'warning' | 'danger'
+
+/** Tag Component */
+export declare class ElTag extends ElementUIComponent {
+ /** Theme */
+ type: TagType
+
+ /** Whether Tab can be removed */
+ closable: boolean
+
+ /** Whether the removal animation is disabled */
+ disableTransitions: boolean
+
+ /** Whether Tag has a highlighted border */
+ hit: boolean
+
+ /** Background color of the tag */
+ color: string
+
+ /** Tag size */
+ size: ElementUIComponentSize
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/time-picker.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/time-picker.d.ts
new file mode 100644
index 0000000..40114f4
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/time-picker.d.ts
@@ -0,0 +1,63 @@
+import { ElementUIComponent, ElementUIComponentSize, ElementUIHorizontalAlignment } from './component'
+
+export interface TimePickerOptions {
+ /**
+ * Available time range.
+ * e.g. `'18:30:00 - 20:30:00'`
+ * or `['09:30:00 - 12:00:00', '14:30:00 - 18:30:00']`
+ */
+ selectableRange?: string | string[],
+
+ /** Format of the picker */
+ format?: string
+}
+
+/** TimePicker Component */
+export declare class ElTimePicker extends ElementUIComponent {
+ /** Whether DatePicker is read only */
+ readonly: boolean
+
+ /** Whether DatePicker is disabled */
+ disabled: boolean
+
+ /** Whether the input is editable */
+ editable: boolean
+
+ /** Whether to show clear button */
+ clearable: boolean
+
+ /** Size of Input */
+ size: ElementUIComponentSize
+
+ /** Placeholder */
+ placeholder: string
+
+ /** Placeholder for the start time in range mode */
+ startPlaceholder: string
+
+ /** Placeholder for the end time in range mode */
+ endPlaceholder: string
+
+ /** Whether to pick a time range */
+ isRange: boolean
+
+ /** Value of the picker */
+ value: string | Date
+
+ /** Alignment */
+ align: ElementUIHorizontalAlignment
+
+ /** Custom class name for TimePicker's dropdown */
+ popperClass: string
+
+ /** Additional options, check the table below */
+ pickerOptions: TimePickerOptions
+
+ /** Range separator */
+ rangeSeparator: string
+
+ /**
+ * Focus the Input component
+ */
+ focus (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/time-select.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/time-select.d.ts
new file mode 100644
index 0000000..a784f8e
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/time-select.d.ts
@@ -0,0 +1,56 @@
+import { ElementUIComponent, ElementUIComponentSize, ElementUIHorizontalAlignment } from './component'
+
+export interface TimeSelectOptions {
+ /** Start time */
+ start?: string,
+
+ /** End time */
+ end?: string,
+
+ /** Time step */
+ step?: string,
+
+ /** Minimum time, any time before this time will be disabled */
+ minTime?: string,
+
+ /** Maximum time, any time after this time will be disabled */
+ maxTime?: string
+}
+
+/** TimeSelect Component */
+export declare class ElTimeSelect extends ElementUIComponent {
+ /** Whether DatePicker is read only */
+ readonly: boolean
+
+ /** Whether DatePicker is disabled */
+ disabled: boolean
+
+ /** Whether the input is editable */
+ editable: boolean
+
+ /** Whether to show clear button */
+ clearable: boolean
+
+ /** Size of Input */
+ size: ElementUIComponentSize
+
+ /** Placeholder */
+ placeholder: string
+
+ /** Value of the picker */
+ value: string | Date
+
+ /** Alignment */
+ align: ElementUIHorizontalAlignment
+
+ /** Custom class name for TimePicker's dropdown */
+ popperClass: string
+
+ /** Additional options, check the table below */
+ pickerOptions: TimeSelectOptions
+
+ /**
+ * Focus the Input component
+ */
+ focus (): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tooltip.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tooltip.d.ts
new file mode 100644
index 0000000..a62c179
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tooltip.d.ts
@@ -0,0 +1,49 @@
+import { ElementUIComponent } from './component'
+import { PopoverPlacement } from './popover'
+
+export type TooltipEffect = 'dark' | 'light'
+
+/** Tooltip Component */
+export declare class ElTooltip extends ElementUIComponent {
+ /** Tooltip theme */
+ effect: TooltipEffect
+
+ /** Display content, can be overridden by slot#content */
+ content: String
+
+ /** Position of Tooltip */
+ placement: PopoverPlacement
+
+ /** Visibility of Tooltip */
+ value: boolean
+
+ /** Whether Tooltip is disabled */
+ disabled: boolean
+
+ /** Offset of the Tooltip */
+ offset: number
+
+ /** Animation name */
+ transition: string
+
+ /** Whether an arrow is displayed. For more information, check Vue-popper page */
+ visibleArrow: boolean
+
+ /** Popper.js parameters */
+ popperOptions: object
+
+ /** Delay of appearance, in millisecond */
+ openDelay: number
+
+ /** Whether to control Tooltip manually. mouseenter and mouseleave won't have effects if set to true */
+ manual: boolean
+
+ /** Custom class name for Tooltip's popper */
+ popperClass: string
+
+ /** Whether the mouse can enter the tooltip */
+ enterable: string
+
+ /** Timeout in milliseconds to hide tooltip */
+ hideAfter: string
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/transfer.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/transfer.d.ts
new file mode 100644
index 0000000..9f35a7b
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/transfer.d.ts
@@ -0,0 +1,73 @@
+import { CreateElement, VNode } from 'vue'
+import { ElementUIComponent } from './component'
+
+export type TransferPanelPosition = 'left' | 'right'
+
+export interface TransferData {
+ key: any,
+ label: string,
+ disabled: boolean
+}
+
+export interface TransferFormat {
+ noChecked: string,
+ hasChecked: string,
+}
+
+export interface TransferProps {
+ key: string,
+ label: string,
+ disabled: string
+}
+
+export interface TransferRenderContent {
+ /**
+ * Render function for a specific option
+ *
+ * @param h The render function
+ * @param option The option data object
+ */
+ (h: CreateElement, option: TransferData): VNode
+}
+
+/** Transfer Component */
+export declare class ElTransfer extends ElementUIComponent {
+ /** Data source */
+ data: TransferData[]
+
+ /** Whether Transfer is filterable */
+ filterable: boolean
+
+ /** Placeholder for the filter input */
+ filterPlaceholder: string
+
+ /** Custom filter method */
+ filterMethod: (query: string, item: TransferData) => boolean
+
+ /** Order strategy for elements in the target list */
+ targetOrder: string
+
+ /** Custom list titles */
+ titles: string[]
+
+ /** Custom button texts */
+ buttonTexts: string[]
+
+ /** Custom render function for data items */
+ renderContent: TransferRenderContent
+
+ /** Texts for checking status in list header */
+ format: TransferFormat
+
+ /** Prop aliases for data source */
+ props: TransferProps
+
+ /** Key array of initially checked data items of the left list */
+ leftDefaultChecked: any[]
+
+ /** Key array of initially checked data items of the right list */
+ rightDefaultChecked: any[]
+
+ /** Clear the query text in specified panel */
+ clearQuery (which: TransferPanelPosition): void
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tree.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tree.d.ts
new file mode 100644
index 0000000..f1cc8e9
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/tree.d.ts
@@ -0,0 +1,264 @@
+import { CreateElement, VNode } from 'vue';
+import { ElementUIComponent } from './component';
+
+export interface TreeData {
+ id?: any;
+ label?: string;
+ disabled?: boolean;
+ isLeaf?: boolean;
+ children?: TreeData[];
+}
+
+export interface TreeProps {
+ label: string;
+ disabled: string;
+ isLeaf: string;
+ children: string;
+}
+
+export interface TreeNode {
+ checked: boolean;
+ childNodes: TreeNode[];
+ data: D;
+ expanded: boolean;
+ id: number;
+ indeterminate: boolean;
+ isLeaf: boolean;
+ level: number;
+ loaded: boolean;
+ loading: boolean;
+ parent: TreeNode | null;
+ store: any;
+ visible: boolean;
+ disabled: boolean;
+ icon: string;
+ key: K;
+ label: string;
+ nextSibling: TreeNode | null;
+ previousSibling: TreeNode | null;
+}
+
+/** incomplete, you can convert to any to use other properties */
+export interface TreeStore {
+ _getAllNodes: () => TreeNode[];
+}
+
+/** Tree Component */
+export declare class ElTree extends ElementUIComponent {
+ /** TreeStore */
+ store: TreeStore;
+
+ /** Tree data */
+ data: D[];
+
+ /** Text displayed when data is void */
+ emptyText: string;
+
+ /** Unique identity key name for nodes, its value should be unique across the whole tree */
+ nodeKey: string;
+
+ /** Configuration options, see the following table */
+ props: TreeProps;
+
+ /** Method for loading subtree data */
+ load: (data: D, resolve: Function) => void;
+
+ /**
+ * Render function for a specific node
+ *
+ * @param h The render function
+ */
+ renderContent: (h: CreateElement, context: { node: TreeNode; data: D; store: TreeStore }) => VNode;
+
+ /** Whether current node is highlighted */
+ highlightCurrent: boolean;
+
+ /** Whether to expand all nodes by default */
+ defaultExpandAll: boolean;
+
+ /** Whether to expand or collapse node when clicking on the node. If false, then expand or collapse node only when clicking on the arrow icon. */
+ expandOnClickNode: boolean;
+
+ /** Whether to check or uncheck node when clicking on the node, if false, the node can only be checked or unchecked by clicking on the checkbox. */
+ checkOnClickNode: boolean;
+
+ /** Whether to expand father node when a child node is expanded */
+ autoExpandParent: boolean;
+
+ /** Array of keys of initially expanded nodes */
+ defaultExpandedKeys: K[];
+
+ /** Whether node is selectable */
+ showCheckbox: boolean;
+
+ /** Whether checked state of a node not affects its father and child nodes when show-checkbox is true */
+ checkStrictly: boolean;
+
+ /** Array of keys of initially checked nodes */
+ defaultCheckedKeys: K[];
+
+ /**
+ * This function will be executed on each node when use filter method. If return false, tree node will be hidden.
+ *
+ * @param value The query string
+ * @param data The original data object
+ * @param node Tree node
+ */
+ filterNodeMethod: (value: string, data: D, node: TreeNode) => boolean;
+
+ /** Whether only one node among the same level can be expanded at one time */
+ accordion: boolean;
+
+ /** Horizontal indentation of nodes in adjacent levels in pixels */
+ indent: number;
+
+ /** Whether enable tree nodes drag and drop */
+ draggable: boolean;
+
+ /**
+ * Function to be executed before dragging a node
+ *
+ * @param node The node to be dragged
+ */
+ allowDrag: (node: TreeNode) => boolean;
+
+ /**
+ * Function to be executed before the dragging node is dropped
+ *
+ * @param draggingNode The dragging node
+ * @param dropNode The target node
+ * @param type Drop type
+ */
+ allowDrop: (draggingNode: TreeNode, dropNode: TreeNode, type: 'prev' | 'inner' | 'next') => boolean;
+
+ /**
+ * Filter all tree nodes. Filtered nodes will be hidden
+ *
+ * @param value The value to be used as first parameter for `filter-node-method`
+ */
+ filter(value: any): void;
+
+ /**
+ * Update the children of the node which specified by the key
+ *
+ * @param key the key of the node which children will be updated
+ * @param data the children data
+ */
+ updateKeyChildren(key: K, data: D[]): void;
+
+ /**
+ * If the node can be selected (`show-checkbox` is `true`), it returns the currently selected array of nodes
+ *
+ * @param leafOnly If the `leafOnly` is `true`, it only returns the currently selected array of sub-nodes
+ * @param includeHalfChecked If the `includeHalfChecked` is `true`, the return value contains halfchecked nodes
+ */
+ getCheckedNodes(leafOnly?: boolean, includeHalfChecked?: boolean): D[];
+
+ /**
+ * Set certain nodes to be checked. Only works when `node-key` is assigned
+ *
+ * @param nodes An array of nodes to be checked
+ * @param leafOnly If the parameter is true, it only returns the currently selected array of sub-nodes
+ */
+ setCheckedNodes(data: D[], leafOnly?: boolean): void;
+
+ /**
+ * If the node can be selected (`show-checkbox` is `true`), it returns the currently selected array of nodes' keys
+ *
+ * @param leafOnly If the `leafOnly` is `true`, it only returns the currently selected array of sub-nodes
+ */
+ getCheckedKeys(leafOnly?: boolean): K[];
+
+ /**
+ * Set certain nodes to be checked. Only works when `node-key` is assigned
+ *
+ * @param keys An array of node's keys to be checked
+ * @param leafOnly If the parameter is true, it only returns the currently selected array of sub-nodes
+ */
+ setCheckedKeys(keys: K[], leafOnly?: boolean): void;
+
+ /**
+ * Set node to be checked or not. Only works when `node-key` is assigned
+ *
+ * @param data Node's key or data to be checked
+ * @param checked Indicating the node checked or not
+ * @param deep Indicating whether to checked state deeply or not
+ */
+ setChecked(data: D | K, checked: boolean, deep: boolean): void;
+
+ /**
+ * If the node can be selected (`show-checkbox` is `true`), it returns the currently half selected array of nodes
+ */
+ getHalfCheckedNodes(): D[];
+
+ /**
+ * If the node can be selected (`show-checkbox` is `true`), it returns the currently half selected array of nodes' keys
+ */
+ getHalfCheckedKeys(): K[];
+
+ /**
+ * Return the highlight node's key (null if no node is highlighted)
+ */
+ getCurrentKey(): K;
+
+ /**
+ * Set highlighted node by key, only works when node-key is assigned
+ *
+ * @param key The node's key to be highlighted
+ */
+ setCurrentKey(key: K): void;
+
+ /**
+ * Return the highlight node (null if no node is highlighted)
+ */
+ getCurrentNode(): D;
+
+ /**
+ * Set highlighted node, only works when node-key is assigned
+ *
+ * @param node The node to be highlighted
+ */
+ setCurrentNode(data: D): void;
+
+ /**
+ * Get node by node key or node data
+ *
+ * @param by node key or node data
+ */
+ getNode(by: D | K): TreeNode;
+
+ /**
+ * Remove node by key or node data or node instance
+ *
+ * @param by key or node data or node instance
+ */
+ remove(by: D | K): void;
+
+ /**
+ * Append a child node to specified node
+ *
+ * @param childData the data of appended node
+ * @param parent key or node data or node instance of the parent node
+ */
+ append(childData: D, parent: D | K): void;
+
+ /**
+ * insert a node before specified node
+ *
+ * @param data the data of inserted node
+ * @param ref key or node data or node instance of the reference node
+ */
+ insertBefore(data: D, ref: D | K): void;
+
+ /**
+ * insert a node after specified node
+ *
+ * @param data the data of inserted node
+ * @param ref key or node data or node instance of the reference node
+ */
+ insertAfter(data: D, ref: D | K): void;
+
+ /** Custom tree node icon */
+ iconClass?: string;
+
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/upload.d.ts b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/upload.d.ts
new file mode 100644
index 0000000..6539695
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/element-ui/types/upload.d.ts
@@ -0,0 +1,124 @@
+import { ElementUIComponent } from './component'
+
+export type ListType = 'text' | 'picture' | 'picture-card'
+export type FileUploadStatus = 'ready' | 'uploading' | 'success' | 'fail'
+
+export interface FileListItem {
+ name: string,
+ url: string,
+ status?: FileUploadStatus
+}
+
+export interface ElUploadInternalRawFile extends File {
+ uid: number
+}
+
+export interface ElUploadInternalFileDetail {
+ status: FileUploadStatus,
+ name: string,
+ size: number,
+ percentage: number,
+ uid: number,
+ raw: ElUploadInternalRawFile,
+ url?: string
+}
+
+export interface ElUploadProgressEvent extends ProgressEvent {
+ percent: number
+}
+
+export interface HttpRequestOptions {
+ headers: object,
+ withCredentials: boolean,
+ file: ElUploadInternalFileDetail,
+ data: object,
+ filename: string,
+ action: string,
+ onProgress: (e: ElUploadProgressEvent) => void,
+ onSuccess: (response: any) => void,
+ onError: (err: ErrorEvent) => void
+}
+
+/** Upload Component */
+export declare class ElUpload extends ElementUIComponent {
+ /** Request URL (required) */
+ action: string
+
+ /** Request headers */
+ headers: object
+
+ /** Whether uploading multiple files is permitted */
+ multiple: boolean
+
+ /** Additions options of request */
+ data: object
+
+ /** Key name for uploaded file */
+ name: string
+
+ /** Whether cookies are sent */
+ withCredentials: boolean
+
+ /** Whether to show the uploaded file list */
+ showFileList: boolean
+
+ /** Whether to activate drag and drop mode */
+ drag: boolean
+
+ /** Accepted file types, will not work when thumbnail-mode is true */
+ accept: string
+
+ /** Hook function when clicking the uploaded files */
+ onPreview: (file: ElUploadInternalFileDetail) => void
+
+ /** Hook function when files are removed */
+ onRemove: (file: ElUploadInternalFileDetail, fileList: ElUploadInternalFileDetail[]) => void
+
+ /** Hook function when uploaded successfully */
+ onSuccess: (response: any, file: ElUploadInternalFileDetail, fileList: ElUploadInternalFileDetail) => void
+
+ /** Hook function when some errors occurs */
+ onError: (err: ErrorEvent, file: ElUploadInternalFileDetail, fileList: ElUploadInternalFileDetail) => void
+
+ /** Hook function when some progress occurs */
+ onProgress: (event: ElUploadProgressEvent, file: ElUploadInternalFileDetail, fileList: ElUploadInternalFileDetail) => void
+
+ /** Hook function when file status change */
+ onChange: (file: ElUploadInternalFileDetail, fileList: ElUploadInternalFileDetail[]) => void
+
+ /** Hook function before uploading with the file to be uploaded as its parameter. If false or a Promise is returned, uploading will be aborted */
+ beforeUpload: (file: ElUploadInternalRawFile) => boolean | Promise
+
+ /** Whether thumbnail is displayed */
+ thumbnailMode: boolean
+
+ /** Default uploaded files */
+ fileList: FileListItem[]
+
+ /** Type of fileList */
+ listType: ListType
+
+ /** Whether to auto upload file */
+ autoUpload: boolean
+
+ /** Override default xhr behavior, allowing you to implement your own upload-file's request */
+ httpRequest: (options: HttpRequestOptions) => void
+
+ /** Whether to disable upload */
+ disabled: boolean
+
+ /** Maximum number of uploads allowed */
+ limit: number
+
+ /** Hook function when limit is exceeded */
+ onExceed: (file: ElUploadInternalFileDetail, fileList: ElUploadInternalFileDetail[]) => void
+
+ /** Clear the upload file list */
+ clearFiles (): void;
+
+ /** Abort specified file */
+ abort (file: ElUploadInternalFileDetail): void
+
+ /** Upload the file list manually */
+ submit ():void;
+}
diff --git a/src/SsmDemo2.0-master/src/main/resources/static/jquery-3.3.1.min.js b/src/SsmDemo2.0-master/src/main/resources/static/jquery-3.3.1.min.js
new file mode 100644
index 0000000..49d1fcf
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/static/jquery-3.3.1.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/
+
+
+
+
+
+
+
+
+
+
+ 用户管理系统
+
+
+
+ {{ user.name }}
+
+
+ 修改个人信息
+ 修改密码
+ 退出登录
+
+
+
+
+
+ 新增用户
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 确认
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 确认
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/SsmDemo2.0-master/src/main/resources/templates/index.html b/src/SsmDemo2.0-master/src/main/resources/templates/index.html
new file mode 100644
index 0000000..4893602
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/main/resources/templates/index.html
@@ -0,0 +1,192 @@
+
+
+
+
+ SSM Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 用户管理系统
+
+
+
+
+
+
+
+
+
+
+ 登录
+
+ 还没有账户?立即注册
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 注册
+
+ 已有账户?请登录
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SsmDemo2.0-master/src/test/java/com/eknows/SsmDemoApplicationTests.java b/src/SsmDemo2.0-master/src/test/java/com/eknows/SsmDemoApplicationTests.java
new file mode 100644
index 0000000..95e6be5
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/test/java/com/eknows/SsmDemoApplicationTests.java
@@ -0,0 +1,17 @@
+package com.eknows;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SsmDemoApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+
diff --git a/src/SsmDemo2.0-master/src/test/java/com/eknows/Test.java b/src/SsmDemo2.0-master/src/test/java/com/eknows/Test.java
new file mode 100644
index 0000000..2fd7fc9
--- /dev/null
+++ b/src/SsmDemo2.0-master/src/test/java/com/eknows/Test.java
@@ -0,0 +1,27 @@
+package com.eknows;
+
+import com.eknows.model.bean.entity.User;
+import com.eknows.model.dao.UserDAO;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class Test {
+
+ @Autowired
+ private UserDAO userDAO;
+
+ @org.junit.Test
+ public void test() {
+ User user = new User();
+ user.setName("你好啊");
+ user.setPassword("123456");
+ //user.setAddress("不知道的");
+ //user.setLastLoginTime(new Date());
+ userDAO.insert(user);
+ }
+}
diff --git a/src/src.txt b/src/src.txt
deleted file mode 100644
index 7c4a013..0000000
--- a/src/src.txt
+++ /dev/null
@@ -1 +0,0 @@
-aaa
\ No newline at end of file