diff --git a/env.d.ts b/env.d.ts
index 11f02fe..b608774 100644
--- a/env.d.ts
+++ b/env.d.ts
@@ -1 +1,3 @@
///
+declare module 'element-plus/dist/locale/zh-cn.mjs'
+declare module 'mockjs'
\ No newline at end of file
diff --git a/package.json b/package.json
index b2c3528..584b139 100644
--- a/package.json
+++ b/package.json
@@ -11,9 +11,11 @@
},
"dependencies": {
"axios": "^1.3.3",
- "sass": "^1.58.3",
"echarts": "^5.4.1",
"element-plus": "2.3.1",
+ "pinia": "^2.1.7",
+ "sass": "^1.58.3",
+ "slider-verify-v3": "^1.1.11",
"vue": "^3.2.45",
"vue-router": "^4.1.6"
},
diff --git a/src/assets/css/global.scss b/src/assets/css/global.scss
index 35b7388..a300d48 100644
--- a/src/assets/css/global.scss
+++ b/src/assets/css/global.scss
@@ -1,5 +1,3 @@
-$main-color: #006080;
-
html,
body {
margin: 0;
@@ -7,6 +5,7 @@ body {
width: 100%;
height: 100%;
overflow: hidden;
+ font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;
}
span,
@@ -34,6 +33,14 @@ li {
box-sizing: border-box;
}
+[class^='icon-'] {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
::-webkit-scrollbar {
width: 5px;
height: 5px;
@@ -267,19 +274,24 @@ li {
.el-select-dropdown__item.selected {
color: #006080;
}
+
.el-select {
--el-select-input-focus-border-color: #006080;
}
+
.el-dialog {
.el-dialog__header {
+
.el-dialog__headerbtn:focus .el-dialog__close,
.el-dialog__headerbtn:hover .el-dialog__close {
color: #006080;
}
}
+
.el-dialog__body {
padding: 10px 20px;
}
+
.el-button {
--el-button-hover-text-color: #006080;
--el-button-hover-bg-color: rgba(0, 96, 128, .1);
@@ -303,4 +315,18 @@ li {
--el-button-active-border-color: rgba(0, 96, 128, .8);
}
+}
+
+// 验证弹窗
+#plugin-slider-verify_containe {
+ width: 0;
+ height: 0;
+ #slider-verify {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ -webkit-transform: translate(-50%, -50%);
+ background: white;
+ }
}
\ No newline at end of file
diff --git a/src/assets/css/variable.scss b/src/assets/css/variable.scss
new file mode 100644
index 0000000..cf5df88
--- /dev/null
+++ b/src/assets/css/variable.scss
@@ -0,0 +1,17 @@
+$main-color: #006080;
+$border-color: #EBEEF5;
+
+.el-button.el-button--primary {
+ background-color: $main-color;
+ border-color: $main-color;
+ opacity: 1;
+ transition: all .6;
+ &:hover, &:active {
+ opacity: .7;
+ transition: all .6;
+ }
+ &:focus {
+ opacity: .9;
+ transition: all .6;
+ }
+}
\ No newline at end of file
diff --git a/src/assets/font/demo.css b/src/assets/font/demo.css
new file mode 100644
index 0000000..a67054a
--- /dev/null
+++ b/src/assets/font/demo.css
@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+ font-family: "iconfont logo";
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+ font-family: "iconfont logo";
+ font-size: 160px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+ position: relative;
+}
+
+.nav-tabs .nav-more {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ height: 42px;
+ line-height: 42px;
+ color: #666;
+}
+
+#tabs {
+ border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+ cursor: pointer;
+ width: 100px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ font-size: 16px;
+ border-bottom: 2px solid transparent;
+ position: relative;
+ z-index: 1;
+ margin-bottom: -1px;
+ color: #666;
+}
+
+
+#tabs .active {
+ border-bottom-color: #f00;
+ color: #222;
+}
+
+.tab-container .content {
+ display: none;
+}
+
+/* 页面布局 */
+.main {
+ padding: 30px 100px;
+ width: 960px;
+ margin: 0 auto;
+}
+
+.main .logo {
+ color: #333;
+ text-align: left;
+ margin-bottom: 30px;
+ line-height: 1;
+ height: 110px;
+ margin-top: -50px;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.main .logo a {
+ font-size: 160px;
+ color: #333;
+}
+
+.helps {
+ margin-top: 40px;
+}
+
+.helps pre {
+ padding: 20px;
+ margin: 10px 0;
+ border: solid 1px #e7e1cd;
+ background-color: #fffdef;
+ overflow: auto;
+}
+
+.icon_lists {
+ width: 100% !important;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.icon_lists li {
+ width: 100px;
+ margin-bottom: 10px;
+ margin-right: 20px;
+ text-align: center;
+ list-style: none !important;
+ cursor: default;
+}
+
+.icon_lists li .code-name {
+ line-height: 1.2;
+}
+
+.icon_lists .icon {
+ display: block;
+ height: 100px;
+ line-height: 100px;
+ font-size: 42px;
+ margin: 10px auto;
+ color: #333;
+ -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+ -moz-transition: font-size 0.25s linear, width 0.25s linear;
+ transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+ font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+ /* 通过设置 font-size 来改变图标大小 */
+ width: 1em;
+ /* 图标和文字相邻时,垂直对齐 */
+ vertical-align: -0.15em;
+ /* 通过设置 color 来改变 SVG 的颜色/fill */
+ fill: currentColor;
+ /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+ normalize.css 中也包含这行 */
+ overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+ color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+ color: #666;
+ font-size: 14px;
+ line-height: 1.8;
+}
+
+.highlight {
+ line-height: 1.5;
+}
+
+.markdown img {
+ vertical-align: middle;
+ max-width: 100%;
+}
+
+.markdown h1 {
+ color: #404040;
+ font-weight: 500;
+ line-height: 40px;
+ margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+ color: #404040;
+ margin: 1.6em 0 0.6em 0;
+ font-weight: 500;
+ clear: both;
+}
+
+.markdown h1 {
+ font-size: 28px;
+}
+
+.markdown h2 {
+ font-size: 22px;
+}
+
+.markdown h3 {
+ font-size: 16px;
+}
+
+.markdown h4 {
+ font-size: 14px;
+}
+
+.markdown h5 {
+ font-size: 12px;
+}
+
+.markdown h6 {
+ font-size: 12px;
+}
+
+.markdown hr {
+ height: 1px;
+ border: 0;
+ background: #e9e9e9;
+ margin: 16px 0;
+ clear: both;
+}
+
+.markdown p {
+ margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+ width: 80%;
+}
+
+.markdown ul>li {
+ list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+ margin: 0.6em 0;
+}
+
+.markdown ol>li {
+ list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown code {
+ margin: 0 3px;
+ padding: 0 5px;
+ background: #eee;
+ border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+ font-weight: 600;
+}
+
+.markdown>table {
+ border-collapse: collapse;
+ border-spacing: 0px;
+ empty-cells: show;
+ border: 1px solid #e9e9e9;
+ width: 95%;
+ margin-bottom: 24px;
+}
+
+.markdown>table th {
+ white-space: nowrap;
+ color: #333;
+ font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+ border: 1px solid #e9e9e9;
+ padding: 8px 16px;
+ text-align: left;
+}
+
+.markdown>table th {
+ background: #F7F7F7;
+}
+
+.markdown blockquote {
+ font-size: 90%;
+ color: #999;
+ border-left: 4px solid #e9e9e9;
+ padding-left: 0.8em;
+ margin: 1em 0;
+}
+
+.markdown blockquote p {
+ margin: 0;
+}
+
+.markdown .anchor {
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ margin-left: 8px;
+}
+
+.markdown .waiting {
+ color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+ opacity: 1;
+ display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+ clear: both;
+}
+
+
+.hljs {
+ display: block;
+ background: white;
+ padding: 0.5em;
+ color: #333333;
+ overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+ color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+ color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+ color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+ color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+ color: #63a35c;
+}
+
+.hljs-tag {
+ color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #795da3;
+}
+
+.hljs-addition {
+ color: #55a532;
+ background-color: #eaffea;
+}
+
+.hljs-deletion {
+ color: #bd2c00;
+ background-color: #ffecec;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
diff --git a/src/assets/font/demo_index.html b/src/assets/font/demo_index.html
new file mode 100644
index 0000000..de27b80
--- /dev/null
+++ b/src/assets/font/demo_index.html
@@ -0,0 +1,211 @@
+
+
+
+
+ iconfont Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - Unicode
+ - Font class
+ - Symbol
+
+
+
查看项目
+
+
+
+
+
+
+ -
+
+
down-circle
+ 
+
+
+
+
+
Unicode 引用
+
+
+
Unicode 是字体在网页端最原始的应用方式,特点是:
+
+ - 支持按字体的方式去动态调整图标大小,颜色等等。
+ - 默认情况下不支持多色,直接添加多色图标会自动去色。
+
+
+ 注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)
+
+
Unicode 使用步骤如下:
+
第一步:拷贝项目下面生成的 @font-face
+
@font-face {
+ font-family: 'iconfont';
+ src: url('iconfont.woff2?t=1702534663582') format('woff2'),
+ url('iconfont.woff?t=1702534663582') format('woff'),
+ url('iconfont.ttf?t=1702534663582') format('truetype');
+}
+
+
第二步:定义使用 iconfont 的样式
+
.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+
第三步:挑选相应图标并获取字体编码,应用于页面
+
+<span class="iconfont">3</span>
+
+
+ "iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+ -
+
+
+ down-circle
+
+ .icon-down-circle
+
+
+
+
+
+
font-class 引用
+
+
+
font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。
+
与 Unicode 使用方式相比,具有如下特点:
+
+ - 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
+ - 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 fontclass 代码:
+
<link rel="stylesheet" href="./iconfont.css">
+
+
第二步:挑选相应图标并获取类名,应用于页面:
+
<span class="iconfont icon-xxx"></span>
+
+
+ "
+ iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+ -
+
+
down-circle
+ #icon-down-circle
+
+
+
+
+
Symbol 引用
+
+
+
这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章
+ 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:
+
+ - 支持多色图标了,不再受单色限制。
+ - 通过一些技巧,支持像字体那样,通过
font-size
, color
来调整样式。
+ - 兼容性较差,支持 IE9+,及现代浏览器。
+ - 浏览器渲染 SVG 的性能一般,还不如 png。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 symbol 代码:
+
<script src="./iconfont.js"></script>
+
+
第二步:加入通用 CSS 代码(引入一次就行):
+
<style>
+.icon {
+ width: 1em;
+ height: 1em;
+ vertical-align: -0.15em;
+ fill: currentColor;
+ overflow: hidden;
+}
+</style>
+
+
第三步:挑选相应图标并获取类名,应用于页面:
+
<svg class="icon" aria-hidden="true">
+ <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/font/iconfont.css b/src/assets/font/iconfont.css
new file mode 100644
index 0000000..45487c9
--- /dev/null
+++ b/src/assets/font/iconfont.css
@@ -0,0 +1,19 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 4373116 */
+ src: url('iconfont.woff2?t=1702534663582') format('woff2'),
+ url('iconfont.woff?t=1702534663582') format('woff'),
+ url('iconfont.ttf?t=1702534663582') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-down-circle:before {
+ content: "\e77f";
+}
+
diff --git a/src/assets/font/iconfont.js b/src/assets/font/iconfont.js
new file mode 100644
index 0000000..75f0b17
--- /dev/null
+++ b/src/assets/font/iconfont.js
@@ -0,0 +1 @@
+window._iconfont_svg_string_4373116='',function(n){var t=(t=document.getElementsByTagName("script"))[t.length-1],e=t.getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var o,i,c,d,s,a=function(t,e){e.parentNode.insertBefore(t,e)};if(e&&!n.__iconfont__svg__cssinject__){n.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}o=function(){var t,e=document.createElement("div");e.innerHTML=n._iconfont_svg_string_4373116,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?a(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),o()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(c=o,d=n.document,s=!1,r(),d.onreadystatechange=function(){"complete"==d.readyState&&(d.onreadystatechange=null,l())})}function l(){s||(s=!0,c())}function r(){try{d.documentElement.doScroll("left")}catch(t){return void setTimeout(r,50)}l()}}(window);
\ No newline at end of file
diff --git a/src/assets/font/iconfont.json b/src/assets/font/iconfont.json
new file mode 100644
index 0000000..19edf9f
--- /dev/null
+++ b/src/assets/font/iconfont.json
@@ -0,0 +1,16 @@
+{
+ "id": "4373116",
+ "name": "rax-medical",
+ "font_family": "iconfont",
+ "css_prefix_text": "icon-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "4765729",
+ "name": "down-circle",
+ "font_class": "down-circle",
+ "unicode": "e77f",
+ "unicode_decimal": 59263
+ }
+ ]
+}
diff --git a/src/assets/font/iconfont.ttf b/src/assets/font/iconfont.ttf
new file mode 100644
index 0000000..0198e1b
Binary files /dev/null and b/src/assets/font/iconfont.ttf differ
diff --git a/src/assets/font/iconfont.woff b/src/assets/font/iconfont.woff
new file mode 100644
index 0000000..2a001f8
Binary files /dev/null and b/src/assets/font/iconfont.woff differ
diff --git a/src/assets/font/iconfont.woff2 b/src/assets/font/iconfont.woff2
new file mode 100644
index 0000000..882f020
Binary files /dev/null and b/src/assets/font/iconfont.woff2 differ
diff --git a/src/assets/imgs/home/avatar.png b/src/assets/imgs/home/avatar.png
new file mode 100644
index 0000000..46d0386
Binary files /dev/null and b/src/assets/imgs/home/avatar.png differ
diff --git a/src/assets/imgs/login/login_bck.png b/src/assets/imgs/login/login_bck.png
new file mode 100644
index 0000000..20f67c2
Binary files /dev/null and b/src/assets/imgs/login/login_bck.png differ
diff --git a/src/assets/imgs/remote/remote_bck.png b/src/assets/imgs/remote/remote_bck.png
new file mode 100644
index 0000000..3e913e8
Binary files /dev/null and b/src/assets/imgs/remote/remote_bck.png differ
diff --git a/src/main.ts b/src/main.ts
index e4672a1..2e57b3d 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -2,14 +2,22 @@ import { createApp, defineComponent, ref, reactive } from 'vue'
import main from './main.vue'
import router from './router'
+import { createPinia } from 'pinia'
import ElementPlus from 'element-plus';
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
+import SliderVerify from 'slider-verify-v3'
+import 'slider-verify-v3/lib/SliderVerify.css'
import 'element-plus/dist/index.css';
import './assets/css/global.scss';
+import './assets/font/iconfont.css';
-const app = createApp(main)
+const pinia = createPinia()
+const app = createApp(main)
+
+app.use(pinia)
+app.use(SliderVerify)
app.use(router)
.use(ElementPlus) // ElementPlus 全局引入
diff --git a/src/main.vue b/src/main.vue
index a139d24..126bb12 100644
--- a/src/main.vue
+++ b/src/main.vue
@@ -1,13 +1,26 @@
-
-
+
+
+
diff --git a/src/router/index.ts b/src/router/index.ts
index 8496be6..c495753 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -1,14 +1,43 @@
import { createRouter, createWebHistory } from 'vue-router'
+import { useLoginStore } from '@/stores/user-info-store'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
+ { path: '/:pathMatch(.*)*', name: 'not-found', redirect: '/home' },
{
- path: '/',
- name: '远程管理',
- component: () => import('@/views/remote-manage/remote-manage.vue'),
- }
+ path: '/login',
+ name: '登录',
+ component: () => import('@/views/login/login.vue'),
+ },
+ {
+ path: '/',
+ redirect: '/home',
+ children: [
+ {
+ path: '/home',
+ name: '首页',
+ component: () => import('@/views/home/home.vue'),
+ },
+ {
+ path: '/remote-manage',
+ name: '远程管理',
+ component: () => import('@/views/remote-manage/remote-manage.vue'),
+ }
+ ]
+ }
]
})
+router.beforeEach((to, from, next) => {
+ const loginInfo = useLoginStore().getlogin()
+ const isLogin = loginInfo.isLogin
+ if (to.fullPath !=='/login' && !isLogin) {
+ next('/login') // 重定向登录页
+ } else {
+ // 如果用户有权限,正常进行导航
+ next()
+ }
+});
+
export default router
diff --git a/src/static-data/core.ts b/src/static-data/core.ts
new file mode 100644
index 0000000..09537ab
--- /dev/null
+++ b/src/static-data/core.ts
@@ -0,0 +1,44 @@
+import Mock from 'mockjs'
+
+var template = {
+ 'title': 'Syntax Demo',
+
+ 'string1|1-10': '★',
+ 'string2|3': 'value',
+
+ 'number1|+1': 100,
+ 'number2|1-100': 100,
+ 'number3|1-100.1-10': 1,
+ 'number4|123.1-10': 1,
+ 'number5|123.3': 1,
+ 'number6|123.10': 1.123,
+
+ 'boolean1|1': true,
+ 'boolean2|1-2': true,
+
+ 'object1|2-4': {
+ '110000': '北京市',
+ '120000': '天津市',
+ '130000': '河北省',
+ '140000': '山西省'
+ },
+ 'object2|2': {
+ '310000': '上海市',
+ '320000': '江苏省',
+ '330000': '浙江省',
+ '340000': '安徽省'
+ },
+
+ 'array1|1': ['AMD', 'CMD', 'KMD', 'UMD'],
+ 'array2|1-10': ['Mock.js'],
+ 'array3|3': ['Mock.js'],
+
+ 'function': function () {
+ return this.title
+ }
+}
+
+var data = []
+data.push(Mock.mock(template))
+data.push(Mock.mock(template))
+console.log(data)
\ No newline at end of file
diff --git a/src/stores/user-info-store.ts b/src/stores/user-info-store.ts
new file mode 100644
index 0000000..f1aac7b
--- /dev/null
+++ b/src/stores/user-info-store.ts
@@ -0,0 +1,23 @@
+// stores/counter.js
+import { defineStore } from 'pinia'
+
+export const useLoginStore = defineStore('login', {
+ state: () => {
+ return {
+ login: {
+ isLogin: false,
+ name: ''
+ } as any
+ }
+ },
+ // 也可以这样定义
+ // state: () => ({ count: 0 })
+ actions: {
+ getlogin() {
+ return this.login
+ },
+ setlogin(key: string,e: any) {
+ this.login[key] = e
+ }
+ },
+})
\ No newline at end of file
diff --git a/src/views/home/home.vue b/src/views/home/home.vue
new file mode 100644
index 0000000..47ef995
--- /dev/null
+++ b/src/views/home/home.vue
@@ -0,0 +1,14 @@
+
+
+ 首页
+
+
+
+
+
+
diff --git a/src/views/index.vue b/src/views/index.vue
new file mode 100644
index 0000000..e7d1d6c
--- /dev/null
+++ b/src/views/index.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/login/login.vue b/src/views/login/login.vue
new file mode 100644
index 0000000..029373b
--- /dev/null
+++ b/src/views/login/login.vue
@@ -0,0 +1,396 @@
+
+
+
+
+
+
+
+
+
+
+

+
+
+ 密码登录
+ 验证码登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 登录
+ 注册账号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vite.config.ts b/vite.config.ts
index b2dfd9e..48a6955 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -16,7 +16,7 @@ export default defineConfig({
css:{
preprocessorOptions:{
scss:{
- // additionalData: '@import "./src/assets/css/global.scss";' //引入scss文件
+ additionalData: '@import "./src/assets/css/variable.scss";' //引入scss文件
}
}
}