From 955687d473d736f2c39b3421bed83cdb583968a4 Mon Sep 17 00:00:00 2001 From: qsh <> Date: Tue, 21 Mar 2023 00:53:28 +0800 Subject: [PATCH] eslint --- .eslintrc.js | 8 +- public/index.html | 272 ++-- public/loading/index.js | 208 ++++ public/loading/prefixfree.min.js | 477 +++++++ public/logo.png | Bin 0 -> 140401 bytes src/api/login.js | 16 +- src/api/menu.js | 6 +- src/api/monitor/cache.js | 16 +- src/api/monitor/job.js | 23 +- src/api/monitor/jobLog.js | 8 +- src/api/monitor/logininfor.js | 10 +- src/api/monitor/online.js | 6 +- src/api/monitor/operlog.js | 8 +- src/api/monitor/server.js | 6 +- src/api/sch/classType.js | 14 +- src/api/sch/place.js | 8 +- src/api/sch/school.js | 26 +- src/api/system/config.js | 16 +- src/api/system/dept.js | 16 +- src/api/system/dict/data.js | 14 +- src/api/system/dict/type.js | 18 +- src/api/system/employee.js | 30 +- src/api/system/menu.js | 18 +- src/api/system/notice.js | 14 +- src/api/system/post.js | 12 +- src/api/system/role.js | 34 +- src/api/system/user.js | 38 +- src/api/tool/gen.js | 20 +- src/api/zs/clue.js | 69 +- src/api/zs/sign.js | 30 +- src/assets/icons/index.js | 12 +- src/components/Breadcrumb/index.vue | 37 +- src/components/Crontab/day.vue | 297 ++--- src/components/Crontab/hour.vue | 211 ++-- src/components/Crontab/index.vue | 332 ++--- src/components/Crontab/min.vue | 213 ++-- src/components/Crontab/month.vue | 210 ++-- src/components/Crontab/result.vue | 1103 +++++++++-------- src/components/Crontab/second.vue | 216 ++-- src/components/Crontab/week.vue | 369 +++--- src/components/Crontab/year.vue | 240 ++-- src/components/CustomColumnTable/index.vue | 114 +- src/components/DictData/index.js | 50 +- src/components/DictTag/index.vue | 29 +- src/components/Editor/index.vue | 213 ++-- src/components/FileUpload/index.vue | 79 +- src/components/Hamburger/index.vue | 13 +- src/components/HeaderSearch/index.vue | 101 +- src/components/IconSelect/index.vue | 58 +- src/components/IconSelect/requireIcons.js | 15 +- src/components/ImagePreview/index.vue | 33 +- src/components/ImageUpload/index.vue | 115 +- src/components/Pagination/index.vue | 40 +- src/components/PanThumb/index.vue | 2 +- src/components/ParentView/index.vue | 2 +- src/components/RightPanel/index.vue | 38 +- src/components/RightToolbar/index.vue | 55 +- src/components/RuoYi/Doc/index.vue | 21 - src/components/RuoYi/Git/index.vue | 21 - src/components/Screenfull/index.vue | 24 +- src/components/SizeSelect/index.vue | 23 +- src/components/SvgIcon/index.vue | 16 +- src/components/ThemePicker/index.vue | 163 ++- src/components/TopNav/index.vue | 70 +- src/components/iFrame/index.vue | 13 +- src/directive/click/throttle.js | 6 +- src/directive/dialog/drag.js | 21 +- src/directive/dialog/dragHeight.js | 66 +- src/directive/dialog/dragWidth.js | 58 +- src/directive/index.js | 40 +- src/directive/input/trim.js | 19 +- src/directive/module/clipboard.js | 24 +- src/directive/permission/hasPermi.js | 26 +- src/directive/permission/hasRole.js | 26 +- src/global/components.js | 34 +- src/global/func.js | 11 +- src/global/global.js | 2 +- src/global/index.js | 8 +- src/layout/components/IframeToggle/index.vue | 14 +- src/layout/components/InnerLink/index.vue | 20 +- src/layout/components/Navbar.vue | 2 +- src/layout/components/Settings/index.vue | 164 +-- src/layout/components/Sidebar/FixiOSBug.js | 16 +- src/layout/components/Sidebar/Item.vue | 19 +- src/layout/components/Sidebar/Link.vue | 14 +- src/layout/components/Sidebar/SidebarItem.vue | 53 +- src/layout/components/Sidebar/index.vue | 82 +- src/layout/components/TagsView/ScrollPane.vue | 54 +- src/layout/components/TagsView/index.vue | 179 ++- src/layout/components/index.js | 10 +- src/layout/index.vue | 104 +- src/layout/mixin/ResizeHandler.js | 30 +- src/main.js | 29 - src/plugins/cache.js | 58 +- src/plugins/modal.js | 44 +- src/plugins/tab.js | 19 +- src/router/index.js | 126 +- src/settings.js | 2 +- src/store/modules/app.js | 44 +- src/store/modules/dict.js | 30 +- src/store/modules/settings.js | 22 +- src/store/modules/tagsView.js | 218 ++-- src/store/modules/user.js | 112 +- src/utils/dict/Dict.js | 83 +- src/utils/dict/DictConverter.js | 14 +- src/utils/dict/DictData.js | 6 +- src/utils/dict/DictMeta.js | 33 +- src/utils/dict/DictOptions.js | 28 +- src/utils/dict/index.js | 34 +- src/utils/errorCode.js | 10 +- src/utils/index.js | 2 +- src/utils/jsencrypt.js | 24 +- src/utils/request.js | 2 +- src/utils/ruoyi.js | 17 +- src/utils/scroll-to.js | 61 +- src/utils/storage.js | 5 - src/views/components/icons/element-icons.js | 285 ++++- src/views/components/icons/index.vue | 12 +- src/views/components/icons/svg-icons.js | 14 +- src/views/dashboard/BarChart.vue | 103 +- src/views/dashboard/LineChart.vue | 93 +- src/views/dashboard/PanelGroup.vue | 16 +- src/views/dashboard/PieChart.vue | 24 +- src/views/dashboard/RaddarChart.vue | 85 +- src/views/dashboard/mixins/resize.js | 38 +- src/views/demo/baseComponents/index.vue | 4 +- src/views/error/401.vue | 76 +- src/views/error/404.vue | 9 +- .../administration/components/SearchForm.vue | 0 src/views/finance/administration/index.vue | 26 + src/views/finance/finance/index.vue | 0 src/views/index_v1.vue | 21 +- src/views/monitor/cache/index.vue | 136 +- src/views/monitor/cache/list.vue | 150 +-- src/views/monitor/druid/index.vue | 8 +- src/views/monitor/job/index.vue | 266 ++-- src/views/monitor/job/log.vue | 175 +-- src/views/monitor/logininfor/index.vue | 181 +-- src/views/monitor/online/index.vue | 56 +- src/views/monitor/operlog/index.vue | 181 +-- src/views/monitor/server/index.vue | 254 +++- src/views/redirect.vue | 12 +- src/views/sch/classType.vue | 225 ++-- src/views/sch/components/schoolForm.vue | 37 +- src/views/sch/place.vue | 399 +++--- src/views/sch/school.vue | 69 +- src/views/system/config/index.vue | 203 +-- src/views/system/dept/index.vue | 173 +-- src/views/system/dict/data.vue | 234 ++-- src/views/system/dict/index.vue | 214 +--- src/views/system/employee/index.vue | 193 ++- src/views/system/menu/index.vue | 231 ++-- src/views/system/notice/index.vue | 172 +-- src/views/system/post/index.vue | 175 +-- src/views/system/role/authUser.vue | 128 +- src/views/system/role/index.vue | 255 ++-- src/views/system/role/selectUser.vue | 51 +- src/views/system/user/authRole.vue | 30 +- src/views/system/user/index.vue | 232 ++-- src/views/system/user/profile/index.vue | 16 +- src/views/system/user/profile/resetPwd.vue | 28 +- src/views/system/user/profile/userAvatar.vue | 72 +- src/views/system/user/profile/userInfo.vue | 32 +- src/views/zs/clue.vue | 495 ++++---- src/views/zs/components/batchUpdateForm.vue | 48 +- src/views/zs/components/clueForm.vue | 52 +- src/views/zs/components/distributeForm.vue | 63 +- src/views/zs/components/filterForm.vue | 29 +- src/views/zs/components/publicTable.vue | 48 +- src/views/zs/components/signForm.vue | 196 +-- vue.config.js | 25 +- 171 files changed, 7136 insertions(+), 7328 deletions(-) create mode 100644 public/loading/index.js create mode 100644 public/loading/prefixfree.min.js create mode 100644 public/logo.png delete mode 100644 src/components/RuoYi/Doc/index.vue delete mode 100644 src/components/RuoYi/Git/index.vue create mode 100644 src/views/finance/administration/components/SearchForm.vue create mode 100644 src/views/finance/administration/index.vue create mode 100644 src/views/finance/finance/index.vue diff --git a/.eslintrc.js b/.eslintrc.js index 375b935..17be2f1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -24,7 +24,7 @@ module.exports = { 'vue/max-attributes-per-line': [ 2, { - singleline: 10, // 当开始标签位于单行时,每行的最大属性数 + singleline: 20, // 当开始标签位于单行时,每行的最大属性数 // 当开始标签位于多行时,每行的最大属性数 multiline: { max: 1, @@ -75,7 +75,7 @@ module.exports = { curly: [2, 'multi-line'], // 强制所有控制语句使用一致的括号风格 'dot-location': [2, 'property'], // 在点之前和之后执行一致的换行符 'eol-last': 2, // 要求或禁止文件末尾存在空行 - eqeqeq: ['error', 'always', { null: 'ignore' }], // 要求使用 === 和 !== + // eqeqeq: ['error', 'never', { null: 'ignore' }], // 要求使用 === 和 !== // 强制 generator 函数中 * 号周围使用一致的空格 'generator-star-spacing': [ 2, @@ -290,6 +290,8 @@ module.exports = { objectsInObjects: false } ], - 'array-bracket-spacing': [2, 'never'] // 该规则在数组括号内强制实现一致的间距 + 'array-bracket-spacing': [2, 'never'], // 该规则在数组括号内强制实现一致的间距 + 'vue/require-default-prop': 'off', + 'vue/require-prop-types': 'off' } }; diff --git a/public/index.html b/public/index.html index 925455c..caf21b6 100644 --- a/public/index.html +++ b/public/index.html @@ -1,208 +1,92 @@ - - - - - + + + + + <%= webpackConfig.name %> - - + #loader-wrapper { + position: relative; + width: 100%; + height: 100%; + background: #1a1a34; + z-index: 1000; + } + +
-
-
-
-
-
正在加载系统资源,请耐心等待
-
-
+
+ +
资源加载中...
+
+ + diff --git a/public/loading/index.js b/public/loading/index.js new file mode 100644 index 0000000..e98df9e --- /dev/null +++ b/public/loading/index.js @@ -0,0 +1,208 @@ +/* ========================================================*/ +/* Light Loader +/*========================================================*/ +var lightLoader = function (c, cw, ch) { + var _this = this; + this.c = c; + this.ctx = c.getContext('2d'); + this.cw = cw; + this.ch = ch; + + this.loaded = 0; + this.loaderSpeed = 1.5; + this.loaderHeight = 8; + this.loaderWidth = 428; + this.loader = { + x: this.cw / 2 - this.loaderWidth / 2, + y: this.ch / 2 - this.loaderHeight / 2 + }; + this.particles = []; + this.particleLift = 180; + this.gravity = 0.15; + this.particleRate = 8; + + /* ========================================================*/ + /* Initialize + /*========================================================*/ + this.init = function () { + this.loop(); + }; + + /* ========================================================*/ + /* Utility Functions + /*========================================================*/ + this.rand = function (rMi, rMa) { + return ~~(Math.random() * (rMa - rMi + 1) + rMi); + }; + this.hitTest = function (x1, y1, w1, h1, x2, y2, w2, h2) { + return !(x1 + w1 < x2 || x2 + w2 < x1 || y1 + h1 < y2 || y2 + h2 < y1); + }; + + /* ========================================================*/ + /* Update Loader + /*========================================================*/ + this.updateLoader = function () { + if (this.loaded < 100) { + this.loaded += this.loaderSpeed; + } else { + this.loaded = 0; + } + }; + + /* ========================================================*/ + /* Render Loader + /*========================================================*/ + this.renderLoader = function () { + this.ctx.fillStyle = '#2F2F47'; + this.ctx.fillRect(this.loader.x, this.loader.y, this.loaderWidth, this.loaderHeight); + + var newWidth = (this.loaded / 100) * this.loaderWidth; + var linearGrad = this.ctx.createLinearGradient(0, 0, this.loaderWidth, 0); + linearGrad.addColorStop(0.0, '#24DED0'); + linearGrad.addColorStop(1.0, '#1490EA'); + this.ctx.fillStyle = linearGrad; + this.ctx.fillRect(this.loader.x, this.loader.y, newWidth, this.loaderHeight); + + // this.ctx.fillStyle = '#2F2F47'; + // this.ctx.fillRect( + // this.loader.x, + // this.loader.y, + // newWidth, + // this.loaderHeight + // ); + }; + + /* ========================================================*/ + /* Particles + /*========================================================*/ + this.Particle = function () { + this.x = _this.loader.x + (_this.loaded / 100) * _this.loaderWidth - _this.rand(0, 1); + this.y = _this.ch / 2 + _this.rand(0, _this.loaderHeight) - _this.loaderHeight / 2; + this.vx = (_this.rand(0, 4) - 2) / 100; + this.vy = (_this.rand(0, _this.particleLift) - _this.particleLift * 2) / 100; + this.width = _this.rand(1, 4) / 2; + this.height = _this.rand(1, 4) / 2; + }; + + this.Particle.prototype.update = function (i) { + this.vx += (_this.rand(0, 6) - 3) / 100; + this.vy += _this.gravity; + this.x += this.vx; + this.y += this.vy; + + if (this.y > _this.ch) { + _this.particles.splice(i, 1); + } + }; + + this.Particle.prototype.render = function () { + _this.ctx.fillStyle = 'rgba(50, 213, 203, 0.4)'; + _this.ctx.fillRect(this.x, this.y, this.width, this.height); + }; + + this.createParticles = function () { + var i = this.particleRate; + while (i--) { + this.particles.push(new this.Particle()); + } + }; + + this.updateParticles = function () { + var i = this.particles.length; + while (i--) { + var p = this.particles[i]; + p.update(i); + } + }; + + this.renderParticles = function () { + var i = this.particles.length; + while (i--) { + var p = this.particles[i]; + p.render(); + } + }; + + /* ========================================================*/ + /* Clear Canvas + /*========================================================*/ + this.clearCanvas = function () { + this.ctx.globalCompositeOperation = 'source-over'; + this.ctx.clearRect(0, 0, this.cw, this.ch); + this.ctx.globalCompositeOperation = 'lighter'; + }; + + /* ========================================================*/ + /* Animation Loop + /*========================================================*/ + this.loop = function () { + var loopIt = function () { + requestAnimationFrame(loopIt, _this.c); + _this.clearCanvas(); + + _this.createParticles(); + + _this.updateLoader(); + _this.updateParticles(); + + _this.renderLoader(); + _this.renderParticles(); + }; + loopIt(); + }; +}; + +/* ========================================================*/ +/* Check Canvas Support +/*========================================================*/ +var isCanvasSupported = function () { + var elem = document.createElement('canvas'); + return !!(elem.getContext && elem.getContext('2d')); +}; + +/* ========================================================*/ +/* Setup requestAnimationFrame +/*========================================================*/ +var setupRAF = function () { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = function (callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function () { + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + } + + if (!window.cancelAnimationFrame) { + window.cancelAnimationFrame = function (id) { + clearTimeout(id); + }; + } +}; + +/* ========================================================*/ +/* Define Canvas and Initialize +/*========================================================*/ +if (isCanvasSupported) { + var c = document.createElement('canvas'); + c.width = 428; + c.height = 100; + var cw = c.width; + var ch = c.height; + // document.body.appendChild(c); + document.getElementById('loader-wrapper').appendChild(c); + var cl = new lightLoader(c, cw, ch); + + setupRAF(); + cl.init(); +} diff --git a/public/loading/prefixfree.min.js b/public/loading/prefixfree.min.js new file mode 100644 index 0000000..5c33854 --- /dev/null +++ b/public/loading/prefixfree.min.js @@ -0,0 +1,477 @@ +(function () { + if (!window.addEventListener) { + return; + } + + var self = (window.StyleFix = { + link: function (link) { + try { + // Ignore stylesheets with data-noprefix attribute as well as alternate stylesheets + if (link.rel !== 'stylesheet' || link.hasAttribute('data-noprefix')) { + return; + } + } catch (e) { + return; + } + + var url = link.href || link.getAttribute('data-href'); + var base = url.replace(/[^\/]+$/, ''); + var base_scheme = (/^[a-z]{3,10}:/.exec(base) || [''])[0]; + var base_domain = (/^[a-z]{3,10}:\/\/[^\/]+/.exec(base) || [''])[0]; + var base_query = /^([^?]*)\??/.exec(url)[1]; + var parent = link.parentNode; + var xhr = new XMLHttpRequest(); + var process; + + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + process(); + } + }; + + process = function () { + var css = xhr.responseText; + + if (css && link.parentNode && (!xhr.status || xhr.status < 400 || xhr.status > 600)) { + css = self.fix(css, true, link); + + // Convert relative URLs to absolute, if needed + if (base) { + css = css.replace(/url\(\s*?((?:"|')?)(.+?)\1\s*?\)/gi, function ($0, quote, url) { + if (/^([a-z]{3,10}:|#)/i.test(url)) { + // Absolute & or hash-relative + return $0; + } else if (/^\/\//.test(url)) { + // Scheme-relative + // May contain sequences like /../ and /./ but those DO work + return 'url("' + base_scheme + url + '")'; + } else if (/^\//.test(url)) { + // Domain-relative + return 'url("' + base_domain + url + '")'; + } else if (/^\?/.test(url)) { + // Query-relative + return 'url("' + base_query + url + '")'; + } else { + // Path-relative + return 'url("' + base + url + '")'; + } + }); + + // behavior URLs shoudn’t be converted (Issue #19) + // base should be escaped before added to RegExp (Issue #81) + var escaped_base = base.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g, '\\$1'); + css = css.replace(RegExp('\\b(behavior:\\s*?url\\(\'?"?)' + escaped_base, 'gi'), '$1'); + } + + var style = document.createElement('style'); + style.textContent = css; + style.media = link.media; + style.disabled = link.disabled; + style.setAttribute('data-href', link.getAttribute('href')); + + parent.insertBefore(style, link); + parent.removeChild(link); + + style.media = link.media; // Duplicate is intentional. See issue #31 + } + }; + + try { + xhr.open('GET', url); + xhr.send(null); + } catch (e) { + // Fallback to XDomainRequest if available + if (typeof XDomainRequest !== 'undefined') { + xhr = new XDomainRequest(); + xhr.onerror = xhr.onprogress = function () {}; + xhr.onload = process; + xhr.open('GET', url); + xhr.send(null); + } + } + + link.setAttribute('data-inprogress', ''); + }, + + styleElement: function (style) { + if (style.hasAttribute('data-noprefix')) { + return; + } + var disabled = style.disabled; + + style.textContent = self.fix(style.textContent, true, style); + + style.disabled = disabled; + }, + + styleAttribute: function (element) { + var css = element.getAttribute('style'); + + css = self.fix(css, false, element); + + element.setAttribute('style', css); + }, + + process: function () { + // Linked stylesheets + $('link[rel="stylesheet"]:not([data-inprogress])').forEach(StyleFix.link); + + // Inline stylesheets + $('style').forEach(StyleFix.styleElement); + + // Inline styles + $('[style]').forEach(StyleFix.styleAttribute); + }, + + register: function (fixer, index) { + (self.fixers = self.fixers || []).splice(index === undefined ? self.fixers.length : index, 0, fixer); + }, + + fix: function (css, raw, element) { + for (var i = 0; i < self.fixers.length; i++) { + css = self.fixers[i](css, raw, element) || css; + } + + return css; + }, + + camelCase: function (str) { + return str + .replace(/-([a-z])/g, function ($0, $1) { + return $1.toUpperCase(); + }) + .replace('-', ''); + }, + + deCamelCase: function (str) { + return str.replace(/[A-Z]/g, function ($0) { + return '-' + $0.toLowerCase(); + }); + } + }); + + /** ************************************ + * Process styles + **************************************/ + (function () { + setTimeout(function () { + $('link[rel="stylesheet"]').forEach(StyleFix.link); + }, 10); + + document.addEventListener('DOMContentLoaded', StyleFix.process, false); + })(); + + function $(expr, con) { + return [].slice.call((con || document).querySelectorAll(expr)); + } +})(); + +/** + * PrefixFree + */ +(function (root) { + if (!window.StyleFix || !window.getComputedStyle) { + return; + } + + // Private helper + function fix(what, before, after, replacement, css) { + what = self[what]; + + if (what.length) { + var regex = RegExp(before + '(' + what.join('|') + ')' + after, 'gi'); + + css = css.replace(regex, replacement); + } + + return css; + } + + var self = (window.PrefixFree = { + prefixCSS: function (css, raw, element) { + var prefix = self.prefix; + + // Gradient angles hotfix + if (self.functions.indexOf('linear-gradient') > -1) { + // Gradients are supported with a prefix, convert angles to legacy + css = css.replace(/(\s|:|,)(repeating-)?linear-gradient\(\s*(-?\d*\.?\d*)deg/gi, function ($0, delim, repeating, deg) { + return delim + (repeating || '') + 'linear-gradient(' + (90 - deg) + 'deg'; + }); + } + + css = fix('functions', '(\\s|:|,)', '\\s*\\(', '$1' + prefix + '$2(', css); + css = fix('keywords', '(\\s|:)', '(\\s|;|\\}|$)', '$1' + prefix + '$2$3', css); + css = fix('properties', '(^|\\{|\\s|;)', '\\s*:', '$1' + prefix + '$2:', css); + + // Prefix properties *inside* values (issue #8) + if (self.properties.length) { + var regex = RegExp('\\b(' + self.properties.join('|') + ')(?!:)', 'gi'); + + css = fix( + 'valueProperties', + '\\b', + ':(.+?);', + function ($0) { + return $0.replace(regex, prefix + '$1'); + }, + css + ); + } + + if (raw) { + css = fix('selectors', '', '\\b', self.prefixSelector, css); + css = fix('atrules', '@', '\\b', '@' + prefix + '$1', css); + } + + // Fix double prefixing + css = css.replace(RegExp('-' + prefix, 'g'), '-'); + + // Prefix wildcard + css = css.replace(/-\*-(?=[a-z]+)/gi, self.prefix); + + return css; + }, + + property: function (property) { + return (self.properties.indexOf(property) ? self.prefix : '') + property; + }, + + value: function (value, property) { + value = fix('functions', '(^|\\s|,)', '\\s*\\(', '$1' + self.prefix + '$2(', value); + value = fix('keywords', '(^|\\s)', '(\\s|$)', '$1' + self.prefix + '$2$3', value); + + // TODO properties inside values + + return value; + }, + + // Warning: Prefixes no matter what, even if the selector is supported prefix-less + prefixSelector: function (selector) { + return selector.replace(/^:{1,2}/, function ($0) { + return $0 + self.prefix; + }); + }, + + // Warning: Prefixes no matter what, even if the property is supported prefix-less + prefixProperty: function (property, camelCase) { + var prefixed = self.prefix + property; + + return camelCase ? StyleFix.camelCase(prefixed) : prefixed; + } + }); + + /** ************************************ + * Properties + **************************************/ + (function () { + var prefixes = {}; + var properties = []; + var shorthands = {}; + var style = getComputedStyle(document.documentElement, null); + var dummy = document.createElement('div').style; + + // Why are we doing this instead of iterating over properties in a .style object? Cause Webkit won't iterate over those. + var iterate = function (property) { + if (property.charAt(0) === '-') { + properties.push(property); + + var parts = property.split('-'); + var prefix = parts[1]; + + // Count prefix uses + prefixes[prefix] = ++prefixes[prefix] || 1; + + // This helps determining shorthands + while (parts.length > 3) { + parts.pop(); + + var shorthand = parts.join('-'); + + if (supported(shorthand) && properties.indexOf(shorthand) === -1) { + properties.push(shorthand); + } + } + } + }; + var supported = function (property) { + return StyleFix.camelCase(property) in dummy; + }; + + // Some browsers have numerical indices for the properties, some don't + if (style.length > 0) { + for (var i = 0; i < style.length; i++) { + iterate(style[i]); + } + } else { + for (var property in style) { + iterate(StyleFix.deCamelCase(property)); + } + } + + // Find most frequently used prefix + var highest = { uses: 0 }; + for (var prefix in prefixes) { + var uses = prefixes[prefix]; + + if (highest.uses < uses) { + highest = { prefix: prefix, uses: uses }; + } + } + + self.prefix = '-' + highest.prefix + '-'; + self.Prefix = StyleFix.camelCase(self.prefix); + + self.properties = []; + + // Get properties ONLY supported with a prefix + for (var i = 0; i < properties.length; i++) { + var property = properties[i]; + + if (property.indexOf(self.prefix) === 0) { + // we might have multiple prefixes, like Opera + var unprefixed = property.slice(self.prefix.length); + + if (!supported(unprefixed)) { + self.properties.push(unprefixed); + } + } + } + + // IE fix + if (self.Prefix == 'Ms' && !('transform' in dummy) && !('MsTransform' in dummy) && 'msTransform' in dummy) { + self.properties.push('transform', 'transform-origin'); + } + + self.properties.sort(); + })(); + + /** ************************************ + * Values + **************************************/ + (function () { + // Values that might need prefixing + var functions = { + 'linear-gradient': { + property: 'backgroundImage', + params: 'red, teal' + }, + calc: { + property: 'width', + params: '1px + 5%' + }, + element: { + property: 'backgroundImage', + params: '#foo' + }, + 'cross-fade': { + property: 'backgroundImage', + params: 'url(a.png), url(b.png), 50%' + } + }; + + functions['repeating-linear-gradient'] = functions['repeating-radial-gradient'] = functions['radial-gradient'] = functions['linear-gradient']; + + // Note: The properties assigned are just to *test* support. + // The keywords will be prefixed everywhere. + var keywords = { + initial: 'color', + 'zoom-in': 'cursor', + 'zoom-out': 'cursor', + box: 'display', + flexbox: 'display', + 'inline-flexbox': 'display', + flex: 'display', + 'inline-flex': 'display', + grid: 'display', + 'inline-grid': 'display', + 'min-content': 'width' + }; + + self.functions = []; + self.keywords = []; + + var style = document.createElement('div').style; + + function supported(value, property) { + style[property] = ''; + style[property] = value; + + return !!style[property]; + } + + for (var func in functions) { + var test = functions[func]; + var property = test.property; + var value = func + '(' + test.params + ')'; + + if (!supported(value, property) && supported(self.prefix + value, property)) { + // It's supported, but with a prefix + self.functions.push(func); + } + } + + for (var keyword in keywords) { + var property = keywords[keyword]; + + if (!supported(keyword, property) && supported(self.prefix + keyword, property)) { + // It's supported, but with a prefix + self.keywords.push(keyword); + } + } + })(); + + /** ************************************ + * Selectors and @-rules + **************************************/ + (function () { + var selectors = { + ':read-only': null, + ':read-write': null, + ':any-link': null, + '::selection': null + }; + + var atrules = { + keyframes: 'name', + viewport: null, + document: 'regexp(".")' + }; + + self.selectors = []; + self.atrules = []; + + var style = root.appendChild(document.createElement('style')); + + function supported(selector) { + style.textContent = selector + '{}'; // Safari 4 has issues with style.innerHTML + + return !!style.sheet.cssRules.length; + } + + for (var selector in selectors) { + var test = selector + (selectors[selector] ? '(' + selectors[selector] + ')' : ''); + + if (!supported(test) && supported(self.prefixSelector(test))) { + self.selectors.push(selector); + } + } + + for (var atrule in atrules) { + var test = atrule + ' ' + (atrules[atrule] || ''); + + if (!supported('@' + test) && supported('@' + self.prefix + test)) { + self.atrules.push(atrule); + } + } + + root.removeChild(style); + })(); + + // Properties that accept properties as their value + self.valueProperties = ['transition', 'transition-property']; + + // Add class for current prefix + root.className += ' ' + self.prefix; + + StyleFix.register(self.prefixCSS); +})(document.documentElement); diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..40ce6f9718c90fab596fb023e5c9c49ec4e7340c GIT binary patch literal 140401 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

W-v|_K*oUEMtQ~c(0P? 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 literal 0 HcmV?d00001 diff --git a/src/api/login.js b/src/api/login.js index 649f59c..8c24dc9 100644 --- a/src/api/login.js +++ b/src/api/login.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 登录方法 export function login(username, password, code, uuid) { @@ -7,7 +7,7 @@ export function login(username, password, code, uuid) { password, code, uuid - } + }; return request({ url: '/login', headers: { @@ -15,7 +15,7 @@ export function login(username, password, code, uuid) { }, method: 'post', data: data - }) + }); } // 注册方法 @@ -27,7 +27,7 @@ export function register(data) { }, method: 'post', data: data - }) + }); } // 获取用户详细信息 @@ -35,7 +35,7 @@ export function getInfo() { return request({ url: '/getInfo', method: 'get' - }) + }); } // 退出方法 @@ -43,7 +43,7 @@ export function logout() { return request({ url: '/logout', method: 'post' - }) + }); } // 获取验证码 @@ -55,5 +55,5 @@ export function getCodeImg() { }, method: 'get', timeout: 20000 - }) -} \ No newline at end of file + }); +} diff --git a/src/api/menu.js b/src/api/menu.js index faef101..c86c318 100644 --- a/src/api/menu.js +++ b/src/api/menu.js @@ -1,9 +1,9 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 获取路由 export const getRouters = () => { return request({ url: '/getRouters', method: 'get' - }) -} \ No newline at end of file + }); +}; diff --git a/src/api/monitor/cache.js b/src/api/monitor/cache.js index 72c5f6a..d08af80 100644 --- a/src/api/monitor/cache.js +++ b/src/api/monitor/cache.js @@ -1,11 +1,11 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询缓存详细 export function getCache() { return request({ url: '/monitor/cache', method: 'get' - }) + }); } // 查询缓存名称列表 @@ -13,7 +13,7 @@ export function listCacheName() { return request({ url: '/monitor/cache/getNames', method: 'get' - }) + }); } // 查询缓存键名列表 @@ -21,7 +21,7 @@ export function listCacheKey(cacheName) { return request({ url: '/monitor/cache/getKeys/' + cacheName, method: 'get' - }) + }); } // 查询缓存内容 @@ -29,7 +29,7 @@ export function getCacheValue(cacheName, cacheKey) { return request({ url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, method: 'get' - }) + }); } // 清理指定名称缓存 @@ -37,7 +37,7 @@ export function clearCacheName(cacheName) { return request({ url: '/monitor/cache/clearCacheName/' + cacheName, method: 'delete' - }) + }); } // 清理指定键名缓存 @@ -45,7 +45,7 @@ export function clearCacheKey(cacheKey) { return request({ url: '/monitor/cache/clearCacheKey/' + cacheKey, method: 'delete' - }) + }); } // 清理全部缓存 @@ -53,5 +53,5 @@ export function clearCacheAll() { return request({ url: '/monitor/cache/clearCacheAll', method: 'delete' - }) + }); } diff --git a/src/api/monitor/job.js b/src/api/monitor/job.js index 3815569..affb0ec 100644 --- a/src/api/monitor/job.js +++ b/src/api/monitor/job.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询定时任务调度列表 export function listJob(query) { @@ -6,7 +6,7 @@ export function listJob(query) { url: '/monitor/job/list', method: 'get', params: query - }) + }); } // 查询定时任务调度详细 @@ -14,7 +14,7 @@ export function getJob(jobId) { return request({ url: '/monitor/job/' + jobId, method: 'get' - }) + }); } // 新增定时任务调度 @@ -23,7 +23,7 @@ export function addJob(data) { url: '/monitor/job', method: 'post', data: data - }) + }); } // 修改定时任务调度 @@ -32,7 +32,7 @@ export function updateJob(data) { url: '/monitor/job', method: 'put', data: data - }) + }); } // 删除定时任务调度 @@ -40,7 +40,7 @@ export function delJob(jobId) { return request({ url: '/monitor/job/' + jobId, method: 'delete' - }) + }); } // 任务状态修改 @@ -48,24 +48,23 @@ export function changeJobStatus(jobId, status) { const data = { jobId, status - } + }; return request({ url: '/monitor/job/changeStatus', method: 'put', data: data - }) + }); } - // 定时任务立即执行一次 export function runJob(jobId, jobGroup) { const data = { jobId, jobGroup - } + }; return request({ url: '/monitor/job/run', method: 'put', data: data - }) -} \ No newline at end of file + }); +} diff --git a/src/api/monitor/jobLog.js b/src/api/monitor/jobLog.js index 6e0be61..14d2d0a 100644 --- a/src/api/monitor/jobLog.js +++ b/src/api/monitor/jobLog.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询调度日志列表 export function listJobLog(query) { @@ -6,7 +6,7 @@ export function listJobLog(query) { url: '/monitor/jobLog/list', method: 'get', params: query - }) + }); } // 删除调度日志 @@ -14,7 +14,7 @@ export function delJobLog(jobLogId) { return request({ url: '/monitor/jobLog/' + jobLogId, method: 'delete' - }) + }); } // 清空调度日志 @@ -22,5 +22,5 @@ export function cleanJobLog() { return request({ url: '/monitor/jobLog/clean', method: 'delete' - }) + }); } diff --git a/src/api/monitor/logininfor.js b/src/api/monitor/logininfor.js index 4d112b7..a058007 100644 --- a/src/api/monitor/logininfor.js +++ b/src/api/monitor/logininfor.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询登录日志列表 export function list(query) { @@ -6,7 +6,7 @@ export function list(query) { url: '/monitor/logininfor/list', method: 'get', params: query - }) + }); } // 删除登录日志 @@ -14,7 +14,7 @@ export function delLogininfor(infoId) { return request({ url: '/monitor/logininfor/' + infoId, method: 'delete' - }) + }); } // 解锁用户登录状态 @@ -22,7 +22,7 @@ export function unlockLogininfor(userName) { return request({ url: '/monitor/logininfor/unlock/' + userName, method: 'get' - }) + }); } // 清空登录日志 @@ -30,5 +30,5 @@ export function cleanLogininfor() { return request({ url: '/monitor/logininfor/clean', method: 'delete' - }) + }); } diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js index bd22137..4991b48 100644 --- a/src/api/monitor/online.js +++ b/src/api/monitor/online.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询在线用户列表 export function list(query) { @@ -6,7 +6,7 @@ export function list(query) { url: '/monitor/online/list', method: 'get', params: query - }) + }); } // 强退用户 @@ -14,5 +14,5 @@ export function forceLogout(tokenId) { return request({ url: '/monitor/online/' + tokenId, method: 'delete' - }) + }); } diff --git a/src/api/monitor/operlog.js b/src/api/monitor/operlog.js index a04bca8..28a0a36 100644 --- a/src/api/monitor/operlog.js +++ b/src/api/monitor/operlog.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询操作日志列表 export function list(query) { @@ -6,7 +6,7 @@ export function list(query) { url: '/monitor/operlog/list', method: 'get', params: query - }) + }); } // 删除操作日志 @@ -14,7 +14,7 @@ export function delOperlog(operId) { return request({ url: '/monitor/operlog/' + operId, method: 'delete' - }) + }); } // 清空操作日志 @@ -22,5 +22,5 @@ export function cleanOperlog() { return request({ url: '/monitor/operlog/clean', method: 'delete' - }) + }); } diff --git a/src/api/monitor/server.js b/src/api/monitor/server.js index e1f9ca2..d992fd8 100644 --- a/src/api/monitor/server.js +++ b/src/api/monitor/server.js @@ -1,9 +1,9 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 获取服务信息 export function getServer() { return request({ url: '/monitor/server', method: 'get' - }) -} \ No newline at end of file + }); +} diff --git a/src/api/sch/classType.js b/src/api/sch/classType.js index e83037c..09950b0 100644 --- a/src/api/sch/classType.js +++ b/src/api/sch/classType.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询班型列表 export function getClassTypeTableList(query) { @@ -6,7 +6,7 @@ export function getClassTypeTableList(query) { url: '/sch/classType/list', method: 'get', params: query - }) + }); } // 新增班型 @@ -15,7 +15,7 @@ export function insertClassType(params) { url: '/sch/classType', method: 'post', data: params - }) + }); } // 修改班型 export function updateClassType(params) { @@ -23,21 +23,21 @@ export function updateClassType(params) { url: '/sch/classType', method: 'put', data: params - }) + }); } // 删除班型 export function deleteClassType(ids) { return request({ url: '/sch/classType/' + ids, method: 'delete' - }) + }); } -//克隆班型 +// 克隆班型 export function cloneClassType(data) { return request({ url: '/sch/classType/clone', method: 'post', data: data - }) + }); } diff --git a/src/api/sch/place.js b/src/api/sch/place.js index ea59c8b..b615e40 100644 --- a/src/api/sch/place.js +++ b/src/api/sch/place.js @@ -1,11 +1,11 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 获取地图数据 export function getMapData() { return request({ url: '/sch/place/list', method: 'get' - }) + }); } // 更新驾校状态 @@ -14,7 +14,7 @@ export async function updateSchoolStatus(data) { url: '/sch/place/updateSchool', method: 'put', data: data - }) + }); } // 保存场地状态 @@ -23,5 +23,5 @@ export function savePlace(data) { url: '/sch/place', method: 'post', data: data - }) + }); } diff --git a/src/api/sch/school.js b/src/api/sch/school.js index 2fda293..0bce887 100644 --- a/src/api/sch/school.js +++ b/src/api/sch/school.js @@ -1,36 +1,36 @@ -import request from '@/utils/request' +import request from '@/utils/request'; export default { pageList(data = {}) { return request({ - url: "/sch/school/list", - method: "get", - params: data, + url: '/sch/school/list', + method: 'get', + params: data }); }, getById(id) { return request({ url: `/sch/school/${id}`, - method: "get", + method: 'get' }); }, add(data = {}) { return request({ - url: "/sch/school", - method: "post", - data, + url: '/sch/school', + method: 'post', + data }); }, update(data = {}) { return request({ - url: "/sch/school", - method: "put", - data, + url: '/sch/school', + method: 'put', + data }); }, delete(id) { return request({ url: `/sch/school/${id}`, - method: "delete", + method: 'delete' }); } -} +}; diff --git a/src/api/system/config.js b/src/api/system/config.js index a404d82..d87985f 100644 --- a/src/api/system/config.js +++ b/src/api/system/config.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询参数列表 export function listConfig(query) { @@ -6,7 +6,7 @@ export function listConfig(query) { url: '/system/config/list', method: 'get', params: query - }) + }); } // 查询参数详细 @@ -14,7 +14,7 @@ export function getConfig(configId) { return request({ url: '/system/config/' + configId, method: 'get' - }) + }); } // 根据参数键名查询参数值 @@ -22,7 +22,7 @@ export function getConfigKey(configKey) { return request({ url: '/system/config/configKey/' + configKey, method: 'get' - }) + }); } // 新增参数配置 @@ -31,7 +31,7 @@ export function addConfig(data) { url: '/system/config', method: 'post', data: data - }) + }); } // 修改参数配置 @@ -40,7 +40,7 @@ export function updateConfig(data) { url: '/system/config', method: 'put', data: data - }) + }); } // 删除参数配置 @@ -48,7 +48,7 @@ export function delConfig(configId) { return request({ url: '/system/config/' + configId, method: 'delete' - }) + }); } // 刷新参数缓存 @@ -56,5 +56,5 @@ export function refreshCache() { return request({ url: '/system/config/refreshCache', method: 'delete' - }) + }); } diff --git a/src/api/system/dept.js b/src/api/system/dept.js index 494b284..fc0a4dd 100644 --- a/src/api/system/dept.js +++ b/src/api/system/dept.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询部门列表 export function listDept(query) { @@ -6,7 +6,7 @@ export function listDept(query) { url: '/system/dept/list', method: 'get', params: query - }) + }); } // 查询部门列表(排除节点) @@ -14,7 +14,7 @@ export function listDeptExcludeChild(deptId) { return request({ url: '/system/dept/list/exclude/' + deptId, method: 'get' - }) + }); } // 查询部门详细 @@ -22,7 +22,7 @@ export function getDept(deptId) { return request({ url: '/system/dept/' + deptId, method: 'get' - }) + }); } // 新增部门 @@ -31,7 +31,7 @@ export function addDept(data) { url: '/system/dept', method: 'post', data: data - }) + }); } // 修改部门 @@ -40,7 +40,7 @@ export function updateDept(data) { url: '/system/dept', method: 'put', data: data - }) + }); } // 删除部门 @@ -48,12 +48,12 @@ export function delDept(deptId) { return request({ url: '/system/dept/' + deptId, method: 'delete' - }) + }); } // 查询部门下拉树结构 export function deptTreeSelect() { return request({ url: '/system/dept/deptTree', method: 'get' - }) + }); } diff --git a/src/api/system/dict/data.js b/src/api/system/dict/data.js index 6c9eb79..118f62d 100644 --- a/src/api/system/dict/data.js +++ b/src/api/system/dict/data.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询字典数据列表 export function listData(query) { @@ -6,7 +6,7 @@ export function listData(query) { url: '/system/dict/data/list', method: 'get', params: query - }) + }); } // 查询字典数据详细 @@ -14,7 +14,7 @@ export function getData(dictCode) { return request({ url: '/system/dict/data/' + dictCode, method: 'get' - }) + }); } // 根据字典类型查询字典数据信息 @@ -22,7 +22,7 @@ export function getDicts(dictType) { return request({ url: '/system/dict/data/type/' + dictType, method: 'get' - }) + }); } // 新增字典数据 @@ -31,7 +31,7 @@ export function addData(data) { url: '/system/dict/data', method: 'post', data: data - }) + }); } // 修改字典数据 @@ -40,7 +40,7 @@ export function updateData(data) { url: '/system/dict/data', method: 'put', data: data - }) + }); } // 删除字典数据 @@ -48,5 +48,5 @@ export function delData(dictCode) { return request({ url: '/system/dict/data/' + dictCode, method: 'delete' - }) + }); } diff --git a/src/api/system/dict/type.js b/src/api/system/dict/type.js index a7a6e01..877c921 100644 --- a/src/api/system/dict/type.js +++ b/src/api/system/dict/type.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询字典类型列表 export function listType(query) { @@ -6,7 +6,7 @@ export function listType(query) { url: '/system/dict/type/list', method: 'get', params: query - }) + }); } // 查询字典类型详细 @@ -14,7 +14,7 @@ export function getType(dictId) { return request({ url: '/system/dict/type/' + dictId, method: 'get' - }) + }); } // 新增字典类型 @@ -23,7 +23,7 @@ export function addType(data) { url: '/system/dict/type', method: 'post', data: data - }) + }); } // 修改字典类型 @@ -32,7 +32,7 @@ export function updateType(data) { url: '/system/dict/type', method: 'put', data: data - }) + }); } // 删除字典类型 @@ -40,7 +40,7 @@ export function delType(dictId) { return request({ url: '/system/dict/type/' + dictId, method: 'delete' - }) + }); } // 刷新字典缓存 @@ -48,7 +48,7 @@ export function refreshCache() { return request({ url: '/system/dict/type/refreshCache', method: 'delete' - }) + }); } // 获取字典选择框列表 @@ -56,5 +56,5 @@ export function optionselect() { return request({ url: '/system/dict/type/optionselect', method: 'get' - }) -} \ No newline at end of file + }); +} diff --git a/src/api/system/employee.js b/src/api/system/employee.js index c07e3fa..b2d8db2 100644 --- a/src/api/system/employee.js +++ b/src/api/system/employee.js @@ -1,42 +1,42 @@ -import request from '@/utils/request' +import request from '@/utils/request'; export default { pageList(data = {}) { return request({ - url: "/system/employee/list", - method: "get", - params: data, + url: '/system/employee/list', + method: 'get', + params: data }); }, getById(id) { return request({ url: `/system/employee/${id}`, - method: "get", + method: 'get' }); }, add(data = {}) { return request({ - url: "/system/employee", - method: "post", - data, + url: '/system/employee', + method: 'post', + data }); }, update(data = {}) { return request({ - url: "/system/employee", - method: "put", - data, + url: '/system/employee', + method: 'put', + data }); }, delete(id) { return request({ url: `/system/employee/${id}`, - method: "delete", + method: 'delete' }); }, getEmployee() { return request({ - url: "/system/employee/getEmployees", - method: "get" + url: '/system/employee/getEmployees', + method: 'get' }); } -} +}; diff --git a/src/api/system/menu.js b/src/api/system/menu.js index f6415c6..7c9cbc7 100644 --- a/src/api/system/menu.js +++ b/src/api/system/menu.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询菜单列表 export function listMenu(query) { @@ -6,7 +6,7 @@ export function listMenu(query) { url: '/system/menu/list', method: 'get', params: query - }) + }); } // 查询菜单详细 @@ -14,7 +14,7 @@ export function getMenu(menuId) { return request({ url: '/system/menu/' + menuId, method: 'get' - }) + }); } // 查询菜单下拉树结构 @@ -22,7 +22,7 @@ export function treeselect() { return request({ url: '/system/menu/treeselect', method: 'get' - }) + }); } // 根据角色ID查询菜单下拉树结构 @@ -30,7 +30,7 @@ export function roleMenuTreeselect(roleId) { return request({ url: '/system/menu/roleMenuTreeselect/' + roleId, method: 'get' - }) + }); } // 新增菜单 @@ -39,7 +39,7 @@ export function addMenu(data) { url: '/system/menu', method: 'post', data: data - }) + }); } // 修改菜单 @@ -48,7 +48,7 @@ export function updateMenu(data) { url: '/system/menu', method: 'put', data: data - }) + }); } // 删除菜单 @@ -56,5 +56,5 @@ export function delMenu(menuId) { return request({ url: '/system/menu/' + menuId, method: 'delete' - }) -} \ No newline at end of file + }); +} diff --git a/src/api/system/notice.js b/src/api/system/notice.js index c274ea5..474c469 100644 --- a/src/api/system/notice.js +++ b/src/api/system/notice.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询公告列表 export function listNotice(query) { @@ -6,7 +6,7 @@ export function listNotice(query) { url: '/system/notice/list', method: 'get', params: query - }) + }); } // 查询公告详细 @@ -14,7 +14,7 @@ export function getNotice(noticeId) { return request({ url: '/system/notice/' + noticeId, method: 'get' - }) + }); } // 新增公告 @@ -23,7 +23,7 @@ export function addNotice(data) { url: '/system/notice', method: 'post', data: data - }) + }); } // 修改公告 @@ -32,7 +32,7 @@ export function updateNotice(data) { url: '/system/notice', method: 'put', data: data - }) + }); } // 删除公告 @@ -40,5 +40,5 @@ export function delNotice(noticeId) { return request({ url: '/system/notice/' + noticeId, method: 'delete' - }) -} \ No newline at end of file + }); +} diff --git a/src/api/system/post.js b/src/api/system/post.js index 1a8e9ca..edbe1eb 100644 --- a/src/api/system/post.js +++ b/src/api/system/post.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询岗位列表 export function listPost(query) { @@ -6,7 +6,7 @@ export function listPost(query) { url: '/system/post/list', method: 'get', params: query - }) + }); } // 查询岗位详细 @@ -14,7 +14,7 @@ export function getPost(postId) { return request({ url: '/system/post/' + postId, method: 'get' - }) + }); } // 新增岗位 @@ -23,7 +23,7 @@ export function addPost(data) { url: '/system/post', method: 'post', data: data - }) + }); } // 修改岗位 @@ -32,7 +32,7 @@ export function updatePost(data) { url: '/system/post', method: 'put', data: data - }) + }); } // 删除岗位 @@ -40,5 +40,5 @@ export function delPost(postId) { return request({ url: '/system/post/' + postId, method: 'delete' - }) + }); } diff --git a/src/api/system/role.js b/src/api/system/role.js index cc74ed8..e274a55 100644 --- a/src/api/system/role.js +++ b/src/api/system/role.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询角色列表 export function listRole(query) { @@ -6,7 +6,7 @@ export function listRole(query) { url: '/system/role/list', method: 'get', params: query - }) + }); } // 查询角色详细 @@ -14,7 +14,7 @@ export function getRole(roleId) { return request({ url: '/system/role/' + roleId, method: 'get' - }) + }); } // 新增角色 @@ -23,7 +23,7 @@ export function addRole(data) { url: '/system/role', method: 'post', data: data - }) + }); } // 修改角色 @@ -32,7 +32,7 @@ export function updateRole(data) { url: '/system/role', method: 'put', data: data - }) + }); } // 角色数据权限 @@ -41,7 +41,7 @@ export function dataScope(data) { url: '/system/role/dataScope', method: 'put', data: data - }) + }); } // 角色状态修改 @@ -49,12 +49,12 @@ export function changeRoleStatus(roleId, status) { const data = { roleId, status - } + }; return request({ url: '/system/role/changeStatus', method: 'put', data: data - }) + }); } // 删除角色 @@ -62,7 +62,7 @@ export function delRole(roleId) { return request({ url: '/system/role/' + roleId, method: 'delete' - }) + }); } // 查询角色已授权用户列表 @@ -71,7 +71,7 @@ export function allocatedUserList(query) { url: '/system/role/authUser/allocatedList', method: 'get', params: query - }) + }); } // 查询角色未授权用户列表 @@ -80,7 +80,7 @@ export function unallocatedUserList(query) { url: '/system/role/authUser/unallocatedList', method: 'get', params: query - }) + }); } // 取消用户授权角色 @@ -89,7 +89,7 @@ export function authUserCancel(data) { url: '/system/role/authUser/cancel', method: 'put', data: data - }) + }); } // 批量取消用户授权角色 @@ -98,7 +98,7 @@ export function authUserCancelAll(data) { url: '/system/role/authUser/cancelAll', method: 'put', params: data - }) + }); } // 授权用户选择 @@ -107,7 +107,7 @@ export function authUserSelectAll(data) { url: '/system/role/authUser/selectAll', method: 'put', params: data - }) + }); } // 根据角色ID查询部门树结构 @@ -115,14 +115,12 @@ export function deptTreeSelect(roleId) { return request({ url: '/system/role/deptTree/' + roleId, method: 'get' - }) + }); } - - export function getRoleOptions() { return request({ url: '/system/role/getRoles', method: 'get' - }) + }); } diff --git a/src/api/system/user.js b/src/api/system/user.js index 1801bfa..864b508 100644 --- a/src/api/system/user.js +++ b/src/api/system/user.js @@ -1,7 +1,5 @@ -import request from '@/utils/request' -import { - parseStrEmpty -} from "@/utils/ruoyi"; +import request from '@/utils/request'; +import { parseStrEmpty } from '@/utils/ruoyi'; // 查询用户列表 export function listUser(query) { @@ -9,7 +7,7 @@ export function listUser(query) { url: '/system/user/list', method: 'get', params: query - }) + }); } // 查询用户详细 @@ -17,7 +15,7 @@ export function getUser(userId) { return request({ url: '/system/user/' + parseStrEmpty(userId), method: 'get' - }) + }); } // 新增用户 @@ -26,7 +24,7 @@ export function addUser(data) { url: '/system/user', method: 'post', data: data - }) + }); } // 修改用户 @@ -35,7 +33,7 @@ export function updateUser(data) { url: '/system/user', method: 'put', data: data - }) + }); } // 删除用户 @@ -43,7 +41,7 @@ export function delUser(userId) { return request({ url: '/system/user/' + userId, method: 'delete' - }) + }); } // 用户密码重置 @@ -51,12 +49,12 @@ export function resetUserPwd(userId, password) { const data = { userId, password - } + }; return request({ url: '/system/user/resetPwd', method: 'put', data: data - }) + }); } // 用户状态修改 @@ -64,12 +62,12 @@ export function changeUserStatus(userId, status) { const data = { userId, status - } + }; return request({ url: '/system/user/changeStatus', method: 'put', data: data - }) + }); } // 查询用户个人信息 @@ -77,7 +75,7 @@ export function getUserProfile() { return request({ url: '/system/user/profile', method: 'get' - }) + }); } // 修改用户个人信息 @@ -86,7 +84,7 @@ export function updateUserProfile(data) { url: '/system/user/profile', method: 'put', data: data - }) + }); } // 用户密码重置 @@ -94,12 +92,12 @@ export function updateUserPwd(oldPassword, newPassword) { const data = { oldPassword, newPassword - } + }; return request({ url: '/system/user/profile/updatePwd', method: 'put', params: data - }) + }); } // 用户头像上传 @@ -108,7 +106,7 @@ export function uploadAvatar(data) { url: '/system/user/profile/avatar', method: 'post', data: data - }) + }); } // 查询授权角色 @@ -116,7 +114,7 @@ export function getAuthRole(userId) { return request({ url: '/system/user/authRole/' + userId, method: 'get' - }) + }); } // 保存授权角色 @@ -125,5 +123,5 @@ export function updateAuthRole(data) { url: '/system/user/authRole', method: 'put', params: data - }) + }); } diff --git a/src/api/tool/gen.js b/src/api/tool/gen.js index 4506927..a3547ff 100644 --- a/src/api/tool/gen.js +++ b/src/api/tool/gen.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询生成表数据 export function listTable(query) { @@ -6,7 +6,7 @@ export function listTable(query) { url: '/tool/gen/list', method: 'get', params: query - }) + }); } // 查询db数据库列表 export function listDbTable(query) { @@ -14,7 +14,7 @@ export function listDbTable(query) { url: '/tool/gen/db/list', method: 'get', params: query - }) + }); } // 查询表详细信息 @@ -22,7 +22,7 @@ export function getGenTable(tableId) { return request({ url: '/tool/gen/' + tableId, method: 'get' - }) + }); } // 修改代码生成信息 @@ -31,7 +31,7 @@ export function updateGenTable(data) { url: '/tool/gen', method: 'put', data: data - }) + }); } // 导入表 @@ -40,7 +40,7 @@ export function importTable(data) { url: '/tool/gen/importTable', method: 'post', params: data - }) + }); } // 预览生成代码 @@ -48,7 +48,7 @@ export function previewTable(tableId) { return request({ url: '/tool/gen/preview/' + tableId, method: 'get' - }) + }); } // 删除表数据 @@ -56,7 +56,7 @@ export function delTable(tableId) { return request({ url: '/tool/gen/' + tableId, method: 'delete' - }) + }); } // 生成代码(自定义路径) @@ -64,7 +64,7 @@ export function genCode(tableName) { return request({ url: '/tool/gen/genCode/' + tableName, method: 'get' - }) + }); } // 同步数据库 @@ -72,5 +72,5 @@ export function synchDb(tableName) { return request({ url: '/tool/gen/synchDb/' + tableName, method: 'get' - }) + }); } diff --git a/src/api/zs/clue.js b/src/api/zs/clue.js index 8ec3dd1..58785e0 100644 --- a/src/api/zs/clue.js +++ b/src/api/zs/clue.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询线索列表 export function getClueList(query) { @@ -6,7 +6,7 @@ export function getClueList(query) { url: '/zs/clue/list', method: 'get', params: query - }) + }); } // 新增线索 @@ -15,7 +15,7 @@ export function addClue(data) { url: '/zs/clue', method: 'post', data: data - }) + }); } // 修改线索 @@ -24,16 +24,16 @@ export function updateClue(data) { url: '/zs/clue', method: 'put', data: data - }) + }); } -//删除 +// 删除 export function deleteClue(data) { return request({ url: '/zs/clue', method: 'delete', params: data - }) + }); } // 导出 export function exportData(query) { @@ -41,7 +41,7 @@ export function exportData(query) { url: '/zs/clue/export', method: 'get', params: query - }) + }); } // 导入模板 @@ -50,7 +50,7 @@ export function importTemplate(param) { url: '/zs/clue/importTemplate', method: 'get', params: param - }) + }); } // 导入 export function importData(data) { @@ -58,61 +58,60 @@ export function importData(data) { url: '/zs/clue/importData', method: 'post', data: data - }) + }); } -//查询登记getSign +// 查询登记getSign export function getSign(query) { return request({ url: '/zs/clue/sign', method: 'get', params: query - }) + }); } -//保存登记 +// 保存登记 export function saveSign(data) { return request({ url: '/zs/clue/sign', method: 'post', data: data - }) + }); } -//甩单 +// 甩单 export function saveDistribute(data) { return request({ url: '/zs/clue/distribute', method: 'put', data: data - }) + }); } -//驳回 +// 驳回 export function refuse(data) { return request({ url: '/zs/clue/refuse', method: 'put', data: data - }) + }); } -//查询甩单记录 +// 查询甩单记录 export function getDistributeRecord(param) { return request({ url: '/zs/clue/distributerecord', method: 'get', params: param - }) + }); } -//查询跟踪记录 +// 查询跟踪记录 export function getFollowRecord(param) { return request({ url: '/zs/clue/followrecord', method: 'get', params: param - }) - + }); } // @@ -122,14 +121,14 @@ export function getConsultRecord(param) { url: '/zs/clue/consultrecord', method: 'get', params: param - }) + }); } // 获取已过期 export function getClueCountBadge() { return request({ url: `/zs/clue/badgeCount`, method: 'get' - }) + }); } // 批量更新 @@ -138,49 +137,49 @@ export function batchUpdate(data) { url: `/zs/clue/batchUpdate`, method: 'put', data: data - }) + }); } -//公海线索 getPublicList +// 公海线索 getPublicList export function getPublicList(param) { return request({ url: `/zs/clue/public/list`, method: 'get', params: param - }) + }); } -//拾取线索 +// 拾取线索 export function pickupClue(data) { return request({ url: `/zs/clue/public/pickup`, method: 'put', data: data - }) + }); } -//丢弃线索 +// 丢弃线索 export function discardClue(data) { return request({ url: `/zs/clue/public/discard`, method: 'put', data: data - }) + }); } -//查询接收 +// 查询接收 export function getAccept() { return request({ url: `/zs/clue/accept`, method: 'get' - }) + }); } -//丢弃线索 +// 丢弃线索 export function updateAccept(data) { return request({ url: `/zs/clue/accept`, method: 'put', data: data - }) + }); } diff --git a/src/api/zs/sign.js b/src/api/zs/sign.js index 32dae0b..de910a1 100644 --- a/src/api/zs/sign.js +++ b/src/api/zs/sign.js @@ -1,4 +1,4 @@ -import request from '@/utils/request' +import request from '@/utils/request'; // 查询线索列表 export function getSignList(query) { @@ -6,7 +6,7 @@ export function getSignList(query) { url: '/zs/sign/list', method: 'get', params: query - }) + }); } // 导出 @@ -15,7 +15,7 @@ export function exportData(query) { url: '/zs/sign/export', method: 'get', params: query - }) + }); } // 导入模板 @@ -23,7 +23,7 @@ export function importTemplate() { return request({ url: '/zs/sign/importTemplate', method: 'get' - }) + }); } // 导入 export function importData(data) { @@ -31,16 +31,15 @@ export function importData(data) { url: '/zs/sign/importData', method: 'post', data: data - }) + }); } - export function addSign(data) { return request({ url: '/zs/sign', method: 'post', data: data - }) + }); } export function updateSign(data) { @@ -48,7 +47,7 @@ export function updateSign(data) { url: '/zs/sign', method: 'put', data: data - }) + }); } export function getClues(param) { @@ -56,34 +55,31 @@ export function getClues(param) { url: '/zs/sign/clue', method: 'get', params: param - }) + }); } - - export function deleteSign(data) { return request({ url: '/zs/sign', method: 'delete', params: data - }) + }); } -//审核登记 +// 审核登记 export function checkSign(data) { return request({ url: '/zs/sign/check', method: 'put', data: data - }) + }); } - -//审核记录 +// 审核记录 export function getCheckRecord(data) { return request({ url: '/zs/sign/check', method: 'get', params: data - }) + }); } diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js index 2c6b309..11560ed 100644 --- a/src/assets/icons/index.js +++ b/src/assets/icons/index.js @@ -1,9 +1,9 @@ -import Vue from 'vue' -import SvgIcon from '@/components/SvgIcon'// svg component +import Vue from 'vue'; +import SvgIcon from '@/components/SvgIcon'; // svg component // register globally -Vue.component('svg-icon', SvgIcon) +Vue.component('SvgIcon', SvgIcon); -const req = require.context('./svg', false, /\.svg$/) -const requireAll = requireContext => requireContext.keys().map(requireContext) -requireAll(req) +const req = require.context('./svg', false, /\.svg$/); +const requireAll = (requireContext) => requireContext.keys().map(requireContext); +requireAll(req); diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue index 1696f54..f48aa13 100644 --- a/src/components/Breadcrumb/index.vue +++ b/src/components/Breadcrumb/index.vue @@ -14,49 +14,54 @@ export default { data() { return { levelList: null - } + }; }, watch: { $route(route) { // if you go to the redirect page, do not update the breadcrumbs if (route.path.startsWith('/redirect/')) { - return + return; } - this.getBreadcrumb() + this.getBreadcrumb(); } }, created() { - this.getBreadcrumb() + this.getBreadcrumb(); }, methods: { getBreadcrumb() { // only show routes with meta.title - let matched = this.$route.matched.filter(item => item.meta && item.meta.title) - const first = matched[0] + let matched = this.$route.matched.filter((item) => item.meta && item.meta.title); + const first = matched[0]; if (!this.isDashboard(first)) { - matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched) + matched = [ + { + path: '/index', + meta: { title: '首页' } + } + ].concat(matched); } - this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) + this.levelList = matched.filter((item) => item.meta && item.meta.title && item.meta.breadcrumb !== false); }, isDashboard(route) { - const name = route && route.name + const name = route && route.name; if (!name) { - return false + return false; } - return name.trim() === 'Index' + return name.trim() === 'Index'; }, handleLink(item) { - const { redirect, path } = item + const { redirect, path } = item; if (redirect) { - this.$router.push(redirect) - return + this.$router.push(redirect); + return; } - this.$router.push(path) + this.$router.push(path); } } -} +}; \ No newline at end of file + diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue index 6bb5a18..56677a5 100644 --- a/src/components/Editor/index.vue +++ b/src/components/Editor/index.vue @@ -1,98 +1,86 @@ diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue index 6c583cf..2d9cce7 100644 --- a/src/components/FileUpload/index.vue +++ b/src/components/FileUpload/index.vue @@ -1,23 +1,10 @@ diff --git a/src/components/IconSelect/requireIcons.js b/src/components/IconSelect/requireIcons.js index 99e5c54..7630b0f 100644 --- a/src/components/IconSelect/requireIcons.js +++ b/src/components/IconSelect/requireIcons.js @@ -1,11 +1,10 @@ +const req = require.context('../../assets/icons/svg', false, /\.svg$/); +const requireAll = (requireContext) => requireContext.keys(); -const req = require.context('../../assets/icons/svg', false, /\.svg$/) -const requireAll = requireContext => requireContext.keys() +const re = /\.\/(.*)\.svg/; -const re = /\.\/(.*)\.svg/ +const icons = requireAll(req).map((i) => { + return i.match(re)[1]; +}); -const icons = requireAll(req).map(i => { - return i.match(re)[1] -}) - -export default icons +export default icons; diff --git a/src/components/ImagePreview/index.vue b/src/components/ImagePreview/index.vue index 3c770c7..2efce46 100644 --- a/src/components/ImagePreview/index.vue +++ b/src/components/ImagePreview/index.vue @@ -1,33 +1,28 @@ diff --git a/src/components/ImageUpload/index.vue b/src/components/ImageUpload/index.vue index b57a15e..198f3b5 100644 --- a/src/components/ImageUpload/index.vue +++ b/src/components/ImageUpload/index.vue @@ -1,49 +1,25 @@ diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue index 1714e1f..f91428e 100644 --- a/src/components/ThemePicker/index.vue +++ b/src/components/ThemePicker/index.vue @@ -1,158 +1,153 @@ diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js index 6823726..2554996 100644 --- a/src/layout/components/Sidebar/FixiOSBug.js +++ b/src/layout/components/Sidebar/FixiOSBug.js @@ -1,25 +1,25 @@ export default { computed: { device() { - return this.$store.state.app.device + return this.$store.state.app.device; } }, mounted() { // In order to fix the click on menu on the ios device will trigger the mouseleave bug - this.fixBugIniOS() + this.fixBugIniOS(); }, methods: { fixBugIniOS() { - const $subMenu = this.$refs.subMenu + const $subMenu = this.$refs.subMenu; if ($subMenu) { - const handleMouseleave = $subMenu.handleMouseleave + const handleMouseleave = $subMenu.handleMouseleave; $subMenu.handleMouseleave = (e) => { if (this.device === 'mobile') { - return + return; } - handleMouseleave(e) - } + handleMouseleave(e); + }; } } } -} +}; diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue index be3285d..8d1e9e7 100644 --- a/src/layout/components/Sidebar/Item.vue +++ b/src/layout/components/Sidebar/Item.vue @@ -1,3 +1,4 @@ + diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue index 8b0bc93..604b63a 100644 --- a/src/layout/components/Sidebar/Link.vue +++ b/src/layout/components/Sidebar/Link.vue @@ -5,7 +5,7 @@ diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue index 4853fbb..0102d7f 100644 --- a/src/layout/components/Sidebar/SidebarItem.vue +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -12,24 +12,17 @@ - + diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue index 51d0839..861ff6f 100644 --- a/src/layout/components/Sidebar/index.vue +++ b/src/layout/components/Sidebar/index.vue @@ -1,57 +1,43 @@ diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue index bb753a1..cdd7a8f 100644 --- a/src/layout/components/TagsView/ScrollPane.vue +++ b/src/layout/components/TagsView/ScrollPane.vue @@ -5,75 +5,75 @@ diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js index e8d0df8..653234f 100644 --- a/src/layout/mixin/ResizeHandler.js +++ b/src/layout/mixin/ResizeHandler.js @@ -1,45 +1,45 @@ -import store from '@/store' +import store from '@/store'; -const { body } = document -const WIDTH = 992 // refer to Bootstrap's responsive design +const { body } = document; +const WIDTH = 992; // refer to Bootstrap's responsive design export default { watch: { $route(route) { if (this.device === 'mobile' && this.sidebar.opened) { - store.dispatch('app/closeSideBar', { withoutAnimation: false }) + store.dispatch('app/closeSideBar', { withoutAnimation: false }); } } }, beforeMount() { - window.addEventListener('resize', this.$_resizeHandler) + window.addEventListener('resize', this.$_resizeHandler); }, beforeDestroy() { - window.removeEventListener('resize', this.$_resizeHandler) + window.removeEventListener('resize', this.$_resizeHandler); }, mounted() { - const isMobile = this.$_isMobile() + const isMobile = this.$_isMobile(); if (isMobile) { - store.dispatch('app/toggleDevice', 'mobile') - store.dispatch('app/closeSideBar', { withoutAnimation: true }) + store.dispatch('app/toggleDevice', 'mobile'); + store.dispatch('app/closeSideBar', { withoutAnimation: true }); } }, methods: { // use $_ for mixins properties // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential $_isMobile() { - const rect = body.getBoundingClientRect() - return rect.width - 1 < WIDTH + const rect = body.getBoundingClientRect(); + return rect.width - 1 < WIDTH; }, $_resizeHandler() { if (!document.hidden) { - const isMobile = this.$_isMobile() - store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + const isMobile = this.$_isMobile(); + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop'); if (isMobile) { - store.dispatch('app/closeSideBar', { withoutAnimation: true }) + store.dispatch('app/closeSideBar', { withoutAnimation: true }); } } } } -} +}; diff --git a/src/main.js b/src/main.js index ca0b1b1..ad6da66 100644 --- a/src/main.js +++ b/src/main.js @@ -19,38 +19,9 @@ import './global'; import './assets/icons'; // icon import './permission'; // permission control -import { - download -} from '@/utils/request' -import { - getDicts -} from "@/api/system/dict/data"; -import { - getConfigKey -} from "@/api/system/config"; -import { - parseTime, - resetForm, - addDateRange, - selectDictLabel, - selectDictLabels, - handleTree -} from "@/utils/ruoyi"; - // 头部标签组件 import VueMeta from 'vue-meta'; -// 全局方法挂载 -Vue.prototype.getDicts = getDicts -Vue.prototype.getConfigKey = getConfigKey -Vue.prototype.parseTime = parseTime -Vue.prototype.resetForm = resetForm -Vue.prototype.addDateRange = addDateRange -Vue.prototype.selectDictLabel = selectDictLabel -Vue.prototype.selectDictLabels = selectDictLabels -Vue.prototype.download = download -Vue.prototype.handleTree = handleTree - import Mixin from './mixins/Mixin'; Vue.mixin(Mixin); diff --git a/src/plugins/cache.js b/src/plugins/cache.js index 6b5c00b..719dbb1 100644 --- a/src/plugins/cache.js +++ b/src/plugins/cache.js @@ -1,69 +1,69 @@ const sessionCache = { - set (key, value) { + set(key, value) { if (!sessionStorage) { - return + return; } if (key != null && value != null) { - sessionStorage.setItem(key, value) + sessionStorage.setItem(key, value); } }, - get (key) { + get(key) { if (!sessionStorage) { - return null + return null; } if (key == null) { - return null + return null; } - return sessionStorage.getItem(key) + return sessionStorage.getItem(key); }, - setJSON (key, jsonValue) { + setJSON(key, jsonValue) { if (jsonValue != null) { - this.set(key, JSON.stringify(jsonValue)) + this.set(key, JSON.stringify(jsonValue)); } }, - getJSON (key) { - const value = this.get(key) + getJSON(key) { + const value = this.get(key); if (value != null) { - return JSON.parse(value) + return JSON.parse(value); } }, - remove (key) { + remove(key) { sessionStorage.removeItem(key); } -} +}; const localCache = { - set (key, value) { + set(key, value) { if (!localStorage) { - return + return; } if (key != null && value != null) { - localStorage.setItem(key, value) + localStorage.setItem(key, value); } }, - get (key) { + get(key) { if (!localStorage) { - return null + return null; } if (key == null) { - return null + return null; } - return localStorage.getItem(key) + return localStorage.getItem(key); }, - setJSON (key, jsonValue) { + setJSON(key, jsonValue) { if (jsonValue != null) { - this.set(key, JSON.stringify(jsonValue)) + this.set(key, JSON.stringify(jsonValue)); } }, - getJSON (key) { - const value = this.get(key) + getJSON(key) { + const value = this.get(key); if (value != null) { - return JSON.parse(value) + return JSON.parse(value); } }, - remove (key) { + remove(key) { localStorage.removeItem(key); } -} +}; export default { /** @@ -74,4 +74,4 @@ export default { * 本地缓存 */ local: localCache -} +}; diff --git a/src/plugins/modal.js b/src/plugins/modal.js index b37ca14..a3a1663 100644 --- a/src/plugins/modal.js +++ b/src/plugins/modal.js @@ -1,43 +1,43 @@ -import { Message, MessageBox, Notification, Loading } from 'element-ui' +import { Message, MessageBox, Notification, Loading } from 'element-ui'; let loadingInstance; export default { // 消息提示 msg(content) { - Message.info(content) + Message.info(content); }, // 错误消息 msgError(content) { - Message.error(content) + Message.error(content); }, // 成功消息 msgSuccess(content) { - Message.success(content) + Message.success(content); }, // 警告消息 msgWarning(content) { - Message.warning(content) + Message.warning(content); }, // 弹出提示 alert(content) { - MessageBox.alert(content, "系统提示") + MessageBox.alert(content, '系统提示'); }, // 错误提示 alertError(content) { - MessageBox.alert(content, "系统提示", { type: 'error' }) + MessageBox.alert(content, '系统提示', { type: 'error' }); }, // 成功提示 alertSuccess(content) { - MessageBox.alert(content, "系统提示", { type: 'success' }) + MessageBox.alert(content, '系统提示', { type: 'success' }); }, // 警告提示 alertWarning(content) { - MessageBox.alert(content, "系统提示", { type: 'warning' }) + MessageBox.alert(content, '系统提示', { type: 'warning' }); }, // 通知提示 notify(content) { - Notification.info(content) + Notification.info(content); }, // 错误通知 notifyError(content) { @@ -45,39 +45,39 @@ export default { }, // 成功通知 notifySuccess(content) { - Notification.success(content) + Notification.success(content); }, // 警告通知 notifyWarning(content) { - Notification.warning(content) + Notification.warning(content); }, // 确认窗体 confirm(content) { - return MessageBox.confirm(content, "系统提示", { + return MessageBox.confirm(content, '系统提示', { confirmButtonText: '确定', cancelButtonText: '取消', - type: "warning", - }) + type: 'warning' + }); }, // 提交内容 prompt(content) { - return MessageBox.prompt(content, "系统提示", { + return MessageBox.prompt(content, '系统提示', { confirmButtonText: '确定', cancelButtonText: '取消', - type: "warning", - }) + type: 'warning' + }); }, // 打开遮罩层 loading(content) { loadingInstance = Loading.service({ lock: true, text: content, - spinner: "el-icon-loading", - background: "rgba(0, 0, 0, 0.7)", - }) + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }); }, // 关闭遮罩层 closeLoading() { loadingInstance.close(); } -} +}; diff --git a/src/plugins/tab.js b/src/plugins/tab.js index cade9f7..728a8b1 100644 --- a/src/plugins/tab.js +++ b/src/plugins/tab.js @@ -1,4 +1,4 @@ -import store from '@/store' +import store from '@/store'; import router from '@/router'; export default { @@ -15,16 +15,16 @@ export default { }); } return store.dispatch('tagsView/delCachedView', obj).then(() => { - const { path, query } = obj + const { path, query } = obj; router.replace({ path: '/redirect' + path, query: query - }) - }) + }); + }); }, // 关闭当前tab页签,打开新页签 closeOpenPage(obj) { - store.dispatch("tagsView/delView", router.currentRoute); + store.dispatch('tagsView/delView', router.currentRoute); if (obj !== undefined) { return router.push(obj); } @@ -56,7 +56,12 @@ export default { }, // 添加tab页签 openPage(title, url, params) { - var obj = { path: url, meta: { title: title } } + var obj = { + path: url, + meta: { + title: title + } + }; store.dispatch('tagsView/addView', obj); return router.push({ path: url, query: params }); }, @@ -64,4 +69,4 @@ export default { updatePage(obj) { return store.dispatch('tagsView/updateVisitedView', obj); } -} +}; diff --git a/src/router/index.js b/src/router/index.js index e3d15f0..4a90961 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -29,14 +29,17 @@ import Layout from '@/layout'; */ // 公共路由 -export const constantRoutes = [{ +export const constantRoutes = [ + { path: '/redirect', component: Layout, hidden: true, - children: [{ - path: '/redirect/:path(.*)', - component: () => import('@/views/redirect') - }] + children: [ + { + path: '/redirect/:path(.*)', + component: () => import('@/views/redirect') + } + ] }, { path: '/login', @@ -62,16 +65,18 @@ export const constantRoutes = [{ path: '', component: Layout, redirect: 'index', - children: [{ - path: 'index', - component: () => import('@/views/index'), - name: 'Index', - meta: { - title: '首页', - icon: 'dashboard', - affix: true + children: [ + { + path: 'index', + component: () => import('@/views/index'), + name: 'Index', + meta: { + title: '首页', + icon: 'dashboard', + affix: true + } } - }] + ] }, // { // path: '/demo', @@ -106,78 +111,89 @@ export const constantRoutes = [{ component: Layout, hidden: true, redirect: 'noredirect', - children: [{ - path: 'profile', - component: () => import('@/views/system/user/profile/index'), - name: 'Profile', - meta: { - title: '个人中心', - icon: 'user' + children: [ + { + path: 'profile', + component: () => import('@/views/system/user/profile/index'), + name: 'Profile', + meta: { + title: '个人中心', + icon: 'user' + } } - }] + ] } ]; // 动态路由,基于用户权限动态去加载 -export const dynamicRoutes = [{ +export const dynamicRoutes = [ + { path: '/system/user-auth', component: Layout, hidden: true, permissions: ['system:user:edit'], - children: [{ - path: 'role/:userId(\\d+)', - component: () => import('@/views/system/user/authRole'), - name: 'AuthRole', - meta: { - title: '分配角色', - activeMenu: '/system/user' + children: [ + { + path: 'role/:userId(\\d+)', + component: () => import('@/views/system/user/authRole'), + name: 'AuthRole', + meta: { + title: '分配角色', + activeMenu: '/system/user' + } } - }] + ] }, { path: '/system/role-auth', component: Layout, hidden: true, permissions: ['system:role:edit'], - children: [{ - path: 'user/:roleId(\\d+)', - component: () => import('@/views/system/role/authUser'), - name: 'AuthUser', - meta: { - title: '分配用户', - activeMenu: '/system/role' + children: [ + { + path: 'user/:roleId(\\d+)', + component: () => import('@/views/system/role/authUser'), + name: 'AuthUser', + meta: { + title: '分配用户', + activeMenu: '/system/role' + } } - }] + ] }, { path: '/system/dict-data', component: Layout, hidden: true, permissions: ['system:dict:list'], - children: [{ - path: 'index/:dictId(\\d+)', - component: () => import('@/views/system/dict/data'), - name: 'Data', - meta: { - title: '字典数据', - activeMenu: '/system/dict' + children: [ + { + path: 'index/:dictId(\\d+)', + component: () => import('@/views/system/dict/data'), + name: 'Data', + meta: { + title: '字典数据', + activeMenu: '/system/dict' + } } - }] + ] }, { path: '/monitor/job-log', component: Layout, hidden: true, permissions: ['monitor:job:list'], - children: [{ - path: 'index', - component: () => import('@/views/monitor/job/log'), - name: 'JobLog', - meta: { - title: '调度日志', - activeMenu: '/monitor/job' + children: [ + { + path: 'index', + component: () => import('@/views/monitor/job/log'), + name: 'JobLog', + meta: { + title: '调度日志', + activeMenu: '/monitor/job' + } } - }] + ] } ]; diff --git a/src/settings.js b/src/settings.js index 6a0b09f..d5cd23e 100644 --- a/src/settings.js +++ b/src/settings.js @@ -41,4 +41,4 @@ module.exports = { * If you want to also use it in dev, you can pass ['production', 'development'] */ errorLog: 'production' -} +}; diff --git a/src/store/modules/app.js b/src/store/modules/app.js index 3e22d1c..6bd7bb3 100644 --- a/src/store/modules/app.js +++ b/src/store/modules/app.js @@ -1,4 +1,4 @@ -import Cookies from 'js-cookie' +import Cookies from 'js-cookie'; const state = { sidebar: { @@ -8,59 +8,59 @@ const state = { }, device: 'desktop', size: Cookies.get('size') || 'medium' -} +}; const mutations = { - TOGGLE_SIDEBAR: state => { + TOGGLE_SIDEBAR: (state) => { if (state.sidebar.hide) { return false; } - state.sidebar.opened = !state.sidebar.opened - state.sidebar.withoutAnimation = false + state.sidebar.opened = !state.sidebar.opened; + state.sidebar.withoutAnimation = false; if (state.sidebar.opened) { - Cookies.set('sidebarStatus', 1) + Cookies.set('sidebarStatus', 1); } else { - Cookies.set('sidebarStatus', 0) + Cookies.set('sidebarStatus', 0); } }, CLOSE_SIDEBAR: (state, withoutAnimation) => { - Cookies.set('sidebarStatus', 0) - state.sidebar.opened = false - state.sidebar.withoutAnimation = withoutAnimation + Cookies.set('sidebarStatus', 0); + state.sidebar.opened = false; + state.sidebar.withoutAnimation = withoutAnimation; }, TOGGLE_DEVICE: (state, device) => { - state.device = device + state.device = device; }, SET_SIZE: (state, size) => { - state.size = size - Cookies.set('size', size) + state.size = size; + Cookies.set('size', size); }, SET_SIDEBAR_HIDE: (state, status) => { - state.sidebar.hide = status + state.sidebar.hide = status; } -} +}; const actions = { toggleSideBar({ commit }) { - commit('TOGGLE_SIDEBAR') + commit('TOGGLE_SIDEBAR'); }, closeSideBar({ commit }, { withoutAnimation }) { - commit('CLOSE_SIDEBAR', withoutAnimation) + commit('CLOSE_SIDEBAR', withoutAnimation); }, toggleDevice({ commit }, device) { - commit('TOGGLE_DEVICE', device) + commit('TOGGLE_DEVICE', device); }, setSize({ commit }, size) { - commit('SET_SIZE', size) + commit('SET_SIZE', size); }, toggleSideBarHide({ commit }, status) { - commit('SET_SIDEBAR_HIDE', status) + commit('SET_SIDEBAR_HIDE', status); } -} +}; export default { namespaced: true, state, mutations, actions -} +}; diff --git a/src/store/modules/dict.js b/src/store/modules/dict.js index f95bead..5ce76c1 100644 --- a/src/store/modules/dict.js +++ b/src/store/modules/dict.js @@ -1,50 +1,50 @@ const state = { - dict: new Array() -} + dict: [] +}; const mutations = { SET_DICT: (state, { key, value }) => { - if (key !== null && key !== "") { + if (key !== null && key !== '') { state.dict.push({ key: key, value: value - }) + }); } }, REMOVE_DICT: (state, key) => { try { for (let i = 0; i < state.dict.length; i++) { - if (state.dict[i].key == key) { - state.dict.splice(i, i) - return true + if (state.dict[i].key === key) { + state.dict.splice(i, i); + return true; } } } catch (e) { + console.log(e); } }, CLEAN_DICT: (state) => { - state.dict = new Array() + state.dict = []; } -} +}; const actions = { // 设置字典 setDict({ commit }, data) { - commit('SET_DICT', data) + commit('SET_DICT', data); }, // 删除字典 removeDict({ commit }, key) { - commit('REMOVE_DICT', key) + commit('REMOVE_DICT', key); }, // 清空字典 cleanDict({ commit }) { - commit('CLEAN_DICT') + commit('CLEAN_DICT'); } -} +}; export default { namespaced: true, state, mutations, actions -} - +}; diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js index 2455a1e..9b5b25c 100644 --- a/src/store/modules/settings.js +++ b/src/store/modules/settings.js @@ -1,8 +1,8 @@ -import defaultSettings from '@/settings' +import defaultSettings from '@/settings'; -const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings +const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings; -const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' +const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''; const state = { title: '', theme: storageSetting.theme || '#409EFF', @@ -13,30 +13,30 @@ const state = { fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle -} +}; const mutations = { CHANGE_SETTING: (state, { key, value }) => { + // eslint-disable-next-line no-prototype-builtins if (state.hasOwnProperty(key)) { - state[key] = value + state[key] = value; } } -} +}; const actions = { // 修改布局设置 changeSetting({ commit }, data) { - commit('CHANGE_SETTING', data) + commit('CHANGE_SETTING', data); }, // 设置网页标题 setTitle({ commit }, title) { - state.title = title + state.title = title; } -} +}; export default { namespaced: true, state, mutations, actions -} - +}; diff --git a/src/store/modules/tagsView.js b/src/store/modules/tagsView.js index 5fc011c..23b6497 100644 --- a/src/store/modules/tagsView.js +++ b/src/store/modules/tagsView.js @@ -2,227 +2,227 @@ const state = { visitedViews: [], cachedViews: [], iframeViews: [] -} +}; const mutations = { ADD_IFRAME_VIEW: (state, view) => { - if (state.iframeViews.some(v => v.path === view.path)) return + if (state.iframeViews.some((v) => v.path === view.path)) return; state.iframeViews.push( Object.assign({}, view, { title: view.meta.title || 'no-name' }) - ) + ); }, ADD_VISITED_VIEW: (state, view) => { - if (state.visitedViews.some(v => v.path === view.path)) return + if (state.visitedViews.some((v) => v.path === view.path)) return; state.visitedViews.push( Object.assign({}, view, { title: view.meta.title || 'no-name' }) - ) + ); }, ADD_CACHED_VIEW: (state, view) => { - if (state.cachedViews.includes(view.name)) return + if (state.cachedViews.includes(view.name)) return; if (view.meta && !view.meta.noCache) { - state.cachedViews.push(view.name) + state.cachedViews.push(view.name); } }, DEL_VISITED_VIEW: (state, view) => { for (const [i, v] of state.visitedViews.entries()) { if (v.path === view.path) { - state.visitedViews.splice(i, 1) - break + state.visitedViews.splice(i, 1); + break; } } - state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) + state.iframeViews = state.iframeViews.filter((item) => item.path !== view.path); }, DEL_IFRAME_VIEW: (state, view) => { - state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) + state.iframeViews = state.iframeViews.filter((item) => item.path !== view.path); }, DEL_CACHED_VIEW: (state, view) => { - const index = state.cachedViews.indexOf(view.name) - index > -1 && state.cachedViews.splice(index, 1) + const index = state.cachedViews.indexOf(view.name); + index > -1 && state.cachedViews.splice(index, 1); }, DEL_OTHERS_VISITED_VIEWS: (state, view) => { - state.visitedViews = state.visitedViews.filter(v => { - return v.meta.affix || v.path === view.path - }) - state.iframeViews = state.iframeViews.filter(item => item.path === view.path) + state.visitedViews = state.visitedViews.filter((v) => { + return v.meta.affix || v.path === view.path; + }); + state.iframeViews = state.iframeViews.filter((item) => item.path === view.path); }, DEL_OTHERS_CACHED_VIEWS: (state, view) => { - const index = state.cachedViews.indexOf(view.name) + const index = state.cachedViews.indexOf(view.name); if (index > -1) { - state.cachedViews = state.cachedViews.slice(index, index + 1) + state.cachedViews = state.cachedViews.slice(index, index + 1); } else { - state.cachedViews = [] + state.cachedViews = []; } }, - DEL_ALL_VISITED_VIEWS: state => { + DEL_ALL_VISITED_VIEWS: (state) => { // keep affix tags - const affixTags = state.visitedViews.filter(tag => tag.meta.affix) - state.visitedViews = affixTags - state.iframeViews = [] + const affixTags = state.visitedViews.filter((tag) => tag.meta.affix); + state.visitedViews = affixTags; + state.iframeViews = []; }, - DEL_ALL_CACHED_VIEWS: state => { - state.cachedViews = [] + DEL_ALL_CACHED_VIEWS: (state) => { + state.cachedViews = []; }, UPDATE_VISITED_VIEW: (state, view) => { for (let v of state.visitedViews) { if (v.path === view.path) { - v = Object.assign(v, view) - break + v = Object.assign(v, view); + break; } } }, DEL_RIGHT_VIEWS: (state, view) => { - const index = state.visitedViews.findIndex(v => v.path === view.path) + const index = state.visitedViews.findIndex((v) => v.path === view.path); if (index === -1) { - return + return; } state.visitedViews = state.visitedViews.filter((item, idx) => { if (idx <= index || (item.meta && item.meta.affix)) { - return true + return true; } - const i = state.cachedViews.indexOf(item.name) + const i = state.cachedViews.indexOf(item.name); if (i > -1) { - state.cachedViews.splice(i, 1) + state.cachedViews.splice(i, 1); } - if(item.meta.link) { - const fi = state.iframeViews.findIndex(v => v.path === item.path) - state.iframeViews.splice(fi, 1) + if (item.meta.link) { + const fi = state.iframeViews.findIndex((v) => v.path === item.path); + state.iframeViews.splice(fi, 1); } - return false - }) + return false; + }); }, DEL_LEFT_VIEWS: (state, view) => { - const index = state.visitedViews.findIndex(v => v.path === view.path) + const index = state.visitedViews.findIndex((v) => v.path === view.path); if (index === -1) { - return + return; } state.visitedViews = state.visitedViews.filter((item, idx) => { if (idx >= index || (item.meta && item.meta.affix)) { - return true + return true; } - const i = state.cachedViews.indexOf(item.name) + const i = state.cachedViews.indexOf(item.name); if (i > -1) { - state.cachedViews.splice(i, 1) + state.cachedViews.splice(i, 1); } - if(item.meta.link) { - const fi = state.iframeViews.findIndex(v => v.path === item.path) - state.iframeViews.splice(fi, 1) + if (item.meta.link) { + const fi = state.iframeViews.findIndex((v) => v.path === item.path); + state.iframeViews.splice(fi, 1); } - return false - }) + return false; + }); } -} +}; const actions = { addView({ dispatch }, view) { - dispatch('addVisitedView', view) - dispatch('addCachedView', view) + dispatch('addVisitedView', view); + dispatch('addCachedView', view); }, addIframeView({ commit }, view) { - commit('ADD_IFRAME_VIEW', view) + commit('ADD_IFRAME_VIEW', view); }, addVisitedView({ commit }, view) { - commit('ADD_VISITED_VIEW', view) + commit('ADD_VISITED_VIEW', view); }, addCachedView({ commit }, view) { - commit('ADD_CACHED_VIEW', view) + commit('ADD_CACHED_VIEW', view); }, delView({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delVisitedView', view) - dispatch('delCachedView', view) + return new Promise((resolve) => { + dispatch('delVisitedView', view); + dispatch('delCachedView', view); resolve({ visitedViews: [...state.visitedViews], cachedViews: [...state.cachedViews] - }) - }) + }); + }); }, delVisitedView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_VISITED_VIEW', view) - resolve([...state.visitedViews]) - }) + return new Promise((resolve) => { + commit('DEL_VISITED_VIEW', view); + resolve([...state.visitedViews]); + }); }, delIframeView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_IFRAME_VIEW', view) - resolve([...state.iframeViews]) - }) + return new Promise((resolve) => { + commit('DEL_IFRAME_VIEW', view); + resolve([...state.iframeViews]); + }); }, delCachedView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_CACHED_VIEW', view) - resolve([...state.cachedViews]) - }) + return new Promise((resolve) => { + commit('DEL_CACHED_VIEW', view); + resolve([...state.cachedViews]); + }); }, delOthersViews({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delOthersVisitedViews', view) - dispatch('delOthersCachedViews', view) + return new Promise((resolve) => { + dispatch('delOthersVisitedViews', view); + dispatch('delOthersCachedViews', view); resolve({ visitedViews: [...state.visitedViews], cachedViews: [...state.cachedViews] - }) - }) + }); + }); }, delOthersVisitedViews({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_OTHERS_VISITED_VIEWS', view) - resolve([...state.visitedViews]) - }) + return new Promise((resolve) => { + commit('DEL_OTHERS_VISITED_VIEWS', view); + resolve([...state.visitedViews]); + }); }, delOthersCachedViews({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_OTHERS_CACHED_VIEWS', view) - resolve([...state.cachedViews]) - }) + return new Promise((resolve) => { + commit('DEL_OTHERS_CACHED_VIEWS', view); + resolve([...state.cachedViews]); + }); }, delAllViews({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delAllVisitedViews', view) - dispatch('delAllCachedViews', view) + return new Promise((resolve) => { + dispatch('delAllVisitedViews', view); + dispatch('delAllCachedViews', view); resolve({ visitedViews: [...state.visitedViews], cachedViews: [...state.cachedViews] - }) - }) + }); + }); }, delAllVisitedViews({ commit, state }) { - return new Promise(resolve => { - commit('DEL_ALL_VISITED_VIEWS') - resolve([...state.visitedViews]) - }) + return new Promise((resolve) => { + commit('DEL_ALL_VISITED_VIEWS'); + resolve([...state.visitedViews]); + }); }, delAllCachedViews({ commit, state }) { - return new Promise(resolve => { - commit('DEL_ALL_CACHED_VIEWS') - resolve([...state.cachedViews]) - }) + return new Promise((resolve) => { + commit('DEL_ALL_CACHED_VIEWS'); + resolve([...state.cachedViews]); + }); }, updateVisitedView({ commit }, view) { - commit('UPDATE_VISITED_VIEW', view) + commit('UPDATE_VISITED_VIEW', view); }, delRightTags({ commit }, view) { - return new Promise(resolve => { - commit('DEL_RIGHT_VIEWS', view) - resolve([...state.visitedViews]) - }) + return new Promise((resolve) => { + commit('DEL_RIGHT_VIEWS', view); + resolve([...state.visitedViews]); + }); }, delLeftTags({ commit }, view) { - return new Promise(resolve => { - commit('DEL_LEFT_VIEWS', view) - resolve([...state.visitedViews]) - }) - }, -} + return new Promise((resolve) => { + commit('DEL_LEFT_VIEWS', view); + resolve([...state.visitedViews]); + }); + } +}; export default { namespaced: true, state, mutations, actions -} +}; diff --git a/src/store/modules/user.js b/src/store/modules/user.js index ab0a6fe..83f6b01 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -1,5 +1,5 @@ -import { login, logout, getInfo } from '@/api/login' -import { getToken, setToken, removeToken } from '@/utils/auth' +import { login, logout, getInfo } from '@/api/login'; +import { getToken, setToken, removeToken } from '@/utils/auth'; const user = { state: { @@ -12,85 +12,93 @@ const user = { mutations: { SET_TOKEN: (state, token) => { - state.token = token + state.token = token; }, SET_NAME: (state, name) => { - state.name = name + state.name = name; }, SET_AVATAR: (state, avatar) => { - state.avatar = avatar + state.avatar = avatar; }, SET_ROLES: (state, roles) => { - state.roles = roles + state.roles = roles; }, SET_PERMISSIONS: (state, permissions) => { - state.permissions = permissions + state.permissions = permissions; } }, actions: { // 登录 Login({ commit }, userInfo) { - const username = userInfo.username.trim() - const password = userInfo.password - const code = userInfo.code - const uuid = userInfo.uuid + const username = userInfo.username.trim(); + const password = userInfo.password; + const code = userInfo.code; + const uuid = userInfo.uuid; return new Promise((resolve, reject) => { - login(username, password, code, uuid).then(res => { - setToken(res.token) - commit('SET_TOKEN', res.token) - resolve() - }).catch(error => { - reject(error) - }) - }) + login(username, password, code, uuid) + .then((res) => { + setToken(res.token); + commit('SET_TOKEN', res.token); + resolve(); + }) + .catch((error) => { + reject(error); + }); + }); }, // 获取用户信息 GetInfo({ commit, state }) { return new Promise((resolve, reject) => { - getInfo().then(res => { - const user = res.user - const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; - if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 - commit('SET_ROLES', res.roles) - commit('SET_PERMISSIONS', res.permissions) - } else { - commit('SET_ROLES', ['ROLE_DEFAULT']) - } - commit('SET_NAME', user.userName) - commit('SET_AVATAR', avatar) - resolve(res) - }).catch(error => { - reject(error) - }) - }) + getInfo() + .then((res) => { + const user = res.user; + const avatar = + user.avatar === '' || user.avatar == null ? require('@/assets/images/profile.jpg') : process.env.VUE_APP_BASE_API + user.avatar; + if (res.roles && res.roles.length > 0) { + // 验证返回的roles是否是一个非空数组 + commit('SET_ROLES', res.roles); + commit('SET_PERMISSIONS', res.permissions); + } else { + commit('SET_ROLES', ['ROLE_DEFAULT']); + } + commit('SET_NAME', user.userName); + commit('SET_AVATAR', avatar); + resolve(res); + }) + .catch((error) => { + reject(error); + }); + }); }, // 退出系统 LogOut({ commit, state }) { return new Promise((resolve, reject) => { - logout(state.token).then(() => { - commit('SET_TOKEN', '') - commit('SET_ROLES', []) - commit('SET_PERMISSIONS', []) - removeToken() - resolve() - }).catch(error => { - reject(error) - }) - }) + logout(state.token) + .then(() => { + commit('SET_TOKEN', ''); + commit('SET_ROLES', []); + commit('SET_PERMISSIONS', []); + removeToken(); + resolve(); + }) + .catch((error) => { + reject(error); + }); + }); }, // 前端 登出 FedLogOut({ commit }) { - return new Promise(resolve => { - commit('SET_TOKEN', '') - removeToken() - resolve() - }) + return new Promise((resolve) => { + commit('SET_TOKEN', ''); + removeToken(); + resolve(); + }); } } -} +}; -export default user +export default user; diff --git a/src/utils/dict/Dict.js b/src/utils/dict/Dict.js index 104bd6e..66bf179 100644 --- a/src/utils/dict/Dict.js +++ b/src/utils/dict/Dict.js @@ -1,11 +1,11 @@ -import Vue from 'vue' -import { mergeRecursive } from "@/utils/ruoyi"; -import DictMeta from './DictMeta' -import DictData from './DictData' +import Vue from 'vue'; +import { mergeRecursive } from '@/utils/ruoyi'; +import DictMeta from './DictMeta'; +import DictData from './DictData'; const DEFAULT_DICT_OPTIONS = { - types: [], -} + types: [] +}; /** * @classdesc 字典 @@ -15,31 +15,31 @@ const DEFAULT_DICT_OPTIONS = { */ export default class Dict { constructor() { - this.owner = null - this.label = {} - this.type = {} + this.owner = null; + this.label = {}; + this.type = {}; } init(options) { if (options instanceof Array) { - options = { types: options } + options = { types: options }; } - const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options) + const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options); if (opts.types === undefined) { - throw new Error('need dict types') + throw new Error('need dict types'); } - const ps = [] - this._dictMetas = opts.types.map(t => DictMeta.parse(t)) - this._dictMetas.forEach(dictMeta => { - const type = dictMeta.type - Vue.set(this.label, type, {}) - Vue.set(this.type, type, []) + const ps = []; + this._dictMetas = opts.types.map((t) => DictMeta.parse(t)); + this._dictMetas.forEach((dictMeta) => { + const type = dictMeta.type; + Vue.set(this.label, type, {}); + Vue.set(this.type, type, []); if (dictMeta.lazy) { - return + return; } - ps.push(loadDict(this, dictMeta)) - }) - return Promise.all(ps) + ps.push(loadDict(this, dictMeta)); + }); + return Promise.all(ps); } /** @@ -47,11 +47,11 @@ export default class Dict { * @param {String} type 字典类型 */ reloadDict(type) { - const dictMeta = this._dictMetas.find(e => e.type === type) + const dictMeta = this._dictMetas.find((e) => e.type === type); if (dictMeta === undefined) { - return Promise.reject(`the dict meta of ${type} was not found`) + return Promise.reject(`the dict meta of ${type} was not found`); } - return loadDict(this, dictMeta) + return loadDict(this, dictMeta); } } @@ -62,21 +62,20 @@ export default class Dict { * @returns {Promise} */ function loadDict(dict, dictMeta) { - return dictMeta.request(dictMeta) - .then(response => { - const type = dictMeta.type - let dicts = dictMeta.responseConverter(response, dictMeta) - if (!(dicts instanceof Array)) { - console.error('the return of responseConverter must be Array.') - dicts = [] - } else if (dicts.filter(d => d instanceof DictData).length !== dicts.length) { - console.error('the type of elements in dicts must be DictData') - dicts = [] - } - dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts) - dicts.forEach(d => { - Vue.set(dict.label[type], d.value, d.label) - }) - return dicts - }) + return dictMeta.request(dictMeta).then((response) => { + const type = dictMeta.type; + let dicts = dictMeta.responseConverter(response, dictMeta); + if (!(dicts instanceof Array)) { + console.error('the return of responseConverter must be Array.'); + dicts = []; + } else if (dicts.filter((d) => d instanceof DictData).length !== dicts.length) { + console.error('the type of elements in dicts must be DictData'); + dicts = []; + } + dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts); + dicts.forEach((d) => { + Vue.set(dict.label[type], d.value, d.label); + }); + return dicts; + }); } diff --git a/src/utils/dict/DictConverter.js b/src/utils/dict/DictConverter.js index 0cf5df8..ea1f235 100644 --- a/src/utils/dict/DictConverter.js +++ b/src/utils/dict/DictConverter.js @@ -1,10 +1,10 @@ -import DictOptions from './DictOptions' -import DictData from './DictData' +import DictOptions from './DictOptions'; +import DictData from './DictData'; -export default function(dict, dictMeta) { - const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS) - const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS) - return new DictData(dict[label], dict[value], dict) +export default function (dict, dictMeta) { + const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS); + const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS); + return new DictData(dict[label], dict[value], dict); } /** @@ -13,5 +13,5 @@ export default function(dict, dictMeta) { * @param {...String} fields */ function determineDictField(dict, ...fields) { - return fields.find(f => Object.prototype.hasOwnProperty.call(dict, f)) + return fields.find((f) => Object.prototype.hasOwnProperty.call(dict, f)); } diff --git a/src/utils/dict/DictData.js b/src/utils/dict/DictData.js index afc763e..81ee6f0 100644 --- a/src/utils/dict/DictData.js +++ b/src/utils/dict/DictData.js @@ -6,8 +6,8 @@ */ export default class DictData { constructor(label, value, raw) { - this.label = label - this.value = value - this.raw = raw + this.label = label; + this.value = value; + this.raw = raw; } } diff --git a/src/utils/dict/DictMeta.js b/src/utils/dict/DictMeta.js index 9779daa..30dd8b6 100644 --- a/src/utils/dict/DictMeta.js +++ b/src/utils/dict/DictMeta.js @@ -1,5 +1,5 @@ -import { mergeRecursive } from "@/utils/ruoyi"; -import DictOptions from './DictOptions' +import { mergeRecursive } from '@/utils/ruoyi'; +import DictOptions from './DictOptions'; /** * @classdesc 字典元数据 @@ -10,29 +10,28 @@ import DictOptions from './DictOptions' */ export default class DictMeta { constructor(options) { - this.type = options.type - this.request = options.request - this.responseConverter = options.responseConverter - this.labelField = options.labelField - this.valueField = options.valueField - this.lazy = options.lazy === true + this.type = options.type; + this.request = options.request; + this.responseConverter = options.responseConverter; + this.labelField = options.labelField; + this.valueField = options.valueField; + this.lazy = options.lazy === true; } } - /** * 解析字典元数据 * @param {Object} options * @returns {DictMeta} */ -DictMeta.parse= function(options) { - let opts = null +DictMeta.parse = function (options) { + let opts = null; if (typeof options === 'string') { - opts = DictOptions.metas[options] || {} - opts.type = options + opts = DictOptions.metas[options] || {}; + opts.type = options; } else if (typeof options === 'object') { - opts = options + opts = options; } - opts = mergeRecursive(DictOptions.metas['*'], opts) - return new DictMeta(opts) -} + opts = mergeRecursive(DictOptions.metas['*'], opts); + return new DictMeta(opts); +}; diff --git a/src/utils/dict/DictOptions.js b/src/utils/dict/DictOptions.js index 338a94e..5a92da5 100644 --- a/src/utils/dict/DictOptions.js +++ b/src/utils/dict/DictOptions.js @@ -1,5 +1,5 @@ -import { mergeRecursive } from "@/utils/ruoyi"; -import dictConverter from './DictConverter' +import { mergeRecursive } from '@/utils/ruoyi'; +import dictConverter from './DictConverter'; export const options = { metas: { @@ -8,16 +8,16 @@ export const options = { * 字典请求,方法签名为function(dictMeta: DictMeta): Promise */ request: (dictMeta) => { - console.log(`load dict ${dictMeta.type}`) - return Promise.resolve([]) + console.log(`load dict ${dictMeta.type}`); + return Promise.resolve([]); }, /** * 字典响应数据转换器,方法签名为function(response: Object, dictMeta: DictMeta): DictData */ responseConverter, labelField: 'label', - valueField: 'value', - }, + valueField: 'value' + } }, /** * 默认标签字段 @@ -26,8 +26,8 @@ export const options = { /** * 默认值字段 */ - DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key'], -} + DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key'] +}; /** * 映射字典 @@ -36,16 +36,16 @@ export const options = { * @returns {DictData} */ function responseConverter(response, dictMeta) { - const dicts = response.content instanceof Array ? response.content : response + const dicts = response.content instanceof Array ? response.content : response; if (dicts === undefined) { - console.warn(`no dict data of "${dictMeta.type}" found in the response`) - return [] + console.warn(`no dict data of "${dictMeta.type}" found in the response`); + return []; } - return dicts.map(d => dictConverter(d, dictMeta)) + return dicts.map((d) => dictConverter(d, dictMeta)); } export function mergeOptions(src) { - mergeRecursive(options, src) + mergeRecursive(options, src); } -export default options +export default options; diff --git a/src/utils/dict/index.js b/src/utils/dict/index.js index 215eb9e..60d4c7e 100644 --- a/src/utils/dict/index.js +++ b/src/utils/dict/index.js @@ -1,33 +1,33 @@ -import Dict from './Dict' -import { mergeOptions } from './DictOptions' +import Dict from './Dict'; +import { mergeOptions } from './DictOptions'; -export default function(Vue, options) { - mergeOptions(options) +export default function (Vue, options) { + mergeOptions(options); Vue.mixin({ data() { if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) { - return {} + return {}; } - const dict = new Dict() - dict.owner = this + const dict = new Dict(); + dict.owner = this; return { dict - } + }; }, created() { if (!(this.dict instanceof Dict)) { - return + return; } - options.onCreated && options.onCreated(this.dict) + options.onCreated && options.onCreated(this.dict); this.dict.init(this.$options.dicts).then(() => { - options.onReady && options.onReady(this.dict) + options.onReady && options.onReady(this.dict); this.$nextTick(() => { - this.$emit('dictReady', this.dict) + this.$emit('dictReady', this.dict); if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) { - this.$options.methods.onDictReady.call(this, this.dict) + this.$options.methods.onDictReady.call(this, this.dict); } - }) - }) - }, - }) + }); + }); + } + }); } diff --git a/src/utils/errorCode.js b/src/utils/errorCode.js index d2111ee..81aff2c 100644 --- a/src/utils/errorCode.js +++ b/src/utils/errorCode.js @@ -1,6 +1,6 @@ export default { - '401': '认证失败,无法访问系统资源', - '403': '当前操作没有权限', - '404': '访问资源不存在', - 'default': '系统未知错误,请反馈给管理员' -} + 401: '认证失败,无法访问系统资源', + 403: '当前操作没有权限', + 404: '访问资源不存在', + default: '系统未知错误,请反馈给管理员' +}; diff --git a/src/utils/index.js b/src/utils/index.js index b800f65..f11453a 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -4,7 +4,7 @@ import { parseTime } from './ruoyi'; * 表格时间格式化 */ export function formatDate(cellValue) { - if (cellValue == null || cellValue == '') return ''; + if (cellValue == null || cellValue === '') return ''; var date = new Date(cellValue); var year = date.getFullYear(); var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1; diff --git a/src/utils/jsencrypt.js b/src/utils/jsencrypt.js index 78d9523..1c0574b 100644 --- a/src/utils/jsencrypt.js +++ b/src/utils/jsencrypt.js @@ -1,30 +1,30 @@ -import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' +import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'; // 密钥对生成 http://web.chacuo.net/netrsakeypair -const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + - 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' +const publicKey = + 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='; -const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + +const privateKey = + 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + - 'UP8iWi1Qw0Y=' + 'UP8iWi1Qw0Y='; // 加密 export function encrypt(txt) { - const encryptor = new JSEncrypt() - encryptor.setPublicKey(publicKey) // 设置公钥 - return encryptor.encrypt(txt) // 对数据进行加密 + const encryptor = new JSEncrypt(); + encryptor.setPublicKey(publicKey); // 设置公钥 + return encryptor.encrypt(txt); // 对数据进行加密 } // 解密 export function decrypt(txt) { - const encryptor = new JSEncrypt() - encryptor.setPrivateKey(privateKey) // 设置私钥 - return encryptor.decrypt(txt) // 对数据进行解密 + const encryptor = new JSEncrypt(); + encryptor.setPrivateKey(privateKey); // 设置私钥 + return encryptor.decrypt(txt); // 对数据进行解密 } - diff --git a/src/utils/request.js b/src/utils/request.js index 9f63805..182d17d 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -10,7 +10,7 @@ import { successCode } from '@/global/global'; let downloadLoadingInstance; // 是否显示重新登录 -export let isRelogin = { show: false }; +export const isRelogin = { show: false }; axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'; // 创建axios实例 diff --git a/src/utils/ruoyi.js b/src/utils/ruoyi.js index fc5815d..3362a81 100644 --- a/src/utils/ruoyi.js +++ b/src/utils/ruoyi.js @@ -78,7 +78,7 @@ export function selectDictLabel(datas, value) { } var actions = []; Object.keys(datas).some((key) => { - if (datas[key].value == '' + value) { + if (datas[key].value === '' + value) { actions.push(datas[key].label); return true; } @@ -100,7 +100,7 @@ export function selectDictLabels(datas, value, separator) { Object.keys(value.split(currentSeparator)).some((val) => { var match = false; Object.keys(datas).some((key) => { - if (datas[key].value == '' + temp[val]) { + if (datas[key].value === '' + temp[val]) { actions.push(datas[key].label + currentSeparator); match = true; } @@ -130,7 +130,7 @@ export function sprintf(str) { // 转换字符串,undefined,null等转化为"" export function parseStrEmpty(str) { - if (!str || str == 'undefined' || str == 'null') { + if (!str || str === 'undefined' || str === 'null') { return ''; } return str; @@ -140,7 +140,7 @@ export function parseStrEmpty(str) { export function mergeRecursive(source, target) { for (var p in target) { try { - if (target[p].constructor == Object) { + if (target[p].constructor === Object) { source[p] = mergeRecursive(source[p], target[p]); } else { source[p] = target[p]; @@ -241,15 +241,14 @@ export async function blobValidate(data) { } } - export function isNullOrEmpty(val) { if (val === null || val === undefined) { - return true + return true; } else if (val === {} || Object.keys(val).length === 0) { - return true + return true; } else if (val.length === 0) { - return true + return true; } else { - return false + return false; } } diff --git a/src/utils/scroll-to.js b/src/utils/scroll-to.js index c5d8e04..a908ce1 100644 --- a/src/utils/scroll-to.js +++ b/src/utils/scroll-to.js @@ -1,29 +1,36 @@ -Math.easeInOutQuad = function(t, b, c, d) { - t /= d / 2 +Math.easeInOutQuad = function (t, b, c, d) { + t /= d / 2; if (t < 1) { - return c / 2 * t * t + b + return (c / 2) * t * t + b; } - t-- - return -c / 2 * (t * (t - 2) - 1) + b -} + t--; + return (-c / 2) * (t * (t - 2) - 1) + b; +}; // requestAnimationFrame for Smart Animating http://goo.gl/sx5sts -var requestAnimFrame = (function() { - return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } -})() +var requestAnimFrame = (function () { + return ( + window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + function (callback) { + window.setTimeout(callback, 1000 / 60); + } + ); +})(); /** * Because it's so fucking difficult to detect the scrolling element, just move them all * @param {number} amount */ function move(amount) { - document.documentElement.scrollTop = amount - document.body.parentNode.scrollTop = amount - document.body.scrollTop = amount + document.documentElement.scrollTop = amount; + document.body.parentNode.scrollTop = amount; + document.body.scrollTop = amount; } function position() { - return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop + return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop; } /** @@ -32,27 +39,27 @@ function position() { * @param {Function} callback */ export function scrollTo(to, duration, callback) { - const start = position() - const change = to - start - const increment = 20 - let currentTime = 0 - duration = (typeof (duration) === 'undefined') ? 500 : duration - var animateScroll = function() { + const start = position(); + const change = to - start; + const increment = 20; + let currentTime = 0; + duration = typeof duration === 'undefined' ? 500 : duration; + var animateScroll = function () { // increment the time - currentTime += increment + currentTime += increment; // find the value with the quadratic in-out easing function - var val = Math.easeInOutQuad(currentTime, start, change, duration) + var val = Math.easeInOutQuad(currentTime, start, change, duration); // move the document.body - move(val) + move(val); // do the animation unless its over if (currentTime < duration) { - requestAnimFrame(animateScroll) + requestAnimFrame(animateScroll); } else { - if (callback && typeof (callback) === 'function') { + if (callback && typeof callback === 'function') { // the animation is done so lets callback - callback() + callback(); } } - } - animateScroll() + }; + animateScroll(); } diff --git a/src/utils/storage.js b/src/utils/storage.js index 384236f..628015e 100644 --- a/src/utils/storage.js +++ b/src/utils/storage.js @@ -1,8 +1,3 @@ -/** - * @Author: Lei Ding - * @Date: 2021/9/8 - */ - import Vue from 'vue'; /** diff --git a/src/views/components/icons/element-icons.js b/src/views/components/icons/element-icons.js index 9ea4d63..a19a159 100644 --- a/src/views/components/icons/element-icons.js +++ b/src/views/components/icons/element-icons.js @@ -1,3 +1,284 @@ -const elementIcons = ['platform-eleme', 'eleme', 'delete-solid', 'delete', 's-tools', 'setting', 'user-solid', 'user', 'phone', 'phone-outline', 'more', 'more-outline', 'star-on', 'star-off', 's-goods', 'goods', 'warning', 'warning-outline', 'question', 'info', 'remove', 'circle-plus', 'success', 'error', 'zoom-in', 'zoom-out', 'remove-outline', 'circle-plus-outline', 'circle-check', 'circle-close', 's-help', 'help', 'minus', 'plus', 'check', 'close', 'picture', 'picture-outline', 'picture-outline-round', 'upload', 'upload2', 'download', 'camera-solid', 'camera', 'video-camera-solid', 'video-camera', 'message-solid', 'bell', 's-cooperation', 's-order', 's-platform', 's-fold', 's-unfold', 's-operation', 's-promotion', 's-home', 's-release', 's-ticket', 's-management', 's-open', 's-shop', 's-marketing', 's-flag', 's-comment', 's-finance', 's-claim', 's-custom', 's-opportunity', 's-data', 's-check', 's-grid', 'menu', 'share', 'd-caret', 'caret-left', 'caret-right', 'caret-bottom', 'caret-top', 'bottom-left', 'bottom-right', 'back', 'right', 'bottom', 'top', 'top-left', 'top-right', 'arrow-left', 'arrow-right', 'arrow-down', 'arrow-up', 'd-arrow-left', 'd-arrow-right', 'video-pause', 'video-play', 'refresh', 'refresh-right', 'refresh-left', 'finished', 'sort', 'sort-up', 'sort-down', 'rank', 'loading', 'view', 'c-scale-to-original', 'date', 'edit', 'edit-outline', 'folder', 'folder-opened', 'folder-add', 'folder-remove', 'folder-delete', 'folder-checked', 'tickets', 'document-remove', 'document-delete', 'document-copy', 'document-checked', 'document', 'document-add', 'printer', 'paperclip', 'takeaway-box', 'search', 'monitor', 'attract', 'mobile', 'scissors', 'umbrella', 'headset', 'brush', 'mouse', 'coordinate', 'magic-stick', 'reading', 'data-line', 'data-board', 'pie-chart', 'data-analysis', 'collection-tag', 'film', 'suitcase', 'suitcase-1', 'receiving', 'collection', 'files', 'notebook-1', 'notebook-2', 'toilet-paper', 'office-building', 'school', 'table-lamp', 'house', 'no-smoking', 'smoking', 'shopping-cart-full', 'shopping-cart-1', 'shopping-cart-2', 'shopping-bag-1', 'shopping-bag-2', 'sold-out', 'sell', 'present', 'box', 'bank-card', 'money', 'coin', 'wallet', 'discount', 'price-tag', 'news', 'guide', 'male', 'female', 'thumb', 'cpu', 'link', 'connection', 'open', 'turn-off', 'set-up', 'chat-round', 'chat-line-round', 'chat-square', 'chat-dot-round', 'chat-dot-square', 'chat-line-square', 'message', 'postcard', 'position', 'turn-off-microphone', 'microphone', 'close-notification', 'bangzhu', 'time', 'odometer', 'crop', 'aim', 'switch-button', 'full-screen', 'copy-document', 'mic', 'stopwatch', 'medal-1', 'medal', 'trophy', 'trophy-1', 'first-aid-kit', 'discover', 'place', 'location', 'location-outline', 'location-information', 'add-location', 'delete-location', 'map-location', 'alarm-clock', 'timer', 'watch-1', 'watch', 'lock', 'unlock', 'key', 'service', 'mobile-phone', 'bicycle', 'truck', 'ship', 'basketball', 'football', 'soccer', 'baseball', 'wind-power', 'light-rain', 'lightning', 'heavy-rain', 'sunrise', 'sunrise-1', 'sunset', 'sunny', 'cloudy', 'partly-cloudy', 'cloudy-and-sunny', 'moon', 'moon-night', 'dish', 'dish-1', 'food', 'chicken', 'fork-spoon', 'knife-fork', 'burger', 'tableware', 'sugar', 'dessert', 'ice-cream', 'hot-water', 'water-cup', 'coffee-cup', 'cold-drink', 'goblet', 'goblet-full', 'goblet-square', 'goblet-square-full', 'refrigerator', 'grape', 'watermelon', 'cherry', 'apple', 'pear', 'orange', 'coffee', 'ice-tea', 'ice-drink', 'milk-tea', 'potato-strips', 'lollipop', 'ice-cream-square', 'ice-cream-round'] +const elementIcons = [ + 'platform-eleme', + 'eleme', + 'delete-solid', + 'delete', + 's-tools', + 'setting', + 'user-solid', + 'user', + 'phone', + 'phone-outline', + 'more', + 'more-outline', + 'star-on', + 'star-off', + 's-goods', + 'goods', + 'warning', + 'warning-outline', + 'question', + 'info', + 'remove', + 'circle-plus', + 'success', + 'error', + 'zoom-in', + 'zoom-out', + 'remove-outline', + 'circle-plus-outline', + 'circle-check', + 'circle-close', + 's-help', + 'help', + 'minus', + 'plus', + 'check', + 'close', + 'picture', + 'picture-outline', + 'picture-outline-round', + 'upload', + 'upload2', + 'download', + 'camera-solid', + 'camera', + 'video-camera-solid', + 'video-camera', + 'message-solid', + 'bell', + 's-cooperation', + 's-order', + 's-platform', + 's-fold', + 's-unfold', + 's-operation', + 's-promotion', + 's-home', + 's-release', + 's-ticket', + 's-management', + 's-open', + 's-shop', + 's-marketing', + 's-flag', + 's-comment', + 's-finance', + 's-claim', + 's-custom', + 's-opportunity', + 's-data', + 's-check', + 's-grid', + 'menu', + 'share', + 'd-caret', + 'caret-left', + 'caret-right', + 'caret-bottom', + 'caret-top', + 'bottom-left', + 'bottom-right', + 'back', + 'right', + 'bottom', + 'top', + 'top-left', + 'top-right', + 'arrow-left', + 'arrow-right', + 'arrow-down', + 'arrow-up', + 'd-arrow-left', + 'd-arrow-right', + 'video-pause', + 'video-play', + 'refresh', + 'refresh-right', + 'refresh-left', + 'finished', + 'sort', + 'sort-up', + 'sort-down', + 'rank', + 'loading', + 'view', + 'c-scale-to-original', + 'date', + 'edit', + 'edit-outline', + 'folder', + 'folder-opened', + 'folder-add', + 'folder-remove', + 'folder-delete', + 'folder-checked', + 'tickets', + 'document-remove', + 'document-delete', + 'document-copy', + 'document-checked', + 'document', + 'document-add', + 'printer', + 'paperclip', + 'takeaway-box', + 'search', + 'monitor', + 'attract', + 'mobile', + 'scissors', + 'umbrella', + 'headset', + 'brush', + 'mouse', + 'coordinate', + 'magic-stick', + 'reading', + 'data-line', + 'data-board', + 'pie-chart', + 'data-analysis', + 'collection-tag', + 'film', + 'suitcase', + 'suitcase-1', + 'receiving', + 'collection', + 'files', + 'notebook-1', + 'notebook-2', + 'toilet-paper', + 'office-building', + 'school', + 'table-lamp', + 'house', + 'no-smoking', + 'smoking', + 'shopping-cart-full', + 'shopping-cart-1', + 'shopping-cart-2', + 'shopping-bag-1', + 'shopping-bag-2', + 'sold-out', + 'sell', + 'present', + 'box', + 'bank-card', + 'money', + 'coin', + 'wallet', + 'discount', + 'price-tag', + 'news', + 'guide', + 'male', + 'female', + 'thumb', + 'cpu', + 'link', + 'connection', + 'open', + 'turn-off', + 'set-up', + 'chat-round', + 'chat-line-round', + 'chat-square', + 'chat-dot-round', + 'chat-dot-square', + 'chat-line-square', + 'message', + 'postcard', + 'position', + 'turn-off-microphone', + 'microphone', + 'close-notification', + 'bangzhu', + 'time', + 'odometer', + 'crop', + 'aim', + 'switch-button', + 'full-screen', + 'copy-document', + 'mic', + 'stopwatch', + 'medal-1', + 'medal', + 'trophy', + 'trophy-1', + 'first-aid-kit', + 'discover', + 'place', + 'location', + 'location-outline', + 'location-information', + 'add-location', + 'delete-location', + 'map-location', + 'alarm-clock', + 'timer', + 'watch-1', + 'watch', + 'lock', + 'unlock', + 'key', + 'service', + 'mobile-phone', + 'bicycle', + 'truck', + 'ship', + 'basketball', + 'football', + 'soccer', + 'baseball', + 'wind-power', + 'light-rain', + 'lightning', + 'heavy-rain', + 'sunrise', + 'sunrise-1', + 'sunset', + 'sunny', + 'cloudy', + 'partly-cloudy', + 'cloudy-and-sunny', + 'moon', + 'moon-night', + 'dish', + 'dish-1', + 'food', + 'chicken', + 'fork-spoon', + 'knife-fork', + 'burger', + 'tableware', + 'sugar', + 'dessert', + 'ice-cream', + 'hot-water', + 'water-cup', + 'coffee-cup', + 'cold-drink', + 'goblet', + 'goblet-full', + 'goblet-square', + 'goblet-square-full', + 'refrigerator', + 'grape', + 'watermelon', + 'cherry', + 'apple', + 'pear', + 'orange', + 'coffee', + 'ice-tea', + 'ice-drink', + 'milk-tea', + 'potato-strips', + 'lollipop', + 'ice-cream-square', + 'ice-cream-round' +]; -export default elementIcons +export default elementIcons; diff --git a/src/views/components/icons/index.vue b/src/views/components/icons/index.vue index d3c9a71..69a47ab 100644 --- a/src/views/components/icons/index.vue +++ b/src/views/components/icons/index.vue @@ -36,8 +36,8 @@ diff --git a/src/views/error/404.vue b/src/views/error/404.vue index 96f075c..56f972b 100644 --- a/src/views/error/404.vue +++ b/src/views/error/404.vue @@ -26,20 +26,19 @@ diff --git a/src/views/finance/finance/index.vue b/src/views/finance/finance/index.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/index_v1.vue b/src/views/index_v1.vue index d2d2ec6..f9b5dec 100644 --- a/src/views/index_v1.vue +++ b/src/views/index_v1.vue @@ -25,16 +25,15 @@ - diff --git a/src/views/sch/school.vue b/src/views/sch/school.vue index e2ae7f1..eeb8afd 100644 --- a/src/views/sch/school.vue +++ b/src/views/sch/school.vue @@ -9,7 +9,7 @@ 搜索 重置 - 新增 + 新增 @@ -38,14 +38,13 @@ - + \ No newline at end of file + this.$modal + .confirm('删除驾校信息,同时会删除该驾校下的场地信息和班型信息,是否确认名称为"' + item.schoolName + '"的数据项?') + .then(function () { + return schoolApi.delete(item.schoolId); + }) + .then((resp) => { + if (resp.code === 200) { + this.getPageList(); + this.$modal.msgSuccess('删除成功'); + } + }) + .catch(() => {}); + } + } +}; + diff --git a/src/views/system/config/index.vue b/src/views/system/config/index.vue index f580b98..c5efb3a 100644 --- a/src/views/system/config/index.vue +++ b/src/views/system/config/index.vue @@ -1,44 +1,19 @@ \ No newline at end of file + diff --git a/src/views/system/dict/index.vue b/src/views/system/dict/index.vue index 6ca5457..035966e 100644 --- a/src/views/system/dict/index.vue +++ b/src/views/system/dict/index.vue @@ -1,49 +1,19 @@ \ No newline at end of file + diff --git a/src/views/system/employee/index.vue b/src/views/system/employee/index.vue index 96c0206..a435955 100644 --- a/src/views/system/employee/index.vue +++ b/src/views/system/employee/index.vue @@ -7,7 +7,7 @@

@@ -98,7 +98,7 @@ - + @@ -143,7 +143,7 @@ - + @@ -202,12 +202,13 @@ - \ No newline at end of file diff --git a/src/views/zs/components/batchUpdateForm.vue b/src/views/zs/components/batchUpdateForm.vue index 90a46f7..988b6e1 100644 --- a/src/views/zs/components/batchUpdateForm.vue +++ b/src/views/zs/components/batchUpdateForm.vue @@ -1,21 +1,10 @@