Ver código fonte

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

gez 1 ano atrás
pai
commit
f7f76989c3
100 arquivos alterados com 2210 adições e 1839 exclusões
  1. 3 4
      src/App.vue
  2. 10 0
      src/api/business/fastMail.js
  3. 21 0
      src/api/system/setting.js
  4. 9 1
      src/api/system/user.js
  5. 0 183
      src/components/list-test/list-test.vue
  6. 1 1
      src/components/oa-calendar/uni-calendar.vue
  7. 149 0
      src/components/oa-movable/index.vue
  8. 1 1
      src/components/oa-tabbar/index.vue
  9. 6 2
      src/components/oa-timeLine-item/index.vue
  10. 114 0
      src/components/oa-transForm/index.vue
  11. 294 0
      src/components/oa-upgrade/index.vue
  12. 19 3
      src/components/oa-upload/index.vue
  13. 3 3
      src/config.js
  14. 4 1
      src/main.js
  15. 9 6
      src/manifest.json
  16. 20 21
      src/pages.json
  17. 220 0
      src/pages/business/fastMail/index.vue
  18. 1 1
      src/pages/business/fireIot/alarmManage/alarmDetails/index.vue
  19. 3 3
      src/pages/business/fireIot/alarmManage/alarmDetailsList/index.vue
  20. 1 1
      src/pages/business/fireIot/alarmManage/index.vue
  21. 14 14
      src/pages/business/fireIot/deviceManage/components/deviceDetails.vue
  22. 6 6
      src/pages/business/fireIot/deviceManage/components/deviceDetailsList.vue
  23. 1 1
      src/pages/business/fireIot/deviceManage/index.vue
  24. 10 8
      src/pages/business/fireIot/facilitiesGather/index.vue
  25. 6 6
      src/pages/business/fireIot/facilitiesGather/mapGather.vue
  26. 1 1
      src/pages/business/fireIot/facilitiesManage/facilitiesDetails.vue
  27. 2 2
      src/pages/business/fireIot/facilitiesManage/facilitiesDetailsList.vue
  28. 2 2
      src/pages/business/fireIot/facilitiesManage/index.vue
  29. 2 2
      src/pages/business/fireIot/facilitiesManage/mapFacilitiesView.vue
  30. 1 1
      src/pages/business/fireIot/repairManage/index.vue
  31. 23 5
      src/pages/business/fireIot/repairManage/repairDetails.vue
  32. 5 5
      src/pages/business/fireIot/repairManage/repairDetailsList.vue
  33. 3 3
      src/pages/business/mhxf/coordination/index.vue
  34. 3 3
      src/pages/business/mhxf/deviceManage/index.vue
  35. 3 3
      src/pages/business/mhxf/fireReport/components/detailed.vue
  36. 3 3
      src/pages/business/mhxf/fireReport/components/detailedPath.vue
  37. 3 3
      src/pages/business/mhxf/fireReport/index.vue
  38. 0 681
      src/pages/business/mhxf/informationSelect-test/index.vue
  39. 14 25
      src/pages/business/mhxf/informationSelect/index.vue
  40. 3 3
      src/pages/business/mhxf/needMatter/index.vue
  41. 3 3
      src/pages/business/mhxf/unitInfoCollection/index.vue
  42. 0 88
      src/pages/business/mhxf/xunJian/plan/components/drawer.vue
  43. 5 8
      src/pages/business/zhaf/xunJian/collect/components/collectDetail.vue
  44. 0 0
      src/pages/business/zhaf/xunJian/collect/components/collectRecord.vue
  45. 33 9
      src/pages/business/zhaf/xunJian/collect/index.vue
  46. 0 0
      src/pages/business/zhaf/xunJian/components/chart.vue
  47. 0 0
      src/pages/business/zhaf/xunJian/components/index.vue
  48. 17 17
      src/pages/business/zhaf/xunJian/plan/components/content.vue
  49. 133 0
      src/pages/business/zhaf/xunJian/plan/components/drawer.vue
  50. 65 63
      src/pages/business/zhaf/xunJian/plan/components/report.vue
  51. 29 13
      src/pages/business/zhaf/xunJian/plan/components/siteDetails.vue
  52. 74 62
      src/pages/business/zhaf/xunJian/plan/index.vue
  53. 1 1
      src/pages/business/zhaf/xunJian/record/index.vue
  54. 1 4
      src/pages/business/zhaf/xunJian/record/recordDetail/index.vue
  55. 3 3
      src/pages/business/zhaf/xunJian/xunJian.vue
  56. 1 1
      src/pages/business/zhxf/building/index.vue
  57. 1 1
      src/pages/business/zhxf/funReport/funcAdd/index.vue
  58. 1 1
      src/pages/business/zhxf/funReport/index.vue
  59. 1 1
      src/pages/business/zhxf/messagePush/index.vue
  60. 1 1
      src/pages/common/alarmMessage/index.vue
  61. 1 1
      src/pages/common/appMessage/index.vue
  62. 0 13
      src/pages/common/authority/index.vue
  63. 5 5
      src/pages/common/customManage/index.vue
  64. 7 7
      src/pages/common/evaluate/index.vue
  65. 24 22
      src/pages/common/invoicing/index.vue
  66. 53 0
      src/pages/common/nfc/index.vue
  67. 2 2
      src/pages/common/phoneVerify/index.vue
  68. 5 3
      src/pages/common/repairReport/index.vue
  69. 4 4
      src/pages/common/repairReport/record.vue
  70. 1 1
      src/pages/common/square/index.vue
  71. 3 3
      src/pages/common/success/index.vue
  72. 0 103
      src/pages/common/test/index.vue
  73. 1 1
      src/pages/common/textview/index.vue
  74. 1 1
      src/pages/common/textview/index1.vue
  75. 1 1
      src/pages/common/webview/index.vue
  76. 6 5
      src/pages/index.vue
  77. 4 4
      src/pages/login.vue
  78. 153 219
      src/pages/mine.vue
  79. 5 5
      src/pages/mine/about/index.vue
  80. 1 1
      src/pages/mine/avatar/index.vue
  81. 1 1
      src/pages/mine/help/index.vue
  82. 70 69
      src/pages/mine/info/index.vue
  83. 1 1
      src/pages/mine/secure/fingerprint/index.vue
  84. 128 51
      src/pages/mine/secure/index.vue
  85. 1 1
      src/pages/mine/secure/loginLog/index.vue
  86. 15 15
      src/pages/mine/setting/index.vue
  87. 2 2
      src/pages/register.vue
  88. 5 4
      src/pages/serveConfig.vue
  89. 4 3
      src/pages/serveConfigSelect.vue
  90. 1 0
      src/permission.js
  91. 4 4
      src/plugins/grid.plugins.js
  92. 4 0
      src/plugins/index.js
  93. 292 0
      src/plugins/nfc.plugins.js
  94. 43 3
      src/static/iconfont/iconfont.css
  95. BIN
      src/static/iconfont/iconfont.ttf
  96. 0 0
      src/static/images/alarming/alarming-cp.png
  97. 0 0
      src/static/images/alarming/alarming-dc.png
  98. 0 0
      src/static/images/alarming/alarming-dt.png
  99. 0 0
      src/static/images/alarming/alarming-hz.png
  100. 0 0
      src/static/images/alarming/alarming-mj.png

+ 3 - 4
src/App.vue

@@ -1,8 +1,7 @@
 <script setup>
 import config from "./config";
 import { getToken, setToken, removeToken } from "@/utils/auth";
-
-import { defineComponent, getCurrentInstance, inject, nextTick, onMounted, watchEffect } from "vue";
+import { defineComponent, getCurrentInstance, inject, nextTick, onMounted, watchEffect, ref } from "vue";
 import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
 
 let tab = inject("$tab");
@@ -132,13 +131,13 @@ uni-page-refresh {
 
 //默认头部导航title样式
 :deep(.uni-page-head__title) {
-  font-size: 16px;
+  font-size: $uni-font-size-lg;
   font-weight: bold;
 }
 
 //uview-plus导航栏title样式
 :deep(.u-navbar__content__title) {
-  font-size: 16px;
+  font-size: $uni-font-size-lg;
   font-weight: bold;
 }
 

+ 10 - 0
src/api/business/fastMail.js

@@ -0,0 +1,10 @@
+import { request } from "@/utils/request";
+
+// 快递列表查询
+export function pageQuery(param) {
+    return request({
+        url: "/service-park/dataStHistory/pageQuery",
+        method: "GET",
+        data: param,
+    });
+}

+ 21 - 0
src/api/system/setting.js

@@ -0,0 +1,21 @@
+import { request, uploads } from '@/utils/request';
+
+// 检测App是否有更新
+export function checkUpdates(data) {
+    return request({
+        baseUrl: "https://www.pgyer.com",
+        url: '/apiv2/app/check',
+        method: 'POST',
+        params: data
+    })
+}
+
+// 安装 App
+export function install(data) {
+    return request({
+        baseUrl: "https://www.pgyer.com",
+        url: '/apiv2/app/install',
+        method: 'GET',
+        params: data
+    })
+}

+ 9 - 1
src/api/system/user.js

@@ -46,4 +46,12 @@ export function appAdd(data) {
     method: 'POST',
     data: data
   })
-}
+}
+
+// 注销用户个人信息
+export function appDel(data) {
+  return request({
+    url: `/system/user/${data.id}`,
+    method: 'DELETE',
+  })
+}

+ 0 - 183
src/components/list-test/list-test.vue

@@ -1,183 +0,0 @@
-<template>
-  <view class="site-wrapper" ref="contentWrapper">
-    <!-- 筛选框start -->
-    <view class="ding">
-      <view class="cu-bar search bg-gray filter-section">
-        <view class="search-form round bg-white">
-          <text class="cuIcon-search"></text>
-          <uni-easyinput v-model="nowSiteName" placeholder="请输入站点名称" prefixIcon="search" @focus="InputFocus" @blur="InputBlur" />
-        </view>
-        <view class="action">
-          <button class="cu-btn bg-blue round" @click="searchData">查询</button>
-        </view>
-      </view>
-    </view>
-    <!-- 筛选框end -->
-
-    <!-- 站点列表start -->
-    <view class="site-items">
-      <view class="cu-list menu-avatar">
-        <view class="cu-item" :class="modalName == 'move-box-' + index ? 'move-cur' : ''" v-for="(item, index) in bindData" :key="index" :data-target="'move-box-' + index">
-          <view class="cu-avatar round lg" v-bind:style="{ 'background-image': 'url(' + nowIcon + ')' }"></view>
-
-          <view class="content" v-if="nowType == 1" @tap="goNowUrl(item)">
-            <view class="text-grey site-tit">
-              <text style="width: 260rpx" class="inOneLine">{{ item.siteName }}</text>
-
-              <text style="font-size: 28rpx; text-align: right"> ( 共{{ item.siteAlarmCount }}个未处理告警 ) </text>
-            </view>
-          </view>
-
-          <view class="content" v-else @tap="goNowUrl" @longpress="showDetail(item)">
-            <view class="text-grey site-tit">
-              {{ item.siteName }}
-              <text>(共3个设备)</text>
-            </view>
-            <view class="showDetail" v-if="item.isShow" @tap.stop="goNowDetailUrl">查看详情</view>
-          </view>
-
-          <view class="nav-right num">
-            <view class="text-grey">
-              <text class="icon iconfont margin-right-xs margin-left-lg">&#xe629;</text>
-            </view>
-          </view>
-        </view>
-      </view>
-    </view>
-    <!-- 站点列表end -->
-  </view>
-</template>
-
-<script>
-export default {
-  // name: 'listTest',
-  props: {
-    bindType: {
-      type: Number,
-      default: "",
-    },
-    bindData: {
-      type: Array,
-      default: "",
-    },
-    bindUrl: {
-      type: String,
-      default: "",
-    },
-    bindDetailUrl: {
-      type: String,
-      default: "",
-    },
-    bindIcon: {
-      type: String,
-      default: "",
-    },
-    bindNum: {
-      type: String,
-      default: "",
-    },
-    bindSiteName: {
-      type: String,
-      default: "",
-    },
-  },
-  data() {
-    return {
-      modalName: null,
-      nowData: this.bindData,
-      nowUrl: this.bindUrl,
-      nowDetailUrl: this.bindDetailUrl,
-      nowIcon: this.bindIcon,
-      nowNum: this.bindNum,
-      nowType: this.bindType,
-      nowSiteName: this.bindSiteName,
-    };
-  },
-  onPullDownRefresh() {
-    console.log("refresh");
-    setTimeout(function () {
-      uni.stopPullDownRefresh();
-    }, 1000);
-  },
-
-  computed: {
-    newSiteListData() {
-      return this.nowData.map((item) => {
-        this.$set(item, "isShow", false);
-        return item;
-      });
-    },
-  },
-
-  mounted() {
-    document.addEventListener("click", (e) => {
-      if (e.target.className != "showDetail") {
-        this.nowData.forEach((item) => {
-          item.isShow = false;
-        });
-      }
-    });
-  },
-  methods: {
-    searchData() {
-      // console.log("a: "+val, oldVal);
-      this.$parent.getDataList({
-        siteName: this.nowSiteName,
-      });
-    },
-
-    // 隐藏显示
-    showDetail(e) {
-      // 存储点击那一项的状态
-      const nowStatu = e.isShow;
-      // 将每一项列表的isShow设置为false,让所有的列表都隐藏
-      this.nowData.forEach((item) => {
-        item.isShow = false;
-      });
-      // 用于再次点击该项的取反
-      e.isShow = !nowStatu;
-    },
-
-    // 页面跳转
-    goNowUrl(item) {
-      if (item.siteAlarmCount) {
-        uni.navigateTo({
-          url: this.nowUrl + "?companyCode=" + item.companyCode,
-          success: (res) => {},
-          fail: () => {},
-          complete: () => {},
-        });
-      }
-    },
-
-    goNowDetailUrl() {
-      uni.navigateTo({
-        url: this.nowDetailUrl,
-        success: (res) => {},
-        fail: () => {},
-        complete: () => {},
-      });
-    },
-    InputFocus(e) {
-      this.InputBottom = e.detail.height;
-    },
-    InputBlur(e) {
-      this.InputBottom = 0;
-    },
-  },
-};
-</script>
-
-<style>
-.showDetail {
-  position: absolute;
-  background: #fff;
-  box-shadow: 0 1px 6px 0 rgb(32 33 36 / 28%);
-  padding: 0rpx 32rpx;
-  border-radius: 10rpx;
-  top: 42rpx;
-  right: 0%;
-  z-index: 3000000;
-  font-size: 28rpx;
-}
-</style>

+ 1 - 1
src/components/oa-calendar/uni-calendar.vue

@@ -26,7 +26,7 @@
 
         <view style="display: flex">
           <view style="margin: 0px 10px">
-            <span style="margin-right: 5px">合格</span>
+            <span style="margin-right: 5px">巡检</span>
             <span style="color: #00cdac">{{ JSON.stringify(currentDateList) === "{}" ? 0 : currentDateList.patrolledCount }}</span>
           </view>
           <view class="margin-left-xs">

+ 149 - 0
src/components/oa-movable/index.vue

@@ -0,0 +1,149 @@
+<template>
+  <movable-area class="fixed-box">
+    <movable-view class="fixed-button" direction="all" :inertia="true" y="100px">
+      <view class="menuBox">
+        <view class="mainMenu iconfont ucicon-jiahao menu-item-icon" :style="{ background: themesColor }" @click="declick"></view>
+        <view class="posi" :animation="animationData">
+          <slot name="content"> </slot>
+        </view>
+      </view>
+    </movable-view>
+  </movable-area>
+</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";
+
+const emit = defineEmits(["load", "refresh"]);
+const props = defineProps({
+  //主题颜色
+  themesColor: {
+    type: String,
+    default: "#3f99ff",
+  },
+});
+
+const defaultArray = reactive({
+  off: true,
+  animation: null,
+  animationData: {},
+});
+
+const { themesColor } = toRefs(props);
+const { off, animation, animationData } = toRefs(defaultArray);
+
+// 悬浮按钮
+function declick() {
+  if (off.value) {
+    //使用动画
+    rotateAndScale();
+  } else {
+    norotateAndScale();
+  }
+  off.value = !off.value;
+}
+
+//定义动画内容
+function rotateAndScale() {
+  animation.value.rotate(0).translateY(-1).step();
+  //导出动画数据传递给data层
+  animationData.value = animation.value.export();
+}
+
+//当!off的时候动画回到原始位置
+function norotateAndScale() {
+  animation.value.rotate(0).translateY(150).step();
+  animationData.value = animation.value.export();
+}
+
+onLoad((option) => {
+  animation.value = uni.createAnimation();
+});
+
+onShow(() => {
+  var animation1 = uni.createAnimation({
+    duration: 500,
+    trmingFunction: "ease",
+  });
+  animation.value = animation1;
+});
+</script>
+
+<style lang="scss" scoped>
+.fixed-box {
+  pointer-events: none;
+  width: 100vw;
+  height: 100vh;
+  position: fixed;
+  left: 0;
+  bottom: 0;
+  z-index: 100000;
+}
+
+.fixed-button {
+  right: 0;
+  top: 60vh;
+  left: auto;
+  width: 50px;
+  height: 150px;
+  display: flex;
+  padding: 5px 5px;
+  justify-content: center;
+  align-items: center;
+  pointer-events: auto;
+}
+
+.menuBox {
+  width: 100%;
+  height: 100%;
+  position: relative;
+  z-index: 1;
+  overflow: hidden;
+  border-radius: 25px;
+}
+
+.mainMenu {
+  width: 50px;
+  height: 50px;
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-radius: 100%;
+}
+
+:deep(.iconfont) {
+  color: #fff;
+  font-size: 28px;
+}
+
+.posi {
+  width: 50px;
+  position: relative;
+  z-index: -1;
+  transform: rotate(0deg) translateY(150px);
+  background-color: #fff;
+  border-radius: 50rpx;
+  padding-bottom: 50px;
+
+  :deep(.iconfont) {
+    width: 50px;
+    height: 50px;
+    font-size: 18px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    color: #333333 !important;
+  }
+}
+
+/* 适配iphonex 有底部横条的 */
+@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
+  .fixed-box {
+    bottom: constant(safe-area-inset-bottom);
+    bottom: env(safe-area-inset-bottom);
+  }
+}
+</style>

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

@@ -44,7 +44,7 @@ const tabbarList = ref([
     iconPath: "/static/images/tabBar/tab-info.png",
     selectedIconPath: "/static/images/tabBar/tab-info-blue.png",
     text: "消息",
-    dot: true,
+    dot: false,
   },
   {
     pagePath: "/pages/mine",

+ 6 - 2
src/components/oa-timeLine-item/index.vue

@@ -8,7 +8,7 @@
         <view class="title">
           {{ titleValue }}
         </view>
-        <view style="margin: auto"> </view>
+        <!-- <view style="margin: auto"> </view> -->
         <view class="time">
           {{ timeValue }}
         </view>
@@ -60,17 +60,21 @@ const { titleValue, timeValue, iconColor } = toRefs(props);
 
     .oa-timeLine-item-header-cont {
       display: flex;
-      width: 100%;
+      width: calc(100% - 18px - 15px);
       margin-left: 15px;
 
       .title {
         font-size: 15px;
         color: #000000;
+        overflow: hidden; //超出的文本隐藏
+        text-overflow: ellipsis; //溢出用省略号显示
+        white-space: nowrap; // 默认不换行;
       }
 
       .time {
         font-size: 14px;
         color: #b5b5b5;
+        margin-left: auto;
       }
     }
   }

+ 114 - 0
src/components/oa-transForm/index.vue

@@ -0,0 +1,114 @@
+<template>
+  <view
+    class="content-section"
+    :style="[
+      {
+        transform: coverTransform,
+        transition: coverTransition,
+      },
+    ]"
+    @touchstart="coverTouchstart"
+    @touchmove="coverTouchmove"
+    @touchend="coverTouchend"
+  >
+    <image class="mine-image" src="@/static/images/mine/arc.png"></image>
+    <slot name="content"></slot>
+  </view>
+</template>
+<script setup>
+import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
+import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const data = reactive({
+  coverTransform: "translateY(0px)",
+  coverTransition: "0s",
+  moving: false,
+});
+
+const { coverTransform, coverTransition, moving } = toRefs(data);
+
+let startY = 0,
+  moveY = 0,
+  pageAtTop = true;
+
+/**
+ * @触摸开始
+ */
+function coverTouchstart(e) {
+  if (pageAtTop === false) {
+    return;
+  }
+  coverTransition.value = "transform .1s linear";
+  startY = e.touches[0].clientY;
+}
+
+/**
+ * @触摸移动
+ */
+function coverTouchmove(e) {
+  moveY = e.touches[0].clientY;
+  let moveDistance = moveY - startY;
+  if (moveDistance < 0) {
+    moving.value = false;
+    return;
+  }
+  moving.value = true;
+  if (moveDistance >= 80 && moveDistance < 100) {
+    moveDistance = 80;
+  }
+  if (moveDistance > 0 && moveDistance <= 80) {
+    coverTransform.value = `translateY(${moveDistance}px)`;
+  }
+}
+
+/**
+ * @触摸结束
+ */
+function coverTouchend() {
+  if (moving.value === false) {
+    return;
+  }
+  moving.value = false;
+  coverTransition.value = "transform 0.3s cubic-bezier(.21,1.93,.53,.64)";
+  coverTransform.value = "translateY(0px)";
+}
+
+onLoad((option) => {});
+</script>
+<style lang="scss" scoped>
+.content-section {
+  position: relative;
+  margin-top: -85px;
+  padding-bottom: 50.67px;
+  background-color: #f5f6f7;
+
+  .mine-image {
+    position: absolute;
+    left: 0;
+    top: -16px;
+    width: 100%;
+    height: 36upx;
+  }
+
+  .mine-actions {
+    margin: 0.625rem 0.625rem;
+    padding: 20px 0px;
+    border-radius: 8px;
+    background-color: white;
+
+    .action-item {
+      .icon {
+        font-size: 28px;
+      }
+
+      .text {
+        display: block;
+        font-size: 13px;
+        margin: 8px 0px;
+      }
+    }
+  }
+}
+</style>

+ 294 - 0
src/components/oa-upgrade/index.vue

