Browse Source

WIFI配置更新

lkd9698906@163.com 1 year ago
parent
commit
bc43378a0e

BIN
public/static/images/icon-wifi.png


+ 539 - 0
src/assets/iconfont/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;
+}

+ 234 - 0
src/assets/iconfont/demo_index.html

@@ -0,0 +1,234 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>iconfont Demo</title>
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
+  <link rel="stylesheet" href="demo.css">
+  <link rel="stylesheet" href="iconfont.css">
+  <script src="iconfont.js"></script>
+  <!-- jQuery -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
+  <!-- 代码高亮 -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
+  <style>
+    .main .logo {
+      margin-top: 0;
+      height: auto;
+    }
+
+    .main .logo a {
+      display: flex;
+      align-items: center;
+    }
+
+    .main .logo .sub-title {
+      margin-left: 0.5em;
+      font-size: 22px;
+      color: #fff;
+      background: linear-gradient(-45deg, #3967FF, #B500FE);
+      -webkit-background-clip: text;
+      -webkit-text-fill-color: transparent;
+    }
+  </style>
+</head>
+<body>
+  <div class="main">
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
+      <img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
+      
+    </a></h1>
+    <div class="nav-tabs">
+      <ul id="tabs" class="dib-box">
+        <li class="dib active"><span>Unicode</span></li>
+        <li class="dib"><span>Font class</span></li>
+        <li class="dib"><span>Symbol</span></li>
+      </ul>
+      
+      <a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=3974207" target="_blank" class="nav-more">查看项目</a>
+      
+    </div>
+    <div class="tab-container">
+      <div class="content unicode" style="display: block;">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe688;</span>
+                <div class="name">WIFI</div>
+                <div class="code-name">&amp;#xe688;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe8c1;</span>
+                <div class="name">WIFI</div>
+                <div class="code-name">&amp;#xe8c1;</div>
+              </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="unicode-">Unicode 引用</h2>
+          <hr>
+
+          <p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
+          <ul>
+            <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
+            <li>默认情况下不支持多色,直接添加多色图标会自动去色。</li>
+          </ul>
+          <blockquote>
+            <p>注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)</p>
+          </blockquote>
+          <p>Unicode 使用步骤如下:</p>
+          <h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
+<pre><code class="language-css"
+>@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1728618228432') format('woff2'),
+       url('iconfont.woff?t=1728618228432') format('woff'),
+       url('iconfont.ttf?t=1728618228432') format('truetype');
+}
+</code></pre>
+          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
+<pre><code class="language-css"
+>.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
+<pre>
+<code class="language-html"
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
+</code></pre>
+          <blockquote>
+            <p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+          </blockquote>
+          </div>
+      </div>
+      <div class="content font-class">
+        <ul class="icon_lists dib-box">
+          
+          <li class="dib">
+            <span class="icon iconfont iconfont-WIFI"></span>
+            <div class="name">
+              WIFI
+            </div>
+            <div class="code-name">.iconfont-WIFI
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfont-WIFIE"></span>
+            <div class="name">
+              WIFI
+            </div>
+            <div class="code-name">.iconfont-WIFIE
+            </div>
+          </li>
+          
+        </ul>
+        <div class="article markdown">
+        <h2 id="font-class-">font-class 引用</h2>
+        <hr>
+
+        <p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
+        <p>与 Unicode 使用方式相比,具有如下特点:</p>
+        <ul>
+          <li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
+          <li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
+</code></pre>
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;span class="iconfont iconfont-xxx"&gt;&lt;/span&gt;
+</code></pre>
+        <blockquote>
+          <p>"
+            iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+        </blockquote>
+      </div>
+      </div>
+      <div class="content symbol">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfont-WIFI"></use>
+                </svg>
+                <div class="name">WIFI</div>
+                <div class="code-name">#iconfont-WIFI</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfont-WIFIE"></use>
+                </svg>
+                <div class="name">WIFI</div>
+                <div class="code-name">#iconfont-WIFIE</div>
+            </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="symbol-">Symbol 引用</h2>
+          <hr>
+
+          <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
+            这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
+          <ul>
+            <li>支持多色图标了,不再受单色限制。</li>
+            <li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
+            <li>兼容性较差,支持 IE9+,及现代浏览器。</li>
+            <li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
+          </ul>
+          <p>使用步骤如下:</p>
+          <h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
+</code></pre>
+          <h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
+<pre><code class="language-html">&lt;style&gt;
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+&lt;/style&gt;
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
+&lt;/svg&gt;
+</code></pre>
+          </div>
+      </div>
+
+    </div>
+  </div>
+  <script>
+  $(document).ready(function () {
+      $('.tab-container .content:first').show()
+
+      $('#tabs li').click(function (e) {
+        var tabContent = $('.tab-container .content')
+        var index = $(this).index()
+
+        if ($(this).hasClass('active')) {
+          return
+        } else {
+          $('#tabs li').removeClass('active')
+          $(this).addClass('active')
+
+          tabContent.hide().eq(index).fadeIn()
+        }
+      })
+    })
+  </script>
+</body>
+</html>

