Prechádzať zdrojové kódy

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

xf15575941817 1 rok pred
rodič
commit
6a9eb64f72
78 zmenil súbory, kde vykonal 1521 pridanie a 1049 odobranie
  1. 1 3
      src/App.vue
  2. 37 0
      src/api/business/fireIot/alarmManage.js
  3. 24 10
      src/components/oa-scroll/index.vue
  4. 90 0
      src/components/oa-touch/index.vue
  5. 1 1
      src/config.js
  6. 3 0
      src/main.js
  7. 19 3
      src/manifest.json
  8. 21 0
      src/pages.json
  9. 207 0
      src/pages/business/fireIot/alarmManage/alarmDetails/index.vue
  10. 154 0
      src/pages/business/fireIot/alarmManage/alarmDetailsList/index.vue
  11. 99 0
      src/pages/business/fireIot/alarmManage/index.vue
  12. 50 41
      src/pages/business/fireIot/deviceSelect/components/deviceDetailsList.vue
  13. 45 14
      src/pages/business/fireIot/deviceSelect/index.vue
  14. 7 11
      src/pages/business/fireIot/facilitiesGather/index.vue
  15. 4 8
      src/pages/business/fireIot/facilitiesView/facilitiesDetails.vue
  16. 50 42
      src/pages/business/fireIot/facilitiesView/facilitiesDetailsList.vue
  17. 43 24
      src/pages/business/fireIot/facilitiesView/index.vue
  18. 61 120
      src/pages/business/mhxf/deviceManage/index.vue
  19. 41 34
      src/pages/business/mhxf/fireReport/index.vue
  20. 39 100
      src/pages/business/mhxf/informationSelect-test/index.vue
  21. 40 101
      src/pages/business/mhxf/informationSelect/index.vue
  22. 164 234
      src/pages/business/mhxf/needMatter/index.vue
  23. 2 2
      src/pages/business/mhxf/unitInfoCollection/index.vue
  24. 8 0
      src/pages/common/applicationInfo/index.vue
  25. 20 33
      src/pages/common/customManage/index.vue
  26. 5 3
      src/pages/common/invoicing/index.vue
  27. 7 2
      src/pages/common/success/index.vue
  28. 156 150
      src/pages/index.vue
  29. 2 2
      src/pages/info.vue
  30. 72 71
      src/pages/login.vue
  31. 1 1
      src/pages/mine/secure/loginLog/index.vue
  32. 2 2
      src/pages/serveConfig.vue
  33. 2 1
      src/pages/serveConfigSelect.vue
  34. 17 6
      src/plugins/common.plugins.js
  35. 7 3
      src/static/iconfont/iconfont.css
  36. BIN
      src/static/iconfont/iconfont.ttf
  37. BIN
      src/static/icons/index/APP-dbsx.png
  38. BIN
      src/static/icons/index/APP-dwcj.png
  39. BIN
      src/static/icons/index/APP-gjgl.png
  40. BIN
      src/static/icons/index/APP-khgl.png
  41. BIN
      src/static/icons/index/APP-kpgl.png
  42. BIN
      src/static/icons/index/APP-sbcx.png
  43. BIN
      src/static/icons/index/APP-sbgl.png
  44. BIN
      src/static/icons/index/APP-sscj.png
  45. BIN
      src/static/icons/index/APP-ssck.png
  46. BIN
      src/static/icons/index/APP-xfbg.png
  47. BIN
      src/static/icons/index/APP-xtzz.png
  48. BIN
      src/static/icons/index/APP-xunjian.png
  49. BIN
      src/static/icons/index/APP-xxcx.png
  50. BIN
      src/static/images/xunjian/xunJian-icon1.png
  51. BIN
      src/static/images/xunjian/xunJian-icon2.png
  52. BIN
      src/static/images/xunjian/xunJian-icon3.png
  53. 6 0
      src/static/scss/index.scss
  54. 12 26
      src/static/scss/public.scss
  55. 1 1
      src/store/modules/public.js
  56. 1 0
      src/uni_modules/uview-plus/components/u-tabbar/u-tabbar.vue
  57. BIN
      unpackage/res/icons/1024x1024.png
  58. BIN
      unpackage/res/icons/120x120.png
  59. BIN
      unpackage/res/icons/144x144.png
  60. BIN
      unpackage/res/icons/152x152.png
  61. BIN
      unpackage/res/icons/167x167.png
  62. BIN
      unpackage/res/icons/180x180.png
  63. BIN
      unpackage/res/icons/192x192.png
  64. BIN
      unpackage/res/icons/20x20.png
  65. BIN
      unpackage/res/icons/29x29.png
  66. BIN
      unpackage/res/icons/40x40.png
  67. BIN
      unpackage/res/icons/58x58.png
  68. BIN
      unpackage/res/icons/60x60.png
  69. BIN
      unpackage/res/icons/72x72.png
  70. BIN
      unpackage/res/icons/76x76.png
  71. BIN
      unpackage/res/icons/80x80.png
  72. BIN
      unpackage/res/icons/87x87.png
  73. BIN
      unpackage/res/icons/96x96.png
  74. BIN
      unpackage/res/push/18x18.png
  75. BIN
      unpackage/res/push/24x24.png
  76. BIN
      unpackage/res/push/36x36.png
  77. BIN
      unpackage/res/push/48x48.png
  78. BIN
      unpackage/res/push/72x72.png

+ 1 - 3
src/App.vue

@@ -23,10 +23,8 @@ watchEffect(() => {
 
 onLaunch(() => {
   console.log("App Launch");
-
-  //#ifdef APP-PLUS || MP-WEIXIN || H5
+  
   uni.hideTabBar(); //隐藏自带tabbar
-  //#endif
 
   //#ifdef APP-PLUS
   plus.screen.lockOrientation("portrait-primary"); //设置不可横屏

+ 37 - 0
src/api/business/fireIot/alarmManage.js

@@ -0,0 +1,37 @@
+import { request } from "@/utils/request";
+
+// 产品信息
+export function dmpProductInfo(param) {
+    return request({
+        url: "/service-iot/dmpProductInfo/page",
+        method: "POST",
+        data: param,
+    });
+}
+
+// 告警类型列表
+export function baseAlarmTypeList(param) {
+    return request({
+        url: "/service-iot/baseAlarm/statistic",
+        method: "POST",
+        data: param,
+    });
+}
+
+// 告警列表
+export function baseAlarmList(param) {
+    return request({
+        url: "/service-iot/baseAlarm/page",
+        method: "POST",
+        data: param,
+    });
+}
+
+// 告警列表-修改
+export function baseAlarm(param) {
+    return request({
+        url: "/service-iot/baseAlarm",
+        method: "PUT",
+        data: param,
+    });
+}

+ 24 - 10
src/components/oa-scroll/index.vue

@@ -1,5 +1,7 @@
 <template>
   <scroll-view
+    :class="customClass"
+    :style="customStyle"
     :scroll-y="true"
     scroll-with-animation
     :refresher-threshold="refresherThreshold"
@@ -29,14 +31,11 @@
     </slot>
     <slot name="default"> </slot>
     <slot name="bottomLoading">
-      <div
-        class="bottoBox"
-        :style="{
-          marginTop: lowerThreshold + 'px',
-        }"
-        v-if="refresherLoad"
-      >
-        {{ pageSize >= total ? "没有更多啦~" : isScrolltolower }}
+      <div class="bottoBox" :style="`margin-top: ${lowerThreshold + 'px'}`" v-if="refresherLoad">
+        <span v-show="total != 0 && refresherLoadTitle">
+          {{ pageSize >= total ? "没有更多啦~" : isScrolltolower }}
+        </span>
+        <span v-show="total == 0"> 暂无数据 </span>
       </div>
     </slot>
   </scroll-view>
@@ -63,12 +62,27 @@ const props = defineProps({
     type: String,
     default: "",
   },
+  //设置外部class
+  customClass: {
+    type: String,
+    default: "",
+  },
+  //设置外部style
+  customStyle: {
+    type: [String, Object],
+    default: "",
+  },
   //是否开启上拉加载
   refresherLoad: {
     type: Boolean,
     default: false,
   },
-  // 距离底部上拉加载距离
+  //是否显示上拉加载文字
+  refresherLoadTitle: {
+    type: Boolean,
+    default: true,
+  },
+  //距离底部上拉加载距离
   lowerThreshold: {
     type: Number,
     default: 20,
@@ -95,7 +109,7 @@ const props = defineProps({
   },
 });
 
-const { pageSize, total, scrollTop, refresherLoad, lowerThreshold, refresherEnabled, refresherThreshold, refresherDefaultStyle, refresherBackground } = toRefs(props);
+const { pageSize, total, scrollTop, customClass, customStyle, refresherLoad, lowerThreshold, refresherEnabled, refresherThreshold, refresherDefaultStyle, refresherBackground } = toRefs(props);
 
 const defaultOption = reactive({});
 

+ 90 - 0
src/components/oa-touch/index.vue

@@ -0,0 +1,90 @@
+<template>
+  <view @touchstart="fingerstart" @touchend="fingerend">
+    <slot name="content"> </slot>
+  </view>
+</template>
+
+<script setup>
+import { onReady, onLoad, onShow, onNavigationBarButtonTap } from "@dcloudio/uni-app";
+import { ref, onMounted, inject, shallowRef, reactive, watchEffect, getCurrentInstance, toRefs } from "vue";
+
+const emit = defineEmits(["touchChange"]);
+const props = defineProps({});
+const {} = toRefs(props);
+
+const startData = ref({
+  clientX: "",
+  clientY: "",
+});
+const updDistance = ref(100);
+const lrDistance = ref(50);
+const topMed = ref("");
+const bottomMed = ref("");
+const leftMed = ref("");
+const rightMed = ref("");
+
+/**
+ * @当按下去的时候
+ */
+function fingerstart(e) {
+  // 记录 距离可视区域左上角 左边距 和 上边距
+  startData.value.clientX = e.changedTouches[0].clientX;
+  startData.value.clientY = e.changedTouches[0].clientY;
+}
+
+/**
+ * @当抬起来的时候
+ */
+function fingerend(e) {
+  // 当前位置 减去 按下位置 计算 距离
+  const subX = e.changedTouches[0].clientX - startData.value.clientX;
+  const subY = e.changedTouches[0].clientY - startData.value.clientY;
+  if (subY > updDistance.value || subY < -updDistance.value) {
+    if (subY > updDistance.value) {
+      bottomscroll(subY);
+    } else if (subY < -updDistance.value) {
+      topscroll(subY);
+    }
+  } else {
+    if (subX > lrDistance.value) {
+      rightscroll(subX);
+    } else if (subX < -lrDistance.value) {
+      leftscroll(subX);
+    } else {
+      console.log("无效操作");
+    }
+  }
+}
+/**
+ * @上滑触发
+ */
+function topscroll(dista) {
+  topMed.value ? (topMed.value = dista) : (topMed.value = null);
+  // console.log("触发了上滑方法!");
+  emit("change", "上滑");
+}
+/**
+ * @下滑触发
+ */
+function bottomscroll(dista) {
+  bottomMed.value ? (bottomMed.value = dista) : (bottomMed.value = null);
+  // console.log("触发了下滑方法!");
+  emit("change", "下滑");
+}
+/**
+ * @右滑触发
+ */
+function rightscroll(dista) {
+  rightMed.value ? (rightMed.value = dista) : (rightMed.value = null);
+  // console.log("触发了右滑方法!");
+  emit("change", "右滑");
+}
+/**
+ * @左滑触发
+ */
+function leftscroll(dista) {
+  leftMed.value ? (leftMed.value = dista) : (leftMed.value = null);
+  // console.log("触发了左滑方法!");
+  emit("change", "左滑");
+}
+</script>

+ 1 - 1
src/config.js

@@ -1,7 +1,7 @@
 // 应用全局配置
 export default {
   //#ifdef APP-PLUS || MP-WEIXIN
-  baseUrl: "http://mobile.usky.cn:8099/prod-api",
+  baseUrl: "http://manager.usky.cn/prod-api",
   //#endif
 
   //#ifdef H5

+ 3 - 0
src/main.js

@@ -19,6 +19,7 @@ import oaTimeLine from "@/components/oa-timeLine/index"
 import oaTimeLineItem from "@/components/oa-timeLine-item/index"
 import oaUpload from "@/components/oa-upload/index"
 import oaScroll from "@/components/oa-scroll/index"
+import oaTouch from "@/components/oa-touch/index"
 
 export function createApp() {
   const app = createSSRApp(App);
@@ -30,6 +31,8 @@ export function createApp() {
   app.component('oa-timeLine-item', oaTimeLineItem)
   app.component('oa-upload', oaUpload)
   app.component('oa-scroll', oaScroll)
+  app.component('oa-touch', oaTouch)
+
 
   // 挂载全局json导出
   app.component("downloadExcel", JsonExcel);

+ 19 - 3
src/manifest.json

@@ -2,8 +2,8 @@
     "name" : "综合智慧云",
     "appid" : "__UNI__36DE3A0",
     "description" : "综合智慧云",
-    "versionName" : "2.0.4",
-    "versionCode" : 6,
+    "versionName" : "2.0.5",
+    "versionCode" : 7,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {
@@ -31,7 +31,8 @@
             "Barcode" : {},
             "Camera" : {},
             "Fingerprint" : {},
-            "Contacts" : {}
+            "Contacts" : {},
+            "Push" : {}
         },
         /* 应用发布信息 */
         "distribute" : {
@@ -110,6 +111,21 @@
                         "appkey_ios" : "ffc71dfd4e576596027f8f45a1b8fb2f",
                         "appkey_android" : "ffc71dfd4e576596027f8f45a1b8fb2f"
                     }
+                },
+                "push" : {
+                    "unipush" : {
+                        "version" : "2",
+                        "offline" : false,
+                        "icons" : {
+                            "small" : {
+                                "hdpi" : "unpackage/res/push/36x36.png",
+                                "ldpi" : "unpackage/res/push/18x18.png",
+                                "mdpi" : "unpackage/res/push/24x24.png",
+                                "xhdpi" : "unpackage/res/push/48x48.png",
+                                "xxhdpi" : "unpackage/res/push/72x72.png"
+                            }
+                        }
+                    }
                 }
             },
             "icons" : {

+ 21 - 0
src/pages.json

@@ -535,6 +535,27 @@
             "navigationBarTitleText": "设施详情",
             "enablePullDownRefresh": false
           }
+        },
+        {
+          "path": "alarmManage/index",
+          "style": {
+            "navigationBarTitleText": "告警管理",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "alarmManage/alarmDetailsList/index",
+          "style": {
+            "navigationBarTitleText": "",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "alarmManage/alarmDetails/index",
+          "style": {
+            "navigationBarTitleText": "告警处理",
+            "enablePullDownRefresh": false
+          }
         }
       ]
     }

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

@@ -0,0 +1,207 @@
+<template>
+  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+    <view class="alarmDetails-container">
+      <view class="flex bg-white padding-15 margin-b-15">
+        <image style="width: 40px; height: 40px; margin: auto 15px auto 0" :src="dataArray.typeImg ? dataArray.typeImg : '/static/images/404.png'" mode="aspectFill"></image>
+
+        <view style="margin: auto auto auto 0">
+          <view style="font-size: 15px"> {{ dataArray.deviceName }} </view>
+        </view>
+
+        <view style="margin: auto 0 auto 0">
+          <view style="font-size: 15px" :style="`color:${dataArray.handleStatus == 1 ? '#16bf00' : 'red'}`">
+            {{ dataArray.handleStatus == 1 ? "已处理" : dataArray.handleStatus == 0 ? "未处理" : "" }}
+          </view>
+        </view>
+      </view>
+
+      <view class="bg-white padding-15 margin-b-15">
+        <uni-section class="block margin-b-10" title="基本信息" type="line"></uni-section>
+
+        <view class="tableType3 padding-0">
+          <u-row v-for="da in dataList" :key="da">
+            <u-col span="4">
+              <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>
+            </u-col>
+          </u-row>
+        </view>
+      </view>
+
+      <view class="bg-white padding-15 margin-b-15">
+        <uni-section class="block margin-b-10" title="处理内容" type="line"></uni-section>
+
+        <view>
+          <u-radio-group v-model="handleRange" placement="row" v-if="dataArray.handleStatus != 1">
+            <u-radio
+              v-for="han in handleRangeList"
+              :key="han"
+              :activeColor="proxy.$settingStore.themeColor.color"
+              :label="han.label"
+              :name="han.value"
+              style="margin: 0 15px 15px 0"
+              :labelSize="13"
+              :iconSize="10"
+            ></u-radio>
+          </u-radio-group>
+
+          <u--textarea v-model="handleContent" placeholder="备注信息,最多可输入50个字" :count="true" maxlength="50" style="margin: 0 0 15px 0" :disabled="dataArray.handleStatus == 1"></u--textarea>
+        </view>
+
+        <view class="flex" v-if="dataArray.handleStatus != 1">
+          <u-button
+            type="primary"
+            text="误报"
+            shape="circle"
+            :customStyle="{
+              width: '80px',
+              height: '30px',
+              marginRight: '15px',
+            }"
+            @click="handleSubmit(1)"
+          ></u-button>
+          <u-button
+            type="primary"
+            text="非误报"
+            shape="circle"
+            :customStyle="{
+              width: '80px',
+              height: '30px',
+              marginLeft: '15px',
+            }"
+            @click="handleSubmit(0)"
+          ></u-button>
+        </view>
+      </view>
+    </view>
+  </scroll-view>
+</template>
+
+<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 { baseAlarmList, baseAlarm } from "@/api/business/fireIot/alarmManage.js";
+
+const { proxy } = getCurrentInstance();
+
+const dataArray = ref({});
+const dataList = ref([
+  {
+    title: "设备名称",
+    value: "",
+  },
+  {
+    title: "设备地址",
+    value: "",
+  },
+  {
+    title: "告警等级",
+    value: "",
+  },
+  {
+    title: "告警信息",
+    value: "",
+  },
+  {
+    title: "告警时间",
+    value: "",
+  },
+]);
+
+const deviceName = ref("");
+const alarmTime = ref("");
+const pageSize = ref(20);
+const current = ref(1);
+const total = ref(0);
+
+const handleContent = ref("");
+const handleRange = ref(1);
+const handleRangeList = ref([
+  {
+    label: "单个处理",
+    value: 1,
+  },
+  {
+    label: "批量处理",
+    value: 0,
+  },
+]);
+
+/**
+ * @页面初始化
+ */
+function init() {
+  selectListApi();
+}
+
+/**
+ * @列表查询
+ * @api接口查询
+ */
+function selectListApi() {
+  baseAlarmList({
+    deviceName: deviceName.value,
+    startTime: alarmTime.value,
+    endTime: alarmTime.value,
+    current: current.value,
+    size: pageSize.value,
+  }).then((requset) => {
+    if (requset.status === "SUCCESS") {
+      dataArray.value = requset.data.records[0];
+      dataList.value[0].value = requset.data.records[0].deviceName;
+      dataList.value[1].value = requset.data.records[0].alarmAddress;
+      dataList.value[2].value = requset.data.records[0].alarmGrade + "级";
+      dataList.value[3].value = requset.data.records[0].alarmContent;
+      dataList.value[4].value = requset.data.records[0].alarmTime;
+      total.value = requset.data.total;
+    }
+  });
+}
+
+/**
+ * @提交
+ */
+function handleSubmit(alarmFalse) {
+  baseAlarm({
+    id: dataArray.value.id,
+    deviceId: dataArray.value.deviceId,
+    alarmType: dataArray.value.alarmType,
+    handleContent: handleContent.value,
+    alarmFalse: alarmFalse,
+    handleRange: handleRange.value,
+  }).then((requset) => {
+    if (requset.status === "SUCCESS") {
+      proxy.$tab.redirectTo("/pages/common/success/index");
+    }
+  });
+}
+
+onReady(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+
+onLoad((options) => {
+  if ("deviceName" in options) {
+    deviceName.value = options.deviceName;
+  }
+
+  if ("alarmTime" in options) {
+    alarmTime.value = options.alarmTime;
+  }
+
+  init();
+});
+</script>
+
+<style lang="scss" scoped>
+:deep(.u-textarea__field) {
+  font-size: 13px;
+}
+</style>

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

@@ -0,0 +1,154 @@
+<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=" 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"
+  >
+    <template #default>
+      <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 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>
+              <view style="min-width: 20%; margin-bottom: 5px; text-align: right; padding-right: 15px" :style="`color:${base.handleStatus == 1 ? '#16bf00' : 'red'}`">
+                {{ base.handleStatus == 1 ? "已处理" : "未处理" }}
+              </view>
+              <view style="min-width: 50%; padding-right: 15px">{{ base.alarmContent }}</view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </template>
+  </oa-scroll>
+</template>
+
+<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 { baseAlarmList } from "@/api/business/fireIot/alarmManage.js";
+
+const { proxy } = getCurrentInstance();
+const publicStore = publicStores();
+
+const tabsList = ref([
+  {
+    name: "全部",
+    value: "",
+  },
+  {
+    name: "未处理",
+    value: 0,
+  },
+  {
+    name: "已处理",
+    value: 1,
+  },
+]);
+const tabsCurrent = ref(0);
+
+const dataList = ref([]);
+const productCode = ref("");
+const productName = ref("");
+const pageSize = ref(20);
+const current = ref(1);
+const total = ref(0);
+
+/**
+ * @页面初始化
+ */
+function init() {
+  selectListApi();
+}
+
+/**
+ * @列表查询
+ * @api接口查询
+ */
+function selectListApi() {
+  baseAlarmList({
+    productCode: productCode.value,
+    handleStatus: tabsList.value[tabsCurrent.value].value,
+    current: current.value,
+    size: pageSize.value,
+  }).then((requset) => {
+    if (requset.status === "SUCCESS") {
+      dataList.value = requset.data.records;
+      total.value = requset.data.total;
+
+      uni.setNavigationBarTitle({
+        title: `${productName.value}(${total.value})`,
+      });
+    }
+  });
+}
+
+/**
+ * @跳转详情事件
+ */
+function handleToDetails(e) {
+  proxy.$tab.navigateTo(`/pages/business/fireIot/alarmManage/alarmDetails/index?deviceName=${e.deviceName}&alarmTime=${e.alarmTime}`);
+}
+
+/**
+ * @scrollView加载数据
+ */
+function load() {
+  pageSize.value += 10;
+  init();
+}
+
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  pageSize.value = 20;
+  total.value = 0;
+  init();
+}
+
+/**
+ * @tabs点击事件
+ */
+function tabsClick(e) {
+  tabsCurrent.value = e.index;
+  init();
+}
+
+onReady(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+
+onLoad((options) => {
+  if ("productName" in options) {
+    productName.value = options.productName;
+  }
+  if ("productCode" in options) {
+    productCode.value = options.productCode;
+    init();
+  }
+});
+</script>
+
+<style lang="scss" scoped>
+.alarmDetailsList-container {
+}
+</style>

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

@@ -0,0 +1,99 @@
+<template>
+  <oa-scroll
+    customClass="bg-white scroll-height"
+    :pageSize="pageSize"
+    :total="total"
+    :refresherLoad="true"
+    :refresherLoadTitle="false"
+    :refresherEnabled="true"
+    :refresherDefaultStyle="'none'"
+    :refresherThreshold="44"
+    :refresherBackground="'#f5f6f7'"
+    @load="load"
+    @refresh="refresh"
+    :data-theme="'theme-' + proxy.$settingStore.themeColor.type"
+  >
+    <template #default>
+      <view class="deviceSelect">
+        <u-grid :border="true">
+          <u-grid-item v-for="(base, index) in dataList" :key="index" @click="handleToDetails(base.productCode, base.productName)">
+            <u-badge type="primary" max="9999" :value="base.total" :showZero="true" :absolute="true" :offset="[10, 10, 0, 0]"></u-badge>
+            <image class="margin-b-15" style="width: 40px; height: 40px; margin-top: 35px" :src="base.typeImg" mode="aspectFill"></image>
+            <text class="margin-b-15 grid-text text-ellipsis">{{ base.productName }}</text>
+          </u-grid-item>
+        </u-grid>
+      </view>
+    </template>
+  </oa-scroll>
+</template>
+
+<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 { dmpProductInfo, baseAlarmTypeList } from "@/api/business/fireIot/alarmManage.js";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const pageSize = ref(20);
+const current = ref(1);
+const total = ref(0);
+
+/**
+ * @页面初始化
+ */
+function init() {
+  baseAlarmTypeList({ productName: "", current: current.value, size: pageSize.value }).then((requset) => {
+    if (requset.status === "SUCCESS") {
+      dmpProductInfo({ current: current.value, size: 200000 }).then((requset1) => {
+        if (requset1.status === "SUCCESS") {
+          requset.data.records.forEach((e) => {
+            requset1.data.records.forEach((el) => {
+              if (e.productCode === el.productCode) {
+                e.typeImg = el.typeImg;
+              }
+
+              if (!e.typeImg) {
+                e.typeImg = "/static/images/404.png";
+              }
+            });
+          });
+
+          dataList.value = requset.data.records;
+          total.value = requset.data.total;
+        }
+      });
+    }
+  });
+}
+
+function handleToDetails(productCode, productName) {
+  proxy.$tab.navigateTo(`/pages/business/fireIot/alarmManage/alarmDetailsList/index?productCode=${productCode}&productName=${productName}`);
+}
+
+/**
+ * @scrollView加载数据
+ */
+function load() {
+  pageSize.value += 10;
+  init();
+}
+
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  pageSize.value = 20;
+  total.value = 0;
+  init();
+}
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+
+  init();
+});
+</script>

+ 50 - 41
src/pages/business/fireIot/deviceSelect/components/deviceDetailsList.vue

@@ -1,31 +1,43 @@
 <template>
-  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name" @scrolltolower="scrolltolower">
-    <u-sticky class="example-body" style="top: 0px">
-      <view class="padding-sm padding-tb-10" :class="'bg-' + proxy.$settingStore.themeColor.name">
-        <u--input
-          v-model="deviceName"
-          placeholder="搜索"
-          prefixIcon="search"
-          prefixIconStyle="font-size: 22px;color: #909399"
-          customStyle="height:35px;background-color:#f5f6fa;"
-          @confirm="init()"
-          clearable
-        ></u--input>
-      </view>
-    </u-sticky>
-
-    <u-empty v-show="dataList.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
-    <view v-if="dataList.length > 0" class="deviceDetailsList-container">
-      <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="title">{{ base.deviceName }}</view>
+  <u-sticky class="example-body" style="top: 0px">
+    <view class="padding-sm padding-tb-10" :class="'bg-' + proxy.$settingStore.themeColor.name">
+      <u--input
+        v-model="deviceName"
+        placeholder="搜索"
+        prefixIcon="search"
+        prefixIconStyle="font-size: 22px;color: #909399"
+        customStyle="height:35px;background-color:#f5f6fa;"
+        @confirm="init()"
+        clearable
+      ></u--input>
+    </view>
+  </u-sticky>
+
+  <oa-scroll
+    customClass="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"
+  >
+    <template #default>
+      <view class="deviceDetailsList-container">
+        <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="title">{{ base.deviceName }}</view>
+            </view>
           </view>
         </view>
       </view>
-      <u-loadmore :status="status" @click="scrolltolower" />
-    </view>
-  </scroll-view>
+    </template>
+  </oa-scroll>
 </template>
 
 <script setup>
@@ -39,7 +51,6 @@ const { proxy } = getCurrentInstance();
 const publicStore = publicStores();
 
 const dataList = ref([]);
-const status = ref("loadmore");
 const deviceName = ref("");
 const productId = ref("");
 const productName = ref("");
@@ -68,10 +79,6 @@ function dmpDeviceInfoApi() {
       uni.setNavigationBarTitle({
         title: `${productName.value}(${total.value})`,
       });
-
-      if (total.value == dataList.value.length) {
-        status.value = "nomore";
-      }
     }
   });
 }
@@ -87,19 +94,21 @@ function handleToDevice(array) {
 }
 
 /**
- * @scrollView触底事件
+ * @scrollView加载数据
  */
-function scrolltolower(e) {
-  if (total.value == dataList.value.length) {
-    status.value = "nomore";
-    return;
-  } else {
-    status.value = "loading";
-    pageSize.value += 10;
-    setTimeout(() => {
-      dmpDeviceInfoApi();
-    }, 1000);
-  }
+function load() {
+  pageSize.value += 10;
+  init();
+}
+
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  deviceName.value = "";
+  pageSize.value = 20;
+  total.value = 0;
+  init();
 }
 
 onReady(() => {});

+ 45 - 14
src/pages/business/fireIot/deviceSelect/index.vue

@@ -1,16 +1,30 @@
 <template>
-  <scroll-view class="bg-white scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.type">
-    <u-empty v-if="dataList.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
-    <view v-else class="deviceSelect">
-      <u-grid :border="true">
-        <u-grid-item v-for="(base, index) in dataList" :key="index" @click="handleToDevice(base.id, base.productName)">
-          <u-badge type="primary" max="9999" :value="base.deviceCount" :showZero="true" :absolute="true" :offset="[10, 10, 0, 0]"></u-badge>
-          <image class="margin-b-15" style="width: 40px; height: 40px; margin-top: 35px" :src="base.typeImg" mode="aspectFill"></image>
-          <text class="margin-b-15 grid-text">{{ base.productName }}</text>
-        </u-grid-item>
-      </u-grid>
-    </view>
-  </scroll-view>
+  <oa-scroll
+    customClass="bg-white scroll-height"
+    :pageSize="pageSize"
+    :total="total"
+    :refresherLoad="true"
+    :refresherLoadTitle="false"
+    :refresherEnabled="true"
+    :refresherDefaultStyle="'none'"
+    :refresherThreshold="44"
+    :refresherBackground="'#f5f6f7'"
+    @load="load"
+    @refresh="refresh"
+    :data-theme="'theme-' + proxy.$settingStore.themeColor.type"
+  >
+    <template #default>
+      <view class="deviceSelect">
+        <u-grid :border="true">
+          <u-grid-item v-for="(base, index) in dataList" :key="index" @click="handleToDevice(base.id, base.productName)">
+            <u-badge type="primary" max="9999" :value="base.deviceCount" :showZero="true" :absolute="true" :offset="[10, 10, 0, 0]"></u-badge>
+            <image class="margin-b-15" style="width: 40px; height: 40px; margin-top: 35px" :src="base.typeImg" mode="aspectFill"></image>
+            <text class="margin-b-15 grid-text text-ellipsis">{{ base.productName }}</text>
+          </u-grid-item>
+        </u-grid>
+      </view>
+    </template>
+  </oa-scroll>
 </template>
 
 <script setup>