@@ -0,0 +1,294 @@
+<template>
+  <view class="upgrade-popup">
+    <image class="header-bg" src="@/static/images/common/oa-upgrade.png" mode="widthFix"></image>
+    <view
+      class="iconfont ucicon-oa-upgrade header-bg"
+      style="font-size: 110px; margin-top: -110px"
+      :style="{
+        color: themesColor,
+        fill: themesColor,
+      }"
+    ></view>
+
+    <view class="main">
+      <view
+        class="version"
+        :style="{
+          color: themesColor,
+        }"
+      >
+        发现新版本v{{ versionName }}
+      </view>
+      <view class="content">
+        <text class="desc">{{ versionDesc }}</text>
+      </view>
+      <!--下载状态-进度条显示 -->
+      <view class="footer" v-if="isStartDownload">
+        <view class="progress-view" :class="{ active: !hasProgress }" @click="handleInstallApp">
+          <!-- 进度条 -->
+          <view v-if="hasProgress" style="height: 100%">
+            <view class="txt">{{ percentText }}</view>
+            <view class="progress" :style="setProStyle"></view>
+          </view>
+          <view v-else>
+            <view class="btn upgrade force">{{ isDownloadFinish ? "立即安装" : "下载中..." }}</view>
+          </view>
+        </view>
+      </view>
+      <!-- 强制更新 -->
+      <view class="footer" v-else-if="isForceUpdate">
+        <view class="btn upgrade force" @click="handleUpgrade">立即更新</view>
+      </view>
+      <!-- 可选择更新 -->
+      <view class="footer" v-else>
+        <view class="btn close" @click="handleCancel">以后再说</view>
+        <view
+          class="btn upgrade"
+          :style="{
+            backgroundColor: themesColor,
+          }"
+          @click="handleUpgrade"
+        >
+          立即更新
+        </view>
+      </view>
+    </view>
+  </view>
+  <view class="upgrade-show"></view>
+</template>
+<script setup>
+import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
+import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, watchEffect, toRefs, computed } from "vue";
+
+import { downloadApp, installApp } from "@/utils/upgrade.js";
+
+const { proxy } = getCurrentInstance();
+const props = defineProps({
+  //弹窗数据
+  modalArray: {
+    type: Object,
+    default: {},
+  },
+  //主题颜色
+  themesColor: {
+    type: String,
+    default: "#3f99ff",
+  },
+});
+const emits = defineEmits(["closeModal"]);
+const { modalArra, themesColor } = toRefs(props);
+
+const checkInfo = reactive({
+  isForceUpdate: false, //是否强制更新
+  versionName: props.modalArray.buildVersion, //版本名称
+  versionDesc: props.modalArray.buildUpdateDescription.replace(/\\n/, "\n"), //更新说明
+  downloadUrl: props.modalArray.downloadURL, //APP下载链接
+  isDownloadFinish: false, //是否下载完成
+  hasProgress: false, //是否能显示进度条
+  currentPercent: 0, //当前下载百分比
+  isStartDownload: false, //是否开始下载
+  newFileName: "", //下载后app本地路径名称
+});
+
+const { modalTitle, modalContent, isForceUpdate, versionName, versionDesc, downloadUrl, isDownloadFinish, hasProgress, currentPercent, isStartDownload, newFileName } = toRefs(checkInfo);
+
+//设置进度条样式,实时更新进度位置
+const setProStyle = computed(() => {
+  return {
+    width: (510 * currentPercent.value) / 100 + "rpx", //510:按钮进度条宽度
+  };
+});
+
+//百分比文字
+const percentText = computed(() => {
+  let percent = currentPercent.value;
+  if (typeof percent !== "number" || isNaN(percent)) return "下载中...";
+  if (percent < 100) return `下载中${percent}%`;
+  return "立即安装";
+});
+
+//更新
+function handleUpgrade() {
+  if (downloadUrl.value) {
+    isStartDownload.value = true;
+    //开始下载App
+    downloadApp(downloadUrl.value, (current) => {
+      //下载进度监听
+      hasProgress.value = true;
+      currentPercent.value = current;
+    })
+      .then((fileName) => {
+        //下载完成
+        isDownloadFinish.value = true;
+        newFileName.value = fileName;
+        if (fileName) {
+          //自动安装App
+          handleInstallApp();
+        }
+      })
+      .catch((e) => {
+        console.log(e, "e");
+      });
+  } else {
+    uni.showToast({
+      title: "下载链接不存在",
+      icon: "none",
+    });
+  }
+}
+
+//安装app
+function handleInstallApp() {
+  //下载完成才能安装,防止下载过程中点击
+  if (isDownloadFinish.value && newFileName.value) {
+    installApp(newFileName.value, () => {
+      //安装成功,关闭升级弹窗
+      emits("closeModal", false);
+    });
+  }
+}
+
+/** 取消按钮 */
+function handleCancel() {
+  emits("closeModal", false);
+}
+
+onLoad((option) => {});
+</script>
+
+<style lang="scss" scoped>
+.upgrade-popup {
+  width: 580rpx;
+  height: auto;
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  background: #fff;
+  border-radius: 20rpx;
+  box-sizing: border-box;
+  border: 1px solid #eee;
+  z-index: 1200;
+}
+
+.header-bg {
+  display: flex;
+  width: 230rpx;
+  margin: -112rpx auto 0 auto;
+}
+
+.main {
+  padding: 10rpx 30rpx 30rpx;
+  box-sizing: border-box;
+  .version {
+    font-size: 36rpx;
+    font-weight: 700;
+    width: 100%;
+    text-align: center;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    letter-spacing: 1px;
+  }
+
+  .content {
+    margin-top: 60rpx;
+    .desc {
+      display: block;
+      box-sizing: border-box;
+      margin-top: 20rpx;
+      font-size: 28rpx;
+      color: #6a6a6a;
+      max-height: 80vh;
+      overflow-y: auto;
+    }
+  }
+
+  .footer {
+    width: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    position: relative;
+    flex-shrink: 0;
+    margin-top: 100rpx;
+
+    .btn {
+      width: 246rpx;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      position: relative;
+      z-index: 999;
+      height: 90rpx;
+      box-sizing: border-box;
+      font-size: 30rpx;
+      border-radius: 10rpx;
+      letter-spacing: 2rpx;
+
+      &.force {
+        width: 500rpx;
+      }
+
+      &.close {
+        border: 1px solid #e0e0e0;
+        margin-right: 25rpx;
+        color: #000;
+      }
+
+      &.upgrade {
+        color: white;
+      }
+    }
+
+    .progress-view {
+      width: 510rpx;
+      height: 90rpx;
+      display: flex;
+      position: relative;
+      align-items: center;
+      border-radius: 6rpx;
+      background-color: #dcdcdc;
+      display: flex;
+      justify-content: flex-start;
+      padding: 0px;
+      box-sizing: border-box;
+      border: none;
+      overflow: hidden;
+
+      &.active {
+        background-color: #026df7;
+      }
+
+      .progress {
+        height: 100%;
+        background-color: #026df7;
+        padding: 0px;
+        box-sizing: border-box;
+        border: none;
+        border-top-left-radius: 10rpx;
+        border-bottom-left-radius: 10rpx;
+      }
+
+      .txt {
+        font-size: 28rpx;
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        transform: translate(-50%, -50%);
+        color: #fff;
+      }
+    }
+  }
+}
+
+.upgrade-show {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1110;
+  background: rgba(0, 0, 0, 0.6);
+}
+</style>

+ 19 - 3
src/components/oa-upload/index.vue

@@ -3,7 +3,7 @@
   <view class="oa-upload" v-if="uploadCount == 1">
     <view v-if="uploadImage" class="uploadView" :style="uploadStyle">
       <view class="uploadUimage">
-        <u-image width="100%" height="100%" :src="uploadImage"></u-image>
+        <u-image width="100%" height="100%" :src="uploadImage" @click="handlePreviewImage(uploadImage)"></u-image>
       </view>
 
       <view v-if="!uploadCloseStatus" class="uploadViewClose" @click="uploadViewClose()">
@@ -19,7 +19,7 @@
   <view class="oa-upload" v-if="uploadCount > 1">
     <view class="uploadView" :style="uploadStyle" v-for="up in uploadList" :key="up">
       <view class="uploadUimage">
-        <u-image width="100%" height="100%" :src="up.url"></u-image>
+        <u-image width="100%" height="100%" :src="up[uploadListSrc]" @click="handlePreviewImage(up[uploadListSrc])"></u-image>
       </view>
 
       <view v-if="!uploadCloseStatus" class="uploadViewClose" @click="uploadViewClose(up)">
@@ -49,6 +49,11 @@ const props = defineProps({
     type: Object,
     default: [],
   },
+  //图片集合src(uploadCount大于1时使用)
+  uploadListSrc: {
+    type: String,
+    default: "url",
+  },
   //样式
   uploadStyle: {
     type: Object,
@@ -75,7 +80,18 @@ const props = defineProps({
   },
 });
 
-const { uploadImage, uploadList, uploadStyle, uploadIconSize, uploadCloseStatus, uploadCount } = toRefs(props);
+const { uploadImage, uploadList, uploadListSrc, uploadStyle, uploadIconSize, uploadCloseStatus, uploadCount } = toRefs(props);
+
+/**
+ * @查看图片
+ * @点击事件
+ */
+function handlePreviewImage(url) {
+  uni.previewImage({
+    urls: [url],
+    current: url,
+  });
+}
 
 /**
  * @upload图片上传

+ 3 - 3
src/config.js

@@ -5,7 +5,7 @@ export default {
   //#endif
 
   //#ifdef H5
-  baseUrl: import.meta.env.MODE === "production" ? "http://" + window.location.host + "/prod-api" : "http://172.16.120.165:13200/prod-api",
+  baseUrl: import.meta.env.MODE === "production" ? `http://${window.location.host}/prod-api` : `http://172.16.120.165:13200/dev-api`,
   //#endif
 
   websiteUrl: "https://qhome.usky.cn",
@@ -15,7 +15,7 @@ export default {
     // 应用名称
     name: "usky-app-mobile",
     // 应用版本
-    version: "2.0.0",
+    version: uni.getSystemInfoSync().appWgtVersion || uni.getSystemInfoSync().appVersion,
     // 应用logo
     logo: "/static/logo.png",
     // 官网邮箱
@@ -25,7 +25,7 @@ export default {
     // 官方网站
     site_url: "http://www.usky.cn/",
     // 版权
-    copyright:"Copyright © 2021- 2025 Usky. All Rights Reserved. 永天股份 版权所有",
+    copyright: "Copyright © 2021- 2025 Usky. All Rights Reserved. 永天股份 版权所有",
     // 政策协议
     agreements: [
       {

+ 4 - 1
src/main.js

@@ -21,6 +21,8 @@ import oaUpload from "@/components/oa-upload/index"
 import oaScroll from "@/components/oa-scroll/index"
 import oaTouch from "@/components/oa-touch/index"
 import oaDropdown from "@/components/oa-dropdown/index"
+import oaUpgrade from "@/components/oa-upgrade/index"
+import oaTransForm from "@/components/oa-transForm/index"
 
 export function createApp() {
   const app = createSSRApp(App);
@@ -34,7 +36,8 @@ export function createApp() {
   app.component('oa-scroll', oaScroll)
   app.component('oa-touch', oaTouch)
   app.component('oa-dropdown', oaDropdown)
-  
+  app.component('oa-upgrade', oaUpgrade)
+  app.component('oa-transForm', oaTransForm)
 
   // 挂载全局json导出
   app.component("downloadExcel", JsonExcel);

+ 9 - 6
src/manifest.json

@@ -2,8 +2,8 @@
     "name" : "综合智慧云",
     "appid" : "__UNI__36DE3A0",
     "description" : "综合智慧云app,助力企业数字化转型升级",
-    "versionName" : "2.1.0",
-    "versionCode" : 10,
+    "versionName" : "2.1.2",
+    "versionCode" : 11,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {
@@ -55,25 +55,28 @@
                     "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
                     "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                     "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
                     "<uses-permission android:name=\"android.permission.INTERNET\"/>",
                     "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
                     "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
                     "<uses-permission android:name=\"android.permission.NFC\"/>",
                     "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
                     "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                     "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
                     "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+                    "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
                     "<uses-permission android:name=\"android.permission.USE_FINGERPRINT\"/>",
                     "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                     "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>",
-                    "<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
-                    "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>"
+                    "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>"
                 ],
-                "minSdkVersion" : ""
+                "minSdkVersion" : "",
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],
+                "targetSdkVersion" : 30
             },
             /* ios打包配置 */
             "ios" : {

+ 20 - 21
src/pages.json

@@ -106,20 +106,6 @@
             "enablePullDownRefresh": false
           }
         },
-        {
-          "path": "authority/index",
-          "style": {
-            "navigationBarTitleText": "授权",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
-          "path": "test/index",
-          "style": {
-            "navigationBarTitleText": "",
-            "enablePullDownRefresh": false
-          }
-        },
         {
           "path": "invoicing/index",
           "style": {
@@ -184,6 +170,13 @@
             "navigationBarTitleText": "服务评价",
             "enablePullDownRefresh": false
           }
+        },
+        {
+          "path": "nfc/index",
+          "style": {
+            "navigationBarTitleText": "NFC读取",
+            "enablePullDownRefresh": false
+          }
         }
       ]
     },
@@ -406,13 +399,6 @@
             "enablePullDownRefresh": false
           }
         },
-        {
-          "path": "informationSelect-test/index",
-          "style": {
-            "navigationBarTitleText": "信息查询",
-            "enablePullDownRefresh": false
-          }
-        },
         //信息查询 结束
         //设备管理 开始
         {
@@ -613,6 +599,19 @@
           }
         }
       ]
