Browse Source

去除项目中的一些敏感信息

hongrunxia 3 tháng trước cách đây
mục cha
commit
3fceb7368d

+ 2 - 2
README.md

@@ -1,6 +1,6 @@
-## 省局密闭采空区监测系统
+## 密闭采空区监测系统
 
-省局密闭采空区监测系统前端代码仓库
+密闭采空区监测系统前端代码仓库
 
 ### 前言
 

+ 13 - 14
build/vite/plugin/pwa.ts

@@ -20,22 +20,22 @@ export function configPwaPlugin(isBuild: boolean): PluginOption | PluginOption[]
       short_name: 'Jeecg',
       theme_color: '#ffffff',
       icons: [
-        {
-          src: '/logo.png',
-          sizes: '192x192',
-          type: 'image/png',
-        },
-        {
-          src: '/logo.png',
-          sizes: '512x512',
-          type: 'image/png',
-        },
+        // {
+        //   src: '/logo.png',
+        //   sizes: '192x192',
+        //   type: 'image/png',
+        // },
+        // {
+        //   src: '/logo.png',
+        //   sizes: '512x512',
+        //   type: 'image/png',
+        // },
       ],
     },
     workbox: {
       maximumFileSizeToCacheInBytes: 10 * 1024 * 1024, // 10MB
       cleanupOutdatedCaches: true,
-      
+
       // 预缓存:只缓存关键资源,不预缓存路由组件 CSS/JS(避免登录页加载全部资源)
       globPatterns: [
         'index.html', // 必须预缓存(避免 non-precached-url 错误)
@@ -46,10 +46,10 @@ export function configPwaPlugin(isBuild: boolean): PluginOption | PluginOption[]
         'js/index-*.js',
         'js/*-vendor-*.js',
       ],
-      
+
       // 不使用导航回退功能
       navigateFallback: undefined,
-      
+
       // 运行时缓存:按需加载的资源
       runtimeCaching: [
         {
@@ -136,4 +136,3 @@ export function configPwaPlugin(isBuild: boolean): PluginOption | PluginOption[]
 
   return VitePWA(pwaOptions);
 }
-

+ 1 - 1
index.html

@@ -7,7 +7,7 @@
     <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" />
 
     <title><%= title %></title>
-    <link rel="icon" href="<%= basePublicPath %>/logo.png" />
+    <!-- <link rel="icon" href="<%= basePublicPath %>/logo.png" /> -->
     <!-- 全局配置 -->
     <script>
       window._CONFIG = {};

+ 67 - 67
src/components/Application/src/AppLogo.vue

@@ -4,91 +4,91 @@
 -->
 <template>
   <div class="anticon" :class="getAppLogoClass" @click="goHome">
-    <img src="../../../assets/images/logo.png" />
+    <!-- <img src="../../../assets/images/logo.png" /> -->
     <div class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="showTitle">
       {{ title }}
     </div>
   </div>
 </template>
 <script lang="ts" setup>
-  import { computed, unref } from 'vue';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useGo } from '/@/hooks/web/usePage';
-  import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { PageEnum } from '/@/enums/pageEnum';
-  import { useUserStore } from '/@/store/modules/user';
+import { computed, unref } from 'vue';
+import { useGlobSetting } from '/@/hooks/setting';
+import { useGo } from '/@/hooks/web/usePage';
+import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
+import { useDesign } from '/@/hooks/web/useDesign';
+import { PageEnum } from '/@/enums/pageEnum';
+import { useUserStore } from '/@/store/modules/user';
 
-  const props = defineProps({
-    /**
-     * The theme of the current parent component
-     */
-    theme: { type: String, validator: (v: string) => ['light', 'dark'].includes(v) },
-    /**
-     * Whether to show title
-     */
-    showTitle: { type: Boolean, default: true },
-    /**
-     * The title is also displayed when the menu is collapsed
-     */
-    alwaysShowTitle: { type: Boolean },
-  });
+const props = defineProps({
+  /**
+   * The theme of the current parent component
+   */
+  theme: { type: String, validator: (v: string) => ['light', 'dark'].includes(v) },
+  /**
+   * Whether to show title
+   */
+  showTitle: { type: Boolean, default: true },
+  /**
+   * The title is also displayed when the menu is collapsed
+   */
+  alwaysShowTitle: { type: Boolean },
+});
 
-  const { prefixCls } = useDesign('app-logo');
-  const { getCollapsedShowTitle } = useMenuSetting();
-  const userStore = useUserStore();
-  const { title } = useGlobSetting();
+const { prefixCls } = useDesign('app-logo');
+const { getCollapsedShowTitle } = useMenuSetting();
+const userStore = useUserStore();
+const { title } = useGlobSetting();
 
-  const go = useGo();
+const go = useGo();
 
-  const getAppLogoClass = computed(() => [prefixCls, props.theme, { 'collapsed-show-title': unref(getCollapsedShowTitle) }]);
+const getAppLogoClass = computed(() => [prefixCls, props.theme, { 'collapsed-show-title': unref(getCollapsedShowTitle) }]);
 
-  const getTitleClass = computed(() => [
-    `${prefixCls}__title`,
-    {
-      'xs:opacity-0': !props.alwaysShowTitle,
-    },
-  ]);
+const getTitleClass = computed(() => [
+  `${prefixCls}__title`,
+  {
+    'xs:opacity-0': !props.alwaysShowTitle,
+  },
+]);
 
-  function goHome() {
-    go(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
-  }
+function goHome() {
+  go(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
+}
 </script>
 <style lang="less" scoped>
-  @prefix-cls: ~'@{namespace}-app-logo';
+@prefix-cls: ~'@{namespace}-app-logo';
 
-  .@{prefix-cls} {
-    display: flex;
-    align-items: center;
-    padding-left: 7px;
-    cursor: pointer;
-    transition: all 0.2s ease;
-    //左侧菜单模式和左侧菜单混合模式加渐变背景色
-    // &.jeecg-layout-mix-sider-logo,
-    // &.jeecg-layout-menu-logo {
-    //   background: @sider-logo-bg-color;
-    // }
-    // &.light {
-    //   border-bottom: 1px solid @border-color-base;
-    // }
+.@{prefix-cls} {
+  display: flex;
+  align-items: center;
+  padding-left: 7px;
+  cursor: pointer;
+  transition: all 0.2s ease;
+  //左侧菜单模式和左侧菜单混合模式加渐变背景色
+  // &.jeecg-layout-mix-sider-logo,
+  // &.jeecg-layout-menu-logo {
+  //   background: @sider-logo-bg-color;
+  // }
+  // &.light {
+  //   border-bottom: 1px solid @border-color-base;
+  // }
 
-    &.collapsed-show-title {
-      padding-left: 20px;
-    }
+  &.collapsed-show-title {
+    padding-left: 20px;
+  }
 
-    &.light &__title {
-      color: @primary-color;
-    }
+  &.light &__title {
+    color: @primary-color;
+  }
 
-    &.dark &__title {
-      color: @white;
-    }
+  &.dark &__title {
+    color: @white;
+  }
 
-    &__title {
-      font-size: 18px;
-      font-weight: 600;
-      transition: all 0.5s;
-      line-height: normal;
-    }
+  &__title {
+    font-size: 18px;
+    font-weight: 600;
+    transition: all 0.5s;
+    line-height: normal;
   }
+}
 </style>

+ 24 - 18
src/views/analysis/warningAnalysis/airLeakStatus/index.vue

@@ -41,16 +41,10 @@
     <a-table></a-table>
   </a-modal>
   <!-- 弹窗组件 -->
-  <a-modal
-    style="height: 400px"
-    v-model:visible="visibleresolveModal"
-    :width="600"
-    centered
-    title="密闭漏风处理情况"
-    @ok="handleOkEdit"
-    @cancel="handleCancelEdit"
-  >
-    <a-textarea style="width: 90%; margin-left: 20px; margin-right: 20px" v-model:value="resolveValue" placeholder="请输入解决情况" :rows="4" />
+  <a-modal style="height: 400px" v-model:visible="visibleresolveModal" :width="600" centered title="密闭漏风处理情况"
+    @ok="handleOkEdit" @cancel="handleCancelEdit">
+    <a-textarea style="width: 90%; margin-left: 20px; margin-right: 20px" v-model:value="resolveValue"
+      placeholder="请输入解决情况" :rows="4" />
   </a-modal>
 </template>
 
@@ -324,22 +318,34 @@ onMounted(() => {
 </script>
 
 <style lang="less" scoped>
+// .board-info {
+//   display: flex;
+//   padding: 10px;
+//   background-color: @white;
+//   // margin: 0 10px;
+//   margin-bottom: 5px;
+//   gap: 10px;
+//   box-sizing: border-box;
+// }
+// .board-item {
+//   flex: 1;
+//   box-sizing: border-box;
+// }
 .board-info {
+  width: 100%;
   display: flex;
-  padding: 10px;
-  background-color: @white;
-  // margin: 0 10px;
-  margin-bottom: 5px;
-  gap: 10px;
-  box-sizing: border-box;
+  flex-wrap: wrap;
+  margin-bottom: 8px;
 }
+
 .board-item {
-  flex: 1;
-  box-sizing: border-box;
+  margin-right: 80px;
 }
+
 :deep(.jeecg-basic-table-form-container .ant-form) {
   border: none !important;
 }
+
 :where(.css-dev-only-do-not-override-x9w3vz).ant-form-item .ant-form-item-label {
   margin-top: 10px !important;
 }

+ 29 - 30
src/views/analysis/warningAnalysis/autoFireAnalysis/index.vue

@@ -4,15 +4,8 @@
     <Tabs v-model:activeKey="activeTab" type="line" class="common-page-tabs">
       <TabPane tab="实时监测" key="realtime">
         <div class="board-info">
-          <MiniBoard
-            :key="index"
-            v-for="(item, index) in boardData"
-            type="A"
-            :label="item.label"
-            :value="item.value"
-            layout="label-top"
-            class="board-item"
-          />
+          <MiniBoard :key="index" v-for="(item, index) in boardData" type="A" :label="item.label" :value="item.value"
+            layout="label-top" class="board-item" />
         </div>
         <!-- 实时数据表格 -->
         <BasicTable @register="registerTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
@@ -41,16 +34,10 @@
       </TabPane>
     </Tabs>
     <!-- 弹窗组件 -->
-    <a-modal
-      style="height: 400px"
-      v-model:visible="visibleresolveModal"
-      :width="600"
-      centered
-      title="密闭漏风处理情况"
-      @ok="handleOkEdit()"
-      @cancel="handleCancelEdit"
-    >
-      <a-textarea style="width: 90%; margin-left: 20px; margin-right: 20px" v-model:value="resolveValue" placeholder="请输入解决情况" :rows="4" />
+    <a-modal style="height: 400px" v-model:visible="visibleresolveModal" :width="600" centered title="密闭漏风处理情况"
+      @ok="handleOkEdit()" @cancel="handleCancelEdit">
+      <a-textarea style="width: 90%; margin-left: 20px; margin-right: 20px" v-model:value="resolveValue"
+        placeholder="请输入解决情况" :rows="4" />
     </a-modal>
   </div>
 </template>
@@ -305,20 +292,32 @@ onMounted(() => {
 </script>
 
 <style lang="less" scoped>
+// .board-info {
+//   display: grid;
+//   grid-template-columns: repeat(5, auto);
+//   /* 3列:改5则为5列 */
+//   gap: auto;
+//   justify-content: start;
+//   flex-wrap: wrap;
+//   box-sizing: border-box;
+//   background-color: @white;
+//   padding: 10px;
+//   gap: 100px;
+//   // margin: 0 10px;
+//   margin-bottom: 8px;
+// }
+
+// .board-item {
+//   box-sizing: border-box;
+// }
 .board-info {
-  display: grid;
-  grid-template-columns: repeat(5, auto); /* 3列:改5则为5列 */
-  gap: auto;
-  justify-content: start;
+  width: 100%;
+  display: flex;
   flex-wrap: wrap;
-  box-sizing: border-box;
-  background-color: @white;
-  padding: 10px;
-  gap: 100px;
-  // margin: 0 10px;
-  margin-bottom: 5px;
+  margin-bottom: 8px;
 }
+
 .board-item {
-  box-sizing: border-box;
+  margin-right: 80px;
 }
 </style>

+ 27 - 30
src/views/analysis/warningAnalysis/fireAreaJudgeAnalysis/index.vue

@@ -4,15 +4,8 @@
   <Tabs v-model:activeKey="activeTab" type="line" class="common-page-tabs">
     <TabPane tab="实时监测" key="realtime">
       <div class="board-info">
-        <MiniBoard
-          :key="index"
-          v-for="(item, index) in boardData"
-          type="A"
-          :label="item.label"
-          :value="item.value"
-          layout="label-top"
-          class="board-item"
-        />
+        <MiniBoard :key="index" v-for="(item, index) in boardData" type="A" :label="item.label" :value="item.value"
+          layout="label-top" class="board-item" />
       </div>
       <!-- 实时数据表格 -->
       <BasicTable @register="registerTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
@@ -41,16 +34,10 @@
     </TabPane>
   </Tabs>
   <!-- 弹窗组件 -->
-  <a-modal
-    style="height: 400px"
-    v-model:visible="visibleresolveModal"
-    :width="600"
-    centered
-    title="密闭漏风处理情况"
-    @ok="handleOkEdit()"
-    @cancel="handleCancelEdit"
-  >
-    <a-textarea style="width: 90%; margin-left: 20px; margin-right: 20px" v-model:value="resolveValue" placeholder="请输入解决情况" :rows="4" />
+  <a-modal style="height: 400px" v-model:visible="visibleresolveModal" :width="600" centered title="密闭漏风处理情况"
+    @ok="handleOkEdit()" @cancel="handleCancelEdit">
+    <a-textarea style="width: 90%; margin-left: 20px; margin-right: 20px" v-model:value="resolveValue"
+      placeholder="请输入解决情况" :rows="4" />
   </a-modal>
 </template>
 
@@ -293,20 +280,30 @@ onMounted(() => {
 </script>
 
 <style lang="less" scoped>
+// .board-info {
+//   display: grid;
+//   grid-template-columns: repeat(5, auto); /* 3列:改5则为5列 */
+//   gap: auto;
+//   justify-content: start;
+//   flex-wrap: wrap;
+//   box-sizing: border-box;
+//   background-color: @white;
+//   padding: 10px;
+//   gap: 100px;
+//   // margin: 0 10px;
+//   margin-bottom: 5px;
+// }
+// .board-item {
+//   box-sizing: border-box;
+// }
 .board-info {
-  display: grid;
-  grid-template-columns: repeat(5, auto); /* 3列:改5则为5列 */
-  gap: auto;
-  justify-content: start;
+  width: 100%;
+  display: flex;
   flex-wrap: wrap;
-  box-sizing: border-box;
-  background-color: @white;
-  padding: 10px;
-  gap: 100px;
-  // margin: 0 10px;
-  margin-bottom: 5px;
+  margin-bottom: 8px;
 }
+
 .board-item {
-  box-sizing: border-box;
+  margin-right: 80px;
 }
 </style>

+ 25 - 28
src/views/analysis/warningAnalysis/overlimitAlarm/index.vue

@@ -4,15 +4,8 @@
   <Tabs v-model:activeKey="activeTab" type="line" class="common-page-tabs">
     <TabPane tab="实时监测" key="realtime">
       <div class="board-info">
-        <MiniBoard
-          :key="index"
-          v-for="(item, index) in boardData"
-          type="A"
-          :label="item.label"
-          :value="item.value"
-          layout="label-top"
-          class="board-item"
-        />
+        <MiniBoard :key="index" v-for="(item, index) in boardData" type="A" :label="item.label" :value="item.value"
+          layout="label-top" class="board-item" />
       </div>
       <!-- 实时数据表格 -->
       <BasicTable @register="registerTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
@@ -41,14 +34,8 @@
     </TabPane>
   </Tabs>
   <!-- 弹窗组件 -->
-  <a-modal
-    style="top: 30%; left: 170px"
-    v-model:visible="visibleModal"
-    :width="450"
-    title="实时监测数据"
-    @ok="handleOkEdit"
-    @cancel="handleCancelEdit"
-  >
+  <a-modal style="top: 30%; left: 170px" v-model:visible="visibleModal" :width="450" title="实时监测数据" @ok="handleOkEdit"
+    @cancel="handleCancelEdit">
     <a-table></a-table>
   </a-modal>
 </template>
@@ -303,20 +290,30 @@ onMounted(() => {
 </script>
 
 <style lang="less" scoped>
+// .board-info {
+//   display: grid;
+//   grid-template-columns: repeat(5, auto); /* 3列:改5则为5列 */
+//   gap: auto;
+//   justify-content: start;
+//   flex-wrap: wrap;
+//   box-sizing: border-box;
+//   background-color: @white;
+//   padding: 10px;
+//   gap: 100px;
+//   // margin: 0 10px;
+//   margin-bottom: 5px;
+// }
+// .board-item {
+//   box-sizing: border-box;
+// }
 .board-info {
-  display: grid;
-  grid-template-columns: repeat(5, auto); /* 3列:改5则为5列 */
-  gap: auto;
-  justify-content: start;
+  width: 100%;
+  display: flex;
   flex-wrap: wrap;
-  box-sizing: border-box;
-  background-color: @white;
-  padding: 10px;
-  gap: 100px;
-  // margin: 0 10px;
-  margin-bottom: 5px;
+  margin-bottom: 8px;
 }
+
 .board-item {
-  box-sizing: border-box;
+  margin-right: 80px;
 }
 </style>

+ 13 - 38
src/views/analysis/warningAnalysis/pressureDiffAnalysis/index.vue

@@ -4,15 +4,8 @@
   <Tabs v-model:activeKey="activeTab" type="line" class="common-page-tabs">
     <TabPane tab="实时监测" key="realtime">
       <div class="board-info">
-        <MiniBoard
-          :key="index"
-          v-for="(item, index) in boardData"
-          type="A"
-          :label="item.label"
-          :value="item.value"
-          layout="label-top"
-          class="board-item"
-        />
+        <MiniBoard :key="index" v-for="(item, index) in boardData" type="A" :label="item.label" :value="item.value"
+          layout="label-top" class="board-item" />
       </div>
       <!-- 实时数据表格 -->
       <BasicTable @register="registerTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
@@ -45,27 +38,15 @@
     </TabPane>
   </Tabs>
   <!-- 弹窗组件 -->
-  <a-modal
-    style="top: 30%; left: 170px"
-    v-model:visible="visibleModal"
-    :width="450"
-    title="实时监测数据"
-    @ok="handleOkEdit"
-    @cancel="handleCancelEdit"
-  >
+  <a-modal style="top: 30%; left: 170px" v-model:visible="visibleModal" :width="450" title="实时监测数据" @ok="handleOkEdit"
+    @cancel="handleCancelEdit">
     <a-table></a-table>
   </a-modal>
   <!-- 弹窗组件 -->
-  <a-modal
-    style="height: 400px"
-    v-model:visible="visibleresolveModal"
-    :width="600"
-    centered
-    title="密闭漏风处理情况"
-    @ok="handleOkEdit()"
-    @cancel="handleCancelEdit"
-  >
-    <a-textarea style="width: 90%; margin-left: 20px; margin-right: 20px" v-model:value="resolveValue" placeholder="请输入解决情况" :rows="4" />
+  <a-modal style="height: 400px" v-model:visible="visibleresolveModal" :width="600" centered title="密闭漏风处理情况"
+    @ok="handleOkEdit()" @cancel="handleCancelEdit">
+    <a-textarea style="width: 90%; margin-left: 20px; margin-right: 20px" v-model:value="resolveValue"
+      placeholder="请输入解决情况" :rows="4" />
   </a-modal>
 </template>
 
@@ -321,19 +302,13 @@ onMounted(() => {
 
 <style lang="less" scoped>
 .board-info {
-  display: grid;
-  grid-template-columns: repeat(5, auto); /* 3列:改5则为5列 */
-  gap: auto;
-  justify-content: start;
+  width: 100%;
+  display: flex;
   flex-wrap: wrap;
-  box-sizing: border-box;
-  background-color: @white;
-  padding: 10px;
-  gap: 100px;
-  // margin: 0 10px;
-  margin-bottom: 5px;
+  margin-bottom: 8px;
 }
+
 .board-item {
-  box-sizing: border-box;
+  margin-right: 80px;
 }
 </style>

+ 25 - 28
src/views/analysis/warningAnalysis/sealRiskJudgeAnalysis/index.vue

@@ -4,15 +4,8 @@
   <Tabs v-model:activeKey="activeTab" type="line" class="common-page-tabs">
     <TabPane tab="实时监测" key="realtime">
       <div class="board-info">
-        <MiniBoard
-          :key="index"
-          v-for="(item, index) in boardData"
-          type="A"
-          :label="item.label"
-          :value="item.value"
-          layout="label-top"
-          class="board-item"
-        />
+        <MiniBoard :key="index" v-for="(item, index) in boardData" type="A" :label="item.label" :value="item.value"
+          layout="label-top" class="board-item" />
       </div>
       <!-- 实时数据表格 -->
       <BasicTable @register="registerTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
@@ -43,14 +36,8 @@
     </TabPane>
   </Tabs>
   <!-- 弹窗组件 -->
-  <a-modal
-    style="top: 30%; left: 170px"
-    v-model:visible="visibleModal"
-    :width="450"
-    title="实时监测数据"
-    @ok="handleOkEdit"
-    @cancel="handleCancelEdit"
-  >
+  <a-modal style="top: 30%; left: 170px" v-model:visible="visibleModal" :width="450" title="实时监测数据" @ok="handleOkEdit"
+    @cancel="handleCancelEdit">
     <a-table></a-table>
   </a-modal>
 </template>
@@ -306,20 +293,30 @@ onMounted(() => {
 </script>
 
 <style lang="less" scoped>
+// .board-info {
+//   display: grid;
+//   grid-template-columns: repeat(5, auto); /* 3列:改5则为5列 */
+//   gap: auto;
+//   justify-content: start;
+//   flex-wrap: wrap;
+//   box-sizing: border-box;
+//   background-color: @white;
+//   padding: 10px;
+//   gap: 100px;
+//   // margin: 0 10px;
+//   margin-bottom: 5px;
+// }
+// .board-item {
+//   box-sizing: border-box;
+// }
 .board-info {
-  display: grid;
-  grid-template-columns: repeat(5, auto); /* 3列:改5则为5列 */
-  gap: auto;
-  justify-content: start;
+  width: 100%;
+  display: flex;
   flex-wrap: wrap;
-  box-sizing: border-box;
-  background-color: @white;
-  padding: 10px;
-  gap: 100px;
-  // margin: 0 10px;
-  margin-bottom: 5px;
+  margin-bottom: 8px;
 }
+
 .board-item {
-  box-sizing: border-box;
+  margin-right: 80px;
 }
 </style>

+ 1 - 1
src/views/dashboard/SealedGoaf/index.vue

@@ -15,7 +15,7 @@ import { getCoalSeamFireNum, getMineProductionStatusNum, getOverLimitNum, getGoa
 import ModulePrimary from '/@/components/Configurable/ModulePrimary.vue';
 import { useGlobSetting } from '/@/hooks/setting';
 
-const { title = '省局采空区密闭监测与分析系统' } = useGlobSetting();
+const { title = '采空区密闭监测与分析系统' } = useGlobSetting();
 const { data, updateData } = useInitPage(title);
 
 const cfgs = computed(() => configs.value);

+ 1 - 1
src/views/demo/charts/china.json

@@ -654,7 +654,7 @@
       "properties": {
         "id": "610000",
         "cp": [108.948024, 34.263161],
-        "name": "陕西",
+        "name": "XX",
         "childNum": 1
       },
       "geometry": {

+ 1 - 1
src/views/demo/charts/data.ts

@@ -105,7 +105,7 @@ export const mapData: any = [
     tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
   },
   {
-    name: '陕西',
+    name: 'XX',
     value: Math.round(Math.random() * 1000),
     tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)],
   },

+ 68 - 77
src/views/demo/comp/qrcode/index.vue

@@ -10,108 +10,99 @@
       </CollapseContainer>
 
       <CollapseContainer title="配置样式示例" class="text-center mb-6 qrcode-demo-item">
-        <QrCode
-          :value="qrCodeUrl"
-          :options="{
-            color: { dark: '#55D187' },
-          }"
-        />
+        <QrCode :value="qrCodeUrl" :options="{
+          color: { dark: '#55D187' },
+        }" />
       </CollapseContainer>
-
+      <!-- 
       <CollapseContainer title="本地logo示例" class="text-center mb-6 qrcode-demo-item">
         <QrCode :value="qrCodeUrl" :logo="LogoImg" />
-      </CollapseContainer>
+      </CollapseContainer> -->
 
-      <CollapseContainer title="在线logo示例" class="text-center mb-6 qrcode-demo-item">
-        <QrCode
-          :value="qrCodeUrl"
-          logo="http://jeecg.com/images/logo.png"
-          :options="{
-            color: { dark: '#55D187' },
-          }"
-        />
-      </CollapseContainer>
+      <!-- <CollapseContainer title="在线logo示例" class="text-center mb-6 qrcode-demo-item">
+        <QrCode :value="qrCodeUrl" logo="http://jeecg.com/images/logo.png" :options="{
+          color: { dark: '#55D187' },
+        }" />
+      </CollapseContainer> -->
 
       <CollapseContainer title="logo配置示例" class="text-center mb-6 qrcode-demo-item">
-        <QrCode
-          :value="qrCodeUrl"
-          :logo="{
-            src: 'http://jeecg.com/images/logo.png',
-            logoSize: 0.2,
-            borderSize: 0.05,
-            borderRadius: 50,
-            bgColor: 'blue',
-          }"
-        />
+        <QrCode :value="qrCodeUrl" :logo="{
+          src: 'http://jeecg.com/images/logo.png',
+          logoSize: 0.2,
+          borderSize: 0.05,
+          borderRadius: 50,
+          bgColor: 'blue',
+        }" />
       </CollapseContainer>
 
-      <CollapseContainer title="下载示例" class="text-center qrcode-demo-item">
+      <!-- <CollapseContainer title="下载示例" class="text-center qrcode-demo-item">
         <QrCode :value="qrCodeUrl" ref="qrRef" :logo="LogoImg" />
         <a-button class="mb-2" type="primary" @click="download"> 下载 </a-button>
         <div class="msg"> (在线logo会导致图片跨域,需要下载图片需要自行解决跨域问题) </div>
-      </CollapseContainer>
+      </CollapseContainer> -->
 
       <CollapseContainer title="配置大小示例" class="text-center qrcode-demo-item">
         <QrCode :value="qrCodeUrl" :width="300" />
       </CollapseContainer>
 
-      <CollapseContainer title="扩展绘制示例" class="text-center qrcode-demo-item">
-        <QrCode :value="qrCodeUrl" :width="200" :options="{ margin: 5 }" ref="qrDiyRef" :logo="LogoImg" @done="onQrcodeDone" />
+      <!-- <CollapseContainer title="扩展绘制示例" class="text-center qrcode-demo-item">
+        <QrCode :value="qrCodeUrl" :width="200" :options="{ margin: 5 }" ref="qrDiyRef" :logo="LogoImg"
+          @done="onQrcodeDone" />
         <a-button class="mb-2" type="primary" @click="downloadDiy"> 下载 </a-button>
         <div class="msg"> 要进行扩展绘制则不能将tag设为img </div>
-      </CollapseContainer>
+      </CollapseContainer> -->
     </div>
   </PageWrapper>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, unref } from 'vue';
-  import { QrCode, QrCodeActionType } from '/@/components/Qrcode/index';
-  import LogoImg from '/@/assets/images/logo.png';
-  import { CollapseContainer } from '/@/components/Container/index';
-  import { PageWrapper } from '/@/components/Page';
+import { defineComponent, ref, unref } from 'vue';
+import { QrCode, QrCodeActionType } from '/@/components/Qrcode/index';
+// import LogoImg from '/@/assets/images/logo.png';
+import { CollapseContainer } from '/@/components/Container/index';
+import { PageWrapper } from '/@/components/Page';
 
-  const qrCodeUrl = 'https://www.vvbin.cn';
-  export default defineComponent({
-    components: { CollapseContainer, QrCode, PageWrapper },
-    setup() {
-      const qrRef = ref<Nullable<QrCodeActionType>>(null);
-      const qrDiyRef = ref<Nullable<QrCodeActionType>>(null);
-      function download() {
-        const qrEl = unref(qrRef);
-        if (!qrEl) return;
-        qrEl.download('文件名');
-      }
-      function downloadDiy() {
-        const qrEl = unref(qrDiyRef);
-        if (!qrEl) return;
-        qrEl.download('Qrcode');
-      }
+const qrCodeUrl = 'https://www.vvbin.cn';
+export default defineComponent({
+  components: { CollapseContainer, QrCode, PageWrapper },
+  setup() {
+    const qrRef = ref<Nullable<QrCodeActionType>>(null);
+    const qrDiyRef = ref<Nullable<QrCodeActionType>>(null);
+    function download() {
+      const qrEl = unref(qrRef);
+      if (!qrEl) return;
+      qrEl.download('文件名');
+    }
+    function downloadDiy() {
+      const qrEl = unref(qrDiyRef);
+      if (!qrEl) return;
+      qrEl.download('Qrcode');
+    }
 
-      function onQrcodeDone({ ctx }: any) {
-        if (ctx instanceof CanvasRenderingContext2D) {
-          // 额外绘制
-          ctx.fillStyle = 'black';
-          ctx.font = '16px "微软雅黑"';
-          ctx.textBaseline = 'bottom';
-          ctx.textAlign = 'center';
-          ctx.fillText('你帅你先扫', 100, 195, 200);
-        }
+    function onQrcodeDone({ ctx }: any) {
+      if (ctx instanceof CanvasRenderingContext2D) {
+        // 额外绘制
+        ctx.fillStyle = 'black';
+        ctx.font = '16px "微软雅黑"';
+        ctx.textBaseline = 'bottom';
+        ctx.textAlign = 'center';
+        ctx.fillText('你帅你先扫', 100, 195, 200);
       }
-      return {
-        onQrcodeDone,
-        qrCodeUrl,
-        LogoImg,
-        download,
-        downloadDiy,
-        qrRef,
-        qrDiyRef,
-      };
-    },
-  });
+    }
+    return {
+      onQrcodeDone,
+      qrCodeUrl,
+      // LogoImg,
+      download,
+      downloadDiy,
+      qrRef,
+      qrDiyRef,
+    };
+  },
+});
 </script>
 <style scoped>
-  .qrcode-demo-item {
-    width: 30%;
-    margin-right: 1%;
-  }
+.qrcode-demo-item {
+  width: 30%;
+  margin-right: 1%;
+}
 </style>

+ 193 - 189
src/views/sys/login/TokenLoginPage.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-loading">
     <div class="app-loading-wrap">
-      <img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo" />
+      <!-- <img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo" /> -->
       <div class="app-loading-dots">
         <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
       </div>
@@ -11,204 +11,208 @@
 </template>
 
 <script lang="ts">
-  /**
-   * 地址中携带token,跳转至此页面进行登录操作
-   */
-  import { useRoute, useRouter } from 'vue-router';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useUserStore } from '/@/store/modules/user';
-  import { useI18n } from '/@/hooks/web/useI18n';
-
-  export default {
-    name: 'TokenLogin',
-    setup() {
-      const route = useRoute();
-      let router = useRouter();
-      const { createMessage, notification } = useMessage();
-      const { t } = useI18n();
-      const routeQuery: any = route.query;
-      if (!routeQuery) {
-        createMessage.warning('参数无效');
-      }
+/**
+ * 地址中携带token,跳转至此页面进行登录操作
+ */
+import { useRoute, useRouter } from 'vue-router';
+import { useMessage } from '/@/hooks/web/useMessage';
+import { useUserStore } from '/@/store/modules/user';
+import { useI18n } from '/@/hooks/web/useI18n';
+
+export default {
+  name: 'TokenLogin',
+  setup() {
+    const route = useRoute();
+    let router = useRouter();
+    const { createMessage, notification } = useMessage();
+    const { t } = useI18n();
+    const routeQuery: any = route.query;
+    if (!routeQuery) {
+      createMessage.warning('参数无效');
+    }
 
-      const token = routeQuery['loginToken'];
-      if (!token) {
-        createMessage.warning('token无效');
+    const token = routeQuery['loginToken'];
+    if (!token) {
+      createMessage.warning('token无效');
+    }
+    const userStore = useUserStore();
+    userStore.ThirdLogin({ token, thirdType: 'email', goHome: false }).then((res) => {
+      console.log('res====>doThirdLogin', res);
+      if (res && res.userInfo) {
+        requestSuccess(res);
+      } else {
+        requestFailed(res);
       }
-      const userStore = useUserStore();
-      userStore.ThirdLogin({ token, thirdType: 'email', goHome: false }).then((res) => {
-        console.log('res====>doThirdLogin', res);
-        if (res && res.userInfo) {
-          requestSuccess(res);
+    });
+
+    function requestFailed(err) {
+      notification.error({
+        message: '登录失败',
+        description: ((err.response || {}).data || {}).message || err.message || '请求出现错误,请稍后再试',
+        duration: 4,
+      });
+    }
+
+    function requestSuccess(res) {
+      let info = routeQuery.info;
+      if (info) {
+        let query = JSON.parse(info);
+
+        // 代码逻辑说明: QQYUN-4882【简流】节点消息通知 邮箱 点击办理跳到了应用首页
+        let path = '';
+        if (query.isLowApp === 1) {
+          path = '/myapps/personalOffice/myTodo';
         } else {
-          requestFailed(res);
+          let taskId = query.taskId;
+          path = '/task/handle/' + taskId;
         }
-      });
 
-      function requestFailed(err) {
+        router.replace({ path, query });
+        notification.success({
+          message: t('sys.login.loginSuccessTitle'),
+          description: `${t('sys.login.loginSuccessDesc')}: ${res.userInfo.realname}`,
+          duration: 3,
+        });
+      } else {
         notification.error({
-          message: '登录失败',
-          description: ((err.response || {}).data || {}).message || err.message || '请求出现错误,请稍后再试',
+          message: '参数失效',
+          description: '页面跳转参数丢失,请查看日志',
           duration: 4,
         });
       }
-
-      function requestSuccess(res) {
-        let info = routeQuery.info;
-        if (info) {
-          let query = JSON.parse(info);
-
-          // 代码逻辑说明: QQYUN-4882【简流】节点消息通知 邮箱 点击办理跳到了应用首页
-          let path = '';
-          if (query.isLowApp === 1) {
-            path = '/myapps/personalOffice/myTodo';
-          } else {
-            let taskId = query.taskId;
-            path = '/task/handle/' + taskId;
-          }
-
-          router.replace({ path, query });
-          notification.success({
-            message: t('sys.login.loginSuccessTitle'),
-            description: `${t('sys.login.loginSuccessDesc')}: ${res.userInfo.realname}`,
-            duration: 3,
-          });
-        } else {
-          notification.error({
-            message: '参数失效',
-            description: '页面跳转参数丢失,请查看日志',
-            duration: 4,
-          });
-        }
-      }
-    },
-  };
+    }
+  },
+};
 </script>
 
 <style scoped>
-  html[data-theme='dark'] .app-loading {
-    background-color: #2c344a;
-  }
-
-  html[data-theme='dark'] .app-loading .app-loading-title {
-    color: rgba(255, 255, 255, 0.85);
-  }
-
-  .app-loading {
-    display: flex;
-    width: 100%;
-    height: 100%;
-    justify-content: center;
-    align-items: center;
-    flex-direction: column;
-    background-color: #f4f7f9;
-  }
-
-  .app-loading .app-loading-wrap {
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    display: flex;
-    -webkit-transform: translate3d(-50%, -50%, 0);
-    transform: translate3d(-50%, -50%, 0);
-    justify-content: center;
-    align-items: center;
-    flex-direction: column;
-  }
-
-  .app-loading .dots {
-    display: flex;
-    padding: 98px;
-    justify-content: center;
-    align-items: center;
-  }
-
-  .app-loading .app-loading-title {
-    display: flex;
-    margin-top: 30px;
-    font-size: 30px;
-    color: rgba(0, 0, 0, 0.85);
-    justify-content: center;
-    align-items: center;
-  }
-
-  .app-loading .app-loading-logo {
-    display: block;
-    width: 90px;
-    margin: 0 auto;
-    margin-bottom: 20px;
-  }
-
-  .dot {
-    position: relative;
-    display: inline-block;
-    width: 48px;
-    height: 48px;
-    margin-top: 30px;
-    font-size: 32px;
-    transform: rotate(45deg);
-    box-sizing: border-box;
-    animation: antRotate 1.2s infinite linear;
-  }
-
-  .dot i {
-    position: absolute;
-    display: block;
-    width: 20px;
-    height: 20px;
-    background-color: #0065cc;
-    border-radius: 100%;
-    opacity: 0.3;
-    transform: scale(0.75);
-    animation: antSpinMove 1s infinite linear alternate;
-    transform-origin: 50% 50%;
-  }
-
-  .dot i:nth-child(1) {
-    top: 0;
-    left: 0;
-  }
-
-  .dot i:nth-child(2) {
-    top: 0;
-    right: 0;
-    -webkit-animation-delay: 0.4s;
-    animation-delay: 0.4s;
-  }
-
-  .dot i:nth-child(3) {
-    right: 0;
-    bottom: 0;
-    -webkit-animation-delay: 0.8s;
-    animation-delay: 0.8s;
-  }
-
-  .dot i:nth-child(4) {
-    bottom: 0;
-    left: 0;
-    -webkit-animation-delay: 1.2s;
-    animation-delay: 1.2s;
-  }
-  @keyframes antRotate {
-    to {
-      -webkit-transform: rotate(405deg);
-      transform: rotate(405deg);
-    }
-  }
-  @-webkit-keyframes antRotate {
-    to {
-      -webkit-transform: rotate(405deg);
-      transform: rotate(405deg);
-    }
-  }
-  @keyframes antSpinMove {
-    to {
-      opacity: 1;
-    }
-  }
-  @-webkit-keyframes antSpinMove {
-    to {
-      opacity: 1;
-    }
-  }
+html[data-theme='dark'] .app-loading {
+  background-color: #2c344a;
+}
+
+html[data-theme='dark'] .app-loading .app-loading-title {
+  color: rgba(255, 255, 255, 0.85);
+}
+
+.app-loading {
+  display: flex;
+  width: 100%;
+  height: 100%;
+  justify-content: center;
+  align-items: center;
+  flex-direction: column;
+  background-color: #f4f7f9;
+}
+
+.app-loading .app-loading-wrap {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  display: flex;
+  -webkit-transform: translate3d(-50%, -50%, 0);
+  transform: translate3d(-50%, -50%, 0);
+  justify-content: center;
+  align-items: center;
+  flex-direction: column;
+}
+
+.app-loading .dots {
+  display: flex;
+  padding: 98px;
+  justify-content: center;
+  align-items: center;
+}
+
+.app-loading .app-loading-title {
+  display: flex;
+  margin-top: 30px;
+  font-size: 30px;
+  color: rgba(0, 0, 0, 0.85);
+  justify-content: center;
+  align-items: center;
+}
+
+.app-loading .app-loading-logo {
+  display: block;
+  width: 90px;
+  margin: 0 auto;
+  margin-bottom: 20px;
+}
+
+.dot {
+  position: relative;
+  display: inline-block;
+  width: 48px;
+  height: 48px;
+  margin-top: 30px;
+  font-size: 32px;
+  transform: rotate(45deg);
+  box-sizing: border-box;
+  animation: antRotate 1.2s infinite linear;
+}
+
+.dot i {
+  position: absolute;
+  display: block;
+  width: 20px;
+  height: 20px;
+  background-color: #0065cc;
+  border-radius: 100%;
+  opacity: 0.3;
+  transform: scale(0.75);
+  animation: antSpinMove 1s infinite linear alternate;
+  transform-origin: 50% 50%;
+}
+
+.dot i:nth-child(1) {
+  top: 0;
+  left: 0;
+}
+
+.dot i:nth-child(2) {
+  top: 0;
+  right: 0;
+  -webkit-animation-delay: 0.4s;
+  animation-delay: 0.4s;
+}
+
+.dot i:nth-child(3) {
+  right: 0;
+  bottom: 0;
+  -webkit-animation-delay: 0.8s;
+  animation-delay: 0.8s;
+}
+
+.dot i:nth-child(4) {
+  bottom: 0;
+  left: 0;
+  -webkit-animation-delay: 1.2s;
+  animation-delay: 1.2s;
+}
+
+@keyframes antRotate {
+  to {
+    -webkit-transform: rotate(405deg);
+    transform: rotate(405deg);
+  }
+}
+
+@-webkit-keyframes antRotate {
+  to {
+    -webkit-transform: rotate(405deg);
+    transform: rotate(405deg);
+  }
+}
+
+@keyframes antSpinMove {
+  to {
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes antSpinMove {
+  to {
+    opacity: 1;
+  }
+}
 </style>

+ 1 - 1
src/views/system/loginmini/MiniCodelogin.vue

@@ -45,7 +45,7 @@ import { getLoginQrcode, getQrcodeToken } from '/@/api/sys/user';
 import { useUserStore } from '/@/store/modules/user';
 import { QrCode } from '/@/components/Qrcode/index';
 import ThirdModal from '/@/views/sys/login/ThirdModal.vue';
-import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
+// import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
 import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
 import { useI18n } from '/@/hooks/web/useI18n';
 import { useDesign } from '/@/hooks/web/useDesign';

+ 186 - 183
src/views/system/loginmini/MiniForgotpad.vue

@@ -42,7 +42,8 @@
                     <a-form-item>
                       <a-input type="text" :placeholder="t('sys.login.smsCode')" v-model:value="formData.smscode" />
                     </a-form-item>
-                    <div v-if="showInterval" class="aui-code-line" @click="getLoginCode">{{ t('component.countdown.normalText') }}</div>
+                    <div v-if="showInterval" class="aui-code-line" @click="getLoginCode">{{
+                      t('component.countdown.normalText') }}</div>
                     <div v-else class="aui-code-line">{{ t('component.countdown.sendText', [unref(timeRuning)]) }}</div>
                   </div>
                 </div>
@@ -53,12 +54,14 @@
                 <div class="aui-account aui-account-line aui-forgot">
                   <a-form-item>
                     <div class="aui-input-line">
-                      <a-input type="password" :placeholder="t('sys.login.passwordPlaceholder')" v-model:value="pwdFormData.password" />
+                      <a-input type="password" :placeholder="t('sys.login.passwordPlaceholder')"
+                        v-model:value="pwdFormData.password" />
                     </div>
                   </a-form-item>
                   <a-form-item>
                     <div class="aui-input-line">
-                      <a-input type="password" :placeholder="t('sys.login.confirmPassword')" v-model:value="pwdFormData.confirmPassword" />
+                      <a-input type="password" :placeholder="t('sys.login.confirmPassword')"
+                        v-model:value="pwdFormData.confirmPassword" />
                     </div>
                   </a-form-item>
                 </div>
@@ -93,201 +96,201 @@
   <CaptchaModal @register="captchaRegisterModal" @ok="getLoginCode" />
 </template>
 <script lang="ts" name="mini-forgotpad" setup>
-  import { reactive, ref, toRaw, unref } from 'vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { SmsEnum, useFormRules, useFormValid, useLoginState } from '/@/views/sys/login/useLogin';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { getCaptcha, passwordChange, phoneVerify } from '/@/api/sys/user';
-  import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
-  import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
-  import successImg from '/@/assets/loginmini/icon/icon-success.png';
-  import CaptchaModal from '@/components/jeecg/captcha/CaptchaModal.vue';
-  import { useModal } from '@/components/Modal';
-  import { ExceptionEnum } from '@/enums/exceptionEnum';
-  const [captchaRegisterModal, { openModal: openCaptchaModal }] = useModal();
+import { reactive, ref, toRaw, unref } from 'vue';
+import { useI18n } from '/@/hooks/web/useI18n';
+import { SmsEnum, useFormRules, useFormValid, useLoginState } from '/@/views/sys/login/useLogin';
+import { useMessage } from '/@/hooks/web/useMessage';
+import { getCaptcha, passwordChange, phoneVerify } from '/@/api/sys/user';
+// import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
+import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
+import successImg from '/@/assets/loginmini/icon/icon-success.png';
+import CaptchaModal from '@/components/jeecg/captcha/CaptchaModal.vue';
+import { useModal } from '@/components/Modal';
+import { ExceptionEnum } from '@/enums/exceptionEnum';
+const [captchaRegisterModal, { openModal: openCaptchaModal }] = useModal();
 
-  //下一步控制
-  const activeKey = ref<number>(1);
-  const { t } = useI18n();
-  const { handleBackLogin } = useLoginState();
-  const { notification, createMessage, createErrorModal } = useMessage();
-  //是否显示获取验证码
-  const showInterval = ref<boolean>(true);
-  //60s
-  const timeRuning = ref<number>(60);
-  //定时器
-  const timer = ref<any>(null);
-  const formRef = ref();
-  const pwdFormRef = ref();
-  //账号数据
-  const accountInfo = reactive<any>({});
-  //手机号表单
-  const formData = reactive({
-    mobile: '',
-    smscode: '',
-  });
-  //密码表单
-  const pwdFormData = reactive<any>({
-    password: '',
-    confirmPassword: '',
-  });
-  const emit = defineEmits(['go-back', 'success', 'register']);
+//下一步控制
+const activeKey = ref<number>(1);
+const { t } = useI18n();
+const { handleBackLogin } = useLoginState();
+const { notification, createMessage, createErrorModal } = useMessage();
+//是否显示获取验证码
+const showInterval = ref<boolean>(true);
+//60s
+const timeRuning = ref<number>(60);
+//定时器
+const timer = ref<any>(null);
+const formRef = ref();
+const pwdFormRef = ref();
+//账号数据
+const accountInfo = reactive<any>({});
+//手机号表单
+const formData = reactive({
+  mobile: '',
+  smscode: '',
+});
+//密码表单
+const pwdFormData = reactive<any>({
+  password: '',
+  confirmPassword: '',
+});
+const emit = defineEmits(['go-back', 'success', 'register']);
 
-  /**
-   * 下一步
-   */
-  async function handleNext() {
-    if (!formData.mobile) {
-      createMessage.warn(t('sys.login.mobilePlaceholder'));
-      return;
-    }
-    if (!formData.smscode) {
-      createMessage.warn(t('sys.login.smsPlaceholder'));
-      return;
-    }
-    const resultInfo = await phoneVerify(
-      toRaw({
-        phone: formData.mobile,
-        smscode: formData.smscode,
-      })
-    );
-    if (resultInfo.success) {
-      Object.assign(accountInfo, {
-        username: resultInfo.result.username,
-        phone: formData.mobile,
-        smscode: formData.smscode,
-      });
-      activeKey.value = 2;
-      setTimeout(() => {
-        pwdFormRef.value.resetFields();
-      }, 300);
-    } else {
-      notification.error({
-        message: '错误提示',
-        description: resultInfo.message || t('sys.api.networkExceptionMsg'),
-        duration: 3,
-      });
-    }
+/**
+ * 下一步
+ */
+async function handleNext() {
+  if (!formData.mobile) {
+    createMessage.warn(t('sys.login.mobilePlaceholder'));
+    return;
   }
-
-  /**
-   * 完成修改密码
-   */
-  async function finishedPwd() {
-    if (!pwdFormData.password) {
-      createMessage.warn(t('sys.login.passwordPlaceholder'));
-      return;
-    }
-    if (!pwdFormData.confirmPassword) {
-      createMessage.warn(t('sys.login.confirmPassword'));
-      return;
-    }
-    if (pwdFormData.password !== pwdFormData.confirmPassword) {
-      createMessage.warn(t('sys.login.diffPwd'));
-      return;
-    }
-    const resultInfo = await passwordChange(
-      toRaw({
-        username: accountInfo.username,
-        password: pwdFormData.password,
-        smscode: accountInfo.smscode,
-        phone: accountInfo.phone,
-      })
-    );
-    if (resultInfo.success) {
-      accountInfo.password = pwdFormData.password;
-      //修改密码
-      activeKey.value = 3;
-    } else {
-      //错误提示
-      createErrorModal({
-        title: t('sys.api.errorTip'),
-        content: resultInfo.message || t('sys.api.networkExceptionMsg'),
-      });
-    }
+  if (!formData.smscode) {
+    createMessage.warn(t('sys.login.smsPlaceholder'));
+    return;
   }
-  /**
-   * 下一步
-   */
-  function nextStepClick() {
-    if (unref(activeKey) == 1) {
-      handleNext();
-    } else if (unref(activeKey) == 2) {
-      finishedPwd();
-    }
+  const resultInfo = await phoneVerify(
+    toRaw({
+      phone: formData.mobile,
+      smscode: formData.smscode,
+    })
+  );
+  if (resultInfo.success) {
+    Object.assign(accountInfo, {
+      username: resultInfo.result.username,
+      phone: formData.mobile,
+      smscode: formData.smscode,
+    });
+    activeKey.value = 2;
+    setTimeout(() => {
+      pwdFormRef.value.resetFields();
+    }, 300);
+  } else {
+    notification.error({
+      message: '错误提示',
+      description: resultInfo.message || t('sys.api.networkExceptionMsg'),
+      duration: 3,
+    });
   }
+}
 
-  /**
-   * 去登录
-   */
-  function toLogin() {
-    emit('success', { username: accountInfo.username, password: accountInfo.password });
-    initForm();
+/**
+ * 完成修改密码
+ */
+async function finishedPwd() {
+  if (!pwdFormData.password) {
+    createMessage.warn(t('sys.login.passwordPlaceholder'));
+    return;
   }
-
-  /**
-   * 返回
-   */
-  function goBack() {
-    emit('go-back');
-    initForm();
+  if (!pwdFormData.confirmPassword) {
+    createMessage.warn(t('sys.login.confirmPassword'));
+    return;
+  }
+  if (pwdFormData.password !== pwdFormData.confirmPassword) {
+    createMessage.warn(t('sys.login.diffPwd'));
+    return;
+  }
+  const resultInfo = await passwordChange(
+    toRaw({
+      username: accountInfo.username,
+      password: pwdFormData.password,
+      smscode: accountInfo.smscode,
+      phone: accountInfo.phone,
+    })
+  );
+  if (resultInfo.success) {
+    accountInfo.password = pwdFormData.password;
+    //修改密码
+    activeKey.value = 3;
+  } else {
+    //错误提示
+    createErrorModal({
+      title: t('sys.api.errorTip'),
+      content: resultInfo.message || t('sys.api.networkExceptionMsg'),
+    });
   }
+}
+/**
+ * 下一步
+ */
+function nextStepClick() {
+  if (unref(activeKey) == 1) {
+    handleNext();
+  } else if (unref(activeKey) == 2) {
+    finishedPwd();
+  }
+}
+
+/**
+ * 去登录
+ */
+function toLogin() {
+  emit('success', { username: accountInfo.username, password: accountInfo.password });
+  initForm();
+}
+
+/**
+ * 返回
+ */
+function goBack() {
+  emit('go-back');
+  initForm();
+}
 
-  /**
-   * 获取手机验证码
-   */
-  async function getLoginCode() {
-    if (!formData.mobile) {
-      createMessage.warn(t('sys.login.mobilePlaceholder'));
-      return;
+/**
+ * 获取手机验证码
+ */
+async function getLoginCode() {
+  if (!formData.mobile) {
+    createMessage.warn(t('sys.login.mobilePlaceholder'));
+    return;
+  }
+  // 代码逻辑说明: 【QQYUN-9005】同一个IP,1分钟超过5次短信,则提示需要验证码---
+  const result = await getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.FORGET_PASSWORD }).catch((res) => {
+    if (res.code === ExceptionEnum.PHONE_SMS_FAIL_CODE) {
+      openCaptchaModal(true, {});
     }
-    // 代码逻辑说明: 【QQYUN-9005】同一个IP,1分钟超过5次短信,则提示需要验证码---
-    const result = await getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.FORGET_PASSWORD }).catch((res) => {
-      if (res.code === ExceptionEnum.PHONE_SMS_FAIL_CODE) {
-        openCaptchaModal(true, {});
-      }
-    });
-    if (result) {
-      const TIME_COUNT = 60;
-      if (!unref(timer)) {
-        timeRuning.value = TIME_COUNT;
-        showInterval.value = false;
-        timer.value = setInterval(() => {
-          if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
-            timeRuning.value = timeRuning.value - 1;
-          } else {
-            showInterval.value = true;
-            clearInterval(unref(timer));
-            timer.value = null;
-          }
-        }, 1000);
-      }
+  });
+  if (result) {
+    const TIME_COUNT = 60;
+    if (!unref(timer)) {
+      timeRuning.value = TIME_COUNT;
+      showInterval.value = false;
+      timer.value = setInterval(() => {
+        if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
+          timeRuning.value = timeRuning.value - 1;
+        } else {
+          showInterval.value = true;
+          clearInterval(unref(timer));
+          timer.value = null;
+        }
+      }, 1000);
     }
   }
+}
 
-  /**
-   * 初始化表单
-   */
-  function initForm() {
-    activeKey.value = 1;
-    Object.assign(formData, { phone: '', smscode: '' });
-    Object.assign(pwdFormData, { password: '', confirmPassword: '' });
-    Object.assign(accountInfo, {});
-    if (unref(timer)) {
-      clearInterval(unref(timer));
-      timer.value = null;
-      showInterval.value = true;
-    }
-    setTimeout(() => {
-      formRef.value.resetFields();
-    }, 300);
+/**
+ * 初始化表单
+ */
+function initForm() {
+  activeKey.value = 1;
+  Object.assign(formData, { phone: '', smscode: '' });
+  Object.assign(pwdFormData, { password: '', confirmPassword: '' });
+  Object.assign(accountInfo, {});
+  if (unref(timer)) {
+    clearInterval(unref(timer));
+    timer.value = null;
+    showInterval.value = true;
   }
+  setTimeout(() => {
+    formRef.value.resetFields();
+  }, 300);
+}
 
-  defineExpose({
-    initForm,
-  });
+defineExpose({
+  initForm,
+});
 </script>
 <style lang="less" scoped>
-  @import '/@/assets/loginmini/style/home.less';
-  @import '/@/assets/loginmini/style/base.less';
+@import '/@/assets/loginmini/style/home.less';
+@import '/@/assets/loginmini/style/base.less';
 </style>

+ 1 - 1
src/views/system/loginmini/MiniLogin.vue

@@ -141,7 +141,7 @@ import ThirdModal from '/@/views/sys/login/ThirdModal.vue';
 import MiniForgotpad from './MiniForgotpad.vue';
 import MiniRegister from './MiniRegister.vue';
 import MiniCodelogin from './MiniCodelogin.vue';
-import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
+// import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
 import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
 import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
 import { useLocaleStore } from '/@/store/modules/locale';

+ 188 - 187
src/views/system/loginmini/MiniRegister.vue

@@ -18,32 +18,33 @@
                   <a-form-item>
                     <div class="aui-input-line">
                       <Icon class="aui-icon" icon="ant-design:user-outlined" />
-                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.userName')" v-model:value="formData.username" />
+                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.userName')"
+                        v-model:value="formData.username" />
                     </div>
                   </a-form-item>
                   <a-form-item>
                     <div class="aui-input-line">
                       <Icon class="aui-icon" icon="ant-design:mobile-outlined" />
-                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.mobile')" v-model:value="formData.mobile" />
+                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.mobile')"
+                        v-model:value="formData.mobile" />
                     </div>
                   </a-form-item>
                   <a-form-item>
                     <div class="aui-input-line">
                       <Icon class="aui-icon" icon="ant-design:mail-outlined" />
-                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.smsCode')" v-model:value="formData.smscode" />
-                      <div v-if="showInterval" class="aui-code-line" @click="getLoginCode">{{ t('component.countdown.normalText') }}</div>
-                      <div v-else class="aui-code-line">{{ t('component.countdown.sendText', [unref(timeRuning)]) }}</div>
+                      <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.smsCode')"
+                        v-model:value="formData.smscode" />
+                      <div v-if="showInterval" class="aui-code-line" @click="getLoginCode">{{
+                        t('component.countdown.normalText') }}</div>
+                      <div v-else class="aui-code-line">{{ t('component.countdown.sendText', [unref(timeRuning)]) }}
+                      </div>
                     </div>
                   </a-form-item>
                   <a-form-item>
                     <div class="aui-input-line">
                       <Icon class="aui-icon" icon="ant-design:lock-outlined" />
-                      <a-input
-                        class="fix-auto-fill"
-                        :type="pwdIndex === 'close' ? 'password' : 'text'"
-                        :placeholder="t('sys.login.password')"
-                        v-model:value="formData.password"
-                      />
+                      <a-input class="fix-auto-fill" :type="pwdIndex === 'close' ? 'password' : 'text'"
+                        :placeholder="t('sys.login.password')" v-model:value="formData.password" />
                       <div class="aui-eye">
                         <img :src="eyeKImg" alt="开启" v-if="pwdIndex === 'open'" @click="pwdClick('close')" />
                         <img :src="eyeGImg" alt="关闭" v-else-if="pwdIndex === 'close'" @click="pwdClick('open')" />
@@ -53,15 +54,13 @@
                   <a-form-item>
                     <div class="aui-input-line">
                       <Icon class="aui-icon" icon="ant-design:lock-outlined" />
-                      <a-input
-                        class="fix-auto-fill"
-                        :type="confirmPwdIndex === 'close' ? 'password' : 'text'"
-                        :placeholder="t('sys.login.confirmPassword')"
-                        v-model:value="formData.confirmPassword"
-                      />
+                      <a-input class="fix-auto-fill" :type="confirmPwdIndex === 'close' ? 'password' : 'text'"
+                        :placeholder="t('sys.login.confirmPassword')" v-model:value="formData.confirmPassword" />
                       <div class="aui-eye">
-                        <img :src="eyeKImg" alt="开启" v-if="confirmPwdIndex === 'open'" @click="confirmPwdClick('close')" />
-                        <img :src="eyeGImg" alt="关闭" v-else-if="confirmPwdIndex === 'close'" @click="confirmPwdClick('open')" />
+                        <img :src="eyeKImg" alt="开启" v-if="confirmPwdIndex === 'open'"
+                          @click="confirmPwdClick('close')" />
+                        <img :src="eyeGImg" alt="关闭" v-else-if="confirmPwdIndex === 'close'"
+                          @click="confirmPwdClick('open')" />
                       </div>
                     </div>
                   </a-form-item>
@@ -79,7 +78,8 @@
               </div>
               <div class="aui-formButton">
                 <div class="aui-flex">
-                  <a class="aui-link-login aui-flex-box" @click="registerHandleClick"> {{ t('sys.login.registerButton') }}</a>
+                  <a class="aui-link-login aui-flex-box" @click="registerHandleClick"> {{ t('sys.login.registerButton')
+                  }}</a>
                 </div>
                 <div class="aui-flex">
                   <a class="aui-linek-code aui-flex-box" @click="goBackHandleClick">{{ t('sys.login.backSignIn') }}</a>
@@ -96,192 +96,193 @@
 </template>
 
 <script lang="ts" setup name="mini-register">
-  import { ref, reactive, unref, toRaw } from 'vue';
-  import { getCaptcha, register } from '/@/api/sys/user';
-  import { SmsEnum } from '/@/views/sys/login/useLogin';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
-  import jeecgAdTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
-  import eyeKImg from '/@/assets/loginmini/icon/icon-eye-k.png';
-  import eyeGImg from '/@/assets/loginmini/icon/icon-eye-g.png';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import CaptchaModal from '@/components/jeecg/captcha/CaptchaModal.vue';
-  import { useModal } from '@/components/Modal';
-  import { ExceptionEnum } from '@/enums/exceptionEnum';
+import { ref, reactive, unref, toRaw } from 'vue';
+import { getCaptcha, register } from '/@/api/sys/user';
+import { SmsEnum } from '/@/views/sys/login/useLogin';
+import { useMessage } from '/@/hooks/web/useMessage';
+// import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
+import jeecgAdTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
+import eyeKImg from '/@/assets/loginmini/icon/icon-eye-k.png';
+import eyeGImg from '/@/assets/loginmini/icon/icon-eye-g.png';
+import { useI18n } from '/@/hooks/web/useI18n';
+import CaptchaModal from '@/components/jeecg/captcha/CaptchaModal.vue';
+import { useModal } from '@/components/Modal';
+import { ExceptionEnum } from '@/enums/exceptionEnum';
 
-  const { t } = useI18n();
-  const { notification, createErrorModal, createMessage } = useMessage();
-  const emit = defineEmits(['go-back', 'success', 'register']);
-  const formRef = ref();
-  const formData = reactive<any>({
-    username: '',
-    mobile: '',
-    smscode: '',
-    password: '',
-    confirmPassword: '',
-    policy: false,
-  });
-  //是否显示获取验证码
-  const showInterval = ref<boolean>(true);
-  //60s
-  const timeRuning = ref<number>(60);
-  //定时器
-  const timer = ref<any>(null);
-  //密码眼睛打开关闭
-  const pwdIndex = ref<string>('close');
-  //确认密码眼睛打开关闭
-  const confirmPwdIndex = ref<string>('close');
-  const [captchaRegisterModal, { openModal: openCaptchaModal }] = useModal();
+const { t } = useI18n();
+const { notification, createErrorModal, createMessage } = useMessage();
+const emit = defineEmits(['go-back', 'success', 'register']);
+const formRef = ref();
+const formData = reactive<any>({
+  username: '',
+  mobile: '',
+  smscode: '',
+  password: '',
+  confirmPassword: '',
+  policy: false,
+});
+//是否显示获取验证码
+const showInterval = ref<boolean>(true);
+//60s
+const timeRuning = ref<number>(60);
+//定时器
+const timer = ref<any>(null);
+//密码眼睛打开关闭
+const pwdIndex = ref<string>('close');
+//确认密码眼睛打开关闭
+const confirmPwdIndex = ref<string>('close');
+const [captchaRegisterModal, { openModal: openCaptchaModal }] = useModal();
 
-  /**
-   * 返回
-   */
-  function goBackHandleClick() {
-    emit('go-back');
-    initForm();
-  }
+/**
+ * 返回
+ */
+function goBackHandleClick() {
+  emit('go-back');
+  initForm();
+}
 
-  /**
-   * 获取手机验证码
-   */
-  async function getLoginCode() {
-    if (!formData.mobile) {
-      createMessage.warn(t('sys.login.mobilePlaceholder'));
-      return;
+/**
+ * 获取手机验证码
+ */
+async function getLoginCode() {
+  if (!formData.mobile) {
+    createMessage.warn(t('sys.login.mobilePlaceholder'));
+    return;
+  }
+  // 代码逻辑说明: 【QQYUN-9005】同一个IP,1分钟超过5次短信,则提示需要验证码---
+  const result = await getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.REGISTER }).catch((res) => {
+    if (res.code === ExceptionEnum.PHONE_SMS_FAIL_CODE) {
+      openCaptchaModal(true, {});
     }
-    // 代码逻辑说明: 【QQYUN-9005】同一个IP,1分钟超过5次短信,则提示需要验证码---
-    const result = await getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.REGISTER }).catch((res) => {
-      if (res.code === ExceptionEnum.PHONE_SMS_FAIL_CODE) {
-        openCaptchaModal(true, {});
-      }
-    });
-    if (result) {
-      const TIME_COUNT = 60;
-      if (!unref(timer)) {
-        timeRuning.value = TIME_COUNT;
-        showInterval.value = false;
-        timer.value = setInterval(() => {
-          if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
-            timeRuning.value = timeRuning.value - 1;
-          } else {
-            showInterval.value = true;
-            clearInterval(unref(timer));
-            timer.value = null;
-          }
-        }, 1000);
-      }
+  });
+  if (result) {
+    const TIME_COUNT = 60;
+    if (!unref(timer)) {
+      timeRuning.value = TIME_COUNT;
+      showInterval.value = false;
+      timer.value = setInterval(() => {
+        if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
+          timeRuning.value = timeRuning.value - 1;
+        } else {
+          showInterval.value = true;
+          clearInterval(unref(timer));
+          timer.value = null;
+        }
+      }, 1000);
     }
   }
+}
 
-  function registerHandleClick() {
-    if (!formData.username) {
-      createMessage.warn(t('sys.login.accountPlaceholder'));
-      return;
-    }
-    if (!formData.mobile) {
-      createMessage.warn(t('sys.login.mobilePlaceholder'));
-      return;
-    }
-    if (!formData.smscode) {
-      createMessage.warn(t('sys.login.smsPlaceholder'));
-      return;
-    }
-    if (!formData.password) {
-      createMessage.warn(t('sys.login.passwordPlaceholder'));
-      return;
-    }
-    if (!formData.confirmPassword) {
-      createMessage.warn(t('sys.login.confirmPassword'));
-      return;
-    }
-    if (formData.password !== formData.confirmPassword) {
-      createMessage.warn(t('sys.login.diffPwd'));
-      return;
-    }
-    if (!formData.policy) {
-      createMessage.warn(t('sys.login.policyPlaceholder'));
-      return;
-    }
-    registerAccount();
+function registerHandleClick() {
+  if (!formData.username) {
+    createMessage.warn(t('sys.login.accountPlaceholder'));
+    return;
+  }
+  if (!formData.mobile) {
+    createMessage.warn(t('sys.login.mobilePlaceholder'));
+    return;
   }
+  if (!formData.smscode) {
+    createMessage.warn(t('sys.login.smsPlaceholder'));
+    return;
+  }
+  if (!formData.password) {
+    createMessage.warn(t('sys.login.passwordPlaceholder'));
+    return;
+  }
+  if (!formData.confirmPassword) {
+    createMessage.warn(t('sys.login.confirmPassword'));
+    return;
+  }
+  if (formData.password !== formData.confirmPassword) {
+    createMessage.warn(t('sys.login.diffPwd'));
+    return;
+  }
+  if (!formData.policy) {
+    createMessage.warn(t('sys.login.policyPlaceholder'));
+    return;
+  }
+  registerAccount();
+}
 
-  /**
-   * 注册账号
-   */
-  async function registerAccount() {
-    try {
-      const resultInfo = await register(
-        toRaw({
-          username: formData.username,
-          password: formData.password,
-          phone: formData.mobile,
-          smscode: formData.smscode,
-        })
-      );
-      if (resultInfo && resultInfo.data.success) {
-        notification.success({
-          description: resultInfo.data.message || t('sys.api.registerMsg'),
-          duration: 3,
-        });
-        emit('success', { username: formData.username, password: formData.password });
-        initForm();
-      } else {
-        notification.warning({
-          message: t('sys.api.errorTip'),
-          description: resultInfo.data.message || t('sys.api.networkExceptionMsg'),
-          duration: 3,
-        });
-      }
-    } catch (error) {
-      notification.error({
+/**
+ * 注册账号
+ */
+async function registerAccount() {
+  try {
+    const resultInfo = await register(
+      toRaw({
+        username: formData.username,
+        password: formData.password,
+        phone: formData.mobile,
+        smscode: formData.smscode,
+      })
+    );
+    if (resultInfo && resultInfo.data.success) {
+      notification.success({
+        description: resultInfo.data.message || t('sys.api.registerMsg'),
+        duration: 3,
+      });
+      emit('success', { username: formData.username, password: formData.password });
+      initForm();
+    } else {
+      notification.warning({
         message: t('sys.api.errorTip'),
-        description: error.message || t('sys.api.networkExceptionMsg'),
+        description: resultInfo.data.message || t('sys.api.networkExceptionMsg'),
         duration: 3,
       });
     }
+  } catch (error) {
+    notification.error({
+      message: t('sys.api.errorTip'),
+      description: error.message || t('sys.api.networkExceptionMsg'),
+      duration: 3,
+    });
   }
+}
 
-  /**
-   * 初始化表单
-   */
-  function initForm() {
-    Object.assign(formData, { username: '', mobile: '', smscode: '', password: '', confirmPassword: '', policy: false });
-    if (!unref(timer)) {
-      showInterval.value = true;
-      clearInterval(unref(timer));
-      timer.value = null;
-    }
-    formRef.value.resetFields();
+/**
+ * 初始化表单
+ */
+function initForm() {
+  Object.assign(formData, { username: '', mobile: '', smscode: '', password: '', confirmPassword: '', policy: false });
+  if (!unref(timer)) {
+    showInterval.value = true;
+    clearInterval(unref(timer));
+    timer.value = null;
   }
+  formRef.value.resetFields();
+}
 
-  /**
-   * 密码打开或关闭
-   * @param value
-   */
-  function pwdClick(value) {
-    pwdIndex.value = value;
-  }
+/**
+ * 密码打开或关闭
+ * @param value
+ */
+function pwdClick(value) {
+  pwdIndex.value = value;
+}
 
-  /**
-   * 确认密码打开或关闭
-   * @param value
-   */
-  function confirmPwdClick(value) {
-    confirmPwdIndex.value = value;
-  }
+/**
+ * 确认密码打开或关闭
+ * @param value
+ */
+function confirmPwdClick(value) {
+  confirmPwdIndex.value = value;
+}
 
-  defineExpose({
-    initForm,
-  });
+defineExpose({
+  initForm,
+});
 </script>
 <style lang="less" scoped>
-  @import '/@/assets/loginmini/style/home.less';
-  @import '/@/assets/loginmini/style/base.less';
-  .aui-input-line .aui-icon {
-    position: absolute;
-    z-index: @layout-basic-z-index;
-    top: 10px;
-    left: 10px;
-    font-size: 20px !important;
-  }
+@import '/@/assets/loginmini/style/home.less';
+@import '/@/assets/loginmini/style/base.less';
+
+.aui-input-line .aui-icon {
+  position: absolute;
+  z-index: @layout-basic-z-index;
+  top: 10px;
+  left: 10px;
+  font-size: 20px !important;
+}
 </style>