@@ -23,7 +37,7 @@ import { dmpProductInfo } from "@/api/business/fireIot/deviceSelect/index";
 const { proxy } = getCurrentInstance();
 
 const dataList = ref([]);
-const pageSize = ref(1000);
+const pageSize = ref(20);
 const current = ref(1);
 const total = ref(0);
 
@@ -34,7 +48,7 @@ function init() {
   dmpProductInfo({ productName: "", current: current.value, size: pageSize.value }).then((requset) => {
     if (requset.status === "SUCCESS") {
       requset.data.records.forEach((el) => {
-        if ("typeImg" in el == false) {
+        if (!el.typeImg) {
           el.typeImg = "/static/images/404.png";
         }
 
@@ -53,6 +67,23 @@ function handleToDevice(id, productName) {
   proxy.$tab.navigateTo(`/pages/business/fireIot/deviceSelect/components/deviceDetailsList?id=${id}&productName=${productName}`);
 }
 
+/**
+ * @scrollView加载数据
+ */
+function load() {
+  pageSize.value += 10;
+  init();
+}
+
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  pageSize.value = 20;
+  total.value = 0;
+  init();
+}
+
 onShow(() => {
   //调用系统主题颜色
   proxy.$settingStore.systemThemeColor([1]);

+ 7 - 11
src/pages/business/fireIot/facilitiesGather/index.vue

@@ -1,6 +1,6 @@
 <template>
   <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
-    <view id="facilitiesGather" v-if="!successBool">
+    <view id="facilitiesGather">
       <view class="centerOne">
         <!-- <view class="title"> </view> -->
 
@@ -85,7 +85,7 @@
           </view>
         </u--form>
 
-        <view style="padding-bottom: 100px"> </view>
+        <view class="app-padding-bottom"> </view>
 
         <view class="app-button-fixed">
           <view class="app-flex">
@@ -110,13 +110,6 @@
         @change="changeHandler"
       ></u-picker>
     </view>
-
-    <view v-else>
-      <view style="display: flex">
-        <image style="width: 120px; height: 120px; margin: 50px auto 20px auto" src="@/static/images/unitInfoCollection/success.png" />
-      </view>
-      <view style="text-align: center; font-weight: 600">提交成功</view>
-    </view>
   </scroll-view>
 </template>
 
@@ -247,7 +240,6 @@ const dataList = reactive({
 const { sexList, form, rules, actionIndex, actionIndex1, actionTitle, actionShow, actionDefaultIndex, actionsList } = toRefs(dataList);
 
 const uForm = ref(null);
-const successBool = ref(false);
 
 /**
  * @初始化
@@ -387,7 +379,11 @@ function handleSubmit(type) {
           param.extendData.push({ key: el.key, value: el.value });
         });
 
-        add(param).then((requset) => {});
+        add(param).then((requset) => {
+          if (requset.status === "SUCCESS") {
+            proxy.$tab.navigateTo(`/pages/common/success/index?showNow=${false}`);
+          }
+        });
       })
       .catch((errors) => {
         uni.$u.toast("校验失败");

+ 4 - 8
src/pages/business/fireIot/facilitiesView/facilitiesDetails.vue

@@ -129,10 +129,6 @@ const deviceId = ref(undefined);
 const buildNum = ref(undefined);
 const dataArray = ref({});
 const dataList = ref([
-  {
-    title: "所属部门",
-    value: "",
-  },
   {
     title: "设施类型",
     value: "",
@@ -161,9 +157,9 @@ function init() {
   facilityInfo({ id: id.value }).then((requset) => {
     if (requset.status === "SUCCESS") {
       dataArray.value = requset.data[0];
-      dataList.value[2].value = requset.data[0].facilityNum ? requset.data[0].facilityNum : "无";
-      dataList.value[3].value = requset.data[0].address ? requset.data[0].address : "无";
-      dataList.value[4].value = requset.data[0].createTime ? requset.data[0].createTime.replace("T", " ") : requset.data[0].createTime;
+      dataList.value[1].value = requset.data[0].facilityNum ? requset.data[0].facilityNum : "无";
+      dataList.value[2].value = requset.data[0].address ? requset.data[0].address : "无";
+      dataList.value[3].value = requset.data[0].createTime ? requset.data[0].createTime.replace("T", " ") : requset.data[0].createTime;
     }
   });
 
@@ -204,7 +200,7 @@ onShow(() => {
 
 onLoad((options) => {
   if ("typeName" in options) {
-    dataList.value[1].value = options.typeName;
+    dataList.value[0].value = options.typeName;
   }
   if ("id" in options) {
     id.value = parseInt(options.id);

+ 50 - 42
src/pages/business/fireIot/facilitiesView/facilitiesDetailsList.vue

@@ -1,32 +1,43 @@
 <template>
-  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name" @scrolltolower="scrolltolower">
-    <u-sticky class="example-body" style="top: 0px">
-      <view class="padding-sm padding-tb-10" :class="'bg-' + proxy.$settingStore.themeColor.name">
-        <u--input
-          v-model="facilityName"
-          placeholder="搜索"
-          prefixIcon="search"
-          prefixIconStyle="font-size: 22px;color: #909399"
-          customStyle="height:35px;background-color:#f5f6fa;"
-          @confirm="init()"
-          clearable
-        ></u--input>
-      </view>
-    </u-sticky>
-
-    <u-empty v-show="dataList.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
-    <view v-if="dataList.length > 0" class="facilitiesDetailsList-container">
-      <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="title">{{ base.facilityName }}</view>
+  <u-sticky class="example-body" style="top: 0px">
+    <view class="padding-sm padding-tb-10" :class="'bg-' + proxy.$settingStore.themeColor.name">
+      <u--input
+        v-model="facilityName"
+        placeholder="搜索"
+        prefixIcon="search"
+        prefixIconStyle="font-size: 22px;color: #909399"
+        customStyle="height:35px;background-color:#f5f6fa;"
+        @confirm="init()"
+        clearable
+      ></u--input>
+    </view>
+  </u-sticky>
+
+  <oa-scroll
+    customClass="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"
+  >
+    <template #default>
+      <view class="facilitiesDetailsList-container">
+        <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="title">{{ base.facilityName }}</view>
+            </view>
           </view>
         </view>
       </view>
-
-      <u-loadmore :status="status" @click="scrolltolower" />
-    </view>
-  </scroll-view>
+    </template>
+  </oa-scroll>
 </template>
 
 <script setup>
@@ -39,7 +50,6 @@ import { baseGgpFacility } from "@/api/business/fireIot/facilitiesView/index";
 const { proxy } = getCurrentInstance();
 
 const dataList = ref([]);
-const status = ref("loadmore");
 const facilityType = ref(undefined);
 const facilityName = ref("");
 const facilityTypeName = ref("");
@@ -69,10 +79,6 @@ function selectListApi() {
 
       dataList.value = requset.data.records;
       total.value = requset.data.total;
-
-      if (total.value == dataList.value.length) {
-        status.value = "nomore";
-      }
     }
   });
 }
@@ -85,19 +91,21 @@ function handleToDevice(id) {
 }
 
 /**
- * @scrollView触底事件
+ * @scrollView加载数据
  */
-function scrolltolower(e) {
-  if (total.value == dataList.value.length) {
-    status.value = "nomore";
-    return;
-  } else {
-    status.value = "loading";
-    pageSize.value += 10;
-    setTimeout(() => {
-      selectListApi();
-    }, 1000);
-  }
+function load() {
+  pageSize.value += 10;
+  init();
+}
+
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  facilityName.value = "";
+  pageSize.value = 20;
+  total.value = 0;
+  init();
 }
 
 onReady(() => {});

+ 43 - 24
src/pages/business/fireIot/facilitiesView/index.vue

@@ -1,35 +1,47 @@
 <template>
-  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
-    <view class="flex padding-tb-sm bg-white">
-      <view class="padding-lr-sm text-center" style="width: 50%">设施类型:{{ typeNum || 0 }}</view>
-      <view class="divider-default"></view>
-      <view class="padding-lr-sm text-center" style="width: 50%">设施总数:{{ facilityNum || 0 }}</view>
-    </view>
-
-    <view class="flex bg-white margin-lr-sm margin-top-sm padding-sm shadow-default radius" v-for="(data, index) in dataList" :key="index">
-      <view class="margin-right-sm" style="margin-top: auto; margin-bottom: auto" @click="handleToDevice(data.id, data.typeName)">
-        <image style="width: 40px; height: 40px" :src="data.typeImg ? data.typeImg : '/static/images/404.png'" mode="aspectFill"></image>
+  <oa-scroll
+    customClass="scroll-height"
+    :refresherLoad="false"
+    :refresherLoadTitle="false"
+    :refresherEnabled="true"
+    :refresherDefaultStyle="'none'"
+    :refresherThreshold="44"
+    :refresherBackground="'#f5f6f7'"
+    @refresh="refresh"
+    :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
+  >
+    <template #default>
+      <view class="flex padding-tb-sm bg-white">
+        <view class="padding-lr-sm text-center" style="width: 50%">设施类型:{{ typeNum || 0 }}</view>
+        <view class="divider-default"></view>
+        <view class="padding-lr-sm text-center" style="width: 50%">设施总数:{{ facilityNum || 0 }}</view>
       </view>
 
-      <view style="width: 100%" @click="handleToDevice(data.id, data.typeName)">
-        <view class="flex margin-bottom-xl">
-          <view class="text-dfl text-bold">{{ data.typeName }}</view>
-          <view style="font-size: 14px; margin-top: auto; margin-right: auto">({{ data.typeFacilityNum || 0 }})</view>
+      <view class="flex bg-white margin-lr-sm margin-top-sm padding-sm shadow-default radius" v-for="(data, index) in dataList" :key="index">
+        <view class="margin-right-sm" style="margin-top: auto; margin-bottom: auto" @click="handleToDevice(data.id, data.typeName)">
+          <image style="width: 40px" :src="data.typeImg ? data.typeImg : '/static/images/404.png'" mode="widthFix"></image>
         </view>
-        <view>
-          <view class="flex">
-            <view style="font-size: 14px; width: 33.33%">正常:{{ data.normalFacilityNum || 0 }}</view>
-            <view style="font-size: 14px; width: 33.33%">维修:{{ data.upkeepFacilityNum || 0 }}</view>
-            <view style="font-size: 14px; width: 33.33%">关闭:{{ data.closeFacilityNum || 0 }}</view>
+
+        <view style="width: 100%" @click="handleToDevice(data.id, data.typeName)">
+          <view class="flex margin-bottom-xl">
+            <view class="text-dfl text-bold">{{ data.typeName }}</view>
+            <view style="font-size: 14px; margin-top: auto; margin-right: auto">({{ data.typeFacilityNum || 0 }})</view>
+          </view>
+          <view>
+            <view class="flex">
+              <view style="font-size: 14px; width: 33.33%">正常:{{ data.normalFacilityNum || 0 }}</view>
+              <view style="font-size: 14px; width: 33.33%">维修:{{ data.upkeepFacilityNum || 0 }}</view>
+              <view style="font-size: 14px; width: 33.33%">关闭:{{ data.closeFacilityNum || 0 }}</view>
+            </view>
           </view>
         </view>
-      </view>
 
-      <view style="margin-top: auto; margin-bottom: auto" @click="handleToMap(data.id)">
-        <view class="iconfont ucicon-app-map icon" :style="{ color: proxy.$settingStore.themeColor.color, fontSize: '22px' }"></view>
+        <view style="margin-top: auto; margin-bottom: auto" @click="handleToMap(data.id)">
+          <view class="iconfont ucicon-app-map icon" :style="{ color: proxy.$settingStore.themeColor.color, fontSize: '22px' }"></view>
+        </view>
       </view>
-    </view>
-  </scroll-view>
+    </template>
+  </oa-scroll>
 </template>
 
 <script setup>
@@ -63,6 +75,13 @@ function init() {
   });
 }
 
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  init();
+}
+
 /**
  * @设施详情列表跳转点击事件
  */

+ 61 - 120
src/pages/business/mhxf/deviceManage/index.vue

@@ -12,63 +12,65 @@
   </u-sticky>
 
   <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name" style="padding-bottom: 44px">
-    <view class="deviceManage" @touchstart="fingerstart" @touchend="fingerend">
-      <uni-swipe-action>
-        <uni-swipe-action-item class="bg-white">
-          <view class="content">
-            <view class="block padding-10">
-              <u-input v-model="dataInput" placeholder="请输入设备编号" @blur="blur" shape="circle" prefixIcon="search" prefixIconStyle="color: #0c7bf9"> </u-input>
-            </view>
-
-            <u-empty v-if="dataList.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
-
-            <u-collapse @change="change" @close="close" @open="open" accordion v-else>
-              <u-collapse-item class="uCollapseItem" v-for="da in dataList" :key="da">
-                <template #title>
-                  <view class="flex">
-                    <view class="cu-avatar lg" style="margin: 0 10px auto 0; background-color: rgba(0, 0, 0, 0)">
-                      <image class="image-bg" style="width: 80rpx; height: 80rpx" src="@/static/images/deviceManage/1.png"></image>
-                    </view>
-                    <view style="width: 100%">
-                      <view class="flex" style="color: #000000">
-                        <view>设备编号:{{ da.deviceCode }}</view>
-                        <view class="deviceStatus" v-if="da.deviceStatus == 0" style="background-color: #aeaeae"> 离线 </view>
-                        <view class="deviceStatus" v-else-if="da.deviceStatus == 1" style="background-color: #12c100"> 正常 </view>
-                        <view class="deviceStatus" v-else-if="da.deviceStatus == 2" style="background-color: #ff1313"> 故障 </view>
-                        <view class="deviceStatus" v-else style="background-color: #0d88f0"> 告警 </view>
-                      </view>
-                      <view style="display: flex; font-size: 14px; color: #666666; margin: 10px 0">
-                        <view style="width: 50%; word-break: break-all">监测对象:{{ da.installAddress }}</view>
-                        <view style="width: 50%; word-break: break-all; padding-left: 10px">所属单位:{{ da.companyName }}</view>
+    <oa-touch class="deviceManage" @change="touchChange">
+      <template #content>
+        <uni-swipe-action>
+          <uni-swipe-action-item class="bg-white">
+            <view class="content">
+              <view class="block padding-10">
+                <u-input v-model="dataInput" placeholder="请输入设备编号" @blur="blur" shape="circle" prefixIcon="search" prefixIconStyle="color: #0c7bf9"> </u-input>
+              </view>
+
+              <u-empty v-if="dataList.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
+
+              <u-collapse @change="change" @close="close" @open="open" accordion v-else>
+                <u-collapse-item class="uCollapseItem" v-for="da in dataList" :key="da">
+                  <template #title>
+                    <view class="flex">
+                      <view class="cu-avatar lg" style="margin: 0 10px auto 0; background-color: rgba(0, 0, 0, 0)">
+                        <image class="image-bg" style="width: 80rpx; height: 80rpx" src="@/static/images/deviceManage/1.png"></image>
                       </view>
-                      <view style="display: flex; font-size: 14px; color: #666666">
-                        <view style="width: 50%; word-break: break-all">负责人:{{ da.linkPerson }}</view>
-                        <view style="width: 50%; word-break: break-all; padding-left: 10px">联系电话:{{ da.linkPhone }}</view>
+                      <view style="width: 100%">
+                        <view class="flex" style="color: #000000">
+                          <view>设备编号:{{ da.deviceCode }}</view>
+                          <view class="deviceStatus" v-if="da.deviceStatus == 0" style="background-color: #aeaeae"> 离线 </view>
+                          <view class="deviceStatus" v-else-if="da.deviceStatus == 1" style="background-color: #12c100"> 正常 </view>
+                          <view class="deviceStatus" v-else-if="da.deviceStatus == 2" style="background-color: #ff1313"> 故障 </view>
+                          <view class="deviceStatus" v-else style="background-color: #0d88f0"> 告警 </view>
+                        </view>
+                        <view style="display: flex; font-size: 14px; color: #666666; margin: 10px 0">
+                          <view style="width: 50%; word-break: break-all">监测对象:{{ da.installAddress }}</view>
+                          <view style="width: 50%; word-break: break-all; padding-left: 10px">所属单位:{{ da.companyName }}</view>
+                        </view>
+                        <view style="display: flex; font-size: 14px; color: #666666">
+                          <view style="width: 50%; word-break: break-all">负责人:{{ da.linkPerson }}</view>
+                          <view style="width: 50%; word-break: break-all; padding-left: 10px">联系电话:{{ da.linkPhone }}</view>
+                        </view>
                       </view>
                     </view>
-                  </view>
-                </template>
+                  </template>
 
-                <view class="u-collapse-content">
-                  <!-- <view style="display: flex; flex-wrap: wrap; margin-left: 5%">
+                  <view class="u-collapse-content">
+                    <!-- <view style="display: flex; flex-wrap: wrap; margin-left: 5%">
                     <view style="width: 50%; height: 30px; line-height: 30px" v-for="ch in da.dataList" :key="ch">
                       <span>{{ ch.label }}:</span>
                       <span :style="ch.value === '正常' ? 'color:#12C100' : 'color:#FF0101'">{{ ch.value }}</span>
                     </view>
                   </view> -->
-                  <view style="display: flex; flex-wrap: wrap; margin-left: 5%">
-                    <view style="width: 50%; height: 30px; line-height: 30px" v-for="ch in da.dataList" :key="ch">
-                      <span>{{ ch.portName }}:</span>
-                      <span>{{ ch.portData }}</span>
+                    <view style="display: flex; flex-wrap: wrap; margin-left: 5%">
+                      <view style="width: 50%; height: 30px; line-height: 30px" v-for="ch in da.dataList" :key="ch">
+                        <span>{{ ch.portName }}:</span>
+                        <span>{{ ch.portData }}</span>
+                      </view>
                     </view>
                   </view>
-                </view>
-              </u-collapse-item>
-            </u-collapse>
-          </view>
-        </uni-swipe-action-item>
-      </uni-swipe-action>
-    </view>
+                </u-collapse-item>
+              </u-collapse>
+            </view>
+          </uni-swipe-action-item>
+        </uni-swipe-action>
+      </template>
+    </oa-touch>
   </scroll-view>
 </template>
 
@@ -109,17 +111,6 @@ const list = ref([
   },
 ]);
 
-const startData = ref({
-  clientX: "",
-  clientY: "",
-});
-const updDistance = ref(100);
-const lrDistance = ref(50);
-const topMed = ref("");
-const bottomMed = ref("");
-const leftMed = ref("");
-const rightMed = ref("");
-
 /**
  * @tabs点击事件
  */
@@ -130,74 +121,24 @@ function tabsClick(e) {
 }
 
 /**
- * @当按下去的时候
- */
-function fingerstart(e) {
-  // 记录 距离可视区域左上角 左边距 和 上边距
-  startData.value.clientX = e.changedTouches[0].clientX;
-  startData.value.clientY = e.changedTouches[0].clientY;
-}
-/**
- * @当抬起来的时候
+ * @滑动change事件
  */
-function fingerend(e) {
-  // 当前位置 减去 按下位置 计算 距离
-  const subX = e.changedTouches[0].clientX - startData.value.clientX;
-  const subY = e.changedTouches[0].clientY - startData.value.clientY;
-  if (subY > updDistance.value || subY < -updDistance.value) {
-    if (subY > updDistance.value) {
-      bottomscroll(subY);
-    } else if (subY < -updDistance.value) {
-      topscroll(subY);
+function touchChange(e) {
+  if (e == "右滑") {
+    if (current.value >= 1) {
+      current.value--;
+    } else {
+      current.value = list.value.length - 1;
     }
-  } else {
-    if (subX > lrDistance.value) {
-      rightscroll(subX);
-    } else if (subX < -lrDistance.value) {
-      leftscroll(subX);
+  } else if (e == "左滑") {
+    if (current.value < list.value.length - 1) {
+      current.value++;
     } else {
-      console.log("无效操作");
+      current.value = 0;
     }
   }
 }
-/**
- * @上滑触发
- */
-function topscroll(dista) {
-  topMed.value ? (topMed.value = dista) : (topMed.value = null);
-  console.log("触发了上滑方法!");
-}
-/**
- * @下滑触发
- */
-function bottomscroll(dista) {
-  bottomMed.value ? (bottomMed.value = dista) : (bottomMed.value = null);
-  console.log("触发了下滑方法!");
-}
-/**
- * @右滑触发
- */
-function rightscroll(dista) {
-  rightMed.value ? (rightMed.value = dista) : (rightMed.value = null);
-  console.log("触发了右滑方法!");
-  if (current.value >= 1) {
-    current.value--;
-  } else {
-    current.value = list.value.length - 1;
-  }
-}
-/**
- * @左滑触发
- */
-function leftscroll(dista) {
-  leftMed.value ? (leftMed.value = dista) : (leftMed.value = null);
-  console.log("触发了左滑方法!");
-  if (current.value < list.value.length - 1) {
-    current.value++;
-  } else {
-    current.value = 0;
-  }
-}
+
 function blur(e) {
   if (dataInput.value) {
     classifySearch({ systemType: 5, deviceCode: dataInput.value });
@@ -274,7 +215,7 @@ onMounted(() => {});
 }
 
 .deviceManage {
-  height: calc(100% - 45px);
+  height: 100%;
   background-color: #ffffff;
 
   .content {

+ 41 - 34
src/pages/business/mhxf/fireReport/index.vue

@@ -1,23 +1,35 @@
 <template>
-  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name" @scrolltolower="scrolltolower">
-    <view class="fireReport">
-      <u-empty v-if="dataList.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
-      <view class="reportContent" v-else>
-        <view class="contentDom" v-for="(li, index) in dataList" :key="index">
-          <view style="margin: auto 10px auto 0" @click="handleSelect()">
-            <u-image src="@/static/images/fireReport/icon1.png" width="13px" height="13px"></u-image>
-          </view>
-          <view style="margin: 0 auto 0 0" @click="handleSelect(li.reportPath)">
-            <view>{{ li.reportName }}</view>
-          </view>
-          <view>
-            <view style="color: #3c9cff; cursor: pointer" @click="handleDownload(li.reportPath)">下载报告</view>
+  <oa-scroll
+    customClass="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"
+  >
+    <template #default>
+      <view class="fireReport">
+        <view class="reportContent">
+          <view class="contentDom" v-for="(li, index) in dataList" :key="index">
+            <view style="margin: auto 10px auto 0" @click="handleSelect()">
+              <u-image src="@/static/images/fireReport/icon1.png" width="13px" height="13px"></u-image>
+            </view>
+            <view style="margin: 0 auto 0 0" @click="handleSelect(li.reportPath)">
+              <view>{{ li.reportName }}</view>
+            </view>
+            <view>
+              <view style="color: #3c9cff; cursor: pointer" @click="handleDownload(li.reportPath)">下载报告</view>
+            </view>
           </view>
         </view>
-        <u-loadmore :status="status" @click="scrolltolower" />
       </view>
-    </view>
-  </scroll-view>
+    </template>
+  </oa-scroll>
 </template>
 
 <script setup>
@@ -33,7 +45,6 @@ const { proxy } = getCurrentInstance();
 
 const dataRes = ref(true);
 const dataList = ref([]);
-const status = ref("loadmore");
 const pageSize = ref(20);
 const pageNum = ref(1);
 const total = ref(0);
@@ -59,10 +70,6 @@ function reportInfoListApi() {
   }).then((res) => {
     dataList.value = res.data.records;
     total.value = res.data.total;
-
-    if (total.value == dataList.value.length) {
-      status.value = "nomore";
-    }
   });
 }
 
@@ -140,19 +147,20 @@ function handleDownload(reportPath) {
 }
 
 /**
- * @scrollView触底事件
+ * @scrollView加载数据
  */
-function scrolltolower(e) {
-  if (total.value == dataList.value.length) {
-    status.value = "nomore";
-    return;
-  } else {
-    status.value = "loading";
-    pageSize.value += 10;
-    setTimeout(() => {
-      reportInfoListApi();
-    }, 1000);
-  }
+function load() {
+  pageSize.value += 10;
+  reportInfoListApi();
+}
+
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  pageSize.value = 20;
+  total.value = 0;
+  reportInfoListApi();
 }
 
 // 自定义导航事件
@@ -181,7 +189,6 @@ onMounted(() => {});
 
 <style lang="scss">
 .fireReport {
-  height: calc(100vh - 44px);
   background-color: #f7f7f7;
   .reportContent {
     .contentDom {

+ 39 - 100
src/pages/business/mhxf/informationSelect-test/index.vue

@@ -3,34 +3,36 @@
     <u-tabs :list="list" :current="current" @click="tabsClick" lineColor="#333" :activeStyle="{ color: '#333' }" :inactiveStyle="{ color: '#909399' }"></u-tabs>
   </u-sticky>
 
-  <view class="bg-white informationSelect" @touchstart="fingerstart" @touchend="fingerend">
-    <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>
+  <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>
-          <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>
-  </view>
+          <!-- 各类查询 end -->
+        </uni-swipe-action-item>
+      </uni-swipe-action>
+    </template>
+  </oa-touch>
 </template>
 
 <script setup>
@@ -113,87 +115,24 @@ const list = ref([
   },
 ]);
 
-const startData = ref({
-  clientX: "",
-  clientY: "",
-});
-const updDistance = ref(100);
-const lrDistance = ref(50);
-const topMed = ref("");
-const bottomMed = ref("");
-const leftMed = ref("");
-const rightMed = ref("");
-const classifyData = ref([]); //警情查询数据存储
-
-/**
- * @当按下去的时候
- */
-function fingerstart(e) {
-  // 记录 距离可视区域左上角 左边距 和 上边距
-  startData.value.clientX = e.changedTouches[0].clientX;
-  startData.value.clientY = e.changedTouches[0].clientY;
-}
 /**
- * @当抬起来的时候
+ * @滑动change事件
  */
-function fingerend(e) {
-  // 当前位置 减去 按下位置 计算 距离
-  const subX = e.changedTouches[0].clientX - startData.value.clientX;
-  const subY = e.changedTouches[0].clientY - startData.value.clientY;
-  if (subY > updDistance.value || subY < -updDistance.value) {
-    if (subY > updDistance.value) {
-      bottomscroll(subY);
-    } else if (subY < -updDistance.value) {
-      topscroll(subY);
+function touchChange(e) {
+  if (e == "右滑") {
+    if (current.value >= 1) {
+      current.value--;
+    } else {
+      current.value = list.value.length - 1;
     }
-  } else {
-    if (subX > lrDistance.value) {
-      rightscroll(subX);
-    } else if (subX < -lrDistance.value) {
-      leftscroll(subX);
+  } else if (e == "左滑") {
+    if (current.value < list.value.length - 1) {
+      current.value++;
     } else {
-      console.log("无效操作");
+      current.value = 0;
     }
   }
 }
-/**
- * @上滑触发
- */
-function topscroll(dista) {
-  topMed.value ? (topMed.value = dista) : (topMed.value = null);
-  console.log("触发了上滑方法!");
-}
-/**
- * @下滑触发
- */
-function bottomscroll(dista) {
-  bottomMed.value ? (bottomMed.value = dista) : (bottomMed.value = null);
-  console.log("触发了下滑方法!");
-}
-/**
- * @右滑触发
- */
-function rightscroll(dista) {
-  rightMed.value ? (rightMed.value = dista) : (rightMed.value = null);
-  console.log("触发了右滑方法!");
-  if (current.value >= 1) {
-    current.value--;
-  } else {
-    current.value = list.value.length - 1;
-  }
-}
-/**
- * @左滑触发
- */
-function leftscroll(dista) {
-  leftMed.value ? (leftMed.value = dista) : (leftMed.value = null);
-  console.log("触发了左滑方法!");
-  if (current.value < list.value.length - 1) {
-    current.value++;
-  } else {
-    current.value = 0;
-  }
-}
 
 function blur(e) {
   if (dataInput.value) {

+ 40 - 101
src/pages/business/mhxf/informationSelect/index.vue

@@ -4,34 +4,36 @@
   </u-sticky>
 
   <scroll-view class="bg-white scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name" style="padding-bottom: 44px">
-    <view class="informationSelect" @touchstart="fingerstart" @touchend="fingerend">
-      <uni-swipe-action>
-        <uni-swipe-action-item>
-          <!-- 各类查询 start -->
-          <view class="tableType3">
-            <u-input class="block margin-b-10" 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>
+    <oa-touch class="informationSelect" @change="touchChange">
+      <template #content>
+        <uni-swipe-action>
+          <uni-swipe-action-item>
+            <!-- 各类查询 start -->
+            <view class="tableType3">
+              <u-input class="block margin-b-10" 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>
             </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>
-    </view>
+            <!-- 各类查询 end -->
+          </uni-swipe-action-item>
+        </uni-swipe-action>
+      </template>
+    </oa-touch>
   </scroll-view>
 </template>
 
@@ -49,9 +51,9 @@ const publicStore = publicStores(); //全局公共Store
 const dataInput = ref("");
 const current = ref(0);
 const classifyUrl = ref("");
-const classifyCode = ref("");
 const placeholderText = ref("");
 const dataRes = ref(1);
+const classifyData = ref([]); //警情查询数据存储
 
 const list = ref([
   {
@@ -115,87 +117,24 @@ const list = ref([
   },
 ]);
 
-const startData = ref({
-  clientX: "",
-  clientY: "",
-});
-const updDistance = ref(100);
-const lrDistance = ref(50);
-const topMed = ref("");
-const bottomMed = ref("");
-const leftMed = ref("");
-const rightMed = ref("");
-const classifyData = ref([]); //警情查询数据存储
-
-/**
- * @当按下去的时候
- */
-function fingerstart(e) {
-  // 记录 距离可视区域左上角 左边距 和 上边距
-  startData.value.clientX = e.changedTouches[0].clientX;
-  startData.value.clientY = e.changedTouches[0].clientY;
-}
 /**
- * @当抬起来的时候
+ * @滑动change事件
  */
-function fingerend(e) {
-  // 当前位置 减去 按下位置 计算 距离
-  const subX = e.changedTouches[0].clientX - startData.value.clientX;
-  const subY = e.changedTouches[0].clientY - startData.value.clientY;
-  if (subY > updDistance.value || subY < -updDistance.value) {
-    if (subY > updDistance.value) {
-      bottomscroll(subY);
-    } else if (subY < -updDistance.value) {
-      topscroll(subY);
+function touchChange(e) {
+  if (e == "右滑") {
+    if (current.value >= 1) {
+      current.value--;
+    } else {
+      current.value = list.value.length - 1;
     }
-  } else {
-    if (subX > lrDistance.value) {
-      rightscroll(subX);
-    } else if (subX < -lrDistance.value) {
-      leftscroll(subX);
+  } else if (e == "左滑") {
+    if (current.value < list.value.length - 1) {
+      current.value++;
     } else {
-      console.log("无效操作");
+      current.value = 0;
     }
   }
 }
-/**
- * @上滑触发
- */
-function topscroll(dista) {
-  topMed.value ? (topMed.value = dista) : (topMed.value = null);
-  console.log("触发了上滑方法!");
-}
-/**
- * @下滑触发
- */
-function bottomscroll(dista) {
-  bottomMed.value ? (bottomMed.value = dista) : (bottomMed.value = null);
-  console.log("触发了下滑方法!");
-}
-/**
- * @右滑触发
- */
-function rightscroll(dista) {
-  rightMed.value ? (rightMed.value = dista) : (rightMed.value = null);
-  console.log("触发了右滑方法!");
-  if (current.value >= 1) {
-    current.value--;
-  } else {
-    current.value = list.value.length - 1;
-  }
-}
-/**
- * @左滑触发
- */
-function leftscroll(dista) {
-  leftMed.value ? (leftMed.value = dista) : (leftMed.value = null);
-  console.log("触发了左滑方法!");
-  if (current.value < list.value.length - 1) {
-    current.value++;
-  } else {
-    current.value = 0;
-  }
-}
 
 function blur(e) {
   if (dataInput.value) {

+ 164 - 234
src/pages/business/mhxf/needMatter/index.vue

@@ -4,182 +4,184 @@
   </u-sticky>
 
   <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name" style="padding-bottom: 44px">
-    <view class="needMatter" @touchstart="fingerstart" @touchend="fingerend">
-      <u-empty v-if="classifyData.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
-
-      <view class="content" v-else>
-        <u-collapse>
-          <u-collapse-item v-for="(cl, index) in classifyData" :key="index">
-            <template #title>
-              <view style="display: flex; line-height: 25px">
-                <view style="padding-top: 4px">
-                  <u--image src="/static/images/needMatter/icon1.png" width="14px" height="15px"></u--image>
-                </view>
-                <view style="padding: 0 10px; white-space: nowrap; font-size: 16px">
-                  <view>待办通知</view>
-                  <view>建议完成限期:</view>
-                  <view style="font-size: 14px; color: #666666">{{ cl.reformId }}</view>
-                </view>
-                <view style="width: 100%; text-align: center; font-size: 16px">
-                  <view
-                    :style="{
-                      color:
+    <oa-touch class="needMatter" @change="touchChange">
+      <template #content>
+        <u-empty v-if="classifyData.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
+
+        <view class="content" v-else>
+          <u-collapse>
+            <u-collapse-item v-for="(cl, index) in classifyData" :key="index">
+              <template #title>
+                <view style="display: flex; line-height: 25px">
+                  <view style="padding-top: 4px">
+                    <u--image src="/static/images/needMatter/icon1.png" width="14px" height="15px"></u--image>
+                  </view>
+                  <view style="padding: 0 10px; white-space: nowrap; font-size: 16px">
+                    <view>待办通知</view>
+                    <view>建议完成限期:</view>
+                    <view style="font-size: 14px; color: #666666">{{ cl.reformId }}</view>
+                  </view>
+                  <view style="width: 100%; text-align: center; font-size: 16px">
+                    <view
+                      :style="{
+                        color:
+                          cl.reformStatus == 1
+                            ? '#0887F8'
+                            : cl.reformStatus == 2
+                            ? '#23DEDC'
+                            : cl.reformStatus == 3
+                            ? '#16BF00'
+                            : cl.reformStatus == 4
+                            ? '#F94343'
+                            : cl.reformStatus == 5
+                            ? '#9D40F3'
+                            : '',
+                      }"
+                    >
+                      {{
                         cl.reformStatus == 1
-                          ? '#0887F8'
+                          ? "已接收"
                           : cl.reformStatus == 2
-                          ? '#23DEDC'
+                          ? "进行中"
                           : cl.reformStatus == 3
-                          ? '#16BF00'
+                          ? "待办完成"
                           : cl.reformStatus == 4
-                          ? '#F94343'
+                          ? "审核不通过"
                           : cl.reformStatus == 5
-                          ? '#9D40F3'
-                          : '',
-                    }"
-                  >
-                    {{
-                      cl.reformStatus == 1
-                        ? "已接收"
-                        : cl.reformStatus == 2
-                        ? "进行中"
-                        : cl.reformStatus == 3
-                        ? "待办完成"
-                        : cl.reformStatus == 4
-                        ? "审核不通过"
-                        : cl.reformStatus == 5
-                        ? "审核通过"
-                        : ""
-                    }}
+                          ? "审核通过"
+                          : ""
+                      }}
+                    </view>
+                    <view style="text-align: left">{{ cl.limitTime }}</view>
+                    <view style="font-size: 14px; color: #666666">{{ cl.sendTime }}</view>
                   </view>
-                  <view style="text-align: left">{{ cl.limitTime }}</view>
-                  <view style="font-size: 14px; color: #666666">{{ cl.sendTime }}</view>
                 </view>
-              </view>
-            </template>
-            <view class="u-collapse-content">
-              <view class="tableType1" style="margin-bottom: 10px">
-                <u-row>
-                  <u-col span="2">
-                    <view>序号</view>
-                  </u-col>
-                  <u-col span="5.5">
-                    <view>待办项</view>
-                  </u-col>
-                  <u-col span="4.5">
-                    <view>原因</view>
-                  </u-col>
-                </u-row>
-                <u-row v-for="(co, index) in cl.reformPart.data" :key="index">
-                  <u-col span="2">
-                    <view>{{ index + 1 }}</view>
-                  </u-col>
-                  <u-col span="5.5">
-                    <view>{{ co.item }}</view>
-                  </u-col>
-                  <u-col span="4.5">
-                    <view>{{ co.reason }}</view>
-                  </u-col>
-                </u-row>
-              </view>
+              </template>
+              <view class="u-collapse-content">
+                <view class="tableType1" style="margin-bottom: 10px">
+                  <u-row>
+                    <u-col span="2">
+                      <view>序号</view>
+                    </u-col>
+                    <u-col span="5.5">
+                      <view>待办项</view>
+                    </u-col>
+                    <u-col span="4.5">
+                      <view>原因</view>
+                    </u-col>
+                  </u-row>
+                  <u-row v-for="(co, index) in cl.reformPart.data" :key="index">
+                    <u-col span="2">
+                      <view>{{ index + 1 }}</view>
+                    </u-col>
+                    <u-col span="5.5">
+                      <view>{{ co.item }}</view>
+                    </u-col>
+                    <u-col span="4.5">
+                      <view>{{ co.reason }}</view>
+                    </u-col>
+                  </u-row>
+                </view>
 
-              <view v-if="cl.reformStatus == 1">
-                <u-steps current="0" dot>
-                  <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
-                  <u-steps-item style="text-align: center" title="进行中" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
-                  <u-steps-item style="text-align: center" title="待审核" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''"></u-steps-item>
-                </u-steps>
+                <view v-if="cl.reformStatus == 1">
+                  <u-steps current="0" dot>
+                    <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
+                    <u-steps-item style="text-align: center" title="进行中" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
+                    <u-steps-item style="text-align: center" title="待审核" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''"></u-steps-item>
+                  </u-steps>
 
-                <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
-                  <u-button type="primary" text="去整改" shape="circle" @click="handleSubmit(cl, '去整改')" customStyle="width: 60px; height: 23px"></u-button>
+                  <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
+                    <u-button type="primary" text="去整改" shape="circle" @click="handleSubmit(cl, '去整改')" customStyle="width: 60px; height: 23px"></u-button>
+                  </view>
                 </view>
-              </view>
 
-              <view v-if="cl.reformStatus == 2">
-                <u-steps current="1" dot>
-                  <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
-                  <u-steps-item style="text-align: center" title="进行中" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
-                  <u-steps-item style="text-align: center" title="待审核" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''"></u-steps-item>
-                </u-steps>
+                <view v-if="cl.reformStatus == 2">
+                  <u-steps current="1" dot>
+                    <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
+                    <u-steps-item style="text-align: center" title="进行中" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
+                    <u-steps-item style="text-align: center" title="待审核" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''"></u-steps-item>
+                  </u-steps>
 
-                <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
-                  <u-button type="primary" text="填报" shape="circle" @click="handleSubmit(cl, '填报')" customStyle="width: 60px; height: 23px"></u-button>
+                  <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
+                    <u-button type="primary" text="填报" shape="circle" @click="handleSubmit(cl, '填报')" customStyle="width: 60px; height: 23px"></u-button>
+                  </view>
                 </view>
-              </view>
 
-              <view v-if="cl.reformStatus == 3">
-                <u-steps current="1" dot>
-                  <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
-                  <u-steps-item style="text-align: center" title="待办完成" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
-                  <u-steps-item style="text-align: center" title="待审核" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''"></u-steps-item>
-                </u-steps>
-              </view>
+                <view v-if="cl.reformStatus == 3">
+                  <u-steps current="1" dot>
+                    <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
+                    <u-steps-item style="text-align: center" title="待办完成" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
+                    <u-steps-item style="text-align: center" title="待审核" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''"></u-steps-item>
+                  </u-steps>
+                </view>
 
-              <view v-if="cl.reformStatus == 4">
-                <u-steps current="2" dot>
-                  <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
-                  <u-steps-item style="text-align: center" title="待办完成" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
-                  <u-steps-item style="text-align: center" title="审核不通过" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''" error></u-steps-item>
-                </u-steps>
+                <view v-if="cl.reformStatus == 4">
+                  <u-steps current="2" dot>
+                    <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
+                    <u-steps-item style="text-align: center" title="待办完成" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
+                    <u-steps-item style="text-align: center" title="审核不通过" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''" error></u-steps-item>
+                  </u-steps>
 
-                <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
-                  <view>备注:{{ cl.reviewRemark ? cl.reviewRemark : "无" }}</view>
-                </view>
+                  <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
+                    <view>备注:{{ cl.reviewRemark ? cl.reviewRemark : "无" }}</view>
+                  </view>
 
-                <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
-                  <u-button type="primary" text="去整改" shape="circle" @click="handleSubmit(cl, '去整改')" customStyle="width: 60px; height: 23px"></u-button>
+                  <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
+                    <u-button type="primary" text="去整改" shape="circle" @click="handleSubmit(cl, '去整改')" customStyle="width: 60px; height: 23px"></u-button>
+                  </view>
                 </view>
-              </view>
 
-              <view v-if="cl.reformStatus == 5">
-                <u-steps current="2" dot>
-                  <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
-                  <u-steps-item style="text-align: center" title="待办完成" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
-                  <u-steps-item style="text-align: center" title="审核通过" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''"></u-steps-item>
-                </u-steps>
-
-                <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
-                  <view style="display: flex">
-                    <view style="white-space: nowrap">整改资料:</view>
-                    <view style="width: 100%">
-                      <view style="display: flex" v-for="(i, index) in 5" :key="index">
-                        <view>{{ cl["reformPathName" + (index + 1)] }}</view>
-                        <!-- <view style="margin: auto 0 auto auto">
+                <view v-if="cl.reformStatus == 5">
+                  <u-steps current="2" dot>
+                    <u-steps-item style="text-align: center" title="已接收" :desc="cl.sendTime ? cl.sendTime.replace(' ', '\n') : ''"> </u-steps-item>
+                    <u-steps-item style="text-align: center" title="待办完成" :desc="cl.reformTime ? cl.reformTime.replace(' ', '\n') : ''"></u-steps-item>
+                    <u-steps-item style="text-align: center" title="审核通过" :desc="cl.reviewTime ? cl.reviewTime.replace(' ', '\n') : ''"></u-steps-item>
+                  </u-steps>
+
+                  <view style="font-size: 14px; line-height: 20px; margin-top: 10px">
+                    <view style="display: flex">
+                      <view style="white-space: nowrap">整改资料:</view>
+                      <view style="width: 100%">
+                        <view style="display: flex" v-for="(i, index) in 5" :key="index">
+                          <view>{{ cl["reformPathName" + (index + 1)] }}</view>
+                          <!-- <view style="margin: auto 0 auto auto">
                         <u--image src="/static/images/needMatter/icon2.png" width="15px" height="15px"></u--image>
                       </view> -->
+                        </view>
                       </view>
                     </view>
+                    <u-line style="margin: 5px 0" color="#E5E5E5"></u-line>
+                    <view>备注:{{ cl.reviewRemark ? cl.reviewRemark : "无" }}</view>
                   </view>
-                  <u-line style="margin: 5px 0" color="#E5E5E5"></u-line>
-                  <view>备注:{{ cl.reviewRemark ? cl.reviewRemark : "无" }}</view>
                 </view>
               </view>
-            </view>
-          </u-collapse-item>
-        </u-collapse>
-
-        <view>
-          <u-modal
-            :show="modalShow"
-            title="填报(火灾报警系统)"
-            :showCancelButton="true"
-            :showConfirmButton="true"
-            :closeOnClickOverlay="true"
-            @close="modalShow = false"
-            @cancel="modalShow = false"
-            @confirm="handleConfirm"
-          >
-            <view style="width: 100%">
-              <uni-section class="block margin-b-10" title="图片上传:" type="line">
-                <u-upload :fileList="fileList" name="6" @afterRead="afterRead" multiple :maxCount="5" width="80" height="80"> </u-upload>
-              </uni-section>
-              <uni-section class="block margin-b-10" title="备注:" type="line">
-                <u--textarea v-model="textValue" placeholder="请输入内容"></u--textarea>
-              </uni-section>
-            </view>
-          </u-modal>
+            </u-collapse-item>
+          </u-collapse>
+
+          <view>
+            <u-modal
+              :show="modalShow"
+              title="填报(火灾报警系统)"
+              :showCancelButton="true"
+              :showConfirmButton="true"
+              :closeOnClickOverlay="true"
+              @close="modalShow = false"
+              @cancel="modalShow = false"
+              @confirm="handleConfirm"
+            >
+              <view style="width: 100%">
+                <uni-section class="block margin-b-10" title="图片上传:" type="line">
+                  <u-upload :fileList="fileList" name="6" @afterRead="afterRead" multiple :maxCount="5" width="80" height="80"> </u-upload>
+                </uni-section>
+                <uni-section class="block margin-b-10" title="备注:" type="line">
+                  <u--textarea v-model="textValue" placeholder="请输入内容"></u--textarea>
+                </uni-section>
+              </view>
+            </u-modal>
+          </view>
         </view>
-      </view>
-    </view>
+      </template>
+    </oa-touch>
   </scroll-view>
 </template>
 
@@ -223,37 +225,17 @@ const list = ref([
   {
     id: 3,
     name: "待办完成",
-    badge: {
-      // value: 5,
-    },
   },
   {
     id: 4,
     name: "审核不通过",
-    badge: {
-      // value: 5,
-    },
   },
   {
     id: 5,
     name: "审核通过",
-    badge: {
-      // value: 5,
-    },
   },
 ]);
 
-const startData = ref({
-  clientX: "",
-  clientY: "",
-});
-const updDistance = ref(100);
-const lrDistance = ref(50);
-const topMed = ref("");
-const bottomMed = ref("");
-const leftMed = ref("");
-const rightMed = ref("");
-
 /**
  * @填报
  * @去整改
@@ -351,73 +333,23 @@ function uploadFilePromise(el) {
 }
 
 /**
- * @当按下去的时候
- */
-function fingerstart(e) {
-  // 记录 距离可视区域左上角 左边距 和 上边距
-  startData.value.clientX = e.changedTouches[0].clientX;
-  startData.value.clientY = e.changedTouches[0].clientY;
-}
-
-/**
- * @当抬起来的时候
+ * @滑动change事件
  */
-function fingerend(e) {
-  // 当前位置 减去 按下位置 计算 距离
-  const subX = e.changedTouches[0].clientX - startData.value.clientX;
-  const subY = e.changedTouches[0].clientY - startData.value.clientY;
-  if (subY > updDistance.value || subY < -updDistance.value) {
-    if (subY > updDistance.value) {
-      bottomscroll(subY);
-    } else if (subY < -updDistance.value) {
-      topscroll(subY);
+function touchChange(e) {
+  if (e == "右滑") {
+    if (current.value >= 1) {
+      current.value--;
+    } else {
+      current.value = list.value.length - 1;
     }
-  } else {
-    if (subX > lrDistance.value) {
-      rightscroll(subX);
-    } else if (subX < -lrDistance.value) {
-      leftscroll(subX);
+    goSearch();
+  } else if (e == "左滑") {
+    if (current.value < list.value.length - 1) {
+      current.value++;
     } else {
-      console.log("无效操作");
+      current.value = 0;
     }
-  }
-}
-/**
- * @上滑触发
- */
-function topscroll(dista) {
-  topMed.value ? (topMed.value = dista) : (topMed.value = null);
-  console.log("触发了上滑方法!");
-}
-/**
- * @下滑触发
- */
-function bottomscroll(dista) {
-  bottomMed.value ? (bottomMed.value = dista) : (bottomMed.value = null);
-  console.log("触发了下滑方法!");
-}
-/**
- * @右滑触发
- */
-function rightscroll(dista) {
-  rightMed.value ? (rightMed.value = dista) : (rightMed.value = null);
-  console.log("触发了右滑方法!");
-  if (current.value >= 1) {
-    current.value--;
-  } else {
-    current.value = list.value.length - 1;
-  }
-}
-/**
- * @左滑触发
- */
-function leftscroll(dista) {
-  leftMed.value ? (leftMed.value = dista) : (leftMed.value = null);
-  console.log("触发了左滑方法!");
-  if (current.value < list.value.length - 1) {
-    current.value++;
-  } else {
-    current.value = 0;
+    goSearch();
   }
 }
 
@@ -470,8 +402,6 @@ async function classifySearch(params) {
   });
 }
 
-watchEffect(() => {});
-
 // 自定义导航事件
 onNavigationBarButtonTap((e) => {
   if (e.float == "right") {

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

@@ -63,7 +63,7 @@
           </view>
         </u--form>
 
-        <view style="padding-bottom: 70px"> </view>
+        <view class="app-padding-bottom"> </view>
 
         <view class="app-button-fixed">
           <u-button class="app-buttom" type="primary" @click="handleSubmit('下一步')" shape="circle"> 下一步 </u-button>
@@ -244,7 +244,7 @@
           </view>
         </u--form>
 
-        <view style="padding-bottom: 70px">
+        <view class="app-padding-bottom">
           <u-button type="primary" style="width: 25%; height: 25px; margin-top: 10px" @click="addSubmit('建筑')" shape="circle" icon="plus" size="mini"> 添加建筑 </u-button>
         </view>
 

+ 8 - 0
src/pages/common/applicationInfo/index.vue

@@ -12,6 +12,7 @@
           <view class="content-area-center radius bg-white">
             <view class="content-area-center-title">{{ all.typeTitle }}</view>
             <view class="content-area-center-cont">{{ all.listTitle }}</view>
+            <view class="content-area-center-buttom text-sm">查看详情 </view>
           </view>
         </view>
       </view>
@@ -22,6 +23,7 @@
           <view class="content-area-center radius bg-white">
             <view class="content-area-center-title">{{ all.typeTitle }}</view>
             <view class="content-area-center-cont">{{ all.listTitle }}</view>
+            <view class="content-area-center-buttom text-sm">查看详情 </view>
           </view>
         </view>
       </view>
@@ -161,6 +163,7 @@ onNavigationBarButtonTap((e) => {
     &-center {
       margin: 0 10px 20px 10px;
       padding: 15px;
+      overflow: hidden;
 
       &-title {
         margin: 0 0 15px 0;
@@ -170,6 +173,11 @@ onNavigationBarButtonTap((e) => {
       &-cont {
         font-weight: 600;
       }
+
+      &-buttom {
+        float: right;
+        color: #2a98ff;
+      }
     }
   }
 }

+ 20 - 33
src/pages/common/customManage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <oa-scroll
-    class="scroll-height"
+    customClass=" scroll-height"
     :pageSize="pageSize"
     :total="total"
     :refresherLoad="true"
@@ -40,28 +40,24 @@
             <view class="menu-item-box" style="font-size: 16px; font-weight: 600; color: #000000">
               <view> {{ data.projectName }} </view>
             </view>
-            <view class="menu-item-box" style="font-size: 13px">
-              <view style="width: 50%"> 项目编号:{{ data.projectId }} </view>
-              <view style="width: 50%"> 到期时间:{{ data.expireTime ? data.expireTime.split("T")[0] : "" }} </view>
-            </view>
-            <view class="menu-item-box" style="font-size: 13px">
-              <view style="width: 50%"> 客户负责人:{{ data.customPerson }} </view>
-              <view style="width: 50%"> 维保费:¥{{ data.maintainAmount }} </view>
-            </view>
-            <view class="menu-item-box" style="font-size: 13px">
-              <view style="width: 50%; display: flex">
-                客户电话:{{ data.phone }}
+            <view class="menu-item-box" style="font-size: 13px; flex-flow: row wrap">
+              <view style="min-width: 50%"> 项目编号:{{ data.projectId }} </view>
+              <view style="min-width: 50%"> 到期时间:{{ data.expireTime ? data.expireTime.split("T")[0] : "" }} </view>
+              <view style="min-width: 50%"> 客户负责人:{{ data.customPerson }} </view>
+              <view style="min-width: 50%"> 维保费:¥{{ data.maintainAmount }} </view>
+              <view style="min-width: 50%; display: flex; white-space: nowrap">
+                <view style="margin-right: 5px">客户电话:{{ data.phone }}</view>
                 <view class="iconfont ucicon-a-copy menu-icon" style="font-size: 14px; color: #909399; margin-left: 5px" @click="copy(data.phone)"> </view>
+                <view class="iconfont ucicon-dial menu-icon" style="font-size: 14px; color: #909399; margin-left: 5px" @click="proxy.$common.makePhoneCall(data.phone)"> </view>
               </view>
-              <view style="width: 50%">
+              <view style="min-width: 50%">
                 状态:
                 <span :style="`color: ${data.maintainStatus == 1 ? '#16bf00' : 'red'} `">
                   {{ data.maintainStatus == 1 ? "使用中" : "已到期" }}
                 </span>
               </view>
-            </view>
-            <view class="menu-item-box" style="font-size: 13px">
-              <view> 客户地址: {{ data.customAddress }} </view>
+              <view style="min-width: 50%"> 客户地址: {{ data.customAddress }} </view>
+              <view style="min-width: 50%">销售负责人:{{ data.salePerson }}</view>
             </view>
           </view>
         </view>
@@ -91,26 +87,24 @@ const data = reactive({
       value: "",
     },
     {
-      label: "7天",
-      value: 7,
+      label: "30天内到期",
+      value: 30,
     },
     {
-      label: "30天",
-      value: 30,
+      label: "60天内到期",
+      value: 60,
     },
     {
-      label: "90天",
+      label: "90天内到期",
       value: 90,
     },
   ],
   radioValue: "",
-  startTime: "",
-  endTime: "",
   projectName: "",
   dropdownShow: false,
 });
 
-const { radioList, radioValue, startTime, endTime, projectName, dropdownShow } = toRefs(data);
+const { radioList, radioValue, projectName, dropdownShow } = toRefs(data);
 
 /**
  * @初始化
@@ -128,8 +122,8 @@ function selectListApi() {
     projectName: projectName.value,
     current: current.value,
     size: pageSize.value,
-    endTime: endTime.value,
-    startTime: startTime.value,
+    endTime: radioValue.value ? proxy.$common.getDays(-radioValue.value)[0] + " 00:00:00" : "",
+    startTime: radioValue.value ? proxy.$common.getDays(-radioValue.value)[1] + " 00:00:00" : "",
   }).then((requset) => {
     if (requset.status === "SUCCESS") {
       dataList.value = requset.data.records;
@@ -166,11 +160,6 @@ function copy(value) {
  */
 function radioChange(e) {
   radioValue.value = e;
-  if (e) {
-    let getDays = proxy.$common.getDays(e);
-    startTime.value = getDays.startTime;
-    endTime.value = getDays.endTime;
-  }
   selectListApi();
 }
 
@@ -187,8 +176,6 @@ function load() {
  */
 function refresh() {
   radioValue.value = "";
-  startTime.value = "";
-  endTime.value = "";
   pageSize.value = 20;
   total.value = 0;
   selectListApi();

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

@@ -31,6 +31,7 @@
           </view>
           <view class="menu-item-box">
             <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>
           <view class="menu-item-box">
             <view> 公司邮箱:admin@chinausky.com</view>
@@ -107,7 +108,7 @@
         </view>
       </view>
 
-      <view style="padding-bottom: 105px"> </view>
+      <view class="app-padding-bottom"> </view>
 
       <view class="app-button-fixed">
         <u-button class="app-buttom" type="primary" @click="handleSubmit('提交')" shape="circle"> 提交 </u-button>
@@ -135,7 +136,7 @@
           <view class="menu-item-box">
             <view style="width: 90px">开户行</view>
             <view style="color: #666666">上海银行徐家汇支行</view>
-          </view> 
+          </view>
         </view>
         <view class="list-cell">
           <view class="menu-item-box">
@@ -145,7 +146,7 @@
         </view>
 
         <view class="list-cell">
-          <view class="menu-item-box">
+          <view class="menu-item-box" style="justify-content: center">
             <u-button style="width: auto" @click="copy(`上海永天科技股份有限公司\n16523652265865685\n上海银行徐家汇支行`)" shape="circle"> 复制汇款信息 </u-button>
           </view>
         </view>
@@ -407,5 +408,6 @@ onNavigationBarButtonTap((e) => {
 }
 
 .invoicing-container {
+  height: calc(100vh - env(safe-area-inset-top) - 44px) !important;
 }
 </style>

+ 7 - 2
src/pages/common/success/index.vue

@@ -7,7 +7,7 @@
       <view style="text-align: center; font-weight: 600">提交成功</view>
     </view>
 
-    <view class="app-button-fixed">
+    <view class="app-button-fixed" v-if="showNow" style="box-shadow: 0px 0px 15px 0 rgba(0, 0, 0, 0)">
       <u-button class="app-buttom" type="primary" @click="navigateTo()" shape="circle"> 返回 </u-button>
     </view>
   </view>
@@ -23,6 +23,7 @@ import { getToken, setToken, removeToken } from "@/utils/auth";
 const publicStore = publicStores();
 
 const { proxy } = getCurrentInstance();
+const showNow = ref(true);
 
 /**
  * @返回上一级
@@ -31,7 +32,11 @@ function navigateTo() {
   proxy.$tab.navigateBack(1);
 }
 
-onLoad((options) => {});
+onLoad((options) => {
+  if ("showNow" in options) {
+    showNow.value = options.showNow;
+  }
+});
 </script>
 
 <style lang="scss" scoped>

+ 156 - 150
src/pages/index.vue

@@ -1,6 +1,4 @@
 <template>
-  <!-- <u-sticky bgColor="#fff"> </u-sticky> -->
-
   <u-navbar :autoBack="false" :placeholder="true" :safeAreaInsetTop="true" :bgColor="proxy.$settingStore.themeColor.color" @rightClick="rightButtonClick()">
     <template #left>
       <view class="u-nav-slot">
@@ -19,71 +17,85 @@
   </u-navbar>
 
   <!-- <pagesHarder></pagesHarder> -->
-  <scroll-view class="home-container" scroll-y :style="{ height: `calc(100vh - (50px + ${proxy.$settingStore.barHightTop} + ${proxy.$settingStore.tabBarHeight}))` }">
-    <!-- <u-loadmore :status="arrayList.loadStatus" loadingText="" loadmoreText="" :icon="true" /> -->
-    <view class="uni-content-body">
-      <!-- 下拉列表 开始 -->
-      <u-transition :show="dialogFlag" :duration="200" mode="fade">
-        <view class="transition" @click="rightButtonClick()">
-          <view class="transition-section" :style="{ top: proxy.$settingStore.barHightTop }">
-            <view class="transition-section-content" @click="scanCode()">
-              <text class="transition-section-content-icon iconfont ucicon-saoyisao"></text>
-              <view class="transition-section-content-text"> 扫一扫 </view>
+
+  <oa-scroll
+    customClass="scroll-height"
+    :customStyle="{ height: `calc(100vh - (50px + ${proxy.$settingStore.barHightTop} + ${proxy.$settingStore.tabBarHeight}))` }"
+    :refresherLoad="false"
+    :refresherEnabled="true"
+    :refresherDefaultStyle="'none'"
+    :refresherThreshold="44"
+    :refresherBackground="'#f5f6f7'"
+    @refresh="refresh"
+  >
+    <template #default>
+      <view class="home-container">
+        <!-- 下拉列表 开始 -->
+        <u-transition :show="dialogFlag" :duration="200" mode="fade">
+          <view class="transition" @click="rightButtonClick()">
+            <view class="transition-section" :style="{ top: proxy.$settingStore.barHightTop }">
+              <view class="transition-section-content" @click="scanCode()">
+                <text class="transition-section-content-icon iconfont ucicon-saoyisao"></text>
+                <view class="transition-section-content-text"> 扫一扫 </view>
+              </view>
+              <!-- <div class="transition-section-divider"></div>
+              <view class="transition-section-content">
+                <text class="transition-section-content-icon iconfont ucicon-saoyisao"></text>
+                <view class="transition-section-content-text">发起群聊 </view>
+              </view> -->
             </view>
-            <!-- <div class="transition-section-divider"></div>
-            <view class="transition-section-content">
-              <text class="transition-section-content-icon iconfont ucicon-saoyisao"></text>
-              <view class="transition-section-content-text">发起群聊 </view>
-            </view> -->
           </view>
-        </view>
-      </u-transition>
-      <!-- 下拉列表 结束 -->
-
-      <!-- 轮播图 开始 -->
-      <u-swiper :list="swiperList" :interval="swiperTime" indicatorMode="line" radius="0" height="160" indicator circular keyName="url" @click="swiperClick" @change="swiperChange"> </u-swiper>
+        </u-transition>
+        <!-- 下拉列表 结束 -->
 
-      <view class="app-info-notice bg-white radius shadow-default margin-lr-sm margin-bottom-sm">
-        <view class="flex">
-          <view class="info-title text-df">综合智慧云</view>
-          <view class="info-time text-sm">07-25 19:23</view>
-        </view>
-        <view class="info-content text-sm">综合智慧云app,助力企业数字化转型升级,超多业务功能,全新部署上线,操作简单流畅...</view>
-      </view>
+        <!-- 轮播图 开始 -->
+        <u-swiper v-if="swiperBool" :list="swiperList" :interval="swiperTime" indicatorMode="line" radius="0" height="160" indicator circular keyName="url" @click="swiperClick" @change="swiperChange">
+        </u-swiper>
 
-      <!-- 轮播图 结束 -->
+        <image v-if="!swiperBool" style="width: 100%; height: 160px" src="@/static/images/index/banner1.png"></image>
 
-      <!-- 宫格列表 -->
-      <view class="section2 section bg-white margin-bottom-sm" v-if="recentlyUsed.length > 0">
-        <view style="color: #000000; font-size: 14px; padding: 10px 10px 5px 10px">最近使用</view>
-        <view class="cu-list grid col-5 no-border">
-          <view class="cu-item justify-center align-center" @tap="navItemClick(item)" v-for="(item, index) in recentlyUsed.slice(0, 5)" :key="index">
-            <image :src="item.meta.icon" style="width: 40px; height: 40px"></image>
-            <!-- <view class="cu-tag badge" v-if="item.badge != 0">
+        <!-- <view class="app-info-notice bg-white radius shadow-default margin-lr-sm margin-bottom-sm">
+          <view class="flex">
+            <view class="info-title text-df">综合智慧云</view>
+            <view class="info-time text-sm">07-25 19:23</view>
+          </view>
+          <view class="info-content text-sm">综合智慧云app,助力企业数字化转型升级,超多业务功能,全新部署上线,操作简单流畅...</view>
+        </view> -->
+
+        <!-- 轮播图 结束 -->
+
+        <!-- 宫格列表 -->
+        <view class="section2 section bg-white margin-bottom-sm" v-if="recentlyUsed.length > 0">
+          <view style="color: #000000; font-size: 14px; padding: 10px 10px 5px 10px">最近使用</view>
+          <view class="cu-list grid col-5 no-border">
+            <view class="cu-item justify-center align-center" @tap="navItemClick(item)" v-for="(item, index) in recentlyUsed.slice(0, 5)" :key="index">
+              <image :src="item.meta.icon" style="width: 40px; height: 40px"></image>
+              <!-- <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.title }}</text>
+            </view>
           </view>
         </view>
-      </view>
-      <!-- 宫格列表 end -->
-
-      <!-- 宫格列表 -->
-      <view class="section2 section bg-white">
-        <view style="color: #000000; font-size: 14px; padding: 10px 10px 5px 10px">常用功能</view>
-        <view class="cu-list grid col-5 no-border">
-          <view class="cu-item justify-center align-center" @tap="navItemClick(item)" v-for="(item, index) in cuIconList" :key="index">
-            <image :src="item.meta.icon" style="width: 40px; height: 40px"></image>
-            <!-- <view class="cu-tag badge" v-if="item.badge != 0">
+        <!-- 宫格列表 end -->
+
+        <!-- 宫格列表 -->
+        <view class="section2 section bg-white">
+          <view style="color: #000000; font-size: 14px; padding: 10px 10px 5px 10px">常用功能</view>
+          <view class="cu-list grid col-5 no-border">
+            <view class="cu-item justify-center align-center" @tap="navItemClick(item)" v-for="(item, index) in cuIconList" :key="index">
+              <image :src="item.meta.icon" style="width: 40px; height: 40px"></image>
+              <!-- <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.title }}</text>
+            </view>
           </view>
         </view>
+        <!-- 宫格列表 end -->
       </view>
-      <!-- 宫格列表 end -->
-    </view>
-  </scroll-view>
+    </template>
+  </oa-scroll>
 
   <oa-tabbar :tabbarValue="0"></oa-tabbar>
 </template>
@@ -149,44 +161,6 @@ function swiperClick(list) {
   }
 }
 
-/**
- * @轮播图
- * @api接口请求
- */
-function getMobileBannerApi() {
-  getMobileBanner({
-    tenantId: useStore.$state.tenantId,
-  }).then((res) => {
-    if (res.data.length > 0) {
-      swiperList.value = [];
-      swiperBool.value = res.data[0].openNot == 1 ? true : false;
-      swiperTime.value = res.data[0].carouselTime * 1000;
-
-      if (swiperBool.value) {
-        for (let i = 1; i <= 5; i++) {
-          if (res.data[0]["bannerPath" + i]) {
-            swiperList.value.push({
-              url: res.data[0]["bannerPath" + i],
-              link: res.data[0]["linkUrl" + i],
-              linkType: res.data[0]["linkType" + i],
-              type: "image",
-            });
-          }
-        }
-      } else {
-        swiperList.value = [
-          {
-            url: "/static/images/index/banner1.png",
-            link: "",
-            linkType: 1,
-            type: "image",
-          },
-        ];
-      }
-    }
-  });
-}
-
 onLoad((option) => {
   uni.hideTabBar(); //隐藏自带tabbar
 
@@ -194,11 +168,18 @@ onLoad((option) => {
     recentlyUsed.value = uni.getStorageSync(useStore.$state.name + useStore.$state.tenantId);
   }
 
-  getAppRoutersData();
-
-  getMobileBannerApi();
+  getAppRoutersData(); //调用路由信息接口
+  getMobileBannerApi(); //调用banner图接口
 });
 
+/**
+ * @scrollView刷新数据
+ */
+function refresh() {
+  getAppRoutersData(); //调用路由信息接口
+  getMobileBannerApi(); //调用banner图接口
+}
+
 /**
  * @扫码功能
  */
@@ -250,7 +231,9 @@ function scanCode() {
   //#endif
 }
 
-//获取地理位置
+/**
+ * @获取地理位置
+ */
 function getLocation() {
   jwx.configWeiXin((jweixin) => {
     // 微信公众号获取位置
@@ -263,7 +246,9 @@ function getLocation() {
   });
 }
 
-//九宫格页面跳转
+/**
+ * @九宫格页面跳转
+ */
 function navItemClick(item) {
   if (item.path) {
     item.sort = 0;
@@ -313,10 +298,36 @@ function navItemClick(item) {
  * @右侧按钮点击事件
  */
 function rightButtonClick() {
-  console.log(1);
   dialogFlag.value = !dialogFlag.value;
 }
 
+/**
+ * @轮播图
+ * @api接口请求
+ */
+function getMobileBannerApi() {
+  getMobileBanner({
+    tenantId: useStore.$state.tenantId,
+  }).then((res) => {
+    if (res.data.length > 0) {
+      swiperList.value = [];
+      swiperBool.value = res.data[0].openNot == 1 ? true : false;
+      swiperTime.value = res.data[0].carouselTime * 1000;
+
+      for (let i = 1; i <= 5; i++) {
+        if (res.data[0]["bannerPath" + i]) {
+          swiperList.value.push({
+            url: res.data[0]["bannerPath" + i],
+            link: res.data[0]["linkUrl" + i],
+            linkType: res.data[0]["linkType" + i],
+            type: "image",
+          });
+        }
+      }
+    }
+  });
+}
+
 /**
  * @获取路由信息
  * @api接口请求
@@ -329,8 +340,7 @@ function getAppRoutersData() {
     // domain :'172.16.120.165:13203'
   }).then((res) => {
     res.data.forEach((el) => {
-      //  const modules = import.meta.glob("@/static/icons/*.svg");
-      el.meta.icon = `/static/icons/index/${el.meta.icon}.svg`;
+      el.meta.icon = `/static/icons/index/${el.meta.icon}.png`;
     });
 
     cuIconList.value = res.data;
@@ -352,64 +362,60 @@ onNavigationBarButtonTap((e) => {
 
 <style lang="scss" scoped>
 .home-container {
-  height: 100vh;
-
-  .uni-content-body {
-    // #ifdef H5
-    padding-bottom: 50px;
-    // #endif
-
-    .transition {
-      position: fixed;
-      top: 0;
-      left: 0;
-      right: 0;
-      bottom: 0;
-      z-index: 1100;
-
-      .transition-section {
-        position: absolute;
-        top: 10px;
-        right: 15px;
-        background-color: #fff;
-        border-radius: 10px;
-        box-shadow: 0px 0px 15px 0 rgba(0, 0, 0, 0.2);
-
-        .transition-section-divider {
-          border-bottom: 0.5px rgba(0, 0, 0, 0.1) solid;
-          margin: 0 20px;
-        }
-
-        .transition-section-content {
-          display: flex;
-          padding: 15px 20px;
+  // #ifdef H5
+  // padding-bottom: 50px;
+  // #endif
+
+  .transition {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 1100;
+
+    .transition-section {
+      position: absolute;
+      top: 10px;
+      right: 15px;
+      background-color: #fff;
+      border-radius: 10px;
+      box-shadow: 0px 0px 15px 0 rgba(0, 0, 0, 0.2);
+
+      .transition-section-divider {
+        border-bottom: 0.5px rgba(0, 0, 0, 0.1) solid;
+        margin: 0 20px;
+      }
 
-          .transition-section-content-icon {
-            font-size: 18px;
-            color: #000;
-          }
+      .transition-section-content {
+        display: flex;
+        padding: 15px 20px;
 
-          .transition-section-content-text {
-            margin: 0 20px;
-          }
+        .transition-section-content-icon {
+          font-size: 18px;
+          color: #000;
         }
 
-        .transition-section-content:first-child {
-          padding-top: 15px;
-          border-radius: 10px 10px 0 0;
+        .transition-section-content-text {
+          margin: 0 20px;
         }
+      }
 
-        .transition-section-content:last-child {
-          padding-bottom: 15px;
-          border-radius: 0 0 10px 10px;
-        }
+      .transition-section-content:first-child {
+        padding-top: 15px;
+        border-radius: 10px 10px 0 0;
+      }
 
-        .transition-section-content:hover {
-          // transform: 3s;
-          // transition: all 600ms cubic-bezier(0.3, 1, 0.2, 1);
-          transition: all 3s cubic-bezier(0.7, -0.5, 0.2, 2);
-          background-color: rgba(0, 0, 0, 0.1);
-        }
+      .transition-section-content:last-child {
+        padding-bottom: 15px;
+        border-radius: 0 0 10px 10px;
+      }
+
+      .transition-section-content:hover {
+        // transform: 3s;
+        // transition: all 600ms cubic-bezier(0.3, 1, 0.2, 1);
+        transition: all 3s cubic-bezier(0.7, -0.5, 0.2, 2);
+        background-color: rgba(0, 0, 0, 0.1);
       }
     }
   }

+ 2 - 2
src/pages/info.vue

@@ -49,7 +49,7 @@
       </view>
     </view>
 
-    <view class="uni-content-body">
+    <!-- <view class="uni-content-body">
       <view class="uni-list padding" @tap="goFireBase()">
         <view class="uni-avatar">
           <image class="image-bg" src="@/static/images/info/fireBase.png" />
@@ -67,7 +67,7 @@
           </view>
         </view>
       </view>
-    </view>
+    </view> -->
   </scroll-view>
 
   <oa-tabbar :tabbarValue="1"></oa-tabbar>

+ 72 - 71
src/pages/login.vue

@@ -1,10 +1,7 @@
 <template>
   <view id="login" class="section">
-    <!-- <u-loading-page :loading="true" loading-text="loading..."  loading-mode="spinner"></u-loading-page> -->
-
     <view class="bg">
       <image class="bgImage" :src="useStore.$state.loginBg" v-if="useStore.$state.loginBg" />
-      <!-- <image class="bgImage" src="@/static/images/wt/bg.png" v-else /> -->
     </view>
 
     <view class="middle">
@@ -26,12 +23,11 @@
 
       <view id="login-input" v-if="switchText == '账号密码登录'">
         <u-input v-model="phone" prefixIcon="phone" placeholder="请输入手机号码" />
-      </view>
 
-      <view id="login-input" v-if="switchText == '账号密码登录'">
         <u-input v-model="verify" prefixIcon="email" placeholder="请输入验证码" :maxlength="6">
           <template #suffix>
-            <u-button @click="getVerifyCode">{{ !codeTime ? "获取验证码" : codeTime + "s" }}</u-button>
+            <button class="verify" @click="getVerifyCode">{{ !codeTime ? "获取验证码" : codeTime + "s" }}</button>
+            <!-- <u-button @click="getVerifyCode">{{ !codeTime ? "获取验证码" : codeTime + "s" }}</u-button> -->
           </template>
         </u-input>
       </view>
@@ -96,8 +92,6 @@ const data = reactive({
   linkUrl: uni.getStorageSync("serveUrl"),
   /** 用户隐私协议数据 */
   userChecked: [true],
-
-  // VerificationCodeOne
 });
 
 const { phone, verify, codeTime, switchText, username, password, inputIconBool, linkUrl, userChecked } = toRefs(data);
@@ -176,9 +170,11 @@ function env() {
   //#ifdef H5
   if (window.location.host) {
     linkUrl.value = window.location.host;
-    // linkUrl.value = window.location.host;
     // linkUrl.value='ces.cn';
     // linkUrl.value = "172.16.120.165:13207";
+    // linkUrl.value = "172.16.120.165:13200";
+    // linkUrl.value = "localhost:81";
+
     useStore.GetMobileTenantConfig({ url: linkUrl.value });
   }
   //#endif
@@ -187,6 +183,11 @@ function env() {
   if (uni.getStorageSync("serveUrl")) {
     linkUrl.value = uni.getStorageSync("serveUrl");
     useStore.GetMobileTenantConfig({ url: linkUrl.value });
+  } else {
+    uni.setStorageSync("serveUrl", "manager.usky.cn");
+    publicStore.setServeList("manager.usky.cn", "");
+    linkUrl.value = uni.getStorageSync("serveUrl");
+    useStore.GetMobileTenantConfig({ url: linkUrl.value });
   }
   //#endif
 }
@@ -198,9 +199,7 @@ function submitRes() {
     proxy.$modal.msg("首次登录请先进行服务器配置");
     return;
   }
-  //#endif
 
-  //#ifdef APP-PLUS || MP-WEIXIN
   if (!userChecked.value[0]) {
     proxy.$modal.msg("请在阅读并同意 用户协议和隐私协议后登录");
     return;
@@ -260,14 +259,12 @@ function login(data) {
 function handleUserAgrement() {
   let site = config.appInfo.agreements[0];
   proxy.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`);
-  // proxy.$tab.navigateTo(`/pages/common/textview/index1?title=${site.title}&content=${site.content}`);
 }
 
 // 隐私协议
 function handlePrivacy() {
   let site = config.appInfo.agreements[1];
   proxy.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`);
-  // proxy.$tab.navigateTo(`/pages/common/textview/index1?title=${site.title}&content=${site.content}`);
 }
 
 onShow(() => {
@@ -311,62 +308,18 @@ onLoad((options) => {});
     margin: auto;
     margin-top: 30%;
 
-    // 登录页-服务器配置样式 开始
-    #login-input {
-      :deep(.u-input) {
-        height: 45px;
-        border-radius: 8px;
-        padding: 5px 12px !important;
-        border: 0 !important;
-        // border-color: #000 !important;
-        // border-color: gray !important;
-        // background-color: rgba(255, 255, 255, 0.1) !important;
-        background-color: #f5f6fa !important;
-        margin-bottom: 15px;
-      }
-
-      :deep(.input-placeholder) {
-        color: #c0c4cc !important;
-      }
-
-      :deep(.uni-input-wrapper) {
-        font-size: 16px;
-      }
-
-      :deep(.u-icon__icon) {
-        font-size: 24px !important;
-        line-height: 24px !important;
-        color: gray !important;
-      }
-
-      :deep(.iconfont) {
-        color: gray !important;
-      }
-
-      :deep(:-webkit-autofill) {
-        caret-color: #000; // 设置光标颜色
-        // -webkit-text-fill-color: gray !important;
-        -webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
-        background-color: transparent;
-        background-image: none;
-        transition: background-color 50000s ease-in-out 0s; //背景色透明  生效时长  过渡效果  启用时延迟的时间
-      }
-    }
-
     .top {
       display: flex;
       align-items: center;
       justify-content: center;
       margin-bottom: 60px;
 
-      :deep(uni-image) {
+      .logo {
         height: 40px;
-        // width:40px;
         width: auto;
-      }
-      .logo {
         margin-right: 10px;
       }
+
       .title {
         font-size: 20px;
         color: #000;
@@ -407,15 +360,67 @@ onLoad((options) => {});
         color: #fff;
         padding: 3px 5px;
         border-radius: 3px;
+
+        &::after {
+          content: "";
+          position: absolute;
+          border: 5px solid transparent;
+          transform: rotate(90deg);
+          right: 5px;
+          bottom: -9px;
+          border-left-color: #2a98ff;
+        }
       }
-      #okay::after {
-        content: "";
-        position: absolute;
-        border: 5px solid transparent;
-        transform: rotate(90deg);
-        right: 5px;
-        bottom: -9px;
-        border-left-color: #2a98ff;
+    }
+
+    // 登录页-服务器配置样式 开始
+    #login-input {
+      :deep(.u-input) {
+        height: 45px;
+        border: 0 !important;
+        border-radius: 8px;
+        margin-bottom: 15px;
+        padding: 5px 12px !important;
+        background-color: #f5f6fa !important;
+      }
+
+      :deep(.input-placeholder) {
+        color: #c0c4cc !important;
+      }
+
+      :deep(.uni-input-wrapper) {
+        font-size: 16px;
+      }
+
+      :deep(.u-icon__icon) {
+        font-size: 24px !important;
+        line-height: 24px !important;
+        color: gray !important;
+      }
+
+      :deep(.iconfont) {
+        color: gray !important;
+      }
+
+      :deep(:-webkit-autofill) {
+        caret-color: #000; // 设置光标颜色
+        // -webkit-text-fill-color: gray !important;
+        -webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
+        background-color: transparent;
+        background-image: none;
+        transition: background-color 50000s ease-in-out 0s; //背景色透明  生效时长  过渡效果  启用时延迟的时间
+      }
+
+      .verify {
+        color: #2a98ff;
+        font-size: 14px;
+        padding-left: 0px;
+        padding-right: 0px;
+        background-color: transparent;
+
+        &::after {
+          border: 0px;
+        }
       }
     }
 
@@ -472,9 +477,5 @@ onLoad((options) => {});
       font-size: 14px;
     }
   }
-
-  .iconfont {
-    color: #999;
-  }
 }
 </style>

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

@@ -1,6 +1,6 @@
 <template>
   <oa-scroll
-    class="scroll-height"
+    customClass="scroll-height"
     :pageSize="pageSize"
     :total="total"
     :refresherLoad="true"

+ 2 - 2
src/pages/serveConfig.vue

@@ -111,10 +111,10 @@ function handleSubmit() {
 
   if (!port.value) {
     uni.setStorageSync("serveUrl", linkUrl.value);
-    publicStore.getServeList(linkUrl.value, content.value);
+    publicStore.setServeList(linkUrl.value, content.value);
   } else {
     uni.setStorageSync("serveUrl", linkUrl.value + ":" + port.value);
-    publicStore.getServeList(linkUrl.value + ":" + port.value, content.value);
+    publicStore.setServeList(linkUrl.value + ":" + port.value, content.value);
   }
 
   config.baseUrl = "http://" + uni.getStorageSync("serveUrl") + "/prod-api";

+ 2 - 1
src/pages/serveConfigSelect.vue

@@ -104,7 +104,7 @@ function serveClick(type) {
           icon: "none",
         });
 
-        publicStore.getServeList(e.result, "");
+        publicStore.setServeList(e.result, "");
 
         init();
 
@@ -159,6 +159,7 @@ function navigateTo() {
  */
 function init() {
   let serveList = uni.getStorageSync("serveList");
+  console.log(serveList);
   if (serveList.length > 0) {
     radiolist.value = serveList[0].radiolist;
     radiovalue.value = serveList[0].radiovalue;

+ 17 - 6
src/plugins/common.plugins.js

@@ -25,9 +25,23 @@ export default {
     return result;
   },
 
+  /**
+   * @一键拨号
+   */
+  makePhoneCall(phone) {
+    uni.makePhoneCall({
+      phoneNumber: phone,
+      success: function () {
+        console.log('success');
+      },
+      fail: function () {
+      }
+    });
+  },
+
   /**
    * @复制粘贴板
-   * @param {*} param0 
+   * @param {传入值} content 
    * @returns 
    */
   uniCopy({ content, success, error }) {
@@ -99,7 +113,7 @@ export default {
   },
 
   /**
-   * @指定获取当前时间前几天的日期
+   * @指定获取开始时间结束时间
    */
   getDays(value) {
     let oneDay = 24 * 60 * 60 * 1000;
@@ -107,10 +121,7 @@ export default {
     endTime = this.formatterDate(endTime, "yyyy-MM-dd");
     let startTime = new Date(Date.now() - value * oneDay);
     startTime = this.formatterDate(startTime, "yyyy-MM-dd");
-    const days = {
-      startTime,
-      endTime,
-    };
+    const days = [startTime, endTime,]
     return days;
   },
 

+ 7 - 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_kj985d7f2u.woff2?t=1689669584145') format('woff2'),
-       url('https://at.alicdn.com/t/c/font_3620854_kj985d7f2u.woff?t=1689669584145') format('woff'),
-       url('https://at.alicdn.com/t/c/font_3620854_kj985d7f2u.ttf?t=1689669584145') format('truetype');
+  src: url('https://at.alicdn.com/t/c/font_3620854_or3dk845a9m.woff2?t=1690786456967') format('woff2'),
+       url('https://at.alicdn.com/t/c/font_3620854_or3dk845a9m.woff?t=1690786456967') format('woff'),
+       url('https://at.alicdn.com/t/c/font_3620854_or3dk845a9m.ttf?t=1690786456967') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,10 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.ucicon-dial:before {
+  content: "\e60b";
+}
+
 .ucicon-app-map:before {
   content: "\e60a";
 }

BIN
src/static/iconfont/iconfont.ttf


BIN
src/static/icons/index/APP-dbsx.png


BIN
src/static/icons/index/APP-dwcj.png


BIN
src/static/icons/index/APP-gjgl.png


BIN
src/static/icons/index/APP-khgl.png


BIN
src/static/icons/index/APP-kpgl.png


BIN
src/static/icons/index/APP-sbcx.png


BIN
src/static/icons/index/APP-sbgl.png


BIN
src/static/icons/index/APP-sscj.png


BIN
src/static/icons/index/APP-ssck.png


BIN
src/static/icons/index/APP-xfbg.png


BIN
src/static/icons/index/APP-xtzz.png


BIN
src/static/icons/index/APP-xunjian.png


BIN
src/static/icons/index/APP-xxcx.png


BIN
src/static/images/xunjian/xunJian-icon1.png


BIN
src/static/images/xunjian/xunJian-icon2.png


BIN
src/static/images/xunjian/xunJian-icon3.png


+ 6 - 0
src/static/scss/index.scss

@@ -125,4 +125,10 @@
 
 .margin-b-15 {
     margin-bottom: 15px
+}
+
+.text-ellipsis {
+    overflow: hidden; //超出的文本隐藏
+    text-overflow: ellipsis; //溢出用省略号显示
+    white-space: nowrap; // 默认不换行;
 }

+ 12 - 26
src/static/scss/public.scss

@@ -214,12 +214,10 @@ uni-input {
 }
 
 
-//ios底部安全距离
-.ios-padding-bottom {
-  /*兼容 IOS<11.2*/
-  padding-bottom: constant(safe-area-inset-bottom) !important;
-  /*兼容 IOS>11.2*/
-  padding-bottom: env(safe-area-inset-bottom) !important;
+//APP底部安全距离
+.app-padding-bottom {
+  padding-bottom: calc(constant(safe-area-inset-bottom) + 20px + 40px) !important;
+  padding-bottom: calc(env(safe-area-inset-bottom) + 20px + 40px) !important;
 }
 
 //公共按钮绝对定位
@@ -228,11 +226,9 @@ uni-input {
   left: 0;
   right: 0;
   bottom: 0;
-  //#ifdef APP-PLUS || MP-WEIXIN
-  bottom: constant(safe-area-inset-bottom);
-  bottom: calc(env(safe-area-inset-bottom) - 25px);
-  //#endif
-  padding: 0px 15px 0px 15px;
+  padding: 10px 15px 10px 15px;
+  background-color: #fff;
+  box-shadow: 0px 0px 15px 0 rgba(0, 0, 0, 0.1);
   z-index: 50;
 
   .app-buttom {
@@ -240,7 +236,10 @@ uni-input {
     width: 100%;
     height: 40px;
     font-size: 14px;
-    margin-bottom: 15px
+    //#ifdef APP-PLUS || MP-WEIXIN
+    margin-bottom: constant(safe-area-inset-bottom);
+    margin-bottom: env(safe-area-inset-bottom);
+    //#endif
   }
 
   .app-flex {
@@ -267,7 +266,7 @@ uni-input {
   height: calc(100vh - 44px);
   //#endif
 
-  //#ifdef APP-PLUS
+  //#ifdef APP-PLUS || MP-WEIXIN
   height: calc(100vh - constant(safe-area-inset-top));
   height: calc(100vh - env(safe-area-inset-top));
   //#endif
@@ -297,17 +296,4 @@ uni-input {
 
     color: #909399
   }
-}
-
-//公共分页功能样式
-.app-pagination {
-  padding-bottom: 10px;
-  padding-top: 10px;
-  padding-left: 10px;
-  padding-right: 10px;
-
-  //#ifdef APP-PLUS
-  padding-bottom: constant(safe-area-inset-bottom);
-  padding-bottom: env(safe-area-inset-bottom);
-  //#endif
 }

+ 1 - 1
src/store/modules/public.js

@@ -315,7 +315,7 @@ const publicStore = defineStore("public", {
     /**
      * @公共添加服务器列表
      */
-    getServeList(linkUrl, content) {
+    setServeList(linkUrl, content) {
       let serveList = uni.getStorageSync("serveList");
       if (serveList.length <= 0) {
         uni.setStorageSync("serveList", [

+ 1 - 0
src/uni_modules/uview-plus/components/u-tabbar/u-tabbar.vue

@@ -139,6 +139,7 @@
 			bottom: 0;
 			left: 0;
 			right: 0;
+			box-shadow: 0px 0px 15px 0 rgba(0, 0, 0, 0.1); 
 		}
 	}
 </style>

BIN
unpackage/res/icons/1024x1024.png


BIN
unpackage/res/icons/120x120.png


BIN
unpackage/res/icons/144x144.png


BIN
unpackage/res/icons/152x152.png


BIN
unpackage/res/icons/167x167.png


BIN
unpackage/res/icons/180x180.png


BIN
unpackage/res/icons/192x192.png


BIN
unpackage/res/icons/20x20.png


BIN
unpackage/res/icons/29x29.png


BIN
unpackage/res/icons/40x40.png


BIN
unpackage/res/icons/58x58.png


BIN
unpackage/res/icons/60x60.png


BIN
unpackage/res/icons/72x72.png


BIN
unpackage/res/icons/76x76.png


BIN
unpackage/res/icons/80x80.png


BIN
unpackage/res/icons/87x87.png


BIN
unpackage/res/icons/96x96.png


BIN
unpackage/res/push/18x18.png


BIN
unpackage/res/push/24x24.png


BIN
unpackage/res/push/36x36.png


BIN
unpackage/res/push/48x48.png


BIN
unpackage/res/push/72x72.png