+    },
+    // 业务模块
+    {
+      "root": "pages/business",
+      "pages": [
+        {
+          "path": "fastMail/index",
+          "style": {
+            "navigationBarTitleText": "我的快递",
+            "enablePullDownRefresh": false
+          }
+        }
+      ]
     }
   ],
   "globalStyle": {

+ 220 - 0
src/pages/business/fastMail/index.vue

@@ -0,0 +1,220 @@
+<template>
+  <u-sticky class="shadow-default" bgColor="#fff" style="top: 0">
+    <u-tabs :list="tabsList" :current="tabsCurrent" @click="tabsClick" lineColor="#333" :activeStyle="{ color: '#333' }" :inactiveStyle="{ color: '#909399' }" :scrollable="false"></u-tabs>
+  </u-sticky>
+
+  <oa-scroll
+    customClass="fastMail-container scroll-height"
+    :pageSize="pageSize"
+    :total="total"
+    :refresherLoad="true"
+    :refresherEnabled="true"
+    :refresherDefaultStyle="'none'"
+    :refresherThreshold="44"
+    :refresherBackground="'#f5f6f7'"
+    @load="load"
+    @refresh="refresh"
+    :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
+  >
+    <view v-show="tabsCurrent == 0">
+      <view class="content-area menu-list mlr0" v-for="data in dataList" :key="data">
+        <view class="list-cell" style="color: #666666; line-height: 30px">
+          <view class="content-area-top menu-item"> </view>
+          <view class="content-area-row_wrap menu-item">
+            <view class="content-area-row_wrap-view" style="margin-right: auto">
+              <view class="mr5" style="font-weight: 600">{{ data.pickupCode }}</view>
+              <view class="iconfont ucicon-a-copy menu-item-icon" @click="copy(data.pickupCode)"> </view>
+            </view>
+            <view class="content-area-row_wrap-view" style="min-width: auto; max-width: 50%">
+              {{ data.pickupAddress }}
+            </view>
+            <view class="content-area-row_wrap-view" style="margin-right: auto">
+              <image class="mr5" style="width: 15px; height: 15px; margin: auto 0" mode="widthFix" src="@/static/images/common/ydkd.png" />
+              韵达快递:{{ data.packNo }}
+            </view>
+            <view class="content-area-row_wrap-view" style="min-width: auto">
+              <view class="iconfont ucicon-dial menu-item-icon mr0" @click="proxy.$common.makePhoneCall(data.contactPhone)"> </view>
+            </view>
+            <view class="content-area-row_wrap-view">{{ data.dataTime ? data.dataTime.replace("T", " ") : "" }}</view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <view v-show="tabsCurrent == 1">
+      <view class="content-area menu-list mlr0" v-for="data in dataList" :key="data">
+        <view class="list-cell" style="color: #666666; line-height: 30px">
+          <view class="content-area-top menu-item"> </view>
+          <view class="content-area-row_wrap menu-item">
+            <view class="content-area-row_wrap-view" style="margin-right: auto">
+              <view class="mr5" style="font-weight: 600">{{ data.pickupCode }}</view>
+              <view class="iconfont ucicon-a-copy menu-item-icon" @click="copy(data.pickupCode)"> </view>
+            </view>
+            <view class="content-area-row_wrap-view" style="min-width: auto; max-width: 50%">
+              {{ data.pickupAddress }}
+            </view>
+            <view class="content-area-row_wrap-view" style="margin-right: auto">
+              <image class="mr5" style="width: 15px; height: 15px; margin: auto 0" mode="widthFix" src="@/static/images/common/ydkd.png" />
+              韵达快递:{{ data.packNo }}
+            </view>
+            <view class="content-area-row_wrap-view" style="min-width: auto">
+              <view class="iconfont ucicon-dial menu-item-icon mr0" @click="proxy.$common.makePhoneCall(data.contactPhone)"> </view>
+            </view>
+            <view class="content-area-row_wrap-view">{{ data.dataTime ? data.dataTime.replace("T", " ") : "" }}</view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </oa-scroll>
+</template>
+
+<script setup>
+import config from "@/config";
+import storage from "@/utils/storage";
+import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+import { useStores, commonStores } from "@/store/modules/index";
+
+import { pageQuery } from "@/api/business/fastMail.js";
+
+const { proxy } = getCurrentInstance();
+const commonStore = commonStores();
+
+const dataList = ref([]);
+const pageSize = ref(20);
+const current = ref(1);
+const total = ref(0);
+
+const data = reactive({
+  tabsList: [
+    {
+      name: "待取件",
+    },
+    {
+      name: "已取件",
+    },
+  ],
+  tabsCurrent: 0,
+});
+
+const { tabsList, tabsCurrent } = toRefs(data);
+
+/**
+ * @页面初始化
+ */
+function init() {
+  pageQueryApi();
+}
+
+function pageQueryApi() {
+  pageQuery({
+    pageNum: current.value,
+    pageSize: pageSize.value,
+    pickupStatus: tabsCurrent.value,
+  }).then((res) => {
+    if (res.data.records.length > 0) {
+      dataList.value = res.data.records;
+      total.value = res.data.total;
+    }
+  });
+}
+
+/**
+ * @复制粘贴板
+ */
+function copy(value) {
+  // 触发方法
+  proxy.$common.uniCopy({
+    content: value,
+    success: (res) => {
+      uni.showToast({
+        title: res,
+        icon: "none",
+      });
+    },
+    error: (e) => {
+      uni.showToast({
+        title: e,
+        icon: "none",
+        duration: 3000,
+      });
+    },
+  });
+}
+
+/**
+ * @tabs点击事件
+ */
+function tabsClick(e) {
+  tabsCurrent.value = e.index;
+  pageQueryApi();
+}
+
+/**
+ * @scrollView加载数据
+ */
+function load() {
+  pageSize.value += 10;
+  init();
+}
+
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  pageSize.value = 20;
+  total.value = 0;
+  init();
+}
+
+onLoad((options) => {
+  init();
+});
+
+onReady(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+
+// 自定义导航事件
+onNavigationBarButtonTap((e) => {
+  if (e.float == "right") {
+  }
+});
+</script>
+
+<style lang="scss" scoped>
+:deep(.uni-page-head__title) {
+  opacity: 1 !important;
+}
+
+.fastMail-container {
+  .content-area {
+    &-top {
+      font-size: 16px;
+      font-weight: 600;
+      color: #000000;
+    }
+
+    &-row_wrap {
+      font-size: 13px;
+      flex-flow: row wrap;
+
+      &-view {
+        display: flex;
+        min-width: 50%;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        > .iconfont {
+          font-size: 14px;
+          color: #909399;
+          margin-left: 5px;
+        }
+      }
+    }
+  }
+}
+</style>

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

@@ -82,7 +82,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { baseAlarmList, baseAlarm } from "@/api/business/fireIot/alarmManage.js";
 

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

@@ -21,7 +21,7 @@
       <view class="alarmDetailsList-container">
         <view class="menu-list margin-0">
           <view class="list-cell list-cell-arrow" v-for="(base, index) in dataList" :key="index" @click="handleToDetails(base)">
-            <view class="menu-item-box" style="font-size: 13px; flex-flow: row wrap">
+            <view class="menu-item" style="font-size: 13px; flex-flow: row wrap">
               <view style="min-width: 80%; margin-bottom: 5px; color: #909399"> {{ base.alarmTime }}</view>
               <view style="min-width: 20%; margin-bottom: 5px; color: #909399; text-align: right; padding-right: 15px"> {{ base.alarmGrade }}级</view>
               <view style="min-width: 80%; margin-bottom: 5px; color: #909399">{{ base.deviceName }}</view>
@@ -40,12 +40,12 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { baseAlarmList } from "@/api/business/fireIot/alarmManage.js";
 
 const { proxy } = getCurrentInstance();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const tabsList = ref([
   {

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

@@ -30,7 +30,7 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance } from "vue";
-import { useStores, publicStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { dmpProductInfo, baseAlarmTypeList } from "@/api/business/fireIot/alarmManage.js";
 

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

@@ -5,12 +5,12 @@
         <image style="width: 40px; height: 40px; margin: auto 15px auto 0" :src="'/static/images/404.png'" mode="aspectFill"></image>
 
         <view style="margin: auto auto auto 0">
-          <view style="font-size: 15px"> {{ publicStore.$state.deviceDetailsArray.deviceName }} </view>
+          <view style="font-size: 15px"> {{ commonStore.$state.deviceDetailsArray.deviceName }} </view>
         </view>
 
         <view style="margin: auto 0 auto 0">
-          <view :style="{ fontSize: '15px', color: publicStore.$state.deviceDetailsArray.deviceStatus == 1 ? '#16bf00' : 'red' }">
-            {{ publicStore.$state.deviceDetailsArray.deviceStatus == 1 ? "在线" : "离线" }}
+          <view :style="{ fontSize: '15px', color: commonStore.$state.deviceDetailsArray.deviceStatus == 1 ? '#16bf00' : 'red' }">
+            {{ commonStore.$state.deviceDetailsArray.deviceStatus == 1 ? "在线" : "离线" }}
           </view>
         </view>
       </view>
@@ -95,35 +95,35 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import chart from "./chart.vue";
 
 import { dmpProductAttribute, historyMetrics, last } from "@/api/business/fireIot/deviceManage.js";
 
 const { proxy } = getCurrentInstance();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const dataList = ref([
   {
     title: "设备类型",
-    value: publicStore.$state.deviceDetailsArray.productName,
+    value: commonStore.$state.deviceDetailsArray.productName,
   },
   {
     title: "设备编号",
-    value: publicStore.$state.deviceDetailsArray.deviceId,
+    value: commonStore.$state.deviceDetailsArray.deviceId,
   },
   {
     title: "物联网卡号",
-    value: publicStore.$state.deviceDetailsArray.simCode,
+    value: commonStore.$state.deviceDetailsArray.simCode,
   },
   {
     title: "安装位置",
-    value: publicStore.$state.deviceDetailsArray.installAddress,
+    value: commonStore.$state.deviceDetailsArray.installAddress,
   },
   {
     title: "添加时间",
-    value: publicStore.$state.deviceDetailsArray.createdTime ? publicStore.$state.deviceDetailsArray.createdTime.replace("T", " ") : "",
+    value: commonStore.$state.deviceDetailsArray.createdTime ? commonStore.$state.deviceDetailsArray.createdTime.replace("T", " ") : "",
   },
 ]);
 
@@ -151,7 +151,7 @@ function init() {
     current: 1,
     size: 100,
     attributeName: "",
-    productId: publicStore.$state.deviceDetailsArray.productId,
+    productId: commonStore.$state.deviceDetailsArray.productId,
   }).then((requset) => {
     if (requset.status === "SUCCESS") {
       checkboxDataList.value = requset.data.records;
@@ -164,7 +164,7 @@ function init() {
       });
 
       last({
-        deviceId: publicStore.$state.deviceDetailsArray.deviceId,
+        deviceId: commonStore.$state.deviceDetailsArray.deviceId,
         metrics: array,
       }).then((requsets) => {
         if (requsets.status === "SUCCESS") {
@@ -217,8 +217,8 @@ function historyMetricsApi() {
   historyMetrics({
     startTime: calendarStartTime.value,
     endTime: calendarEndTime.value,
-    deviceId: publicStore.$state.deviceDetailsArray.deviceId,
-    deviceType: publicStore.$state.deviceDetailsArray.deviceType,
+    deviceId: commonStore.$state.deviceDetailsArray.deviceId,
+    deviceType: commonStore.$state.deviceDetailsArray.deviceType,
     metrics: checkboxValueList.value,
   }).then((requset) => {
     if (requset.status === "SUCCESS") {

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

@@ -38,7 +38,7 @@
 
         <view class="menu-list margin-0">
           <view class="list-cell list-cell-arrow" v-for="(base, index) in dataList" :key="index" @click="handleToDevice(base)">
-            <view class="menu-item-box">
+            <view class="menu-item">
               <image class="image-bg" style="width: 80rpx; height: 80rpx; margin: auto 10px auto 0" src="@/static/images/deviceManage/1.png"></image>
 
               <view style="width: calc(100% - 51px); display: flex; flex-flow: row wrap; padding-right: 10px">
@@ -62,12 +62,12 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { dmpDeviceInfo } from "@/api/business/fireIot/deviceManage.js";
 
 const { proxy } = getCurrentInstance();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const dataList = ref([]);
 const deviceName = ref("");
@@ -129,8 +129,8 @@ function dmpDeviceInfoApi() {
 function handleToDevice(array) {
   proxy.$tab.navigateTo("/pages/business/fireIot/deviceManage/components/deviceDetails");
 
-  publicStore.$state.deviceDetailsArray = array;
-  publicStore.$state.deviceDetailsArray.productName = productName.value;
+  commonStore.$state.deviceDetailsArray = array;
+  commonStore.$state.deviceDetailsArray.productName = productName.value;
 }
 
 /**
@@ -179,7 +179,7 @@ onLoad((options) => {
 
 <style lang="scss" scoped>
 .deviceDetailsList-container {
-  .menu-item-box {
+  .menu-item {
   }
 
   .deviceHeader {

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

@@ -30,7 +30,7 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance } from "vue";
-import { useStores, publicStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { dmpProductInfo } from "@/api/business/fireIot/deviceManage.js";
 

+ 10 - 8
src/pages/business/fireIot/facilitiesGather/index.vue

@@ -34,7 +34,7 @@
               <u-form-item label="设施地址" prop="address" :borderBottom="true" required>
                 <u-input v-model="form.address" placeholder="请选择设施地址" border="none" disabledColor="transparent" disabled @click="handleAction('设施地址')">
                   <template #suffix>
-                    <view class="iconfont ucicon-map menu-icon" style="font-size: 18px; color: #909399"> </view>
+                    <view class="iconfont ucicon-map menu-item-icon" style="font-size: 18px; color: #909399"> </view>
                   </template>
                 </u-input>
               </u-form-item>
@@ -48,7 +48,7 @@
                 <view style="font-size: 15px">{{ form.typeGuise == 1 ? "点" : form.typeGuise == 2 ? "线" : form.typeGuise == 3 ? "面" : "" }}</view>
                 <view v-if="form.gpsAreas.length <= 0" style="font-size: 15px; margin: auto; color: #ff0000">未编辑</view>
                 <view v-if="form.gpsAreas.length > 0" style="font-size: 15px; margin: auto; color: #30bb00">已编辑</view>
-                <view class="iconfont ucicon-bianji1 menu-icon" style="font-size: 14px; color: #909399"> </view>
+                <view class="iconfont ucicon-bianji1 menu-item-icon" style="font-size: 14px; color: #909399"> </view>
               </u-form-item>
               <u-form-item label="联系人" prop="contact" :borderBottom="true">
                 <u-input v-model="form.contact" placeholder="请输入联系人" border="none" />
@@ -117,13 +117,13 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { typeSelect, add, uploadAvatar, treeselect } from "@/api/business/fireIot/facilitiesGather.js";
 
 const { proxy } = getCurrentInstance();
 
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 //设施类型下拉数据存储
 const typeSelectList = ref([[]]);
@@ -147,7 +147,7 @@ const dataList = reactive({
     },
   ],
 
-  form: publicStore.$state.facilitiesGatherArray,
+  form: commonStore.$state.facilitiesGatherArray,
 
   rules: {
     department: [
@@ -357,6 +357,7 @@ function handleSubmit(type) {
       .validate()
       .then((res) => {
         uni.$u.toast("校验通过");
+        proxy.$modal.loading("加载中");
 
         param = {
           facilityType: form.value.facilityType,
@@ -382,6 +383,7 @@ function handleSubmit(type) {
 
         add(param).then((requset) => {
           if (requset.status === "SUCCESS") {
+            proxy.$modal.closeLoading();
             proxy.$tab.reLaunch(`/pages/common/success/index?codeName=提交成功&showNow=${false}`);
           }
         });
@@ -424,16 +426,16 @@ function handleAction(value, array) {
   }
 
   if (value == "设施地址") {
-    publicStore.$state.facilitiesGatherType = "点";
+    commonStore.$state.facilitiesGatherType = "点";
     proxy.$tab.navigateTo("/pages/business/fireIot/facilitiesGather/mapGather");
     return;
   }
 
   if (value == "类型") {
     if (form.value.typeGuise === 2) {
-      publicStore.$state.facilitiesGatherType = "线";
+      commonStore.$state.facilitiesGatherType = "线";
     } else if (form.value.typeGuise === 3) {
-      publicStore.$state.facilitiesGatherType = "面";
+      commonStore.$state.facilitiesGatherType = "面";
     }
     proxy.$tab.navigateTo("/pages/business/fireIot/facilitiesGather/mapGather");
 

+ 6 - 6
src/pages/business/fireIot/facilitiesGather/mapGather.vue

@@ -14,16 +14,16 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs, nextTick } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const { proxy } = getCurrentInstance();
 
 const pages = getCurrentPages();
 
-const dataArray = publicStore.$state.facilitiesGatherArray;
-const dataType = publicStore.$state.facilitiesGatherType;
+const dataArray = commonStore.$state.facilitiesGatherArray;
+const dataType = commonStore.$state.facilitiesGatherType;
 
 // #ifdef APP-PLUS
 setTimeout(() => {
@@ -35,7 +35,7 @@ setTimeout(() => {
 
 function onMessage(e) {
   console.log("父页面:", e.detail.data);
-  publicStore.$state.facilitiesGatherArray = JSON.parse(e.detail.data);
+  commonStore.$state.facilitiesGatherArray = JSON.parse(e.detail.data);
   uni.redirectTo({
     url: "/pages/business/fireIot/facilitiesGather/index",
   });
@@ -56,7 +56,7 @@ setTimeout(() => {
 window.onmessage = function (event) {
   if ("funcName" in event.data) {
     console.log("父页面:", event);
-    publicStore.$state.facilitiesGatherArray = JSON.parse(event.data.param);
+    commonStore.$state.facilitiesGatherArray = JSON.parse(event.data.param);
     uni.redirectTo({
       url: "/pages/business/fireIot/facilitiesGather/index",
     });

+ 1 - 1
src/pages/business/fireIot/facilitiesManage/facilitiesDetails.vue

@@ -118,7 +118,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { facilityInfo, deviceInfo, buildInfo } from "@/api/business/fireIot/facilitiesManage.js";
 

+ 2 - 2
src/pages/business/fireIot/facilitiesManage/facilitiesDetailsList.vue

@@ -30,7 +30,7 @@
 
         <view class="menu-list margin-0">
           <view class="list-cell list-cell-arrow" v-for="(base, index) in dataList" :key="index" @click="handleToDevice(base.id)">
-            <view class="menu-item-box">
+            <view class="menu-item">
               <view class="title">{{ base.facilityName }}</view>
             </view>
           </view>
@@ -43,7 +43,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { baseGgpFacility } from "@/api/business/fireIot/facilitiesManage.js";
 

+ 2 - 2
src/pages/business/fireIot/facilitiesManage/index.vue

@@ -51,11 +51,11 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, reactive, computed, onMounted, getCurrentInstance, toRefs, inject } from "vue";
-import { xunJianStores, publicStores } from "@/store/modules/index";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
 
 import { baseFacilityType } from "@/api/business/fireIot/facilitiesManage.js";
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();

+ 2 - 2
src/pages/business/fireIot/facilitiesManage/mapFacilitiesView.vue

@@ -14,11 +14,11 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs, nextTick } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { baseFacilityType, baseGgpFacilityList } from "@/api/business/fireIot/facilitiesManage.js";
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const { proxy } = getCurrentInstance();
 const pages = getCurrentPages();

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

@@ -30,7 +30,7 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance } from "vue";
-import { useStores, publicStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { dmpProductInfo, baseAlarmTypeList } from "@/api/business/fireIot/alarmManage.js";
 

+ 23 - 5
src/pages/business/fireIot/repairManage/repairDetails.vue

@@ -24,7 +24,8 @@
               <view style="text-align: right; padding: 0px 5px 0px 5px">{{ da.title }}</view>
             </u-col>
             <u-col span="8">
-              <view style="text-align: left; padding: 0px 5px 0px 5px">{{ da.value }}</view>
+              <view v-if="da.title !== '评分'" style="text-align: left; padding: 0px 5px 0px 5px">{{ da.value }}</view>
+              <u-rate v-else style="padding: 0" v-model="da.value" :minCount="0" :count="5" :allowHalf="true" activeColor="#ff9900" readonly></u-rate>
             </u-col>
           </u-row>
         </view>
@@ -79,11 +80,12 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { page, fill } from "@/api/business/fireIot/repairManage.js";
 
 const { proxy } = getCurrentInstance();
+const useStore = useStores();
 
 const dataArray = ref({});
 const dataList = ref([
@@ -137,15 +139,31 @@ function selectListApi() {
   }).then((requset) => {
     if (requset.status === "SUCCESS") {
       dataArray.value = requset.data.records[0];
-      dataArray.value.handleName = requset.data.records[0].handleName ? requset.data.records[0].handleName : "";
+      dataArray.value.handleName = requset.data.records[0].handleName ? requset.data.records[0].handleName : useStore.nickName ? useStore.nickName : "";
       dataArray.value.handleContent = requset.data.records[0].handleContent ? requset.data.records[0].handleContent : "";
 
-      dataList.value[0].value = requset.data.records[0].createTime;
+      dataList.value[0].value = requset.data.records[0].createTime ? requset.data.records[0].createTime.replace("T", " ") : requset.data[0].createTime;
       dataList.value[1].value = requset.data.records[0].projectName;
       dataList.value[2].value = requset.data.records[0].reflectName;
       dataList.value[3].value = requset.data.records[0].reflectPhone;
       dataList.value[4].value = requset.data.records[0].repairContent;
       dataList.value[5].value = requset.data.records[0].projectAddress;
+
+      if (requset.data.records[0].repairStatus === 2) {
+        dataList.value.push(
+          {
+            title: "评分",
+            value: 0,
+          },
+          {
+            title: "评分内容",
+            value: "",
+          }
+        );
+        dataList.value[6].value = requset.data.records[0].score ? requset.data.records[0].score : 0;
+        dataList.value[7].value = requset.data.records[0].appraiseContent;
+      }
+
       total.value = requset.data.total;
     }
   });
@@ -156,7 +174,7 @@ function selectListApi() {
  */
 function handleSubmit(type) {
   if (type == 1) {
-    proxy.$tab.navigateTo(`/pages/business/fireIot/repairManage/repairDetailsList`);
+    proxy.$tab.navigateBack(1);
   } else {
     if (!dataArray.value.handleName) {
       proxy.$modal.msg("请输入报修人");

+ 5 - 5
src/pages/business/fireIot/repairManage/repairDetailsList.vue

@@ -20,14 +20,14 @@
     <template #default>
       <view class="menu-list m0">
         <view class="list-cell list-cell-arrow" style="color: #666666; line-height: 25px" v-for="(base, index) in dataList" :key="index" @click="handleToDetails(base)">
-          <view class="content-area-top menu-item-box">
+          <view class="content-area-top menu-item">
             <view class="content-area-top-time">
               {{ base.repairStatus == 1 ? (base.createTime ? base.createTime.replace("T", " ") : "") : base.handleTime ? base.handleTime.replace("T", " ") : "" }}
             </view>
             <view class="content-area-top-status" v-if="base.repairStatus == 1" style="background-color: #23dedc"> 受理中 </view>
             <view class="content-area-top-status" v-if="base.repairStatus == 2" style="background-color: #16bf00"> 处理完成 </view>
           </view>
-          <view class="content-area-row_wrap menu-item-box">
+          <view class="content-area-row_wrap menu-item">
             <view class="content-area-row_wrap-view"> 项目名称:{{ base.projectName }} </view>
             <view class="content-area-row_wrap-view"> 报修人:{{ base.reflectName }} </view>
             <view class="content-area-row_wrap-view"> 报修人电话:{{ base.reflectPhone }} </view>
@@ -43,12 +43,12 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { page } from "@/api/business/fireIot/repairManage.js";
 
 const { proxy } = getCurrentInstance();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const tabsList = ref([
   {
@@ -64,7 +64,7 @@ const tabsList = ref([
     value: 2,
   },
 ]);
-const tabsCurrent = ref(0);
+const tabsCurrent = ref(1);
 
 const dataList = ref([]);
 const pageSize = ref(20);

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

@@ -12,9 +12,9 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs, nextTick } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const { proxy } = getCurrentInstance();
 
@@ -22,7 +22,7 @@ const { proxy } = getCurrentInstance();
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
+      url: "/pages/business/zhaf/xunJian/collect/components/collectRecord",
     });
   } else {
   }

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

@@ -77,11 +77,11 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance, toRefs } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { dataRtList } from "@/api/business/mhxf/deviceManage";
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const { proxy } = getCurrentInstance();
 
@@ -188,7 +188,7 @@ function change(e) {
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
+      url: "/pages/business/zhaf/xunJian/collect/components/collectRecord",
     });
   } else {
   }

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

@@ -378,7 +378,7 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance, toRefs } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import lineEcharts from "./echarts.vue";
 
@@ -386,7 +386,7 @@ import {} from "@/api/business/mhxf/informationSelect";
 
 const { proxy } = getCurrentInstance();
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const dataList = reactive({
   content1: [],
@@ -490,7 +490,7 @@ watchEffect(() => {});
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
+      url: "/pages/business/zhaf/xunJian/collect/components/collectRecord",
     });
   } else {
   }

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

@@ -9,7 +9,7 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance, toRefs } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import lineEcharts from "./echarts.vue";
 
@@ -17,7 +17,7 @@ import {} from "@/api/business/mhxf/informationSelect";
 
 const { proxy } = getCurrentInstance();
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const dataList = reactive({
   pathUrl: "",
@@ -47,7 +47,7 @@ watchEffect(() => {});
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
+      url: "/pages/business/zhaf/xunJian/collect/components/collectRecord",
     });
   } else {
   }

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

@@ -35,11 +35,11 @@
 <script setup>
 import { onReady, onLoad, onShow, onReachBottom, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { reportInfoList } from "@/api/business/mhxf/fireReport";
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const { proxy } = getCurrentInstance();
 
@@ -167,7 +167,7 @@ function refresh() {
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
+      url: "/pages/business/zhaf/xunJian/collect/components/collectRecord",
     });
   } else {
   }

+ 0 - 681
src/pages/business/mhxf/informationSelect-test/index.vue

@@ -1,681 +0,0 @@
-<template>
-  <u-sticky class="shadow-default" bgColor="#fff">
-    <u-tabs :list="list" :current="current" @click="tabsClick" lineColor="#333" :activeStyle="{ color: '#333' }" :inactiveStyle="{ color: '#909399' }"></u-tabs>
-  </u-sticky>
-
-  <oa-touch class="bg-white informationSelect" @change="touchChange">
-    <template #content>
-      <uni-swipe-action>
-        <uni-swipe-action-item>
-          <!-- 各类查询 start -->
-          <view class="tableType3">
-            <u-input style="margin-bottom: 10px" v-model="dataInput" :placeholder="placeholderText" @blur="blur" shape="circle" prefixIcon="search" prefixIconStyle="color: #0c7bf9"> </u-input>
-            <u-empty v-if="!dataRes" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
-            <view v-if="current == 8">
-              <view class="con">
-                <view class="time">{{ newTime }}</view>
-                <video src="https://mbsvod.oss-cn-beijing.aliyuncs.com/cy-video.mp4" autoplay :controls="false" :show-center-play-btn="false" :loop="true" style="width: 100%"></video>
-              </view>
-            </view>
-            <view v-else>
-              <u-row v-for="po in classifyData" :key="po">
-                <u-col span="4">
-                  <view style="text-align: right; padding: 0px 5px 0px 5px">{{ po.title }}</view>
-                </u-col>
-                <u-col span="8">
-                  <view style="text-align: left; padding: 0px 5px 0px 5px">{{ po.value }}</view>
-                </u-col>
-              </u-row>
-            </view>
-          </view>
-          <!-- 各类查询 end -->
-        </uni-swipe-action-item>
-      </uni-swipe-action>
-    </template>
-  </oa-touch>
-</template>
-
-<script setup>
-import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
-
-import { dataList } from "@/api/business/mhxf/informationSelect";
-
-const publicStore = publicStores(); //全局公共Stores
-
-const { proxy } = getCurrentInstance();
-
-const dataInput = ref("");
-const current = ref(0);
-const classifyUrl = ref("");
-const classifyCode = ref("");
-const placeholderText = ref("");
-const dataRes = ref(1);
-
-const list = ref([
-  {
-    id: 1,
-    name: "警情查询",
-  },
-  {
-    id: 2,
-    name: "火灾查询",
-  },
-  {
-    id: 3,
-    name: "人员查询",
-    badge: {
-      // isDot: true,
-      // value: 5,
-    },
-  },
-  {
-    id: 4,
-    name: "车辆查询",
-    badge: {
-      // value: 5,
-    },
-  },
-  {
-    id: 5,
-    name: "站点查询",
-    badge: {
-      // value: 5,
-    },
-  },
-  {
-    id: 6,
-    name: "消火栓",
-    badge: {
-      // value: 5,
-    },
-  },
-
-  {
-    id: 7,
-    name: "重点单位",
-    badge: {
-      // value: 5,
-    },
-  },
-  {
-    id: 8,
-    name: "消防检查信息",
-    badge: {
-      // value: 5,
-    },
-  },
-  {
-    id: 9,
-    name: "视频监控",
-    badge: {
-      // value: 5,
-    },
-  },
-]);
-
-/**
- * @滑动change事件
- */
-function touchChange(e) {
-  if (e == "右滑") {
-    if (current.value >= 1) {
-      current.value--;
-    } else {
-      current.value = list.value.length - 1;
-    }
-  } else if (e == "左滑") {
-    if (current.value < list.value.length - 1) {
-      current.value++;
-    } else {
-      current.value = 0;
-    }
-  }
-}
-
-function blur(e) {
-  if (dataInput.value) {
-    goSearch();
-  }
-}
-
-/**
- * @tabs点击事件
- */
-function tabsClick(e) {
-  current.value = e.index;
-  console.log(current.value);
-  dataInput.value = "";
-  dataRes.value = 1;
-}
-
-function goSearch() {
-  if (current.value == 0) {
-    //警情查询
-    classifyUrl.value = "/service-fire/demPoliceInfo/page";
-    placeholderText.value = "请输入案件编号";
-    classifySearch(classifyUrl.value, {
-      caseCode: dataInput.value,
-    });
-  } else if (current.value == 1) {
-    //火灾查询
-    placeholderText.value = "请输入火灾地址";
-    classifyUrl.value = "/service-fire/demFireStatisticsAttach/page";
-    classifySearch(classifyUrl.value, {
-      address: dataInput.value,
-    });
-  } else if (current.value == 2) {
-    //人员查询
-    placeholderText.value = "请输入值班人员名称";
-    classifyUrl.value = "/service-fire/unitBeOnDuty/list";
-    classifySearch(classifyUrl.value, {
-      name: dataInput.value,
-    });
-  } else if (current.value == 3) {
-    //车辆信息
-    placeholderText.value = "请输入车牌号";
-    classifyUrl.value = "/service-fire/unitBeOnDuty/vehiclelist";
-    classifySearch(classifyUrl.value, {
-      licensePlate: dataInput.value,
-    });
-  } else if (current.value == 4) {
-    //站点查询
-    placeholderText.value = "请输入站点名称";
-    classifyUrl.value = "/service-fire/unitBeOnDuty/page";
-    classifySearch(classifyUrl.value, {
-      stationName: dataInput.value,
-    });
-  } else if (current.value == 5) {
-    //消火栓
-    placeholderText.value = "请输入水源名称";
-    classifyUrl.value = "/service-fire/demWaterSource/waterSourceList";
-    classifySearch(classifyUrl.value, {
-      waterName: dataInput.value,
-    });
-  } else if (current.value == 6) {
-    //重点单位
-    placeholderText.value = "请输入单位名称";
-    classifyUrl.value = "/service-fire/baseCompany/companyList";
-    classifySearch(classifyUrl.value, {
-      companyName: dataInput.value,
-    });
-  } else if (current.value == 7) {
-    //消防检查信息
-    placeholderText.value = "请输入单位ID";
-    classifyUrl.value = "/service-fire/demFireInspect/fireInspectList";
-    classifySearch(classifyUrl.value, {
-      companyId: dataInput.value,
-    });
-  } else if (current.value == 8) {
-    //消防检查信息
-    placeholderText.value = "";
-    // classifyUrl.value = "/service-fire/demFireInspect/fireInspectList";
-    // classifySearch(classifyUrl.value, {
-    //   companyId: dataInput.value,
-    // });
-  }
-}
-
-//分类信息查询 start
-async function classifySearch(URL, params) {
-  proxy.$modal.loading("加载中");
-  classifyData.value = [];
-  dataList(URL, params).then((res) => {
-    proxy.$modal.closeLoading();
-    if (res.status == "SUCCESS") {
-      if (current.value == 2) {
-        if (res.data.length) {
-          dataRes.value = 1;
-        } else {
-          dataRes.value = 0;
-        }
-        var records = res.data[0][0];
-      } else if (current.value == 3) {
-        if (res.data.length) {
-          dataRes.value = 1;
-        } else {
-          dataRes.value = 0;
-        }
-
-        var records = res.data[0];
-      } else {
-        //  console.log('111111111')
-        // console.log(res.data.records.length)
-        //  console.log('111222')
-        if (res.data.total) {
-          dataRes.value = 1;
-        } else {
-          dataRes.value = 0;
-        }
-        var records = res.data.records[0];
-      }
-
-      console.log(dataRes.value + "------1");
-
-      switch (current.value) {
-        case 0: //警情查询
-          var classifyTitle = [
-            "案件编号",
-            "主管支队",
-            "案件时间段",
-            "通知到场时间",
-            "通知出水时间",
-            "通知控制时间",
-            "通知熄火时间",
-            "通知返队时间",
-            "区域",
-            "案件类型",
-            "案发地址",
-            "立案时间",
-            "立案日期",
-            "处置对象",
-            "案件等级",
-            "主管中队",
-            "区县",
-            "案件状态",
-            "案件性质",
-            "填表时间",
-            "街镇",
-            "创建时间",
-          ];
-          var classifyValue = [
-            records.caseCode,
-            records.branch,
-            records.timeSlot,
-            records.noticeArrivalTime,
-            records.noticeEffluentTime,
-            records.controlTime,
-            records.quenchTime,
-            records.returnTime,
-            records.caseArea,
-            records.caseTypeCode,
-            records.address,
-            records.filingTime,
-            records.filingDate,
-            records.handleObject,
-            records.caseLevel,
-            records.squadron,
-            records.district,
-            records.caseStatus,
-            records.caseNature,
-            records.bdpAudit,
-            records.streetTown,
-            records.createTime,
-          ];
-          break;
-        case 1: //火灾查询
-          var classifyTitle = [
-            "地区",
-            "街镇",
-            "经度",
-            "维度",
-            "平台ID",
-            "火灾地址",
-            "过火面积",
-            "直接财产损失",
-            "死亡人数",
-            "受伤人数",
-            "受灾户数",
-            "火灾原因",
-            "火灾等级",
-            "场所一级",
-            "场所二级",
-            "起火物一级",
-            "起火物二级",
-            "性质",
-          ];
-          var classifyValue = [
-            records.district,
-            records.street,
-            records.longitude,
-            records.latitude,
-            records.id,
-            records.address,
-            records.burnedArea,
-            records.propertyLoss,
-            records.deathToll,
-            records.nonFatal,
-            records.disasterHome,
-            records.fireCause,
-            records.fireLevel,
-            records.placeOne,
-            records.placeTwo,
-            records.fireGoodsOne,
-            records.fireGoodsTwo,
-            records.nature,
-          ];
-          break;
-        case 2: //人员查询
-          var classifyTitle = ["值班人员信息", "岗位名称", "机构名称", "机构简称", "机构地址", "值班日期"];
-          var classifyValue = [records.name, records.postName, records.organizationName, records.organizationShort, records.organizationAddress, records.time];
-          break;
-        case 3: //车辆查询
-          var classifyTitle = [
-            "车辆信息",
-            "单件装备编码",
-            "装备名称",
-            "装备编码",
-            "上级装备编码",
-            "所属消防机构",
-            "车牌号码",
-            "资产编号",
-            "商标",
-            "颜色",
-            "生产厂家名称",
-            "有效期至",
-            "车架号",
-            "发动机编号",
-            "批次号",
-            "电台呼号",
-            "车辆简称",
-            "电台频道",
-            "指挥员姓名",
-            "驾驶员",
-          ];
-          var classifyValue = [
-            records.vehicleId,
-            records.singleEquipCode,
-            records.equipName,
-            records.equipCode,
-            records.superiorEquipCode,
-            records.fireOrga,
-            records.licensePlate,
-            records.assetCode,
-            records.assetCode,
-            records.colour,
-            records.productName,
-            records.validityTime,
-            records.frameCode,
-            records.engineCode,
-            records.batchCode,
-            records.radioCallSign,
-            records.vehicleAbbreviat,
-            records.radioChannel,
-            records.commanderName,
-            records.driver,
-          ];
-          break;
-        case 4: //站点查询
-          var classifyTitle = [
-            "平台ID",
-            "支队名称",
-            "所属辖区中队",
-            "消防站名称",
-            "单位性质",
-            "地址",
-            "所在位置",
-            "联动固定电话",
-            "负责人姓名",
-            "负责人手机号码",
-            "备注",
-            "消防站类型",
-            "经度",
-            "维度",
-            "创建时间",
-            "更新时间",
-            "支队id",
-            "中队id",
-            "编号",
-            "原单位性质",
-          ];
-          var classifyValue = [
-            records.id,
-            records.branchName,
-            records.squadron,
-            records.stationName,
-            records.companyNature,
-            records.address,
-            records.location,
-            records.fixedPhone,
-            records.chargeName,
-            records.chargePhone,
-            records.remark,
-            records.stationType,
-            records.longitude,
-            records.dimension,
-            records.createTime,
-            records.updateTime,
-            records.branchId,
-            records.squadronId,
-            records.number,
-            records.primaryCompanyNature,
-          ];
-          break;
-        case 5: //消火栓
-          var classifyTitle = [
-            "可用状态名称",
-            "消防站简介",
-            "水源地址",
-            "建造时间",
-            "消火栓接口形式",
-            "水源类型",
-            "管辖机构名称",
-            "取水形式",
-            "联系方式",
-            "可用状态",
-            "水源性质",
-            "水源名称",
-            "管网单位",
-            "管网压力",
-          ];
-          var classifyValue = [
-            records.availableStatusName,
-            records.fireAbbreviat,
-            records.waterAddress,
-            records.buildTime,
-            records.hydrantInterface,
-            records.waterType,
-            records.organizateName,
-            records.waterForm,
-            records.contactMode,
-            records.availableStatus,
-            records.waterNature,
-            records.waterName,
-            records.pipeCompany,
-            records.pipePressure,
-          ];
-          break;
-        case 6: //重点单位
-          var classifyTitle = [
-            "单位联系电话",
-            "单位详细地址",
-            "职工人数",
-            "单位类型",
-            "消防安全责任人姓名",
-            "法人代表姓名",
-            "单位名称",
-            "消防安全管理人姓名",
-            "单位主属性",
-            "建筑面积",
-            "行政区域",
-            "单位成立时间",
-            "占地面积",
-            "火灾危险性",
-            "创建时间",
-            "单位性质",
-            "固定资产(单位:万元)",
-          ];
-          var classifyValue = [
-            records.linkPhone,
-            records.address,
-            records.employeeNum,
-            records.companyType,
-            records.fireDutyName,
-            records.delegateName,
-            records.companyName,
-            records.fireManageName,
-            records.mainAttribute,
-            records.buildArea,
-            records.administrativeDivision,
-            records.foundTimecoverArea,
-            records.coverArea,
-            records.fireHazard,
-            records.createTime,
-            records.companyNature,
-            records.fixedAssets,
-          ];
-          break;
-        case 7: //消防检查信息
-          var classifyTitle = ["单位ID", "检查人员ID", "计划生成时间", "检查结果", "创建人", "创建时间", "检查员名称", "检查员职位", "单位电话"];
-          var classifyValue = [
-            records.companyId,
-            records.personId,
-            records.planTime,
-            records.inspectResult,
-            records.creator,
-            records.createTime,
-            records.personName,
-            records.personPosition,
-            records.linkPhone,
-          ];
-          break;
-        // default:
-        //    默认代码块
-      }
-
-      for (var i = 0; i < classifyTitle.length; i++) {
-        var obj = {};
-        obj.title = classifyTitle[i];
-        obj.value = classifyValue[i];
-        classifyData.value.push(obj);
-
-        // console.log(classifyData.value);
-      }
-    } else {
-    }
-  });
-}
-// end
-
-watchEffect(() => {
-  goSearch();
-});
-
-// start
-
-const newTime = ref("");
-function getNowTime() {
-  var date = new Date();
-  var time =
-    addZero(date.getFullYear()) +
-    "-" +
-    addZero(date.getMonth() + 1) +
-    "-" +
-    addZero(date.getDate()) +
-    " " +
-    addZero(date.getHours()) +
-    ":" +
-    addZero(date.getMinutes()) +
-    ":" +
-    addZero(date.getSeconds());
-  newTime.value = time;
-}
-//根据自己的需求,看要不要在时间不大于10的时候在前面补0,如果需要直接addZero(date.getMinutes()),其它与之相同,如果不需要删掉addZero()方法即可。
-//小于10的拼接上0字符串
-function addZero(s) {
-  return s < 10 ? "0" + s : s;
-}
-
-// end
-
-// 自定义导航事件
-onNavigationBarButtonTap((e) => {
-  if (e.float == "right") {
-    uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
-    });
-  } else {
-  }
-});
-
-onLoad((options) => {
-  getNowTime(); //进入页面调用该方法获取当前时间
-  clearInterval(myTimeDisplay); //销毁之前定时器
-  var myTimeDisplay = setInterval(() => {
-    getNowTime(); //每秒更新一次时间
-  }, 1000);
-});
-
-onReady(() => {});
-
-onMounted(() => {});
-</script>
-
-<style lang="scss">
-.uni-swipe {
-  overflow: visible;
-}
-body {
-  background: #fff;
-}
-.is-selected {
-  color: #1989fa;
-}
-
-.informationSelect {
-  height: calc(100vh - 88px);
-  background-color: #ffffff;
-  .content {
-    padding: 10px;
-    .u-row {
-      height: 36px;
-      line-height: 36px;
-      .u-col {
-        border: 1px #e4e3e3 solid;
-        border-right: 0px;
-        border-bottom: 0px;
-        text-align: center;
-
-        view {
-          padding: 0 10px;
-          min-height: 36px;
-          overflow: hidden; //超出的文本隐藏
-          // text-overflow: ellipsis; //溢出用省略号显示
-          overflow: auto;
-          white-space: nowrap; // 默认不换行;
-          font-size: 14px;
-        }
-      }
-
-      .u-col:last-child {
-        border-right: 1px #e4e3e3 solid;
-      }
-    }
-
-    .u-row:last-child {
-      .u-col {
-        border-bottom: 1px #e4e3e3 solid;
-      }
-    }
-  }
-}
-</style>
-
-<style scoped>
-body,
-uni-page-body,
-uni-page-refresh,
-.grayBackgroundColor {
-  background: rgb(241, 241, 241);
-}
-
-.time {
-  position: absolute;
-  z-index: 99999;
-  top: 3px;
-  left: 3px;
-  display: inline-block;
-  color: #fff;
-}
-.con {
-  text-align: center;
-  position: relative;
-}
-.bg-white {
-  background-color: #ffffff;
-}
-body {
-  background: #fff;
-}
-</style>

+ 14 - 25
src/pages/business/mhxf/informationSelect/index.vue

@@ -12,22 +12,18 @@
             <view class="tableType3">
               <u-input class="block mb10" v-model="dataInput" :placeholder="placeholderText" @blur="blur" shape="circle" prefixIcon="search" prefixIconStyle="color: #0c7bf9"> </u-input>
               <u-empty v-if="!dataRes" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
-              <view v-if="current == 8">
-                <view class="con">
-                  <view class="time">{{ newTime }}</view>
-                  <video src="http://file.usky.cn/statics/video/20230203.mp4" autoplay :controls="false" :show-center-play-btn="false" :loop="true" style="width: 100%"></video>
-                </view>
-              </view>
-              <view v-else>
-                <u-row v-for="po in classifyData" :key="po">
-                  <u-col span="4">
-                    <view style="text-align: right; padding: 0px 5px 0px 5px">{{ po.title }}</view>
-                  </u-col>
-                  <u-col span="8">
-                    <view style="text-align: left; padding: 0px 5px 0px 5px">{{ po.value }}</view>
-                  </u-col>
-                </u-row>
+              <view class="con" v-if="current == 8">
+                <view class="time">{{ newTime }}</view>
+                <video src="http://file.usky.cn/statics/video/20230203.mp4" autoplay :controls="false" :show-center-play-btn="false" :loop="true" style="width: 100%"></video>
               </view>
+              <u-row v-for="po in classifyData" :key="po" v-else>
+                <u-col span="4">
+                  <view style="text-align: right; padding: 0px 5px 0px 5px">{{ po.title }}</view>
+                </u-col>
+                <u-col span="8">
+                  <view style="text-align: left; padding: 0px 5px 0px 5px">{{ po.value }}</view>
+                </u-col>
+              </u-row>
             </view>
             <!-- 各类查询 end -->
           </uni-swipe-action-item>
@@ -40,13 +36,13 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { dataList } from "@/api/business/mhxf/informationSelect";
 
 const { proxy } = getCurrentInstance();
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const dataInput = ref("");
 const current = ref(0);
@@ -242,9 +238,6 @@ async function classifySearch(URL, params) {
 
         var records = res.data[0];
       } else {
-        //  console.log('111111111')
-        // console.log(res.data.records.length)
-        //  console.log('111222')
         if (res.data.total) {
           dataRes.value = 1;
         } else {
@@ -253,8 +246,6 @@ async function classifySearch(URL, params) {
         var records = res.data.records[0];
       }
 
-      console.log(dataRes.value + "------1");
-
       switch (current.value) {
         case 0: //警情查询
           var classifyTitle = [
@@ -541,8 +532,6 @@ async function classifySearch(URL, params) {
         obj.title = classifyTitle[i];
         obj.value = classifyValue[i];
         classifyData.value.push(obj);
-
-        // console.log(classifyData.value);
       }
     } else {
     }
@@ -585,7 +574,7 @@ function addZero(s) {
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
+      url: "/pages/business/zhaf/xunJian/collect/components/collectRecord",
     });
   } else {
   }

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

@@ -188,14 +188,14 @@
 <script setup>
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { mobileScheduleList, updateMobileReformStatus, uploadAvatar, addReformMaterial } from "@/api/business/mhxf/needMatter";
 
 const { proxy } = getCurrentInstance();
 
 const useStore = useStores();
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 
 const current = ref(0);
 const classifyData = ref([]);
@@ -406,7 +406,7 @@ async function classifySearch(params) {
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
+      url: "/pages/business/zhaf/xunJian/collect/components/collectRecord",
     });
   } else {
   }

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

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

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

@@ -1,88 +0,0 @@
-<template>
-  <u-popup :show="scanBool" @close="close" @open="open" mode="bottom" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
-    <template #default>
-      <view class="mb15 mt15">
-        <h4 style="font-size: 16px; color: #149eff; text-align: center; margin-bottom: 10px">请选择计划</h4>
-        <view style="font-size: 12px; color: #b7b7b7; text-align: center"> 当前地点存在于多个计划,请选择目标计划 </view>
-      </view>
-      <scroll-view scroll-y class="pl15 pr15" style="height: calc(100vh - 30rem)">
-        <view v-for="(scan, index) in scanArray" :key="index">
-          <view style="display: flex; font-size: 15px; height: 50px; line-height: 50px">
-            <view style="margin-right: 15px">
-              <img src="@/static/images/xunjian/plan-scan-drawer.png" alt="" />
-            </view>
-            <view>{{ scan.planName }} </view>
-            <view style="margin: auto"></view>
-            <view style="margin: auto 0">
-              <u-button type="primary" shape="circle" style="height: 25px; font-size: 13px" @click="reportClick(scan.siteId, scan.id)"> 上报 </u-button>
-            </view>
-          </view>
-
-          <view style="border-bottom: 1.5px #dad7d7 solid"></view>
-        </view>
-      </scroll-view>
-    </template>
-  </u-popup>
-</template>
-
-<script setup>
-import { onLoad, onShow } from "@dcloudio/uni-app";
-import { ref, onMounted, inject, shallowRef, watchEffect } from "vue";
-import { publicStores, xunJianStores } from "@/store/modules/index";
-
-const xunJianStore = xunJianStores(); //全局变量值Store
-
-const props = defineProps({
-  scanArray: {
-    type: Object,
-    default: null,
-  },
-  scanBool: {
-    type: Boolean,
-    default: null,
-  },
-});
-const emit = defineEmits(["scanClose"]);
-
-const scanArray = ref(props.scanArray);
-const scanBool = ref(false);
-
-/**
- * @巡检上报
- * @按钮点击事件
- */
-function reportClick(siteId, planSonId) {
-  xunJianStore.contentArray = {};
-  xunJianStore.siteNubmber = undefined;
-  xunJianStore.siteId = siteId;
-  xunJianStore.planSonId = planSonId;
-
-  uni.navigateTo({
-    url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
-  });
-}
-
-/**
- * @开启抽屉时执行
- */
-function open() {}
-
-/**
- * @关闭抽屉时执行
- */
-function close() {
-  scanBool.value = false;
-  emit("scanClose", false);
-}
-
-/**
- * @监听器
- */
-watchEffect((fn, options) => {
-  scanBool.value = props.scanBool;
-});
-
-onLoad((options) => {});
-
-onMounted(() => {});
-</script>

+ 5 - 8
src/pages/business/mhxf/xunJian/collect/components/collectDetail.vue → src/pages/business/zhaf/xunJian/collect/components/collectDetail.vue

@@ -28,10 +28,10 @@ import {
   onNavigationBarButtonTap,
 } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
-import { publicStores, xunJianStores } from "@/store/modules/index";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
 
-const publicStore = publicStores(); //全局公共Store
-const xunJianStore = xunJianStore(); //全局变量值Store
+const commonStore = commonStores(); //全局公共Store
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
 
@@ -65,13 +65,9 @@ function handleInsert() {
     .validate()
     .then((res) => {
       let endTime = new Date();
-      model.siteTime = publicStore.formatterDate(endTime, "yyyy-MM-dd hh:mm:ss");
+      model.siteTime = commonStore.formatterDate(endTime, "yyyy-MM-dd hh:mm:ss");
 
       xunJianStore.collectDataList.push(model);
-
-      //   uni.navigateTo({
-      //     url: "/pages/business/mhxf/xunJian/collect/index",
-      //   });
       uni.navigateBack({
         delta: 1, //返回到需要执行方法的页面
       });
@@ -82,6 +78,7 @@ function handleInsert() {
 }
 
 onLoad((options) => {
+  model.siteType = options.siteType;
   model.siteNubmber = options.siteNubmber;
 });
 

+ 0 - 0
src/pages/business/mhxf/xunJian/collect/components/collectRecord.vue → src/pages/business/zhaf/xunJian/collect/components/collectRecord.vue


+ 33 - 9
src/pages/business/mhxf/xunJian/collect/index.vue → src/pages/business/zhaf/xunJian/collect/index.vue

@@ -35,9 +35,12 @@
       </uni-swipe-action-item>
     </uni-swipe-action>
 
-    <view class="app-scan-fixed">
-      <u-image width="67" height="67" src="@/static/images/add.png" shape="circle" @click="scanClick()"></u-image>
-    </view>
+    <oaMovable :themesColor="proxy.$settingStore.themeColor.color">
+      <template #content>
+        <view class="iconfont ucicon-nfc menu-item-icon" @click="nfcClick()"></view>
+        <view class="iconfont ucicon-saoyisao menu-item-icon" @click="scanClick()"></view>
+      </template>
+    </oaMovable>
 
     <!-- 提示信息弹窗 -->
     <uni-popup ref="message" type="message">
@@ -56,14 +59,21 @@
 </template>
 
 <script setup>
-import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
-import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
+import { onReady, onLoad, onShow, onUnload, onNavigationBarButtonTap } from "@dcloudio/uni-app";
+import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef, watch } from "vue";
 import { xunJianStores } from "@/store/modules/index";
-
 import { addSite } from "@/api/business/mhxf/xunJian/collect.js";
+import oaMovable from "@/components/oa-movable/index.vue"; // 引入组件
 
-const xunJianStore = xunJianStores(); //全局变量值Store
 const { proxy } = getCurrentInstance();
+const xunJianStore = xunJianStores(); //全局变量值Store
+
+/**
+ * @NFC
+ */
+function nfcClick() {
+  proxy.$nfc.initNFC();
+}
 
 /**
  * @扫一扫
@@ -73,13 +83,14 @@ const scanArray = ref([]);
 const scanBool = ref(false);
 function scanClick() {
   uni.scanCode({
+    autoZoom: false,
     success: (e) => {
       uni.showToast({
         title: "扫码成功",
         icon: "none",
       });
       uni.navigateTo({
-        url: "/pages/business/mhxf/xunJian/collect/components/collectDetail?siteNubmber=" + e.result,
+        url: `/pages/business/zhaf/xunJian/collect/components/collectDetail?siteNubmber=${e.result}&siteType=${1}`,
       });
     },
     fail: (err) => {
@@ -180,7 +191,7 @@ function swipeChange(e, index) {
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/collect/components/collectRecord",
+      url: "/pages/business/zhaf/xunJian/collect/components/collectRecord",
     });
   } else {
   }
@@ -191,6 +202,19 @@ onLoad((options) => {});
 onShow(() => {
   //调用系统主题颜色
   proxy.$settingStore.systemThemeColor([1]);
+
+  uni.$on("tagid", function (value) {
+    setTimeout(() => {
+      uni.navigateTo({
+        url: `/pages/business/zhaf/xunJian/collect/components/collectDetail?siteNubmber=${value}&siteType=${2}`,
+      });
+      uni.$off("tagid"); //将值删除监听器
+    }, 0);
+  });
+});
+
+onUnload(() => {
+  uni.$off("tagid"); //将值删除监听器
 });
 
 onReady(() => {});

+ 0 - 0
src/pages/business/mhxf/xunJian/components/chart.vue → src/pages/business/zhaf/xunJian/components/chart.vue


+ 0 - 0
src/pages/business/mhxf/xunJian/components/index.vue → src/pages/business/zhaf/xunJian/components/index.vue


+ 17 - 17
src/pages/business/mhxf/xunJian/plan/components/content.vue → src/pages/business/zhaf/xunJian/plan/components/content.vue

@@ -18,7 +18,7 @@
                   checkboxChange(val, index);
                 }
               "
-              :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2"
+              :disabled="xunJianStore.inspectionStatus == 2"
               :activeColor="proxy.$settingStore.themeColor.color"
             >
               <view class="flex" style="width: 100%; flex-wrap: wrap">
@@ -31,40 +31,45 @@
 
             <view v-if="con.remarksBool == true" style="display: flex; height: 32px; line-height: 32px; white-space: nowrap">
               <span>备注:</span>
-              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2" customStyle="height:32px;"></u-input>
+              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.inspectionStatus == 2" customStyle="height:32px;"></u-input>
             </view>
           </view>
           <view class="mt15" v-if="con.submissionMethod == 2">
             <u-radio-group placement="row" v-model="con.contentOptionListValue" :activeColor="proxy.$settingStore.themeColor.color">
               <view class="flex" style="width: 100%; flex-wrap: wrap">
                 <view class="mb15" style="width: 50%" v-for="option in con.contentOptionList" :key="option">
-                  <u-radio :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2" :label="option.optionName" :name="option.id"> </u-radio>
+                  <u-radio :disabled="xunJianStore.inspectionStatus == 2" :label="option.optionName" :name="option.id"> </u-radio>
                 </view>
               </view>
             </u-radio-group>
 
             <view v-if="con.remarksBool == true" style="display: flex; height: 32px; line-height: 32px; white-space: nowrap">
               <span>备注:</span>
-              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2" customStyle="height:32px;"></u-input>
+              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.inspectionStatus == 2" customStyle="height:32px;"></u-input>
             </view>
           </view>
           <view class="mt15" v-if="con.submissionMethod == 3">
             <view class="mb15">
-              <u-textarea v-model="con.contentOptionListValue" placeholder="请输入" maxlength="30" :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2"></u-textarea>
+              <u-textarea v-model="con.contentOptionListValue" placeholder="请输入" maxlength="30" :disabled="xunJianStore.inspectionStatus == 2"></u-textarea>
             </view>
 
             <view v-if="con.remarksBool == true" style="display: flex; height: 32px; line-height: 32px; white-space: nowrap">
               <span>备注:</span>
-              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.contentArray.siteList.inspectionStatus == 2" customStyle="height:32px;"></u-input>
+              <u-input v-model="con.remarks" placeholder="请输入备注" :disabled="xunJianStore.inspectionStatus == 2" customStyle="height:32px;"></u-input>
             </view>
           </view>
         </view>
       </view>
     </view>
-    <view class="app-button-fixed">
-      <u-button class="app-buttom" v-if="xunJianStore.contentArray.siteList.inspectionStatus == 1" type="primary" shape="circle" @click="buttonClick(1)"> 上一步 </u-button>
 
-      <u-button class="app-buttom" v-if="xunJianStore.contentArray.siteList.inspectionStatus == 1" type="primary" shape="circle" @click="buttonClick(2)"> 提交 </u-button>
+    <view style="margin-bottom: 125px" v-if="xunJianStore.inspectionStatus == 1"></view>
+
+    <view class="app-button-fixed" v-if="xunJianStore.inspectionStatus == 1">
+      <view class="app-flex">
+        <u-button class="app-buttom" style="margin-right: 15px" shape="circle" @click="buttonClick(1)"> 上一步 </u-button>
+
+        <u-button class="app-buttom" type="primary" shape="circle" @click="buttonClick(2)"> 提交 </u-button>
+      </view>
     </view>
 
     <u-modal ref="uModal" :show="show" :title="title" :content="content" @confirm="confirm"></u-modal>
@@ -74,7 +79,7 @@
 <script setup>
 import { onLoad, onShow } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
-import { publicStores, xunJianStores } from "@/store/modules/index";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
 
 import { updatePlan } from "@/api/business/mhxf/xunJian/plan.js";
 
@@ -165,6 +170,7 @@ async function buttonClick(type) {
       latitude: xunJianStore.contentArray.siteList.latitude,
       planSonId: xunJianStore.contentArray.siteList.planSonId,
       siteId: xunJianStore.contentArray.siteList.id,
+      remarks: xunJianStore.contentArray.siteList.remarks,
       recordPictureList: xunJianStore.contentArray.siteList.recordPictureList,
       recordOptionList: recordOptionList,
     };
@@ -183,7 +189,7 @@ async function buttonClick(type) {
 onLoad((options) => {
   contentList.value = xunJianStore.contentArray.contentList;
 
-  if (xunJianStore.contentArray.siteList.inspectionStatus == 2) {
+  if (xunJianStore.inspectionStatus == 2) {
     if (contentList.value.length > 0) {
       contentList.value.forEach((el) => {
         el.contentOptionListValue1 = [];
@@ -222,9 +228,3 @@ onShow(() => {
 
 onMounted(() => {});
 </script>
-
-<style lang="scss">
-.xunjian-plan-content {
-  padding-bottom: 125px;
-}
-</style>

+ 133 - 0
src/pages/business/zhaf/xunJian/plan/components/drawer.vue

@@ -0,0 +1,133 @@
+<template>
+  <u-popup class="porup-container" :show="scanBool" @close="close" @open="open" mode="bottom">
+    <template #default>
+      <view class="header-area mb15 mt15">
+        <h4 class="header-area-title">请选择计划</h4>
+        <view class="header-area-content"> 当前地点存在于多个计划,请选择目标计划 </view>
+      </view>
+      <scroll-view class="operate-area pl15 pr15" scroll-y>
+        <view v-for="(scan, index) in scanArray" :key="index">
+          <view class="operate-area-content">
+            <view class="operate-area-content-icon">
+              <img src="@/static/images/xunjian/plan-scan-drawer.png" alt="" />
+            </view>
+            <view class="operate-area-content-title">{{ scan.planName }} </view>
+            <view class="operate-area-content-btn">
+              <u-button type="primary" shape="circle" style="height: 25px; font-size: 13px" @click="reportClick(scan.siteId, scan.id)"> 上报 </u-button>
+            </view>
+          </view>
+
+          <view class="operate-area-divider"></view>
+        </view>
+      </scroll-view>
+    </template>
+  </u-popup>
+</template>
+
+<script setup>
+import { onLoad, onShow } from "@dcloudio/uni-app";
+import { ref, onMounted, inject, shallowRef, watchEffect } from "vue";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
+
+const xunJianStore = xunJianStores(); //全局变量值Store
+
+const props = defineProps({
+  scanArray: {
+    type: Object,
+    default: null,
+  },
+  scanBool: {
+    type: Boolean,
+    default: null,
+  },
+});
+const emit = defineEmits(["scanClose"]);
+
+const scanArray = ref(props.scanArray);
+const scanBool = ref(false);
+
+/**
+ * @巡检上报
+ * @按钮点击事件
+ */
+function reportClick(siteId, planSonId) {
+  xunJianStore.contentArray = {};
+  xunJianStore.siteNubmber = undefined;
+  xunJianStore.siteId = siteId;
+  xunJianStore.planSonId = planSonId;
+
+  uni.navigateTo({
+    url: "/pages/business/zhaf/xunJian/plan/components/siteDetails",
+  });
+}
+
+/**
+ * @开启抽屉时执行
+ */
+function open() {}
+
+/**
+ * @关闭抽屉时执行
+ */
+function close() {
+  scanBool.value = false;
+  emit("scanClose", false);
+}
+
+/**
+ * @监听器
+ */
+watchEffect((fn, options) => {
+  scanBool.value = props.scanBool;
+});
+
+onLoad((options) => {});
+
+onMounted(() => {});
+</script>
+<style lang="scss" scoped>
+.porup-container {
+  .header-area {
+    &-title {
+      font-size: 16px;
+      color: #149eff;
+      text-align: center;
+      margin-bottom: 10px;
+    }
+
+    &-content {
+      font-size: 12px;
+      color: #b7b7b7;
+      text-align: center;
+    }
+  }
+  .operate-area {
+    height: calc(100vh - 30rem);
+    &-content {
+      display: flex;
+      font-size: 15px;
+      height: 50px;
+      line-height: 50px;
+
+      &-icon {
+        margin-right: 15px;
+      }
+
+      &-title {
+        max-width: 200px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+
+      &-btn {
+        margin: auto 0 auto auto;
+      }
+    }
+
+    &-divider {
+      border-bottom: 1px #dad7d7 solid;
+    }
+  }
+}
+</style>

+ 65 - 63
src/pages/business/mhxf/xunJian/plan/components/report.vue → src/pages/business/zhaf/xunJian/plan/components/report.vue

@@ -21,8 +21,6 @@
           >
             {{ cu.inspectionStatus == 1 ? "未巡检" : "已巡检" }}
           </view>
-
-          <!-- "inspectionStatus": 2 //巡检状态(1 未巡检,2 已巡检) -->
         </view>
         <view style="font-size: 13px; color: #a1a1a1; margin-bottom: 5px"> 描述:{{ cu.siteDescribe == "" || cu.siteDescribe == null ? "无" : cu.siteDescribe }} </view>
         <view style="font-size: 13px; color: #a1a1a1">
@@ -52,66 +50,54 @@
         </view>
       </view>
     </view>
-    <view class="app-scan-fixed">
-      <u-image width="67" height="67" src="@/static/images/add.png" shape="circle" @click="scanClick()"></u-image>
-    </view>
+
+    <oaMovable :themesColor="proxy.$settingStore.themeColor.color">
+      <template #content>
+        <view class="iconfont ucicon-nfc menu-item-icon" @click="nfcClick()"></view>
+        <view class="iconfont ucicon-saoyisao menu-item-icon" @click="scanClick()"></view>
+      </template>
+    </oaMovable>
   </scroll-view>
 </template>
 
 <script setup>
-import { onLoad, onShow } from "@dcloudio/uni-app";
+import { onLoad, onShow, onUnload } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
-import { publicStores, xunJianStores } from "@/store/modules/index";
-
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
 import { recordList, recordOption, siteDetails, planSonSiteDetails } from "@/api/business/mhxf/xunJian/plan.js";
-
-const xunJianStore = xunJianStores(); //全局变量值Store
+import oaMovable from "@/components/oa-movable/index.vue"; // 引入组件
 
 const { proxy } = getCurrentInstance();
+const xunJianStore = xunJianStores(); //全局变量值Store
 
 function pulicClick(obj) {
   if (obj.inspectionStatus == 2) {
-    xunJianStore.contentArray = {};
-
-    recordList({
-      siteId: obj.id,
-      planSonId: xunJianStore.planSonId,
-    }).then((res) => {
-      if (res.status == "SUCCESS") {
-        if (res.data.length > 0) {
-          recordOption({
-            siteId: res.data[0].siteId,
-            recordId: res.data[0].id,
-          }).then((res1) => {
-            res.data[0].inspectionStatus = 2;
-            res.data[0].pictureUrl = obj.pictureUrl;
-
-            xunJianStore.contentArray = {
-              contentList: [res1.data.contentList],
-              siteList: res.data[0],
-            };
-            xunJianStore.siteId = "";
-            xunJianStore.siteNubmber = "";
-
-            uni.navigateTo({
-              url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
-            });
-          });
-        }
-      } else {
-      }
+    xunJianStore.inspectionStatus = 2;
+    xunJianStore.siteId = obj.id;
+
+    uni.navigateTo({
+      url: "/pages/business/zhaf/xunJian/plan/components/siteDetails",
     });
   } else {
-    xunJianStore.contentArray = {};
+    xunJianStore.inspectionStatus = 1;
     xunJianStore.siteId = obj.id;
     xunJianStore.siteNubmber = "";
 
-    uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
-    });
+    if (obj.siteType == 1) {
+      scanClick();
+    } else if (obj.siteType == 2) {
+      nfcClick();
+    }
   }
 }
 
+/**
+ * @NFC
+ */
+function nfcClick() {
+  proxy.$nfc.initNFC();
+}
+
 /**
  * @扫一扫
  * @点击事件
@@ -120,32 +106,14 @@ const scanArray = ref([]);
 const scanBool = ref(false);
 async function scanClick() {
   uni.scanCode({
+    autoZoom: false,
     success: async (e) => {
       uni.showToast({
         title: "扫码成功",
         icon: "none",
       });
 
-      xunJianStore.contentArray = {};
-      xunJianStore.siteId = "";
-      xunJianStore.siteNubmber = e.result;
-
-      siteDetails({
-        siteId: xunJianStore.siteId,
-        siteNubmber: xunJianStore.siteNubmber,
-        planSonId: xunJianStore.planSonId,
-      }).then((res) => {
-        if (res.status == "SUCCESS") {
-          currentDateList.value.forEach((e) => {
-            if (e.id == res.data.siteList[0].id) {
-              uni.navigateTo({
-                url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
-              });
-            }
-          });
-        } else {
-        }
-      });
+      siteDetailsApi(e.result);
     },
     fail: (err) => {
       uni.showToast({
@@ -160,6 +128,33 @@ async function scanClick() {
   });
 }
 
+/**
+ * @点位详情查询
+ * @接口请求
+ */
+function siteDetailsApi(value) {
+  xunJianStore.contentArray = {};
+  xunJianStore.siteId = "";
+  xunJianStore.siteNubmber = value;
+
+  siteDetails({
+    siteId: xunJianStore.siteId,
+    siteNubmber: xunJianStore.siteNubmber,
+    planSonId: xunJianStore.planSonId,
+  }).then((res) => {
+    if (res.status == "SUCCESS") {
+      currentDateList.value.forEach((res1) => {
+        if (res1.id == res.data.siteList[0].id) {
+          uni.navigateTo({
+            url: "/pages/business/zhaf/xunJian/plan/components/siteDetails",
+          });
+        }
+      });
+    } else {
+    }
+  });
+}
+
 /**
  * @地点列表
  * @api接口请求
@@ -189,6 +184,13 @@ onLoad((options) => {
 onShow(() => {
   //调用系统主题颜色
   proxy.$settingStore.systemThemeColor([1]);
+  uni.$on("tagid", function (value) {
+    siteDetailsApi(value);
+  });
+});
+
+onUnload(() => {
+  uni.$off("tagid"); //将值删除监听器
 });
 
 onMounted(() => {});

+ 29 - 13
src/pages/business/mhxf/xunJian/plan/components/siteDetails.vue → src/pages/business/zhaf/xunJian/plan/components/siteDetails.vue

@@ -23,11 +23,12 @@
         <oa-upload
           :uploadCount="9"
           :uploadList="siteList.recordPictureList"
+          :uploadListSrc="'pictureUrl'"
           :uploadStyle="{
             width: 'calc(33% - 10px)',
             height: '110px',
           }"
-          :uploadCloseStatus="siteList.inspectionStatus == 2"
+          :uploadCloseStatus="xunJianStore.inspectionStatus == 2"
           @uploadSuccessChange="uploadSuccessChange"
           @uploadDeleteChange="uploadDeleteChange"
         ></oa-upload>
@@ -37,24 +38,24 @@
         <uni-section class="block mb10" title="备注" type="line"></uni-section>
 
         <view style="height: calc(100% - 25px)">
-          <span v-if="siteList.inspectionStatus == 2">
+          <span v-if="xunJianStore.inspectionStatus == 2">
             {{ siteList.remarks }}
           </span>
 
-          <u-textarea v-if="siteList.inspectionStatus == 1" style="height: 100%" v-model="siteList.remarks" placeholder="请输入备注" maxlength="50"></u-textarea>
+          <u-textarea v-if="xunJianStore.inspectionStatus == 1" style="height: 100%" v-model="siteList.remarks" placeholder="请输入备注" maxlength="50"></u-textarea>
         </view>
       </view>
 
       <view class="bg-white p15 mb15">
-        <uni-section class="block mb10" title="消防设施分布图" type="line"></uni-section>
+        <uni-section class="block mb10" title="点位分布" type="line"></uni-section>
 
         <u-image width="100%" :src="siteList.pictureUrl"></u-image>
       </view>
     </view>
     <view class="app-button-fixed">
-      <u-button v-if="siteList.inspectionStatus == 1" class="app-buttom" type="primary" @click="buttonClick()" shape="circle"> 下一步 </u-button>
+      <u-button v-if="xunJianStore.inspectionStatus == 1" class="app-buttom" type="primary" @click="buttonClick()" shape="circle"> 下一步 </u-button>
 
-      <u-button v-if="siteList.inspectionStatus == 2" class="app-buttom" type="primary" @click="buttonClick()" shape="circle"> 查看巡检项 </u-button>
+      <u-button v-if="xunJianStore.inspectionStatus == 2" class="app-buttom" type="primary" @click="buttonClick()" shape="circle"> 查看巡检项 </u-button>
     </view>
   </scroll-view>
 </template>
@@ -62,9 +63,9 @@
 <script setup>
 import { onLoad, onShow } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
-import { publicStores, xunJianStores } from "@/store/modules/index";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
 
-import { siteDetails } from "@/api/business/mhxf/xunJian/plan.js";
+import { recordList, recordOption, siteDetails } from "@/api/business/mhxf/xunJian/plan.js";
 
 const xunJianStore = xunJianStores(); //全局变量值Store
 
@@ -110,7 +111,7 @@ function buttonClick() {
     siteList: siteList.value,
   };
   uni.navigateTo({
-    url: "/pages/business/mhxf/xunJian/plan/components/content",
+    url: "/pages/business/zhaf/xunJian/plan/components/content",
   });
 }
 
@@ -133,11 +134,26 @@ function uploadDeleteChange(e) {
 }
 
 onLoad((options) => {
-  if (JSON.stringify(xunJianStore.contentArray) == "{}") {
+  if (xunJianStore.inspectionStatus == 1) {
     selectAPI();
-  } else {
-    contentList.value = xunJianStore.contentArray.contentList[0];
-    siteList.value = xunJianStore.contentArray.siteList;
+  } else if (xunJianStore.inspectionStatus == 2) {
+    recordList({
+      siteId: xunJianStore.siteId,
+      planSonId: xunJianStore.planSonId,
+    }).then((res) => {
+      if (res.status == "SUCCESS") {
+        if (res.data.length > 0) {
+          recordOption({
+            siteId: res.data[0].siteId,
+            recordId: res.data[0].id,
+          }).then((res1) => {
+            contentList.value = res1.data.contentList;
+            siteList.value = res.data[0];
+          });
+        }
+      } else {
+      }
+    });
   }
 });
 

+ 74 - 62
src/pages/business/mhxf/xunJian/plan/index.vue → src/pages/business/zhaf/xunJian/plan/index.vue

@@ -93,24 +93,26 @@
       <view id="planTimeline" style="text-align: center; color: #bdbdbd; font-size: 14px" v-else> 暂无数据 </view>
     </view>
 
-    <view class="app-scan-fixed">
-      <u-image width="67" height="67" src="@/static/images/add.png" shape="circle" @click="scanClick()"></u-image>
-    </view>
+    <oaMovable v-if="scanArray.length <= 0" :themesColor="proxy.$settingStore.themeColor.color">
+      <template #content>
+        <view class="iconfont ucicon-nfc menu-item-icon" @click="nfcClick()"></view>
+        <view class="iconfont ucicon-saoyisao menu-item-icon" @click="scanClick()"></view>
+      </template>
+    </oaMovable>
 
     <drawer v-if="scanArray.length > 0" :scanArray="scanArray" :scanBool="scanBool" @scanClose="scanClose"></drawer>
   </scroll-view>
 </template>
 
 <script setup>
-import drawer from "./components/drawer.vue";
-
-import { onLoad, onShow, onLaunch } from "@dcloudio/uni-app";
-import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
-import { publicStores, xunJianStores } from "@/store/modules/index";
-
+import { onLoad, onShow, onLaunch, onUnload } from "@dcloudio/uni-app";
+import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef, defineAsyncComponent } from "vue";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
 import { recordList, recordOption, planList, patrolInspectionPlan, appPlanStatistics } from "@/api/business/mhxf/xunJian/plan.js";
+import drawer from "./components/drawer.vue"; // 引入组件
+import oaMovable from "@/components/oa-movable/index.vue"; // 引入组件
 
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 const xunJianStore = xunJianStores(); //全局变量值Store
 
 const { proxy } = getCurrentInstance();
@@ -144,43 +146,31 @@ function monthSwitch(e) {
  * @点击事件
  */
 function reportClick(obj) {
+  xunJianStore.inspectionStatus = null;
+
   if (tabPosition.value == 0) {
     xunJianStore.planSonId = obj.id;
     uni.navigateTo({
-      url: "/pages/business/mhxf/xunJian/plan/components/report",
+      url: "/pages/business/zhaf/xunJian/plan/components/report",
     });
   } else if (tabPosition.value == 1) {
-    recordList({
-      siteId: obj.id,
-      planSonId: obj.planSonId,
-    }).then((res) => {
-      if (res.status == "SUCCESS") {
-        if (res.data.length > 0) {
-          recordOption({
-            siteId: res.data[0].siteId,
-            recordId: res.data[0].id,
-          }).then((res1) => {
-            res.data[0].inspectionStatus = 2;
-            res.data[0].pictureUrl = obj.pictureUrl;
-
-            xunJianStore.contentArray = {
-              contentList: [res1.data.contentList],
-              siteList: res.data[0],
-            };
-            xunJianStore.siteId = undefined;
-            xunJianStore.siteNubmber = undefined;
-
-            uni.navigateTo({
-              url: "/pages/business/mhxf/xunJian/plan/components/siteDetails",
-            });
-          });
-        }
-      } else {
-      }
+    xunJianStore.siteId = obj.siteId;
+    xunJianStore.planSonId = obj.planSonId;
+    xunJianStore.inspectionStatus = 2;
+
+    uni.navigateTo({
+      url: "/pages/business/zhaf/xunJian/plan/components/siteDetails",
     });
   }
 }
 
+/**
+ * @NFC
+ */
+function nfcClick() {
+  proxy.$nfc.initNFC();
+}
+
 /**
  * @扫一扫
  * @点击事件
@@ -189,29 +179,13 @@ const scanArray = ref([]);
 const scanBool = ref(false);
 function scanClick() {
   uni.scanCode({
+    autoZoom: false,
     success: async (e) => {
       uni.showToast({
         title: "扫码成功",
         icon: "none",
       });
-      xunJianStore.inspectionStatus = 1;
-
-      planList({
-        siteNubmber: e.result,
-      }).then((res) => {
-        if (res.status == "SUCCESS") {
-          if (res.data.length > 0) {
-            scanArray.value = res.data;
-            scanBool.value = true;
-          } else {
-            uni.showToast({
-              title: "此点位下暂无数据,请切换点位重试!",
-              icon: "none",
-            });
-          }
-        } else {
-        }
-      });
+      planListApi(e.result);
     },
     fail: (err) => {
       uni.showToast({
@@ -221,21 +195,43 @@ function scanClick() {
       console.log("扫码失败", err);
     },
     complete: () => {
-      // uni.showToast({
-      //   title: "扫码结束",
-      //   icon: "none",
-      // });
       console.log("扫码结束");
     },
   });
 }
 
+/**
+ * @点位查询
+ * @接口查询
+ */
+function planListApi(value) {
+  xunJianStore.inspectionStatus = 1;
+
+  planList({
+    siteNubmber: value,
+  }).then((res) => {
+    if (res.status == "SUCCESS") {
+      if (res.data.length > 0) {
+        scanArray.value = res.data;
+        scanBool.value = true;
+      } else {
+        uni.showToast({
+          title: "此点位下暂无数据,请切换点位重试!",
+          icon: "none",
+        });
+      }
+    } else {
+    }
+  });
+}
+
 /**
  * @抽屉emit
  * @关闭事件
  */
 function scanClose(flag) {
   scanBool.value = flag;
+  scanArray.value = [];
 }
 
 /**
@@ -277,10 +273,12 @@ function activitiesApi() {
       if (res.status == "SUCCESS") {
         res.data.forEach((el) => {
           activities.value.push({
+            siteId: el.siteId,
+            planSonId: el.planSonId,
             areaName: el.areaName,
             siteName: el.siteName,
             contentCount: el.contentCount,
-            createTime: el.createTime.replace("T", " "),
+            createTime: el.createTime ? el.createTime.replace("T", " ") : el.createTime,
             siteStatus: el.siteStatus,
           });
         });
@@ -294,7 +292,7 @@ function activitiesApi() {
  * @统计
  * @api接口请求
  */
-const currentDate = ref(publicStore.getDate().year + "-" + publicStore.getDate().month + "-" + publicStore.getDate().dates); //统计时间数据存储
+const currentDate = ref(commonStore.getDate().year + "-" + commonStore.getDate().month + "-" + commonStore.getDate().dates); //统计时间数据存储
 const currentDatevalue = ref(new Date());
 const currentDateList = ref({}); //统计list数据存储
 function currentApi() {
@@ -328,11 +326,17 @@ function tabPositionChange(index) {
 }
 
 onLoad((options) => {
+  if (options.planTabs) {
+    xunJianStore.planTabs = parseInt(options.planTabs);
+    tabPosition.value = parseInt(options.planTabs);
+  }
+
   currentApi();
   activitiesApi();
 
   // 从详情页返回该页面的获取数据
   uni.$on("planSelect", () => {
+    scanArray.value = [];
     currentApi();
     activitiesApi();
   });
@@ -341,6 +345,14 @@ onLoad((options) => {
 onShow(() => {
   //调用系统主题颜色
   proxy.$settingStore.systemThemeColor([1]);
+
+  uni.$on("tagid", function (value) {
+    planListApi(value);
+  });
+});
+
+onUnload(() => {
+  uni.$off("tagid"); //将值删除监听器
 });
 
 onMounted(() => {});

+ 1 - 1
src/pages/business/mhxf/xunJian/record/index.vue → src/pages/business/zhaf/xunJian/record/index.vue

@@ -51,7 +51,7 @@ function goRecordList(params = {}) {
 
 function goDetail(item) {
   uni.navigateTo({
-    url: "/pages/business/mhxf/xunJian/record/recordDetail/index?id=" + item.id,
+    url: "/pages/business/zhaf/xunJian/record/recordDetail/index?id=" + item.id,
   });
 }
 

+ 1 - 4
src/pages/business/mhxf/xunJian/record/recordDetail/index.vue → src/pages/business/zhaf/xunJian/record/recordDetail/index.vue

@@ -74,9 +74,6 @@
         <view class="padding-lr padding-bottom-lg imgPic">
           <image v-if="!getData.report_photos && dataRes == 1" mode="widthFix" src="@/static/images/defaultImg.jpg" width="100%" />
           <image v-else mode="widthFix" :src="`${websiteUrl}${getData.report_photos}`" width="100%" />
-
-          <!-- <image class="image-bg"  v-if="!getData.report_photos&&dataRes==1"  src="@/static/images/defaultImg.jpg"/>
-						<image  class="image-bg" v-else :src="getData.report_photos" /> -->
         </view>
       </view>
       <!-- 处理状态end -->
@@ -87,7 +84,7 @@
 <script setup>
 import { onLoad, onShow, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, reactive, computed, getCurrentInstance, toRefs, inject, shallowRef } from "vue";
-import { publicStores, xunJianStores } from "@/store/modules/index";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
 
 import { getInspectionRecordDetails } from "@/api/business/mhxf/xunJian/record.js";
 

+ 3 - 3
src/pages/business/mhxf/xunJian/xunJian.vue → src/pages/business/zhaf/xunJian/xunJian.vue

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

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

@@ -98,7 +98,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { getBuildingManagement } from "@/api/business/zhxf/building/index.js";
 

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

@@ -49,7 +49,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onReachBottom, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, watchEffect, getCurrentInstance, watch } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { del, index } from "@/api/business/zhxf/funReport/index.js";
 

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

@@ -65,7 +65,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onReachBottom, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, watchEffect, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { del, index } from "@/api/business/zhxf/funReport/index.js";
 

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

@@ -20,7 +20,7 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { setperm } from "@/api/business/zhxf/messagePush/index.js";
 

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

@@ -42,7 +42,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { infoList } from "@/api/common/message.js";
 import { baseAlarmList, getTypePage } from "@/api/business/fireIot/alarmManage.js";

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

@@ -34,7 +34,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { infoList } from "@/api/common/message.js";
 

+ 0 - 13
src/pages/common/authority/index.vue

@@ -1,13 +0,0 @@
-<template>
-  <view style="text-align: center; padding-top: 100rpx">
-    <image src="@/static/images/index/chart3-2.png" style="width: 100rpx; height: 100rpx"></image>
-    <br />
-    <br />
-    <view>该用户权限尚未开通,请联系管理员!</view>
-  </view>
-</template>
-
-<script setup>
-</script>
-
-<style></style>

+ 5 - 5
src/pages/common/customManage/index.vue

@@ -37,10 +37,10 @@
 
       <view class="content-area menu-list mlr0" v-for="data in dataList" :key="data">
         <view class="list-cell" style="color: #666666; line-height: 30px">
-          <view class="content-area-top menu-item-box">
+          <view class="content-area-top menu-item">
             <view> {{ data.projectName }} </view>
           </view>
-          <view class="content-area-row_wrap menu-item-box">
+          <view class="content-area-row_wrap menu-item">
             <view class="content-area-row_wrap-view"> 项目编号:{{ data.projectId }} </view>
             <view class="content-area-row_wrap-view"> 到期时间:{{ data.expireTime ? data.expireTime.split("T")[0] : "" }} </view>
             <view class="content-area-row_wrap-view"> 客户负责人:{{ data.customPerson }} </view>
@@ -49,8 +49,8 @@
             </view>
             <view class="content-area-row_wrap-view">
               <view style="margin-right: 5px">客户电话:{{ data.phone }}</view>
-              <view class="iconfont ucicon-a-copy menu-icon" @click="copy(data.phone)"> </view>
-              <view class="iconfont ucicon-dial menu-icon" @click="proxy.$common.makePhoneCall(data.phone)"> </view>
+              <view class="iconfont ucicon-a-copy menu-item-icon" @click="copy(data.phone)"> </view>
+              <view class="iconfont ucicon-dial menu-item-icon" @click="proxy.$common.makePhoneCall(data.phone)"> </view>
             </view>
             <view class="content-area-row_wrap-view">
               <view>状态:</view>
@@ -68,7 +68,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { crmCustomInfo } from "@/api/common/customManage.js";
 

+ 7 - 7
src/pages/common/evaluate/index.vue

@@ -11,7 +11,7 @@
   >
     <view class="menu-list">
       <view class="list-cell">
-        <view class="menu-item-box">
+        <view class="menu-item">
           <view style="font-size: 14px; font-weight: 600"> 为了更好提升我们的服务,请您对我们的服务人员进行评价、留下您宝贵的意见,我们将会不断完善我们的服务。 </view>
         </view>
       </view>
@@ -19,10 +19,10 @@
 
     <view class="menu-list">
       <view class="list-cell">
-        <view class="menu-item-box mb15">
+        <view class="menu-item mb15">
           <view style="font-size: 14px; font-weight: 600"> 总体满意度 </view>
         </view>
-        <view class="menu-item-box">
+        <view class="menu-item">
           <u-rate :count="rateCount" v-model="rateValue" :size="24" :gutter="0" :minCount="0" :touchable="true" :allowHalf="true" :activeColor="proxy.$settingStore.themeColor.color"></u-rate>
           <view style="font-size: 14px; margin: auto 0 auto auto">我的评分: {{ rateValue }}分</view>
         </view>
@@ -31,10 +31,10 @@
 
     <view class="menu-list">
       <view class="list-cell">
-        <view class="menu-item-box mb15">
+        <view class="menu-item mb15">
           <view style="font-size: 14px; font-weight: 600"> 建议或意见 </view>
         </view>
-        <view class="menu-item-box">
+        <view class="menu-item">
           <u--textarea v-model="textareaValue" border="none" placeholder="请留下您的宝贵意见,这对我们很重要哦~" maxlength="100" style="padding: 0"></u--textarea>
         </view>
       </view>
@@ -54,12 +54,12 @@ import config from "@/config";
 import storage from "@/utils/storage";
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { score } from "@/api/common/index.js";
 
 const { proxy } = getCurrentInstance();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const data = reactive({
   rateCount: 5,

+ 24 - 22
src/pages/common/invoicing/index.vue

@@ -19,7 +19,7 @@
 
       <view class="menu-list" style="font-size: 15px; line-height: 30px">
         <view class="list-cell">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view>
               您的物联网服务
               <span style="color: red">即将到期</span>
@@ -28,22 +28,22 @@
           </view>
         </view>
         <view class="list-cell" style="color: #666666">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view> 客户经理:李鹏 </view>
           </view>
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view> 联系方式:18621761642(同微信) </view>
-            <view class="iconfont ucicon-a-copy menu-icon" style="font-size: 14px; color: #909399" @click="copy('18621761642')"> </view>
+            <view class="iconfont ucicon-a-copy menu-item-icon" style="font-size: 14px; color: #909399" @click="copy('18621761642')"> </view>
           </view>
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view style="margin-right: 10px"> 邮箱:seven.li@chinausky.com </view>
-            <view class="iconfont ucicon-a-copy menu-icon" style="font-size: 14px; color: #909399" @click="copy('seven.li@chinausky.com')"> </view>
+            <view class="iconfont ucicon-a-copy menu-item-icon" style="font-size: 14px; color: #909399" @click="copy('seven.li@chinausky.com')"> </view>
           </view>
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view> 客服电话:021-65376655</view>
-            <view class="iconfont ucicon-dial menu-icon" style="font-size: 14px; color: #909399; margin-left: 5px" @click="proxy.$common.makePhoneCall('02165376655')"> </view>
+            <view class="iconfont ucicon-dial menu-item-icon" style="font-size: 14px; color: #909399; margin-left: 5px" @click="proxy.$common.makePhoneCall('02165376655')"> </view>
           </view>
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view> 公司邮箱:admin@chinausky.com</view>
           </view>
         </view>
@@ -51,7 +51,7 @@
 
       <view class="menu-list" style="font-size: 15px">
         <view class="list-cell" style="color: #666666">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view>开票信息</view>
           </view>
 
@@ -99,7 +99,7 @@
                     <u-input placeholder="点击上传" border="none" maxlength="10" disabledColor="transparent" disabled>
                       <template #prefix>
                         <view
-                          class="iconfont ucicon-a-shangchuan menu-icon"
+                          class="iconfont ucicon-a-shangchuan menu-item-icon"
                           :style="{
                             fontSize: '14px',
                             color: proxy.$settingStore.themeColor.color,
@@ -129,35 +129,35 @@
     <view v-show="tabsCurrent == 1">
       <view class="menu-list mt0 mlr0" style="padding: 0.625rem">
         <view class="list-cell">
-          <view class="menu-item-box" style="justify-content: center; margin-bottom: 15px; font-size: 15px">
+          <view class="menu-item" style="justify-content: center; margin-bottom: 15px; font-size: 15px">
             <view>对公转账</view>
           </view>
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view style="width: 90px">企业全称</view>
             <view style="color: #666666">上海永天科技股份有限公司</view>
           </view>
         </view>
         <view class="list-cell">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view style="width: 90px">银行账户</view>
             <view style="color: #666666">16523652265865685</view>
           </view>
         </view>
         <view class="list-cell">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view style="width: 90px">开户行</view>
             <view style="color: #666666">上海银行徐家汇支行</view>
           </view>
         </view>
         <view class="list-cell">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view style="width: 90px">转账备注</view>
             <view style="color: #666666">打款时请备注付款公司名称等信息</view>
           </view>
         </view>
 
         <view class="list-cell">
-          <view class="menu-item-box" style="justify-content: center">
+          <view class="menu-item" style="justify-content: center">
             <u-button style="width: auto" @click="copy(`上海永天科技股份有限公司\n16523652265865685\n上海银行徐家汇支行`)" shape="circle"> 复制汇款信息 </u-button>
           </view>
         </view>
@@ -171,12 +171,12 @@ import config from "@/config";
 import storage from "@/utils/storage";
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { crmInvoiceInfo, page } from "@/api/common/invoicing.js";
 
 const { proxy } = getCurrentInstance();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const uForm = ref(null);
 const data = reactive({
@@ -308,15 +308,17 @@ function handleSubmit(value) {
     .validate()
     .then((res) => {
       uni.$u.toast("校验通过");
-
+      proxy.$modal.loading("加载中");
       page({
         current: 1,
         size: 10,
         invoiceTitle: form.value.invoiceTitle,
-        startTime: publicStore.getYearLast(new Date()),
-        endTime: publicStore.formatterDateTime(new Date()),
+        startTime: commonStore.getYearLast(new Date()),
+        endTime: commonStore.formatterDateTime(new Date()),
       }).then((requset) => {
         if (requset.status === "SUCCESS") {
+          proxy.$modal.closeLoading();
+
           if (requset.data.records.length > 0) {
             promptStatus.value = true;
             scrollIntoView.value = "noticeBar";

+ 53 - 0
src/pages/common/nfc/index.vue

@@ -0,0 +1,53 @@
+<template>
+  <view class="nfc-container">
+    <view class="nfc-container-image">
+      <image class="nfc-gif" src="@/static/images/common/nfc-flash.gif" mode="aspectFit" style="width: 230px"></image>
+    </view>
+    <view class="nfc-container-text">{{ commonStore.nfcWaiting }}</view>
+  </view>
+</template>
+
+<script setup>
+import config from "@/config";
+import storage from "@/utils/storage";
+import { onLoad, onShow, onReady, onHide, onLaunch, onUnload, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject, watch } from "vue";
+import { useStores, commonStores, xunJianStores } from "@/store/modules/index";
+
+const { proxy } = getCurrentInstance();
+const commonStore = commonStores();
+
+const data = reactive({});
+const {} = toRefs(data);
+
+onLoad((options) => {
+  // 开启nfc监听
+  proxy.$nfc.readNFC();
+});
+
+onUnload(() => {
+  proxy.$nfc.closeNFC();
+});
+
+onReady(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+</script>
+
+<style lang="scss" scoped>
+.nfc-container {
+  &-image {
+    display: flex;
+    width: 100%;
+    justify-content: center;
+    margin: 55% auto 40px auto;
+  }
+  &-text {
+    text-align: center;
+    font-size: 16px;
+  }
+}
+</style>

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

@@ -10,7 +10,7 @@
       </view>
 
       <view class="content-area-center">
-        <u-input v-model="phone" prefixIcon="phone" placeholder="请输入手机号" />
+        <u-input v-model="phone" prefixIcon="phone" placeholder="请输入手机号" :maxlength="11" />
 
         <u-input v-model="verify" prefixIcon="email" placeholder="请输入验证码" :maxlength="6">
           <template #suffix>
@@ -27,7 +27,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll, onBackPress, onUnload } from "@dcloudio/uni-app";
 import { reactive, getCurrentInstance, toRefs, inject } from "vue";
-import { useStores, publicStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 const useStore = useStores();
 const { proxy } = getCurrentInstance();

+ 5 - 3
src/pages/common/repairReport/index.vue

@@ -11,7 +11,7 @@
   >
     <view class="menu-list margin-0">
       <view class="list-cell">
-        <view class="menu-item-box" style="font-size: 15px">
+        <view class="menu-item" style="font-size: 15px">
           <view style="margin-right: auto; color: #666666"></view>
           <view style="color: #149eff" @click="proxy.$tab.navigateTo(`/pages/common/repairReport/record`)">报修历史</view>
         </view>
@@ -75,12 +75,12 @@ import config from "@/config";
 import storage from "@/utils/storage";
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { add, getAddHistoryInfo } from "@/api/common/repairReport.js";
 
 const { proxy } = getCurrentInstance();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const uForm = ref(null);
 const data = reactive({
@@ -180,8 +180,10 @@ function handleSubmit(value) {
     .validate()
     .then((res) => {
       uni.$u.toast("校验通过");
+      proxy.$modal.loading("加载中");
       add(form.value).then((requset) => {
         if (requset.status === "SUCCESS") {
+          proxy.$modal.closeLoading();
           proxy.$tab.navigateTo(`/pages/common/success/index?codeName=提交成功`);
           form.value = {
             projectName: "", //项目名称

+ 4 - 4
src/pages/common/repairReport/record.vue

@@ -16,14 +16,14 @@
     <template #default>
       <view class="menu-list m0">
         <view class="list-cell" style="color: #666666; line-height: 25px" v-for="(base, index) in dataList" :key="index">
-          <view class="content-area-top menu-item-box">
+          <view class="content-area-top menu-item">
             <view class="content-area-top-time">
               {{ base.repairStatus == 1 ? (base.createTime ? base.createTime.replace("T", " ") : "") : base.handleTime ? base.handleTime.replace("T", " ") : "" }}
             </view>
             <view class="content-area-top-status" v-if="base.repairStatus == 1" style="background-color: #23dedc"> 受理中 </view>
             <view class="content-area-top-status" v-if="base.repairStatus == 2" style="background-color: #12c100"> 处理完成 </view>
           </view>
-          <view class="content-area-row_wrap menu-item-box">
+          <view class="content-area-row_wrap menu-item">
             <view class="content-area-row_wrap-view"> 项目名称:{{ base.projectName }} </view>
             <view class="content-area-row_wrap-view"> 报修人:{{ base.reflectName }} </view>
             <view class="content-area-row_wrap-view"> 报修人电话:{{ base.reflectPhone }} </view>
@@ -40,13 +40,13 @@
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll, onBackPress, onUnload } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
 import { getToken, setToken, removeToken } from "@/utils/auth";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { getHistory } from "@/api/common/repairReport.js";
 
 const { proxy } = getCurrentInstance();
 const useStore = useStores();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const dataList = ref([]);
 const dataStatus = ref(false);

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

@@ -17,7 +17,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll, onBackPress, onUnload } from "@dcloudio/uni-app";
 import { reactive, getCurrentInstance, toRefs, inject } from "vue";
-import { useStores, publicStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 const useStore = useStores();
 const { proxy } = getCurrentInstance();

+ 3 - 3
src/pages/common/success/index.vue

@@ -2,7 +2,7 @@
   <view id="success-container" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
     <view>
       <view style="display: flex">
-        <image style="width: 120px; height: 120px; margin: 50px auto 20px auto" src="@/static/images/unitInfoCollection/success.png" />
+        <image style="width: 120px; height: 120px; margin: 50px auto 20px auto" src="@/static/images/common/success.png" />
       </view>
       <view style="text-align: center; font-weight: 600">{{ codeName }}</view>
     </view>
@@ -17,10 +17,10 @@
 import config from "@/config";
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 import { getToken, setToken, removeToken } from "@/utils/auth";
 
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const { proxy } = getCurrentInstance();
 const showNow = ref(true);

+ 0 - 103
src/pages/common/test/index.vue

@@ -1,103 +0,0 @@
-<template>
-  <view>
-    <view @tap="goCamera()" class="cameraButton"> 拍照按钮 </view>
-
-    <view class="uni-list list-pd">
-      <view class="uni-uploader__files">
-        <view v-for="(image, index) in imageList" :key="index" class="abc">
-          <view class="uni-uploader__file" style="inline-block">
-            <view class="delete" :style="{ 'z-index': 99 }" @tap="onDeleteClick(index)">x</view>
-            <view class="images-one">
-              <image class="uni-uploader__img image-bg" :src="image" :data-src="image" @tap="previewImage"></image>
-            </view>
-          </view>
-        </view>
-        <view class="uni-uploader__input-box" v-show="imageList.length > 0">
-          <view class="uni-uploader__input" @tap="onGetImgClick"></view>
-        </view>
-      </view>
-    </view>
-  </view>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      imageList: [],
-    };
-  },
-  mounted() {},
-
-  //拍照
-  methods: {
-    // 删除图片
-    onDeleteClick(index) {
-      this.imageList.splice(index, 1);
-    },
-    // previewImage() {
-    // 	// 预览功能,相关博客有
-    // },
-
-    goCamera() {
-      const that = this;
-      uni.chooseImage({
-        count: 2, // 最多可以选择的图片张数,默认9
-        sizeType: ["original", "compressed"], //original 原图,compressed 压缩图,默认二者都有
-        sourceType: ["camera"], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
-        success: function (res) {
-          var tempFilePaths = res.tempFilePaths[0];
-          alert(tempFilePaths);
-          const len = that.imageList.length;
-          if (len >= 2) {
-            uni.showToast({
-              title: "图片最多上传2张",
-            });
-          } else {
-            for (let i = 0; i < 2 - len; i++) {
-              if (res.tempFilePaths[i]) that.imageList.push(res.tempFilePaths[i]);
-            }
-          }
-        },
-      });
-    },
-  },
-};
-</script>
-
-<style>
-.cameraButton {
-  border: 1px solid red;
-  display: inline-block;
-  border-radius: 10rpx;
-  padding: 10rpx;
-}
-
-.images-one {
-  white-space: nowrap;
-  position: relative;
-  width: 150rpx;
-  height: 150rpx;
-  background-size: cover;
-  background-position: center;
-  vertical-align: middle;
-  font-size: 1.5em;
-  display: inline-block;
-  margin-right: 20rpx;
-}
-
-.image-bg {
-  position: absolute;
-  z-index: -1;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  right: 0;
-  width: 100%;
-  height: 100%;
-}
-
-.abc {
-  display: inline-block;
-}
-</style>

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

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

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

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

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

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

+ 6 - 5
src/pages/index.vue

@@ -83,7 +83,7 @@
               <!-- <view class="cu-tag badge" v-if="item.badge != 0">
                 <block v-if="item.badge != 0">{{ item.badge > 99 ? "99+" : item.badge }}</block>
               </view> -->
-              <text style="font-size: 12px">{{ item.meta.title }}</text>
+              <text style="font-size: 12px">{{ item.meta.aliasTitle ? item.meta.aliasTitle : item.meta.title }}</text>
             </view>
           </view>
         </view>
@@ -97,7 +97,7 @@
               <!-- <view class="cu-tag badge" v-if="item.badge != 0">
                 <block v-if="item.badge != 0">{{ item.badge > 99 ? "99+" : item.badge }}</block>
               </view> -->
-              <text style="font-size: 12px">{{ item.meta.title }}</text>
+              <text style="font-size: 12px">{{ item.meta.aliasTitle ? item.meta.aliasTitle : item.meta.title }}</text>
             </view>
           </view>
         </view>
@@ -112,14 +112,14 @@
 import { onReady, onLoad, onShow, onNavigationBarButtonTap, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, getCurrentInstance, toRefs } from "vue";
 import { getToken } from "@/utils/auth";
-import { useStores, publicStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { scan_push, getHomePageData, getFunctionalModuleStatistics, getAppRouters, qrCodeSend, getMobileBanner } from "@/api/index";
 import searchSelect from "@/components/searchSelect/searchSelect.vue";
 import * as jwx from "@/utils/jssdk.js"; //引入js sdk的封装
 
 const useStore = useStores();
-const publicStore = publicStores(); //全局公共Store
+const commonStore = commonStores(); //全局公共Store
 const { proxy } = getCurrentInstance();
 
 const arrayList = reactive({
@@ -224,6 +224,7 @@ function scanCode() {
 
   //#ifdef APP-PLUS
   uni.scanCode({
+    autoZoom: false,
     scanType: ["qrCode"],
     success: (res) => {
       let list = JSON.parse(res.result);
@@ -294,7 +295,7 @@ function navItemClick(item) {
         el.sort++;
       }
     });
-    recentlyUsed.value = publicStore.sortEvent(recentlyUsed.value, 1);
+    recentlyUsed.value = commonStore.sortEvent(recentlyUsed.value, 1);
 
     uni.setStorageSync(useStore.$state.nickName + useStore.$state.tenantId, recentlyUsed.value);
 

+ 4 - 4
src/pages/login.vue

@@ -18,7 +18,7 @@
       </view>
 
       <view class="middle-input" v-if="switchText == '账号密码登录'">
-        <u-input v-model="phone" prefixIcon="phone" placeholder="请输入手机号" />
+        <u-input v-model="phone" prefixIcon="phone" placeholder="请输入手机号" :maxlength="11" />
 
         <u-input v-model="verify" prefixIcon="email" placeholder="请输入验证码" :maxlength="6">
           <template #suffix>
@@ -69,10 +69,10 @@
 import config from "@/config";
 import { onLoad, onShow, onHide, onLaunch, onReady } from "@dcloudio/uni-app";
 import { reactive, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 const useStore = useStores();
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const { proxy } = getCurrentInstance();
 
@@ -159,7 +159,7 @@ function init() {
     useStore.GetMobileTenantConfig({ url: linkUrl.value });
   } else {
     uni.setStorageSync("serveUrl", "manager.usky.cn");
-    publicStore.setServeList("manager.usky.cn", "");
+    commonStore.setServeList("manager.usky.cn", "");
     linkUrl.value = uni.getStorageSync("serveUrl");
     useStore.GetMobileTenantConfig({ url: linkUrl.value });
   }

+ 153 - 219
src/pages/mine.vue

@@ -20,138 +20,118 @@
       <view class="vip-card-box"> </view>
     </view>
 
-    <view
-      class="content-section"
-      :style="[
-        {
-          transform: coverTransform,
-          transition: coverTransition,
-        },
-      ]"
-      @touchstart="coverTouchstart"
-      @touchmove="coverTouchmove"
-      @touchend="coverTouchend"
-    >
-      <image class="mine-image" src="@/static/images/mine/arc.png"></image>
-
-      <view class="menu-list">
-        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToEditInfo()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-user menu-icon"></view>
-            <view>我的信息</view>
-          </view>
-        </view>
-        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToSecure()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-yanzheng menu-icon"></view>
-            <view>账号与安全</view>
-          </view>
-        </view>
-        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleAbout()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-aixin menu-icon"></view>
-            <view>关于我们</view>
+    <oa-transForm>
+      <template #content>
+        <view class="menu-list">
+          <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToEditInfo()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-user menu-item-icon"></view>
+              <view>我的信息</view>
+            </view>
           </view>
-        </view>
-        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleHelp()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-Help menu-icon"></view>
-            <view>常见问题</view>
+          <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToSecure()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-yanzheng menu-item-icon"></view>
+              <view>账号与安全</view>
+            </view>
           </view>
-        </view>
-        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleCleanTmp()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-qinglihuancun menu-icon"></view>
-            <view>清理缓存</view>
-            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ proxy.$settingStore.currentSize }}</view>
+          <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleAbout()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-aixin menu-item-icon"></view>
+              <view>关于我们</view>
+            </view>
           </view>
-        </view>
-        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToUpgrade()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-jianchagengxin menu-icon"></view>
-            <view>检查更新</view>
+          <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleHelp()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-Help menu-item-icon"></view>
+              <view>常见问题</view>
+            </view>
           </view>
-        </view>
-        <!-- <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleSetting()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-shezhi menu-icon"></view>
-            <view>设置</view>
+          <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleCleanTmp()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-qinglihuancun menu-item-icon"></view>
+              <view>清理缓存</view>
+              <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ proxy.$settingStore.currentSize }}</view>
+            </view>
           </view>
-        </view> -->
-      </view>
 
-      <!-- <view class="menu-list">
-        <view class="list-cell list-cell-arrow" @click="goMessagePush()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-aixin menu-icon"></view>
-            <view>推送设置</view>
+          <view class="list-cell list-cell-arrow" @click="handleToUpgrade">
+            <view class="menu-item">
+              <view class="iconfont ucicon-jianchagengxin menu-item-icon"></view>
+              <view>检查更新</view>
+            </view>
           </view>
+          <!-- <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleSetting()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-shezhi menu-item-icon"></view>
+              <view>设置</view>
+            </view>
+          </view> -->
         </view>
-        <view class="list-cell list-cell-arrow" @click="goBuilding()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-aixin menu-icon"></view>
-            <view>建筑管理</view>
+
+        <!-- <view class="menu-list">
+          <view class="list-cell list-cell-arrow" @click="goMessagePush()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-aixin menu-item-icon"></view>
+              <view>推送设置</view>
+            </view>
           </view>
-        </view>
-        <view class="list-cell list-cell-arrow" @click="goFunReport()">
-          <view class="menu-item-box">
-            <view class="iconfont ucicon-aixin menu-icon"></view>
-            <view>功能报备</view>
+          <view class="list-cell list-cell-arrow" @click="goBuilding()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-aixin menu-item-icon"></view>
+              <view>建筑管理</view>
+            </view>
           </view>
-        </view>
-      </view> -->
-
-      <view class="cu-list menu">
-        <view class="cu-item mtb0">
-          <view class="content flex align-center">
-            <text class="iconfont ucicon-colorlens" :class="'text-' + themeColor.name"></text>
-            <view class="padding solid radius shadow-blur ml10" :class="'bg-' + themeColor.name"></view>
-            <view class="title ml10">
-              主题色:<text :class="'text-' + themeColor.name">{{ themeColor.title }}</text>
+          <view class="list-cell list-cell-arrow" @click="goFunReport()">
+            <view class="menu-item">
+              <view class="iconfont ucicon-aixin menu-item-icon"></view>
+              <view>功能报备</view>
             </view>
           </view>
-          <view class="action">
-            <button class="cu-btn round shadow" @click="colorModal = true" :class="'bg-' + themeColor.name">
-              <text class="iconfont ucicon-colorlens"></text>
-              选择主题
-            </button>
+        </view> -->
+
+        <view class="cu-list menu">
+          <view class="cu-item mt0">
+            <view class="content flex align-center">
+              <text class="iconfont ucicon-colorlens" :class="'text-' + themeColor.name"></text>
+              <view class="padding solid radius shadow-blur ml10" :class="'bg-' + themeColor.name"></view>
+              <view class="title ml10">
+                主题色:<text :class="'text-' + themeColor.name">{{ themeColor.title }}</text>
+              </view>
+            </view>
+            <view class="action">
+              <button class="cu-btn round shadow" @click="colorModal = true" :class="'bg-' + themeColor.name">
+                <text class="iconfont ucicon-colorlens"></text>
+                选择主题
+              </button>
+            </view>
           </view>
         </view>
-      </view>
 
-      <view class="cu-list menu">
-        <view class="cu-item">
-          <view class="content text-center" @click="proxy.$settingStore.handleLogout">
-            <text class="text-black">退出登录</text>
+        <view class="menu-list" @click="proxy.$settingStore.handleLogout">
+          <view class="list-cell">
+            <view class="menu-item">
+              <view class="button">退 出 登 录</view>
+            </view>
           </view>
         </view>
-      </view>
-    </view>
 
-    <!-- <view class="cu-list menu-avatar padding-lr-sm padding-top-sm">
-      <view class="cu-item" @tap="goSiteManage" v-if="permissionLabel == 1">
-        <view class="cu-avatar" style="background-image: url(@/static/images/setting/setting-icon2.png)"></view>
-        <view class="content">
-          <view class="">站点管理</view>
-        </view>
-        <view class="nav-right">
-          <view class="text-grey">
-            <text class="icon iconfont margin-right-xs margin-left-lg">&#xe629;</text>
+        <!-- <view class="menu-list">
+          <view class="list-cell list-cell-arrow" @tap="goSiteManage" v-if="permissionLabel == 1">
+            <view class="menu-item">
+              <image class="menu-item-image" src="@/static/images/setting/setting-icon2.png" style="width: 15px; height: 15px"></image>
+              <view>站点管理</view>
+            </view>
           </view>
-        </view>
-      </view>
-      <view class="cu-item" @tap="goAuthManage" v-if="permissionLabel == 1">
-        <view class="cu-avatar" style="background-image: url(@/static/images/setting/setting-icon4.png)"></view>
-        <view class="content">
-          <view class="">权限管理</view>
-        </view>
-        <view class="nav-right">
-          <view class="text-grey">
-            <text class="icon iconfont margin-right-xs margin-left-lg">&#xe629;</text>
+          <view class="list-cell list-cell-arrow" @tap="goAuthManage" v-if="permissionLabel == 1">
+            <view class="menu-item">
+              <image class="menu-item-image" src="@/static/images/setting/setting-icon4.png" style="width: 15px; height: 15px"></image>
+              <view>权限管理</view>
+            </view>
           </view>
-        </view>
-      </view>
-    </view> -->
+        </view> -->
+      </template>
+    </oa-transForm>
 
     <!-- 选择颜色模态框 -->
     <view class="cu-modal" :class="{ show: colorModal }">
@@ -172,6 +152,8 @@
         </view>
       </view>
     </view>
+
+    <oa-upgrade v-if="modalShow" :modalArray="modalArray" :themesColor="proxy.$settingStore.themeColor.color" @closeModal="closeModal" />
   </view>
 
   <oa-tabbar :tabbarValue="2"></oa-tabbar>
@@ -182,50 +164,82 @@ import config from "@/config";
 import storage from "@/utils/storage";
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
+import { checkUpdates } from "@/api/system/setting";
 import { uploadAvatar, updateUserProfile } from "@/api/system/user";
 import { getAuthorization } from "@/api/business/zhxf/messagePush/index.js";
 
 const useStore = useStores();
-
 const { proxy } = getCurrentInstance();
 
 const avatar = computed(() => {
   return useStore.$state.avatar;
 });
-
 const themeColor = computed(() => {
   return proxy.$settingStore.themeColor;
 });
 
-const windowHeight = computed(() => {
-  return uni.getSystemInfoSync().windowHeight - 50;
-});
-
 const data = reactive({
   nickName: useStore.$state.nickName,
   phone: useStore.$state.phonenumber,
   version: config.appInfo.version,
 
-  coverTransform: "translateY(0px)",
-  coverTransition: "0s",
-  moving: false,
-
   colorModal: false,
   themeList: proxy.$constData.themeList,
+
+  modalShow: false,
+  modalArray: {},
 });
 
-const { coverTransform, coverTransition, moving, colorModal, themeList } = toRefs(data);
+const { colorModal, themeList, modalShow, modalArray } = toRefs(data);
 
-const permissionLabel = ref(0);
+/**
+ * @检查更新
+ */
+function handleToUpgrade() {
+  proxy.$modal.loading("加载中");
+
+  let data = {
+    _api_key: "fba7440cd37400b6ff46e303896af4df",
+    appKey: "705a19c80c291a47067103824330eb66",
+    buildVersion: config.appInfo.version,
+    // buildVersion: "2.1.0",
+  };
+  checkUpdates(data).then((res) => {
+    if (res.code == 0) {
+      let platform = uni.getSystemInfoSync().platform; //手机平台
+
+      if (res.data.buildHaveNewVersion == true) {
+        //安卓手机弹窗升级
+        if (platform === "android") {
+          modalShow.value = true;
+          modalArray.value = res.data;
+        }
+        //IOS无法在线升级提示到商店下载
+        else {
+          uni.showModal({
+            title: "发现新版本 " + res.data.buildVersion,
+            content: "请到App store进行升级",
+            showCancel: false,
+          });
+        }
+      } else {
+        proxy.$modal.msg("您的软件版本已是最新");
+      }
 
-function getAuthorizationApi(params) {
-  getAuthorization(params).then((res) => {
-    permissionLabel.value = res.data.permissionLabel;
+      proxy.$modal.closeLoading();
+    }
   });
 }
 
+/**
+ * @关闭弹窗
+ */
+function closeModal(flag) {
+  modalShow.value = flag;
+}
+
 /**
  * @推送设置
  */
@@ -263,20 +277,6 @@ function handleToLogin() {
   proxy.$tab.reLaunch("/pages/login");
 }
 
-/**
- * @upload上传头像
- * @api接口请求
- */
-function uploadApi(res) {
-  let data = { name: "file", filePath: res.tempFilePaths[0] };
-  uploadAvatar(data).then((response) => {
-    useStore.$state.avatar = response.data.url;
-    updateUserProfile({
-      avatar: response.data.url,
-    }).then(() => {});
-  });
-}
-
 /**
  * @点击头像
  */
@@ -295,50 +295,18 @@ function handleToAvatar(type) {
   }
 }
 
-let startY = 0,
-  moveY = 0,
-  pageAtTop = true;
-
-/**
- * @触摸开始
- */
-function coverTouchstart(e) {
-  if (pageAtTop === false) {
-    return;
-  }
-  coverTransition.value = "transform .1s linear";
-  startY = e.touches[0].clientY;
-}
-
-/**
- * @触摸移动
- */
-function coverTouchmove(e) {
-  moveY = e.touches[0].clientY;
-  let moveDistance = moveY - startY;
-  if (moveDistance < 0) {
-    moving.value = false;
-    return;
-  }
-  moving.value = true;
-  if (moveDistance >= 80 && moveDistance < 100) {
-    moveDistance = 80;
-  }
-  if (moveDistance > 0 && moveDistance <= 80) {
-    coverTransform.value = `translateY(${moveDistance}px)`;
-  }
-}
-
 /**
- * @触摸结束
+ * @upload上传头像
+ * @api接口请求
  */
-function coverTouchend() {
-  if (moving.value === false) {
-    return;
-  }
-  moving.value = false;
-  coverTransition.value = "transform 0.3s cubic-bezier(.21,1.93,.53,.64)";
-  coverTransform.value = "translateY(0px)";
+function uploadApi(res) {
+  let data = { name: "file", filePath: res.tempFilePaths[0] };
+  uploadAvatar(data).then((response) => {
+    useStore.$state.avatar = response.data.url;
+    updateUserProfile({
+      avatar: response.data.url,
+    }).then(() => {});
+  });
 }
 
 onShow(() => {});
@@ -364,7 +332,7 @@ onNavigationBarButtonTap((e) => {
   height: calc(100vh - (50px + env(safe-area-inset-bottom)));
 
   .top-area {
-    padding: 55px 15px 0 15px;
+    padding: 55px 0.625rem 0 0.625rem;
 
     .login-tip {
       font-size: 18px;
@@ -402,40 +370,6 @@ onNavigationBarButtonTap((e) => {
     }
   }
 
-  .content-section {
-    position: relative;
-    margin-top: -85px;
-    padding-bottom: 50.67px;
-    background-color: #f5f6f7;
-
-    .mine-image {
-      position: absolute;
-      left: 0;
-      top: -16px;
-      width: 100%;
-      height: 36upx;
-    }
-
-    .mine-actions {
-      margin: 0.625rem 0.625rem;
-      padding: 20px 0px;
-      border-radius: 8px;
-      background-color: white;
-
-      .action-item {
-        .icon {
-          font-size: 28px;
-        }
-
-        .text {
-          display: block;
-          font-size: 13px;
-          margin: 8px 0px;
-        }
-      }
-    }
-  }
-
   .cu-list.menu-avatar .cu-item {
     border-radius: 5px;
     padding: 30rpx 0;

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

@@ -18,25 +18,25 @@
     <view class="content-section">
       <view class="menu-list">
         <view class="list-cell list-cell-arrow">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view>版本信息</view>
             <view class="text-right">v{{ version }}</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view>官方邮箱</view>
             <view class="text-right">{{ email }}</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view>服务热线</view>
             <view class="text-right">{{ hotline }}</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view>公司网站</view>
             <view class="text-right">
               <uni-link :href="url" :text="url" showUnderLine="false"></uni-link>
@@ -57,7 +57,7 @@
 import config from "@/config";
 import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 const useStore = useStores();
 

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

@@ -51,7 +51,7 @@
 import config from "@/config";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
 import { onReady, onShow } from "@dcloudio/uni-app";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { uploadAvatar, updateUserProfile } from "@/api/system/user";
 

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

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

+ 70 - 69
src/pages/mine/info/index.vue

@@ -7,37 +7,37 @@
     <view class="content-section" v-show="tabsCurrent == 0">
       <view class="menu-list mt0 mlr0">
         <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToAvatar(2)">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">头像</view>
             <image style="margin: 0 15px 0 auto" v-if="avatar" :src="avatar" class="cu-avatar radius"> </image>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="handleUserModal('修改昵称')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">昵称</view>
             <view class="content" style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.nickName }}</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="handleUserModal('修改手机号')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">手机号</view>
-            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.phonenumber }}</view>
+            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.phonenumber.substr(0, 3) + "******" + user.phonenumber.substr(9) }}</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="handleUserModal('修改邮箱')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">邮箱</view>
             <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.email }}</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="handleUserModal('修改性别')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">性别</view>
             <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.sex == "0" ? "男" : "女" }}</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">我的名片</view>
           </view>
         </view>
@@ -45,12 +45,12 @@
 
       <view class="menu-list mt0 mlr0">
         <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view>个人实名认证</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view>更多</view>
           </view>
         </view>
@@ -95,14 +95,19 @@
 
   <u-modal :show="modalShow" :showConfirmButton="true" :showCancelButton="true" @cancel="modalShow = false" @confirm="handleConfirm">
     <view class="slot-content" style="width: 100%">
-      <view class="mb15" style="color: #909399">{{ modalTitle }}</view>
+      <view class="mb15" style="text-align: center; color: #000; font-weight: 600">{{ modalTitle }}</view>
 
       <view v-if="modalTitle === '修改昵称'">
         <u--input v-model="userArr.nickName" :maxlength="5" :placeholder="modalTitle" border="bottom" clearable></u--input>
       </view>
 
       <view v-if="modalTitle === '修改手机号'">
-        <u--input type="number" v-model="userArr.phonenumber" :maxlength="11" :placeholder="modalTitle" border="bottom" clearable></u--input>
+        <u-input v-model="phone" placeholder="请输入手机号" :maxlength="11" border="bottom" />
+        <u-input v-model="verify" placeholder="请输入验证码" :maxlength="6" border="bottom">
+          <template #suffix>
+            <button class="verify" @click="getVerifyCode">{{ !useStore.codeTime ? "获取验证码" : useStore.codeTime + "s" }}</button>
+          </template>
+        </u-input>
       </view>
 
       <view v-if="modalTitle === '修改邮箱'">
@@ -123,66 +128,31 @@ import config from "@/config";
 import storage from "@/utils/storage";
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { updateUserProfile, getUserProfile } from "@/api/system/user";
 
 const useStore = useStores();
-
 const { proxy } = getCurrentInstance();
 
-const avatar = computed(() => {
-  return useStore.$state.avatar;
-});
-
-const user = computed(() => {
-  return useStore.$state.user;
-});
-
-const userArr = computed(() => {
-  return useStore.$state.userArr;
-});
-
-const postGroup = computed(() => {
-  return useStore.$state.postGroup;
-});
-
-const roleGroup = computed(() => {
-  return useStore.$state.roleGroup;
-});
-
 const data = reactive({
-  tabsList: [
-    {
-      name: "个人信息",
-    },
-    // {
-    //   name: "其它信息",
-    // },
-    {
-      name: "企业/团队",
-    },
-  ],
+  tabsList: [{ name: "个人信息" }, { name: "企业/团队" }],
   tabsCurrent: 0,
 
   sexs: [
-    {
-      text: "男",
-      value: "0",
-    },
-    {
-      text: "女",
-      value: "1",
-    },
+    { text: "男", value: "0" },
+    { text: "女", value: "1" },
   ],
 
   modalShow: false,
   modalTitle: "",
-});
 
-const { name, phone, tabsList, tabsCurrent, sexs, modalShow, modalTitle } = toRefs(data);
+  phone: undefined,
+  verify: undefined,
+});
 
-const form = ref(null);
+const { tabsList, tabsCurrent, sexs, modalShow, modalTitle, phone, verify } = toRefs(data);
+const { avatar, user, userArr, postGroup, roleGroup } = toRefs(useStore.$state);
 
 function handleUserModal(title) {
   modalShow.value = true;
@@ -195,18 +165,32 @@ function handleConfirm() {
       proxy.$modal.showToast("昵称不能为空");
       return;
     }
+
+    updateUserProfile(userArr.value).then((response) => {
+      proxy.$tab.reLaunch("/pages/mine");
+      useStore.getUser();
+    });
   }
 
   if (modalTitle.value == "修改手机号") {
-    if (!userArr.value.phonenumber) {
-      proxy.$modal.showToast("手机号不能为空");
-      return;
-    }
-
-    if (!/^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(userArr.value.phonenumber)) {
-      proxy.$modal.showToast("请输入正确的手机号");
-      return;
-    }
+    useStore.PhoneVerify({
+      data: {
+        phone: phone.value,
+        verify: verify.value,
+      },
+      success: (res) => {
+        userArr.value.phonenumber = phone.value;
+
+        updateUserProfile(userArr.value).then((response) => {
+          proxy.$modal.msgSuccess("修改成功");
+          proxy.$tab.reLaunch("/pages/mine");
+          useStore.getUser();
+        });
+      },
+      error: (res) => {
+        return false;
+      },
+    });
   }
 
   if (modalTitle.value == "修改邮箱") {
@@ -219,6 +203,11 @@ function handleConfirm() {
       proxy.$modal.showToast("请输入正确的邮箱地址");
       return;
     }
+
+    updateUserProfile(userArr.value).then((response) => {
+      proxy.$tab.reLaunch("/pages/mine");
+      useStore.getUser();
+    });
   }
 
   if (modalTitle.value == "修改性别") {
@@ -226,16 +215,27 @@ function handleConfirm() {
       proxy.$modal.showToast("请选择性别");
       return;
     }
+
+    updateUserProfile(userArr.value).then((response) => {
+      proxy.$tab.reLaunch("/pages/mine");
+      useStore.getUser();
+    });
   }
+}
 
-  updateUserProfile(userArr.value).then((response) => {
-    proxy.$tab.reLaunch("/pages/mine");
-    useStore.getUser();
+/**
+ * @点击发送验证码
+ */
+function getVerifyCode() {
+  verify.value = undefined;
+  useStore.GetCodeImg({
+    phone: phone.value,
+    success: (res) => {
+      proxy.$modal.msgSuccess("发送成功");
+    },
   });
 }
 
-function submit(ref) {}
-
 /**
  * @tabs点击事件
  */
@@ -248,6 +248,7 @@ onLoad((options) => {
 });
 
 onReady(() => {
+  // const form = ref(null);
   //   form.value.setRules(rules.value);
 });
 

+ 1 - 1
src/pages/mine/secure/fingerprint/index.vue

@@ -27,7 +27,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { loginLogList } from "@/api/mine/secure/loginLog.js";
 

+ 128 - 51
src/pages/mine/secure/index.vue

@@ -8,13 +8,13 @@
 
       <view class="menu-list mt0 mlr0">
         <view class="list-cell list-cell-arrow" @click="handleUserModal('修改手机号')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">手机号</view>
-            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.phonenumber }}</view>
+            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ phonenumber }}</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="handleUserModal('修改密码')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">密码</view>
             <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ user.password ? "已设置" : "未设置" }}</view>
           </view>
@@ -25,18 +25,18 @@
         <!-- #ifdef APP-PLUS || MP-WEIXIN -->
         <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
           <!-- <view class="list-cell list-cell-arrow" @click="proxy.$tab.navigateTo(`/pages/mine/secure/fingerprint/index`)"> -->
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">指纹登录</view>
           </view>
         </view>
         <!-- #endif -->
         <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">人脸</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">手势密码</view>
           </view>
         </view>
@@ -44,28 +44,41 @@
 
       <view class="menu-list mt0 mlr0">
         <view class="list-cell list-cell-arrow" @click="proxy.$tab.navigateTo(`/pages/mine/secure/loginLog/index`)">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">登录日志</view>
           </view>
         </view>
         <view class="list-cell list-cell-arrow" @click="proxy.$modal.showToast('模块建设中~')">
-          <view class="menu-item-box">
+          <view class="menu-item">
             <view class="title">常用设备管理</view>
           </view>
         </view>
       </view>
+
+      <view class="menu-list mt0 mlr0" @click="handleUserModal('手机号验证')">
+        <view class="list-cell">
+          <view class="menu-item">
+            <view class="button error">注 销 账 号</view>
+          </view>
+        </view>
+      </view>
     </view>
   </view>
 
-  <u-modal :show="modalShow" :showConfirmButton="true" :showCancelButton="true" @cancel="modalShow = false" @confirm="handleConfirm">
+  <u-modal :show="modalShow" :showConfirmButton="true" :showCancelButton="true" @cancel="handleCancel()" @close="handleCancel()" @confirm="handleConfirm()">
     <view class="slot-content" style="width: 100%">
-      <view class="mb15" style="color: #909399">{{ modalTitle }}</view>
-
       <view v-if="modalTitle === '修改手机号'">
-        <u--input v-model="userArr.phonenumber" :maxlength="11" :placeholder="modalTitle" border="bottom" clearable></u--input>
+        <view class="mb15" style="text-align: center; color: #000; font-weight: 600">{{ modalTitle }}</view>
+        <u-input v-model="phone" placeholder="请输入手机号" :maxlength="11" border="bottom" />
+        <u-input v-model="verify" placeholder="请输入验证码" :maxlength="6" border="bottom">
+          <template #suffix>
+            <button class="verify" @click="getVerifyCode">{{ !useStore.codeTime ? "获取验证码" : useStore.codeTime + "s" }}</button>
+          </template>
+        </u-input>
       </view>
 
       <view v-if="modalTitle === '修改密码'">
+        <view class="mb15" style="text-align: center; color: #000; font-weight: 600">{{ modalTitle }}</view>
         <u-input class="mb15" v-model="oldPassword" placeholder="请输入旧密码" :password="oldPasswordBool" border="bottom">
           <template #suffix>
             <text :class="!oldPasswordBool ? 'iconfont ucicon-eye' : 'iconfont ucicon-eye-close'" @click="oldPasswordBool = !oldPasswordBool"></text>
@@ -84,6 +97,17 @@
           </template>
         </u-input>
       </view>
+
+      <view v-if="modalTitle === '手机号验证'">
+        <view class="mb5" style="text-align: center; color: #000; font-weight: 600">{{ modalTitle }}</view>
+        <view class="mb15" style="text-align: center; color: #000; font-size: 0.75rem; width: 90%; margin: 0 auto"> 请填写完整的手机号 {{ phonenumber }} 以验证身份 </view>
+        <u-input v-model="phone" placeholder="请输入手机号" :maxlength="11" border="bottom" />
+        <u-input v-model="verify" placeholder="请输入验证码" :maxlength="6" border="bottom">
+          <template #suffix>
+            <button class="verify" @click="getVerifyCode">{{ !useStore.codeTime ? "获取验证码" : useStore.codeTime + "s" }}</button>
+          </template>
+        </u-input>
+      </view>
     </view>
   </u-modal>
 </template>
@@ -93,26 +117,13 @@ import config from "@/config";
 import storage from "@/utils/storage";
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { updateUserProfile, updateUserPwd } from "@/api/system/user";
 
 const useStore = useStores();
-
 const { proxy } = getCurrentInstance();
 
-const avatar = computed(() => {
-  return useStore.$state.avatar;
-});
-
-const user = computed(() => {
-  return useStore.$state.user;
-});
-
-const userArr = computed(() => {
-  return useStore.$state.userArr;
-});
-
 const data = reactive({
   modalShow: false,
   modalTitle: "",
@@ -123,26 +134,44 @@ const data = reactive({
   newPasswordBool: true,
   confirmPassword: undefined,
   confirmPasswordBool: true,
+
+  phone: undefined,
+  verify: undefined,
 });
 
-const { modalShow, modalTitle, oldPassword, oldPasswordBool, newPassword, newPasswordBool, confirmPassword, confirmPasswordBool } = toRefs(data);
+const { modalShow, modalTitle, oldPassword, oldPasswordBool, newPassword, newPasswordBool, confirmPassword, confirmPasswordBool, phone, verify } = toRefs(data);
+const { avatar, user, userArr } = toRefs(useStore.$state);
+
+const phonenumber = computed(() => {
+  return user.value.phonenumber.substr(0, 3) + "******" + user.value.phonenumber.substr(9);
+});
 
 function handleUserModal(title) {
   modalShow.value = true;
   modalTitle.value = title;
 }
 
+/** 确定按钮 */
 function handleConfirm() {
   if (modalTitle.value == "修改手机号") {
-    if (!userArr.value.phonenumber) {
-      proxy.$modal.showToast("手机号不能为空");
-      return;
-    }
-
-    if (!/^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(userArr.value.phonenumber)) {
-      proxy.$modal.showToast("请输入正确的手机号");
-      return;
-    }
+    useStore.PhoneVerify({
+      data: {
+        phone: phone.value,
+        verify: verify.value,
+      },
+      success: (res) => {
+        userArr.value.phonenumber = phone.value;
+
+        updateUserProfile(userArr.value).then((response) => {
+          proxy.$modal.msgSuccess("修改成功");
+          handleCancel(); //调用取消按钮
+          useStore.getUser();
+        });
+      },
+      error: (res) => {
+        return false;
+      },
+    });
   }
 
   if (modalTitle.value == "修改密码") {
@@ -170,30 +199,78 @@ function handleConfirm() {
       proxy.$modal.showToast("两次输入的密码不一致");
       return;
     }
-  }
 
-  if (modalTitle.value == "修改手机号") {
-    updateUserProfile(userArr.value).then((response) => {
+    updateUserPwd(oldPassword.value, newPassword.value).then((response) => {
       proxy.$modal.msgSuccess("修改成功");
-      modalShow.value = false;
+      handleCancel(); //调用取消按钮
       useStore.getUser();
     });
-  } else if (modalTitle.value == "修改密码") {
-    updateUserPwd(oldPassword.value, newPassword.value).then((response) => {
-      proxy.$modal.msgSuccess("修改成功");
-      modalShow.value = false;
-      oldPassword.value = undefined;
-      oldPasswordBool.value = true;
-      newPassword.value = undefined;
-      newPasswordBool.value = true;
-      confirmPassword.value = undefined;
-      confirmPasswordBool.value = true;
+  }
 
-      useStore.getUser();
+  if (modalTitle.value == "手机号验证") {
+    if (phone.value != user.value.phonenumber) {
+      proxy.$modal.msg("请输入正确的手机号");
+      return;
+    }
+
+    useStore.PhoneVerify({
+      data: {
+        phone: phone.value,
+        verify: verify.value,
+      },
+      success: (res) => {
+        useStore.UserDel({
+          data: {
+            id: user.value.userId,
+          },
+          success: (res) => {
+            proxy.$modal.msgSuccess("用户注销成功");
+            handleCancel(); //调用取消按钮
+            useStore.LogOut().then(() => {
+              proxy.$tab.reLaunch("/pages/index");
+            });
+          },
+        });
+      },
+      error: (res) => {
+        return false;
+      },
     });
   }
 }
 
+/** 取消按钮 */
+function handleCancel() {
+  modalShow.value = false;
+  modalTitle.value = "";
+
+  oldPassword.value = undefined;
+  oldPasswordBool.value = true;
+  newPassword.value = undefined;
+  newPasswordBool.value = true;
+  confirmPassword.value = undefined;
+  confirmPasswordBool.value = true;
+
+  phone.value = undefined;
+  verify.value = undefined;
+}
+
+/** 点击发送验证码 */
+function getVerifyCode() {
+  if (modalTitle.value == "手机号验证" && phone.value != user.value.phonenumber) {
+    proxy.$modal.msg("请输入正确的手机号");
+    return;
+  }
+
+  verify.value = undefined;
+  useStore.GetCodeImg({
+    phone: phone.value,
+    success: (res) => {
+      proxy.$modal.msgSuccess("发送成功");
+    },
+  });
+}
+
 onLoad((options) => {
   useStore.getUser();
 });

+ 1 - 1
src/pages/mine/secure/loginLog/index.vue

@@ -42,7 +42,7 @@
 <script setup>
 import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 import { loginLogList } from "@/api/mine/secure/loginLog.js";
 

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

@@ -2,8 +2,8 @@
   <view class="setting-container" :style="{ height: `${windowHeight}px` }">
     <view class="menu-list mlr0">
       <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToEditInfo()">
-        <view class="menu-item-box">
-          <view class="iconfont ucicon-user menu-icon"></view>
+        <view class="menu-item">
+          <view class="iconfont ucicon-user menu-item-icon"></view>
           <view>我的信息</view>
         </view>
       </view>
@@ -11,36 +11,36 @@
 
     <view class="menu-list mt0 mlr0">
       <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleAbout()">
-        <view class="menu-item-box">
-          <view class="iconfont ucicon-aixin menu-icon"></view>
+        <view class="menu-item">
+          <view class="iconfont ucicon-aixin menu-item-icon"></view>
           <view>关于我们</view>
         </view>
       </view>
       <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleHelp()">
-        <view class="menu-item-box">
-          <view class="iconfont ucicon-Help menu-icon"></view>
+        <view class="menu-item">
+          <view class="iconfont ucicon-Help menu-item-icon"></view>
           <view>常见问题</view>
         </view>
       </view>
       <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleCleanTmp()">
-        <view class="menu-item-box">
-          <view class="iconfont ucicon-qinglihuancun menu-icon"></view>
+        <view class="menu-item">
+          <view class="iconfont ucicon-qinglihuancun menu-item-icon"></view>
           <view>清理缓存</view>
           <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ proxy.$settingStore.currentSize }}</view>
         </view>
       </view>
       <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToUpgrade()">
-        <view class="menu-item-box">
-          <view class="iconfont ucicon-jianchagengxin menu-icon"></view>
+        <view class="menu-item">
+          <view class="iconfont ucicon-jianchagengxin menu-item-icon"></view>
           <view>检查更新</view>
         </view>
       </view>
     </view>
 
-    <!-- <view class="cu-list menu">
-      <view class="cu-item">
-        <view class="content text-center" @click="proxy.$settingStore.handleLogout">
-          <text class="text-black">退出登录</text>
+    <!-- <view class="menu-list" @click="proxy.$settingStore.handleLogout">
+      <view class="list-cell">
+        <view class="menu-item">
+          <view class="button">退 出 登 录</view>
         </view>
       </view>
     </view> -->
@@ -50,7 +50,7 @@
 <script setup>
 import { onLoad, onShow, onHide, onLaunch, onNavigationBarButtonTap } from "@dcloudio/uni-app";
 import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
 const useStore = useStores();
 

+ 2 - 2
src/pages/register.vue

@@ -49,10 +49,10 @@
 import config from "@/config";
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 import { getToken, setToken, removeToken } from "@/utils/auth";
 
-const publicStore = publicStores();
+const commonStore = commonStores();
 const useStore = useStores();
 
 const { proxy } = getCurrentInstance();

+ 5 - 4
src/pages/serveConfig.vue

@@ -37,10 +37,10 @@
 import config from "@/config";
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance } from "vue";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 import { getToken, setToken, removeToken } from "@/utils/auth";
 
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const { proxy } = getCurrentInstance();
 
@@ -60,6 +60,7 @@ const { linkUrl, port, content, index } = toRefs(dataList);
  */
 function scanClick() {
   uni.scanCode({
+    autoZoom: false,
     success: async (e) => {
       uni.showToast({
         title: "扫码成功",
@@ -115,10 +116,10 @@ function handleSubmit() {
   } else {
     if (!port.value) {
       uni.setStorageSync("serveUrl", linkUrl.value);
-      publicStore.setServeList(linkUrl.value, content.value);
+      commonStore.setServeList(linkUrl.value, content.value);
     } else {
       uni.setStorageSync("serveUrl", linkUrl.value + ":" + port.value);
-      publicStore.setServeList(linkUrl.value + ":" + port.value, content.value);
+      commonStore.setServeList(linkUrl.value + ":" + port.value, content.value);
     }
   }
 

+ 4 - 3
src/pages/serveConfigSelect.vue

@@ -56,9 +56,9 @@ import config from "@/config";
 import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
 import { ref, onMounted, inject, shallowRef, reactive, toRefs, getCurrentInstance, watchEffect } from "vue";
 import { getToken, setToken, removeToken } from "@/utils/auth";
-import { publicStores, useStores } from "@/store/modules/index";
+import { useStores, commonStores } from "@/store/modules/index";
 
-const publicStore = publicStores();
+const commonStore = commonStores();
 
 const { proxy } = getCurrentInstance();
 
@@ -110,13 +110,14 @@ function editRadio(index) {
 function serveClick(type) {
   if (type == 1) {
     uni.scanCode({
+      autoZoom: false,
       success: async (e) => {
         uni.showToast({
           title: "扫码成功",
           icon: "none",
         });
 
-        publicStore.setServeList(e.result, "");
+        commonStore.setServeList(e.result, "");
 
         init();
 

+ 1 - 0
src/permission.js

@@ -19,6 +19,7 @@ const whiteList = [
   "/pages/common/repairReport/index",//报修申请
   "/pages/common/repairReport/record",//报修历史
   "/pages/common/evaluate/record",//服务评价
+  "/pages/common/NFC/index",//NFC读取
 ];
 
 // 检查地址白名单

+ 4 - 4
src/plugins/grid.plugins.js

@@ -5,7 +5,7 @@ let cuIconList = [
         imgUrl: "/static/icons/index/APP-xunjian.svg",
         badge: 0,
         name: "巡检",
-        redirectUrl: "/pages/business/mhxf/xunJian/xunJian",
+        redirectUrl: "/pages/business/zhaf/xunJian/xunJian",
     },
     {
         imgUrl: "/static/icons/index/APP-xxcx.svg",
@@ -82,21 +82,21 @@ let xunJianList = [
         title: "巡检任务",
         num: "0",
         imgUrl: "/static/images/xunjian/xunJian-icon1.png",
-        redirectUrl: "/pages/business/mhxf/xunJian/plan/index",
+        redirectUrl: "/pages/business/zhaf/xunJian/plan/index",
     },
     {
         id: 2,
         title: "巡检记录",
         num: "0",
         imgUrl: "/static/images/xunjian/xunJian-icon2.png",
-        redirectUrl: "/pages/business/mhxf/xunJian/plan/index",
+        redirectUrl: "/pages/business/zhaf/xunJian/plan/index",
     },
     {
         id: 3,
         title: "巡检采集",
         num: "0",
         imgUrl: "/static/images/xunjian/xunJian-icon3.png",
-        redirectUrl: "/pages/business/mhxf/xunJian/collect/index",
+        redirectUrl: "/pages/business/zhaf/xunJian/collect/index",
     },
 ];
 

+ 4 - 0
src/plugins/index.js

@@ -5,6 +5,7 @@ import common from "./common.plugins";
 import setting from "./setting.plugins";
 import constData from "./constData.plugins.js";
 import grid from "./grid.plugins.js";
+import nfc from "./nfc.plugins.js";
 import { settingStores } from "@/store/modules/index";
 
 export default {
@@ -30,6 +31,9 @@ export default {
     // 公共宫格列表数据存储
     app.provide("$grid", grid);
     app.config.globalProperties.$grid = grid;
+    // 公共NFC
+    app.provide("$nfc", nfc);
+    app.config.globalProperties.$nfc = nfc;
     // 公共设置stroe
     app.provide("$settingStore", settingStores());
     app.config.globalProperties.$settingStore = settingStores();

+ 292 - 0
src/plugins/nfc.plugins.js

@@ -0,0 +1,292 @@
+import tab from "./tab.plugins";
+import { commonStores } from "@/store/modules/index";
+
+var NfcAdapter;
+var NdefRecord;
+var NdefMessage;
+var waiting;
+var readyWriteData = false; //开启写
+var readyRead = false; //开启读
+var whetherNFC = false; //是否有NFC
+var techListsArray = [
+    ["android.nfc.tech.IsoDep"],
+    ["android.nfc.tech.NfcA"],
+    ["android.nfc.tech.NfcB"],
+    ["android.nfc.tech.NfcF"],
+    ["android.nfc.tech.Nfcf"],
+    ["android.nfc.tech.NfcV"],
+    ["android.nfc.tech.NdefFormatable"],
+    ["android.nfc.tech.MifareClassic"],
+    ["android.nfc.tech.MifareUltralight"],
+];
+
+export default {
+    initNFC() {
+        if (uni.getSystemInfoSync().platform == "android") {
+            listenNFCStatus();
+        }
+    },
+    readNFC(callback) {
+        if (uni.getSystemInfoSync().platform == "android") {
+            readData(callback);
+        }
+    },
+    closeNFC() {
+        if (uni.getSystemInfoSync().platform == "android") {
+            closeReadAndWrite();
+        }
+    }
+}
+
+function listenNFCStatus() {
+    try {
+        var main = plus.android.runtimeMainActivity();
+        var Intent = plus.android.importClass("android.content.Intent");
+        var Activity = plus.android.importClass("android.app.Activity");
+        var PendingIntent = plus.android.importClass("android.app.PendingIntent");
+        var IntentFilter = plus.android.importClass("android.content.IntentFilter");
+        NfcAdapter = plus.android.importClass("android.nfc.NfcAdapter");
+        var nfcAdapter = NfcAdapter.getDefaultAdapter(main);
+
+        if (nfcAdapter == null) {
+            uni.showToast({
+                title: "设备不支持NFC!",
+                icon: "none",
+            });
+            return;
+        }
+
+        if (!nfcAdapter.isEnabled()) {
+            uni.showToast({
+                title: "请在系统设置中先启用NFC功能!",
+                icon: "none",
+            });
+            return;
+        }
+
+        uni.navigateTo({
+            url: "/pages/common/nfc/index",
+        });
+
+        var intent = new Intent(main, main.getClass());
+        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+        var pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);
+        var ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED");
+        ndef.addDataType("*/*");
+        var intentFiltersArray = [ndef];
+
+        plus.globalEvent.addEventListener(
+            "newintent",
+            function () {
+                // 轮询调用 NFC
+                setTimeout(handleNFCData, 1000);
+            },
+            false
+        );
+        plus.globalEvent.addEventListener(
+            "pause",
+            function (e) {
+                if (nfcAdapter) {
+                    //关闭前台调度系统
+                    //恢复默认状态
+                    nfcAdapter.disableForegroundDispatch(main);
+                }
+            },
+            false
+        );
+        plus.globalEvent.addEventListener(
+            "resume",
+            function (e) {
+                if (nfcAdapter) {
+                    //开启前台调度系统
+                    // 优于所有其他NFC
+                    nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
+                }
+            },
+            false
+        );
+        nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
+    } catch (e) {
+        console.error(e);
+    }
+}
+
+function handleNFCData() {
+    NdefRecord = plus.android.importClass("android.nfc.NdefRecord");
+    NdefMessage = plus.android.importClass("android.nfc.NdefMessage");
+    var main = plus.android.runtimeMainActivity();
+    var intent = main.getIntent();
+    //console.log("action type:" + intent.getAction());
+    if ("android.nfc.action.TECH_DISCOVERED" == intent.getAction()) {
+        if (readyWriteData) {
+            //__write(intent);
+            readyWriteData = false;
+        } else if (readyRead) {
+            __read(intent);
+            readyRead = false;
+        }
+    }
+}
+
+function showToast(msg) {
+    plus.nativeUI.toast(msg);
+}
+
+/**
+ * @NFC写入
+ * @param {*} intent
+ * @returns
+ */
+function __write(intent) {
+    try {
+        waiting.setTitle("请勿移开标签\n正在写入...");
+        var text = document.getElementById("text").value;
+        console.log("text=" + text);
+
+        var textBytes = plus.android.invoke(text, "getBytes");
+        var textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, plus.android.invoke("text/plain", "getBytes"), plus.android.invoke("", "getBytes"), textBytes);
+        var message = new NdefMessage([textRecord]);
+        var Ndef = plus.android.importClass("android.nfc.tech.Ndef");
+        var NdefFormatable = plus.android.importClass("android.nfc.tech.NdefFormatable");
+        var tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+        var ndef = Ndef.get(tag);
+        if (ndef != null) {
+            var size = message.toByteArray().length;
+            console.log("size=" + size);
+            ndef.connect();
+            if (!ndef.isWritable()) {
+                showToast("tag不允许写入");
+                waiting.close();
+                return;
+            }
+            if (ndef.getMaxSize() < size) {
+                showToast("文件大小超出容量");
+                waiting.close();
+                return;
+            }
+
+            ndef.writeNdefMessage(message);
+            waiting.close();
+            showToast("写入数据成功.");
+            return;
+        } else {
+            var format = NdefFormatable.get(tag);
+            if (format != null) {
+                try {
+                    format.connect();
+                    format.format(message);
+                    showToast("格式化tag并且写入message");
+                    waiting.close();
+                    return;
+                } catch (e) {
+                    showToast("格式化tag失败.");
+                    waiting.close();
+                    return;
+                }
+            } else {
+                showToast("Tag不支持NDEF");
+                waiting.close();
+                return;
+            }
+        }
+    } catch (e) {
+        console.log("error=" + e);
+        waiting.close();
+        alert("写入失败");
+    }
+}
+
+/**
+ * @NFC读取
+ * @param {*} intent
+ * @returns
+ */
+function __read(intent) {
+    try {
+        commonStores().nfcWaiting = '请勿移开标签\n正在读取数据...'
+        // waiting.setTitle("请勿移开标签\n正在读取数据...");
+        var tag = plus.android.importClass("android.nfc.Tag");
+        tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+        var bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
+        // waiting.close();
+        var tagid = bytesToHexString(tag.getId());
+
+        setTimeout(() => {
+            uni.$emit("tagid", tagid); //将值存储监听器
+            tab.navigateBack(1); //返回上一级页面
+            closeReadAndWrite();
+        }, 1000);
+    } catch (e) {
+        uni.showToast({
+            title: e,
+            icon: "none",
+        });
+    }
+}
+
+function bytesToHexString(inarray) {
+    var i, j, x;
+    var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
+    var out = "";
+    for (j = 0; j < inarray.length; ++j) {
+        x = parseInt(inarray[j]) & 0xff;
+        i = (x >> 4) & 0x0f;
+        out += hex[i];
+        i = x & 0x0f;
+        out += hex[i];
+    }
+    return out;
+}
+
+function reverseTwo(str) {
+    var str1 = "";
+    for (var i = 1; i <= str.length; i++) {
+        str1 += str[i - 1];
+        if (i % 2 == 0) {
+            if (i == str.length) {
+                break;
+            }
+            str1 += ":";
+        }
+    }
+    var str2 = "";
+    for (var i = str1.split(":").length - 1; i >= 0; i--) {
+        str2 += str1.split(":")[i];
+    }
+    return str2;
+}
+
+if (uni.getSystemInfoSync().platform == "android") {
+    //plus.globalEvent.addEventListener('plusready', listenNFCStatus, false);
+}
+
+function writeData() {
+    var textEle = plus.globalEvent.getElementById("text");
+    if (!textEle.value) {
+        uni.showToast({
+            title: "请输入要写入的内容!",
+            icon: "none",
+        });
+        return;
+    }
+    readyWriteData = true;
+    commonStores().nfcWaiting = '请将手机靠近NFC标签'
+    // waiting = plus.nativeUI.showWaiting("请将手机靠近NFC标签!");
+}
+
+function readData() {
+    readyRead = true;
+    commonStores().nfcWaiting = '请将手机靠近NFC标签'
+    // waiting = plus.nativeUI.showWaiting("请将手机靠近NFC标签!", {
+    //     modal: false,
+    // });
+}
+
+function closeReadAndWrite() {
+    readyWriteData = false;
+    readyRead = false;
+
+    if (waiting) {
+        waiting.close();
+    }
+}

+ 43 - 3
src/static/iconfont/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 3620854 */
-  src: url("https://at.alicdn.com/t/c/font_3620854_k0vl6lrxxy.woff2?t=1693536081618") format("woff2"),
-       url("https://at.alicdn.com/t/c/font_3620854_k0vl6lrxxy.woff?t=1693536081618") format("woff"),
-       url("https://at.alicdn.com/t/c/font_3620854_k0vl6lrxxy.ttf?t=1693536081618") format("truetype");
+  src: url('https://at.alicdn.com/t/c/font_3620854_qj0jv579lnl.woff2?t=1703828032966') format('woff2'),
+       url('https://at.alicdn.com/t/c/font_3620854_qj0jv579lnl.woff?t=1703828032966') format('woff'),
+       url('https://at.alicdn.com/t/c/font_3620854_qj0jv579lnl.ttf?t=1703828032966') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,46 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.ucicon-oa-upgrade:before {
+  content: "\e61b";
+}
+
+.ucicon-nfc:before {
+  content: "\e61a";
+}
+
+.ucicon-jiahao:before {
+  content: "\e727";
+}
+
+.ucicon-skin:before {
+  content: "\e636";
+}
+
+.ucicon-ziti:before {
+  content: "\e7b1";
+}
+
+.ucicon-fullscreen:before {
+  content: "\e625";
+}
+
+.ucicon-zaosheng:before {
+  content: "\e61c";
+}
+
+.ucicon-diannao:before {
+  content: "\e623";
+}
+
+.ucicon-siweidaotu:before {
+  content: "\e619";
+}
+
+.ucicon-yanzhengshoujihao:before {
+  content: "\e633";
+}
+
 .ucicon-zhiwen:before {
   content: "\e74f";
 }

BIN
src/static/iconfont/iconfont.ttf


+ 0 - 0
src/static/images/dt/dt-rtuIcon.png → src/static/images/alarming/alarming-cp.png


+ 0 - 0
src/static/images/dt/dt-dcIcon.png → src/static/images/alarming/alarming-dc.png


+ 0 - 0
src/static/images/dt/dt-dtIcon.png → src/static/images/alarming/alarming-dt.png


+ 0 - 0
src/static/images/dt/dt-ygIcon.png → src/static/images/alarming/alarming-hz.png


+ 0 - 0
src/static/images/dt/dt-mjIcon.png → src/static/images/alarming/alarming-mj.png


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff