Просмотр исходного кода

Merge branch '165' of uskycloud/usky-web-mobile into master

xf15575941817 2 лет назад
Родитель
Сommit
791258c9fa
70 измененных файлов с 1930 добавлено и 1295 удалено
  1. 4 1
      src/App.vue
  2. 3 3
      src/components/oa-tabbar/index.vue
  3. 111 0
      src/components/oa-timeLine-item/index.vue
  4. 62 0
      src/components/oa-timeLine/index.vue
  5. 5 0
      src/main.js
  6. 5 2
      src/manifest.json
  7. 17 22
      src/pages.json
  8. 2 2
      src/pages/business/mhxf/coordination/index.vue
  9. 14 5
      src/pages/business/mhxf/deviceManage/index.vue
  10. 2 2
      src/pages/business/mhxf/fireReport/components/detailed.vue
  11. 2 2
      src/pages/business/mhxf/fireReport/components/detailedPath.vue
  12. 3 3
      src/pages/business/mhxf/fireReport/index.vue
  13. 13 5
      src/pages/business/mhxf/informationSelect-test/index.vue
  14. 12 4
      src/pages/business/mhxf/informationSelect/index.vue
  15. 11 4
      src/pages/business/mhxf/needMatter/index.vue
  16. 3 4
      src/pages/business/mhxf/unitInfoCollection/index copy.vue
  17. 5 6
      src/pages/business/mhxf/unitInfoCollection/index.vue
  18. 7 9
      src/pages/business/mhxf/xunJian/collect/components/collectDetail.vue
  19. 4 4
      src/pages/business/mhxf/xunJian/collect/components/collectRecord.vue
  20. 10 18
      src/pages/business/mhxf/xunJian/collect/index.vue
  21. 52 58
      src/pages/business/mhxf/xunJian/plan/components/content.vue
  22. 8 8
      src/pages/business/mhxf/xunJian/plan/components/drawer.vue
  23. 27 21
      src/pages/business/mhxf/xunJian/plan/components/report.vue
  24. 42 52
      src/pages/business/mhxf/xunJian/plan/components/siteDetails.vue
  25. 104 140
      src/pages/business/mhxf/xunJian/plan/index.vue
  26. 1 2
      src/pages/business/mhxf/xunJian/record/recordDetail/index.vue
  27. 6 7
      src/pages/business/mhxf/xunJian/xunJian.vue
  28. 1 1
      src/pages/business/zhxf/building/index.vue
  29. 1 1
      src/pages/business/zhxf/funReport/funcAdd/index.vue
  30. 1 1
      src/pages/business/zhxf/funReport/index.vue
  31. 1 4
      src/pages/business/zhxf/messagePush/index.vue
  32. 1 1
      src/pages/common/export/index.vue
  33. 1 1
      src/pages/common/textview/index.vue
  34. 1 1
      src/pages/common/textview/index1.vue
  35. 1 1
      src/pages/common/webview/index.vue
  36. 4 5
      src/pages/index.vue
  37. 72 31
      src/pages/info/info.vue
  38. 7 7
      src/pages/login.vue
  39. 1 1
      src/pages/mine/about/index.vue
  40. 1 1
      src/pages/mine/avatar/index.vue
  41. 3 2
      src/pages/mine/help/index.vue
  42. 34 113
      src/pages/mine/index.vue
  43. 187 106
      src/pages/mine/info/index.vue
  44. 0 115
      src/pages/mine/pwd/index.vue
  45. 198 0
      src/pages/mine/secure/index.vue
  46. 15 72
      src/pages/mine/setting/index.vue
  47. 5 4
      src/pages/serveConfig.vue
  48. 4 3
      src/pages/serveConfigSelect.vue
  49. 1 1
      src/permission.js
  50. 3 3
      src/plugins/index.js
  51. 2 2
      src/plugins/setting.plugins.js
  52. 1 1
      src/static/scss/colorui.css
  53. 86 69
      src/static/scss/global.scss
  54. 66 0
      src/static/scss/handle.scss
  55. 35 1
      src/static/scss/index.scss
  56. 29 61
      src/static/scss/public.scss
  57. 117 0
      src/static/scss/sidebar.scss
  58. 60 0
      src/static/scss/themes.scss
  59. 11 0
      src/store/modules/index.js
  60. 117 6
      src/store/modules/setting.js
  61. 17 1
      src/store/modules/user.js
  62. 6 0
      src/uni_modules/c-progress-circle/changelog.md
  63. 185 0
      src/uni_modules/c-progress-circle/components/c-progress-circle/c-progress-circle.vue
  64. 20 23
      src/uni_modules/c-progress-circle/package.json
  65. 98 0
      src/uni_modules/c-progress-circle/readme.md
  66. 0 2
      src/uni_modules/gb-progress/changelog.md
  67. 0 157
      src/uni_modules/gb-progress/components/gb-progress/gb-progress.vue
  68. 0 111
      src/uni_modules/gb-progress/readme.md
  69. 1 1
      src/utils/request.js
  70. 1 1
      src/utils/upload.js

+ 4 - 1
src/App.vue

@@ -50,14 +50,17 @@ onLaunch(() => {
   //初始化默认主题
   if (!proxy.$settingStore.$state.themeColor) {
     proxy.$settingStore.SET_THEMECOLOR(proxy.$constData.themeList[0]);
+  } else {
+    proxy.$settingStore.SET_THEMECOLOR(proxy.$settingStore.$state.themeColor);
   }
 
   // setToken(
-  //   "eyJhbGciOiJIUzUxMiJ9.eyIiOjEwMzIsInVzZXJfaWQiOjYzLCJ1c2VyX2tleSI6IjExYWI0ODcyMWNhODQ4MDBiM2IzNzU1MTkzMDViMjI2IiwidXNlcm5hbWUiOiJmaHMxIn0.Q1dNUsk-cIpHRCTJV9ekoprLd7Q0ggrfirX_zo8EtO-FydtmRxlHZaBYkYWbsyvEGNN6b3O_s8ZOChXwTExnDg"
+  //   "eyJhbGciOiJIUzUxMiJ9.eyIiOjEwMzIsInVzZXJfaWQiOjYzLCJ1c2VyX2tleSI6IjYwMjNkZjg1OTIyODRlYTM5MmEwMWEzMzgyOTViZmRhIiwidXNlcm5hbWUiOiJmaHMxIn0.6GsrVyPh7T3vWmX6iB1fPv3wi-noOtgGcrDwBPctB3LLGcWqw89He6DK7waMCWZFBsOy0HLRD2PJdQs489hAxw"
   // );
   // proxy.$tab.reLaunch("/pages/mine/index");
   // proxy.$tab.reLaunch("/pages/index");
   // proxy.$tab.reLaunch("/pages/info/info");
+  // proxy.$tab.reLaunch("/pages/business/mhxf/xunJian/collect/index");
 
   initApp();
 });

+ 3 - 3
src/components/oa-tabbar/index.vue

@@ -1,6 +1,6 @@
 <template>
   <u-tabbar :value="proxy.$settingStore.tabbarValue" @change="tabbarChange" :fixed="true" :placeholder="true" :safeAreaInsetBottom="true" :activeColor="proxy.$settingStore.themeColor.color">
-    <u-tabbar-item :text="tab.text" v-for="(tab, index) in tabbarList" :key="index" :dot="tab.dot">
+    <u-tabbar-item :text="tab.text" :name="tab.pagePath" v-for="(tab, index) in tabbarList" :key="index" :dot="tab.dot">
       <template #active-icon>
         <image style="width: 24px; height: 24px" :src="proxy.$settingStore.themeColor.tabList[index]"></image>
       </template>
@@ -24,7 +24,7 @@ const tabbarList = ref([
     iconPath: "/static/images/tabBar/tab-home.png",
     selectedIconPath: "/static/images/tabBar/tab-home-blue.png",
     text: "工作台",
-    dot: true,
+    dot: false,
   },
   // {
   //   "pagePath": "pages/analyse/analyse",
@@ -50,7 +50,7 @@ const tabbarList = ref([
 
 function tabbarChange(e) {
   proxy.$settingStore.tabbarValue = e;
-  proxy.$tab.switchTab(tabbarList.value[e].pagePath);
+  proxy.$tab.switchTab(e);
 }
 
 onLoad((option) => {});

+ 111 - 0
src/components/oa-timeLine-item/index.vue

@@ -0,0 +1,111 @@
+<template>
+  <view class="oa-timeLine-item">
+    <view class="oa-timeLine-item-header">
+      <view class="oa-timeLine-item-header-icon">
+        <u-icon name="info-circle-fill" :color="iconColor" size="18"></u-icon>
+      </view>
+      <view class="oa-timeLine-item-header-cont">
+        <view class="title">
+          {{ titleValue }}
+        </view>
+        <view style="margin: auto"> </view>
+        <view class="time">
+          {{ timeValue }}
+        </view>
+      </view>
+    </view>
+
+    <view class="oa-timeLine-item-content">
+      <view class="oa-timeLine-item-content-icon">
+        <view class="icon"></view>
+      </view>
+      <view class="oa-timeLine-item-content-cont">
+        <slot class="content"></slot>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup>
+import { toRefs } from "vue";
+
+const props = defineProps({
+  titleValue: {
+    type: String,
+    default: "",
+  },
+  timeValue: {
+    type: String,
+    default: "",
+  },
+  iconColor: {
+    type: String,
+    default: "#149eff",
+  },
+});
+
+const { titleValue, timeValue, iconColor } = toRefs(props);
+</script>
+
+<style lang="scss" scoped>
+.oa-timeLine-item {
+  .oa-timeLine-item-header {
+    display: flex;
+    height: 25px;
+    line-height: 25px;
+
+    .oa-timeLine-item-header-icon {
+      margin: auto 0;
+    }
+
+    .oa-timeLine-item-header-cont {
+      display: flex;
+      width: 100%;
+      margin-left: 15px;
+
+      .title {
+        font-size: 15px;
+        color: #000000;
+      }
+
+      .time {
+        font-size: 14px;
+        color: #b5b5b5;
+      }
+    }
+  }
+
+  .oa-timeLine-item-content {
+    display: flex;
+
+    .oa-timeLine-item-content-icon {
+      width: 18px;
+      display: flex;
+
+      .icon {
+        width: 2px;
+        background-color: #e4e7ed;
+        margin: -5px auto;
+      }
+    }
+
+    .oa-timeLine-item-content-cont {
+      width: 100%;
+      margin: 15px 0px 15px 15px;
+      padding: 15px;
+      background-color: #fff;
+      border-radius: 10px;
+    }
+  }
+}
+
+// .oa-timeLine-item:last-child {
+//   .oa-timeLine-item-content {
+//     .oa-timeLine-item-content-icon {
+//       .icon {
+//         margin-bottom: 15px;
+//       }
+//     }
+//   }
+// }
+</style>

+ 62 - 0
src/components/oa-timeLine/index.vue

@@ -0,0 +1,62 @@
+<template>
+  <view class="oa-timeLine">
+    <view class="oa-timeLine-btn" :style="{ color: fontColor }">
+      <span @click="activitiesSortClick()">排序</span>
+    </view>
+    <slot></slot>
+  </view>
+</template>
+
+<script setup>
+import { ref, toRefs } from "vue";
+
+const emit = defineEmits(["activitiesSortChange"]);
+
+const props = defineProps({
+  sort: {
+    type: String,
+    default: "DESC",
+  },
+  fontColor: {
+    type: String,
+    default: "#149eff",
+  },
+});
+
+const { sort, fontColor } = toRefs(props);
+
+const _sort = ref(sort.value);
+
+function activitiesSortClick() {
+  if (_sort.value == "ASC") {
+    _sort.value = "DESC";
+  } else {
+    _sort.value = "ASC";
+  }
+
+  emit("activitiesSortChange", _sort.value);
+}
+</script>
+
+<style lang="scss" scoped>
+.oa-timeLine {
+  padding: 0px 15px;
+  padding-bottom: 15px;
+
+  .u-steps-item__wrapper {
+    background-color: #f1f1f1;
+  }
+
+  .oa-timeLine-btn {
+    margin: 0px -3.5px;
+    font-size: 13px;
+  }
+}
+
+.oa-timeLine-data {
+  padding: 0px 15px;
+  text-align: center;
+  color: #bdbdbd;
+  font-size: 14px;
+}
+</style>

+ 5 - 0
src/main.js

@@ -15,6 +15,9 @@ import JsonExcel from "vue-json-excel";
 import uviewPlus from "@/uni_modules/uview-plus";
 import oaCalendar from "@/components/oa-calendar/uni-calendar";
 import oaTabbar from "@/components/oa-tabbar/index";
+import oaTimeLine from "@/components/oa-timeLine/index"
+import oaTimeLineItem from "@/components/oa-timeLine-item/index"
+
 
 
 export function createApp() {
@@ -23,6 +26,8 @@ export function createApp() {
   //挂载全局组件
   app.component('oa-calendar', oaCalendar)
   app.component('oa-tabbar', oaTabbar)
+  app.component('oa-timeLine', oaTimeLine)
+  app.component('oa-timeLine-item', oaTimeLineItem)
 
   // 挂载全局json导出
   app.component("downloadExcel", JsonExcel);

+ 5 - 2
src/manifest.json

@@ -2,8 +2,8 @@
     "name" : "综合智慧云",
     "appid" : "__UNI__36DE3A0",
     "description" : "综合智慧云",
-    "versionName" : "2.0.0",
-    "versionCode" : 2,
+    "versionName" : "2.0.2",
+    "versionCode" : 4,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {
@@ -150,6 +150,9 @@
                     "hdpi" : "src/static/images/wt/bg.png"
                 }
             }
+        },
+        "safearea" : {
+            "offset" : "none"
         }
     },
     /* 快应用特有相关 */

+ 17 - 22
src/pages.json

@@ -122,17 +122,23 @@
         {
           "path": "/info/index",
           "style": {
-            "navigationBarTitleText": "个人资料",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": {
-                "type": "transparent",
-                "autoBackButton": true,
-                "backButton": { //自定义 backButton
-                  "background": "rgba(0,0,0,0)"
-                }
-              }
-            }
+            "navigationBarTitleText": "我的信息"
+            // "app-plus": {
+            //   "bounce": "none",
+            //   "titleNView": {
+            //     "type": "transparent",
+            //     "autoBackButton": true,
+            //     "backButton": { //自定义 backButton
+            //       "background": "rgba(0,0,0,0)"
+            //     }
+            //   }
+            // }
+          }
+        },
+        {
+          "path": "/secure/index",
+          "style": {
+            "navigationBarTitleText": "账号与安全"
           }
         },
         {
@@ -167,17 +173,6 @@
               "titleNView": false
             }
           }
-        },
-        {
-          "path": "/pwd/index",
-          "style": {
-            "navigationBarTitleText": "修改密码",
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
-            }
-          }
         }
       ]
     },

+ 2 - 2
src/pages/business/mhxf/coordination/index.vue

@@ -5,9 +5,9 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs, nextTick } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import publicStore from "@/store/modules/public";
-const publicStores = publicStore(); //全局公共Store
+const publicStore = publicStores(); //全局公共Store
 
 const { proxy } = getCurrentInstance();
 

+ 14 - 5
src/pages/business/mhxf/deviceManage/index.vue

@@ -1,6 +1,15 @@
-<template>
-  <u-sticky bgColor="#fff" style="border-bottom: 1px #ececec solid">
-    <u-tabs :list="list" @click="tabsClick" :current="current" :scrollable="list.length >= 5 ? true : false"></u-tabs>
+<template :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+  <u-sticky bgColor="#fff" style="box-shadow: 1px 1px 4px rgb(26 26 26 / 10%)">
+    <u-tabs
+      :list="list"
+      :current="current"
+      @click="tabsClick"
+      :scrollable="list.length >= 5 ? true : false"
+      lineColor="#333"
+      :activeStyle="{ color: '#333' }"
+      :inactiveStyle="{ color: '#909399' }"
+      style="border-bottom: 1px solid #eaeef1"
+    ></u-tabs>
   </u-sticky>
 
   <view class="deviceManage" @touchstart="fingerstart" @touchend="fingerend">
@@ -77,11 +86,11 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance, toRefs } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { dataRtList } from "@/api/business/mhxf/deviceManage";
 
-import publicStore from "@/store/modules/public";
-const publicStores = publicStore(); //全局公共Store
+const publicStore = publicStores(); //全局公共Store
 
 const { proxy } = getCurrentInstance();
 

+ 2 - 2
src/pages/business/mhxf/fireReport/components/detailed.vue

@@ -378,7 +378,7 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance, toRefs } from "vue";
-import publicStore from "@/store/modules/public";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import lineEcharts from "./echarts.vue";
 
@@ -386,7 +386,7 @@ import {} from "@/api/business/mhxf/informationSelect";
 
 const { proxy } = getCurrentInstance();
 
-const publicStores = publicStore(); //全局公共Store
+const publicStore = publicStores(); //全局公共Store
 
 const dataList = reactive({
   content1: [],

+ 2 - 2
src/pages/business/mhxf/fireReport/components/detailedPath.vue

@@ -9,7 +9,7 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance, toRefs } from "vue";
-import publicStore from "@/store/modules/public";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import lineEcharts from "./echarts.vue";
 
@@ -17,7 +17,7 @@ import {} from "@/api/business/mhxf/informationSelect";
 
 const { proxy } = getCurrentInstance();
 
-const publicStores = publicStore(); //全局公共Store
+const publicStore = publicStores(); //全局公共Store
 
 const dataList = reactive({
   pathUrl: "",

+ 3 - 3
src/pages/business/mhxf/fireReport/index.vue

@@ -21,13 +21,13 @@
 <script setup>
 import { onReady, onLoad, onShow, onReachBottom, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance } from "vue";
-import publicStore from "@/store/modules/public";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { reportInfoList } from "@/api/business/mhxf/fireReport";
 
-const { proxy } = getCurrentInstance();
+const publicStore = publicStores(); //全局公共Store
 
-const publicStores = publicStore(); //全局公共Store
+const { proxy } = getCurrentInstance();
 
 const dataRes = ref(true);
 const dataList = ref([]);

+ 13 - 5
src/pages/business/mhxf/informationSelect-test/index.vue

@@ -1,6 +1,14 @@
 <template>
   <u-sticky bgColor="#fff" style="box-shadow: 1px 1px 4px rgb(26 26 26 / 10%)">
-    <u-tabs :list="list" @click="tabsClick" :current="current"></u-tabs>
+    <u-tabs
+      :list="list"
+      :current="current"
+      @click="tabsClick"
+      lineColor="#333"
+      :activeStyle="{ color: '#333' }"
+      :inactiveStyle="{ color: '#909399' }"
+      style="border-bottom: 1px solid #eaeef1"
+    ></u-tabs>
   </u-sticky>
 
   <view class="informationSelect" @touchstart="fingerstart" @touchend="fingerend" style="background-color: #ffffff">
@@ -36,13 +44,13 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance } from "vue";
-import publicStore from "@/store/modules/public";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { dataList } from "@/api/business/mhxf/informationSelect";
 
-const { proxy } = getCurrentInstance();
+const publicStore = publicStores(); //全局公共Stores
 
-const publicStores = publicStore(); //全局公共Store
+const { proxy } = getCurrentInstance();
 
 const dataInput = ref("");
 const current = ref(0);
@@ -733,7 +741,7 @@ uni-page-refresh,
   text-align: center;
   position: relative;
 }
-.whiteBackgroundColor {
+.bg-white {
   background-color: #ffffff;
 }
 body {

+ 12 - 4
src/pages/business/mhxf/informationSelect/index.vue

@@ -1,6 +1,14 @@
 <template>
   <u-sticky bgColor="#fff" style="box-shadow: 1px 1px 4px rgb(26 26 26 / 10%)">
-    <u-tabs :list="list" @click="tabsClick" :current="current"></u-tabs>
+    <u-tabs
+      :list="list"
+      :current="current"
+      @click="tabsClick"
+      lineColor="#333"
+      :activeStyle="{ color: '#333' }"
+      :inactiveStyle="{ color: '#909399' }"
+      style="border-bottom: 1px solid #eaeef1"
+    ></u-tabs>
   </u-sticky>
 
   <view class="informationSelect" @touchstart="fingerstart" @touchend="fingerend" style="background-color: #ffffff">
@@ -36,13 +44,13 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance } from "vue";
-import publicStore from "@/store/modules/public";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { dataList } from "@/api/business/mhxf/informationSelect";
 
 const { proxy } = getCurrentInstance();
 
-const publicStores = publicStore(); //全局公共Store
+const publicStore = publicStores(); //全局公共Store
 
 const dataInput = ref("");
 const current = ref(0);
@@ -738,7 +746,7 @@ uni-page-refresh,
   text-align: center;
   position: relative;
 }
-.whiteBackgroundColor {
+.bg-white {
   background-color: #ffffff;
 }
 body {

+ 11 - 4
src/pages/business/mhxf/needMatter/index.vue

@@ -1,6 +1,14 @@
 <template>
   <u-sticky bgColor="#fff" style="box-shadow: 1px 1px 4px rgb(26 26 26 / 10%)">
-    <u-tabs :list="list" @click="tabsClick" :current="current"></u-tabs>
+    <u-tabs
+      :list="list"
+      :current="current"
+      @click="tabsClick"
+      lineColor="#333"
+      :activeStyle="{ color: '#333' }"
+      :inactiveStyle="{ color: '#909399' }"
+      style="border-bottom: 1px solid #eaeef1"
+    ></u-tabs>
   </u-sticky>
 
   <view class="needMatter" @touchstart="fingerstart" @touchend="fingerend">
@@ -164,15 +172,14 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance } from "vue";
-import useStores from "@/store/modules/user.js";
-import publicStore from "@/store/modules/public";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { mobileScheduleList, updateMobileReformStatus, uploadAvatar, addReformMaterial } from "@/api/business/mhxf/needMatter";
 
 const { proxy } = getCurrentInstance();
 
 const useStore = useStores();
-const publicStores = publicStore(); //全局公共Store
+const publicStore = publicStores(); //全局公共Store
 
 const current = ref(0);
 const classifyData = ref([]);

+ 3 - 4
src/pages/business/mhxf/unitInfoCollection/index copy.vue

@@ -185,15 +185,14 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 import { getToken } from "@/utils/auth";
 
-import publicStore from "@/store/modules/public.js";
-
 import { companyByNameSelect, addBaseCompany, delBaseBuild } from "@/api/business/mhxf/unitInfoCollection";
 
 const { proxy } = getCurrentInstance();
 
-const publicStores = publicStore();
+const publicStore = publicStores();
 
 const dataList = reactive({
   form: {
@@ -841,7 +840,7 @@ function handleDateTime(value, index, time) {
  * @确定按钮事件
  */
 function timeSubmit(data) {
-  let time = publicStores.formatterDateTime(data.value);
+  let time = publicStore.formatterDateTime(data.value);
   let timeData = time.split(" ")[0];
   if (timeTitle.value == "成立时间") {
     form.value.foundTime = timeData;

+ 5 - 6
src/pages/business/mhxf/unitInfoCollection/index.vue

@@ -316,15 +316,14 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 import { getToken } from "@/utils/auth";
 
-import publicStore from "@/store/modules/public.js";
-
 import { companyByNameSelect, addBaseCompany, delBaseBuild, delBaseBuildExtinguish } from "@/api/business/mhxf/unitInfoCollection";
 
 const { proxy } = getCurrentInstance();
 
-const publicStores = publicStore();
+const publicStore = publicStores();
 
 const checkboxValue = ref([]);
 
@@ -451,8 +450,8 @@ const dataList = reactive({
       completeYear: "", //竣工年份
       buildHigh: "", //建筑高度
       fireproofCoat: 0, //是否有防火涂层
-      fireFacilitySystem: "", //消防设施设置
-      otherSystem: "", //其他设施
+      fireFacilitySystem: [], //消防设施设置
+      otherSystem: [], //其他设施
       otherFacilities: "", //其他设施名称
     },
     baseBuildAttach: {
@@ -1205,7 +1204,7 @@ function handleDateTime(value, index, time) {
  * @确定按钮事件
  */
 function timeSubmit(data) {
-  let time = publicStores.formatterDateTime(data.value);
+  let time = publicStore.formatterDateTime(data.value);
   let timeData = time.split(" ")[0];
   if (timeTitle.value == "成立时间") {
     form.value.foundTime = timeData;

+ 7 - 9
src/pages/business/mhxf/xunJian/collect/components/collectDetail.vue

@@ -1,6 +1,6 @@
 <template>
   <scroll-view scroll-y class="grayBackgroundColor">
-    <view class="whiteBackgroundColor" style="padding: 15px 15px 15px 15px">
+    <view class="bg-white" style="padding: 15px 15px 15px 15px">
       <u-form ref="form" labelPosition="left" :model="model" :rules="rules" labelWidth="82">
         <u-form-item label="地点号码:" prop="siteNubmber">
           <u-input v-model="model.siteNubmber" disabled></u-input>
@@ -28,12 +28,10 @@ import {
   onNavigationBarButtonTap,
 } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
+import { publicStores, xunJianStores } from "@/store/modules/index";
 
-import publicStore from "@/store/modules/public";
-import xunJianStore from "@/store/modules/xunJian";
-
-const publicStores = publicStore(); //全局公共Store
-const xunjianStore = xunJianStore(); //全局变量值Store
+const publicStore = publicStores(); //全局公共Store
+const xunJianStore = xunJianStore(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
 
@@ -67,9 +65,9 @@ function handleInsert() {
     .validate()
     .then((res) => {
       let endTime = new Date();
-      model.siteTime = publicStores.formatterDate(endTime, "yyyy-MM-dd hh:mm:ss");
+      model.siteTime = publicStore.formatterDate(endTime, "yyyy-MM-dd hh:mm:ss");
 
-      xunjianStore.collectDataList.push(model);
+      xunJianStore.collectDataList.push(model);
 
       //   uni.navigateTo({
       //     url: "/pages/business/mhxf/xunJian/collect/index",
@@ -102,7 +100,7 @@ onMounted(() => {});
 </style>
 
 <style scoped>
-.whiteBackgroundColor {
+.bg-white {
   background-color: #ffffff;
 }
 

+ 4 - 4
src/pages/business/mhxf/xunJian/collect/components/collectRecord.vue

@@ -3,7 +3,7 @@
     <view class="example-body" v-if="show">
       <uni-datetime-picker v-model="datetimerange" type="daterange" rangeSeparator="~" @change="confirm" />
     </view>
-    <view v-for="(cu, index) in dataList.siteList" :key="index" class="whiteBackgroundColor" style="display: flex; padding: 15px 0px 15px 15px; margin-bottom: 15px">
+    <view v-for="(cu, index) in dataList.siteList" :key="index" class="bg-white" style="display: flex; padding: 15px 0px 15px 15px; margin-bottom: 15px">
       <view class="reportLeft">
         <u-image style="margin: auto" width="40" height="40" src="@/static/images/xunjian/scan.png" v-if="cu.siteType == 1" shape="circle"></u-image>
 
@@ -33,11 +33,11 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
-import xunJianStore from "@/store/modules/xunJian";
+import { xunJianStores } from "@/store/modules/index";
 
 import { siteList } from "@/api/business/mhxf/xunJian/collect.js";
 
-const xunjianStore = xunJianStore(); //全局变量值Store
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
 
@@ -103,7 +103,7 @@ onMounted(() => {
 </style>
 
 <style scoped>
-.whiteBackgroundColor {
+.bg-white {
   background-color: #ffffff;
 }
 

+ 10 - 18
src/pages/business/mhxf/xunJian/collect/index.vue

@@ -3,14 +3,14 @@
     <!-- 按组使用 -->
     <uni-swipe-action>
       <uni-swipe-action-item
-        v-for="(cu, index) in xunjianStore.collectDataList"
+        v-for="(cu, index) in xunJianStore.collectDataList"
         :key="index"
         :right-options="options"
         @click="bindClick($event, index)"
         @change="swipeChange($event, index)"
         style="margin-bottom: 15px"
       >
-        <view class="whiteBackgroundColor" style="display: flex; padding: 15px 0px 15px 15px">
+        <view class="bg-white" style="display: flex; padding: 15px 0px 15px 15px">
           <view class="reportLeft">
             <u-image style="margin: auto" width="40" height="40" src="@/static/images/xunjian/scan.png" v-if="cu.siteType == 1" shape="circle"></u-image>
 
@@ -51,19 +51,18 @@
       ></uni-popup-message>
     </uni-popup>
 
-    <u-empty marginTop="20%" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png" v-if="xunjianStore.collectDataList.length <= 0"> </u-empty>
+    <u-empty marginTop="20%" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png" v-if="xunJianStore.collectDataList.length <= 0"> </u-empty>
   </scroll-view>
 </template>
 
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
+import { xunJianStores } from "@/store/modules/index";
 
 import { addSite } from "@/api/business/mhxf/xunJian/collect.js";
 
-import xunJianStore from "@/store/modules/xunJian";
-const xunjianStore = xunJianStore(); //全局变量值Store
-
+const xunJianStore = xunJianStores(); //全局变量值Store
 const { proxy } = getCurrentInstance();
 
 /**
@@ -143,7 +142,7 @@ function handleInsert(e) {
         messageList.color = "#09bb07";
         message.value.open();
 
-        xunjianStore.collectDataList.splice(xunjianStore.collectDataList.indexOf(e), 1);
+        xunJianStore.collectDataList.splice(xunJianStore.collectDataList.indexOf(e), 1);
       } else {
       }
     });
@@ -163,7 +162,7 @@ const options = ref([
  * @左滑删除点击事件
  */
 function bindClick(e, index) {
-  xunjianStore.collectDataList.splice(index, 1);
+  xunJianStore.collectDataList.splice(index, 1);
 }
 
 /**
@@ -171,9 +170,9 @@ function bindClick(e, index) {
  */
 function swipeChange(e, index) {
   if (e == "right") {
-    xunjianStore.collectDataList[index].swipeBool = true;
+    xunJianStore.collectDataList[index].swipeBool = true;
   } else {
-    xunjianStore.collectDataList[index].swipeBool = false;
+    xunJianStore.collectDataList[index].swipeBool = false;
   }
 }
 
@@ -206,14 +205,7 @@ onMounted(() => {});
 </style>
 
 <style scoped>
-body,
-uni-page-body,
-uni-page-refresh,
-.grayBackgroundColor {
-  background: rgb(241, 241, 241);
-}
-
-.whiteBackgroundColor {
+.bg-white {
   background-color: #ffffff;
 }
 

+ 52 - 58
src/pages/business/mhxf/xunJian/plan/components/content.vue

@@ -1,8 +1,8 @@
 <template>
-  <scroll-view scroll-y>
-    <view>
-      <view class="whiteBackgroundColor" style="padding: 15px; margin-bottom: 15px" v-for="(con, index) in contentList" :key="index">
-        <view class="siteHeader">
+  <scroll-view scroll-y :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+    <view class="xunjian-plan-content">
+      <view class="bg-white padding-15 margin-bottom-15" v-for="(con, index) in contentList" :key="index">
+        <view class="flex margin-bottom-10">
           <uni-section :title="con.contentTitle" type="line"></uni-section>
 
           <view style="margin: auto"> </view>
@@ -10,7 +10,7 @@
           <u-button v-if="con.remarksBool == false" type="primary" icon="list-dot" style="width: 18px; height: 18px; padding: 0; margin: 0" shape="circle" @click="remarksClick(index)"> </u-button>
         </view>
         <view>
-          <view v-if="con.submissionMethod == 1" style="margin-top: 15px">
+          <view class="margin-top-15" v-if="con.submissionMethod == 1">
             <u-checkbox-group
               v-model="con.contentOptionListValue1"
               @change="
@@ -18,10 +18,11 @@
                   checkboxChange(val, index);
                 }
               "
-              :disabled="xunjianStore.contentArray.siteList.inspectionStatus == 2"
+              :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2"
+              :activeColor="proxy.$settingStore.themeColor.color"
             >
               <u-row style="width: 100%; flex-wrap: wrap">
-                <u-col v-for="option in con.contentOptionList" :key="option" span="6" style="margin-bottom: 15px">
+                <u-col class="margin-bottom-15" v-for="option in con.contentOptionList" :key="option" :span="6">
                   <u-checkbox :label="option.optionName" :name="option.id" :checked="con.contentOptionListValue1.length > 0 ? con.contentOptionListValue1.indexOf(option.id) >= 0 : false">
                   </u-checkbox>
                 </u-col>
@@ -29,54 +30,45 @@
             </u-checkbox-group>
 
             <view v-if="con.remarksBool == true" style="display: flex; height: 32px; line-height: 32px; white-space: nowrap">
-              <span style="">备注:</span>
-              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunjianStore.contentArray.siteList.inspectionStatus == 2"></u-input>
+              <span>备注:</span>
+              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2"></u-input>
             </view>
           </view>
-          <view v-if="con.submissionMethod == 2" style="margin-top: 15px">
-            <u-radio-group placement="row" v-model="con.contentOptionListValue">
+          <view class="margin-top-15" v-if="con.submissionMethod == 2">
+            <u-radio-group placement="row" v-model="con.contentOptionListValue" :activeColor="proxy.$settingStore.themeColor.color">
               <u-row style="width: 100%; flex-wrap: wrap">
-                <u-col v-for="option in con.contentOptionList" :key="option" :span="6" style="margin-bottom: 15px">
-                  <u-radio :disabled="xunjianStore.contentArray.siteList.inspectionStatus == 2" :label="option.optionName" :name="option.id"> </u-radio>
+                <u-col class="margin-bottom-15" v-for="option in con.contentOptionList" :key="option" :span="6">
+                  <u-radio :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2" :label="option.optionName" :name="option.id"> </u-radio>
                 </u-col>
               </u-row>
             </u-radio-group>
 
             <view v-if="con.remarksBool == true" style="display: flex; height: 32px; line-height: 32px; white-space: nowrap">
-              <span style="">备注:</span>
-              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunjianStore.contentArray.siteList.inspectionStatus == 2"></u-input>
+              <span>备注:</span>
+              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2"></u-input>
             </view>
           </view>
-          <view v-if="con.submissionMethod == 3" style="margin-top: 15px">
-            <u-textarea v-model="con.contentOptionListValue" placeholder="请输入" maxlength="30" :disabled="xunjianStore.contentArray.siteList.inspectionStatus == 2"></u-textarea>
+          <view class="margin-top-15" v-if="con.submissionMethod == 3">
+            <u-textarea
+              class="margin-bottom-15"
+              v-model="con.contentOptionListValue"
+              placeholder="请输入"
+              maxlength="30"
+              :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2"
+            ></u-textarea>
 
-            <view v-if="con.remarksBool == true" style="display: flex; margin-top: 15px; height: 32px; line-height: 32px; white-space: nowrap">
-              <span style="">备注:</span>
-              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunjianStore.contentArray.siteList.inspectionStatus == 2"></u-input>
+            <view v-if="con.remarksBool == true" style="display: flex; height: 32px; line-height: 32px; white-space: nowrap">
+              <span>备注:</span>
+              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2"></u-input>
             </view>
           </view>
         </view>
       </view>
-
-      <view style="margin-bottom: 125px"></view>
     </view>
-    <view style="position: fixed; left: 0; right: 0; bottom: 0; padding: 15px">
-      <view>
-        <u-button
-          v-if="xunjianStore.contentArray.siteList.inspectionStatus == 1"
-          type="primary"
-          style="width: 100%; height: 40px; font-size: 14px; margin-bottom: 15px"
-          shape="circle"
-          @click="buttonClick(1)"
-        >
-          上一步
-        </u-button>
-      </view>
-      <view>
-        <u-button v-if="xunjianStore.contentArray.siteList.inspectionStatus == 1" type="primary" style="width: 100%; height: 40px; font-size: 14px" shape="circle" @click="buttonClick(2)">
-          提交
-        </u-button>
-      </view>
+    <view class="app-position-fixed">
+      <u-button class="app-buttom" v-if="xunJianStore.contentArray.siteList.inspectionStatus == 1" type="primary" shape="circle" @click="buttonClick(1)"> 上一步 </u-button>
+
+      <u-button class="app-buttom" v-if="xunJianStore.contentArray.siteList.inspectionStatus == 1" type="primary" shape="circle" @click="buttonClick(2)"> 提交 </u-button>
     </view>
 
     <u-modal ref="uModal" :show="show" :title="title" :content="content" @confirm="confirm"></u-modal>
@@ -86,13 +78,12 @@
 <script setup>
 import { onLoad, onShow } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
+import { publicStores, xunJianStores } from "@/store/modules/index";
 
 import { updatePlan } from "@/api/business/mhxf/xunJian/plan.js";
 
-import xunJianStore from "@/store/modules/xunJian";
-
 const BASE_URL = inject("$BASE_URL");
-const xunjianStore = xunJianStore(); //全局变量值Store
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
 
@@ -106,7 +97,7 @@ function checkboxChange(value, index) {
  * @备注显示事件
  */
 function remarksClick(index) {
-  xunjianStore.contentArray.contentList[index].remarksBool = true;
+  xunJianStore.contentArray.contentList[index].remarksBool = true;
 }
 
 /**
@@ -170,15 +161,15 @@ async function buttonClick(type) {
     }
 
     const array = {
-      siteType: xunjianStore.contentArray.siteList.siteType,
-      siteNubmber: xunjianStore.contentArray.siteList.siteNubmber,
-      siteName: xunjianStore.contentArray.siteList.siteName,
+      siteType: xunJianStore.contentArray.siteList.siteType,
+      siteNubmber: xunJianStore.contentArray.siteList.siteNubmber,
+      siteName: xunJianStore.contentArray.siteList.siteName,
       siteStatus: 1, //定位 (0:未定位 1:已定位)
-      longitude: xunjianStore.contentArray.siteList.longitude,
-      latitude: xunjianStore.contentArray.siteList.latitude,
-      planSonId: xunjianStore.contentArray.siteList.planSonId,
-      siteId: xunjianStore.contentArray.siteList.id,
-      recordPictureList: xunjianStore.contentArray.siteList.recordPictureList,
+      longitude: xunJianStore.contentArray.siteList.longitude,
+      latitude: xunJianStore.contentArray.siteList.latitude,
+      planSonId: xunJianStore.contentArray.siteList.planSonId,
+      siteId: xunJianStore.contentArray.siteList.id,
+      recordPictureList: xunJianStore.contentArray.siteList.recordPictureList,
       recordOptionList: recordOptionList,
     };
 
@@ -194,9 +185,9 @@ async function buttonClick(type) {
 }
 
 onLoad((options) => {
-  contentList.value = xunjianStore.contentArray.contentList;
+  contentList.value = xunJianStore.contentArray.contentList;
 
-  if (xunjianStore.contentArray.siteList.inspectionStatus == 2) {
+  if (xunJianStore.contentArray.siteList.inspectionStatus == 2) {
     if (contentList.value.length > 0) {
       contentList.value.forEach((el) => {
         el.contentOptionListValue1 = [];
@@ -237,10 +228,13 @@ onMounted(() => {});
 </script>
 
 <style lang="scss">
-.siteHeader {
-  display: flex;
-  height: 18px;
-  line-height: 18px;
-  margin-bottom: 10px;
+.xunjian-plan-content {
+  //#ifdef H5
+  margin-bottom: 125px;
+  //#endif
+
+  //#ifdef APP-PLUS
+  margin-bottom: 130px;
+  //#endif
 }
 </style>

+ 8 - 8
src/pages/business/mhxf/xunJian/plan/components/drawer.vue

@@ -1,7 +1,7 @@
 <template>
-  <u-popup :show="scanBool" @close="close" @open="open" mode="bottom">
+  <u-popup :show="scanBool" @close="close" @open="open" mode="bottom" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
     <template #default>
-      <view style="margin-bottom: 15px; margin-top: 15px">
+      <view class="margin-bottom-15 margin-top-15">
         <h4 style="font-size: 16px; color: #149eff; text-align: center; margin-bottom: 10px">请选择计划</h4>
         <view style="font-size: 12px; color: #b7b7b7; text-align: center"> 当前地点存在于多个计划,请选择目标计划 </view>
       </view>
@@ -28,9 +28,9 @@
 <script setup>
 import { onLoad, onShow } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, watchEffect } from "vue";
+import { publicStores, xunJianStores } from "@/store/modules/index";
 
-import xunJianStore from "@/store/modules/xunJian";
-const xunjianStore = xunJianStore(); //全局变量值Store
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 const props = defineProps({
   scanArray: {
@@ -52,10 +52,10 @@ const scanBool = ref(false);
  * @按钮点击事件
  */
 function reportClick(siteId, planSonId) {
-  xunjianStore.contentArray = {};
-  xunjianStore.siteNubmber = undefined;
-  xunjianStore.siteId = siteId;
-  xunjianStore.planSonId = planSonId;
+  xunJianStore.contentArray = {};
+  xunJianStore.siteNubmber = undefined;
+  xunJianStore.siteId = siteId;
+  xunJianStore.planSonId = planSonId;
 
   uni.navigateTo({
     url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",

+ 27 - 21
src/pages/business/mhxf/xunJian/plan/components/report.vue

@@ -1,6 +1,6 @@
 <template>
   <scroll-view scroll-y>
-    <view class="whiteBackgroundColor" style="display: flex; padding: 15px 0px 15px 15px; margin-bottom: 15px" v-for="cu in currentDateList" :key="cu">
+    <view class="margin-bottom-15 bg-white" style="display: flex; padding: 15px 0px 15px 15px" v-for="cu in currentDateList" :key="cu">
       <view class="reportLeft" @click="pulicClick(cu)">
         <u-image style="margin: auto" width="40" height="40" src="@/static/images/xunjian/scan.png" v-if="cu.siteType == 1" shape="circle"></u-image>
 
@@ -63,19 +63,21 @@
 <script setup>
 import { onLoad, onShow } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
+import { publicStores, xunJianStores } from "@/store/modules/index";
 
 import { recordList, recordOption, siteDetails, planSonSiteDetails } from "@/api/business/mhxf/xunJian/plan.js";
 
-import xunJianStore from "@/store/modules/xunJian";
-const xunjianStore = xunJianStore(); //全局变量值Store
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
 
 function pulicClick(obj) {
   if (obj.inspectionStatus == 2) {
+    xunJianStore.contentArray = {};
+
     recordList({
       siteId: obj.id,
-      planSonId: xunjianStore.planSonId,
+      planSonId: xunJianStore.planSonId,
     }).then((res) => {
       if (res.status == "SUCCESS") {
         if (res.data.length > 0) {
@@ -86,26 +88,30 @@ function pulicClick(obj) {
             res.data[0].inspectionStatus = 2;
             res.data[0].pictureUrl = obj.pictureUrl;
 
-            xunjianStore.contentArray = {
+            xunJianStore.contentArray = {
               contentList: [res1.data.contentList],
               siteList: res.data[0],
             };
-            xunjianStore.siteId = undefined;
-            xunjianStore.siteNubmber = undefined;
+            xunJianStore.siteId = undefined;
+            xunJianStore.siteNubmber = undefined;
+
+            uni.navigateTo({
+              url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
+            });
           });
         }
       } else {
       }
     });
   } else {
-    xunjianStore.contentArray = {};
-    xunjianStore.siteId = obj.id;
-    xunjianStore.siteNubmber = undefined;
-  }
+    xunJianStore.contentArray = {};
+    xunJianStore.siteId = obj.id;
+    xunJianStore.siteNubmber = undefined;
 
-  uni.navigateTo({
-    url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
-  });
+    uni.navigateTo({
+      url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
+    });
+  }
 }
 
 /**
@@ -122,14 +128,14 @@ async function scanClick() {
         icon: "none",
       });
 
-      xunjianStore.contentArray = {};
-      xunjianStore.siteId = undefined;
-      xunjianStore.siteNubmber = e.result;
+      xunJianStore.contentArray = {};
+      xunJianStore.siteId = undefined;
+      xunJianStore.siteNubmber = e.result;
 
       siteDetails({
-        siteId: xunjianStore.siteId,
-        siteNubmber: xunjianStore.siteNubmber,
-        planSonId: xunjianStore.planSonId,
+        siteId: xunJianStore.siteId,
+        siteNubmber: xunJianStore.siteNubmber,
+        planSonId: xunJianStore.planSonId,
       }).then((res) => {
         if (res.status == "SUCCESS") {
           currentDateList.value.forEach((e) => {
@@ -163,7 +169,7 @@ async function scanClick() {
 const currentDateList = ref([]); //地点列表list数据存储
 function currentApi() {
   planSonSiteDetails({
-    planSonId: xunjianStore.planSonId,
+    planSonId: xunJianStore.planSonId,
   }).then((res) => {
     if (res.status == "SUCCESS") {
       currentDateList.value = res.data;

+ 42 - 52
src/pages/business/mhxf/xunJian/plan/components/siteDetails.vue

@@ -1,31 +1,26 @@
 <template>
-  <scroll-view scroll-y>
-    <view>
-      <view class="whiteBackgroundColor" style="display: flex; padding: 15px; margin-bottom: 15px">
-        <view style="margin-right: 15px; display: flex">
-          <u-image style="margin: auto" width="40" height="40" src="@/static/images/xunjian/scan.png" v-if="siteList.siteType == 1" shape="circle"></u-image>
-
-          <u-image style="margin: auto" width="40" height="40" src="@/static/images/xunjian/NFC.png" v-if="siteList.siteType == 2" shape="circle"></u-image>
-        </view>
-        <view>
-          <view style="font-size: 15px; margin-bottom: 2px">
-            {{ siteList.siteName }}
-          </view>
+  <scroll-view scroll-y :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+    <view class="xunjian-plan-siteDetails">
+      <view class="flex bg-white padding-15 margin-bottom-15">
+        <u-image style="margin: auto 15px auto 0" width="40" height="40" src="@/static/images/xunjian/scan.png" v-if="siteList.siteType == 1" shape="circle"></u-image>
+        <u-image style="margin: auto 15px auto 0" width="40" height="40" src="@/static/images/xunjian/NFC.png" v-if="siteList.siteType == 2" shape="circle"></u-image>
+
+        <view style="margin: auto auto auto 0">
+          <view style="font-size: 15px; margin-bottom: 2px"> {{ siteList.siteName }} </view>
           <view style="font-size: 13px; color: #a1a1a1"> {{ siteList.contentCount }}项内容 </view>
         </view>
-        <view style="margin: auto"></view>
-        <view style="margin: auto 0">
+
+        <view style="margin: auto 0 auto 0">
           <!-- {{ siteList.siteStatus == null }} -->
           <view style="font-size: 15px; color: #30bb00">已定位</view>
           <!-- #f07d28 -->
         </view>
       </view>
 
-      <view class="whiteBackgroundColor" style="margin-bottom: 15px; padding: 15px">
-        <view class="siteHeader">
-          <uni-section title="上报现场" type="line"></uni-section>
-        </view>
-        <view style="display: flex; flex-wrap: wrap">
+      <view class="bg-white padding-15 margin-bottom-15">
+        <uni-section class="margin-bottom-10" title="上报现场" type="line"></uni-section>
+
+        <view class="flex flex-wrap">
           <view class="uploadView" v-for="record in siteList.recordPictureList" :key="record">
             <view class="uploadUimage">
               <u-image width="100%" height="100%" :src="record.pictureUrl"></u-image>
@@ -41,10 +36,9 @@
         </view>
       </view>
 
-      <view class="whiteBackgroundColor" style="margin-bottom: 15px; padding: 15px; height: 170px; max-height: 170px">
-        <view class="siteHeader">
-          <uni-section title="备注" type="line"></uni-section>
-        </view>
+      <view class="bg-white padding-15 margin-bottom-15" style="height: 170px; max-height: 170px">
+        <uni-section class="margin-bottom-10" title="备注" type="line"></uni-section>
+
         <view style="height: calc(100% - 25px)">
           <span v-if="siteList.inspectionStatus == 2">
             {{ siteList.remarks }}
@@ -54,23 +48,16 @@
         </view>
       </view>
 
-      <view class="whiteBackgroundColor" style="padding: 15px">
-        <view class="siteHeader">
-          <uni-section title="消防设施分布图" type="line"></uni-section>
-        </view>
-        <view>
-          <u-image width="100%" :src="siteList.pictureUrl"></u-image>
-        </view>
-      </view>
+      <view class="bg-white padding-15 margin-bottom-15">
+        <uni-section class="margin-bottom-10" title="消防设施分布图" type="line"></uni-section>
 
-      <view style="margin-bottom: 70px"></view>
+        <u-image width="100%" :src="siteList.pictureUrl"></u-image>
+      </view>
     </view>
-    <view style="position: fixed; left: 0; right: 0; bottom: 0; padding: 15px">
-      <view>
-        <u-button v-if="siteList.inspectionStatus == 1" type="primary" style="width: 100%; height: 40px; font-size: 14px" @click="buttonClick()" shape="circle"> 下一步 </u-button>
+    <view class="app-position-fixed">
+      <u-button v-if="siteList.inspectionStatus == 1" class="app-buttom" type="primary" @click="buttonClick()" shape="circle"> 下一步 </u-button>
 
-        <u-button v-if="siteList.inspectionStatus == 2" type="primary" style="width: 100%; height: 40px; font-size: 14px" @click="buttonClick()" shape="circle"> 查看巡检项 </u-button>
-      </view>
+      <u-button v-if="siteList.inspectionStatus == 2" class="app-buttom" type="primary" @click="buttonClick()" shape="circle"> 查看巡检项 </u-button>
     </view>
   </scroll-view>
 </template>
@@ -78,11 +65,11 @@
 <script setup>
 import { onLoad, onShow } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
+import { publicStores, xunJianStores } from "@/store/modules/index";
 
 import { uploadAvatar, siteDetails } from "@/api/business/mhxf/xunJian/plan.js";
 
-import xunJianStore from "@/store/modules/xunJian";
-const xunjianStore = xunJianStore(); //全局变量值Store
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
 
@@ -96,9 +83,9 @@ const siteList = ref([]);
 const contentList = ref([]);
 function selectAPI() {
   siteDetails({
-    siteId: xunjianStore.siteId,
-    siteNubmber: xunjianStore.siteNubmber,
-    planSonId: xunjianStore.planSonId,
+    siteId: xunJianStore.siteId,
+    siteNubmber: xunJianStore.siteNubmber,
+    planSonId: xunJianStore.planSonId,
   }).then((res) => {
     if (res.status == "SUCCESS") {
       contentList.value = res.data.contentList;
@@ -121,7 +108,7 @@ function selectAPI() {
  * @查看巡检项
  */
 function buttonClick() {
-  xunjianStore.contentArray = {
+  xunJianStore.contentArray = {
     contentList: contentList.value,
     siteList: siteList.value,
   };
@@ -170,11 +157,11 @@ function uploadViewClose(el) {
 }
 
 onLoad((options) => {
-  if (JSON.stringify(xunjianStore.contentArray) == "{}") {
+  if (JSON.stringify(xunJianStore.contentArray) == "{}") {
     selectAPI();
   } else {
-    contentList.value = xunjianStore.contentArray.contentList[0];
-    siteList.value = xunjianStore.contentArray.siteList;
+    contentList.value = xunJianStore.contentArray.contentList[0];
+    siteList.value = xunJianStore.contentArray.siteList;
   }
 });
 
@@ -186,12 +173,15 @@ onShow(() => {
 onMounted(() => {});
 </script>
 
-<style scoped>
-.siteHeader {
-  display: flex;
-  height: 20px;
-  line-height: 20px;
-  margin-bottom: 10px;
+<style lang="scss" scoped>
+.xunjian-plan-siteDetails {
+  //#ifdef H5
+  margin-bottom: 70px;
+  //#endif
+
+  //#ifdef APP-PLUS
+  margin-bottom: 75px;
+  //#endif
 }
 </style>
 

+ 104 - 140
src/pages/business/mhxf/xunJian/plan/index.vue

@@ -1,135 +1,97 @@
 <template>
   <scroll-view scroll-y>
-    <view>
-      <view>
-        <oa-calendar class="uni-calendar--hook" :selected="info.selected" :showMonth="false" @change="change" @monthSwitch="monthSwitch" :currentDate="currentDateList" />
+    <view class="xunjian-plan-container" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+      <!-- 日历组件 -->
+      <oa-calendar class="uni-calendar--hook" :selected="info.selected" :showMonth="false" @change="change" @monthSwitch="monthSwitch" :currentDate="currentDateList" />
+
+      <!-- 分段器组件 -->
+      <view class="app-subsection">
+        <u-subsection :list="list" :current="tabPosition" inactiveColor="#303133" :activeColor="proxy.$settingStore.themeColor.color" @change="tabPositionChange"></u-subsection>
       </view>
-      <view>
-        <view class="padding-sm" style="display: flex; margin: 10px; padding: 10px 5rem">
-          <u-subsection :list="list" :current="tabPosition" inactiveColor="#303133" activeColor="#3c9cff" @change="tabPositionChange"></u-subsection>
-        </view>
-        <view>
-          <view id="planTimeline1" v-if="activities.length > 0">
-            <view style="margin: 0px -3.5px; font-size: 13px; color: #409eff" @click="activitiesSortClick()"> 排序 </view>
-            <view v-for="(activity, index) in activities" :key="index" v-show="tabPosition == 0">
-              <view style="display: flex; height: 25px; line-height: 25px">
-                <view style="margin: auto 0">
-                  <u-icon name="info-circle-fill" color="#409eff" size="18"></u-icon>
-                </view>
-                <view style="display: flex; width: 100%; margin-left: 15px">
-                  <view style="font-size: 15px; color: #000000">
-                    {{ activity.planName }}
-                  </view>
-                  <view style="margin: auto"> </view>
-                  <view style="font-size: 14px; color: #b5b5b5">
-                    {{ activity.timestamp }}
-                  </view>
-                </view>
-              </view>
 
-              <view style="display: flex">
-                <view style="width: 18px; display: flex">
-                  <view v-if="index != activities.length - 1" style="width: 2px; background-color: #e4e7ed; margin: -5px auto"></view>
-                </view>
-                <view style="width: 100%; margin: 15px 0px 15px 15px; padding: 15px; background-color: #fff; border-radius: 10px">
-                  <view style="display: flex" v-if="activity.planStatus == 2">
-                    <view>
-                      <view>巡检任务结束</view>
-                      <br />
-                      <view style="padding: 0; font-size: 14px; color: #409eff" @click="reportClick(activity)"> 点击查看 </view>
-                    </view>
-                    <view style="margin: auto"></view>
-                    <view style="display: flex">
-                      <gb-progress originalColor="#f5f7fa" processColor="#20a0ff" innerbgColor="#fff" :process="activity.completion" :startPosDegree="60" :radius="50" :barWidth="10">
-                        {{ activity.completion + "%" }}
-                      </gb-progress>
-                    </view>
-                  </view>
-                  <view style="display: flex" v-if="activity.planStatus == 1">
-                    <view>
-                      <view>巡检任务执行中,还需完成 {{ activity.undetectedSiteCount }}个 </view>
-                      <br />
-                      <view @click="reportClick(activity)" style="padding: 0; font-size: 14px; color: #409eff"> 点击巡检 </view>
-                    </view>
-                    <view style="margin: auto"></view>
-                    <view style="display: flex">
-                      <gb-progress originalColor="#f5f7fa" processColor="#20a0ff" innerbgColor="#fff" :process="activity.completion" :startPosDegree="60" :radius="50" :barWidth="10">
-                        {{ activity.completion + "%" }}
-                      </gb-progress>
-                    </view>
-                  </view>
-                  <view style="display: flex" v-if="activity.planStatus == 3">
-                    <view>
-                      <view>巡检任务结束</view>
-                      <br />
-                      <view>
-                        <span style="margin-right: 20px">
-                          合格:
-                          <span style="color: #00cdac">
-                            {{ activity.patrolledSiteCount }}
-                          </span>
-                        </span>
-                        <span>
-                          漏检:
-                          <span style="color: #f07d28">
-                            {{ activity.undetectedSiteCount }}
-                          </span>
-                        </span>
-                      </view>
-                    </view>
-                    <view style="margin: auto"></view>
-                    <view style="display: flex">
-                      <gb-progress originalColor="#f5f7fa" processColor="#20a0ff" innerbgColor="#fff" :process="activity.completion" :startPosDegree="60" :radius="50" :barWidth="10">
-                        {{ activity.completion + "%" }}
-                      </gb-progress>
-                    </view>
-                  </view>
-                </view>
-              </view>
+      <!-- 内容 -->
+      <oa-timeLine v-if="activities.length > 0" :fontColor="proxy.$settingStore.themeColor.color" :sort="activitiesSort" @activitiesSortChange="activitiesSortChange">
+        <oa-timeLine-item
+          v-for="(ac, index) in activities"
+          :key="index"
+          :titleValue="ac.planName"
+          :timeValue="ac.timestamp"
+          :iconColor="proxy.$settingStore.themeColor.color"
+          v-show="tabPosition == 0"
+        >
+          <view style="display: flex" v-if="ac.planStatus == 2">
+            <view>
+              <view>巡检任务结束</view>
+              <br />
+              <view style="padding: 0; font-size: 14px" :style="{ color: proxy.$settingStore.themeColor.color }" @click="reportClick(ac)"> 点击查看 </view>
             </view>
-
-            <view v-for="(activity, index) in activities" :key="index" v-show="tabPosition == 1">
-              <view style="display: flex; height: 25px; line-height: 25px">
-                <view style="margin: auto 0">
-                  <u-icon name="info-circle-fill" color="#409eff" size="18"></u-icon>
-                </view>
-                <view style="display: flex; width: 100%; margin-left: 15px">
-                  <view style="font-size: 15px; color: #000000">
-                    {{ activity.areaName }}
-                  </view>
-                  <view style="margin: auto"> </view>
-                  <view style="font-size: 14px; color: #b5b5b5">
-                    {{ activity.createTime }}
-                  </view>
-                </view>
+            <view style="margin: auto"></view>
+            <view style="display: flex">
+              <c-progress-circle style="margin: auto" :progress="ac.completion / 100" :color="proxy.$settingStore.themeColor.color" size="100rpx" boderWidth="100rpx"></c-progress-circle>
+            </view>
+          </view>
+          <view style="display: flex" v-if="ac.planStatus == 1">
+            <view>
+              <view>巡检任务执行中,还需完成 {{ ac.undetectedSiteCount }}个 </view>
+              <br />
+              <view style="padding: 0; font-size: 14px" :style="{ color: proxy.$settingStore.themeColor.color }" @click="reportClick(ac)"> 点击巡检 </view>
+            </view>
+            <view style="margin: auto"></view>
+            <view style="display: flex">
+              <c-progress-circle style="margin: auto" :progress="ac.completion / 100" :color="proxy.$settingStore.themeColor.color" size="100rpx" boderWidth="100rpx"></c-progress-circle>
+            </view>
+          </view>
+          <view style="display: flex" v-if="ac.planStatus == 3">
+            <view>
+              <view>巡检任务结束</view>
+              <br />
+              <view>
+                <span style="margin-right: 20px">
+                  合格:
+                  <span style="color: #00cdac">
+                    {{ ac.patrolledSiteCount }}
+                  </span>
+                </span>
+                <span>
+                  漏检:
+                  <span style="color: #f07d28">
+                    {{ ac.undetectedSiteCount }}
+                  </span>
+                </span>
               </view>
+            </view>
+            <view style="margin: auto"></view>
+            <view style="display: flex">
+              <c-progress-circle style="margin: auto" :progress="ac.completion / 100" :color="proxy.$settingStore.themeColor.color" size="100rpx" boderWidth="100rpx"></c-progress-circle>
+            </view>
+          </view>
+        </oa-timeLine-item>
 
-              <view style="display: flex">
-                <view style="width: 18px; display: flex">
-                  <view v-if="index != activities.length - 1" style="width: 2px; background-color: #e4e7ed; margin: -5px auto"></view>
-                </view>
-                <view style="width: 100%; margin: 15px 0px 15px 15px; padding: 15px; background-color: #fff; border-radius: 10px">
-                  <view style="display: flex">
-                    <view>
-                      <view>已检查{{ activity.contentCount }}项内容</view>
-                      <br />
-                      <view style="padding: 0; font-size: 14px; color: #409eff" @click="reportClick(activity)"> 点击查看 </view>
-                    </view>
-                    <view style="margin: auto"></view>
-                    <view style="display: flex; font-size: 15px; color: #30bb00">
-                      <view style="margin: auto">
-                        {{ activity.siteStatus == 0 ? "未定位" : "已定位" }}
-                      </view>
-                    </view>
-                  </view>
-                </view>
+        <oa-timeLine-item
+          v-for="(ac, index) in activities"
+          :key="index"
+          :titleValue="ac.areaName"
+          :timeValue="ac.createTime"
+          :iconColor="proxy.$settingStore.themeColor.color"
+          v-show="tabPosition == 1"
+        >
+          <view style="display: flex">
+            <view>
+              <view>已检查{{ ac.contentCount }}项内容</view>
+              <br />
+              <view style="padding: 0; font-size: 14px" :style="{ color: proxy.$settingStore.themeColor.color }" @click="reportClick(ac)"> 点击查看 </view>
+            </view>
+            <view style="margin: auto"></view>
+            <view style="display: flex; font-size: 15px; color: #30bb00">
+              <view style="margin: auto">
+                {{ ac.siteStatus == 0 ? "未定位" : "已定位" }}
               </view>
             </view>
           </view>
+        </oa-timeLine-item>
+      </oa-timeLine>
 
-          <view id="planTimeline" style="text-align: center; color: #bdbdbd; font-size: 14px" v-else> 暂无数据 </view>
-        </view>
-      </view>
+      <view id="planTimeline" style="text-align: center; color: #bdbdbd; font-size: 14px" v-else> 暂无数据 </view>
     </view>
 
     <view style="position: fixed; right: 0; bottom: 50px">
@@ -145,14 +107,12 @@ import drawer from "./components/drawer.vue";
 
 import { onLoad, onShow, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
+import { publicStores, xunJianStores } from "@/store/modules/index";
 
 import { recordList, recordOption, planList, patrolInspectionPlan, appPlanStatistics } from "@/api/business/mhxf/xunJian/plan.js";
 
-import publicStore from "@/store/modules/public";
-import xunJianStore from "@/store/modules/xunJian";
-
-const publicStores = publicStore(); //全局公共Store
-const xunjianStore = xunJianStore(); //全局变量值Store
+const publicStore = publicStores(); //全局公共Store
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
 
@@ -186,7 +146,7 @@ function monthSwitch(e) {
  */
 function reportClick(obj) {
   if (tabPosition.value == 0) {
-    xunjianStore.planSonId = obj.id;
+    xunJianStore.planSonId = obj.id;
     uni.navigateTo({
       url: "/pages/business/mhxf/xunJian/plan/components/report",
     });
@@ -204,12 +164,12 @@ function reportClick(obj) {
             res.data[0].inspectionStatus = 2;
             res.data[0].pictureUrl = obj.pictureUrl;
 
-            xunjianStore.contentArray = {
+            xunJianStore.contentArray = {
               contentList: [res1.data.contentList],
               siteList: res.data[0],
             };
-            xunjianStore.siteId = undefined;
-            xunjianStore.siteNubmber = undefined;
+            xunJianStore.siteId = undefined;
+            xunJianStore.siteNubmber = undefined;
 
             uni.navigateTo({
               url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
@@ -235,7 +195,7 @@ function scanClick() {
         title: "扫码成功",
         icon: "none",
       });
-      xunjianStore.inspectionStatus = 1;
+      xunJianStore.inspectionStatus = 1;
 
       planList({
         siteNubmber: e.result,
@@ -335,7 +295,7 @@ function activitiesApi() {
  * @统计
  * @api接口请求
  */
-const currentDate = ref(publicStores.getDate().year + "-" + publicStores.getDate().month + "-" + publicStores.getDate().dates); //统计时间数据存储
+const currentDate = ref(publicStore.getDate().year + "-" + publicStore.getDate().month + "-" + publicStore.getDate().dates); //统计时间数据存储
 const currentDatevalue = ref(new Date());
 const currentDateList = ref({}); //统计list数据存储
 function currentApi() {
@@ -353,12 +313,8 @@ function currentApi() {
  * @排序按钮
  */
 const activitiesSort = ref("DESC");
-function activitiesSortClick() {
-  if (activitiesSort.value == "ASC") {
-    activitiesSort.value = "DESC";
-  } else {
-    activitiesSort.value = "ASC";
-  }
+function activitiesSortChange(val) {
+  activitiesSort.value = val;
   activitiesApi();
 }
 
@@ -366,7 +322,7 @@ function activitiesSortClick() {
  * @tabs切换change事件
  */
 const list = ref(["巡检任务", "巡检记录"]);
-const tabPosition = ref(xunjianStore.planTabs);
+const tabPosition = ref(xunJianStore.planTabs);
 function tabPositionChange(index) {
   tabPosition.value = index;
   activitiesApi();
@@ -391,8 +347,16 @@ onShow(() => {
 onMounted(() => {});
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .is-selected {
   color: #1989fa;
 }
+
+.xunjian-plan-container {
+  .app-subsection {
+    display: flex;
+    margin: 10px;
+    padding: 10px 5rem;
+  }
+}
 </style>

+ 1 - 2
src/pages/business/mhxf/xunJian/record/recordDetail/index.vue

@@ -87,8 +87,7 @@
 <script setup>
 import { onLoad, onShow, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
-
-import xunJianStore from "@/store/modules/xunJian";
+import { publicStores, xunJianStores } from "@/store/modules/index";
 
 import { getInspectionRecordDetails } from "@/api/business/mhxf/xunJian/record.js";
 

+ 6 - 7
src/pages/business/mhxf/xunJian/xunJian.vue

@@ -44,30 +44,29 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, reactive, computed, onMounted, getCurrentInstance, toRefs, inject } from "vue";
+import { xunJianStores, publicStores } from "@/store/modules/index";
 
 import chart from "./components/echarts/chart.vue";
 import json from "@/static/js/json.js";
 
 import { appPlanStatistics } from "@/api/business/mhxf/xunJian/index.js";
 
-import publicStore from "@/store/modules/public";
-import xunJianStore from "@/store/modules/xunJian";
-const publicStores = publicStore(); //全局公共Store
-const xunjianStore = xunJianStore(); //全局变量值Store
+const publicStore = publicStores(); //全局公共Store
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
 
 const inspectList = json.xunJianList; //九宫格json数据
 
-const currentDate = publicStores.getDate().year + "-" + publicStores.getDate().month + "-" + publicStores.getDate().dates;
+const currentDate = publicStore.getDate().year + "-" + publicStore.getDate().month + "-" + publicStore.getDate().dates;
 const currentDateList = ref([]);
 
 function navItemClick(url, id) {
   if (url) {
     if (id == 1) {
-      xunjianStore.planTabs = 0;
+      xunJianStore.planTabs = 0;
     } else if (id == 2) {
-      xunjianStore.planTabs = 1;
+      xunJianStore.planTabs = 1;
     }
 
     uni.navigateTo({

+ 1 - 1
src/pages/business/zhxf/building/index.vue

@@ -98,10 +98,10 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { getBuildingManagement } from "@/api/setting/building.js";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 1 - 1
src/pages/business/zhxf/funReport/funcAdd/index.vue

@@ -49,10 +49,10 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onReachBottom, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, watchEffect, getCurrentInstance, watch } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { del, index } from "@/api/setting/funReport.js";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 1 - 1
src/pages/business/zhxf/funReport/index.vue

@@ -69,10 +69,10 @@
 import json from "@/static/js/json.js";
 import { onLoad, onShow, onReady, onHide, onLaunch, onReachBottom, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, watchEffect, getCurrentInstance } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { del, index } from "@/api/setting/funReport.js";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 1 - 4
src/pages/business/zhxf/messagePush/index.vue

@@ -20,10 +20,10 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { setperm } from "@/api/setting/index.js";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();
@@ -207,7 +207,4 @@ onReady(() => {
     margin-left: 10rpx;
   }
 }
-
-.padding-sm {
-}
 </style>

+ 1 - 1
src/pages/common/export/index.vue

@@ -53,8 +53,8 @@
 import config from "@/config";
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject, watchEffect } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 1 - 1
src/pages/common/textview/index.vue

@@ -9,8 +9,8 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 1 - 1
src/pages/common/textview/index1.vue

@@ -7,8 +7,8 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 1 - 1
src/pages/common/webview/index.vue

@@ -7,8 +7,8 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 4 - 5
src/pages/index.vue

@@ -19,7 +19,7 @@
   </u-navbar>
 
   <!-- <pagesHarder></pagesHarder> -->
-  <view class="home-container" :style="{ height: `calc(100vh - ${proxy.$settingStore.barHightTop} )` }">
+  <view class="home-container" :style="{ height: `calc(100vh - (50.67px + ${proxy.$settingStore.barHightTop}))` }">
     <!-- <u-loadmore :status="arrayList.loadStatus" loadingText="" loadmoreText="" :icon="true" /> -->
     <view class="uni-content-body">
       <!-- 下拉列表 开始 -->
@@ -101,13 +101,12 @@ import * as jwx from "@/utils/jssdk.js"; //引入js sdk的封装
 import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance } from "vue";
 import { getToken } from "@/utils/auth";
-import useStores from "@/store/modules/user.js";
-import publicStore from "@/store/modules/public";
+import { useStores, publicStores } from "@/store/modules/index";
 
 import { scan_push, getHomePageData, getFunctionalModuleStatistics, getAppRouters, qrCodeSend, getMobileBanner } from "@/api/index";
 
 const useStore = useStores();
-const publicStores = publicStore(); //全局公共Store
+const publicStore = publicStores(); //全局公共Store
 const BASE_URL = inject("$BASE_URL");
 const { proxy } = getCurrentInstance();
 
@@ -296,7 +295,7 @@ function navItemClick(item) {
       });
     }
 
-    arrayList.recentlyUsed = publicStores.sortEvent(arrayList.recentlyUsed, 1);
+    arrayList.recentlyUsed = publicStore.sortEvent(arrayList.recentlyUsed, 1);
 
     uni.setStorageSync(useStore.$state.name + useStore.$state.tenantId, arrayList.recentlyUsed);
 

+ 72 - 31
src/pages/info/info.vue

@@ -16,12 +16,13 @@
     </template>
   </u-navbar>
 
-  <scroll-view class="bg-white info-wrapper" scroll-y style="height: calc(100vh - 94.67px)">
-    <u-sticky style="top: 0px">
-      <view class="padding-sm" :class="'bg-' + proxy.$settingStore.themeColor.name">
-        <u--input placeholder="搜索" prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" customStyle="height:35px;background-color:#f5f6fa;"></u--input>
-      </view>
-    </u-sticky>
+  <u-sticky style="top: 0px">
+    <view class="padding-lr" :class="'bg-' + proxy.$settingStore.themeColor.name" style="padding-top: 10px; padding-bottom: 10px">
+      <u--input placeholder="搜索" prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" customStyle="height:35px;background-color:#f5f6fa;"></u--input>
+    </view>
+  </u-sticky>
+
+  <scroll-view class="bg-white info-wrapper" scroll-y :style="`height: calc(100vh - (105.67px + ${proxy.$settingStore.barHightTop}))`">
     <!-- <view class="uni-content-header">
       <view class="padding-lr-sm padding-top-sm" style="width: 100%; height: 290rpx">
         <image class="radius" style="width: 100%; height: 100%" src="@/static/images/info/info-bg.png" mode="scaleToFill"></image>
@@ -29,35 +30,39 @@
     </view> -->
 
     <view class="uni-content-body">
-      <view class="cu-list menu-avatar padding-lr-sm padding-top-sm">
-        <view class="cu-item margin-bottom-sm" @tap="goFireBase()">
+      <view class="uni-list padding" @tap="goFireBase()">
+        <view class="uni-avatar">
+          <image class="image-bg" src="@/static/images/info/fireBase.png" />
+        </view>
+        <view class="uni-content">
+          <view class="uni-item">
+            <view class="uni-item-cont text-dfl" style="color: #000000">消防知识库</view>
+            <view class="uni-item-right text-sm" style="color: #666666">5月15日</view>
+          </view>
+          <view class="uni-item" style="display: flex">
+            <view class="uni-item-cont text-df" style="color: #666666">您收到一条最新消息,请及时查看</view>
+            <view class="uni-item-right text-df" style="color: #666666">1</view>
+          </view>
+        </view>
+      </view>
+
+      <!-- <view class="cu-list menu-avatar padding-lr-sm padding-top-sm">
+        <view class="cu-item" @tap="goPushList()">
           <view class="cu-avatar">
-            <image class="image-bg" src="@/static/images/info/fireBase.png" />
+            <image class="image-bg" src="@/static/images/info/pushList.png" />
           </view>
           <view class="content">
-            <view class="">消防知识库</view>
+            <view class="">消息推送</view>
           </view>
           <view class="nav-right">
             <view class="text-grey">
-              <text class="icon iconfont margin-right-xs margin-left-lg"> &#xe629; </text>
+              <text class="icon iconfont margin-right-xs margin-left-lg">&#xe629;</text>
             </view>
           </view>
         </view>
+      </view> -->
 
-        <!-- <view style="height: 800px"></view> -->
-
-        <!-- <view class="cu-item " @tap="goPushList()">
-				<view class="cu-avatar " style="background-image:url(@/static/images/info/pushList.png)"></view>
-				<view class="content">
-					<view class="">消息推送</view>
-				</view>
-				<view class="nav-right">
-					<view class="text-grey">
-						<text class="icon iconfont margin-right-xs margin-left-lg">&#xe629;</text>
-					</view>
-				</view>
-			</view> -->
-      </view>
+      <!-- <view style="height: 800px"></view> -->
     </view>
   </scroll-view>
 
@@ -93,14 +98,12 @@ onLoad((options) => {
 });
 </script>
 
-<style lang="scss">
-//消息页面
-.image-bg {
-  width: 100%;
-  height: 100%;
+<style lang="scss" scoped>
+:deep(.u-navbar__content__left) {
+  padding: 30upx;
 }
 
-//分析页面
+//消息页面
 .info-wrapper {
   .cu-list.menu-avatar .cu-item {
     border-radius: 5px;
@@ -109,12 +112,50 @@ onLoad((options) => {
     .cu-avatar {
       background-color: rgba(0, 0, 0, 0);
       left: 26rpx;
+
+      .image-bg {
+        width: 100%;
+        height: 100%;
+      }
     }
 
     .content {
+      // width: 100%;
       left: 130rpx;
       font-size: 32rpx;
     }
   }
 }
+
+.uni-list {
+  display: flex;
+
+  .uni-avatar {
+    margin: auto 20upx auto 0;
+    .image-bg {
+      width: 32px;
+      height: 32px;
+    }
+  }
+
+  .uni-content {
+    width: calc(100% - (32px + 0.625rem));
+    .uni-item {
+      display: flex;
+      line-height: 25px;
+      white-space: nowrap;
+
+      .uni-item-cont {
+        margin-right: auto;
+        overflow: hidden;
+        text-overflow: ellipsis;
+      }
+
+      .uni-item-right {
+        width: auto;
+        text-align: right;
+      }
+    }
+  }
+}
 </style>

+ 7 - 7
src/pages/login.vue

@@ -47,7 +47,6 @@
         </u-input>
       </view>
 
-      <!--  -->
       <button class="submit" @click="submitRes">登 录</button>
 
       <view class="switchText">
@@ -75,14 +74,12 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
 import { reactive, getCurrentInstance, toRefs, inject } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 import { getToken, setToken, removeToken } from "@/utils/auth";
 import { getCodeImg } from "@/api/login";
 
-import publicStore from "@/store/modules/public.js";
-
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
-const publicStores = publicStore();
+const publicStore = publicStores();
 
 const { proxy } = getCurrentInstance();
 
@@ -270,6 +267,7 @@ function login(data) {
     /** 获取用户信息 */
     proxy.$modal.closeLoading();
     useStore.GetInfo().then((res) => {
+      proxy.$settingStore.tabbarValue = "/pages/index";
       proxy.$tab.reLaunch("/pages/index");
     });
   });
@@ -400,7 +398,9 @@ onLoad(() => {
         font-size: 20px;
         color: #000;
         max-width: 50%;
-        white-space: nowrap;
+        // white-space: nowrap;
+        // overflow: hidden; //超出的文本隐藏
+        // text-overflow: ellipsis; //溢出用省略号显示
       }
     }
 
@@ -492,7 +492,7 @@ onLoad(() => {
   .bottom {
     position: fixed;
     width: 100%;
-    bottom: 10px;
+    bottom: 20px;
     .title {
       text-align: center;
       color: #96a6b5;

+ 1 - 1
src/pages/mine/about/index.vue

@@ -55,8 +55,8 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 1 - 1
src/pages/mine/avatar/index.vue

@@ -55,10 +55,10 @@
 import config from "@/config";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
 import { onReady, onShow } from "@dcloudio/uni-app";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { uploadAvatar, updateUserProfile } from "@/api/system/user";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 3 - 2
src/pages/mine/help/index.vue

@@ -26,8 +26,8 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, computed, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();
@@ -107,6 +107,7 @@ onShow(() => {
     }
 
     .text-title {
+      display: flex;
       color: #303133;
       font-size: 32rpx;
       font-weight: bold;
@@ -114,7 +115,7 @@ onShow(() => {
 
       .iconfont {
         font-size: 16px;
-        margin-right: 10rpx;
+        margin: auto 10rpx auto 0;
       }
     }
 

+ 34 - 113
src/pages/mine/index.vue

@@ -1,7 +1,7 @@
 <template>
-  <view class="mine-container">
+  <view :data-theme="'theme-' + proxy.$settingStore.themeColor.name" class="mine-container" :style="{ height: `calc(100vh - 50.67px)` }">
     <!--顶部个人信息栏-->
-    <view class="header-section" :class="'bg-' + proxy.$settingStore.themeColor.name" :style="{ paddingTop: proxy.$settingStore.StatusBar ? proxy.$settingStore.StatusBar + 20 + 'px' : '55px' }">
+    <view class="header-section" :class="'bg-' + themeColor.name" :style="{ paddingTop: proxy.$settingStore.StatusBar ? proxy.$settingStore.StatusBar + 20 + 'px' : '55px' }">
       <view class="flex padding justify-between">
         <view class="flex align-center">
           <view v-if="!avatar" class="cu-avatar xl round bg-white" @click="handleToAvatar(1)">
@@ -35,47 +35,32 @@
       <image class="mine-image" src="@/static/images/mine/arc.png"></image>
 
       <view class="menu-list">
-        <view class="list-cell list-cell-arrow" @click="handleToEditInfo">
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToEditInfo()">
           <view class="menu-item-box">
             <view class="iconfont ucicon-user menu-icon"></view>
-            <view>个人资料</view>
+            <view>我的信息</view>
           </view>
         </view>
-        <view class="list-cell list-cell-arrow" @click="handleToPwd">
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToSecure()">
           <view class="menu-item-box">
-            <view class="iconfont ucicon-password menu-icon"></view>
-            <view>修改密码</view>
+            <view class="iconfont ucicon-yanzheng menu-icon"></view>
+            <view>账号与安全</view>
           </view>
         </view>
-      </view>
-
-      <view class="menu-list">
-        <view class="list-cell list-cell-arrow" @click="handleAbout">
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleAbout()">
           <view class="menu-item-box">
             <view class="iconfont ucicon-aixin menu-icon"></view>
             <view>关于我们</view>
           </view>
         </view>
-        <view class="list-cell list-cell-arrow" @click="handleHelp">
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleHelp()">
           <view class="menu-item-box">
             <view class="iconfont ucicon-Help menu-icon"></view>
             <view>常见问题</view>
           </view>
         </view>
-        <view class="list-cell list-cell-arrow" @click="handleCleanTmp">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-qinglihuancun menu-icon"></view>
-            <view>清理缓存</view>
-            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ proxy.$settingStore.currentSize }}</view>
-          </view>
-        </view>
-        <view class="list-cell list-cell-arrow" @click="handleToUpgrade">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-jianchagengxin menu-icon"></view>
-            <view>检查更新</view>
-          </view>
-        </view>
-        <view class="list-cell list-cell-arrow" @click="handleSetting">
+
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleSetting()">
           <view class="menu-item-box">
             <view class="iconfont ucicon-shezhi menu-icon"></view>
             <view>设置</view>
@@ -83,38 +68,38 @@
         </view>
       </view>
 
-      <view class="menu-list">
-        <!-- <view class="list-cell list-cell-arrow" @click="goMessagePush()">
+      <!-- <view class="menu-list">
+        <view class="list-cell list-cell-arrow" @click="goMessagePush()">
           <view class="menu-item-box">
             <view class="iconfont ucicon-aixin menu-icon"></view>
             <view>推送设置</view>
           </view>
-        </view> -->
-        <!-- <view class="list-cell list-cell-arrow" @click="goBuilding()">
+        </view>
+        <view class="list-cell list-cell-arrow" @click="goBuilding()">
           <view class="menu-item-box">
             <view class="iconfont ucicon-aixin menu-icon"></view>
             <view>建筑管理</view>
           </view>
-        </view> -->
-        <!-- <view class="list-cell list-cell-arrow" @click="goFunReport()">
+        </view>
+        <view class="list-cell list-cell-arrow" @click="goFunReport()">
           <view class="menu-item-box">
             <view class="iconfont ucicon-aixin menu-icon"></view>
             <view>功能报备</view>
           </view>
-        </view> -->
-      </view>
+        </view>
+      </view> -->
 
       <view class="cu-list menu">
         <view class="cu-item" style="margin-top: 0; margin-bottom: 0">
           <view class="content flex align-center">
-            <text class="iconfont ucicon-colorlens" :class="'text-' + proxy.$settingStore.themeColor.name"></text>
-            <view class="padding solid radius shadow-blur" :class="'bg-' + proxy.$settingStore.themeColor.name" style="margin-left: 10px"></view>
+            <text class="iconfont ucicon-colorlens" :class="'text-' + themeColor.name"></text>
+            <view class="padding solid radius shadow-blur" :class="'bg-' + themeColor.name" style="margin-left: 10px"></view>
             <view class="title" style="margin-left: 10px">
-              主题色:<text :class="'text-' + proxy.$settingStore.themeColor.name">{{ proxy.$settingStore.themeColor.title }}</text>
+              主题色:<text :class="'text-' + themeColor.name">{{ themeColor.title }}</text>
             </view>
           </view>
           <view class="action">
-            <button class="cu-btn round shadow" @click="colorModal = true" :class="'bg-' + proxy.$settingStore.themeColor.name">
+            <button class="cu-btn round shadow" @click="colorModal = true" :class="'bg-' + themeColor.name">
               <text class="iconfont ucicon-colorlens"></text>
               选择主题
             </button>
@@ -124,15 +109,15 @@
 
       <view class="cu-list menu">
         <view class="cu-item">
-          <view class="content text-center" @click="handleLogout">
+          <view class="content text-center" @click="proxy.$settingStore.handleLogout">
             <text class="text-black">退出登录</text>
           </view>
         </view>
       </view>
     </view>
 
-    <view class="cu-list menu-avatar padding-lr-sm padding-top-sm">
-      <!-- <view class="cu-item" @tap="goSiteManage" v-if="permissionLabel == 1">
+    <!-- <view class="cu-list menu-avatar padding-lr-sm padding-top-sm">
+      <view class="cu-item" @tap="goSiteManage" v-if="permissionLabel == 1">
         <view class="cu-avatar" style="background-image: url(@/static/images/setting/setting-icon2.png)"></view>
         <view class="content">
           <view class="">站点管理</view>
@@ -153,8 +138,8 @@
             <text class="icon iconfont margin-right-xs margin-left-lg">&#xe629;</text>
           </view>
         </view>
-      </view> -->
-    </view>
+      </view>
+    </view> -->
 
     <!-- 选择颜色模态框 -->
     <view class="cu-modal" :class="{ show: colorModal }">
@@ -185,11 +170,11 @@ import config from "@/config";
 import storage from "@/utils/storage";
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
 import { uploadAvatar, updateUserProfile } from "@/api/system/user";
 import { getAuthorization } from "@/api/setting/index.js";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();
@@ -198,6 +183,10 @@ const avatar = computed(() => {
   return useStore.$state.avatar;
 });
 
+const themeColor = computed(() => {
+  return proxy.$settingStore.themeColor;
+});
+
 const windowHeight = computed(() => {
   return uni.getSystemInfoSync().windowHeight - 50;
 });
@@ -225,13 +214,6 @@ function getAuthorizationApi(params) {
   });
 }
 
-/**
- * @设置
- */
-function handleSetting() {
-  proxy.$tab.navigateTo("/pages/mine/setting/index");
-}
-
 /**
  * @推送设置
  */
@@ -301,65 +283,6 @@ function handleToAvatar(type) {
   }
 }
 
-/**
- * @退出登录
- */
-function handleLogout() {
-  proxy.$modal.confirm("确定注销并退出系统吗?").then(() => {
-    useStore.LogOut().then(() => {
-      proxy.$tab.reLaunch("/pages/index");
-    });
-  });
-}
-
-/**
- * @常见问题
- */
-function handleHelp() {
-  proxy.$tab.navigateTo("/pages/mine/help/index");
-}
-
-/**
- * @个人资料
- */
-function handleToEditInfo() {
-  proxy.$tab.navigateTo("/pages/mine/info/index");
-}
-
-/**
- * @修改密码
- */
-function handleToPwd() {
-  proxy.$tab.navigateTo("/pages/mine/pwd/index");
-}
-
-/**
- * @检查更新
- */
-function handleToUpgrade() {
-  proxy.$modal.showToast("模块建设中~");
-}
-
-/**
- * @关于我们
- */
-function handleAbout() {
-  proxy.$tab.navigateTo("/pages/mine/about/index");
-}
-
-/**
- * @清理缓存
- */
-function handleCleanTmp() {
-  // #ifdef H5
-  proxy.$modal.showToast("H5暂不支持此功能");
-  // #endif
-
-  // #ifdef APP-PLUS
-  proxy.$setting.clearCache();
-  // #endif
-}
-
 let startY = 0,
   moveY = 0,
   pageAtTop = true;
@@ -469,9 +392,7 @@ onNavigationBarButtonTap((e) => {
   .content-section {
     position: relative;
     margin-top: -85px;
-    // #ifdef H5
-    padding-bottom: 50px;
-    // #endif
+    padding-bottom: 50.67px;
     background-color: #f5f6f7;
 
     .mine-image {

+ 187 - 106
src/pages/mine/info/index.vue

@@ -1,13 +1,79 @@
 <template>
-  <view class="info-container">
-    <!--头像 + 背景-->
-    <view class="user-section" :class="'bg-' + proxy.$settingStore.themeColor.name" :style="{ paddingTop: proxy.$settingStore.barHightTop }">
+  <view :data-theme="'theme-' + proxy.$settingStore.themeColor.name" class="info-container">
+    <u-sticky bgColor="#fff" style="box-shadow: 1px 1px 4px rgb(26 26 26 / 10%)">
+      <u-tabs
+        :list="tabsList"
+        :current="tabsCurrent"
+        @click="tabsClick"
+        lineColor="#333"
+        :activeStyle="{ color: '#333' }"
+        :inactiveStyle="{ color: '#909399' }"
+        :scrollable="false"
+        style="border-bottom: 1px solid #eaeef1"
+      ></u-tabs>
+    </u-sticky>
+
+    <view class="content-section" v-show="tabsCurrent == 0">
+      <view class="menu-list margin-top-0 margin-lr-0">
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToAvatar(2)">
+          <view class="menu-item-box">
+            <view class="title">头像</view>
+            <image style="margin: 0 15px 0 auto" v-if="avatar" :src="avatar" class="cu-avatar radius"> </image>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="handleUserModal('修改昵称')">
+          <view class="menu-item-box">
+            <view class="title">昵称</view>
+            <view class="content" style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.nickName }}</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="handleUserModal('修改手机号')">
+          <view class="menu-item-box">
+            <view class="title">手机号码</view>
+            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.phonenumber }}</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="handleUserModal('修改邮箱')">
+          <view class="menu-item-box">
+            <view class="title">邮箱</view>
+            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.email }}</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleAbout()">
+          <view class="menu-item-box">
+            <view class="title">性别</view>
+            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.sex == "0" ? "男" : "女" }}</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
+          <view class="menu-item-box">
+            <view class="title">我的名片</view>
+          </view>
+        </view>
+      </view>
+
+      <view class="menu-list margin-top-0 margin-lr-0">
+        <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
+          <view class="menu-item-box">
+            <view>个人实名认证</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
+          <view class="menu-item-box">
+            <view>更多</view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <!-- <view class="user-section" :class="'bg-' + proxy.$settingStore.themeColor.name" :style="{ paddingTop: proxy.$settingStore.barHightTop }">
       <image class="bg" src="@/static/images/mine/user-bg.png"></image>
       <view class="portrait-box">
-        <image v-if="!avatar" @click="handleToAvatar(1)" class="portrait" src="@/static/images/mine/missing-face.png"></image>
-        <image v-if="avatar" @click="handleToAvatar(2)" :src="avatar" class="portrait cu-avatar xl round"> </image>
+        <image v-if="!avatar" @click="proxy.$settingStore.handleToAvatar(1)" class="portrait" src="@/static/images/mine/missing-face.png"></image>
+        <image v-if="avatar" @click="proxy.$settingStore.handleToAvatar(2)" :src="avatar" class="portrait cu-avatar xl round"> </image>
       </view>
-    </view>
+    </view> -->
+
     <!-- <uni-list>
       <uni-list-item showExtraIcon="true" :extraIcon="{ type: 'person-filled' }" title="昵称" :rightText="user.nickName" />
       <uni-list-item showExtraIcon="true" :extraIcon="{ type: 'phone-filled' }" title="手机号码" :rightText="user.phonenumber" />
@@ -17,7 +83,7 @@
       <uni-list-item showExtraIcon="true" :extraIcon="{ type: 'calendar-filled' }" title="创建日期" :rightText="user.createTime" />
     </uni-list> -->
 
-    <view class="example">
+    <!-- <view class="example">
       <uni-forms ref="form" :model="user" labelWidth="80px">
         <uni-forms-item label="用户昵称" name="nickName">
           <uni-easyinput v-model="user.nickName" placeholder="请输入昵称" />
@@ -33,17 +99,37 @@
         </uni-forms-item>
       </uni-forms>
       <button type="primary" class="round text-dfl" @click="submit">修改资料</button>
-    </view>
+    </view> -->
   </view>
+
+  <u-modal :show="modalShow" :showConfirmButton="true" :showCancelButton="true" @cancel="modalShow = false" @confirm="handleConfirm">
+    <view class="slot-content" style="width: 100%">
+      <view class="margin-bottom-15" style="color: #909399">{{ modalTitle }}</view>
+
+      <view v-if="modalTitle === '修改昵称'">
+        <u--input v-model="userArr.nickName" :maxlength="5" :placeholder="modalTitle" border="bottom" clearable></u--input>
+      </view>
+
+      <view v-if="modalTitle === '修改手机号'">
+        <u--input type="number" v-model="userArr.phonenumber" :maxlength="11" :placeholder="modalTitle" border="bottom" clearable></u--input>
+      </view>
+
+      <view v-if="modalTitle === '修改邮箱'">
+        <u--input v-model="userArr.email" :placeholder="modalTitle" border="bottom" clearable></u--input>
+      </view>
+    </view>
+  </u-modal>
 </template>
 
 <script setup>
-import { onLoad, onShow, onHide, onReady, onLaunch, onNavigationBarButtonTap } from "@dcloudio/uni-app";
-import { ref, shallowRef, reactive, computed, getCurrentInstance, toRefs, onMounted, inject } from "vue";
+import config from "@/config";
+import storage from "@/utils/storage";
+import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import { getUserProfile, uploadAvatar, updateUserProfile } from "@/api/system/user";
+import { updateUserProfile, getUserProfile } from "@/api/system/user";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();
@@ -52,16 +138,36 @@ const avatar = computed(() => {
   return useStore.$state.avatar;
 });
 
+const user = computed(() => {
+  return useStore.$state.user;
+});
+
+const userArr = computed(() => {
+  return useStore.$state.userArr;
+});
+
+const postGroup = computed(() => {
+  return useStore.$state.postGroup;
+});
+
+const roleGroup = computed(() => {
+  return useStore.$state.roleGroup;
+});
+
 const data = reactive({
-  name: useStore.$state.name,
-  version: getApp().globalData.config.appInfo.version,
-
-  user: {
-    nickName: "",
-    phonenumber: "",
-    email: "",
-    sex: "",
-  },
+  tabsList: [
+    {
+      name: "个人信息",
+    },
+    // {
+    //   name: "其它信息",
+    // },
+    {
+      name: "企业/团队",
+    },
+  ],
+  tabsCurrent: 0,
+
   sexs: [
     {
       text: "男",
@@ -72,116 +178,91 @@ const data = reactive({
       value: "1",
     },
   ],
-  rules: {
-    nickName: {
-      rules: [
-        {
-          required: true,
-          errorMessage: "用户昵称不能为空",
-        },
-      ],
-    },
-    phonenumber: {
-      rules: [
-        {
-          required: true,
-          errorMessage: "手机号码不能为空",
-        },
-        {
-          pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
-          errorMessage: "请输入正确的手机号码",
-        },
-      ],
-    },
-    email: {
-      rules: [
-        {
-          required: true,
-          errorMessage: "邮箱地址不能为空",
-        },
-        {
-          format: "email",
-          errorMessage: "请输入正确的邮箱地址",
-        },
-      ],
-    },
-  },
+
+  modalShow: false,
+  modalTitle: "",
 });
 
-const { user, sexs, rules } = toRefs(data);
+// .test(value)
+
+const { name, phone, tabsList, tabsCurrent, sexs, modalShow, modalTitle } = toRefs(data);
 
-const roleGroup = ref("");
-const postGroup = ref("");
 const form = ref(null);
 
-/**
- * @点击头像
- */
-function handleToAvatar(type) {
-  if (type == 1) {
-    uni.chooseImage({
-      count: 1, //默认9
-      sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
-      sourceType: ["album", "camera"], //从相册选择、摄像头
-      success: function (res) {
-        uploadApi(res);
-      },
-    });
-  } else if (type == 2) {
-    proxy.$tab.navigateTo("/pages/mine/avatar/index");
-  }
+function handleUserModal(title) {
+  modalShow.value = true;
+  modalTitle.value = title;
 }
 
-/**
- * @upload上传头像
- * @api接口请求
- */
-function uploadApi(res) {
-  let data = { name: "file", filePath: res.tempFilePaths[0] };
-  uploadAvatar(data).then((response) => {
-    useStore.$state.avatar = response.data.url;
-    updateUserProfile({
-      avatar: response.data.url,
-    }).then(() => {});
-  });
-}
+function handleConfirm() {
+  if (modalTitle.value == "修改昵称") {
+    if (!userArr.value.nickName) {
+      proxy.$modal.showToast("昵称不能为空");
+      return;
+    }
+  }
+
+  if (modalTitle.value == "修改手机号") {
+    if (!userArr.value.phonenumber) {
+      proxy.$modal.showToast("手机号码不能为空");
+      return;
+    }
+
+    if (/^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(userArr.value.phonenumber)) {
+      proxy.$modal.showToast("请输入正确的手机号码");
+      return;
+    }
+  }
+
+  if (modalTitle.value == "修改邮箱") {
+    if (!userArr.value.email) {
+      proxy.$modal.showToast("邮箱不能为空");
+      return;
+    }
 
-function getUser() {
-  getUserProfile().then((response) => {
-    user.value = response.data.user;
-    roleGroup.value = response.roleGroup;
-    postGroup.value = response.postGroup;
+    if (/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(userArr.value.email)) {
+      proxy.$modal.showToast("请输入正确的邮箱地址");
+      return;
+    }
+  }
+
+  updateUserProfile(userArr.value).then((response) => {
+    proxy.$tab.reLaunch("/pages/mine/index");
+    useStore.getUser();
   });
 }
 
-function submit(ref) {
-  form.value.validate().then((res) => {
-    updateUserProfile(user.value).then((response) => {
-      proxy.$modal.msgSuccess("修改成功,重新登录后生效!");
-      proxy.$tab.reLaunch("pages/mine/index");
-    });
-  });
+function submit(ref) {}
+
+/**
+ * @tabs点击事件
+ */
+function tabsClick(e) {
+  tabsCurrent.value = e.index;
 }
 
 onLoad((options) => {
-  getUser();
+  useStore.getUser();
 });
 
 onReady(() => {
-  form.value.setRules(rules.value);
+  //   form.value.setRules(rules.value);
 });
 
 onShow(() => {
   //调用系统主题颜色
   proxy.$settingStore.systemThemeColor([1]);
 });
+
+// 自定义导航事件
+onNavigationBarButtonTap((e) => {
+  if (e.float == "right") {
+    proxy.$tab.navigateTo("/pages/mine/setting/index");
+  }
+});
 </script>
 
-<style lang="scss">
-page {
-  background-color: #ffffff;
-}
-</style>
+<style lang="scss" scoped></style>
 
 <style lang="scss" scoped>
 :deep(.uni-page-head__title) {

+ 0 - 115
src/pages/mine/pwd/index.vue

@@ -1,115 +0,0 @@
-<template>
-  <view class="pwd-retrieve-container">
-    <u-navbar :titleStyle="{ color: '#fff' }" :autoBack="true" title="修改密码" :placeholder="true" :safeAreaInsetTop="true" :bgColor="proxy.$settingStore.themeColor.color">
-      <template #left>
-        <view class="u-nav-slot">
-          <u-icon name="arrow-left" size="19" color="#fff"></u-icon>
-        </view>
-      </template>
-    </u-navbar>
-
-    <view class="uni-content-header"></view>
-    <view class="uni-content-body">
-      <uni-forms ref="form" :value="user" labelWidth="80px">
-        <uni-forms-item name="oldPassword" label="旧密码">
-          <uni-easyinput type="password" v-model="user.oldPassword" placeholder="请输入旧密码" />
-        </uni-forms-item>
-        <uni-forms-item name="newPassword" label="新密码">
-          <uni-easyinput type="password" v-model="user.newPassword" placeholder="请输入新密码" />
-        </uni-forms-item>
-        <uni-forms-item name="confirmPassword" label="确认密码">
-          <uni-easyinput type="password" v-model="user.confirmPassword" placeholder="请确认新密码" />
-        </uni-forms-item>
-        <button type="primary" class="round text-dfl" @click="submit">提交</button>
-      </uni-forms>
-    </view>
-  </view>
-</template>
-
-<script setup>
-import { updateUserPwd } from "@/api/system/user";
-
-import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
-
-import useStores from "@/store/modules/user.js";
-const useStore = useStores();
-
-const { proxy } = getCurrentInstance();
-
-const data = reactive({
-  user: {
-    oldPassword: undefined,
-    newPassword: undefined,
-    confirmPassword: undefined,
-  },
-  rules: {
-    oldPassword: {
-      rules: [
-        {
-          required: true,
-          errorMessage: "旧密码不能为空",
-        },
-      ],
-    },
-    newPassword: {
-      rules: [
-        {
-          required: true,
-          errorMessage: "新密码不能为空",
-        },
-        {
-          minLength: 6,
-          maxLength: 20,
-          errorMessage: "长度在 6 到 20 个字符",
-        },
-      ],
-    },
-    confirmPassword: {
-      rules: [
-        {
-          required: true,
-          errorMessage: "确认密码不能为空",
-        },
-        {
-          validateFunction: (rule, value, data) => data.newPassword === value,
-          errorMessage: "两次输入的密码不一致",
-        },
-      ],
-    },
-  },
-});
-const { user, rules } = toRefs(data);
-
-const form = ref(null);
-
-function submit() {
-  form.value.validate().then((res) => {
-    updateUserPwd(user.value.oldPassword, user.value.newPassword).then((response) => {
-      proxy.$modal.msgSuccess("修改成功");
-    });
-  });
-}
-
-onShow(() => {
-  //调用系统主题颜色
-  proxy.$settingStore.systemThemeColor([1]);
-});
-
-onReady(() => {
-  form.value.setRules(rules.value);
-});
-</script>
-
-<style>
-page {
-  background-color: #ffffff;
-}
-</style>
-
-<style lang="scss">
-.uni-content-body {
-  padding-top: 36rpx;
-  padding: 15px;
-}
-</style>

+ 198 - 0
src/pages/mine/secure/index.vue

@@ -0,0 +1,198 @@
+<template>
+  <view :data-theme="'theme-' + proxy.$settingStore.themeColor.name" class="secure-container">
+    <view class="content-section">
+      <view class="menu-list margin-top-0 margin-lr-0">
+        <view></view>
+        <image style="width: 100%; height: 160px" src="@/static/images/index/banner2.jpg" mode="widthFix"></image>
+      </view>
+
+      <view class="menu-list margin-top-0 margin-lr-0">
+        <view class="list-cell list-cell-arrow" @click="handleUserModal('修改手机号')">
+          <view class="menu-item-box">
+            <view class="title">手机号码</view>
+            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.phonenumber }}</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="handleUserModal('修改密码')">
+          <view class="menu-item-box">
+            <view class="title">密码</view>
+            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.password ? "已设置" : "未设置" }}</view>
+          </view>
+        </view>
+      </view>
+
+      <view class="menu-list margin-top-0 margin-lr-0">
+        <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
+          <view class="menu-item-box">
+            <view class="title">指纹登录</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
+          <view class="menu-item-box">
+            <view class="title">人脸</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
+          <view class="menu-item-box">
+            <view class="title">手势密码</view>
+          </view>
+        </view>
+      </view>
+
+      <view class="menu-list margin-top-0 margin-lr-0">
+        <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
+          <view class="menu-item-box">
+            <view class="title">常用设备管理</view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+
+  <u-modal :show="modalShow" :showConfirmButton="true" :showCancelButton="true" @cancel="modalShow = false" @confirm="handleConfirm">
+    <view class="slot-content" style="width: 100%">
+      <view class="margin-bottom-15" style="color: #909399">{{ modalTitle }}</view>
+
+      <view v-if="modalTitle === '修改手机号'">
+        <u--input v-model="userArr.phonenumber" :maxlength="11" :placeholder="modalTitle" border="bottom" clearable></u--input>
+      </view>
+
+      <view v-if="modalTitle === '修改密码'">
+        <u-input class="margin-bottom-15" v-model="oldPassword" placeholder="请输入旧密码" :password="oldPasswordBool" border="bottom">
+          <template #suffix>
+            <text :class="!oldPasswordBool ? 'iconfont ucicon-eye' : 'iconfont ucicon-eye-close'" @click="oldPasswordBool = !oldPasswordBool"></text>
+          </template>
+        </u-input>
+
+        <u-input class="margin-bottom-15" v-model="oldPassword" placeholder="请输入新密码" :password="newPasswordBool" border="bottom">
+          <template #suffix>
+            <text :class="!newPasswordBool ? 'iconfont ucicon-eye' : 'iconfont ucicon-eye-close'" @click="newPasswordBool = !newPasswordBool"></text>
+          </template>
+        </u-input>
+
+        <u-input v-model="confirmPassword" placeholder="请输入新密码" :password="confirmPasswordBool" border="bottom">
+          <template #suffix>
+            <text :class="!confirmPasswordBool ? 'iconfont ucicon-eye' : 'iconfont ucicon-eye-close'" @click="confirmPasswordBool = !confirmPasswordBool"></text>
+          </template>
+        </u-input>
+      </view>
+    </view>
+  </u-modal>
+</template>
+
+<script setup>
+import config from "@/config";
+import storage from "@/utils/storage";
+import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
+
+import { updateUserProfile, updateUserPwd } from "@/api/system/user";
+
+const useStore = useStores();
+
+const { proxy } = getCurrentInstance();
+
+const avatar = computed(() => {
+  return useStore.$state.avatar;
+});
+
+const user = computed(() => {
+  return useStore.$state.user;
+});
+
+const userArr = computed(() => {
+  return useStore.$state.userArr;
+});
+
+const data = reactive({
+  modalShow: false,
+  modalTitle: "",
+
+  oldPassword: undefined,
+  oldPasswordBool: true,
+  newPassword: undefined,
+  newPasswordBool: true,
+  confirmPassword: undefined,
+  confirmPasswordBool: true,
+});
+
+const { modalShow, modalTitle, oldPassword, oldPasswordBool, newPassword, newPasswordBool, confirmPassword, confirmPasswordBool } = toRefs(data);
+
+function handleUserModal(title) {
+  modalShow.value = true;
+  modalTitle.value = title;
+}
+
+function handleConfirm() {
+  if (modalTitle.value == "修改手机号") {
+    if (!userArr.value.phonenumber) {
+      proxy.$modal.showToast("手机号码不能为空");
+      return;
+    }
+
+    if (/^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(userArr.value.phonenumber)) {
+      proxy.$modal.showToast("请输入正确的手机号码");
+      return;
+    }
+  }
+
+  if (modalTitle.value == "修改密码") {
+    if (!oldPassword.value) {
+      proxy.$modal.showToast("旧密码不能为空");
+      return;
+    }
+
+    if (!newPassword.value) {
+      proxy.$modal.showToast("新密码不能为空");
+      return;
+    }
+
+    if (newPassword.value.length > 6 && newPassword.value.length < 20) {
+      proxy.$modal.showToast("长度在 6 到 20 个字符");
+      return;
+    }
+
+    if (!confirmPassword.value) {
+      proxy.$modal.showToast("确认密码不能为空");
+      return;
+    }
+
+    if (confirmPassword.value != newPassword.value) {
+      proxy.$modal.showToast("两次输入的密码不一致");
+      return;
+    }
+  }
+
+  if (modalTitle.value == "修改手机号") {
+    updateUserProfile(userArr.value).then((response) => {
+      proxy.$tab.reLaunch("/pages/mine/index");
+      useStore.getUser();
+    });
+  } else if (modalTitle.value == "修改密码") {
+    form.value.validate().then((res) => {
+      updateUserPwd(oldPassword.value, newPassword.value).then((response) => {
+        proxy.$modal.msgSuccess("修改成功");
+      });
+    });
+  }
+}
+
+onLoad((options) => {});
+
+onReady(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+
+// 自定义导航事件
+onNavigationBarButtonTap((e) => {
+  if (e.float == "right") {
+    proxy.$tab.navigateTo("/pages/mine/setting/index");
+  }
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 15 - 72
src/pages/mine/setting/index.vue

@@ -1,55 +1,57 @@
 <template>
   <view class="setting-container" :style="{ height: `${windowHeight}px` }">
     <view class="menu-list">
-      <view class="list-cell list-cell-arrow" @click="handleToEditInfo">
+      <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToEditInfo()">
         <view class="menu-item-box">
           <view class="iconfont ucicon-user menu-icon"></view>
-          <view>个人资料</view>
-        </view>
-      </view>
-      <view class="list-cell list-cell-arrow" @click="handleToPwd">
-        <view class="menu-item-box">
-          <view class="iconfont ucicon-password menu-icon"></view>
-          <view>修改密码</view>
+          <view>我的信息</view>
         </view>
       </view>
     </view>
 
     <view class="menu-list">
-      <view class="list-cell list-cell-arrow" @click="handleAbout">
+      <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleAbout()">
         <view class="menu-item-box">
           <view class="iconfont ucicon-aixin menu-icon"></view>
           <view>关于我们</view>
         </view>
       </view>
-      <view class="list-cell list-cell-arrow" @click="handleHelp">
+      <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleHelp()">
         <view class="menu-item-box">
           <view class="iconfont ucicon-Help menu-icon"></view>
           <view>常见问题</view>
         </view>
       </view>
-      <view class="list-cell list-cell-arrow" @click="handleCleanTmp">
+      <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleCleanTmp()">
         <view class="menu-item-box">
           <view class="iconfont ucicon-qinglihuancun menu-icon"></view>
           <view>清理缓存</view>
           <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ proxy.$settingStore.currentSize }}</view>
         </view>
       </view>
-      <view class="list-cell list-cell-arrow" @click="handleToUpgrade">
+      <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToUpgrade()">
         <view class="menu-item-box">
           <view class="iconfont ucicon-jianchagengxin menu-icon"></view>
           <view>检查更新</view>
         </view>
       </view>
     </view>
+
+    <!-- <view class="cu-list menu">
+      <view class="cu-item">
+        <view class="content text-center" @click="proxy.$settingStore.handleLogout">
+          <text class="text-black">退出登录</text>
+        </view>
+      </view>
+    </view> -->
   </view>
 </template>
 
 <script setup>
 import { onLoad, onShow, onHide, onLaunch, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 
-import useStores from "@/store/modules/user.js";
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();
@@ -62,65 +64,6 @@ const windowHeight = computed(() => {
   return uni.getSystemInfoSync().windowHeight - 50;
 });
 
-/**
- * @个人资料
- */
-function handleToEditInfo() {
-  proxy.$tab.navigateTo("/pages/mine/info/index");
-}
-
-/**
- * @修改密码
- */
-function handleToPwd() {
-  proxy.$tab.navigateTo("/pages/mine/pwd/index");
-}
-
-/**
- * @常见问题
- */
-function handleHelp() {
-  proxy.$tab.navigateTo("/pages/mine/help/index");
-}
-
-/**
- * @检查更新
- */
-function handleToUpgrade() {
-  proxy.$modal.showToast("模块建设中~");
-}
-
-/**
- * @关于我们
- */
-function handleAbout() {
-  proxy.$tab.navigateTo("/pages/mine/about/index");
-}
-
-/**
- * @清理缓存
- */
-function handleCleanTmp() {
-  // #ifdef H5
-  proxy.$modal.showToast("H5暂不支持此功能");
-  // #endif
-
-  // #ifdef APP-PLUS
-  proxy.$setting.clearCache();
-  // #endif
-}
-
-/**
- * @退出登录
- */
-function handleLogout() {
-  proxy.$modal.confirm("确定注销并退出系统吗?").then(() => {
-    useStore.LogOut().then(() => {
-      proxy.$tab.reLaunch("/pages/login");
-    });
-  });
-}
-
 onLoad((options) => {});
 
 onShow(() => {

+ 5 - 4
src/pages/serveConfig.vue

@@ -28,9 +28,10 @@
 import config from "@/config";
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
 import { getToken, setToken, removeToken } from "@/utils/auth";
-import publicStore from "@/store/modules/public.js";
-const publicStores = publicStore();
+
+const publicStore = publicStores();
 
 const { proxy } = getCurrentInstance();
 
@@ -97,10 +98,10 @@ function handleSubmit() {
 
   if (!port.value) {
     uni.setStorageSync("serveUrl", linkUrl.value);
-    publicStores.getServeList(linkUrl.value, content.value);
+    publicStore.getServeList(linkUrl.value, content.value);
   } else {
     uni.setStorageSync("serveUrl", linkUrl.value + ":" + port.value);
-    publicStores.getServeList(linkUrl.value + ":" + port.value, content.value);
+    publicStore.getServeList(linkUrl.value + ":" + port.value, content.value);
   }
 
   config.baseUrl = "http://" + uni.getStorageSync("serveUrl") + "/prod-api";

+ 4 - 3
src/pages/serveConfigSelect.vue

@@ -38,8 +38,9 @@ import config from "@/config";
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance, watchEffect } from "vue";
 import { getToken, setToken, removeToken } from "@/utils/auth";
-import publicStore from "@/store/modules/public.js";
-const publicStores = publicStore();
+import { publicStores, useStores } from "@/store/modules/index";
+
+const publicStore = publicStores();
 
 const { proxy } = getCurrentInstance();
 
@@ -91,7 +92,7 @@ function serveClick(type) {
           icon: "none",
         });
 
-        publicStores.getServeList(e.result, "");
+        publicStore.getServeList(e.result, "");
 
         init();
       },

+ 1 - 1
src/permission.js

@@ -24,7 +24,7 @@ list.forEach((item) => {
 
       if (getToken()) {
         if (to.url === loginPage) {
-          uni.reLaunch({ url: "/" });
+          uni.reLaunch({ url: "/pages/index" });
         }
         return true;
       } else {

+ 3 - 3
src/plugins/index.js

@@ -4,7 +4,7 @@ import modal from "./modal.plugins";
 import common from "./common.plugins";
 import setting from "./setting.plugins";
 import constData from "./constData.plugins.js";
-import settingStore from "@/store/modules/setting.js";
+import { settingStores } from "@/store/modules/index";
 
 export default {
   install(app) {
@@ -27,7 +27,7 @@ export default {
     app.provide("$constData", constData);
     app.config.globalProperties.$constData = constData;
     // 公共设置stroe
-    app.provide("$settingStore", settingStore());
-    app.config.globalProperties.$settingStore = settingStore();
+    app.provide("$settingStore", settingStores());
+    app.config.globalProperties.$settingStore = settingStores();
   },
 };

+ 2 - 2
src/plugins/setting.plugins.js

@@ -1,4 +1,4 @@
-import settingStore from "@/store/modules/setting.js";
+import { settingStores } from "@/store/modules/index";
 
 /**
  * @获取缓存
@@ -19,7 +19,7 @@ const formatSize = () => {
       v = (sizeCache / 1073741824).toFixed(2) + "GB";
     }
 
-    settingStore().$state.currentSize = currentSize
+    settingStores().$state.currentSize = currentSize
   });
   return currentSize;
 };

+ 1 - 1
src/static/scss/colorui.css

@@ -2998,7 +2998,7 @@ scroll-view.cu-steps .cu-item {
 /*  -- 内外边距 -- */
 
 .margin-0 {
-  margin: 0;
+  margin: 0 !important;
 }
 
 .margin-xs {

+ 86 - 69
src/static/scss/global.scss

@@ -1,90 +1,107 @@
 .text-center {
-	text-align: center;
+  text-align: center;
 }
 
 .font-13 {
-	font-size: 13px;
+  font-size: 13px;
 }
 
 .font-12 {
-	font-size: 12px;
+  font-size: 12px;
 }
 
 .font-11 {
-	font-size: 11px;
+  font-size: 11px;
 }
 
 .text-grey1 {
-	color: #888;
+  color: #888;
 }
+
 .text-grey2 {
-	color: #aaa;
+  color: #aaa;
 }
 
 .list-cell-arrow::before {
-    content: ' ';
-    height: 10px;
-    width: 10px;
-    border-width: 2px 2px 0 0;
-    border-color: #c0c0c0;
-    border-style: solid;
-    -webkit-transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
-    transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
-    position: absolute;
-    top: 50%;
-    margin-top: -6px;
-    right: 30rpx;
-  }
-  
-  .list-cell {
-    position: relative;
+  content: ' ';
+  height: 10px;
+  width: 10px;
+  border-width: 2px 2px 0 0;
+  border-color: #c0c0c0;
+  border-style: solid;
+  -webkit-transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
+  transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
+  position: absolute;
+  top: 50%;
+  margin-top: -6px;
+  right: 30rpx;
+}
+
+.list-cell {
+  position: relative;
+  width: 100%;
+  box-sizing: border-box;
+  background-color: #fff;
+  color: #333;
+  padding: 26rpx 30rpx;
+}
+
+.list-cell:first-child {
+  border-radius: 8rpx 8rpx 0 0;
+}
+
+.list-cell:last-child {
+  border-radius: 0 0 8rpx 8rpx;
+}
+
+.list-cell::after {
+  content: '';
+  position: absolute;
+  border-bottom: 1px solid #eaeef1;
+  -webkit-transform: scaleY(0.5) translateZ(0);
+  transform: scaleY(0.5) translateZ(0);
+  transform-origin: 0 100%;
+  bottom: 0;
+  right: 0;
+  left: 0;
+  pointer-events: none;
+}
+
+
+.menu-list {
+  margin: 0.625rem 0.625rem;
+
+  .menu-item-box {
     width: 100%;
-    box-sizing: border-box;
-    background-color: #fff;
-    color: #333;
-    padding: 26rpx 30rpx;
-  }
-  
-  .list-cell:first-child {
-    border-radius: 8rpx 8rpx 0 0;
-  }
-  
-  .list-cell:last-child {
-    border-radius: 0 0 8rpx 8rpx;
-  }
-  
-  .list-cell::after {
-    content: '';
-    position: absolute;
-    border-bottom: 1px solid #eaeef1;
-    -webkit-transform: scaleY(0.5) translateZ(0);
-    transform: scaleY(0.5) translateZ(0);
-    transform-origin: 0 100%;
-    bottom: 0;
-    right: 0;
-    left: 0;
-    pointer-events: none;
-  }
-  
-  
-  .menu-list {
-    margin: 0.625rem 0.625rem;
-  
-    .menu-item-box {
-      width: 100%;
-      display: flex;
-      align-items: center;
-  
-      .menu-icon {
-        color: #007AFF;
-        font-size: 16px;
-        margin-right: 5px;
-      }
-      
-      .text-right {
-        margin-left: auto;
-        margin-right: 34rpx;
-        color: #999;
-      }
+    display: flex;
+    align-items: center;
+
+
+    .title {
+      width: 80%;
+      white-space: nowrap;
+      overflow: hidden; //超出的文本隐藏
+      text-overflow: ellipsis; //溢出用省略号显示
+    }
+
+    .content {
+      width: 20%;
+      text-align: right;
+      white-space: nowrap;
+      overflow: hidden; //超出的文本隐藏
+      text-overflow: ellipsis; //溢出用省略号显示
+    }
+
+    .menu-icon {
+      color: #007AFF;
+      font-size: 16px;
+      margin-right: 5px;
+    }
+
+    .text-right {
+      margin-left: auto;
+      margin-right: 34rpx;
+      color: #999;
     }
   }
+}

+ 66 - 0
src/static/scss/handle.scss

@@ -0,0 +1,66 @@
+@import "./themes.scss";
+
+//切换主题时 获取不同的主题色值
+@mixin themeify {
+
+    @each $theme-name,
+    $theme-map in $themes {
+        //!global 把局部变量强升为全局变量
+        $theme-map: $theme-map !global;
+
+        //判断html的data-theme的属性值  #{}是sass的插值表达式
+        //& sass嵌套里的父容器标识   @content是混合器插槽,像vue的slot
+        [data-theme="#{$theme-name}"] & {
+            @content;
+        }
+    }
+}
+
+
+//从主题色map中取出对应颜色
+@function themed($key) {
+    @return map-get($theme-map, $key);
+}
+
+//获取背景颜色
+@mixin background_color($color) {
+    @include themeify {
+        background-color: themed($color) !important;
+    }
+}
+
+//获取字体颜色
+@mixin font_color($color) {
+    @include themeify {
+        color: themed($color) !important;
+    }
+}
+
+//获取icon颜色
+@mixin fill_color($fill) {
+    @include themeify {
+        fill: themed($fill) !important;
+    }
+}
+
+//获取border
+@mixin border($border) {
+    @include themeify {
+        border: themed($border);
+    }
+}
+
+//获取border_color
+@mixin border_color($color) {
+    @include themeify {
+        border-color: themed($color) !important;
+    }
+}
+
+
+//获取box-shadow
+@mixin box_shadow($color) {
+    @include themeify {
+        box-shadow: themed($color);
+    }
+}

+ 35 - 1
src/static/scss/index.scss

@@ -4,5 +4,39 @@
 @import "./colorui.css";
 // public
 @import "./public.scss";
+// sidebar
+@import "./sidebar.scss";
 // iconfont
-@import "@/static/iconfont/iconfont.css";
+@import "@/static/iconfont/iconfont.css";
+
+
+//padding
+.padding-15 {
+    padding: 15px;
+}
+
+//margin
+.margin-top-0 {
+    margin-top: 0px;
+}
+
+.margin-lr-0 {
+    margin-left: 0px;
+    margin-right: 0px
+}
+
+.margin-top-15 {
+    margin-top: 15px
+}
+
+.margin-right-15 {
+    margin-right: 15px;
+}
+
+.margin-bottom-10 {
+    margin-bottom: 10px
+}
+
+.margin-bottom-15 {
+    margin-bottom: 15px
+}

+ 29 - 61
src/static/scss/public.scss

@@ -1,9 +1,3 @@
-//全局背景颜色 开始
-.whiteBackgroundColor {
-  background-color: #ffffff;
-}
-//全局背景颜色 结束
-
 /*
  * @日期选择器样式 开始
  */
@@ -43,24 +37,6 @@ th {
  * @日期选择器样式 结束
  */
 
-/*
- * @时间线样式 开始
- */
-#planTimeline {
-  padding: 0px 15px;
-}
-
-#planTimeline1 {
-  padding: 0px 15px;
-
-  .u-steps-item__wrapper {
-    background-color: #f1f1f1;
-  }
-}
-
-/*
- * @时间线样式 结束
- */
 
 /*
  * @抽屉样式 开始
@@ -147,6 +123,7 @@ uni-input {
 .u-cell__body {
   padding: 10px 10px !important;
 }
+
 //折叠面板样式 结束
 
 //步骤条样式 开始
@@ -157,44 +134,8 @@ uni-input {
     }
   }
 }
-//步骤条样式 结束
-
-/*
- * 页面样式 开始
- * @/pages/xunJian/plan/components/siteDetails.vue
- * @/pages/xunJian/plan/components/content.vue
- */
-
-.siteHeader {
-  .u-icon__icon {
-    font-size: 14px !important;
-    line-height: 14px !important;
-    margin: auto !important;
-  }
-
-  .uni-section .uni-section-header {
-    padding: 0 !important;
-
-    .uni-section-header__decoration {
-      height: 14px !important;
-      background-color: #149eff;
-    }
-
-    .uni-section-header__content {
-      uni-text {
-        font-size: 15px !important;
-        color: #149eff !important;
-        font-weight: 600 !important;
-      }
-    }
-  }
-}
 
-/*
- * 页面样式 结束
- * @/pages/xunJian/plan/components/siteDetails.vue
- * @/pages/xunJian/plan/components/content.vue
- */
+//步骤条样式 结束
 
 //自写table表格样式-普通
 .tableType1 {
@@ -251,4 +192,31 @@ uni-input {
   .u-row:last-child {
     border-bottom: 1px #e5e5e5 solid;
   }
+}
+
+//ios底部安全距离
+.ios-padding-bottom {
+  /*兼容 IOS<11.2*/
+  padding-bottom: constant(safe-area-inset-bottom) !important;
+  /*兼容 IOS>11.2*/
+  padding-bottom: env(safe-area-inset-bottom) !important;
+}
+
+//公共按钮绝对定位
+.app-position-fixed {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0px;
+  //#ifdef APP-PLUS
+  bottom: 5px;
+  //#endif
+  padding: 0px 15px 0px 15px;
+
+  .app-buttom {
+    width: 100%;
+    height: 40px;
+    font-size: 14px;
+    margin-bottom: 15px
+  }
 }

+ 117 - 0
src/static/scss/sidebar.scss

@@ -0,0 +1,117 @@
+@import './handle.scss';
+
+//全局按钮样式修改
+uni-button[type='primary'] {
+    @include font_color('fontColor');
+    @include background_color('backgroundColor');
+    border-width: 0px !important;
+}
+
+.u-button--primary {
+    @include background_color('backgroundColor');
+    @include border_color('backgroundColor');
+}
+
+//全局背景样式修改
+.theme-back {
+    @include background_color('backgroundColor');
+}
+
+/*
+ * 页面样式 开始
+ * @/pages/xunJian/plan/components/siteDetails.vue
+ * @/pages/xunJian/plan/components/content.vue
+ */
+
+.siteHeader {
+    .u-icon__icon {
+        font-size: 14px !important;
+        line-height: 14px !important;
+        margin: auto !important;
+    }
+}
+
+/*
+ * 页面样式 结束
+ * @/pages/xunJian/plan/components/siteDetails.vue
+ * @/pages/xunJian/plan/components/content.vue
+ */
+
+
+//标题栏样式 开始
+.uni-section .uni-section-header {
+    padding: 0 !important;
+
+    .uni-section-header__decoration {
+        height: 14px !important;
+        @include background_color('backgroundColor');
+    }
+
+    .uni-section-header__content {
+        uni-text {
+            font-size: 15px !important;
+            // color: #149eff !important;
+            @include font_color('backgroundColor');
+            font-weight: 600 !important;
+        }
+    }
+}
+
+//标题栏样式 结束
+
+
+//复选框样式 开始
+.u-checkbox-group {}
+
+//复选框样式 结束
+
+
+//日历样式 开始
+.uni-calendar {
+    .uni-calendar__content {
+        .uni-calendar__box {
+            .uni-calendar__weeks {
+                .uni-calendar__weeks-item {
+                    .uni-calendar-item--isDay-text {
+                        @include font_color('backgroundColor');
+                    }
+
+                    .uni-calendar-item--isDay {
+                        @include background_color('backgroundColor');
+                        @include font_color('fontColor');
+                    }
+
+                    .uni-calendar-item--checked {
+                        @include background_color('backgroundColor');
+                    }
+                }
+            }
+        }
+    }
+}
+
+//日历样式 结束
+
+.deviceManage {
+    @include background_color('backgroundColor');
+    @include font_color('fontColor');
+}
+
+//自定义头部导航样式 开始
+.u-navbar {
+    .u-navbar--fixed {
+        .u-navbar__content {
+            @include background_color('backgroundColor');
+        }
+    }
+}
+
+//自定义头部导航样式 结束
+
+
+//iconfont样式 开始
+.menu-list .menu-item-box .menu-icon {
+    @include font_color('backgroundColor');
+}
+
+//iconfont样式 结束

+ 60 - 0
src/static/scss/themes.scss

@@ -0,0 +1,60 @@
+$themes: (
+  theme-rf: ( //浅蓝-主题
+    fontColor:#fff,
+    backgroundColor:#149eff,
+
+  ),
+  theme-blue: ( //海蓝-主题
+    fontColor:#fff,
+    backgroundColor:#0081ff,
+  ),
+  theme-red: ( //嫣红-主题
+    fontColor:#fff,
+    backgroundColor:#e54d42,
+  ),
+  theme-orange: ( //桔橙-主题
+    fontColor:#fff,
+    backgroundColor:#f37b1d,
+  ),
+  theme-yellow: ( //明黄-主题
+    fontColor:#fff,
+    backgroundColor:#fbbd08,
+  ),
+  theme-olive: ( //橄榄-主题
+    fontColor:#fff,
+    backgroundColor:#8dc63f,
+  ),
+  theme-green: ( //森绿-主题
+    fontColor:#fff,
+    backgroundColor:#39b54a,
+  ),
+  theme-cyan: ( //天青-主题
+    fontColor:#fff,
+    backgroundColor:#1cbbb4,
+  ),
+  theme-purple: ( //姹紫-主题
+    fontColor:#fff,
+    backgroundColor:#6739b6,
+  ),
+  theme-mauve: ( //木槿-主题
+    fontColor:#fff,
+    backgroundColor:#9c26b0,
+  ),
+  theme-pink: ( //桃粉-主题
+    fontColor:#fff,
+    backgroundColor:#e03997,
+  ),
+  theme-brown: ( //棕褐-主题
+    fontColor:#fff,
+    backgroundColor:#a5673f,
+  ),
+  theme-grey: ( //玄灰-主题
+    fontColor:#fff,
+    backgroundColor:#8799a3,
+  ),
+  theme-black: ( //墨黑-主题
+    fontColor:#fff,
+    backgroundColor:#333333,
+  ),
+
+);

+ 11 - 0
src/store/modules/index.js

@@ -0,0 +1,11 @@
+import useStores from "@/store/modules/user.js";
+import publicStores from "@/store/modules/public.js";
+import settingStores from "@/store/modules/setting.js";
+import xunJianStores from "@/store/modules/xunJian.js";
+
+export {
+    useStores,
+    publicStores,
+    settingStores,
+    xunJianStores
+};

+ 117 - 6
src/store/modules/setting.js

@@ -1,18 +1,25 @@
 
+import { defineStore } from "pinia";
 import storage from "@/utils/storage";
 import constant from "@/utils/constant";
-import { defineStore } from "pinia";
+import modal from "@/plugins/modal.plugins.js";
+import tab from "@/plugins/tab.plugins.js";
+import setting from "@/plugins/setting.plugins.js";
+import { useStores } from "@/store/modules/index";
+
+import { uploadAvatar, updateUserProfile } from "@/api/system/user";
 
 const settingStore = defineStore("setting", {
     state: () => ({
         currentSize: "",//APP缓存
 
         themeColor: storage.get(constant.themeColor),//主题
-        tabbarValue: 0,
+        tabbarValue: "/pages/index",//tabbar切换值
 
-        barHeight: 0,
-        StatusBar: 0,
-        barHightTop: "",
+        barHeight: 0,//微信小程序顶部安全距离
+        StatusBar: 0,//app顶部安全距离
+        tabBarHeight: 0,//app底部安全距离
+        barHightTop: "",//app头部计算距离
 
     }),
     persist: {
@@ -65,6 +72,7 @@ const settingStore = defineStore("setting", {
             let systemInfo = uni.getSystemInfoSync();
             var statusBarHeight = systemInfo.statusBarHeight
             this.StatusBar = statusBarHeight
+            this.tabBarHeight = systemInfo.screenHeight - systemInfo.safeArea.bottom
             this.barHightTop = this.StatusBar ? this.StatusBar + 44 + 'px' : '44px'
 
             //#ifdef MP
@@ -72,10 +80,113 @@ const settingStore = defineStore("setting", {
             let CustomBar = custom.bottom + custom.top - systemInfo.statusBarHeight;
             this.barHeight = CustomBar || 0
             //#endif
+        },
+
+        /**
+         * @常见问题
+         */
+        handleHelp() {
+            tab.navigateTo("/pages/mine/help/index");
+        },
+
+        /**
+         * @我的信息
+         */
+        handleToEditInfo() {
+            tab.navigateTo("/pages/mine/info/index");
+        },
+
+        /**
+         * @关于我们
+         */
+        handleAbout() {
+            tab.navigateTo("/pages/mine/about/index");
+        },
+
+        /**
+         * @清理缓存
+         */
+        handleCleanTmp() {
+            // #ifdef H5
+            modal.showToast("H5暂不支持此功能");
+            // #endif
+
+            // #ifdef APP-PLUS
+            setting.clearCache();
+            // #endif
+        },
+
+        /**
+         * @检查更新
+         */
+        handleToUpgrade() {
+            modal.showToast("模块建设中~");
+        },
+
+        /**
+         * @账号与安全
+         */
+        handleToSecure() {
+            tab.navigateTo("/pages/mine/secure/index");
+        },
+
+
+        /**
+         * @设置
+         */
+        handleSetting() {
+            tab.navigateTo("/pages/mine/setting/index");
+        },
+
+
+
+        /**
+         * @退出登录
+         */
+        handleLogout() {
+            const useStore = useStores();
+            modal.confirm("确定注销并退出系统吗?").then(() => {
+                useStore.LogOut().then(() => {
+                    tab.reLaunch("/pages/index");
+                });
+            });
+        },
 
-            console.log(systemInfo)
+
+        /**
+         * @点击头像
+         */
+        handleToAvatar(type) {
+            if (type == 1) {
+                uni.chooseImage({
+                    count: 1, //默认9
+                    sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
+                    sourceType: ["album", "camera"], //从相册选择、摄像头
+                    success: function (res) {
+                        this.uploadApi(res);
+                    },
+                });
+            } else if (type == 2) {
+                tab.navigateTo("/pages/mine/avatar/index");
+            }
+        },
+
+        /**
+         * @upload上传头像
+         * @api接口请求
+         */
+        uploadApi(res) {
+            const useStore = useStores();
+            let data = { name: "file", filePath: res.tempFilePaths[0] };
+            uploadAvatar(data).then((response) => {
+                useStore.$state.avatar = response.data.url;
+                updateUserProfile({
+                    avatar: response.data.url,
+                }).then(() => { });
+            });
         },
 
+
         SET_THEMECOLOR(themeColor) {
             // storage.get(constant.name)
             this.themeColor = themeColor;

+ 17 - 1
src/store/modules/user.js

@@ -1,6 +1,7 @@
 import storage from "@/utils/storage";
 import constant from "@/utils/constant";
 import { login, logout, getInfo, getMobileTenantConfig } from "@/api/login";
+import { getUserProfile } from "@/api/system/user";
 import { getToken, setToken, removeToken } from "@/utils/auth";
 import { defineStore } from "pinia";
 import modal from "@/plugins/modal.plugins.js";
@@ -19,6 +20,11 @@ const useStores = defineStore("useStores", {
     loginBg: storage.get(constant.loginBackUrl),
     loginLogo: storage.get(constant.loginLogo),
     tenantId: storage.get(constant.tenantId),
+
+    user: {},
+    userArr: {},
+    postGroup: "", //岗位
+    roleGroup: "", //角色
   }),
   persist: {
     // 自定义数据持久化方式
@@ -67,6 +73,16 @@ const useStores = defineStore("useStores", {
       });
     },
 
+    // 获取用户信息
+    getUser() {
+      getUserProfile().then((response) => {
+        this.user = response.data.user;
+        this.userArr = JSON.parse(JSON.stringify(response.data.user));
+        this.postGroup = response.postGroup;
+        this.roleGroup = response.roleGroup;
+      });
+    },
+
     // 获取用户信息
     GetInfo() {
       return new Promise((resolve, reject) => {
@@ -81,7 +97,7 @@ const useStores = defineStore("useStores", {
               this.SET_ROLES(["ROLE_DEFAULT"]);
             }
 
-            this.SET_NAME(data.user.userName);
+            this.SET_NAME(data.user.nickName);
             this.SET_PHONE(data.user.phonenumber);
             this.SET_AVATAR(data.user.avatar);
 

+ 6 - 0
src/uni_modules/c-progress-circle/changelog.md

@@ -0,0 +1,6 @@
+## 1.0.2(2023-04-13)
+新增boderWidth属性 可设置边框宽度
+## 1.0.1(2023-03-27)
+兼容vue2
+## 1.0.0(2023-01-05)
+初次提交

+ 185 - 0
src/uni_modules/c-progress-circle/components/c-progress-circle/c-progress-circle.vue

@@ -0,0 +1,185 @@
+<template>
+	<view class='container' :style="{width:size,height:size}">
+		<view class="left">
+			<view class="leftcircle" :style="leftcircleStyle">
+			</view>
+		</view>
+		<view class="right">
+			<view class="rightcircle" :style="rightcircleStyle"></view>
+		</view>
+		<view class="cneter-box">
+			<slot>
+				{{progress*100}}%
+			</slot>
+		</view>
+	</view>
+</template>
+<script>
+	/**
+	 * c-lockScreen 环形进度条
+	 * @property {Number} progress 进度 0-1 默认0
+	 * @property {String} color 进度条颜色 默认#3ec3c1
+	 * @property {String} size 进度条尺寸 单位rpx 默认200rpx
+	 * @property {String} boderWidth 边框宽度 单位rpx 默认200rpx
+	 * */
+	 export default {
+	 	props:{
+			progress: {
+				type: Number,
+				default: 0
+			},
+			color: {
+				type: String,
+				default: '#3ec3c1'
+			},
+			size: {
+				type: String,
+				default: "200rpx"
+			},
+			boderWidth:{
+				type: String,
+				default: "200rpx"
+			}
+		},
+		computed:{
+			leftcircleStyle(){
+				return `border-width: calc(${this.boderWidth} * 0.1);
+				border-bottom-color:${this.color};
+				border-left-color:${this.color};
+				transform: rotate(${this.leftAngle});
+				`
+			},
+			rightcircleStyle(){
+				return `border-width: calc(${this.boderWidth} * 0.1);
+				border-top-color:${this.color};
+				border-right-color:${this.color};
+				transform: rotate(${this.rightAngle});`
+			},
+			rightAngle(){
+				if (this.progress >= 0.5) {
+					return 45+'deg'
+				} else {
+					return -135 + 180 * this.progress * 2+'deg'
+				}
+			},
+			leftAngle(){
+				if (this.progress < 0.5) {
+					return -135+'deg'
+				} else {
+					return -315 + 180 * this.progress * 2+'deg'
+				}
+			}
+		}
+	 }
+</script>
+<style lang="scss" scoped>
+	view{
+		box-sizing: border-box;
+	}
+	.container {
+		display: flex;
+		position: relative;
+		// width: v-bind(size);
+		// height: v-bind(size);
+		.left {
+			width: 50%;
+			height: 100%;
+			position: relative;
+			overflow: hidden;
+			top: 0;
+			left: 0;
+
+			.leftcircle {
+				width: 200%;
+				height: 100%;
+				border-color:#f5f7fa;
+				border-style: solid;
+				position: absolute;
+				border-radius: 50%;
+				left: 0px;
+				top: 0px;
+				transition: transform 0.2s;
+				//vue3
+				// border-width: calc(v-bind(size) * 0.1);
+				// border-bottom-color:v-bind(color);
+				// border-left-color:v-bind(color);
+				// transform: rotate(v-bind(leftAngle));
+
+				// animation-name: circle_left;
+				// animation-duration: 2s;
+				// animation-timing-function: linear;
+				// animation-iteration-count: infinite;
+
+			}
+
+		}
+
+		.right {
+			width: 50%;
+			height: 100%;
+			position: relative;
+			overflow: hidden;
+			top: 0;
+			right: 0;
+		}
+
+		.rightcircle {
+			width: 200%;
+			height: 100%;
+			border-radius: 50%;
+			border-color:#f5f7fa;
+			border-style: solid;
+			position: absolute;
+			
+			right: 0px;
+			top: 0px;
+			// animation-name: circle_right;
+			// animation-duration: 2s;
+			// animation-timing-function: linear;
+			// animation-iteration-count: infinite;
+			transition: transform 0.2s;
+			//vue3
+			// border-width: calc(v-bind(size) * 0.1);
+			// border-top-color:v-bind(color);
+			// border-right-color:v-bind(color);
+			// transform: rotate(v-bind(rightAngle));
+		}
+		.cneter-box{
+			position: absolute;
+			width: 100%;
+			height: 100%;
+			font-size: 24rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+	}
+
+
+
+
+
+
+	// @keyframes circle_right {
+	// 	0% {
+	// 		transform: rotate(-135deg);
+	// 	}
+
+	// 	50%,
+	// 	100% {
+	// 		transform: rotate(45deg);
+	// 	}
+	// }
+
+	// @keyframes circle_left {
+
+	// 	0%,
+	// 	50% {
+	// 		transform: rotate(-135deg);
+	// 	}
+
+	// 	100% {
+	// 		transform: rotate(45deg);
+	// 	}
+	// }
+</style>

+ 20 - 23
src/uni_modules/gb-progress/package.json → src/uni_modules/c-progress-circle/package.json

@@ -1,18 +1,15 @@
 {
-  "id": "gb-progress",
-  "displayName": "支持nvue的环形进度条圆形进度条非常简单粗暴",
-  "version": "1.0.0",
-  "description": "非常简单粗暴,支持vue和nvue,没有任何bug,导入就能用,简单粗暴为主",
+  "id": "c-progress-circle",
+  "displayName": "c-design c-progress-circle",
+  "version": "1.0.2",
+  "description": "环形进度条",
   "keywords": [
-    "进度条",
-    "nvue",
-    "vue",
-    "环形进度条",
-    "组件"
+    "c-progress-circle",
+    "环形进度条"
 ],
-  "repository": "",
+  "repository": "https://gitee.com/wangziwl/c-designc.git",
   "engines": {
-    "HBuilderX": "^3.3.13"
+    "HBuilderX": "^3.6.15"
   },
   "dcloudext": {
     "type": "component-vue",
@@ -49,7 +46,7 @@
         },
         "App": {
           "app-vue": "y",
-          "app-nvue": "y"
+          "app-nvue": "n"
         },
         "H5-mobile": {
           "Safari": "y",
@@ -59,25 +56,25 @@
         },
         "H5-pc": {
           "Chrome": "y",
-          "IE": "y",
+          "IE": "u",
           "Edge": "y",
           "Firefox": "y",
           "Safari": "y"
         },
         "小程序": {
           "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y",
-          "钉钉": "y",
-          "快手": "y",
-          "飞书": "y",
-          "京东": "y"
+          "阿里": "u",
+          "百度": "u",
+          "字节跳动": "u",
+          "QQ": "u",
+          "钉钉": "u",
+          "快手": "u",
+          "飞书": "u",
+          "京东": "u"
         },
         "快应用": {
-          "华为": "y",
-          "联盟": "y"
+          "华为": "u",
+          "联盟": "u"
         }
       }
     }

+ 98 - 0
src/uni_modules/c-progress-circle/readme.md

@@ -0,0 +1,98 @@
+# c-progress-circle
+
+### 
+- c-progress-circle 环形进度条
+
+### c-design交流群号:330647926
+
+### 示例预览
+[https://cloud.vuedata.wang/cdesign/#/pages/progress-circle/progress-circle](https://cloud.vuedata.wang/cdesign/#/pages/progress-circle/progress-circle)
+
+### 一、使用示例
+```html
+<template>
+	<view class="content">
+		<c-progress-circle :progress='progress' :color='color' :size='size' :boderWidth="boderWidth"></c-progress-circle>
+		<view class="btnBox">
+			<button size="mini" @click="add">+</button>
+			<view style="width: 100rpx;text-align: center;">
+				{{progress}}
+			</view>
+			<button size="mini" @click="reduce" type="default">-</button>
+		</view>
+		<view class="btnBox" style="padding-left: 100rpx;">边框颜色</view>
+		<view class="btnBox">
+			<button size="mini" @click="color='red'">红色</button>
+			<button size="mini" @click="color='green'">绿色</button>
+			<button size="mini" @click="color='orange'">橙色</button>
+		</view>
+		<view class="btnBox" style="padding-left: 100rpx;">进度条尺寸</view>
+		<view class="btnBox">
+			<button size="mini" @click="size='200rpx'">200rpx</button>
+			<button size="mini" @click="size='400rpx'">400rpx</button>
+			<button size="mini" @click="size='600rpx'">600rpx</button>
+		</view>
+		<view class="btnBox" style="padding-left: 100rpx;">边框宽度</view>
+		<view class="btnBox">
+			<button  size="mini" @click="boderWidth='200rpx'">200rpx</button>
+			<button  size="mini" @click="boderWidth='400rpx'">400rpx</button>
+			<button  size="mini" @click="boderWidth='600rpx'">600rpx</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				progress: 0.2,
+				color:'red',
+				size:'200rpx',
+				boderWidth:'200rpx'
+			}
+		},
+		methods: {
+			add() {
+				if(this.progress<1){
+					this.progress +=0.1
+					this.progress=this.progress.toFixed(1)*1
+				}
+			},
+			reduce(){
+				if(this.progress>0){
+					this.progress -=0.1
+					this.progress=this.progress.toFixed(1)*1	
+				}
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	.content{
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		padding-top: 20rpx;
+		font-size: 28rpx;
+	}
+	.btnBox{
+		width: 100%;
+		display: flex;
+		align-items: center;
+		margin-top:30rpx;
+	}
+</style>
+```
+
+
+
+
+### 二、属性介绍
+
+| 字段			| 类型		| 必填	| 默认值				| 描述								|
+| -----------	| --------	| ----	| ----------------------| -------------------------------	|
+| progress		| Number	| 否	|  0					| 进度 0-1							|
+| color			| String	| 否	|  #3ec3c1				| 进度条颜色						|
+| size			| String	| 否	|  200rpx				| 进度条尺寸 单位rpx				|
+| boderWidth	| String	| 否	|  200rpx				| 边框宽度 单位rpx					|

+ 0 - 2
src/uni_modules/gb-progress/changelog.md

@@ -1,2 +0,0 @@
-## 1.0.0(2023-04-16)
-首次上传,助力快速开发

+ 0 - 157
src/uni_modules/gb-progress/components/gb-progress/gb-progress.vue

@@ -1,157 +0,0 @@
-<template> 
-    <view class="gb_parent" :style="parentCss">
-        <view class="gb_process" :style="processCss"></view>
-        <view class="gb_left_part" :style="leftCss"></view>
-        <view class="gb_right_part" :style="rightCss"></view> 
-        <view class="gb_inner_circle" :style="innerCircleCss">
-		   <slot></slot> 
-        </view>
-    </view> 
-</template>
-
-<script>  
-export default {
-    data () {
-        return{ 
-			
-        }
-    },
-    props: {
-		// 圈底色
-        processColor: {
-            type: String,
-            default: '#42b983'  
-        },
-		// 进度色
-        originalColor: {
-            type: String,
-            default: '#EEEEEE'
-        },
-		// 圈内色
-		innerbgColor:{
-			type: String,
-			default: '#FFFFFF'
-		}, 
-		// 进度
-        process: {
-            type: Number,
-            default: 0
-        },
-		// 半径 单位rpx
-        radius: {
-            type: Number,
-            default: 100
-        },
-		// 进度条宽 单位rpx
-        barWidth: {
-            type: Number,
-            default: 3
-        },
-		// 起始弧度从顶开始顺时钟
-		startPosDegree:{
-			type:Number,
-			default:0
-		}
-    },
-    computed: {
-	  processCss() {
-	   const { radius, processColor } = this;
-	   return { 
-	 	   borderRadius: `${radius}rpx`,
-	       height: `${radius * 2}rpx`,
-	       width: `${radius * 2}rpx`,
-	       backgroundColor: processColor,
-	   }
-	  },
-      parentCss() {
-        const { radius,startPosDegree } = this;
-        return { 
-			borderRadius: `${radius}rpx`,
-            height: `${radius * 2}rpx`,
-            width: `${radius * 2}rpx`,
-			transform: 'rotate('+ startPosDegree +'deg )',
-        }
-      }, 
-      leftCss() {
-        let { radius, originalColor,process  } = this;
-		let leftTransformerDegree = (process>50? ((process>100?100:process) - 50) * 3.6:0)+ 'deg';
-        return {
-            height: `${radius * 2}rpx`,
-            width: `${radius}rpx`,
-			backgroundColor: originalColor,
-			transform: 'rotate('+ leftTransformerDegree +')',
-			transformOrigin: 'right center', 
-            borderTopLeftRadius: `${radius}rpx`,
-            borderBottomLeftRadius: `${radius}rpx`,
-			left:0,
-			top:0
-        }
-      },
-      rightCss() {
-        let { radius, processColor,originalColor,process } = this;
-		let rightTransformerDegree = ((process > 50 ? 0 : process) * 3.6) + 'deg';
-		
-        return {
-            height: `${radius * 2}rpx`,
-            width: `${radius}rpx`,
-            backgroundColor: process > 50 ?processColor:originalColor,
-			transform: 'rotate('+rightTransformerDegree+')',
-			transformOrigin: 'left center',
-            borderTopRightRadius: `${radius}rpx`,
-            borderBottomRightRadius: `${radius}rpx`,
-			left:`${radius}rpx`,
-			top:0
-        }
-	  },
-	  innerCircleCss() {
-	    const { radius, innerbgColor,barWidth ,startPosDegree} = this;
-	    return { 
-	  		borderRadius: `${radius - barWidth}rpx`,
-	        height: `${(radius - barWidth) * 2}rpx`,
-	        width: `${(radius - barWidth) * 2}rpx`,
-			transform: 'rotate('+ (0-startPosDegree) +'deg )',
-	        backgroundColor: innerbgColor,
-			left:`${barWidth}rpx`,
-			top:`${barWidth}rpx`,
-	    }
-	  }, 
-    },
-    mounted() {
-        
-    }, 
-    methods: {
-    }
-}
-</script>
-
-<style scoped>
-  .gb_component {
-    justify-content: center;
-    align-items: center;
-  }
-  .gb_parent {
-    justify-content: center;
-    align-items: center;
-    overflow: hidden;
-  }
-  .gb_process {
-    justify-content: center;
-    align-items: center;
-    overflow: hidden;
-  }
-  .gb_inner_circle {
-    justify-content: center;
-    align-items: center;
-    overflow: hidden;
-    position: absolute; 
-	display: flex;
-  }
-  .gb_left_part {
-    overflow: hidden;
-    position: absolute; 
-  }
-  .gb_right_part {
-    overflow: hidden;
-    position: absolute; 
-  }
-</style>

+ 0 - 111
src/uni_modules/gb-progress/readme.md

@@ -1,111 +0,0 @@
-##简单粗暴的纯css实现环形的倒计时,适合兼容vue和nvue,主要用途用于uniad的短视频联盟倒计时发放奖励的机制,
-
-##步骤
-
-1.导入
-
-2.使用示例
-```html
-<template>
-	<view>
-		<view class="zcolor-while wh-w750" style="position:sticky;">
-			<view style="height: 80rpx;"></view>
-			<view class="flex-row justify-space-between align-center wh-w750" style="height: 100rpx;">
-				<view class="flex-row align-center pa-20-0">
-					<text class="fs-40 f-w mar-l30">视频</text>
-				</view>
-			</view>
-		</view>
-		<view>
-			<ad-content-page :style="{height:swiperheight+'px'}" ref="adContentPage" @load="onadload" @error="onaderror"
-				adpid="1111111112"></ad-content-page>
-		</view>
-
-		<view style="position: fixed; top: 200rpx; left: 20rpx; background-color: rgba(0, 0, 0, 0.4);"
-			class=" justify-center align-center bor-r50" v-if="!iserr">
-			<gb-progress originalColor="#222222" processColor="#FF672D" innerbgColor="#222222" :process="process"
-				:startPosDegree="60" :radius="50" :barWidth="5">
-				<image src="../../static/hbbs.png" mode="widthFix" class="wh-80"></image>
-			</gb-progress>
-		</view>
-	</view>
-</template>
-
-<script>
-	
-	export default {
-		
-		data() {
-			return {
-				swiperheight: 0,
-				countdown: 0,
-				isback: true,
-				noClick: true,
-				interval: '',
-				iserr: false,
-				timer: '',
-				process: 0,
-				finishing: false,
-				p: 0
-			}
-		},
-		onLoad() {
-	
-			let res = uni.getSystemInfoSync()
-			console.log(res.screenHeight)
-			this.swiperheight = res.windowHeight - uni.upx2px(182)
-			
-		},
-		onShow() {
-			this.$nextTick(() => {
-				this.$refs.adContentPage.show();
-				this.isback = true
-			})
-		},
-		onHide() {
-			this.$refs.adContentPage.hide();
-			this.isback = false
-		},
-		
-		methods: {
-	
-			// 加载
-			onadload(e) {
-				console.log("onload");
-				this.getBrowse()
-			},
-			onaderror(e) {
-				this.iserr = true
-				clearInterval(this.interval);
-				console.log(e);
-			},
-			// 倒计时
-			getBrowse() {
-				this.interval = setInterval(() => {
-					if (this.process < 100) {
-						if (this.isback) {
-							this.process = this.process + 2;
-						}
-					} else {
-						clearInterval(this.interval);
-						// 页面返回后停止,往下执行
-						if (this.isback) {
-							this.process = 0
-							this.getBrowse()
-						}
-					}
-				}, 1000)
-			}
-	
-		}
-	}
-</script>
-
-<style>
-
-</style>
-
-
-
-
-```

+ 1 - 1
src/utils/request.js

@@ -1,4 +1,4 @@
-import useStores from "@/store/modules/user.js";
+import { useStores } from "@/store/modules/index";
 import configs from "@/config";
 import { getToken } from "@/utils/auth";
 import modal from "@/plugins/modal.plugins";

+ 1 - 1
src/utils/upload.js

@@ -1,4 +1,4 @@
-import useStores from "@/store/modules/user.js";
+import { useStores } from "@/store/modules/index";
 import configs from "@/config";
 import { getToken } from "@/utils/auth";
 import modal from "@/plugins/modal.plugins";