4 Commits cc12291c86 ... b4aa6aa0b1

Autore SHA1 Messaggio Data
  wangtao b4aa6aa0b1 添加霸屏退出弹框 2 mesi fa
  fanghuisheng 39b7210f5c 代码合并提交 2 mesi fa
  fanghuisheng 2539f80d4b 优化公共组件样式 2 mesi fa
  fanghuisheng bb83beb081 基础框架代码优化/巡更系统迭代更新 2 mesi fa
46 ha cambiato i file con 1456 aggiunte e 1209 eliminazioni
  1. 3 2
      package.json
  2. 23 7
      src/App.vue
  3. 30 16
      src/components/oa-scroll/index.vue
  4. 6 2
      src/config.js
  5. 6 6
      src/manifest.json
  6. 771 779
      src/pages.json
  7. 85 71
      src/pages/business/common/projectMange/list/index.vue
  8. 57 62
      src/pages/business/common/projectMange/record/details.vue
  9. 70 88
      src/pages/business/common/projectMange/record/index.vue
  10. 1 0
      src/pages/business/common/videoMonitor/videoDetail.vue
  11. 1 1
      src/pages/business/common/videoMonitor/videoList.vue
  12. 1 0
      src/pages/business/fireIot/alarmManage/alarmDetails/index.vue
  13. 0 1
      src/pages/business/fireIot/alarmManage/alarmDetailsList/index.vue
  14. 1 0
      src/pages/business/fireIot/alarmManage/index.vue
  15. 1 0
      src/pages/business/fireIot/customManage/index.vue
  16. 1 0
      src/pages/business/fireIot/deviceManage/components/deviceDetails.vue
  17. 1 0
      src/pages/business/fireIot/deviceManage/components/deviceDetailsList.vue
  18. 1 0
      src/pages/business/fireIot/deviceManage/index.vue
  19. 1 0
      src/pages/business/fireIot/facilitiesGather/index.vue
  20. 19 2
      src/pages/business/fireIot/facilitiesManage/facilitiesDetails.vue
  21. 1 0
      src/pages/business/fireIot/facilitiesManage/facilitiesDetailsList.vue
  22. 1 0
      src/pages/business/fireIot/facilitiesManage/index.vue
  23. 1 0
      src/pages/business/fireIot/repairManage/index.vue
  24. 1 0
      src/pages/business/fireIot/repairManage/repairDetails.vue
  25. 0 1
      src/pages/business/fireIot/repairManage/repairDetailsList.vue
  26. 1 0
      src/pages/business/fireIot/repairReport/index.vue
  27. 1 0
      src/pages/business/fireIot/repairReport/record.vue
  28. 1 0
      src/pages/business/mhxf/fireReport/index.vue
  29. 1 0
      src/pages/business/zhaf/xunJian/collect/components/collectDetail.vue
  30. 1 0
      src/pages/business/zhaf/xunJian/collect/index.vue
  31. 0 1
      src/pages/business/zhxf/fireInspect/inspectDetailsList/index.vue
  32. 0 1
      src/pages/common/appMessage/index.vue
  33. 2 2
      src/pages/common/face/index.vue
  34. 1 1
      src/pages/common/searchSelect/index.vue
  35. 2 2
      src/pages/index.vue
  36. 1 1
      src/pages/info.vue
  37. 32 5
      src/pages/login.vue
  38. 1 1
      src/pages/mine/info/index.vue
  39. 1 0
      src/permission.js
  40. 18 21
      src/plugins/common.plugins.js
  41. 5 0
      src/plugins/index.js
  42. 149 0
      src/plugins/keyListen.plugins.js
  43. 16 5
      src/store/modules/setting.js
  44. 25 1
      src/store/modules/xunJian.js
  45. 0 130
      src/utils/keyListen.js
  46. 115 0
      unpackage/config/setting.js

+ 3 - 2
package.json

@@ -33,7 +33,8 @@
         "build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
         "build:quickapp-webview-union": "uni build -p quickapp-webview-union",
         "clear": "rimraf node_modules && npm install --force",
-        "clean": "npm cache clean --force"
+        "clean": "npm cache clean --force",
+        "update:setting": "node unpackage/config/setting.js"
     },
     "dependencies": {
         "@amap/amap-jsapi-loader": "^1.0.1",
@@ -75,4 +76,4 @@
         "sass": "1.57.1",
         "vite": "5.2.8"
     }
-}
+}

+ 23 - 7
src/App.vue

@@ -1,28 +1,44 @@
 <script setup>
 /*----------------------------------依赖引入-----------------------------------*/
-import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
+import { onLoad, onShow, onHide, onLaunch, onReady, onBackPress } from "@dcloudio/uni-app";
 import { defineComponent, getCurrentInstance, inject, nextTick, onMounted, watchEffect, ref } from "vue";
 /*----------------------------------接口引入-----------------------------------*/
 /*----------------------------------组件引入-----------------------------------*/
 /*----------------------------------store引入-----------------------------------*/
 /*----------------------------------公共方法引入-----------------------------------*/
 import config from "./config";
-import JKeyListen from "@/utils/keyListen.js";
 import { storageSystem } from "@/utils/storage";
 /*----------------------------------公共变量-----------------------------------*/
 const { proxy } = getCurrentInstance();
 /*----------------------------------变量声明-----------------------------------*/
-
 function initApp() {
   proxy.$settingStore.initThemeColor(storageSystem.get("themeColor")); //初始化默认主题
   proxy.$settingStore.systemHeightTop(); //初始化获取安全区高度
-
   //#ifdef APP-PLUS
+  stteingInit();
+  //#endif
+}
+
+//设置初始化
+function stteingInit() {
   plus.screen.unlockOrientation(); //解除屏幕方向的锁定,但是不一定是竖屏;
-  plus.screen.lockOrientation("portrait-primary"); //设置屏幕方向(1.竖屏正方向:portrait-primary 2.竖屏反方向:portrait-secondary 3.横屏正方向:landscape-primary 4.横屏反方向:landscape-secondary 5.自然方向:default)
+
+  // 综合智慧云
+  if (config.appInfo.appid === "__UNI__36DE3A0") {
+    plus.screen.lockOrientation("portrait-primary"); //设置屏幕方向(1.竖屏正方向:portrait-primary 2.竖屏反方向:portrait-secondary 3.横屏正方向:landscape-primary 4.横屏反方向:landscape-secondary 5.自然方向:default)
+  }
+  // 智能巡更
+  else if (config.appInfo.appid === "__UNI__BF1A1F0") {
+    plus.screen.lockOrientation("portrait-primary"); //设置屏幕方向(1.竖屏正方向:portrait-primary 2.竖屏反方向:portrait-secondary 3.横屏正方向:landscape-primary 4.横屏反方向:landscape-secondary 5.自然方向:default)
+    proxy.$keyListen.startListen(true); //开启物理按钮监听
+  }
+  // 智能会议
+  else if (config.appInfo.appid === "__UNI__F3963F8") {
+    plus.screen.lockOrientation("landscape-primary"); //设置屏幕方向(1.竖屏正方向:portrait-primary 2.竖屏反方向:portrait-secondary 3.横屏正方向:landscape-primary 4.横屏反方向:landscape-secondary 5.自然方向:default)
+    plus.navigator.hideSystemNavigation(); //隐藏安卓底部虚拟导航键
+  }
+
   proxy.$settingStore.pushListener(); //开启消息推送监听
-  // JKeyListen.startListen(true); //开启物理按钮监听
-  //#endif
 }
 
 // 设置手机通知权限

+ 30 - 16
src/components/oa-scroll/index.vue

@@ -3,10 +3,10 @@
     :class="customClass"
     :style="{
       //#ifdef APP-PLUS || MP-WEIXIN
-      height: !isSticky ? 'calc(100vh - 0px)' : 'calc(100vh - 44px)',
+      height: `calc(100vh - (${!isSticky ? '0px' : '44px'}))`,
       //#endif
       //#ifdef H5
-      height: !isSticky ? 'calc(100vh - 44px)' : 'calc(100vh - 88px)',
+      height: `calc(100vh - (${!isSticky ? '44px' : '88px'}))`,
       //#endif
       ...customStyle,
     }"
@@ -40,11 +40,23 @@
     </slot>
     <slot name="default"> </slot>
     <slot name="bottomLoading">
-      <div class="bottoBox" :style="`margin-top:20px;padding-bottom:${lowerThreshold + 'px'}`">
-        <span v-show="total != 0 && refresherLoad && refresherLoadTitle">
+      <div class="bottoBox">
+        <span
+          v-show="total != 0 && refresherLoad && refresherLoadTitle"
+          :style="{
+            marginTop: '20px',
+            marginBottom: '20px',
+          }"
+        >
           {{ pageSize >= total ? "没有更多啦~" : isScrolltolower }}
         </span>
-        <span v-show="total == 0 && refresherEnabled && refresherEnabledTitle && !triggered">
+        <span
+          v-show="total == 0 && refresherEnabled && refresherEnabledTitle && !triggered"
+          :style="{
+            marginTop: '20px',
+            marginBottom: '20px',
+          }"
+        >
           <image style="width: 160px; height: 160px" src="@/static/images/data.png"></image>
           <view>暂无数据</view>
         </span>
@@ -54,7 +66,7 @@
 </template>
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs, toRef, watch } from "vue";
+import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs, toRef, watch, computed } from "vue";
 
 const emit = defineEmits(["load", "refresh"]);
 const props = defineProps({
@@ -98,11 +110,6 @@ const props = defineProps({
     type: Boolean,
     default: true,
   },
-  //距离底部上拉加载距离
-  lowerThreshold: {
-    type: Number,
-    default: 0,
-  },
   //是否开启下拉刷新
   refresherEnabled: {
     type: Boolean,
@@ -116,7 +123,7 @@ const props = defineProps({
   //距离顶部下拉刷新距离
   refresherThreshold: {
     type: Number,
-    default: 45,
+    default: 44,
   },
   //是否使用默认下拉刷新样式(支持设置 black、white、none/none 表示不使用默认样式)
   refresherDefaultStyle: {
@@ -135,16 +142,23 @@ const props = defineProps({
   },
 });
 
-const { pageSize, total, scrollTop, customClass, customStyle, refresherLoad, lowerThreshold, refresherEnabled, refresherEnabledTitle, refresherThreshold, refresherDefaultStyle, refresherBackground } =
-  toRefs(props);
+const { pageSize, total, scrollTop, customClass, customStyle, refresherLoad, refresherEnabled, refresherEnabledTitle, refresherThreshold, refresherDefaultStyle, refresherBackground } = toRefs(props);
 
-const defaultArray = reactive({
+const state = reactive({
+  StatusBarHeight: computed(() => {
+    let systemInfo = uni.getSystemInfoSync();
+    return systemInfo.statusBarHeight + "px";
+  }),
+  tabBarHeight: computed(() => {
+    let systemInfo = uni.getSystemInfoSync();
+    return systemInfo.screenHeight - systemInfo.safeArea.bottom + "px";
+  }),
   triggered: false,
   topTis: "松手刷新",
   isScrolltolower: "上拉加载更多",
 });
 
-const { triggered, topTis, isScrolltolower } = toRefs(defaultArray);
+const { StatusBarHeight, tabBarHeight, triggered, topTis, isScrolltolower } = toRefs(state);
 
 /**
  * @scrollView上拉刷新

+ 6 - 2
src/config.js

@@ -1,3 +1,5 @@
+import manifest from './manifest.json'
+
 // 应用全局配置
 export default {
   //#ifdef APP-PLUS || MP-WEIXIN
@@ -11,8 +13,10 @@ export default {
   websiteUrl: "https://qhome.usky.cn",
   // 应用信息
   appInfo: {
+    // 应用id
+    appid: manifest.appid,
     // 应用名称
-    name: "usky-app-mobile",
+    name: manifest.name,
     // 应用版本
     version: uni.getSystemInfoSync().appWgtVersion || uni.getSystemInfoSync().appVersion,
     // 应用logo
@@ -44,4 +48,4 @@ export default {
       },
     ],
   },
-};
+};

+ 6 - 6
src/manifest.json

@@ -1,9 +1,9 @@
 {
-    "name" : "综合智慧云",
-    "appid" : "__UNI__36DE3A0",
-    "description" : "综合智慧云APP,是一款助力于企业数字化的应用平台,帮助企业提升办公效率,实现组织数字化和业务数字化。",
-    "versionName" : "2.1.9",
-    "versionCode" : 19,
+    "name" : "智能巡更",
+    "appid" : "__UNI__BF1A1F0",
+    "description" : "智能巡更app,是一款用于监督和记录巡逻人员按照预定路线和时间进行巡逻的系统。",
+    "versionName" : "2.2.1",
+    "versionCode" : 21,
     "transformPx" : false,
     "app-plus" : {
         "compatible" : {
@@ -206,7 +206,7 @@
     },
     "h5" : {
         "publicPath" : "./",
-        "title" : "综合智慧云",
+        "title" : "智能巡更",
         "router" : {
             "mode" : "hash"
         },

+ 771 - 779
src/pages.json

@@ -1,805 +1,797 @@
 {
-  "pages": [
-    {
-      "path": "pages/index",
-      "style": {
-        "navigationStyle": "custom",
-        "navigationBarTitleText": "工作台",
-        "app-plus": {
-          "bounce": "none",
-          "titleNView": false
-        }
-      }
-    },
-    {
-      "path": "pages/login",
-      "style": {
-        "navigationBarTitleText": "登录",
-        "navigationStyle": "custom",
-        "navigationBarTextStyle": "black" // 仅支持 black/white
-      }
-    },
-    {
-      "path": "pages/register",
-      "style": {
-        "navigationBarTitleText": "注册",
-        "navigationStyle": "custom",
-        "navigationBarTextStyle": "black" // 仅支持 black/white
-      }
-    },
-    {
-      "path": "pages/serveConfigSelect",
-      "style": {
-        "navigationBarTitleText": "服务器配置",
-        "navigationStyle": "custom",
-        "navigationBarTextStyle": "black" // 仅支持 black/white
-      }
-    },
-    {
-      "path": "pages/serveConfig",
-      "style": {
-        "navigationBarTitleText": "服务器配置",
-        "navigationStyle": "custom",
-        "navigationBarTextStyle": "black" // 仅支持 black/white
-      }
-    },
-    {
-      "path": "pages/info",
-      "style": {
-        "navigationBarTitleText": "消息",
-        "navigationStyle": "custom",
-        "enablePullDownRefresh": false,
-        "app-plus": {
-          "bounce": "none",
-          "titleNView": false
-        }
-      }
-    },
-    {
-      "path": "pages/mine",
-      "style": {
-        // "disableScroll": true,
-        "navigationBarTitleText": "我的",
-        "navigationStyle": "custom",
-        "app-plus": {
-          "bounce": "none",
-          "titleNView": false
-        }
-      }
-    }
-  ],
-  "subPackages": [
-    // 公共
-    {
-      "root": "pages/common",
-      "pages": [
-        {
-          "path": "webview/index",
-          "style": {
-            "navigationBarTitleText": "浏览网页"
-          }
-        },
-        {
-          "path": "textview/index",
-          "style": {
-            "navigationBarTitleText": "浏览文本"
-          }
-        },
-        {
-          "path": "square/index",
-          "style": {
-            "navigationBarTitleText": "",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "invoicing/index",
-          "style": {
-            "navigationBarTitleText": "续费提醒",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "phoneVerify/index",
-          "style": {
-            "navigationBarTitleText": "",
-            "navigationBarTextStyle": "black",
-            "navigationBarBackgroundColor": "#FFFFFF"
-          }
-        },
-        {
-          "path": "success/index",
-          "style": {
-            "navigationBarTitleText": "提交成功",
-            "navigationStyle": "custom",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "appMessage/index",
-          "style": {
-            "navigationBarTitleText": "消息列表",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "appMessage/details",
-          "style": {
-            "navigationBarTitleText": "消息详情",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "alarmMessage/index",
-          "style": {
-            "navigationBarTitleText": "告警通知",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "evaluate/index",
-          "style": {
-            "navigationBarTitleText": "服务评价",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "nfc/index",
-          "style": {
-            "navigationBarTitleText": "NFC读取",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "searchSelect/index",
-          "style": {
-            "navigationBarTitleText": "搜索",
-            "navigationStyle": "custom",
-            "enablePullDownRefresh": false,
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
+    "pages": [
+        {
+            "path": "pages/index",
+            "style": {
+                "navigationStyle": "custom",
+                "navigationBarTitleText": "工作台",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": false
+                }
             }
-          }
         },
         {
-          "path": "face/index",
-          "style": {
-            "navigationBarTitleText": "人脸识别",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
+            "path": "pages/login",
+            "style": {
+                "navigationBarTitleText": "登录",
+                "navigationStyle": "custom",
+                "navigationBarTextStyle": "black"
             }
-          }
-        }
-      ]
-    },
-    // 我的
-    {
-      "root": "pages/mine",
-      "pages": [
-        {
-          "path": "info/index",
-          "style": {
-            "navigationBarTitleText": "我的信息"
-          }
-        },
-        {
-          "path": "msg/index",
-          "style": {
-            "navigationBarTitleText": "消息设置"
-          }
-        },
-        {
-          "path": "secure/index",
-          "style": {
-            "navigationBarTitleText": "账号与安全"
-          }
-        },
-        {
-          "path": "secure/loginLog/index",
-          "style": {
-            "navigationBarTitleText": "登录日志",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "secure/fingerprint/index",
-          "style": {
-            "navigationBarTitleText": "",
-            "navigationBarTextStyle": "black",
-            "navigationBarBackgroundColor": "#FFFFFF"
-          }
-        },
-        {
-          "path": "avatar/index",
-          "style": {
-            "navigationBarTitleText": "修改头像"
-          }
         },
         {
-          "path": "help/index",
-          "style": {
-            "navigationBarTitleText": "常见问题",
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
+            "path": "pages/register",
+            "style": {
+                "navigationBarTitleText": "注册",
+                "navigationStyle": "custom",
+                "navigationBarTextStyle": "black"
             }
-          }
         },
         {
-          "path": "about/index",
-          "style": {
-            "navigationBarTitleText": "关于我们",
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
+            "path": "pages/serveConfigSelect",
+            "style": {
+                "navigationBarTitleText": "服务器配置",
+                "navigationStyle": "custom",
+                "navigationBarTextStyle": "black"
             }
-          }
-        },
-        {
-          "path": "setting/index",
-          "style": {
-            "navigationBarTitleText": "设置",
-            "enablePullDownRefresh": false
-          }
-        }
-      ]
-    },
-
-    // 智慧安防
-    {
-      "root": "pages/business/zhaf/",
-      "pages": [
-        //巡检模块 开始
-        {
-          "path": "xunJian/xunJian",
-          "style": {
-            "navigationBarTitleText": "巡检",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/plan/index",
-          "style": {
-            "navigationBarTitleText": "巡检计划",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/plan/components/siteDetails",
-          "style": {
-            "navigationBarTitleText": "站点详情",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/plan/components/content",
-          "style": {
-            "navigationBarTitleText": "巡检内容",
-            "enablePullDownRefresh": false
-          }
         },
         {
-          "path": "xunJian/plan/components/report",
-          "style": {
-            "navigationBarTitleText": "巡检上报",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/record/index",
-          "style": {
-            "navigationBarTitleText": "巡检记录",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/record/recordDetail/index",
-          "style": {
-            "navigationBarTitleText": "巡检记录详情",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/collect/index",
-          "style": {
-            "navigationBarTitleText": "点位采集",
-            "navigationStyle": "custom",
-            "enablePullDownRefresh": false,
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
+            "path": "pages/serveConfig",
+            "style": {
+                "navigationBarTitleText": "服务器配置",
+                "navigationStyle": "custom",
+                "navigationBarTextStyle": "black"
             }
-          }
-        },
-        {
-          "path": "xunJian/collect/components/collectDetail",
-          "style": {
-            "navigationBarTitleText": "采集上报",
-            "enablePullDownRefresh": false
-          }
         },
         {
-          "path": "xunJian/collect/components/collectRecord",
-          "style": {
-            "navigationBarTitleText": "采集记录",
-            "navigationStyle": "custom",
-            "enablePullDownRefresh": false,
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
+            "path": "pages/info",
+            "style": {
+                "navigationBarTitleText": "消息",
+                "navigationStyle": "custom",
+                "enablePullDownRefresh": false,
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": false
+                }
             }
-          }
-        },
-        {
-          "path": "xunJian/error/index",
-          "style": {
-            "navigationBarTitleText": "异常上报",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/error/errorList",
-          "style": {
-            "navigationBarTitleText": "异常列表",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/error/errorListDetail",
-          "style": {
-            "navigationBarTitleText": "事件详情",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "xunJian/error/errorDisposition",
-          "style": {
-            "navigationBarTitleText": "处置内容",
-            "enablePullDownRefresh": false
-          }
-        },
-        //巡检模块 结束
-        //人员签到 开始
-        {
-          "path": "signIn/index",
-          "style": {
-            "navigationBarTitleText": "人员签到",
-            "enablePullDownRefresh": false
-          }
-        }
-        //人员签到 签退
-      ]
-    },
-    // 闵行消防
-    {
-      "root": "pages/business/mhxf/",
-      "pages": [
-        {
-          "path": "informationSelect/index",
-          "style": {
-            "navigationBarTitleText": "信息查询",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "deviceManage/index",
-          "style": {
-            "navigationBarTitleText": "设备管理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "coordination/index",
-          "style": {
-            "navigationBarTitleText": "协同作战地图",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "unitInfoCollection/index",
-          "style": {
-            "navigationBarTitleText": "单位信息采集",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "fireReport/index",
-          "style": {
-            "navigationBarTitleText": "消防报告",
-            "enablePullDownRefresh": false
-          }
         },
         {
-          "path": "fireReport/components/detailed",
-          "style": {
-            "navigationBarTitleText": "消防报告",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "fireReport/components/detailedPath",
-          "style": {
-            "navigationBarTitleText": "消防报告",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "needMatter/index",
-          "style": {
-            "navigationBarTitleText": "待办事项",
-            "enablePullDownRefresh": false
-          }
-        }
-      ]
-    },
-    // 智慧消防
-    {
-      "root": "pages/business/zhxf/",
-      "pages": [
-        {
-          "path": "messagePush/index",
-          "style": {
-            "navigationBarTitleText": "消息推送设置",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "building/index",
-          "style": {
-            "navigationBarTitleText": "建筑管理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "fireInspect/index",
-          "style": {
-            "navigationBarTitleText": "消防督察单",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "fireInspect/inspectDetailsList/index",
-          "style": {
-            "navigationBarTitleText": "",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "fireInspect/inspectDetails/index",
-          "style": {
-            "navigationBarTitleText": "消防督察单处理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "funReport/index",
-          "style": {
-            "navigationBarTitleText": "功能报备",
-            "enablePullDownRefresh": false,
-            "onReachBottomDistance": 100 //距离底部多远时触发 单位px
-          }
-        },
-        {
-          "path": "funReport/funcAdd/index",
-          "style": {
-            "navigationBarTitleText": "功能报备新增",
-            "enablePullDownRefresh": false
-          }
+            "path": "pages/mine",
+            "style": {
+                "navigationBarTitleText": "我的",
+                "navigationStyle": "custom",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": false
+                }
+            }
         }
-      ]
-    },
-    // 消防物联网
-    {
-      "root": "pages/business/fireIot/",
-      "pages": [
-        {
-          "path": "deviceManage/index",
-          "style": {
-            "navigationBarTitleText": "设备管理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "deviceManage/components/deviceDetailsList",
-          "style": {
-            "navigationBarTitleText": "",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "deviceManage/components/deviceDetails",
-          "style": {
-            "navigationBarTitleText": "设备详情",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "facilitiesGather/index",
-          "style": {
-            "navigationBarTitleText": "设施采集",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "facilitiesGather/mapGather",
-          "style": {
-            "navigationBarTitleText": "地图采集",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "facilitiesManage/index",
-          "style": {
-            "navigationBarTitleText": "设施管理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "facilitiesManage/mapFacilitiesView",
-          "style": {
-            "navigationBarTitleText": "设施查看",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "facilitiesManage/facilitiesDetailsList",
-          "style": {
-            "navigationBarTitleText": "",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "facilitiesManage/facilitiesDetails",
-          "style": {
-            "navigationBarTitleText": "设施详情",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "alarmManage/index",
-          "style": {
-            "navigationBarTitleText": "告警管理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "alarmManage/alarmDetailsList/index",
-          "style": {
-            "navigationBarTitleText": "",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "alarmManage/alarmDetails/index",
-          "style": {
-            "navigationBarTitleText": "告警处理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "repairManage/repairDetailsList",
-          "style": {
-            "navigationBarTitleText": "报修列表",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "repairManage/repairDetails",
-          "style": {
-            "navigationBarTitleText": "报修处理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "customManage/index",
-          "style": {
-            "navigationBarTitleText": "客户管理",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "repairReport/index",
-          "style": {
-            "navigationBarTitleText": "报修申请",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "repairReport/record",
-          "style": {
-            "navigationBarTitleText": "报修历史",
-            "enablePullDownRefresh": false
-          }
+    ],
+    "subPackages": [
+        {
+            "name": "公共模块",
+            "root": "pages/common",
+            "pages": [
+                {
+                    "path": "webview/index",
+                    "style": {
+                        "navigationBarTitleText": "浏览网页"
+                    }
+                },
+                {
+                    "path": "textview/index",
+                    "style": {
+                        "navigationBarTitleText": "浏览文本"
+                    }
+                },
+                {
+                    "path": "square/index",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "invoicing/index",
+                    "style": {
+                        "navigationBarTitleText": "续费提醒",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "phoneVerify/index",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "navigationBarTextStyle": "black",
+                        "navigationBarBackgroundColor": "#FFFFFF"
+                    }
+                },
+                {
+                    "path": "success/index",
+                    "style": {
+                        "navigationBarTitleText": "提交成功",
+                        "navigationStyle": "custom",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "appMessage/index",
+                    "style": {
+                        "navigationBarTitleText": "消息列表",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "appMessage/details",
+                    "style": {
+                        "navigationBarTitleText": "消息详情",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "alarmMessage/index",
+                    "style": {
+                        "navigationBarTitleText": "告警通知",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "evaluate/index",
+                    "style": {
+                        "navigationBarTitleText": "服务评价",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "nfc/index",
+                    "style": {
+                        "navigationBarTitleText": "NFC读取",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "searchSelect/index",
+                    "style": {
+                        "navigationBarTitleText": "搜索",
+                        "navigationStyle": "custom",
+                        "enablePullDownRefresh": false,
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "face/index",
+                    "style": {
+                        "navigationBarTitleText": "人脸识别",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                }
+            ]
+        },
+        {
+            "name": "我的",
+            "root": "pages/mine",
+            "pages": [
+                {
+                    "path": "info/index",
+                    "style": {
+                        "navigationBarTitleText": "我的信息"
+                    }
+                },
+                {
+                    "path": "msg/index",
+                    "style": {
+                        "navigationBarTitleText": "消息设置"
+                    }
+                },
+                {
+                    "path": "secure/index",
+                    "style": {
+                        "navigationBarTitleText": "账号与安全"
+                    }
+                },
+                {
+                    "path": "secure/loginLog/index",
+                    "style": {
+                        "navigationBarTitleText": "登录日志",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "secure/fingerprint/index",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "navigationBarTextStyle": "black",
+                        "navigationBarBackgroundColor": "#FFFFFF"
+                    }
+                },
+                {
+                    "path": "avatar/index",
+                    "style": {
+                        "navigationBarTitleText": "修改头像"
+                    }
+                },
+                {
+                    "path": "help/index",
+                    "style": {
+                        "navigationBarTitleText": "常见问题",
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "about/index",
+                    "style": {
+                        "navigationBarTitleText": "关于我们",
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "setting/index",
+                    "style": {
+                        "navigationBarTitleText": "设置",
+                        "enablePullDownRefresh": false
+                    }
+                }
+            ]
+        },
+        {
+            "name": "智慧安防",
+            "root": "pages/business/zhaf/",
+            "pages": [
+                {
+                    "path": "xunJian/xunJian",
+                    "style": {
+                        "navigationBarTitleText": "巡检",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/plan/index",
+                    "style": {
+                        "navigationBarTitleText": "巡检计划",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/plan/components/siteDetails",
+                    "style": {
+                        "navigationBarTitleText": "站点详情",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/plan/components/content",
+                    "style": {
+                        "navigationBarTitleText": "巡检内容",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/plan/components/report",
+                    "style": {
+                        "navigationBarTitleText": "巡检上报",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/record/index",
+                    "style": {
+                        "navigationBarTitleText": "巡检记录",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/record/recordDetail/index",
+                    "style": {
+                        "navigationBarTitleText": "巡检记录详情",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/collect/index",
+                    "style": {
+                        "navigationBarTitleText": "点位采集",
+                        "navigationStyle": "custom",
+                        "enablePullDownRefresh": false,
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "xunJian/collect/components/collectDetail",
+                    "style": {
+                        "navigationBarTitleText": "采集上报",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/collect/components/collectRecord",
+                    "style": {
+                        "navigationBarTitleText": "采集记录",
+                        "navigationStyle": "custom",
+                        "enablePullDownRefresh": false,
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "xunJian/error/index",
+                    "style": {
+                        "navigationBarTitleText": "异常上报",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/error/errorList",
+                    "style": {
+                        "navigationBarTitleText": "异常列表",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/error/errorListDetail",
+                    "style": {
+                        "navigationBarTitleText": "事件详情",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "xunJian/error/errorDisposition",
+                    "style": {
+                        "navigationBarTitleText": "处置内容",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "signIn/index",
+                    "style": {
+                        "navigationBarTitleText": "人员签到",
+                        "enablePullDownRefresh": false
+                    }
+                }
+            ]
+        },
+        {
+            "name": "闵行消防",
+            "root": "pages/business/mhxf/",
+            "pages": [
+                {
+                    "path": "informationSelect/index",
+                    "style": {
+                        "navigationBarTitleText": "信息查询",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "deviceManage/index",
+                    "style": {
+                        "navigationBarTitleText": "设备管理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "coordination/index",
+                    "style": {
+                        "navigationBarTitleText": "协同作战地图",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "unitInfoCollection/index",
+                    "style": {
+                        "navigationBarTitleText": "单位信息采集",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "fireReport/index",
+                    "style": {
+                        "navigationBarTitleText": "消防报告",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "fireReport/components/detailed",
+                    "style": {
+                        "navigationBarTitleText": "消防报告",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "fireReport/components/detailedPath",
+                    "style": {
+                        "navigationBarTitleText": "消防报告",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "needMatter/index",
+                    "style": {
+                        "navigationBarTitleText": "待办事项",
+                        "enablePullDownRefresh": false
+                    }
+                }
+            ]
+        },
+        {
+            "name": "智慧消防",
+            "root": "pages/business/zhxf/",
+            "pages": [
+                {
+                    "path": "messagePush/index",
+                    "style": {
+                        "navigationBarTitleText": "消息推送设置",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "building/index",
+                    "style": {
+                        "navigationBarTitleText": "建筑管理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "fireInspect/index",
+                    "style": {
+                        "navigationBarTitleText": "消防督察单",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "fireInspect/inspectDetailsList/index",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "fireInspect/inspectDetails/index",
+                    "style": {
+                        "navigationBarTitleText": "消防督察单处理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "funReport/index",
+                    "style": {
+                        "navigationBarTitleText": "功能报备",
+                        "enablePullDownRefresh": false,
+                        "onReachBottomDistance": 100
+                    }
+                },
+                {
+                    "path": "funReport/funcAdd/index",
+                    "style": {
+                        "navigationBarTitleText": "功能报备新增",
+                        "enablePullDownRefresh": false
+                    }
+                }
+            ]
+        },
+        {
+            "name": "消防物联网",
+            "root": "pages/business/fireIot/",
+            "pages": [
+                {
+                    "path": "deviceManage/index",
+                    "style": {
+                        "navigationBarTitleText": "设备管理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "deviceManage/components/deviceDetailsList",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "deviceManage/components/deviceDetails",
+                    "style": {
+                        "navigationBarTitleText": "设备详情",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "facilitiesGather/index",
+                    "style": {
+                        "navigationBarTitleText": "设施采集",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "facilitiesGather/mapGather",
+                    "style": {
+                        "navigationBarTitleText": "地图采集",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "facilitiesManage/index",
+                    "style": {
+                        "navigationBarTitleText": "设施管理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "facilitiesManage/mapFacilitiesView",
+                    "style": {
+                        "navigationBarTitleText": "设施查看",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "facilitiesManage/facilitiesDetailsList",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "facilitiesManage/facilitiesDetails",
+                    "style": {
+                        "navigationBarTitleText": "设施详情",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "alarmManage/index",
+                    "style": {
+                        "navigationBarTitleText": "告警管理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "alarmManage/alarmDetailsList/index",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "alarmManage/alarmDetails/index",
+                    "style": {
+                        "navigationBarTitleText": "告警处理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "repairManage/repairDetailsList",
+                    "style": {
+                        "navigationBarTitleText": "报修列表",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "repairManage/repairDetails",
+                    "style": {
+                        "navigationBarTitleText": "报修处理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "customManage/index",
+                    "style": {
+                        "navigationBarTitleText": "客户管理",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "repairReport/index",
+                    "style": {
+                        "navigationBarTitleText": "报修申请",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "repairReport/record",
+                    "style": {
+                        "navigationBarTitleText": "报修历史",
+                        "enablePullDownRefresh": false
+                    }
+                }
+            ]
+        },
+        {
+            "name": "业务公共模块",
+            "root": "pages/business/common/",
+            "pages": [
+                {
+                    "path": "fastMail/index",
+                    "style": {
+                        "navigationBarTitleText": "我的快递",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "videoMonitor/videoList",
+                    "style": {
+                        "navigationBarTitleText": "视频监测列表",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "videoMonitor/videoDetail",
+                    "style": {
+                        "navigationBarTitleText": "实时监控",
+                        "enablePullDownRefresh": false
+                    }
+                },
+                {
+                    "path": "projectMange/record/index",
+                    "style": {
+                        "navigationBarTitleText": "工作报告",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "projectMange/record/details",
+                    "style": {
+                        "navigationBarTitleText": "报告详情",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "projectMange/overview/index",
+                    "style": {
+                        "navigationBarTitleText": "项目概览",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "projectMange/record/timingLog",
+                    "style": {
+                        "navigationBarTitleText": "定时日志",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "projectMange/write/index",
+                    "style": {
+                        "navigationBarTitleText": "报告填写",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "projectMange/write/insert",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "projectMange/list/index",
+                    "style": {
+                        "navigationBarTitleText": "项目列表",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "projectMange/list/addEdit",
+                    "style": {
+                        "navigationBarTitleText": "",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "projectMange/mall/index",
+                    "style": {
+                        "navigationBarTitleText": "选择接收人",
+                        "enablePullDownRefresh": false,
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                }
+            ]
         }
-      ]
+    ],
+    "globalStyle": {
+        "navigationBarTextStyle": "white",
+        "navigationBarTitleText": "uni-app",
+        "backgroundColor": "#F8F8F8"
     },
-    // 业务公共模块
-    {
-      "root": "pages/business/common/",
-      "pages": [
-        {
-          "path": "fastMail/index",
-          "style": {
-            "navigationBarTitleText": "我的快递",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "videoMonitor/videoList",
-          "style": {
-            "navigationBarTitleText": "视频监测列表",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "videoMonitor/videoDetail",
-          "style": {
-            "navigationBarTitleText": "实时监控",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "projectMange/record/index",
-          "style": {
-            "navigationBarTitleText": "工作报告",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
+    "tabBar": {
+        "fontSize": "12px",
+        "color": "#a9a9a9",
+        "selectedColor": "#000000",
+        "borderStyle": "white",
+        "backgroundColor": "#ffffff",
+        "list": [
+            {
+                "pagePath": "pages/index",
+                "iconPath": "/static/images/tabBar/tab-home.png",
+                "selectedIconPath": "/static/images/tabBar/tab-home-blue.png",
+                "text": "工作台",
+                "visible": false
+            },
+            {
+                "pagePath": "pages/info",
+                "iconPath": "/static/images/tabBar/tab-info.png",
+                "selectedIconPath": "/static/images/tabBar/tab-info-blue.png",
+                "text": "消息",
+                "visible": false
+            },
+            {
+                "pagePath": "pages/mine",
+                "iconPath": "/static/images/tabBar/tab-my.png",
+                "selectedIconPath": "/static/images/tabBar/tab-my-blue.png",
+                "text": "我的",
+                "visible": false
             }
-          }
-        },
-        {
-          "path": "projectMange/record/details",
-          "style": {
-            "navigationBarTitleText": "报告详情",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
-            }
-          }
-        },
-        {
-          "path": "projectMange/overview/index",
-          "style": {
-            "navigationBarTitleText": "项目概览",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
-            }
-          }
-        },
-        {
-          "path": "projectMange/record/timingLog",
-          "style": {
-            "navigationBarTitleText": "定时日志",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
-            }
-          }
-        },
-        {
-          "path": "projectMange/write/index",
-          "style": {
-            "navigationBarTitleText": "报告填写",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
-            }
-          }
-        },
-        {
-          "path": "projectMange/write/insert",
-          "style": {
-            "navigationBarTitleText": "",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
-            }
-          }
-        },
-        {
-          "path": "projectMange/list/index",
-          "style": {
-            "navigationBarTitleText": "项目列表",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
-            }
-          }
-        },
-        {
-          "path": "projectMange/list/addEdit",
-          "style": {
-            "navigationBarTitleText": "",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
-            }
-          }
-        },
-        {
-          "path": "projectMange/mall/index",
-          "style": {
-            "navigationBarTitleText": "选择接收人",
-            "enablePullDownRefresh": false,
-            "navigationStyle": "custom",
-            "app-plus": {
-              "bounce": "none",
-              "titleNView": false
+        ]
+    },
+    "condition": {
+        "current": 0,
+        "list": [
+            {
+                "name": "",
+                "path": "pages/login",
+                "query": ""
             }
-          }
-        }
-      ]
+        ]
     }
-  ],
-  "globalStyle": {
-    "navigationBarTextStyle": "white",
-    "navigationBarTitleText": "uni-app",
-    // "navigationBarBackgroundColor": "#000000",
-    "backgroundColor": "#F8F8F8"
-  },
-  "tabBar": {
-    "fontSize": "12px",
-    "color": "#a9a9a9",
-    "selectedColor": "#000000",
-    "borderStyle": "white",
-    "backgroundColor": "#ffffff",
-    "list": [
-      {
-        "pagePath": "pages/index",
-        "iconPath": "/static/images/tabBar/tab-home.png",
-        "selectedIconPath": "/static/images/tabBar/tab-home-blue.png",
-        "text": "工作台",
-        "visible": false
-      },
-      {
-        "pagePath": "pages/info",
-        "iconPath": "/static/images/tabBar/tab-info.png",
-        "selectedIconPath": "/static/images/tabBar/tab-info-blue.png",
-        "text": "消息",
-        "visible": false
-      },
-      {
-        "pagePath": "pages/mine",
-        "iconPath": "/static/images/tabBar/tab-my.png",
-        "selectedIconPath": "/static/images/tabBar/tab-my-blue.png",
-        "text": "我的",
-        "visible": false
-      }
-    ]
-  },
-  "condition": {
-    //模式配置,仅开发期间生效
-    "current": 0, //当前激活的模式(list 的索引项)
-    "list": [
-      {
-        "name": "", //模式名称
-        "path": "pages/login", //启动页面,必选
-        "query": "" //启动参数,在页面的onLoad函数里面得到
-      }
-    ]
-  }
 }

+ 85 - 71
src/pages/business/common/projectMange/list/index.vue

@@ -29,10 +29,10 @@
     :isSticky="true"
     :customStyle="{
       //#ifdef APP-PLUS || MP-WEIXIN
-      height: 'calc(100vh - 132px)',
+      height: `calc(100vh - (138px + ${proxy.$settingStore.StatusBarHeight}))`,
       //#endif
       //#ifdef H5
-      height: 'calc(100vh - 132px)',
+      height: `calc(100vh - (138px))`,
       //#endif
     }"
     :refresherLoad="true"
@@ -46,9 +46,18 @@
     :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
   >
     <template #default>
-      <view class="projectSearchBox" >
-        <u-input v-model="projectTypeName" disabledColor="#fff" disabled clearable  @click="handleAction('项目类型',project_type)" placeholder="项目类型" suffixIcon="arrow-down" suffixIconStyle="color: #909399" />        
-        <u-input v-model="projectName" placeholder="请输入项目名称"  clearable prefixIcon="search" size="small" />
+      <view class="projectSearchBox">
+        <u-input
+          v-model="projectTypeName"
+          disabledColor="#fff"
+          disabled
+          clearable
+          @click="handleAction('项目类型', project_type)"
+          placeholder="项目类型"
+          suffixIcon="arrow-down"
+          suffixIconStyle="color: #909399"
+        />
+        <u-input v-model="projectName" placeholder="请输入项目名称" clearable prefixIcon="search" size="small" />
         <!-- <u-button   type="primary" @click="selectListApi">搜索</u-button> -->
         <u-picker
           :show="actionShow"
@@ -61,14 +70,14 @@
           @cancel="actionShow = false"
           @confirm="selectAction"
         ></u-picker>
-
-      </view>      		
+      </view>
       <view class="menu-list m0">
-        <view class="list-cell" style="color: #666666; line-height: 25px;margin:10px;width:auto;border-radius:10px" v-for="(base, index) in dataList" :key="index">
+        <view class="list-cell" style="color: #666666; line-height: 25px; margin: 10px; width: auto; border-radius: 10px" v-for="(base, index) in dataList" :key="index">
           <view class="content-area-top menu-item">
-            <view class="content-area-top-name" style="color: #559AFF;" @click="toProjectMange(base.id)">{{ base.projectName }} 
+            <view class="content-area-top-name" style="color: #559aff" @click="toProjectMange(base.id)">{{ base.projectName }} </view>
+            <view class="content-area-top-status" :style="{ backgroundColor: proxy.$common.mapping('elTagClass', 'value', base.projectStatus, project_status) }" style="margin-left: 10px">
+              {{ proxy.$common.mapping("label", "value", base.projectStatus, project_status) }}
             </view>
-            <view class="content-area-top-status" :style='{backgroundColor:proxy.$common.mapping("elTagClass", "value", base.projectStatus, project_status)}' style="margin-left:10px" > {{ proxy.$common.mapping("label", "value", base.projectStatus, project_status) }} </view>
 
             <u-icon class="content-area-top-icon" name="more-dot-fill" size="20" color="#000" @click="moreClick(base)"></u-icon>
           </view>
@@ -76,15 +85,19 @@
             <view class="content-area-row_wrap-view"> 负责人: {{ proxy.$common.mapping("nickName", "userId", base.projectHead, userDate) }} </view>
             <view class="content-area-row_wrap-view">
               状态:
-			        <span :style='{color:proxy.$common.mapping("elTagClass", "value", base.projectStatus, project_status)}'>{{ proxy.$common.mapping("label", "value", base.projectStatus, project_status) }}</span>
+              <span :style="{ color: proxy.$common.mapping('elTagClass', 'value', base.projectStatus, project_status) }">{{
+                proxy.$common.mapping("label", "value", base.projectStatus, project_status)
+              }}</span>
             </view>
             <view class="content-area-row_wrap-view">
               类型:
-			        {{ proxy.$common.mapping("label", "value", base.projectStatus, project_type) }}
+              {{ proxy.$common.mapping("label", "value", base.projectStatus, project_type) }}
             </view>
             <view class="content-area-row_wrap-view">
               公开状态:
-			        <span :style='{color:proxy.$common.mapping("elTagClass", "value", base.visibleRange, project_displayType)}'>{{ proxy.$common.mapping("label", "value", base.visibleRange, project_displayType) }}</span>
+              <span :style="{ color: proxy.$common.mapping('elTagClass', 'value', base.visibleRange, project_displayType) }">{{
+                proxy.$common.mapping("label", "value", base.visibleRange, project_displayType)
+              }}</span>
             </view>
             <view class="content-area-row_wrap-view" style="display: block">
               成员:<span>{{ proxy.$common.mapping("nickName", "userId", base.projectMember, userDate) }} </span>
@@ -195,7 +208,7 @@
 <script setup>
 /*----------------------------------依赖引入-----------------------------------*/
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
-import { ref, reactive, computed, getCurrentInstance, toRefs, inject,watchEffect} from "vue";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject, watchEffect } from "vue";
 /*----------------------------------接口引入-----------------------------------*/
 import { projectApi } from "@/api/business/project.js";
 import { dUserList } from "@/api/system/user.js";
@@ -205,10 +218,8 @@ import { useStores } from "@/store/modules/index";
 /*----------------------------------公共方法引入-----------------------------------*/
 /*----------------------------------公共变量-----------------------------------*/
 const { proxy } = getCurrentInstance();
-
 const useStore = useStores();
-const { project_type,project_status,project_displayType } = proxy.useDict("project_type","project_status","project_displayType");
-
+const { project_type, project_status, project_displayType } = proxy.useDict("project_type", "project_status", "project_displayType");
 /*----------------------------------变量声明-----------------------------------*/
 const state = reactive({
   loading: false,
@@ -234,24 +245,24 @@ const state = reactive({
     content: "", //提示信息
   },
   eventList: {}, //数据存储
-  projectName:'',
+  projectName: "",
   projectTypeName: "", //项目类型名称
   actionShow: false,
   projectType: "", //项目类型
-  projectTypeList:[[]],    
+  projectTypeList: [[]],
 });
 
-const { tabsList, tabsCurrent, dataList, pageSize, current, total, userDate, popup, modal, eventList,array,index,projectTypeName,actionShow,projectType,projectTypeList,projectName} = toRefs(state);
-
+const { tabsList, tabsCurrent, dataList, pageSize, current, total, userDate, popup, modal, eventList, array, index, projectTypeName, actionShow, projectType, projectTypeList, projectName } =
+  toRefs(state);
 
 /**
  * @action弹出框点击事件
  */
- function handleAction(value,event, index, ind) {
-  if(!event.some((element => element.value==0))){
-    event.unshift({label:'全部',value:0})
-  } 
- 
+function handleAction(value, event, index, ind) {
+  if (!event.some((element) => element.value == 0)) {
+    event.unshift({ label: "全部", value: 0 });
+  }
+
   if (value == "项目类型") {
     state.projectTypeList[0] = event;
   }
@@ -262,10 +273,10 @@ const { tabsList, tabsCurrent, dataList, pageSize, current, total, userDate, pop
 /**
  * @action弹出框选择事件
  */
- function selectAction(e) {
-   state.projectType = e.value[0].value;
-   state.projectTypeName = e.value[0].label;
-   state.actionShow = false;
+function selectAction(e) {
+  state.projectType = e.value[0].value;
+  state.projectTypeName = e.value[0].label;
+  state.actionShow = false;
 }
 
 /**
@@ -381,9 +392,9 @@ function refresh() {
  */
 function tabsClick(e) {
   state.tabsCurrent = e.index;
-  state.projectName='';
-  state.projectType='';
-  state.projectTypeName=''
+  state.projectName = "";
+  state.projectType = "";
+  state.projectTypeName = "";
 }
 /**
  * 跳转项目概览
@@ -412,59 +423,62 @@ onLoad((options) => {});
   font-size: 14px;
   justify-content: left;
 }
-:deep(.list-container .content-area-top-name){
-  font-size:16px!important;
+:deep(.list-container .content-area-top-name) {
+  font-size: 16px !important;
 }
 </style>
 <style lang="scss" scoped>
 .projectSearchBox {
-  margin:20px 4% ;width:92%;vertical-align:middle;
-  position:relative;
-  display:flex;
-  :deep(.u-input--radius, .u-input--square){
-      border-radius:0
-    }
-  
-  .u-input{
-   display:inline-block;background:#fff;height:34px;line-height:34px;padding:0 5px;
-    .uni-input-input{
-      font-size:12px!important;
+  margin: 20px 4%;
+  width: 92%;
+  vertical-align: middle;
+  position: relative;
+  display: flex;
+  :deep(.u-input--radius, .u-input--square) {
+    border-radius: 0;
+  }
+
+  .u-input {
+    display: inline-block;
+    background: #fff;
+    height: 34px;
+    line-height: 34px;
+    padding: 0 5px;
+    .uni-input-input {
+      font-size: 12px !important;
     }
-    :deep(.u-input__content__prefix-icon){
-      position:absolute;
-      right:8px;
-       .uicon-search{
-        font-size:16px
+    :deep(.u-input__content__prefix-icon) {
+      position: absolute;
+      right: 8px;
+      .uicon-search {
+        font-size: 16px;
       }
     }
   }
-  .u-input:first-child{
-    flex:2;
+  .u-input:first-child {
+    flex: 2;
     border-top-left-radius: 20px;
     border-bottom-left-radius: 20px;
-    border-right:none;
+    border-right: none;
   }
-  .u-input:nth-child(2){
-    flex:4;
+  .u-input:nth-child(2) {
+    flex: 4;
     // width:70%;
     border-top-right-radius: 20px;
     border-bottom-right-radius: 20px;
     // border-left:none
   }
-  .u-popup{
-    flex:0;
+  .u-popup {
+    flex: 0;
   }
-  .u-button{
-    width:50px;
-    position:absolute;
-    right:0px;
-    top:0;
-    height:32px;
-    line-height:32px;
-   
-
+  .u-button {
+    width: 50px;
+    position: absolute;
+    right: 0px;
+    top: 0;
+    height: 32px;
+    line-height: 32px;
   }
-  
 }
 .list-container {
   .content-area {
@@ -530,9 +544,9 @@ onLoad((options) => {});
     }
   }
 }
-:deep(.uni-tag){
-  padding:0px 2px;
-  height:20px;
+:deep(.uni-tag) {
+  padding: 0px 2px;
+  height: 20px;
   line-height: 20px !important;
   border-radius: 10px;
 }

+ 57 - 62
src/pages/business/common/projectMange/record/details.vue

@@ -11,10 +11,10 @@
     customClass="record-details-container scroll-height"
     :style="{
       //#ifdef APP-PLUS || MP-WEIXIN
-      height: 'calc(100vh - 88px)',
+      height: `calc(100vh - (44px + ${proxy.$settingStore.StatusBarHeight}))`,
       //#endif
       //#ifdef H5
-      height: 'calc(100vh - 44px)',
+      height: 'calc(100vh - (44px))',
       //#endif
     }"
     :refresherLoad="false"
@@ -26,9 +26,9 @@
     :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
   >
     <template #default>
-      <view class="content-area radius bg-white" v-for="(item,index) in dataList" :key="index">
+      <view class="content-area radius bg-white" v-for="(item, index) in dataList" :key="index">
         <view class="content-area-header flex mb10">
-          <img :src="item.avatar"  class="content-area-header-avatarImg mr10" v-if="item.avatar"/>
+          <img :src="item.avatar" class="content-area-header-avatarImg mr10" v-if="item.avatar" />
           <u-avatar
             v-if="!item.avatar"
             class="content-area-header-avatar mr10"
@@ -47,36 +47,35 @@
 
         <view class="content-area-center mb10" v-for="child in item.workContents" :key="child">
           <view class="content-area-center-top flex">
-            <view class="content-area-center-top-title mr10" style="color: #559AFF;" @click="toProjectMange(child.projectId)">{{ child.projectName ? child.projectName : " " }}</view>
+            <view class="content-area-center-top-title mr10" style="color: #559aff" @click="toProjectMange(child.projectId)">{{ child.projectName ? child.projectName : " " }}</view>
             <view class="content-area-center-top-time" :style="{ color: proxy.$settingStore.themeColor.color }">{{ child.workTime }}h</view>
           </view>
           <u-text :text="child.workContent" color="#000000" size="14"></u-text>
         </view>
         <view class="content-area-center mb10">
           <view class="content-area-center-top"> 明日计划 </view>
-          <u-text :text="item.tomorrowPlan?item.tomorrowPlan:'无'" color="#000000" size="14"></u-text>
+          <u-text :text="item.tomorrowPlan ? item.tomorrowPlan : '无'" color="#000000" size="14"></u-text>
         </view>
         <view class="content-area-center mb10">
           <view class="content-area-center-top"> 工作协调 </view>
-          <u-text :text="item.coordinateWork?item.coordinateWork:'无'" color="#000000" size="14"></u-text>
+          <u-text :text="item.coordinateWork ? item.coordinateWork : '无'" color="#000000" size="14"></u-text>
         </view>
         <view class="content-area-center mb10">
           <view class="content-area-center-top">图片 </view>
-            <view class="imageBox" v-if="item.reportImage">
-              <image class="image" style="width:50px;margin:5px" mode="widthFix" v-for="(a,index) in JSON.parse(item.reportImage)" :key="index" :src="a.url"  @click="previewImage(index)" />
-            </view>
-            <view class="imageBox" >无</view>
+          <view class="imageBox" v-if="item.reportImage">
+            <image class="image m5" style="width: 50px" mode="widthFix" v-for="(a, index) in JSON.parse(item.reportImage)" :key="index" :src="a.url" @click="previewImage(index)" />
+          </view>
+          <view class="imageBox" v-else>无</view>
         </view>
 
         <view class="content-area-center mb10">
-          <view class="content-area-center-top">附件 </view>
-          <view  v-if="item.reportFile" v-for="(file, index) in JSON.parse(item.reportFile)" :key="index" style="font-size:12px">
-            <uni-link :href="file.url" text="file.url" style="color:rgba(0,0,0,.7)">{{file.name}}</uni-link>
+          <view class="content-area-center-top font12">附件 </view>
+          <view v-if="item.reportFile">
+            <uni-link v-for="(file, index) in JSON.parse(item.reportFile)" :key="index" :href="file.url" text="file.url" style="color: rgba(0, 0, 0, 0.7)">{{ file.name }}</uni-link>
           </view>
           <view v-else>无</view>
         </view>
-        <view class="content-area-center mb10">
-          <!-- <view class="content-area-center-top">抄送人 </view> -->
+        <view class="content-area-center mb10" style="display: flex; flex-wrap: wrap">
           <u-tabs
             :list="tabsList"
             :current="tabsCurrent"
@@ -85,12 +84,13 @@
             :activeStyle="{ color: '#333', fontSize: '14px' }"
             :inactiveStyle="{ color: '#909399', fontSize: '14px' }"
             :scrollable="false"
+            style="width: 100%"
           ></u-tabs>
-          <view class="content-area-header  mt20 mb10 mr5" style="display:inline-block;text-align:center" v-for="(item, index) in reportDetailData.treeSelectNodes" :key="index">
-            <img :src="item.avatar"  class="content-area-header-avatarImg mr10" v-if="item.avatar" style="display:block;width:40px;height:40px"/>
+          <view class="content-area-header mt20 mb10 text-center" style="display: inline-block" v-for="(item, index) in reportDetailData.treeSelectNodes" :key="index">
+            <img v-if="item.avatar" class="content-area-header-avatarImg mlr5" :src="item.avatar" style="display: block; width: 40px; height: 40px" />
             <u-avatar
               v-if="!item.avatar"
-              class="content-area-header-avatar mr10"
+              class="content-area-header-avatar mlr5"
               :text="item.nickName.length > 2 ? item.nickName.slice(1, 3) : item.nickName"
               shape="square"
               size="40"
@@ -98,15 +98,11 @@
               color="#ffffff"
               :bgColor="proxy.$settingStore.themeColor.color"
             ></u-avatar>
-            <u-text :text='item.nickName' color="#000000" size="14"></u-text>
-            </view>
+            <u-text :text="item.nickName" color="#000000" size="14" align="center"></u-text>
+          </view>
         </view>
-
-
       </view>
     </template>
-
-    
   </oa-scroll>
 </template>
 
@@ -130,41 +126,40 @@ const tree = ref({
   children: [],
 });
 const reportDetailData = ref([]);
-const pmReportReaders =ref([]) //已读未读集合
+const pmReportReaders = ref([]); //已读未读集合
 const state = reactive({
   loading: true,
-  dataList: [],//日报列表
-  options: {//日报详情参数
+  dataList: [], //日报列表
+  options: {
+    //日报详情参数
     reportId: "",
   },
-  userData:[],//用户列表
-  images:[],//图片列表
-  files:[],//附件列表
+  userData: [], //用户列表
+  images: [], //图片列表
+  files: [], //附件列表
   tabsList: [
     { name: "已读", value: 0 },
     { name: "未读", value: 1 },
   ],
   tabsCurrent: 0,
-
 });
 
-const { dataList, userData,tabsList,tabsCurrent} = toRefs(state);
+const { dataList, userData, tabsList, tabsCurrent } = toRefs(state);
 
 /**
  * @tabs点击事件
  */
- function tabsClick(e) {
+function tabsClick(e) {
   state.tabsCurrent = e.index;
-  reportDetailData.value.treeSelectNodes = proxy.$common.findTreeNodes(tree.value, state.tabsCurrent==0?pmReportReaders.value.readAlready:pmReportReaders.value.readNotAlready);
+  reportDetailData.value.treeSelectNodes = proxy.$common.findTreeNodes(tree.value, state.tabsCurrent == 0 ? pmReportReaders.value.readAlready : pmReportReaders.value.readNotAlready);
 }
-function previewImage(index){
+function previewImage(index) {
   uni.previewImage({
-        current: index, // 当前显示图片索引
-        urls: state.images // 需要预览的图片http链接列表
-      });
+    current: index, // 当前显示图片索引
+    urls: state.images, // 需要预览的图片http链接列表
+  });
 }
 
-
 /**
  * @初始化
  */
@@ -175,28 +170,28 @@ function init() {
   deptUserTreeSelect({ pageNum: "1", pageSize: "1000" }).then((res) => {
     tree.value = res.data;
     projectApi()
-    .ReportRecord({
-      reportId: state.options.reportId,
-      pageNum: 1,
-      pageSize: 1,
-    })
-    .then((requset) => {
-      dataList.value = requset.data.records;
-      state.loading = false;
-      pmReportReaders.value = requset.data.records[0].pmReportReaders;
-      reportDetailData.value.treeSelectNodes = proxy.$common.findTreeNodes(tree.value, tabsCurrent.value==0?pmReportReaders.value.readAlready:pmReportReaders.value.readNotAlready);
-      var imgs = JSON.parse(dataList.value[0].reportImage);
-      var files= JSON.parse(dataList.value[0].reportFile);
-      imgs.forEach(function(item){
-        state.images.push(item.url);
+      .ReportRecord({
+        reportId: state.options.reportId,
+        pageNum: 1,
+        pageSize: 1,
       })
-      files.forEach(function(item){
-        state.files.push(item.url);
+      .then((requset) => {
+        dataList.value = requset.data.records;
+        state.loading = false;
+        pmReportReaders.value = requset.data.records[0].pmReportReaders;
+        reportDetailData.value.treeSelectNodes = proxy.$common.findTreeNodes(tree.value, tabsCurrent.value == 0 ? pmReportReaders.value.readAlready : pmReportReaders.value.readNotAlready);
+        var imgs = JSON.parse(dataList.value[0].reportImage);
+        var files = JSON.parse(dataList.value[0].reportFile);
+        imgs.forEach(function (item) {
+          state.images.push(item.url);
+        });
+        files.forEach(function (item) {
+          state.files.push(item.url);
+        });
       })
-    })
-    .catch((err) => {
-      state.loading = false;
-    });
+      .catch((err) => {
+        state.loading = false;
+      });
   });
 }
 /**
@@ -241,8 +236,8 @@ onUnload(() => {
       margin: auto 0;
     }
     &-avatarImg {
-      width:35px;
-      height:35px;
+      width: 35px;
+      height: 35px;
       border-radius: 4px;
     }
 

+ 70 - 88
src/pages/business/common/projectMange/record/index.vue

@@ -25,10 +25,10 @@
     :isSticky="true"
     :customStyle="{
       //#ifdef APP-PLUS || MP-WEIXIN
-      height: 'calc(100vh - 132px)',
+      height: `calc(100vh - (138px + ${proxy.$settingStore.StatusBarHeight}))`,
       //#endif
       //#ifdef H5
-      height: 'calc(100vh - 132px)',
+      height: `calc(100vh - (138px))`,
       //#endif
     }"
     :refresherLoad="true"
@@ -42,27 +42,25 @@
     :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
   >
     <template #default>
+      <view v-if="timedList.length > 0" @click="goTimingPage()" class="list-cell list-cell-arrow" style="margin: 20px 0; color: rgb(20, 158, 255); background-color: rgba(20, 158, 255, 0.1)">
+        <view style="width: calc(100% - 51px); display: flex; padding-right: 10px">
+          <u-icon name="info-circle" color="#2979ff" size="18" style="margin-right: 5px"></u-icon>
+          <view v-if="timedList.length == 1">您有1条定时日志将于{{ timedList[0].timingTime.slice(0, 16) }}发布</view>
 
-      <view v-if="timedList.length>0" @click="goTimingPage()" class="list-cell list-cell-arrow"  style="margin:20px 0;color:rgb(20, 158, 255);background-color: rgba(20, 158, 255,.1)"  >
-          <view style="width: calc(100% - 51px); display: flex; ; padding-right: 10px"  >
-            <u-icon name="info-circle" color="#2979ff" size="18" style="margin-right: 5px"></u-icon>
-            <view v-if="timedList.length==1">您有1条定时日志将于{{timedList[0].timingTime.slice(0,16)}}发布</view>
-
-            <view v-else >您有{{timedList.length}}条定时日志将于指定时间发布</view>
-          </view>
+          <view v-else>您有{{ timedList.length }}条定时日志将于指定时间发布</view>
+        </view>
       </view>
 
-
       <u-loading-page :loading="state.loading" fontSize="16" style="z-index: 99"></u-loading-page>
       <view class="content-area" v-for="(group, date) in proxy.$common.groupedItems(state.dataList, 'submitDate')" :key="date">
         <view class="content-area-time font14">{{ proxy.$time.jktTimes(date, "否") }}</view>
         <view class="content-area-center bg-white" v-for="(el, ind) in group" :key="ind">
-          <view class="content-area-top menu-item" style="float:right;padding:10px 0px">
+          <view class="content-area-top menu-item" style="float: right; padding: 10px 0px">
             <view class="content-area-top-time"> </view>
             <u-icon class="content-area-top-icon" name="more-dot-fill" size="20" color="#000" @click="moreClick(el)"></u-icon>
           </view>
           <view class="flex mb10" @click="goContentDetails(el)">
-            <img :src="el.avatar"  class="content-area-center-avatarImg mr10" v-if="el.avatar"/>
+            <img :src="el.avatar" class="content-area-center-avatarImg mr10" v-if="el.avatar" />
             <u-avatar
               v-if="!el.avatar"
               class="content-area-center-avatar mr10"
@@ -101,9 +99,8 @@
         overflow: 'hidden',
       }"
     >
-     
       <u-button
-        v-if="state.tabsCurrent ==1"
+        v-if="state.tabsCurrent == 1"
         class="custom-style"
         type="info"
         size="normal"
@@ -132,7 +129,7 @@
         @click="handleSubmit('copy', eventList)"
       ></u-button>
       <u-button
-        v-if="state.tabsCurrent ==1"
+        v-if="state.tabsCurrent == 1"
         class="custom-style"
         type="info"
         size="normal"
@@ -162,13 +159,8 @@
     </view>
   </u-popup>
 
-  
-
-
-
   <uni-popup ref="alertDialog" type="dialog">
-    <uni-popup-dialog :type="state.tip.type" cancelText="取消" confirmText="确定" title="操作提醒" :content="state.tip.content" @confirm="dialogConfirm"
-      @close="dialogClose"></uni-popup-dialog>
+    <uni-popup-dialog :type="state.tip.type" cancelText="取消" confirmText="确定" title="操作提醒" :content="state.tip.content" @confirm="dialogConfirm" @close="dialogClose"></uni-popup-dialog>
   </uni-popup>
 
   <u-modal
@@ -181,7 +173,6 @@
     @cancel="modal.show = false"
     @close="modal.show = false"
   ></u-modal>
-
 </template>
 
 <script setup>
@@ -189,7 +180,7 @@
 import { onLoad, onShow, onReady, onHide, onLaunch, onUnload, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
 /*----------------------------------接口引入-----------------------------------*/
-import { projectApi} from "@/api/business/project.js";
+import { projectApi } from "@/api/business/project.js";
 /*----------------------------------组件引入-----------------------------------*/
 /*----------------------------------store引入-----------------------------------*/
 import { useStores, commonStores } from "@/store/modules/index";
@@ -226,19 +217,18 @@ const state = reactive({
   },
   eventList: {}, //数据存储
 
-
-  reportData:{},
-  tip:{
-    type:undefined,//弹框类型
-    content:"",//提示信息
-    data:{},//带入数据
-    operation:undefined,//操作类型
+  reportData: {},
+  tip: {
+    type: undefined, //弹框类型
+    content: "", //提示信息
+    data: {}, //带入数据
+    operation: undefined, //操作类型
   },
-  timedList:[],
-  tree:[]
+  timedList: [],
+  tree: [],
 });
 
-const { tabsList, tabsCurrent, dataList, pageSize, current, total,popup,eventList,modal,timedList,tree} = toRefs(state);
+const { tabsList, tabsCurrent, dataList, pageSize, current, total, popup, eventList, modal, timedList, tree } = toRefs(state);
 /**
  * 操作弹框提醒
  * @param type  弹框类型
@@ -246,23 +236,23 @@ const { tabsList, tabsCurrent, dataList, pageSize, current, total,popup,eventLis
  * @param item 带入数据
  * @param operation 操作类型
  */
- function tips(type,content,item,operation){
-  state.tip.type=type
-  state.tip.content=content
-  state.tip.data=item
-  state.tip.operation=operation
-  proxy.$refs.alertDialog.open()
+function tips(type, content, item, operation) {
+  state.tip.type = type;
+  state.tip.content = content;
+  state.tip.data = item;
+  state.tip.operation = operation;
+  proxy.$refs.alertDialog.open();
 }
 /**弹框确定操作 */
-function dialogConfirm(){
-  if(state.tip.operation =='delete'){
-    handleSubmit('delete',state.tip.data)
+function dialogConfirm() {
+  if (state.tip.operation == "delete") {
+    handleSubmit("delete", state.tip.data);
   }
-  if(state.tip.operation=='exit'){
-    handleSubmit('exit',state.tip.data)
+  if (state.tip.operation == "exit") {
+    handleSubmit("exit", state.tip.data);
   }
-  if(state.tip.operation=='copy'){
-    handleSubmit('copy',state.tip.data)
+  if (state.tip.operation == "copy") {
+    handleSubmit("copy", state.tip.data);
   }
 }
 /**
@@ -288,36 +278,34 @@ function init() {
       state.total = requset.data.total;
       state.loading = false;
 
-      console.log(state.dataList )
+      console.log(state.dataList);
     })
     .catch((err) => {
       state.loading = false;
     });
-    projectApi()
-    .TimedReports({
-     }).then((requset) => {
+  projectApi()
+    .TimedReports({})
+    .then((requset) => {
       state.timedList = requset.data;
-     })
-    .catch((err) => {
-
     })
-
-  }
+    .catch((err) => {});
+}
 
 /**
  * @跳转详情
  */
 function goContentDetails(e) {
-  if(state.tabsCurrent==0&&e.readFlag!=1){
-    projectApi().ReportRecordReadFlag({ reportId: e.id }).then((res) => {
-      if (res.status == "SUCCESS") {
-        proxy.$tab.navigateTo(`/pages/business/common/projectMange/record/details?reportId=${e.id}`);
-      } else {
-        proxy.$modal.msgError("读取异常");
-      }
-    });
-
-  }else{
+  if (state.tabsCurrent == 0 && e.readFlag != 1) {
+    projectApi()
+      .ReportRecordReadFlag({ reportId: e.id })
+      .then((res) => {
+        if (res.status == "SUCCESS") {
+          proxy.$tab.navigateTo(`/pages/business/common/projectMange/record/details?reportId=${e.id}`);
+        } else {
+          proxy.$modal.msgError("读取异常");
+        }
+      });
+  } else {
     proxy.$tab.navigateTo(`/pages/business/common/projectMange/record/details?reportId=${e.id}`);
   }
 }
@@ -346,9 +334,8 @@ function tabsClick(e) {
   init();
 }
 
-
 // 定时日志页面
-function goTimingPage(){
+function goTimingPage() {
   proxy.$tab.navigateTo(`/pages/business/common/projectMange/record/timingLog`);
 
   // proxy.$tab.navigateTo(`/pages/business/common/projectMange/report/timingLog`);
@@ -359,7 +346,6 @@ function moreClick(event) {
   state.eventList = event;
 }
 
-
 function handleModal(type, content) {
   state.modal.show = true;
   state.modal.type = type;
@@ -367,28 +353,26 @@ function handleModal(type, content) {
 }
 
 /** 编辑、删除日报*/
-function handleSubmit(type,item) {
+function handleSubmit(type, item) {
   if (type === "update") {
     proxy.$tab.navigateTo(`/pages/business/common/projectMange/write/insert?templateId=1&id=${item.id}`);
     state.modal.show = false;
-  }else if (type === "copy") {
-    var workLongString=''
+  } else if (type === "copy") {
+    var workLongString = "";
     item.workContents.forEach((item) => {
-      workLongString+=item.projectName+':'+item.workTime+ "h\n"+item.workContent+ "\n"
-    })
+      workLongString += item.projectName + ":" + item.workTime + "h\n" + item.workContent + "\n";
+    });
     item.ccTo1 = item.ccTo.split(",").map(function (value, index) {
       return Number(value);
     });
 
-     /** 查询树结构用户列表  回显抄送人*/
+    /** 查询树结构用户列表  回显抄送人*/
 
-     item.tomorrowPlan=item.tomorrowPlan?item.tomorrowPlan:'-';
-     item.coordinateWork=item.coordinateWork?item.coordinateWork:'-'
+    item.tomorrowPlan = item.tomorrowPlan ? item.tomorrowPlan : "-";
+    item.coordinateWork = item.coordinateWork ? item.coordinateWork : "-";
     // 触发方法
-      proxy.$common.uniCopy({
-      content: workLongString+ "\n" +
-              "明日计划:\n" + item.tomorrowPlan + "\n" +
-              "工作协调:\n" + item.coordinateWork,
+    proxy.$common.uniCopy({
+      content: workLongString + "\n" + "明日计划:\n" + item.tomorrowPlan + "\n" + "工作协调:\n" + item.coordinateWork,
       success: (res) => {
         uni.showToast({
           title: res,
@@ -404,8 +388,6 @@ function handleSubmit(type,item) {
       },
     });
     state.popup.show = false;
-    
-
   } else if (type === "delete") {
     projectApi()
       .ReportDelete(item.id)
@@ -418,7 +400,7 @@ function handleSubmit(type,item) {
       .catch((errors) => {
         proxy.$modal.msg(errors);
       });
-  } 
+  }
   state.modalShow = false;
 }
 
@@ -465,8 +447,8 @@ onUnload(() => {
       margin: auto 0;
     }
     &-avatarImg {
-      width:35px;
-      height:35px;
+      width: 35px;
+      height: 35px;
       border-radius: 4px;
     }
 
@@ -478,12 +460,12 @@ onUnload(() => {
   }
 }
 
-.pp{
+.pp {
   text-align: left;
 }
 </style>
 <style>
-.pp .u-modal__content{
-  justify-content: left !important
+.pp .u-modal__content {
+  justify-content: left !important;
 }
 </style>

+ 1 - 0
src/pages/business/common/videoMonitor/videoDetail.vue

@@ -1,6 +1,7 @@
 <template>
   <oa-scroll
     customClass="videoDetail-container scroll-height"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherEnabledTitle="false"

+ 1 - 1
src/pages/business/common/videoMonitor/videoList.vue

@@ -3,11 +3,11 @@
     customClass="repairManage-container scroll-height"
     :pageSize="state.pageSize"
     :total="state.total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"
     :refresherThreshold="44"
-    :lowerThreshold="44"
     :refresherBackground="'#f5f6f7'"
     @load="load"
     @refresh="refresh"

+ 1 - 0
src/pages/business/fireIot/alarmManage/alarmDetails/index.vue

@@ -1,6 +1,7 @@
 <template>
   <oa-scroll
     customClass="alarmDetails-container scroll-height"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherEnabledTitle="false"

+ 0 - 1
src/pages/business/fireIot/alarmManage/alarmDetailsList/index.vue

@@ -20,7 +20,6 @@
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"
     :refresherThreshold="44"
-    :lowerThreshold="44"
     :refresherBackground="'#f5f6f7'"
     @load="load"
     @refresh="refresh"

+ 1 - 0
src/pages/business/fireIot/alarmManage/index.vue

@@ -3,6 +3,7 @@
     customClass="bg-white scroll-height"
     :pageSize="pageSize"
     :total="total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherLoadTitle="false"
     :refresherEnabled="true"

+ 1 - 0
src/pages/business/fireIot/customManage/index.vue

@@ -3,6 +3,7 @@
     customClass="customManage-container scroll-height"
     :pageSize="pageSize"
     :total="total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"

+ 1 - 0
src/pages/business/fireIot/deviceManage/components/deviceDetails.vue

@@ -1,6 +1,7 @@
 <template>
   <oa-scroll
     customClass="deviceDetails-container scroll-height"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherEnabledTitle="false"

+ 1 - 0
src/pages/business/fireIot/deviceManage/components/deviceDetailsList.vue

@@ -3,6 +3,7 @@
     customClass="scroll-height"
     :pageSize="pageSize"
     :total="total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"

+ 1 - 0
src/pages/business/fireIot/deviceManage/index.vue

@@ -3,6 +3,7 @@
     customClass="bg-white scroll-height"
     :pageSize="pageSize"
     :total="total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherLoadTitle="false"
     :refresherEnabled="true"

+ 1 - 0
src/pages/business/fireIot/facilitiesGather/index.vue

@@ -3,6 +3,7 @@
     id="facilitiesGather"
     customClass="scroll-height"
     :customStyle="{}"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherDefaultStyle="'none'"

+ 19 - 2
src/pages/business/fireIot/facilitiesManage/facilitiesDetails.vue

@@ -1,6 +1,7 @@
 <template>
   <oa-scroll
     customClass="facilitiesDetails-container scroll-height"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherEnabledTitle="false"
@@ -46,7 +47,15 @@
         <uni-section class="block mb10" title="关联设备" type="line"></uni-section>
 
         <view class="flex mb10" style="height: 35px; line-height: 35px">
-          <u-input v-model="state.deviceId" placeholder="设备编号" @change="deviceInfoApi()" disabledColor="transparent" prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" clearable />
+          <u-input
+            v-model="state.deviceId"
+            placeholder="设备编号"
+            @change="deviceInfoApi()"
+            disabledColor="transparent"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #909399"
+            clearable
+          />
         </view>
 
         <view class="tableType1">
@@ -85,7 +94,15 @@
         <uni-section class="block mb10" title="关联建筑" type="line"></uni-section>
 
         <view class="flex mb10" style="height: 35px; line-height: 35px">
-          <u-input v-model="state.buildNum" placeholder="建筑编号" @change="buildInfoApi()" disabledColor="transparent" prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" clearable />
+          <u-input
+            v-model="state.buildNum"
+            placeholder="建筑编号"
+            @change="buildInfoApi()"
+            disabledColor="transparent"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #909399"
+            clearable
+          />
         </view>
 
         <view class="tableType1">

+ 1 - 0
src/pages/business/fireIot/facilitiesManage/facilitiesDetailsList.vue

@@ -3,6 +3,7 @@
     customClass="scroll-height"
     :pageSize="pageSize"
     :total="total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"

+ 1 - 0
src/pages/business/fireIot/facilitiesManage/index.vue

@@ -1,6 +1,7 @@
 <template>
   <oa-scroll
     customClass="scroll-height"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherLoadTitle="false"
     :refresherEnabled="true"

+ 1 - 0
src/pages/business/fireIot/repairManage/index.vue

@@ -3,6 +3,7 @@
     customClass="bg-white scroll-height"
     :pageSize="pageSize"
     :total="total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherLoadTitle="false"
     :refresherEnabled="true"

+ 1 - 0
src/pages/business/fireIot/repairManage/repairDetails.vue

@@ -1,6 +1,7 @@
 <template>
   <oa-scroll
     customClass="repairDetails-container scroll-height"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherEnabledTitle="false"

+ 0 - 1
src/pages/business/fireIot/repairManage/repairDetailsList.vue

@@ -20,7 +20,6 @@
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"
     :refresherThreshold="44"
-    :lowerThreshold="44"
     :refresherBackground="'#f5f6f7'"
     @load="load"
     @refresh="refresh"

+ 1 - 0
src/pages/business/fireIot/repairReport/index.vue

@@ -2,6 +2,7 @@
   <oa-scroll
     customClass="scroll-height"
     :customStyle="{}"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherDefaultStyle="'none'"

+ 1 - 0
src/pages/business/fireIot/repairReport/record.vue

@@ -4,6 +4,7 @@
     customClass="repairReport-record-container scroll-height"
     :pageSize="pageSize"
     :total="total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"

+ 1 - 0
src/pages/business/mhxf/fireReport/index.vue

@@ -3,6 +3,7 @@
     customClass="scroll-height"
     :pageSize="pageSize"
     :total="total"
+    :isSticky="false"
     :refresherLoad="true"
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"

+ 1 - 0
src/pages/business/zhaf/xunJian/collect/components/collectDetail.vue

@@ -1,6 +1,7 @@
 <template>
   <oa-scroll
     customClass="scroll-height"
+    :isSticky="false"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherEnabledTitle="false"

+ 1 - 0
src/pages/business/zhaf/xunJian/collect/index.vue

@@ -13,6 +13,7 @@
   <oa-scroll
     customClass="scroll-height"
     :total="xunJianStore.collectDataList.length"
+    :isSticky="false"
     :refresherEnabled="true"
     :refresherEnabledTitle="true"
     :refresherDefaultStyle="'none'"

+ 0 - 1
src/pages/business/zhxf/fireInspect/inspectDetailsList/index.vue

@@ -20,7 +20,6 @@
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"
     :refresherThreshold="44"
-    :lowerThreshold="44"
     :refresherBackground="'#f5f6f7'"
     @load="load"
     @refresh="refresh"

+ 0 - 1
src/pages/common/appMessage/index.vue

@@ -7,7 +7,6 @@
     :refresherEnabled="true"
     :refresherDefaultStyle="'none'"
     :refresherThreshold="44"
-    :lowerThreshold="44"
     :refresherBackground="'#f5f6f7'"
     @load="load"
     @refresh="refresh"

+ 2 - 2
src/pages/common/face/index.vue

@@ -102,7 +102,7 @@ const { webviewStyles, meetingRoomList, modal, picker, form } = toRefs(state);
 
 // 初始化
 function init() {
-  var storage = uni.getStorageSync("faceStorage");
+  var storage = uni.getStorageSync("storage_face");
   if (storage) {
     state.form.linkUrl = storage.linkUrl.indexOf(":") != -1 ? storage.linkUrl.split(":")[0] : storage.linkUrl;
     state.form.port = storage.port ? storage.port : "";
@@ -344,7 +344,7 @@ function modalConfirm() {
     return;
   }
 
-  uni.setStorageSync("faceStorage", state.form);
+  uni.setStorageSync("storage_face", state.form);
   getMeetingRoomReservationList();
   state.modal.show = false;
 }

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

@@ -9,7 +9,7 @@
 
   <oa-scroll
     customClass="info-container scroll-height"
-    :customStyle="{ height: `calc(100vh - (${proxy.$settingStore.barHightTop} + ${proxy.$settingStore.tabBarHeight}))` }"
+    :customStyle="{ height: `calc(100vh - (44px + ${proxy.$settingStore.StatusBarHeight} + ${proxy.$settingStore.tabBarHeight}))` }"
     :refresherLoad="false"
     :refresherEnabled="false"
     :refresherEnabledTitle="false"

+ 2 - 2
src/pages/index.vue

@@ -19,7 +19,7 @@
 
   <oa-scroll
     customClass="scroll-height"
-    :customStyle="{ height: `calc(100vh - (50px + ${proxy.$settingStore.barHightTop} + ${proxy.$settingStore.tabBarHeight}))` }"
+    :customStyle="{ height: `calc(100vh - (94px + ${proxy.$settingStore.StatusBarHeight} + ${proxy.$settingStore.tabBarHeight}))` }"
     :refresherLoad="false"
     :refresherEnabled="true"
     :refresherEnabledTitle="false"
@@ -33,7 +33,7 @@
         <!-- 右侧弹窗 -->
         <u-transition :show="dialogFlag" :duration="200" mode="fade">
           <view class="transition" @click="rightButtonClick()">
-            <view class="transition-section" :style="{ top: proxy.$settingStore.barHightTop }">
+            <view class="transition-section" :style="{ top: '44px' + proxy.$settingStore.StatusBarHeight }">
               <view class="transition-section-content" @click="scanCode()">
                 <text class="transition-section-content-icon iconfont oaIcon-saoyisao"></text>
                 <view class="transition-section-content-text"> 扫一扫 </view>

+ 1 - 1
src/pages/info.vue

@@ -26,7 +26,7 @@
 
   <oa-scroll
     customClass="info-container scroll-height bg-white"
-    :customStyle="{ height: `calc(100vh - (50px + ${proxy.$settingStore.barHightTop} + ${proxy.$settingStore.tabBarHeight}))`, position: 'relative' }"
+    :customStyle="{ height: `calc(100vh - (94px + ${proxy.$settingStore.StatusBarHeight} + ${proxy.$settingStore.tabBarHeight}))`, position: 'relative' }"
     :refresherLoad="false"
     :refresherEnabled="true"
     :refresherEnabledTitle="false"

+ 32 - 5
src/pages/login.vue

@@ -11,8 +11,8 @@
       <view class="middle-content">
         <text class="title" :style="{ color: useStore.loginBg ? '#FFFFFF' : '#000000' }">请登录</text>
         <!-- #ifdef APP-PLUS || MP-WEIXIN -->
-        <view class="prompt" v-if="!linkUrl">首次账号登录请先配置服务器</view>
-        <view class="setting" @tap="goSeverConfig"> 配置服务器 </view>
+        <!-- <view class="prompt" v-if="!linkUrl">首次账号登录请先配置服务器</view>
+        <view class="setting" @tap="goSeverConfig"> 配置服务器 </view> -->
         <!--#endif-->
       </view>
 
@@ -73,6 +73,24 @@
       </view>
     </view>
   </u-modal>
+
+  <!-- <u-modal
+    :show="xunJianStore.modal.show"
+    title="提醒"
+    :zoom="false"
+    :showConfirmButton="true"
+    :showCancelButton="true"
+    :closeOnClickOverlay="true"
+    @confirm="xunJianStore.modalConfirm"
+    @cancel="xunJianStore.modal.show = false"
+    @close="xunJianStore.modal.show = false"
+  >
+    <view class="slot-content">
+      <view class="mb20">
+        <u-input v-model="xunJianStore.modal.exitPassword" placeholder="霸屏退出密码(必填)" border="bottom" style="padding: 6px 0px" />
+      </view>
+    </view>
+  </u-modal> -->
 </template>
 
 <script setup>
@@ -82,7 +100,7 @@ import { reactive, getCurrentInstance, toRefs, inject, nextTick } from "vue";
 /*----------------------------------接口引入-----------------------------------*/
 /*----------------------------------组件引入-----------------------------------*/
 /*----------------------------------store引入-----------------------------------*/
-import { useStores, commonStores } from "@/store/modules/index";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
 /*----------------------------------公共方法引入-----------------------------------*/
 import config from "@/config";
 import { storageSystem } from "@/utils/storage";
@@ -90,6 +108,7 @@ import { storageSystem } from "@/utils/storage";
 const { proxy } = getCurrentInstance();
 const useStore = useStores();
 const commonStore = commonStores();
+const xunJianStore = xunJianStores();
 /*----------------------------------变量声明-----------------------------------*/
 const state = reactive({
   /** login数据 */
@@ -174,8 +193,8 @@ function init() {
     // linkUrl.value = "localhost:81";
     useStore.GetMobileTenantConfig({ url: linkUrl.value });
   } else {
-    uni.setStorageSync("serveUrl", "manager.usky.cn");
-    commonStore.setServeList("manager.usky.cn", "");
+    uni.setStorageSync("serveUrl", "xf.usky.cn:13212");
+    commonStore.setServeList("xf.usky.cn:13212", "");
     linkUrl.value = uni.getStorageSync("serveUrl");
     // linkUrl.value = "localhost:81";
     useStore.GetMobileTenantConfig({ url: linkUrl.value });
@@ -283,6 +302,14 @@ onLoad((options) => {});
 </script>
 
 <style lang="scss" scoped>
+:deep() {
+  .u-modal {
+    .slot-content {
+      font-size: 16px;
+      width: 100%;
+    }
+  }
+}
 .login-container {
   position: fixed;
   top: 0;

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

@@ -65,7 +65,7 @@
       </view>
     </view>
 
-    <!-- <view class="user-section" :class="'bg-' + proxy.$settingStore.themeColor.name" :style="{ paddingTop: proxy.$settingStore.barHightTop }">
+    <!-- <view class="user-section" :class="'bg-' + proxy.$settingStore.themeColor.name" :style="{ paddingTop: '44px' + proxy.$settingStore.StatusBarHeight }">
       <image class="bg" src="@/static/images/mine/user-bg.png"></image>
       <view class="portrait-box">
         <image v-if="!avatar" @click="proxy.$settingStore.handleToAvatar(1)" class="portrait" src="@/static/images/mine/missing-face.png"></image>

+ 1 - 0
src/permission.js

@@ -21,6 +21,7 @@ const whiteList = [
   "/pages/common/evaluate/record",//服务评价
   "/pages/common/NFC/index",//NFC读取
   "/pages/common/appMessage/details",//消息详情
+  "/pages/common/face/index",//人脸识别
 ];
 
 // 检查地址白名单

+ 18 - 21
src/plugins/common.plugins.js

@@ -71,31 +71,28 @@ export default {
       }
     });
   },
-
-
-    /**
+  /**
    * 树结构过滤
    * @param {*} treeData 
    * @param {*} ids 
    * @returns 
    */
-    findTreeNodes(treeData, ids) {
-      const result = [];
-      const findNodes_ = (nodes, idArray) => {
-        nodes.forEach(node => {
-          if (idArray.includes(node.id)) {
-            result.push(node);
-          }
-          if (node.children && node.children.length > 0) {
-            findNodes_(node.children, idArray);
-          }
-        });
-      };
-     
-      findNodes_(treeData, ids);
-      return result;
-    },
-  
+  findTreeNodes(treeData, ids) {
+    const result = [];
+    const findNodes_ = (nodes, idArray) => {
+      nodes.forEach(node => {
+        if (idArray.includes(node.id)) {
+          result.push(node);
+        }
+        if (node.children && node.children.length > 0) {
+          findNodes_(node.children, idArray);
+        }
+      });
+    };
+
+    findNodes_(treeData, ids);
+    return result;
+  },
   /**
    * @复制粘贴板
    * @param {传入值} content 
@@ -305,5 +302,5 @@ export default {
     if (data && data.length > 0) {
       uni.previewImage(param)
     }
-  }
+  },
 };

+ 5 - 0
src/plugins/index.js

@@ -6,6 +6,7 @@ import setting from "./setting.plugins";
 import time from "./time.plugins.js";
 import constData from "./constData.plugins.js";
 import nfc from "./nfc.plugins.js";
+import keyListen from "./keyListen.plugins.js";
 
 import config from "@/config"; // config
 import { useDict } from '@/utils/dict'
@@ -59,5 +60,9 @@ export default {
     app.config.globalProperties.$dayjs = dayjs;
     // 公共字典模块
     app.config.globalProperties.useDict = useDict
+    // 公共物理按钮监听
+    app.provide("$keyListen", keyListen);
+    app.config.globalProperties.$keyListen = keyListen;
+
   },
 };

+ 149 - 0
src/plugins/keyListen.plugins.js

@@ -0,0 +1,149 @@
+import { xunJianStores } from "@/store/modules/index";
+
+const SYSTEM_REASON = "reason";
+//Home键
+const SYSTEM_HOME_KEY = "homekey";
+//最近使用的应用键
+const SYSTEM_RECENT_APPS = "recentapps";
+
+let receiver, Intent = false;
+export default {
+    startListen: function (needStopSystem = false) {//开始监听,初始化
+        //参数needStopSystem默认不阻止系统响应,如需阻止调用startListen(true)
+        /*特别提醒,全面屏手势Home和recent部分机型是监听不到的,自行测试,如遇卡死电脑控制台直接重新运行项目即可解决!*/
+        let that = this;
+        let main = plus.android.runtimeMainActivity();
+        that.openListen();
+        if (needStopSystem) {
+            plus.key.addEventListener("backbutton", function (e) {
+                // main.stopLockTask()//按返回键恢复
+                // main.startLockTask()//阻止系统home建和近期任务键
+                // main.unregisterReceiver(receiver); //同时停止接收home和recent点击
+                const pages = getCurrentPages(); // 获取当前页面栈
+                const currentPage = pages[pages.length - 1]; // 最后一个元素即为当前页面
+                // xunJianStores().modal.show = currentPage.route === 'pages/login' ? true : false
+                // xunJianStores().modal.show = true
+                uni.showModal({
+                    title:"提示",
+                    editable:true,
+                    placeholderText:"请输入霸屏退出密码",
+                    success(res) {
+                        if (res.confirm) {
+                            console.log(res)
+                            xunJianStores().modal.exitPassword = res.content
+                            xunJianStores().modalConfirm()
+                        } else if (res.cancel) {
+                            console.log('用户点击了取消');
+                        }
+                    }
+                })
+                console.log('监听返回')
+                e.preventDefault();
+            });
+        } else {
+        }
+
+    },
+    openListen: function () {//注册监听
+        let that = this;
+        try {
+            let main = plus.android.runtimeMainActivity();
+            Intent = plus.android.importClass('android.content.Intent');
+            let IntentFilter = plus.android.importClass('android.content.IntentFilter');
+            var filter = new IntentFilter();
+            filter.addAction(Intent.ACTION_SCREEN_ON);
+            filter.addAction(Intent.ACTION_SCREEN_OFF);
+            filter.addAction(Intent.ACTION_USER_PRESENT);
+            filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+            filter.addAction('android.intent.action.MEDIA_BUTTON');
+            receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
+                onReceive: function (context, intent) { //实现onReceiver回调函数  
+                    let act = intent.getAction();
+                    if (act == Intent.ACTION_SCREEN_ON) {
+                        console.log('开屏')
+                    } else if (act == Intent.ACTION_SCREEN_OFF) {
+                        console.log('锁屏')
+                    } else if (act == Intent.ACTION_USER_PRESENT) {
+                        console.log('解锁')
+                    } else if (act == Intent.ACTION_CLOSE_SYSTEM_DIALOGS) {
+                        let systemReason = intent.getStringExtra(SYSTEM_REASON);
+                        console.log("关闭原因", systemReason);
+                        if (systemReason != null) {
+                            if (systemReason == SYSTEM_HOME_KEY) {
+                                // System.out.println("按下HOME键");
+                                console.log('按下HOME键')
+                                that.launchApp();//启动APP
+
+                            } else if (systemReason == SYSTEM_RECENT_APPS) {
+                                // System.out.println("按下多任务键");
+                                console.log('按下多任务键')
+                                that.launchApp();//启动APP
+                            }
+                        }
+                    }
+                    // main.unregisterReceiver(receiver);
+                    /*在这里取消会出现第二次监听无效,可根据不同业务要求
+                    在不同时刻停止接收两个按键的广播,我的处理是在返回的时候停*/
+                    // context.unregisterReceiver(receiver);
+                }
+            });
+            main.registerReceiver(receiver, filter); //注册监听  
+        } catch (e) {
+            console.error(e);
+            that.toast('初始化错误');
+        }
+    },
+    // 全屏函数
+    fullScreen() {
+        // Android全屏
+        if (uni.getSystemInfoSync().platform === "android") {
+            plus.android.invoke("setFullScreen", true);
+        }
+
+        // iOS全屏
+        if (uni.getSystemInfoSync().platform === "ios") {
+            // iOS无法通过API直接全屏,可以尝试隐藏所有导航栏
+            plus.navigator.hideSystemBar();
+        }
+    },
+    // 进入固定屏幕模式
+    stopHomeEmit() {
+        let main = plus.android.runtimeMainActivity();
+        main.stopLockTask()//按返回键恢复
+        main.startLockTask()//阻止系统home建和近期任务键
+    },
+    // 启动APP
+    launchApp() {
+        var isApp = plus.runtime.isApplicationExist({
+            //查看安卓系统手机有没有下载这款app
+            pname: 'android.dcloud.uskyMobile' //本地浏览器的包名
+        })
+
+        if (isApp) {
+            //安装了app则运行
+            plus.runtime.launchApplication(
+                {
+                    pname: "android.dcloud.uskyMobile",
+                    newTask: false
+                },
+                (e) => {
+                    console.log("e", e);
+                }
+            );
+        }
+        plus.runtime.launcher('shortcut');
+        plus.runtime.restart();
+    },
+    // 退出APP
+    quitApp() {
+        plus.runtime.quit();
+    },
+    // 提示
+    toast(content) {
+        uni.showToast({
+            title: content,
+            icon: 'none'
+
+        })
+    }
+}

+ 16 - 5
src/store/modules/setting.js

@@ -20,9 +20,8 @@ const settingStores = defineStore("storage-setting", {
         currentSize: "",//APP缓存
         barHeight: 0,//微信小程序顶部安全距离
         webViewHeight: "",//webView整体高度-铺满
-        StatusBar: 0,//APP顶部安全距离
+        StatusBarHeight: "",//APP顶部安全距离
         tabBarHeight: "",//APP底部安全距离
-        barHightTop: "",//APP头部计算距离
         deviceList: {
             networkType: null, //网络类型
             deviceBrand: null, //设备品牌
@@ -46,9 +45,8 @@ const settingStores = defineStore("storage-setting", {
         systemHeightTop() {
             let systemInfo = uni.getSystemInfoSync();
             this.webViewHeight = systemInfo.safeArea.bottom  //高度+安全区域的高度
-            this.StatusBar = systemInfo.statusBarHeight
+            this.StatusBarHeight = systemInfo.statusBarHeight + "px"
             this.tabBarHeight = common.isWechatMp() ? "0px" : systemInfo.screenHeight - systemInfo.safeArea.bottom + "px"
-            this.barHightTop = this.StatusBar ? this.StatusBar + 44 + 'px' : '44px'
 
             //#ifdef MP
             let custom = wx.getMenuButtonBoundingClientRect();
@@ -294,9 +292,22 @@ const settingStores = defineStore("storage-setting", {
             let platform = uni.getSystemInfoSync().platform; //手机平台
             let data = {
                 _api_key: "fba7440cd37400b6ff46e303896af4df",
-                appKey: platform === "android" ? "cbd3508235d03365f4253f6aae6b68ab" : "4b858fce6367652f5c0959a0444a4bea",
+                appKey: "",
                 buildVersion: config.appInfo.version,
             };
+
+            // 综合智慧云
+            if (config.appInfo.appid === "__UNI__36DE3A0") {
+                data.appKey = platform === "android" ? "cbd3508235d03365f4253f6aae6b68ab" : "4b858fce6367652f5c0959a0444a4bea"
+            }
+            // 智能巡更
+            else if (config.appInfo.appid === "__UNI__BF1A1F0") {
+                data.appKey = platform === "android" ? "d67e04ab2f4b8a1fa01a773692fc666c" : "d67e04ab2f4b8a1fa01a773692fc666c"
+            }
+            // 智能会议
+            else if (config.appInfo.appid === "__UNI__F3963F8") {
+            }
+
             modal.loading("加载中");
             checkUpdates(data).then((res) => {
                 if (res.code == 0) {

+ 25 - 1
src/store/modules/xunJian.js

@@ -5,7 +5,7 @@ import { updatePlan } from "@/api/business/zhaf/xunJian/plan.js";
 // 公共方法引用
 import modal from "@/plugins/modal.plugins.js";
 import common from "@/plugins/common.plugins.js";
-import { storage, storageSystem } from "@/utils/storage";
+import keyListen from "@/plugins/keyListen.plugins.js";
 
 const xunJianStores = defineStore(`storage-xunJian`, {
   state: () => ({
@@ -20,6 +20,12 @@ const xunJianStores = defineStore(`storage-xunJian`, {
 
     collectDataList: [], //巡检点位采集数据存储
     planDataList: [],//巡检计划采集数据存储
+
+    modal: {
+      show: false,
+      exitPassword: "",
+      newExitPassword: "Usky-1707",//系统退出密码
+    }
   }),
   unistorage: true,
   actions: {
@@ -44,6 +50,24 @@ const xunJianStores = defineStore(`storage-xunJian`, {
           }, 1000);
         });
       }
+    },
+    modalConfirm() {
+      //#ifdef APP-PLUS
+      if (!this.modal.exitPassword) {
+        modal.showToast("密码不能为空");
+        return;
+      }
+
+      if (this.modal.exitPassword != this.modal.newExitPassword) {
+        modal.showToast("密码错误");
+        this.modal.show = true;
+        return;
+      }
+
+      this.modal.exitPassword = ""
+      this.modal.show = false;
+      keyListen.quitApp(); //退出APP
+      //#endif
     }
   },
 });

+ 0 - 130
src/utils/keyListen.js

@@ -1,130 +0,0 @@
-// 包路径
-// const package_Activity = 'android.app.Activity'; 
-// const package_Bundle = 'android.os.Bundle'; 
-// const package_MotionEvent = 'android.view.MotionEvent'; 
-// const package_KeyEvent = 'android.view.KeyEvent'; 
-
-
-const SYSTEM_REASON = "reason";
-//Home键
-const SYSTEM_HOME_KEY = "homekey";
-//最近使用的应用键
-const SYSTEM_RECENT_APPS = "recentapps";
-
-let receiver, Intent = false;
-export default {
-	startListen: function (needStopSystem = false) {//开始监听,初始化
-		//参数needStopSystem默认不阻止系统响应,如需阻止调用startListen(true)
-		/*特别提醒,全面屏手势Home和recent部分机型是监听不到的,自行测试,如遇卡死电脑控制台直接重新运行项目即可解决!*/
-		let that = this;
-		let main = plus.android.runtimeMainActivity();
-		that.openListen();
-		if (needStopSystem) {
-			plus.key.addEventListener("backbutton", function (e) {
-				// main.stopLockTask()//按返回键恢复
-				// main.startLockTask()//阻止系统home建和近期任务键
-				// main.unregisterReceiver(receiver); //同时停止接收home和recent点击
-				console.log('监听返回')
-				e.preventDefault();
-			});
-		} else {
-		}
-
-	},
-	openListen: function () {//注册监听
-		let that = this;
-		try {
-			let main = plus.android.runtimeMainActivity();
-			Intent = plus.android.importClass('android.content.Intent');
-			let IntentFilter = plus.android.importClass('android.content.IntentFilter');
-			var filter = new IntentFilter();
-			filter.addAction(Intent.ACTION_SCREEN_ON);
-			filter.addAction(Intent.ACTION_SCREEN_OFF);
-			filter.addAction(Intent.ACTION_USER_PRESENT);
-			filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
-			filter.addAction('android.intent.action.MEDIA_BUTTON');
-			receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
-				onReceive: function (context, intent) { //实现onReceiver回调函数  
-					let act = intent.getAction();
-					if (act == Intent.ACTION_SCREEN_ON) {
-						console.log('开屏')
-					} else if (act == Intent.ACTION_SCREEN_OFF) {
-						console.log('锁屏')
-					} else if (act == Intent.ACTION_USER_PRESENT) {
-						console.log('解锁')
-					} else if (act == Intent.ACTION_CLOSE_SYSTEM_DIALOGS) {
-						let systemReason = intent.getStringExtra(SYSTEM_REASON);
-						console.log("关闭原因", systemReason);
-						if (systemReason != null) {
-							if (systemReason == SYSTEM_HOME_KEY) {
-								// System.out.println("按下HOME键");
-								console.log('按下HOME键')
-								that.launchApp();//启动APP
-
-							} else if (systemReason == SYSTEM_RECENT_APPS) {
-								// System.out.println("按下多任务键");
-								console.log('按下多任务键')
-								that.launchApp();//启动APP
-							}
-						}
-					} else if (act == Intent.GLOBAL_ACTION_BACK) {
-						console.log('返回')
-					}
-					// main.unregisterReceiver(receiver);
-					/*在这里取消会出现第二次监听无效,可根据不同业务要求
-					在不同时刻停止接收两个按键的广播,我的处理是在返回的时候停*/
-					// context.unregisterReceiver(receiver);
-				}
-			});
-			main.registerReceiver(receiver, filter); //注册监听  
-		} catch (e) {
-			console.error(e);
-			toast('初始化错误');
-		}
-	},
-	// 全屏函数
-	fullScreen() {
-		// Android全屏
-		if (uni.getSystemInfoSync().platform === "android") {
-			plus.android.invoke("setFullScreen", true);
-		}
-
-		// iOS全屏
-		if (uni.getSystemInfoSync().platform === "ios") {
-			// iOS无法通过API直接全屏,可以尝试隐藏所有导航栏
-			plus.navigator.hideSystemBar();
-		}
-	},
-	stopHomeEmit() {
-		let main = plus.android.runtimeMainActivity();
-		main.stopLockTask()//按返回键恢复
-		main.startLockTask()//阻止系统home建和近期任务键
-	},
-	launchApp() {
-		var isApp = plus.runtime.isApplicationExist({
-			//查看安卓系统手机有没有下载这款app
-			pname: 'android.dcloud.uskyMobile' //本地浏览器的包名
-		})
-
-		if (isApp) {
-			//安装了app则运行
-			plus.runtime.launchApplication(
-				{
-					pname: "android.dcloud.uskyMobile",
-					newTask: false
-				},
-				(e) => {
-					console.log("e", e);
-				}
-			);
-		}
-		plus.runtime.launcher('shortcut');
-		plus.runtime.restart();
-	}
-}
-function toast(content) {
-	uni.showToast({
-		title: content,
-		icon: 'none'
-	})
-}

+ 115 - 0
unpackage/config/setting.js

@@ -0,0 +1,115 @@
+const fs = require('fs');
+
+const args = process.argv.slice(2)[0];
+const filesToModify = ['./src/manifest.json', './src/pages.json'];
+filesToModify.forEach((file) => {
+    fs.readFile(file, 'utf8', function (err, data) {
+        if (err) throw err;
+        let cleanedData = data.replace(/\/\/.*|\/\*[\s\S]*?\*\//g, '');// 使用正则表达式去除单行注释
+        let state = JSON.parse(cleanedData);// 解析JSON数据
+
+        if (file == './src/manifest.json') {
+            if (args === 'zhiHuiYun') {
+                state.name = '综合智慧云'
+                state.appid = '__UNI__36DE3A0'
+                state.description = '综合智慧云APP,是一款助力于企业数字化的应用平台,帮助企业提升办公效率,实现组织数字化和业务数字化。'
+                state.versionName = "2.1.9"
+                state.versionCode = 19
+                state.h5.title = '综合智慧云'
+            } else if (args === 'xunJian') {
+                state.name = '智能巡更'
+                state.appid = '__UNI__BF1A1F0'
+                state.description = '智能巡更app,是一款用于监督和记录巡逻人员按照预定路线和时间进行巡逻的系统。'
+                state.versionName = "2.2.1"
+                state.versionCode = 21
+                state.h5.title = '智能巡更'
+            } else if (args === 'huiYi') {
+                state.name = '智能会议'
+                state.appid = '__UNI__F3963F8'
+                state.description = '智能会议APP,是一款集成了现代信息技术和智能化管理功能的移动应用程序,旨在提升会议体验和管理效率。'
+                state.versionName = "2.0.1"
+                state.versionCode = 1
+                state.h5.title = '智能会议'
+            }
+        } else if ('./src/pages.json') {
+            state.pages = [
+                {
+                    "path": "pages/index",
+                    "style": {
+                        "navigationStyle": "custom",
+                        "navigationBarTitleText": "工作台",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "pages/login",
+                    "style": {
+                        "navigationBarTitleText": "登录",
+                        "navigationStyle": "custom",
+                        "navigationBarTextStyle": "black"
+                    }
+                },
+                {
+                    "path": "pages/register",
+                    "style": {
+                        "navigationBarTitleText": "注册",
+                        "navigationStyle": "custom",
+                        "navigationBarTextStyle": "black"
+                    }
+                },
+                {
+                    "path": "pages/serveConfigSelect",
+                    "style": {
+                        "navigationBarTitleText": "服务器配置",
+                        "navigationStyle": "custom",
+                        "navigationBarTextStyle": "black"
+                    }
+                },
+                {
+                    "path": "pages/serveConfig",
+                    "style": {
+                        "navigationBarTitleText": "服务器配置",
+                        "navigationStyle": "custom",
+                        "navigationBarTextStyle": "black"
+                    }
+                },
+                {
+                    "path": "pages/info",
+                    "style": {
+                        "navigationBarTitleText": "消息",
+                        "navigationStyle": "custom",
+                        "enablePullDownRefresh": false,
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                },
+                {
+                    "path": "pages/mine",
+                    "style": {
+                        "navigationBarTitleText": "我的",
+                        "navigationStyle": "custom",
+                        "app-plus": {
+                            "bounce": "none",
+                            "titleNView": false
+                        }
+                    }
+                }
+            ]
+        }
+
+        // 将修改后的对象转换回JSON字符串
+        const updated = JSON.stringify(state, null, 4);
+
+        // 写入新的配置到manifest.json
+        fs.writeFile(file, updated, 'utf8', function (err) {
+            if (err) throw err;
+            console.log(file + ' updated successfully');
+        });
+    });
+})
+