+ 23 - 0
src/assets/iconfont/iconfont.css

@@ -0,0 +1,23 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 3974207 */
+  src: url('iconfont.woff2?t=1728618228432') format('woff2'),
+       url('iconfont.woff?t=1728618228432') format('woff'),
+       url('iconfont.ttf?t=1728618228432') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.iconfont-WIFI:before {
+  content: "\e688";
+}
+
+.iconfont-WIFIE:before {
+  content: "\e8c1";
+}
+

File diff suppressed because it is too large
+ 0 - 0
src/assets/iconfont/iconfont.js


+ 23 - 0
src/assets/iconfont/iconfont.json

@@ -0,0 +1,23 @@
+{
+  "id": "3974207",
+  "name": "Test",
+  "font_family": "iconfont",
+  "css_prefix_text": "iconfont-",
+  "description": "测试项目",
+  "glyphs": [
+    {
+      "icon_id": "39082201",
+      "name": "WIFI",
+      "font_class": "WIFI",
+      "unicode": "e688",
+      "unicode_decimal": 59016
+    },
+    {
+      "icon_id": "11372738",
+      "name": "WIFI",
+      "font_class": "WIFIE",
+      "unicode": "e8c1",
+      "unicode_decimal": 59585
+    }
+  ]
+}

BIN
src/assets/iconfont/iconfont.ttf


BIN
src/assets/iconfont/iconfont.woff


BIN
src/assets/iconfont/iconfont.woff2


+ 1 - 0
src/main.ts

@@ -1,6 +1,7 @@
 import { createApp } from 'vue'
 import './style.css'
 import App from './App.vue'
+import "./assets/iconfont/iconfont.css"
 const app = createApp(App);
 
 // 引入路由

+ 167 - 145
src/pages/login/Index.vue

@@ -1,31 +1,47 @@
 <template>
-
-
-  <div style="height: 100vh; overflow: hidden; display: flex; flex-direction: column;">
-
+  <div
+    style="
+      height: 100vh;
+      overflow: hidden;
+      display: flex;
+      flex-direction: column;
+    "
+  >
     <!-- 用户名称 -->
-    <div style="height: 100%;
-      background-image: url('static/images/bg-login.png');
-      background-repeat: no-repeat;
-      background-position-y: 0px;
-      background-size: 100%">
-
-      <div style="padding: 100px 16px 30px 32px; display: flex; 
-        justify-content:space-between; 
-        align-items:center;">
+    <div
+      style="
+        height: 100%;
+        background-image: url('static/images/bg-login.png');
+        background-repeat: no-repeat;
+        background-position-y: 0px;
+        background-size: 100%;
+      "
+    >
+      <div
+        style="
+          padding: 100px 16px 30px 32px;
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+        "
+      >
         <div>
-          <div style="color: #5C677C; height: 30px;">
+          <div style="color: #5c677c; height: 30px">
             <van-tag type="primary" size="large">欢迎登录</van-tag>
           </div>
-          <div style="font-size: 1.1rem; font-weight: bold;">
+          <div style="font-size: 1.1rem; font-weight: bold">
             <span>驼人物联网平台</span>
           </div>
         </div>
       </div>
 
-
-      <div style="margin-top: 60px;">
-        <van-form ref="formRef" show-error :show-error-message="false" @submit="onSubmit">
+      <div style="margin-top: 60px">
+        <van-form
+          ref="formRef"
+          show-error
+          :show-error-message="false"
+          @submit="onSubmit"
+        >
           <van-cell-group inset>
             <van-field
               v-model="username"
@@ -47,13 +63,15 @@
               :rules="[{ required: true, message: '请输入密码' }]"
             >
             </van-field>
-            <van-field style="align-items: center;"
+            <van-field
+              style="align-items: center"
               v-model="captchaCode"
               name="captchaCode"
               label="验证码"
               label-width="70"
               placeholder="请输入验证码"
-              :rules="[{ required: true, message: '请填写账号' }]">
+              :rules="[{ required: true, message: '请填写账号' }]"
+            >
               <template #button>
                 <van-image
                   width="100"
@@ -64,16 +82,29 @@
                 />
               </template>
             </van-field>
-            <div style="padding: 16px;">
-              <van-checkbox v-model="isRememberMe" shape="square">记住密码</van-checkbox>
+            <div style="padding: 16px">
+              <van-checkbox v-model="isRememberMe" shape="square"
+                >记住密码</van-checkbox
+              >
             </div>
           </van-cell-group>
-          <div style="margin: 16px;">
+          <div style="margin: 16px">
             <van-button
-              round block type="primary" size="large"
-              native-type="submit">登录</van-button>
+              round
+              block
+              type="primary"
+              size="large"
+              native-type="submit"
+              >登录</van-button
+            >
           </div>
-          <div style="padding: 0px 16px; display: flex; justify-content: space-between;">
+          <div
+            style="
+              padding: 0px 16px;
+              display: flex;
+              justify-content: space-between;
+            "
+          >
             <div>
               <a @click="onFindpassword">忘记密码?</a>
             </div>
@@ -83,141 +114,132 @@
           </div>
         </van-form>
       </div>
-
-
-
     </div>
-
-
-
-
-
   </div>
-
-
-
-
 </template>
 
 <script setup lang="ts">
-  import { onMounted, ref } from 'vue'
-  import { useStoreOfUserInfo } from '@/store/userInfo'
-  import { useRouter } from 'vue-router'
-  import { post, post_promise } from '@/network/axios';
-  import { showToast, type FormInstance } from 'vant';
-  // 路由
-  const router = useRouter();
-  const userInfo = useStoreOfUserInfo();
-  // 表单实例
-  const formRef = ref<FormInstance>();
-  // 用户名和验证码
-  const username = ref('')
-  const password = ref('')
-  const captchaCode = ref('')
-  const captchaKey = ref('')
-  const isRememberMe = ref(true);
-
-
-  // 验证吗
-  const captchaSrc = ref<string>('');
-    const refreshVerifycode = () => {
-    post({url: '/open/getCaptcha'}, (result: any) => {
-      console.log(result.data.captchaImg)
-      captchaSrc.value = result.data.captchaImg
-      captchaKey.value = result.data.captchaKey
-    });
-  }
-
-  // 点击了验证码
-  const onClickVerifyCode = (event: any) => {
-    console.log(event)
-    refreshVerifycode();
-  }
-
-
-  // 点击了注册
-  const onRegister = () => {
-    // 跳转到注册
-    router.replace('/register');
-  }
-
-  // 点击了忘记密码
-  const onFindpassword = () => {
-    // 跳转到注册
-    router.replace('/findpassword');
+import { onMounted, ref } from "vue";
+import { useStoreOfUserInfo } from "@/store/userInfo";
+import { useRouter } from "vue-router";
+import { post, post_promise } from "@/network/axios";
+import { showToast, type FormInstance } from "vant";
+// 路由
+const router = useRouter();
+const userInfo = useStoreOfUserInfo();
+// 表单实例
+const formRef = ref<FormInstance>();
+// 用户名和验证码
+const username = ref("");
+const password = ref("");
+const captchaCode = ref("");
+const captchaKey = ref("");
+const isRememberMe = ref(true);
+
+// 验证吗
+const captchaSrc = ref<string>("");
+const refreshVerifycode = () => {
+  post({ url: "/open/getCaptcha" }, (result: any) => {
+    console.log(result.data.captchaImg);
+    captchaSrc.value = result.data.captchaImg;
+    captchaKey.value = result.data.captchaKey;
+  });
+};
+
+// 点击了验证码
+const onClickVerifyCode = (event: any) => {
+  console.log(event);
+  refreshVerifycode();
+};
+
+// 点击了注册
+const onRegister = () => {
+  // 跳转到注册
+  router.replace("/register");
+};
+
+// 点击了忘记密码
+const onFindpassword = () => {
+  // 跳转到注册
+  router.replace("/findpassword");
+};
+
+// 生命周期
+onMounted(() => {
+  console.log("onMounted");
+  refreshVerifycode();
+  isRememberMe.value = userInfo.isRememberMe as boolean;
+  if (isRememberMe.value) {
+    username.value = userInfo.username;
+    password.value = userInfo.password as string;
   }
-  
-  // 生命周期
-  onMounted(() => {
-    console.log('onMounted');
-    refreshVerifycode();
-    isRememberMe.value = userInfo.isRememberMe as boolean;
-    if(isRememberMe.value){
-      username.value = userInfo.username
-      password.value = userInfo.password as string;
-    }
-  })
-  // 登录提交
-  const onSubmit = () => {
-    formRef.value?.validate().then(() => {
+});
+// 登录提交
+const onSubmit = () => {
+  formRef.value
+    ?.validate()
+    .then(() => {
       // 记住密码
       userInfo.$patch({
-        isRememberMe: isRememberMe.value as any
-      })
+        isRememberMe: isRememberMe.value as any,
+      });
       // 记住账号密码
-      if(isRememberMe.value){
+      if (isRememberMe.value) {
         userInfo.$patch({
           username: username.value as any,
-          password: password.value as any
-        })
+          password: password.value as any,
+        });
       }
       // 登录
-      post_promise({url: '/user/login', data: {
-        username: username.value,
-        password: password.value,
-        captchaCode: captchaCode.value,
-        captchaKey: captchaKey.value,
-      }})
-      .then((result) => {
-        console.log(result)
-        const { username, token, roleIds, mobile } = result.data;
-        userInfo.$patch({
-          mobile: mobile,
-          username: username, 
-          token: token,
-          roles: roleIds,
-          isLogin: true as any,
-          isRememberMe: isRememberMe.value as any,
-        })
-        // 是否记住密码
-        if(isRememberMe.value){
-          userInfo.$patch({
-            password: password.value as any
-          })
-        }else{
+      post_promise({
+        url: "/user/login",
+        data: {
+          username: username.value,
+          password: password.value,
+          captchaCode: captchaCode.value,
+          captchaKey: captchaKey.value,
+        },
+      }).then(
+        (result) => {
+          console.log(result);
+          const { username, token, roleIds, mobile, id } = result.data;
           userInfo.$patch({
-            password: '' as any
-          })
+            id: id,
+            mobile: mobile,
+            username: username,
+            token: token,
+            roles: roleIds,
+            isLogin: true as any,
+            isRememberMe: isRememberMe.value as any,
+          });
+          // 是否记住密码
+          if (isRememberMe.value) {
+            userInfo.$patch({
+              password: password.value as any,
+            });
+          } else {
+            userInfo.$patch({
+              password: "" as any,
+            });
+          }
+          console.log(userInfo);
+          // 跳转到首页
+          router.replace("/");
+        },
+        (result) => {
+          showToast(result);
         }
-        console.log(userInfo)
-        // 跳转到首页
-        router.replace('/');
-      },(result) => {
-        showToast(result);
-      })
-    }).catch((ex) => {
-      showToast(ex);
+      );
     })
-  }
-
-  
-
+    .catch((ex) => {
+      showToast(ex);
+    });
+};
 </script>
 
 <style scoped>
-  .van-tabbar--fixed{
-    left: auto;
-    max-width: 475px;
-  }
-
-</style>
+.van-tabbar--fixed {
+  left: auto;
+  max-width: 475px;
+}
+</style>

+ 5 - 12
src/pages/mine/Index.vue

@@ -62,32 +62,25 @@
             <van-icon name="static/images/icon-change-password.png" size="1.3rem" style="margin-right: 5px;" />
           </template>
         </van-cell>
+        <van-cell title="WIFI配置" is-link icon="notes-o" :to="'/mine/wifi'">
+          <template #icon>
+            <van-icon class-prefix="iconfont" name="WIFIE" size="1.3rem" style="margin-right: 5px;" />
+          </template>
+        </van-cell>
         <van-cell title="退出登录" icon="friends-o" clickable @click="logout">
           <template #icon>
             <van-icon name="static/images/icon-exit.png" size="1.3rem" style="margin-right: 5px;" />
           </template>
         </van-cell>
       </div>
-
-
     </div>
-
-
-    
-
-    
-
   <!-- </div> -->
-
-
-  
 </template>
 
 <script setup lang="ts">
 import { Router, useRouter } from 'vue-router'
 import { useStoreOfUserInfo } from '@/store/userInfo'
 const userInfo = useStoreOfUserInfo();
