请上传
@@ -44,7 +44,6 @@
+
+
diff --git a/src/components/PivotTable/index.vue b/src/components/PivotTable/index.vue
new file mode 100644
index 0000000..032c5e3
--- /dev/null
+++ b/src/components/PivotTable/index.vue
@@ -0,0 +1,544 @@
+
+
+
+
+
+
+
+
+ {{ cell.isCorner ? (rowPaths.length + ' x ' + colPaths.length) : cell.value }}
+
+ |
+
+
+
+
+
+
+
+
+ {{ cell.value }}
+
+ |
+
+
+
+ {{ cell.value }}
+
+ |
+
+
+
+
+
+
+
+
+
diff --git a/src/components/PowershellEditor/index.vue b/src/components/PowershellEditor/index.vue
new file mode 100644
index 0000000..701d414
--- /dev/null
+++ b/src/components/PowershellEditor/index.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/PythonEditor/index.vue b/src/components/PythonEditor/index.vue
new file mode 100644
index 0000000..b0ee59c
--- /dev/null
+++ b/src/components/PythonEditor/index.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
index 5abeecb..fbf27eb 100644
--- a/src/components/RightPanel/index.vue
+++ b/src/components/RightPanel/index.vue
@@ -1,5 +1,5 @@
-
+
@@ -10,12 +10,18 @@
+
+
diff --git a/src/components/SqlEditor/index.vue b/src/components/SqlEditor/index.vue
new file mode 100644
index 0000000..e49ef65
--- /dev/null
+++ b/src/components/SqlEditor/index.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/TextHoverEffect/Mallki.vue b/src/components/TextHoverEffect/Mallki.vue
new file mode 100644
index 0000000..5d6d16c
--- /dev/null
+++ b/src/components/TextHoverEffect/Mallki.vue
@@ -0,0 +1,113 @@
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
diff --git a/src/components/TopNav/index.vue b/src/components/TopNav/index.vue
index 75e2bb6..0cc24db 100644
--- a/src/components/TopNav/index.vue
+++ b/src/components/TopNav/index.vue
@@ -5,27 +5,23 @@
@select="handleSelect"
>
-
-
- {{ item.meta.title }}
-
+
+ {{ item.meta.title }}
-
+
更多菜单
-
- {{ item.meta.title }}
-
+ v-if="index >= visibleNumber"
+ >
+ {{ item.meta.title }}
@@ -33,7 +29,6 @@
+
+
diff --git a/src/directive/dialog/dragHeight.js b/src/directive/dialog/dragHeight.js
index 97e5305..d1590f8 100644
--- a/src/directive/dialog/dragHeight.js
+++ b/src/directive/dialog/dragHeight.js
@@ -1,34 +1,34 @@
/**
- * v-dialogDragWidth 可拖动弹窗高度(右下角)
- * Copyright (c) 2019 ruoyi
- */
+* v-dialogDragWidth 可拖动弹窗高度(右下角)
+* Copyright (c) 2019 ruoyi
+*/
export default {
- bind(el) {
- const dragDom = el.querySelector('.el-dialog');
- const lineEl = document.createElement('div');
- lineEl.style = 'width: 6px; background: inherit; height: 10px; position: absolute; right: 0; bottom: 0; margin: auto; z-index: 1; cursor: nwse-resize;';
- lineEl.addEventListener('mousedown',
- function(e) {
- // 鼠标按下,计算当前元素距离可视区的距离
- const disX = e.clientX - el.offsetLeft;
- const disY = e.clientY - el.offsetTop;
- // 当前宽度 高度
- const curWidth = dragDom.offsetWidth;
- const curHeight = dragDom.offsetHeight;
- document.onmousemove = function(e) {
- e.preventDefault(); // 移动时禁用默认事件
- // 通过事件委托,计算移动的距离
- const xl = e.clientX - disX;
- const yl = e.clientY - disY
- dragDom.style.width = `${curWidth + xl}px`;
- dragDom.style.height = `${curHeight + yl}px`;
- };
- document.onmouseup = function(e) {
- document.onmousemove = null;
- document.onmouseup = null;
- };
- }, false);
- dragDom.appendChild(lineEl);
- }
-}
+ bind(el) {
+ const dragDom = el.querySelector('.el-dialog');
+ const lineEl = document.createElement('div');
+ lineEl.style = 'width: 6px; background: inherit; height: 10px; position: absolute; right: 0; bottom: 0; margin: auto; z-index: 1; cursor: nwse-resize;';
+ lineEl.addEventListener('mousedown',
+ function(e) {
+ // 鼠标按下,计算当前元素距离可视区的距离
+ const disX = e.clientX - el.offsetLeft;
+ const disY = e.clientY - el.offsetTop;
+ // 当前宽度 高度
+ const curWidth = dragDom.offsetWidth;
+ const curHeight = dragDom.offsetHeight;
+ document.onmousemove = function(e) {
+ e.preventDefault(); // 移动时禁用默认事件
+ // 通过事件委托,计算移动的距离
+ const xl = e.clientX - disX;
+ const yl = e.clientY - disY
+ dragDom.style.width = `${curWidth + xl}px`;
+ dragDom.style.height = `${curHeight + yl}px`;
+ };
+ document.onmouseup = function(e) {
+ document.onmousemove = null;
+ document.onmouseup = null;
+ };
+ }, false);
+ dragDom.appendChild(lineEl);
+ }
+}
\ No newline at end of file
diff --git a/src/directive/dialog/dragWidth.js b/src/directive/dialog/dragWidth.js
index 2df0867..d5cda3a 100644
--- a/src/directive/dialog/dragWidth.js
+++ b/src/directive/dialog/dragWidth.js
@@ -1,30 +1,30 @@
/**
- * v-dialogDragWidth 可拖动弹窗宽度(右侧边)
- * Copyright (c) 2019 ruoyi
- */
+* v-dialogDragWidth 可拖动弹窗宽度(右侧边)
+* Copyright (c) 2019 ruoyi
+*/
export default {
- bind(el) {
- const dragDom = el.querySelector('.el-dialog');
- const lineEl = document.createElement('div');
- lineEl.style = 'width: 5px; background: inherit; height: 80%; position: absolute; right: 0; top: 0; bottom: 0; margin: auto; z-index: 1; cursor: w-resize;';
- lineEl.addEventListener('mousedown',
- function (e) {
- // 鼠标按下,计算当前元素距离可视区的距离
- const disX = e.clientX - el.offsetLeft;
- // 当前宽度
- const curWidth = dragDom.offsetWidth;
- document.onmousemove = function (e) {
- e.preventDefault(); // 移动时禁用默认事件
- // 通过事件委托,计算移动的距离
- const l = e.clientX - disX;
- dragDom.style.width = `${curWidth + l}px`;
- };
- document.onmouseup = function (e) {
- document.onmousemove = null;
- document.onmouseup = null;
- };
- }, false);
- dragDom.appendChild(lineEl);
- }
-}
+ bind(el) {
+ const dragDom = el.querySelector('.el-dialog');
+ const lineEl = document.createElement('div');
+ lineEl.style = 'width: 5px; background: inherit; height: 80%; position: absolute; right: 0; top: 0; bottom: 0; margin: auto; z-index: 1; cursor: w-resize;';
+ lineEl.addEventListener('mousedown',
+ function (e) {
+ // 鼠标按下,计算当前元素距离可视区的距离
+ const disX = e.clientX - el.offsetLeft;
+ // 当前宽度
+ const curWidth = dragDom.offsetWidth;
+ document.onmousemove = function (e) {
+ e.preventDefault(); // 移动时禁用默认事件
+ // 通过事件委托,计算移动的距离
+ const l = e.clientX - disX;
+ dragDom.style.width = `${curWidth + l}px`;
+ };
+ document.onmouseup = function (e) {
+ document.onmousemove = null;
+ document.onmouseup = null;
+ };
+ }, false);
+ dragDom.appendChild(lineEl);
+ }
+}
\ No newline at end of file
diff --git a/src/directive/permission/hasPermi.js b/src/directive/permission/hasPermi.js
index 7101e3e..719536c 100644
--- a/src/directive/permission/hasPermi.js
+++ b/src/directive/permission/hasPermi.js
@@ -2,7 +2,7 @@
* v-hasPermi 操作权限处理
* Copyright (c) 2019 ruoyi
*/
-
+
import store from '@/store'
export default {
diff --git a/src/directive/permission/hasRole.js b/src/directive/permission/hasRole.js
index ad9d4d7..eec4a5b 100644
--- a/src/directive/permission/hasRole.js
+++ b/src/directive/permission/hasRole.js
@@ -2,7 +2,7 @@
* v-hasRole 角色权限处理
* Copyright (c) 2019 ruoyi
*/
-
+
import store from '@/store'
export default {
diff --git a/src/directive/waves/index.js b/src/directive/waves/index.js
new file mode 100644
index 0000000..65f9b30
--- /dev/null
+++ b/src/directive/waves/index.js
@@ -0,0 +1,13 @@
+import waves from './waves'
+
+const install = function(Vue) {
+ Vue.directive('waves', waves)
+}
+
+if (window.Vue) {
+ window.waves = waves
+ Vue.use(install); // eslint-disable-line
+}
+
+waves.install = install
+export default waves
diff --git a/src/directive/waves/waves.css b/src/directive/waves/waves.css
new file mode 100644
index 0000000..af7a7ef
--- /dev/null
+++ b/src/directive/waves/waves.css
@@ -0,0 +1,26 @@
+.waves-ripple {
+ position: absolute;
+ border-radius: 100%;
+ background-color: rgba(0, 0, 0, 0.15);
+ background-clip: padding-box;
+ pointer-events: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ opacity: 1;
+}
+
+.waves-ripple.z-active {
+ opacity: 0;
+ -webkit-transform: scale(2);
+ -ms-transform: scale(2);
+ transform: scale(2);
+ -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
+ transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
+ transition: opacity 1.2s ease-out, transform 0.6s ease-out;
+ transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out;
+}
\ No newline at end of file
diff --git a/src/directive/waves/waves.js b/src/directive/waves/waves.js
new file mode 100644
index 0000000..ec2ff43
--- /dev/null
+++ b/src/directive/waves/waves.js
@@ -0,0 +1,72 @@
+import './waves.css'
+
+const context = '@@wavesContext'
+
+function handleClick(el, binding) {
+ function handle(e) {
+ const customOpts = Object.assign({}, binding.value)
+ const opts = Object.assign({
+ ele: el, // 波纹作用元素
+ type: 'hit', // hit 点击位置扩散 center中心点扩展
+ color: 'rgba(0, 0, 0, 0.15)' // 波纹颜色
+ },
+ customOpts
+ )
+ const target = opts.ele
+ if (target) {
+ target.style.position = 'relative'
+ target.style.overflow = 'hidden'
+ const rect = target.getBoundingClientRect()
+ let ripple = target.querySelector('.waves-ripple')
+ if (!ripple) {
+ ripple = document.createElement('span')
+ ripple.className = 'waves-ripple'
+ ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px'
+ target.appendChild(ripple)
+ } else {
+ ripple.className = 'waves-ripple'
+ }
+ switch (opts.type) {
+ case 'center':
+ ripple.style.top = rect.height / 2 - ripple.offsetHeight / 2 + 'px'
+ ripple.style.left = rect.width / 2 - ripple.offsetWidth / 2 + 'px'
+ break
+ default:
+ ripple.style.top =
+ (e.pageY - rect.top - ripple.offsetHeight / 2 - document.documentElement.scrollTop ||
+ document.body.scrollTop) + 'px'
+ ripple.style.left =
+ (e.pageX - rect.left - ripple.offsetWidth / 2 - document.documentElement.scrollLeft ||
+ document.body.scrollLeft) + 'px'
+ }
+ ripple.style.backgroundColor = opts.color
+ ripple.className = 'waves-ripple z-active'
+ return false
+ }
+ }
+
+ if (!el[context]) {
+ el[context] = {
+ removeHandle: handle
+ }
+ } else {
+ el[context].removeHandle = handle
+ }
+
+ return handle
+}
+
+export default {
+ bind(el, binding) {
+ el.addEventListener('click', handleClick(el, binding), false)
+ },
+ update(el, binding) {
+ el.removeEventListener('click', el[context].removeHandle, false)
+ el.addEventListener('click', handleClick(el, binding), false)
+ },
+ unbind(el) {
+ el.removeEventListener('click', el[context].removeHandle, false)
+ el[context] = null
+ delete el[context]
+ }
+}
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
index a25c562..0c6f4b7 100644
--- a/src/layout/components/AppMain.vue
+++ b/src/layout/components/AppMain.vue
@@ -2,19 +2,15 @@
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 2176725..39b3dad 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -8,7 +8,14 @@