-
 const router:Router = useRouter();
 const logout = (event: any) => {
   console.log(event);

+ 264 - 0
src/pages/mine/wifi/Index.vue

@@ -0,0 +1,264 @@
+<template>
+  <div class="pages">
+    <!-- 导航 -->
+    <CusNavigation ref="cusNavigation" gobackabled title="WIFI配置">
+    </CusNavigation>
+
+    <div class="mains">
+      <div class="title">对接数据</div>
+      <div class="form">
+        <van-form @submit="onSubmit">
+          <van-cell-group inset>
+            <van-cell>
+              <van-field
+                v-model="formData.localAddress"
+                name="localAddress"
+                label="对接地址"
+                placeholder="请输入对接地址"
+                :rules="[{ required: true, message: '请填写对接地址' }]"
+              />
+            </van-cell>
+            <van-cell>
+              <van-field
+                v-model="formData.localPort"
+                name="localPort"
+                label="对接端口"
+                placeholder="请填写对接端口"
+                :rules="[{ required: true, message: '请填写对接端口' }]"
+              />
+            </van-cell>
+          </van-cell-group>
+          <div class="submit-btn">
+            <van-button round block type="primary" native-type="submit">
+              提交
+            </van-button>
+          </div>
+        </van-form>
+      </div>
+      <div class="title">
+        WIFI配置
+        <div>
+          <a @click="handleAdd" style="margin-left: 20px">添加网络</a>
+        </div>
+      </div>
+      <div class="form">
+        <div
+          class="wifi-info"
+          style=""
+          v-for="(item, index) in wifiDatas"
+          :key="index"
+        >
+          <van-icon class-prefix="iconfont" name="WIFIE" :size="46" />
+          <van-cell
+            :title="item.name"
+            :label="item.password"
+            style="margin: 0.625rem 0 0 1rem"
+          >
+            <van-button
+              plain
+              hairline
+              size="small"
+              text="编辑"
+              @click="handleEdit(item)"
+              type="primary"
+            />
+            <van-button
+              size="small"
+              plain
+              hairline
+              text="删除"
+              type="danger"
+              @click="handleDel(item)"
+              class="delete-button"
+            />
+          </van-cell>
+        </div>
+      </div>
+    </div>
+    <div
+      class="container"
+      style="overflow-y: auto; flex-grow: 1; background-color: #f7f8fa"
+    >
+      <!-- 返回顶部 -->
+      <van-back-top target=".container" right="5vw" bottom="80px" />
+    </div>
+  </div>
+  <van-action-sheet v-model:show="wifiAction" :title="wifiTitle">
+    <div class="form">
+      <van-form @submit="onWifiSubmit">
+        <van-cell-group inset>
+          <van-cell>
+            <van-field
+              v-model="wifiInfo.name"
+              name="name"
+              label="名称"
+              placeholder="请输入WIFI名称"
+              :rules="[{ required: true, message: '请输入WIFI名称' }]"
+            />
+          </van-cell>
+          <van-cell>
+            <van-field
+              v-model="wifiInfo.password"
+              name="password"
+              label="密码"
+              placeholder="请填写WIFI密码"
+              :rules="[{ required: true, message: '请正确填写WIFI密码' }, { validator, message: 'WIFI密码不得于8位' }]"
+            />
+          </van-cell>
+        </van-cell-group>
+        <div style="margin: 0.25rem 10%; width: 80%">
+          <van-button round block type="primary" native-type="submit">
+            确认
+          </van-button>
+        </div>
+      </van-form>
+    </div>
+  </van-action-sheet>
+</template>
+
+<script setup lang="ts">
+import { ref, onMounted } from "vue";
+import { CusNavigation } from "@/components";
+import { post_promise } from "@/network/axios";
+import { showToast } from "vant";
+import { showConfirmDialog } from "vant";
+import "vant/es/dialog/style";
+import { refreshCurrentRoute } from '@/router'
+import { useStoreOfUserInfo } from "@/store/userInfo";
+const userInfo = useStoreOfUserInfo();
+
+const cusNavigation = ref();
+const wifiAction = ref(false); // wifi信息弹框
+const wifiTitle = ref<string>(""); // wifi信息弹框标头
+const formData = ref({} as any); // 表单信息
+const wifiInfo = ref({} as any); // WIFI信息
+const wifiDatas = ref<Array<any>>([]); // WIFI信息列表
+const validator = (val: string | any[]) => val.length < 8 ? false : true;
+// 提交WIFI信息
+function onSubmit() {
+  console.log("提交WIFI信息....");
+  formData.value.wifi = JSON.stringify(wifiDatas.value);
+  post_promise({ url: "/userConfig/config", data: formData.value }).then((res)=>{
+    if(res.code === 0){
+      showToast({message:'WIFI信息配置成功!',
+        onClose: () => {
+          refreshCurrentRoute();
+        }
+      });
+      wifiAction.value = false;
+    }
+  });
+}
+
+// wifi修改及新增确认
+function onWifiSubmit() {
+  if (wifiInfo.value && wifiInfo.value.id) {
+    for (let i = 0, len = wifiDatas.value.length - 1; i < len; i++) {
+      if (wifiDatas.value[i].id === wifiInfo.value.id) {
+        wifiDatas.value[i] = wifiInfo;
+      }
+    }
+  } else {
+    wifiInfo.value = { ...wifiInfo.value, id: wifiDatas.value.length + 1 };
+    wifiDatas.value.push(wifiInfo.value);
+  }
+  wifiAction.value = false;
+  wifiInfo.value = {};
+}
+
+// 添加wifi方法
+function handleAdd() {
+  console.log("添加wifi方法....");
+  wifiTitle.value = "添加WIFI配置";
+  wifiAction.value = true;
+}
+
+// 编辑wifi信息
+function handleEdit(record?: any) {
+  console.log("编辑WFIFI方法...", record);
+  wifiInfo.value = record;
+  wifiTitle.value = "编辑WIFI配置";
+  wifiAction.value = true;
+}
+
+function handleDel(record?: any) {
+  showConfirmDialog({
+    title: "提示",
+    message: "是否删除" + record.name + "?",
+  })
+    .then(() => {
+      wifiDatas.value = wifiDatas.value.filter(
+        (obj: any) => obj.id != record.id
+      );
+    })
+    .catch(() => {
+      console.log("删除WFIFI方法关闭...");
+    });
+}
+
+// 生命周期
+onMounted(() => {
+  getWifiInfo(); // 获取当前医院配置
+});
+
+// 获取医院配置信息
+function getWifiInfo() {
+  if (userInfo && userInfo.id) {
+    post_promise({
+      url: "/userConfig/detailById",
+      data: {
+        id: userInfo.id,
+      },
+    })
+      .then((result) => {
+        console.log("result::::", result);
+        if (result && result.data) {
+          formData.value = result.data;
+          wifiDatas.value = JSON.parse(result.data.wifi);
+        }
+      })
+      .catch((err) => {
+        console.log("err:::", err);
+      });
+  }
+}
+</script>
+<style type="less">
+.pages {
+  display: flex;
+  flex-direction: column;
+  height: 100vh;
+}
+.mains {
+  height: 100vh;
+  background-color: #f7f8fa;
+  .title {
+    display: flex;
+    justify-content: space-between;
+    margin: 10px 5%;
+    color: #969799;
+  }
+  .form {
+    width: 95%;
+    margin-left: 2%;
+    background-color: #fff;
+    border-radius: 5px;
+    .submit-btn {
+      position: fixed;
+      bottom: 5px;
+      width: 95%;
+    }
+
+    .wifi-info {
+      height: 80px;
+      line-height: 80px;
+      border-bottom: solid 1px #f5f6f7;
+      display: flex;
+      margin-left: 1.25rem;
+      button {
+        margin-right: 8px;
+      }
+    }
+  }
+}
+</style>

+ 4 - 0
src/router/index.ts

@@ -121,6 +121,10 @@ const routes: Array<RouteRecordRaw> = [
   {
     path: '/demo',
     component: () => import('@/pages/demo/Index3.vue')
+  },
+  {
+    path: '/mine/wifi',
+    component: () => import('@/pages/mine/wifi/Index.vue')
   }
 ]
 

+ 1 - 0
src/store/userInfo.ts

@@ -4,6 +4,7 @@ import { UserEntity } from '@/api/model'
 export const useStoreOfUserInfo = defineStore('userInfo', {
   state: () => {
     return <UserEntity>{
+      id:'',
       mobile: '',
       username: '',
       password: '',

+ 1 - 1
vite.config.ts

@@ -25,7 +25,7 @@ export default defineConfig({
     open: true,
     proxy: {
       '/forward-service': {
-        target: 'http://192.168.103.33:8585/',
+        target: 'http://192.168.103.172:8585/',
         // target: 'http://192.168.100.115:8585/', // 生产环境
         changeOrigin: true,
         rewrite: (path) => {

Some files were not shown because too many files changed in this diff