Explorar el Código

[Feat 0000]样式优化升级

bobo04052021@163.com hace 2 días
padre
commit
7f164d6862
Se han modificado 49 ficheros con 1358 adiciones y 633 borrados
  1. 103 57
      pages/filecenter/filecenter.vue
  2. 215 129
      pages/history/history.vue
  3. 124 28
      pages/home/detail/autodoor/autodoor.vue
  4. 54 40
      pages/home/detail/windrectAnimate/windrectAnimate.vue
  5. 82 34
      pages/home/home.vue
  6. 239 116
      pages/operation/operation.vue
  7. 112 61
      pages/user/people.vue
  8. 1 1
      pages/user/userdetail.vue
  9. 160 152
      pages/user/useredit.vue
  10. 2 1
      pages/warndata/components/device-detail.vue
  11. 1 1
      pages/warndata/components/dust-detail.vue
  12. 1 1
      pages/warndata/components/fire-detail.vue
  13. 9 1
      pages/warndata/components/gas-detail.vue
  14. 1 2
      pages/warndata/components/vent-detail.vue
  15. 0 0
      static/filecenter/ApprovalStatus.svg
  16. 0 0
      static/filecenter/Creator.svg
  17. 0 0
      static/filecenter/FileSource.svg
  18. 0 0
      static/filecenter/UpdateTime.svg
  19. BIN
      static/filecenter/laiyuan.png
  20. BIN
      static/filecenter/time.png
  21. BIN
      static/filecenter/user.png
  22. BIN
      static/filecenter/zhuangtai.png
  23. 0 3
      static/filecenter/关闭.svg
  24. 0 6
      static/filecenter/删除.svg
  25. 12 0
      static/home/ctrlLog.svg
  26. 12 0
      static/home/ctrldevice.svg
  27. 16 0
      static/home/gfl.svg
  28. 32 0
      static/home/glmj.svg
  29. 18 0
      static/home/maxarea.svg
  30. 18 0
      static/home/pressure.svg
  31. 18 0
      static/home/qyyk.svg
  32. 12 0
      static/home/user.svg
  33. BIN
      static/user/user.png
  34. BIN
      static/user/user1.png
  35. BIN
      static/user/userTop.png
  36. BIN
      static/user/userbg1.png
  37. BIN
      static/user/userbg2.png
  38. 3 0
      static/user/userdetail.svg
  39. 6 0
      static/user/userexit.svg
  40. 6 0
      static/user/userscall.svg
  41. BIN
      static/user/usertopbg.png
  42. 19 0
      static/window/AirArea.svg
  43. 9 0
      static/window/AirFlow.svg
  44. 10 0
      static/window/MaxArea.svg
  45. 12 0
      static/window/Pressure.svg
  46. 9 0
      static/window/RearOpen.svg
  47. 14 0
      static/window/SourcePressure.svg
  48. 9 0
      static/window/WindowAirflow.svg
  49. 19 0
      static/window/WindowOpenArea.svg

+ 103 - 57
pages/filecenter/filecenter.vue

@@ -32,7 +32,7 @@
       <view class="file-main">
         <view class="search-card">
           <view class="search-row">
-            <text class="search-label">文件名称</text>
+            <text class="search-label">文件名称:</text>
             <u-input
               v-model="fileName"
               type="text"
@@ -40,17 +40,19 @@
               placeholder="请输入文件名称"
               border="none"
             ></u-input>
-          </view>
-          <view class="search-actions">
             <view
-              class="action-btn action-btn-outline"
+              class="action-btn action-btn-outline search-picker-btn"
               @click="pickershow = true"
             >
               <text class="action-btn-text">{{
-                fileType ? fileType : "选择文件类型"
+                fileType ? fileType : "文件类型"
               }}</text>
+              <view class="search-picker-arrow"></view>
             </view>
-            <view class="action-btn action-btn-primary" @click="searchFile">
+            <view
+              class="action-btn action-btn-primary search-query-btn"
+              @click="searchFile"
+            >
               <text class="action-btn-text">查询</text>
             </view>
             <u-picker
@@ -105,11 +107,13 @@
                 <view class="file-info-grid" @tap="openFile(item)">
                   <view class="file-info-card">
                     <view class="file-info-icon-box">
-                      <image
-                        class="file-info-icon"
-                        src="/static/filecenter/文件来源.svg"
-                        mode="aspectFit"
-                      ></image>
+                      <view class="file-info-icon-glass">
+                        <image
+                          class="file-info-icon"
+                          src="/static/filecenter/FileSource.svg"
+                          mode="aspectFit"
+                        ></image>
+                      </view>
                     </view>
                     <view class="file-info-content">
                       <text class="file-info-value">{{ item.fileSource }}</text>
@@ -118,11 +122,13 @@
                   </view>
                   <view class="file-info-card">
                     <view class="file-info-icon-box">
-                      <image
-                        class="file-info-icon"
-                        src="/static/filecenter/审批状态.svg"
-                        mode="aspectFit"
-                      ></image>
+                      <view class="file-info-icon-glass">
+                        <image
+                          class="file-info-icon"
+                          src="/static/filecenter/ApprovalStatus.svg"
+                          mode="aspectFit"
+                        ></image>
+                      </view>
                     </view>
                     <view class="file-info-content">
                       <text class="file-info-value">{{
@@ -133,11 +139,13 @@
                   </view>
                   <view class="file-info-card">
                     <view class="file-info-icon-box">
-                      <image
-                        class="file-info-icon"
-                        src="/static/filecenter/创建人.svg"
-                        mode="aspectFit"
-                      ></image>
+                      <view class="file-info-icon-glass">
+                        <image
+                          class="file-info-icon"
+                          src="/static/filecenter/Creator.svg"
+                          mode="aspectFit"
+                        ></image>
+                      </view>
                     </view>
                     <view class="file-info-content">
                       <text class="file-info-value">{{ item.createBy }}</text>
@@ -146,11 +154,13 @@
                   </view>
                   <view class="file-info-card">
                     <view class="file-info-icon-box">
-                      <image
-                        class="file-info-icon"
-                        src="/static/filecenter/上传时间.svg"
-                        mode="aspectFit"
-                      ></image>
+                      <view class="file-info-icon-glass">
+                        <image
+                          class="file-info-icon"
+                          src="/static/filecenter/UpdateTime.svg"
+                          mode="aspectFit"
+                        ></image>
+                      </view>
                     </view>
                     <view class="file-info-content">
                       <text class="file-info-value">{{ item.createTime }}</text>
@@ -847,10 +857,10 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-// .file-page {
-//   min-height: 100vh;
-//   background: linear-gradient(180deg, #c8d8f8 0%, #f4f7fd 280rpx, #f4f7fd 100%);
-// }
+.file-page {
+  min-height: 100vh;
+  background: linear-gradient(180deg, #c8d8f8 0%, #eef4fd 320rpx, #f4f7fd 100%);
+}
 
 .file-page-content {
   padding-top: 50px;
@@ -895,13 +905,16 @@ export default {
   height: calc(100vh - 138px);
   padding: 20rpx 24rpx;
   box-sizing: border-box;
+  display: flex;
+  flex-direction: column;
   // overflow-y: auto;
 }
 
 .search-card {
+  flex-shrink: 0;
   background: #ffffff;
   border-radius: 16rpx;
-  padding: 24rpx;
+  padding: 20rpx 16rpx;
   margin-bottom: 20rpx;
   box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
 }
@@ -910,44 +923,48 @@ export default {
   display: flex;
   flex-direction: row;
   align-items: center;
-  margin-bottom: 20rpx;
 }
 
 .search-label {
   flex-shrink: 0;
-  width: 140rpx;
-  font-size: 28rpx;
+  font-size: 24rpx;
   color: #000;
 }
 
 .search-input {
-  flex: 1;
-  height: 72rpx;
-  padding: 0 24rpx !important;
-  border-radius: 12rpx;
-  background: #eef5ff !important;
+  flex: 3;
+  min-width: 0;
+  height: 48rpx;
+  margin: 0 4rpx;
+  font-size: 20rpx;
+  padding: 0 12rpx !important;
+  border: 1rpx solid #2572ff;
 }
 
-.search-actions {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  gap: 10rpx;
+.search-picker-arrow {
+  width: 0;
+  height: 0;
+  margin-left: 4rpx;
+  border-left: 8rpx solid transparent;
+  border-right: 8rpx solid transparent;
+  border-top: 10rpx solid #0065f8;
+  flex-shrink: 0;
 }
 
 .file-list {
   width: 100%;
-  height: calc(100% - 118px);
+  flex: 1;
+  min-height: 0;
   overflow-y: auto;
 }
 
 .file-card {
-  background: #f8fbff;
+  background: #ffffff;
+  border: 1rpx solid #e8effc;
   border-radius: 16rpx;
   padding: 24rpx;
   margin-bottom: 20rpx;
-  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
+  box-shadow: 0 4rpx 16rpx rgba(43, 124, 255, 0.08);
 }
 
 .file-card-header {
@@ -1010,6 +1027,18 @@ export default {
   color: #0065f8;
 }
 
+.search-picker-btn,
+.search-query-btn {
+  flex: 2;
+  min-width: 0;
+  margin-left: 8rpx;
+  padding: 0 12rpx;
+}
+
+.search-query-btn {
+  padding: 0 16rpx;
+}
+
 .file-info-grid {
   display: flex;
   flex-direction: row;
@@ -1027,28 +1056,45 @@ export default {
   flex-direction: row;
   align-items: center;
   background: linear-gradient(
-    135deg,
-    rgba(175, 195, 252, 0.55) 0%,
-    rgba(238, 245, 255, 0.35) 100%
+    to bottom,
+    rgba(175, 195, 252, 0.6) 0%,
+    rgba(175, 195, 252, 0.1) 100%
   );
 }
 
 .file-info-icon-box {
+  position: relative;
   width: 56rpx;
   height: 56rpx;
-  border-radius: 10rpx;
-  background: linear-gradient(135deg, #4d9dff 0%, #2b7cff 100%);
+  border-radius: 12rpx;
+  background: #2b7cff;
+  box-sizing: border-box;
   box-shadow: 0 4rpx 10rpx rgba(43, 124, 255, 0.22);
+  flex-shrink: 0;
+  margin-right: 12rpx;
+}
+
+.file-info-icon-glass {
+  position: absolute;
+  left: -6rpx;
+  bottom: -6rpx;
+  width: 50rpx;
+  height: 50rpx;
+  border-radius: 12rpx;
+  background: transparent;
+  border: none;
+  box-shadow: 0 0 0 0.6px #ffffff inset;
+  box-sizing: border-box;
+  backdrop-filter: blur(4rpx);
+  -webkit-backdrop-filter: blur(4rpx);
   display: flex;
   align-items: center;
   justify-content: center;
-  flex-shrink: 0;
-  margin-right: 12rpx;
 }
 
 .file-info-icon {
-  width: 32rpx;
-  height: 32rpx;
+  width: 28rpx;
+  height: 28rpx;
 }
 
 .file-info-content {

+ 215 - 129
pages/history/history.vue

@@ -18,31 +18,47 @@
     <!-- 历史数据列表页 -->
     <view v-if="!menushow" class="main">
       <view class="u-page">
-        <!-- 一、查询条件:上为时间查询,下为选择设备 / 间隔时间 / 查询 -->
+        <!-- 一、查询条件:上为选择设备 / 间隔时间,下为时间查询 / 查询 -->
         <view class="query-card">
-          <!-- 时间查询 -->
+          <!-- 选择设备 / 间隔时间 -->
+          <view class="query-row">
+            <view class="query-btn" @click="deviceShow = true">
+              {{ deviceName ? deviceName : "选择设备" }}
+            </view>
+            <view class="query-btn" @click="show = true">
+              {{ lable ? lable : "间隔时间" }}
+            </view>
+          </view>
+          <!-- 时间查询 + 查询按钮 -->
           <view class="query-row">
             <uni-datetime-picker
               class="query-item"
-              mode="datetime"
+              type="datetime"
+              :hideSecond="true"
               @confirm="selectStartTime"
               v-model="StartTime"
-            ></uni-datetime-picker>
+            >
+              <view class="query-picker-inner">
+                <u-icon name="calendar" size="16" color="#2277fb"></u-icon>
+                <text class="query-picker-text">{{
+                  StartTime ? StartTime.slice(0, 10) : "开始日期"
+                }}</text>
+              </view>
+            </uni-datetime-picker>
             <uni-datetime-picker
               class="query-item"
-              mode="datetime"
+              type="datetime"
+              :hideSecond="true"
               @confirm="selectEndTime"
               v-model="EndTime"
-            ></uni-datetime-picker>
-          </view>
-          <!-- 选择设备 / 间隔时间 / 查询 -->
-          <view class="query-row">
-            <view class="query-btn" @click="deviceShow = true">
-              {{ deviceName ? deviceName : "选择设备" }}
-            </view>
-            <view class="query-btn" @click="show = true">
-              {{ lable ? lable : "间隔时间" }}
-            </view>
+            >
+              <view class="query-picker-inner">
+                <u-icon name="calendar" size="16" color="#2277fb"></u-icon>
+                <text class="query-picker-text">{{
+                  EndTime ? EndTime.slice(0, 10) : "结束日期"
+                }}</text>
+              </view>
+            </uni-datetime-picker>
             <view class="query-btn query-btn-query" @click="checkHistory">
               查询
             </view>
@@ -77,20 +93,23 @@
               v-for="(item, index) in historyData"
               :key="index"
             >
-              <u-row gutter="5" customStyle="margin-bottom: 10px">
+              <u-row
+                gutter="5"
+                customStyle="margin-bottom: 10px;color: #ddd;font-weight: bold;"
+              >
                 <u-col span="24">
                   <u--text :text="item.ginstallpos || item.devicePos"></u--text>
                 </u-col>
               </u-row>
               <u-row gutter="5" customStyle="margin-bottom: 10px">
-                <u-col span="3" style="margin-right: 15rpx">
+                <u-col span="4">
                   <div v-if="item.netStatus == 0" class="error-tag1">
                     <image
                       src="/static/model/connectFalse.svg"
                       alt=""
                       class="icon-style"
                     />
-                    <span style="float: right">断开</span>
+                    <span style="float: right; margin-right: 12rpx">断开</span>
                   </div>
                   <div v-else class="success-tag">
                     <image
@@ -98,21 +117,15 @@
                       alt=""
                       class="icon-style"
                     />
-                    <span style="float: right">连接</span>
-                  </div>
-                </u-col>
-                <u-col span="3"> </u-col>
-                <u-col span="5">
-                  <div class="time-bg">
-                    <span class="timetext">{{ item.time || item.ttime }}</span>
+                    <span style="float: right; margin-right: 20rpx">连接</span>
                   </div>
                 </u-col>
               </u-row>
-              <view style="display: flex; flex-wrap: wrap">
+              <view class="data-grid">
                 <view
                   class="datacard"
-                  v-for="(showitem, index) in deviceShowList"
-                  :key="index"
+                  v-for="(showitem, sIndex) in deviceShowList"
+                  :key="sIndex"
                   v-if="
                     showitem.appShow == 1 &&
                     showitem.monitorcode != 'strinstallpos' &&
@@ -125,67 +138,38 @@
                     showitem.monitorcode != 'time'
                   "
                 >
-                  <view
-                    :class="TabCur"
-                    style="
-                      padding-top: 10rpx;
-                      padding-bottom: 10rpx;
-                      display: flex;
-                      flex-direction: column;
-                      height: 100%;
-                    "
-                  >
-                    <view
-                      v-if="showitem.monitorcode == 'doorUse'"
-                      class="demo-layout bg-purple-light"
-                      style="
-                        margin-top: 10rpx;
-                        color: #3787fe;
-                        font-size: 30rpx;
-                        margin-top: 20rpx;
-                        margin-left: 20rpx;
-                        float: left;
-                      "
-                    >
-                      {{
-                        item[showitem.monitorcode] == "2"
-                          ? "行人"
-                          : item[showitem.monitorcode] == "1"
-                          ? "行车"
-                          : "-"
-                      }}
-                    </view>
-                    <view
-                      v-else
-                      class="demo-layout bg-purple-light"
-                      style="
-                        color: #3787fe;
-                        font-size: 30rpx;
-                        margin-top: 20rpx;
-                        margin-left: 20rpx;
-                        float: left;
-                      "
-                    >
-                      {{
-                        item[showitem.monitorcode] == null ||
-                        item[showitem.monitorcode] == ""
-                          ? "-"
-                          : item[showitem.monitorcode]
-                      }}
+                  <view class="data-icon">
+                    <view class="data-icon-glass">
+                      <image
+                        class="data-icon-img"
+                        :src="getWindowIcon(showitem)"
+                        mode="aspectFit"
+                      ></image>
                     </view>
-                    <view
-                      class="demo-layout bg-purple-light"
-                      style="
-                        margin-top: 20rpx;
-                        color: #677799;
-                        margin-top: 20rpx;
-                        margin-left: 20rpx;
-                        float: left;
-                      "
-                    >
-                      {{ showitem.des }}
+                  </view>
+                  <view class="data-text">
+                    <text class="data-value">{{
+                      formatFieldValue(item, showitem)
+                    }}</text>
+                    <text class="data-label">{{ showitem.des }}</text>
+                  </view>
+                </view>
+                <view class="datacard">
+                  <view class="data-icon">
+                    <view class="data-icon-glass">
+                      <image
+                        class="data-icon-img"
+                        src="/static/warndata/shijian.svg"
+                        mode="aspectFit"
+                      ></image>
                     </view>
                   </view>
+                  <view class="data-text">
+                    <text class="data-value">{{
+                      item.time || item.ttime || "-"
+                    }}</text>
+                    <text class="data-label">更新时间</text>
+                  </view>
                 </view>
               </view>
             </u-list-item>
@@ -456,6 +440,48 @@ export default {
       this.labelName = e.value[0].label;
       this.deviceShow1 = false;
     },
+    // 根据字段中文名或编码返回 static/window 内对应图标
+    getWindowIcon(showitem) {
+      const des = (showitem.des || "").toString();
+      const code = (showitem.monitorcode || "").toString().toLowerCase();
+      if (des.indexOf("气源") > -1) return "/static/window/SourcePressure.svg";
+      if (des.indexOf("压差") > -1 || des.indexOf("压力") > -1)
+        return "/static/window/Pressure.svg";
+      if (des.indexOf("前窗开启面积") > -1)
+        return "/static/window/WindowOpenArea.svg";
+      if (des.indexOf("前窗风量") > -1)
+        return "/static/window/WindowAirflow.svg";
+      if (des.indexOf("后窗开启面积") > -1)
+        return "/static/window/RearOpen.svg";
+      if (des.indexOf("后窗风量") > -1) return "/static/window/AirFlow.svg";
+      if (des.indexOf("开度") > -1) return "/static/window/MaxArea.svg";
+      if (des.indexOf("面积") > -1) return "/static/window/AirArea.svg";
+      if (code.indexOf("source") > -1 && code.indexOf("press") > -1)
+        return "/static/window/SourcePressure.svg";
+      if (code.indexOf("press") > -1 || code.indexOf("pressure") > -1)
+        return "/static/window/Pressure.svg";
+      if (code.indexOf("area") > -1) return "/static/window/AirArea.svg";
+      if (
+        code.indexOf("flow") > -1 ||
+        code.indexOf("m3") > -1 ||
+        code.indexOf("va") > -1
+      )
+        return "/static/window/AirFlow.svg";
+      return "/static/window/Pressure.svg";
+    },
+    // 指标取值(doorUse 特殊处理)
+    formatFieldValue(item, showitem) {
+      if (showitem.monitorcode == "doorUse") {
+        const val = item[showitem.monitorcode];
+        if (val == "2") return "行人";
+        if (val == "1") return "行车";
+        if (val == "3") return "短路";
+        return "-";
+      }
+      const val = item[showitem.monitorcode];
+      if (val == null || val == "") return "-";
+      return val;
+    },
     //选择起始时间
     selectStartTime(e) {
       const startTime = e.value;
@@ -639,50 +665,51 @@ export default {
   flex: 1;
   min-width: 0;
 }
-::v-deep .query-item .uni-date-editor--x {
-  height: 72rpx;
+.query-picker-inner {
+  height: 64rpx;
   padding: 0 12rpx;
-  border: none;
-  border-radius: 12rpx;
-  background: #0068fb;
+  border: 1rpx solid #2277fb;
+  border-radius: 8rpx;
+  background: #ffffff;
+  display: flex;
+  align-items: center;
   justify-content: center;
+  box-sizing: border-box;
 }
-::v-deep .query-item .uni-date-x {
-  height: 72rpx;
-  background-color: transparent;
-  font-size: 26rpx;
-}
-::v-deep .query-item .icon-calendar,
-::v-deep .query-item .uni-date__icon-clear {
-  display: none;
-}
-::v-deep .query-item .uni-date__x-input {
-  flex: none;
-  height: 72rpx;
-  line-height: 72rpx;
-  padding: 0;
-  color: #ffffff;
-  font-size: 26rpx;
+.query-picker-text {
+  margin-left: 8rpx;
+  font-size: 24rpx;
   font-weight: 500;
-  text-align: center;
+  color: #2277fb;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
 }
 
 /* 选择设备 / 间隔时间 / 查询 */
 .query-btn {
-  height: 72rpx;
-  line-height: 72rpx;
+  height: 64rpx;
+  line-height: 64rpx;
   padding: 0 8rpx;
   text-align: center;
-  color: #ffffff;
-  font-size: 28rpx;
-  border-radius: 12rpx;
-  background: #0068fb;
+  color: #2277fb;
+  font-size: 24rpx;
+  border: 1rpx solid #2277fb;
+  border-radius: 8rpx;
+  background: #ffffff;
   overflow: hidden;
   white-space: nowrap;
   text-overflow: ellipsis;
+  box-sizing: border-box;
 }
 .query-btn-query {
+  flex: 0 0 auto;
+  width: 128rpx;
   font-weight: 600;
+  font-size: 26rpx;
+  color: #ffffff;
+  border: none;
+  background: #2277fb;
 }
 .time-bg {
   background-color: #cce6fb;
@@ -746,24 +773,81 @@ export default {
   background-color: #ffffff;
   margin-bottom: 5rpx;
 }
+.data-grid {
+  display: flex;
+  flex-wrap: wrap;
+}
 .datacard {
-  width: 47%;
-  margin: 1%;
-  float: left;
-  height: 75px;
-  background: url("/static/dataBg.png");
-  background-size: 40% 100%;
-  background-position: right;
-  background-repeat: no-repeat;
-}
-.datacard .window {
+  width: calc(50% - 8rpx);
+  margin: 4rpx;
+  box-sizing: border-box;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  padding: 16rpx 12rpx;
+  border-radius: 12rpx;
   background: linear-gradient(
-    to right,
-    rgba(55, 135, 254, 0.08),
-    rgba(4, 184, 255, 0.08),
-    rgba(60, 161, 237, 0.08)
+    to bottom,
+    rgba(175, 195, 252, 0.6) 0%,
+    rgba(175, 195, 252, 0.1) 100%
   );
 }
+.datacard-full {
+  width: calc(100% - 8rpx);
+}
+.data-icon {
+  position: relative;
+  width: 56rpx;
+  height: 56rpx;
+  border-radius: 12rpx;
+  background: #2b7cff;
+  box-sizing: border-box;
+  box-shadow: 0 4rpx 10rpx rgba(43, 124, 255, 0.22);
+  flex-shrink: 0;
+  margin-right: 12rpx;
+}
+.data-icon-glass {
+  position: absolute;
+  left: -6rpx;
+  bottom: -6rpx;
+  width: 50rpx;
+  height: 50rpx;
+  border-radius: 12rpx;
+  background: transparent;
+  border: none;
+  box-shadow: 0 0 0 0.6px #ffffff inset;
+  box-sizing: border-box;
+  backdrop-filter: blur(4rpx);
+  -webkit-backdrop-filter: blur(4rpx);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.data-icon-img {
+  width: 28rpx;
+  height: 28rpx;
+}
+.data-text {
+  flex: 1;
+  min-width: 0;
+  display: flex;
+  flex-direction: column;
+}
+.data-value {
+  font-size: 24rpx;
+  font-weight: 700;
+  color: #287bfb;
+  line-height: 1.3;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.data-label {
+  margin-top: 4rpx;
+  font-size: 22rpx;
+  color: #000000;
+  line-height: 1.3;
+}
 .error-tag {
   border-radius: 10%;
   display: inline-block;
@@ -791,9 +875,11 @@ export default {
   color: #5acc1f;
   line-height: 50rpx;
   font-size: 14px;
-  width: 120rpx;
+  width: 148rpx;
   height: 50rpx;
   display: inline-block;
+  border: 1rpx solid #ace392;
+  box-sizing: border-box;
   background-color: rgba(226, 250, 214, 0.5);
 }
 .icon-style {

+ 124 - 28
pages/home/detail/autodoor/autodoor.vue

@@ -32,6 +32,13 @@
       >
         <text>历史数据</text>
       </view>
+      <view
+        class="detail-tab"
+        :class="{ active: detailTab === 2 }"
+        @tap="detailTab = 2"
+      >
+        <text>操作记录</text>
+      </view>
     </view>
     <view class="main">
       <view class="u-page container">
@@ -130,12 +137,12 @@
             >
             </doorAnimate>
           </view>
-          <view class="flcard deviceback" v-if="TabCur == 'windrect'">
+          <view class="flcard deviceback" v-if="isWindrect">
             <windrectAnimate
               :state="state"
               :title="title"
               :height="height"
-              :type="deviceType"
+              :type="windrectType"
             >
             </windrectAnimate>
           </view>
@@ -210,15 +217,18 @@
                   item.monitorcode != 'strinstallpos' &&
                   item.monitorcode != 'netStatus' &&
                   item.monitorcode != 'warnFlag' &&
+                  item.monitorcode != 'readTime' &&
                   item.monitorcode != ''
                 "
               >
                 <view class="data-icon">
-                  <u-icon
-                    :name="getFieldIcon(item.monitorcode)"
-                    color="#ffffff"
-                    size="14"
-                  ></u-icon>
+                  <view class="data-icon-glass">
+                    <u-icon
+                      :name="getFieldIcon(item.monitorcode)"
+                      color="#ffffff"
+                      size="14"
+                    ></u-icon>
+                  </view>
                 </view>
                 <view class="data-text">
                   <text
@@ -229,6 +239,24 @@
                   <text class="data-label">{{ item.des }}</text>
                 </view>
               </view>
+              <!-- 更新时间 -->
+              <view class="datacard" v-if="readTime || tableData.readTime">
+                <view class="data-icon">
+                  <view class="data-icon-glass">
+                    <image
+                      class="data-icon-img"
+                      src="/static/warndata/shijian.svg"
+                      mode="aspectFit"
+                    ></image>
+                  </view>
+                </view>
+                <view class="data-text">
+                  <text class="data-value">{{
+                    readTime || tableData.readTime || "-"
+                  }}</text>
+                  <text class="data-label">更新时间</text>
+                </view>
+              </view>
             </view>
             <view
               class="flex-container data-grid"
@@ -239,14 +267,16 @@
                 class="datacard"
                 v-for="(item, index) in deviceShowList1"
                 :key="'host-' + index"
-                v-show="item.appShow == 1"
+                v-show="item.appShow == 1 && item.monitorcode != 'readTime'"
               >
                 <view class="data-icon">
-                  <u-icon
-                    :name="getFieldIcon(item.monitorcode)"
-                    color="#ffffff"
-                    size="14"
-                  ></u-icon>
+                  <view class="data-icon-glass">
+                    <u-icon
+                      :name="getFieldIcon(item.monitorcode)"
+                      color="#ffffff"
+                      size="14"
+                    ></u-icon>
+                  </view>
                 </view>
                 <view class="data-text">
                   <text
@@ -262,14 +292,16 @@
                 class="datacard"
                 v-for="(item, index) in deviceShowList1"
                 :key="'backup-' + index"
-                v-show="item.appShow == 1"
+                v-show="item.appShow == 1 && item.monitorcode != 'readTime'"
               >
                 <view class="data-icon">
-                  <u-icon
-                    :name="getFieldIcon(item.monitorcode)"
-                    color="#ffffff"
-                    size="14"
-                  ></u-icon>
+                  <view class="data-icon-glass">
+                    <u-icon
+                      :name="getFieldIcon(item.monitorcode)"
+                      color="#ffffff"
+                      size="14"
+                    ></u-icon>
+                  </view>
                 </view>
                 <view class="data-text">
                   <text
@@ -280,6 +312,24 @@
                   <text class="data-label">{{ item.des }}</text>
                 </view>
               </view>
+              <!-- 更新时间 -->
+              <view class="datacard" v-if="readTime || tableData.readTime">
+                <view class="data-icon">
+                  <view class="data-icon-glass">
+                    <image
+                      class="data-icon-img"
+                      src="/static/warndata/shijian.svg"
+                      mode="aspectFit"
+                    ></image>
+                  </view>
+                </view>
+                <view class="data-text">
+                  <text class="data-value">{{
+                    readTime || tableData.readTime || "-"
+                  }}</text>
+                  <text class="data-label">更新时间</text>
+                </view>
+              </view>
             </view>
           </view>
         </view>
@@ -292,6 +342,14 @@
             :deviceType="deviceTypeHis"
           ></history>
         </view>
+        <!-- 操作记录 -->
+        <view v-show="detailTab === 2">
+          <operation
+            :key="2"
+            :showColum="showColum"
+            :deviceType="deviceTypeHis"
+          ></operation>
+        </view>
       </view>
     </view>
     <u-popup :show="show" mode="bottom" :safeAreaInsetBottom="false">
@@ -384,7 +442,8 @@ export default {
       windowAngle1: 0, //后窗打开角度
       windowArea: "", //风窗面积设定值
       sign: "",
-      title: "测风设备",
+      state: "", //测风装置挡板位置 0上 1中 2下
+      title: "",
       fan1State: "",
       fan2State: "",
       deviceid: "", //ID
@@ -403,7 +462,7 @@ export default {
       door2: 0, //风门2#      1打开 0 关闭
       topdoor2: 0, //水平风门2#      1打开 0 关闭
       fundoor2: 0, //蝶阀2#      1打开 0 关闭
-      detailTab: 0, // 0实时 1历史
+      detailTab: 0, // 0实时 1历史 2操作记录
       controlMode: "local", // 控制模式展示:就地/远程
       deviceTypeHis: "", //历史数据设备类型
     };
@@ -415,6 +474,20 @@ export default {
     this.TabCur = query.type;
     this.ndoorcount = 2;
   },
+  computed: {
+    // 测风装置:TabCur 可能带子类型后缀(如 windrect_rect / windrect_ds)
+    isWindrect() {
+      return (
+        String(this.TabCur || "")
+          .toLowerCase()
+          .indexOf("windrect") > -1
+      );
+    },
+    // 测风动画类型:deviceType 缺失时回退到 TabCur,避免动画因类型为空而不显示
+    windrectType() {
+      return this.deviceType || this.TabCur || "";
+    },
+  },
   components: {
     doorAnimate,
     windowAnimate,
@@ -544,11 +617,9 @@ export default {
               this.fan2State = result.readData.Fan2StartStatus;
               this.nwindownum = result.nwindownum;
               this.ndoorcount = result.ndoorcount;
-              this.deviceType = result.deviceType;
-              this.deviceTypeHis = result.deviceType.substring(
-                0,
-                result.deviceType.indexOf("_")
-              ); //历史数据设备类型
+              this.deviceType = result.deviceType || "";
+              //历史数据设备类型:deviceType 可能带子类型后缀,取首段
+              this.deviceTypeHis = this.deviceType.split("_")[0];
               this.state = result.readData.sign;
               this.frontGateStatus = this.tableData.frontGateOpen;
               this.midGateStatus = this.tableData.midGateOpen;
@@ -808,7 +879,7 @@ export default {
 
 .main {
   // min-height: calc(100vh - 50px);
-  height: calc(100vh - 92px);
+  height: calc(100vh - 115px);
   // padding-bottom: 40rpx;
   overflow-y: auto;
   margin-bottom: 10px;
@@ -1030,10 +1101,13 @@ export default {
 }
 
 .data-icon {
+  position: relative;
   width: 52rpx;
   height: 52rpx;
   border-radius: 12rpx;
-  background: linear-gradient(to bottom, #75aaff, #4d8cff);
+  background: #2b7cff;
+  box-shadow: 0 4rpx 10rpx rgba(43, 124, 255, 0.22);
+  box-sizing: border-box;
   display: flex;
   align-items: center;
   justify-content: center;
@@ -1041,6 +1115,28 @@ export default {
   margin-right: 14rpx;
 }
 
+.data-icon-glass {
+  position: absolute;
+  left: -6rpx;
+  bottom: -6rpx;
+  width: 46rpx;
+  height: 46rpx;
+  border-radius: 12rpx;
+  background: transparent;
+  box-shadow: 0 0 0 0.6px #ffffff inset;
+  box-sizing: border-box;
+  backdrop-filter: blur(4rpx);
+  -webkit-backdrop-filter: blur(4rpx);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.data-icon-img {
+  width: 28rpx;
+  height: 28rpx;
+}
+
 .data-text {
   flex: 1;
   min-width: 0;

+ 54 - 40
pages/home/detail/windrectAnimate/windrectAnimate.vue

@@ -1,6 +1,6 @@
 <template>
   <view style="width: 100%; height: 100%">
-    <div class="checkwind-echarts-div" v-if="type == 'windrect_rect'">
+    <div class="checkwind-echarts-div" v-if="windType == 'windrect_rect'">
       <div class="checkwind">
         <div
           class="sub_line"
@@ -16,9 +16,8 @@
           id="subline"
         ></div>
       </div>
-      <span>{{ title }}</span>
     </div>
-    <div class="checkwind-echarts-div" v-if="type == 'windrect_ds'">
+    <div class="checkwind-echarts-div" v-if="windType == 'windrect_ds'">
       <div class="checkwind_ds">
         <div
           class="sub_line"
@@ -60,7 +59,6 @@
           id="subline2"
         ></div>
       </div>
-      <span>{{ title }}</span>
     </div>
   </view>
 </template>
@@ -73,6 +71,16 @@ export default {
     };
   },
   props: ["state", "title", "height", "type"],
+  computed: {
+    // 兼容后端 deviceType 的多种写法:windrect / windrect_rect / windrect_ds / sys_windrect_* 等
+    windType() {
+      const t = String(this.type || "").toLowerCase();
+      if (t.indexOf("windrect") === -1) {
+        return "";
+      }
+      return t.indexOf("ds") > -1 ? "windrect_ds" : "windrect_rect";
+    },
+  },
   methods: {},
   onLoad(query) {},
 };
@@ -81,19 +89,22 @@ export default {
 <style scoped>
 /*门里面*/
 div.checkwind {
-  width: 160px;
-  height: 160px;
+  position: relative;
+  width: 480rpx;
+  height: 480rpx;
+  margin: 0 auto;
+  overflow: hidden;
   background-image: url(/static/wind.png);
   background-size: 100% 100%;
-  perspective: 800px;
+  perspective: 2400rpx;
 }
 /*左门/右门*/
 
 div.checkwind .sub_line {
-  margin-top: 10px;
-  margin-left: 10px;
-  width: 142px;
-  height: 30px;
+  margin-top: 30rpx;
+  margin-left: 30rpx;
+  width: 426rpx;
+  height: 90rpx;
   box-sizing: border-box;
   float: left;
   z-index: 1;
@@ -103,35 +114,38 @@ div.checkwind .sub_line {
 }
 div.checkwind .sub_line {
   transform-origin: left center;
-  border-right: 1px solid rgb(8, 8, 8);
+  border-right: 3rpx solid rgb(8, 8, 8);
 }
 .checkwind .top_state {
-  transform: translateY(5px);
+  transform: translateY(15rpx);
 }
 .checkwind .middle_state {
-  transform: translateY(45px);
+  transform: translateY(135rpx);
 }
 .checkwind .bottom_state {
-  transform: translateY(90px);
+  transform: translateY(270rpx);
 }
 </style>
 
 <style scoped>
 /*门里面*/
 div.checkwind_ds {
-  width: 160px;
-  height: 160px;
+  position: relative;
+  width: 500rpx;
+  height: 460rpx;
+  margin: 0 auto;
+  overflow: hidden;
   background-image: url(/static/wind.png);
   background-size: 100% 100%;
-  perspective: 800px;
+  perspective: 2400rpx;
 }
 /*左门/右门*/
 
 div.checkwind_ds .sub_line {
-  margin-top: 10px;
-  margin-left: 8px;
-  width: 180px;
-  height: 25px;
+  margin-top: 30rpx;
+  margin-left: 24rpx;
+  width: 540rpx;
+  height: 75rpx;
   box-sizing: border-box;
   float: left;
   z-index: 1;
@@ -141,10 +155,10 @@ div.checkwind_ds .sub_line {
 }
 div.checkwind_ds .sub_line1 {
   position: absolute;
-  top: 20px;
-  left: 12px;
-  width: 30px;
-  height: 35px;
+  top: 60rpx;
+  left: 36rpx;
+  width: 90rpx;
+  height: 105rpx;
   box-sizing: border-box;
   z-index: 4;
   transition: all 2s ease;
@@ -153,10 +167,10 @@ div.checkwind_ds .sub_line1 {
 }
 div.checkwind_ds .sub_line2 {
   position: absolute;
-  top: 12px;
-  right: 12px;
-  width: 33px;
-  height: 38px;
+  top: 36rpx;
+  right: 36rpx;
+  width: 99rpx;
+  height: 114rpx;
   box-sizing: border-box;
   z-index: 4;
   transition: all 2s ease;
@@ -165,36 +179,36 @@ div.checkwind_ds .sub_line2 {
 }
 div.checkwind_ds .sub_line {
   transform-origin: left center;
-  border-right: 1px solid rgb(8, 8, 8);
+  border-right: 3rpx solid rgb(8, 8, 8);
 }
 .checkwind_ds .top_state {
-  transform: translateY(15px) rotateY(-40deg);
+  transform: translateY(45rpx) rotateY(-40deg);
   /* transform: rotateY(-20deg) */
 }
 .checkwind_ds .middle_state {
-  transform: translateY(45px) rotateY(0deg) scaleX(0.83);
+  transform: translateY(135rpx) rotateY(0deg) scaleX(0.83);
 }
 .checkwind_ds .bottom_state {
-  transform: translateY(80px);
+  transform: translateY(240rpx);
 }
 .checkwind_ds .top_state1 {
-  transform: translateY(0px);
+  transform: translateY(0);
   /* transform: rotateY(-20deg) */
 }
 .checkwind_ds .middle_state1 {
-  transform: translateY(30px);
+  transform: translateY(90rpx);
 }
 .checkwind_ds .bottom_state1 {
-  transform: translateY(65px);
+  transform: translateY(195rpx);
 }
 .checkwind_ds .top_state2 {
-  transform: translateY(0px);
+  transform: translateY(0);
   /* transform: rotateY(-20deg) */
 }
 .checkwind_ds .middle_state2 {
-  transform: translateY(35px);
+  transform: translateY(105rpx);
 }
 .checkwind_ds .bottom_state2 {
-  transform: translateY(72px);
+  transform: translateY(216rpx);
 }
 </style>

+ 82 - 34
pages/home/home.vue

@@ -9,9 +9,6 @@
                 <!-- 标题 -->
                 <view class="card-title-row">
                   <text class="card-title">{{ item.strinstallpos }}</text>
-                  <text class="card-time" v-if="item.readTime">{{
-                    item.readTime
-                  }}</text>
                 </view>
                 <view class="card-divider"></view>
 
@@ -77,16 +74,18 @@
                     v-show="isDataField(showitem)"
                   >
                     <view class="data-icon">
-                      <!-- <u-icon
-                        :name="getFieldIcon(showitem.monitorcode)"
-                        color="#ffffff"
-                        size="14"
-                      ></u-icon> -->
-                      <image
-                        class="icon-top"
-                        :src="getIcon1(showitem.monitorcode)"
-                        mode="aspectFit"
-                      ></image>
+                      <view class="data-icon-glass">
+                        <!-- <u-icon
+                          :name="getFieldIcon(showitem.monitorcode)"
+                          color="#ffffff"
+                          size="14"
+                        ></u-icon> -->
+                        <image
+                          class="icon-top"
+                          :src="getIcon1(showitem.monitorcode)"
+                          mode="aspectFit"
+                        ></image>
+                      </view>
                     </view>
                     <view class="data-text">
                       <text class="data-value">{{
@@ -95,6 +94,22 @@
                       <text class="data-label">{{ showitem.des }}</text>
                     </view>
                   </view>
+                  <!-- 更新时间 -->
+                  <view class="datacard" v-if="item.readTime">
+                    <view class="data-icon">
+                      <view class="data-icon-glass">
+                        <image
+                          class="icon-top"
+                          src="/static/warndata/shijian.svg"
+                          mode="aspectFit"
+                        ></image>
+                      </view>
+                    </view>
+                    <view class="data-text">
+                      <text class="data-value">{{ item.readTime }}</text>
+                      <text class="data-label">更新时间</text>
+                    </view>
+                  </view>
                 </view>
 
                 <!-- 风机设备:主机 / 备机 -->
@@ -109,11 +124,13 @@
                         v-show="isDataField(showitem)"
                       >
                         <view class="data-icon">
-                          <u-icon
-                            :name="getFieldIcon(showitem.monitorcode)"
-                            color="#ffffff"
-                            size="14"
-                          ></u-icon>
+                          <view class="data-icon-glass">
+                            <u-icon
+                              :name="getFieldIcon(showitem.monitorcode)"
+                              color="#ffffff"
+                              size="14"
+                            ></u-icon>
+                          </view>
                         </view>
                         <view class="data-text">
                           <text class="data-value">{{
@@ -134,11 +151,13 @@
                         v-show="isDataField(showitem)"
                       >
                         <view class="data-icon">
-                          <u-icon
-                            :name="getFieldIcon(showitem.monitorcode)"
-                            color="#ffffff"
-                            size="14"
-                          ></u-icon>
+                          <view class="data-icon-glass">
+                            <u-icon
+                              :name="getFieldIcon(showitem.monitorcode)"
+                              color="#ffffff"
+                              size="14"
+                            ></u-icon>
+                          </view>
                         </view>
                         <view class="data-text">
                           <text class="data-value">{{
@@ -149,6 +168,24 @@
                       </view>
                     </view>
                   </view>
+                  <!-- 更新时间 -->
+                  <view class="data-grid" v-if="item.readTime">
+                    <view class="datacard">
+                      <view class="data-icon">
+                        <view class="data-icon-glass">
+                          <image
+                            class="icon-top"
+                            src="/static/warndata/shijian.svg"
+                            mode="aspectFit"
+                          ></image>
+                        </view>
+                      </view>
+                      <view class="data-text">
+                        <text class="data-value">{{ item.readTime }}</text>
+                        <text class="data-label">更新时间</text>
+                      </view>
+                    </view>
+                  </view>
                 </view>
               </view>
             </u-list-item>
@@ -534,13 +571,6 @@ export default {
   white-space: nowrap;
 }
 
-.card-time {
-  margin-left: 16rpx;
-  font-size: 24rpx;
-  color: #8a94a6;
-  flex-shrink: 0;
-}
-
 .card-divider {
   height: 1rpx;
   background: #efeff0;
@@ -645,7 +675,7 @@ export default {
   display: flex;
   flex-direction: row;
   align-items: center;
-  width: calc(33.33% - 12rpx);
+  width: 48%;
   margin: 6rpx;
   padding: 16rpx 12rpx;
   box-sizing: border-box;
@@ -658,11 +688,12 @@ export default {
 }
 
 .data-icon {
+  position: relative;
   width: 48rpx;
   height: 48rpx;
-  border-radius: 8rpx;
-  background: linear-gradient(135deg, #75aaff 0%, #4d8cff 55%, #3b7ef0 100%);
-  box-shadow: 0 4rpx 10rpx rgba(61, 126, 240, 0.28);
+  border-radius: 10rpx;
+  background: #2b7cff;
+  box-shadow: 0 4rpx 10rpx rgba(43, 124, 255, 0.22);
   display: flex;
   align-items: center;
   justify-content: center;
@@ -670,6 +701,23 @@ export default {
   margin-right: 10rpx;
 }
 
+.data-icon-glass {
+  position: absolute;
+  left: -5rpx;
+  bottom: -5rpx;
+  width: 43rpx;
+  height: 43rpx;
+  border-radius: 10rpx;
+  background: transparent;
+  box-shadow: 0 0 0 0.6px #ffffff inset;
+  box-sizing: border-box;
+  backdrop-filter: blur(4rpx);
+  -webkit-backdrop-filter: blur(4rpx);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
 .icon-top {
   width: 30rpx;
   height: 28rpx;

+ 239 - 116
pages/operation/operation.vue

@@ -2,70 +2,110 @@
   <view class="container">
     <view v-if="!menushow" class="main">
       <view class="u-page">
-        <div class="flcard">
-          <div class="btns">
+        <!-- 一、查询条件 -->
+        <view class="query-card">
+          <view class="query-row">
             <uni-datetime-picker
-              class="u-button"
-              :show="dataShow"
-              mode="datetime"
-              @cancel="dataShow = false"
+              class="query-item"
+              type="datetime"
+              :hideSecond="true"
               @confirm="selectStartTime"
               v-model="StartTime"
-            ></uni-datetime-picker>
+            >
+              <view class="query-picker-inner">
+                <u-icon name="calendar" size="16" color="#2277fb"></u-icon>
+                <text class="query-picker-text">{{
+                  StartTime ? StartTime.slice(0, 10) : "开始日期"
+                }}</text>
+              </view>
+            </uni-datetime-picker>
             <uni-datetime-picker
-              class="u-button"
-              :show="dataShow1"
-              mode="datetime"
-              @cancel="dataShow1 = false"
+              class="query-item"
+              type="datetime"
+              :hideSecond="true"
               @confirm="selectEndTime"
               v-model="EndTime"
-            ></uni-datetime-picker>
-            <u-button
-              type="primary"
-              text="查询"
-              @click="checkHistoryData"
-              class="btn"
-            ></u-button>
-          </div>
-        </div>
-        <u-list :class="{ emptyhistory: historyData.length === 0 }">
+            >
+              <view class="query-picker-inner">
+                <u-icon name="calendar" size="16" color="#2277fb"></u-icon>
+                <text class="query-picker-text">{{
+                  EndTime ? EndTime.slice(0, 10) : "结束日期"
+                }}</text>
+              </view>
+            </uni-datetime-picker>
+            <view class="query-btn query-btn-query" @click="checkHistoryData">
+              查询
+            </view>
+          </view>
+        </view>
+        <!-- 二、数据列表 -->
+        <u-list class="historycontainer">
           <template v-if="historyData.length > 0">
             <u-list-item
               class="itemback"
               v-for="(item, index) in historyData"
               :key="index"
             >
-              <view class="time">
-                <view style="margin: 20rpx 30rpx">
-                  <text style="font-weight: bold">{{ item.createTime }}</text>
-                </view>
+              <view class="record-time-row">
+                <text class="record-time">{{ item.createTime }}</text>
               </view>
-              <view class="content flcard">
-                <view class="datacard user">
-                  <view style="margin: 20rpx 20rpx">
-                    <text class="text-style">{{ item.realname }}</text>
+              <view class="record-grid">
+                <view class="record-cell">
+                  <view class="record-icon-box">
+                    <image
+                      class="record-icon"
+                      src="/static/home/user.svg"
+                      mode="aspectFit"
+                    ></image>
+                  </view>
+                  <view class="record-cell-content">
+                    <text class="record-value">{{ item.realname || "-" }}</text>
+                    <text class="record-label">用户</text>
                   </view>
-                  <view class="text-info">用户</view>
                 </view>
-                <view class="split"></view>
-                <view class="datacard device">
-                  <view style="margin: 20rpx 20rpx">
-                    <text class="text-style">{{ item.devicename }}</text>
+                <view class="record-cell">
+                  <view class="record-icon-box">
+                    <image
+                      class="record-icon"
+                      src="/static/home/ctrldevice.svg"
+                      mode="aspectFit"
+                    ></image>
+                  </view>
+                  <view class="record-cell-content">
+                    <text class="record-value">{{
+                      item.devicename || "-"
+                    }}</text>
+                    <text class="record-label">操作设备</text>
                   </view>
-                  <view class="text-info">操作设备</view>
                 </view>
-                <view class="split"></view>
-                <view class="datacard record">
-                  <view style="margin: 20rpx 20rpx">
-                    <text class="text-style">{{ item.strremark }}</text>
+                <view class="record-cell">
+                  <view class="record-icon-box">
+                    <image
+                      class="record-icon"
+                      src="/static/home/ctrlLog.svg"
+                      mode="aspectFit"
+                    ></image>
+                  </view>
+                  <view class="record-cell-content">
+                    <text class="record-value">{{
+                      item.strremark || "-"
+                    }}</text>
+                    <text class="record-label">操作记录</text>
                   </view>
-                  <view class="text-info">操作记录</view>
                 </view>
               </view>
             </u-list-item>
           </template>
           <template v-else>
-            <view class="empty-message">暂无数据</view>
+            <!-- 空数据状态 -->
+            <view class="empty-box">
+              <image
+                class="empty-img"
+                src="/static/empty.png"
+                mode="widthFix"
+              ></image>
+              <text class="empty-text">数据为空</text>
+            </view>
           </template>
         </u-list>
       </view>
@@ -82,9 +122,6 @@ export default {
     return {
       menushow: false,
       TabCur: "gate",
-      dataShow: false,
-      dataShow1: false,
-      dataTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
       // deviceType: "gate", //设备类型
       StartTime: "",
       EndTime: "",
@@ -105,6 +142,7 @@ export default {
         if (data) {
           this.TabCur = data;
           // 选择设备分类,重新获取数据
+          this.checkHistoryData();
           this.$emit("setMenushow", {
             menushow: false,
           });
@@ -130,14 +168,12 @@ export default {
       const startTime = e.value;
       const formattedTime = dayjs(startTime).format("YYYY-MM-DD HH:mm:ss");
       this.StartTime = formattedTime;
-      this.dataShow = false;
     },
     //选择起始时间
     selectEndTime(e) {
       const endTime = e.value;
       const formattedTime = dayjs(endTime).format("YYYY-MM-DD HH:mm:ss");
       this.EndTime = formattedTime;
-      this.dataShow1 = false;
     },
     devicemenuShow(e) {
       this.menushow = !this.menushow;
@@ -175,102 +211,189 @@ export default {
 };
 </script>
 
-<style>
-.u-button {
-  border-radius: 5px;
-  border: 1px solid #2299fe;
-  font-weight: bold;
+<style lang="scss" scoped>
+.container {
+  padding: 0 !important;
 }
-.btn {
-  width: 80px;
-  background: linear-gradient(to right, #338afe, #07b4ff, #338afe) !important;
-  border-radius: 5px;
+.u-page {
+  padding: 20rpx 0;
+  box-sizing: border-box;
 }
-.content {
-  margin-top: 20rpx;
-  background-image: url("/static/operation/operateData.png");
-  background-size: 100% 100%;
-  background-repeat: no-repeat;
-  display: flex;
-  flex-direction: row;
-  justify-content: space-around;
-  align-items: center;
-}
-.split {
-  width: 2%;
-  height: 120rpx;
-  margin-right: 9%;
-  background-image: url("/static/operation/operateSplit.png");
-  background-size: 100% 100%;
-  background-repeat: no-repeat;
-}
-.emptyhistory {
-  background: url("/static/empty.png") no-repeat;
-  background-size: 100% 50%;
+
+/* ===== 一、查询条件 ===== */
+.query-card {
+  padding: 24rpx;
+  background-color: #ffffff;
+  border-radius: 16rpx;
+  box-shadow: 0 4rpx 16rpx rgba(41, 121, 255, 0.06);
+  margin-bottom: 20rpx;
 }
-.empty-message {
+.query-row {
   display: flex;
-  justify-content: center;
   align-items: center;
-  font-size: 16px;
-  line-height: 80vh;
-  color: #333;
 }
-.main {
-  display: flex;
-  flex-direction: column;
+.query-row > * {
+  flex: 1;
+  min-width: 0;
+  margin-right: 16rpx;
+}
+.query-row > *:last-child {
+  margin-right: 0;
 }
-.menupage {
-  position: absolute;
-  z-index: 2;
-  /* top: 40rpx; */
-  height: calc(100% - 40rpx);
-  width: 100%;
+
+.query-item {
+  flex: 1;
+  min-width: 0;
 }
-.btns {
+.query-picker-inner {
+  height: 64rpx;
+  padding: 0 12rpx;
+  border: 1rpx solid #2277fb;
+  border-radius: 8rpx;
+  background: #ffffff;
   display: flex;
+  align-items: center;
+  justify-content: center;
+  box-sizing: border-box;
 }
-.btns > * {
-  margin-right: 5px; /* 根据需要调整间距大小 */
+.query-picker-text {
+  margin-left: 8rpx;
+  font-size: 24rpx;
+  font-weight: 500;
+  color: #2277fb;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
 }
 
-/* 去除最后一个按钮的右边距 */
-.btns > *:last-child {
-  margin-right: 0;
+/* 查询按钮 */
+.query-btn {
+  flex: 0 0 auto;
+  width: 128rpx;
+  height: 64rpx;
+  line-height: 64rpx;
+  text-align: center;
+  color: #ffffff;
+  font-size: 26rpx;
+  border-radius: 8rpx;
+  background: #2277fb;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.query-btn-query {
+  font-weight: 600;
 }
 
-.flcard {
-  padding: 20rpx;
+/* ===== 二、数据区 ===== */
+.historycontainer {
   background-color: #ffffff;
-  margin-bottom: 5rpx;
+  border-radius: 16rpx;
+  box-shadow: 0 4rpx 16rpx rgba(41, 121, 255, 0.06);
+  overflow: hidden;
+}
+/* 空数据状态 */
+.empty-box {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 60rpx 40rpx 40rpx;
 }
-.text-style {
-  color: #3787fe;
-  font-size: 16px;
+.empty-img {
+  width: 60%;
+}
+.empty-text {
+  margin-top: 30rpx;
+  font-size: 32rpx;
   font-weight: bold;
-  text-align: center;
+  color: #000000;
 }
-.text-info {
-  margin: 20rpx 20rpx;
-  font-size: 14px;
-  font-weight: 500;
-  color: #657497;
+.main {
+  display: flex;
+  flex-direction: column;
 }
 .itemback {
   padding: 20rpx;
   background-color: #ffffff;
   margin-bottom: 5rpx;
 }
-.datacard {
-  width: 45%;
-  float: left;
-  height: 120rpx;
-  border-radius: 10px;
-}
-.time {
-  background: url(/static/operation/timeBg.png);
+.record-time-row {
+  margin-bottom: 12rpx;
+  background: url("/static/operation/timeBg.png");
   background-size: 100% 100%;
   background-position: right;
   background-repeat: no-repeat;
 }
+.record-time {
+  display: inline-block;
+  padding: 12rpx 30rpx;
+  font-size: 26rpx;
+  font-weight: 600;
+  color: #2663ca;
+}
+.record-grid {
+  display: flex;
+  flex-direction: row;
+  align-items: stretch;
+}
+.record-cell {
+  flex: 1;
+  min-width: 0;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  background: linear-gradient(
+    to bottom,
+    rgba(175, 195, 252, 0.6) 0%,
+    rgba(175, 195, 252, 0.1) 100%
+  );
+  border-radius: 12rpx;
+  padding: 16rpx 8rpx;
+  box-sizing: border-box;
+}
+.record-cell + .record-cell {
+  margin-top: 0;
+  margin-left: 12rpx;
+}
+.record-icon-box {
+  width: 48rpx;
+  height: 48rpx;
+  border-radius: 10rpx;
+  background: #71a5f9;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-shrink: 0;
+  margin-right: 8rpx;
+  margin-bottom: 0;
+}
+.record-icon {
+  width: 32rpx;
+  height: 32rpx;
+}
+.record-cell-content {
+  flex: 1;
+  min-width: 0;
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
+}
+.record-value {
+  display: block;
+  max-width: 100%;
+  font-size: 24rpx;
+  font-weight: 700;
+  color: #2663ca;
+  line-height: 1.3;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.record-label {
+  display: block;
+  margin-top: 6rpx;
+  font-size: 24rpx;
+  color: #677799;
+  line-height: 1.3;
+}
 </style>

+ 112 - 61
pages/user/people.vue

@@ -11,28 +11,28 @@
         class="padding flex text-center text-grey bg-white shadow-warp userinfo-box"
       >
         <view class="user1" :style="[{ animationDelay: '0.2s' }]">
-          <view class="usericon1"> </view>
           <view class="username1">
-            <view class="text-xl" style="color: #3485fe">{{
+            <view class="text-xl" style="color: #fff">{{
               personalList.username
             }}</view>
             <view class="text-info">用户</view>
           </view>
+          <view class="usericon1"> </view>
         </view>
 
         <view class="user2" :style="[{ animationDelay: '0.2s' }]">
-          <view class="usericon2"> </view>
           <view class="username2">
-            <view class="text-xl" style="color: #09bda0">{{
+            <view class="text-xl" style="color: #fff">{{
               personalList.post ? personalList.post : "员工"
             }}</view>
             <view class="text-info">职务</view>
           </view>
+          <view class="usericon2"> </view>
         </view>
       </view>
       <!-- 列表list-->
       <view
-        class="cu-list menu card-menu margin-top-xl margin-bottom-xl shadow-lg radius"
+        class="cu-list menu card-menu margin-top-xl margin-bottom-xl shadow-lg radius people-menu"
       >
         <view
           class="cu-item arrow animation-slide-bottom"
@@ -40,7 +40,7 @@
           @tap="scan"
         >
           <view class="content">
-            <text class="userSacll"></text>
+            <text class="cuIcon-scan menu-icon"></text>
             <text class="text-grey">扫码</text>
           </view>
         </view>
@@ -50,7 +50,7 @@
           :style="[{ animationDelay: '0.6s' }]"
         >
           <view class="content">
-            <text class="userDetail"></text>
+            <text class="cuIcon-settings menu-icon"></text>
             <text class="text-grey">设置</text>
           </view>
         </navigator>
@@ -62,7 +62,7 @@
           hover-class="none"
         >
           <view class="content">
-            <text class="userExit"></text>
+            <text class="cuIcon-exit menu-icon"></text>
             <text class="text-grey">退出</text>
           </view>
         </navigator>
@@ -169,7 +169,7 @@ export default {
   background-image: url("/static/topnavbar.png");
   /* #endif */
   /* #ifndef MP-WEIXIN */
-  background-image: url("/static/userBg.png");
+  background-image: url("/static/user/usertopbg.png");
   /* #endif */
   background-size: cover;
   height: 400rpx;
@@ -188,7 +188,7 @@ export default {
   position: relative;
   width: 250rpx;
   height: 250rpx;
-  background-image: url("/static/user1.png");
+  background-image: url("/static/user/userTop.png");
   background-size: 100% 100%;
 }
 .avatar {
@@ -202,62 +202,103 @@ export default {
 }
 .userinfo-box {
   display: flex;
-  justify-content: space-around;
+  justify-content: space-between;
   align-items: center;
   padding: 20rpx;
+  margin: 16rpx 15rpx 0;
+  box-sizing: border-box;
+  border-radius: 12rpx;
   background-color: #fff;
   box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
 }
 
 .user1 {
   display: flex;
-  flex-direction: row;
-  background-image: url("/static/user3.png");
+  align-items: center;
+  justify-content: space-between;
+  flex: 1;
+  min-width: 0;
+  box-sizing: border-box;
+  overflow: hidden;
+  background-image: url("/static/user/userbg1.png");
   background-size: 100% 100%;
-  margin: 10px;
-  width: 48%;
-  height: 120rpx;
+  background-repeat: no-repeat;
+  margin: 0;
+  padding: 14rpx 10rpx 10rpx 20rpx;
+  height: 128rpx;
+  border-radius: 16rpx;
 }
 .usericon1 {
-  margin-left: 20rpx;
-  margin-top: 20rpx;
-  width: 30%;
-  height: 80%;
-  background-image: url("/static/usericon1.png");
-  background-size: 100% 100%;
-  margin-right: 20rpx;
+  flex: 0 0 auto;
+  width: 136rpx;
+  height: 120rpx;
+  margin: 0;
+  align-self: flex-end;
+  background-image: url("/static/user/user.png");
+  background-size: contain;
+  background-position: right bottom;
+  background-repeat: no-repeat;
 }
 .username1 {
   display: flex;
   flex-direction: column;
   justify-content: center;
+  flex: 1;
+  min-width: 0;
+  padding-bottom: 8rpx;
+  text-align: left;
 }
 .user2 {
   display: flex;
-  flex-direction: row;
-  background-image: url("/static/user4.png");
+  align-items: center;
+  justify-content: space-between;
+  flex: 1;
+  min-width: 0;
+  box-sizing: border-box;
+  overflow: hidden;
+  background-image: url("/static/user/userbg2.png");
   background-size: 100% 100%;
-  margin: 10px;
-  width: 48%;
-  height: 120rpx;
+  background-repeat: no-repeat;
+  margin: 0 0 0 16rpx;
+  padding: 14rpx 10rpx 10rpx 20rpx;
+  height: 128rpx;
+  border-radius: 16rpx;
 }
 .usericon2 {
-  margin-left: 20rpx;
-  margin-top: 20rpx;
-  width: 30%;
-  height: 80%;
-  background-image: url("/static/usericon2.png");
-  background-size: 100% 100%;
-  margin-right: 20rpx;
+  flex: 0 0 auto;
+  width: 136rpx;
+  height: 120rpx;
+  margin: 0;
+  align-self: flex-end;
+  background-image: url("/static/user/user1.png");
+  background-size: contain;
+  background-position: right bottom;
+  background-repeat: no-repeat;
 }
 .username2 {
   display: flex;
   flex-direction: column;
   justify-content: center;
+  flex: 1;
+  min-width: 0;
+  padding-bottom: 8rpx;
+  text-align: left;
 }
-.text-info {
-  color: #8094ac;
+.username1 .text-xl,
+.username2 .text-xl {
+  overflow: hidden;
+  color: #fff;
+  font-size: 36rpx;
   font-weight: bold;
+  line-height: 1.2;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.username1 .text-info,
+.username2 .text-info {
+  color: rgba(255, 255, 255, 0.92);
+  font-size: 22rpx;
+  font-weight: 400;
 }
 .UCenter-bg text {
   opacity: 0.8;
@@ -291,34 +332,44 @@ map,
   width: 750rpx;
   height: 300rpx;
 }
-
-.userSacll {
-  background-image: url("/static/userscall.png");
-  background-size: 100% 100%;
-  width: 36rpx;
-  height: 36rpx;
-  margin-right: 20rpx;
-  display: inline-block;
-  vertical-align: middle;
+.card-menu {
+  margin: 20rpx;
 }
-.userDetail {
-  background-image: url("/static/userdetail.png");
-  background-size: 100% 100%;
-  width: 36rpx;
-  height: 36rpx;
-  margin-right: 20rpx;
-  display: inline-block;
-  vertical-align: middle;
+.people-menu {
+  overflow: visible;
+  margin-top: 20rpx;
+  background-color: transparent;
+  box-shadow: none;
 }
-.userExit {
-  background-image: url("/static/userexit.png");
-  background-size: 100% 100%;
-  width: 36rpx;
-  height: 36rpx;
-  margin-right: 20rpx;
-  display: inline-block;
+.people-menu > .cu-item {
+  min-height: 80rpx;
+  margin-bottom: 20rpx;
+  border-radius: 12rpx;
+  background-color: #fff;
+}
+.people-menu > .cu-item:last-child {
+  margin-bottom: 0;
+}
+.people-menu > .cu-item.arrow:before {
+  color: #1677ff;
+}
+.people-menu .menu-icon {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  width: 52rpx;
+  height: 52rpx;
+  margin-right: 16rpx;
+  border-radius: 8rpx;
+  background: linear-gradient(135deg, #80b4ff, #347df3);
+  color: #fff;
+  font-size: 30rpx;
   vertical-align: middle;
 }
+.people-menu .content > text[class*="cuIcon"] {
+  width: 52rpx;
+  margin-right: 16rpx;
+}
 .text-grey {
   color: #000;
   font-weight: bold;

+ 1 - 1
pages/user/userdetail.vue

@@ -7,7 +7,7 @@
 				<view slot="right"  @tap="rightClick">编辑</view>
 			</cu-custom>
 			<!-- list列表 -->
-			<view class="cu-list menu">
+			<view class="cu-list menu margin-top">
 				<view class="cu-item animation-slide-bottom" :style="[{animationDelay: '0.1s'}]">
 					<view class="content">
 						<text class="text-grey">头像</text>

+ 160 - 152
pages/user/useredit.vue

@@ -4,7 +4,7 @@
 			<block slot="backText">返回</block>
 			<block slot="content">编辑资料</block>
 		</cu-custom>
-		<form>
+		<form class="user-edit-form">
 			<view class="cu-form-group">
 				<view class="title">姓名</view>
 				<input placeholder="请输入姓名" name="input" v-model="myFormData.realname"></input>
@@ -31,14 +31,12 @@
 			<view class="cu-form-group margin-top">
 				<view class="title">性别</view>
 				<switch class='switch-sex' @change="SwitchC" :class="switchC?'checked':''" :checked="switchC?true:false"></switch>
-			</view>
-			
-			
+				</view>	
 			
 			<view class="cu-form-group margin-top">
 				<view class="title">手机号码</view>
 				<input placeholder="输入手机号码" name="input" v-model="myFormData.phone"></input>
-				<view class="cu-capsule radius">
+				<view class="cu-capsule radius">                  
 					<view class='cu-tag bg-blue '>
 						+86
 					</view>
@@ -59,156 +57,166 @@
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				index: -1,
-				switchC: true,
-				imgList: [],
-				uploadUrl:"/sys/common/upload",
-				myFormData:{
-					avatar:'',
-					realname:'',
-					username:'',
-					sex:1,
-					birthday:'',
-					orgCode:'',
-					workNo:'',
-					phone:'',
-					email:'',
-					id:'',
-				},
-			};
-		},
-		onLoad: function (option) {
-			console.log("this.$Route.query",this.$Route.query);
-			let query=this.$Route.query
-			if(query){
-				this.myFormData=query;
-				if(this.myFormData.sex=='女'){
-				  this.switchC = false
-				}else if(this.myFormData.sex=='男'){
-				  this.switchC = true
-				}
-				if(this.myFormData.avatar){
-				  this.imgList=[this.myFormData.avatar]
-				}
-				if(!this.myFormData.birthday){
-				  this.myFormData.birthday= '无'
-				}
-				if(this.myFormData.identity=='普通成员'){
-				  this.myFormData.identity = 1
-				}else if(this.myFormData.identity=='上级'){
-				  this.myFormData.identity = 2
-				}
-				if(this.myFormData.status=='正常'){
-				  this.myFormData.status = 1
-				}else if(this.myFormData.status=='冻结'){
-				  this.myFormData.status = 2
-				}
-				 this.Avatar=this.myFormData.avatar
-	
-				Object.keys(this.myFormData).map(key=>{
-				  if(this.myFormData[key]=='无'){
-					this.myFormData[key] = ''
-				  }
-				})
-				console.log("this.myFormData",this.myFormData)
-			}
-		},
-		methods: {
-			onSubmit() {
-			  let myForm = this.myFormData
-			  let checkPhone = new RegExp(/^[1]([3-9])[0-9]{9}$/);
-			  let checkEmail = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;
-			  console.log("myForm",myForm)
-			  if(!myForm.phone || myForm.phone.length==0){
-				this.$tip.alert('请输入手机号');
-				return false
-			  }
-			  if(!checkPhone.test(myForm.phone)){
-				this.$tip.alert('请输入正确的手机号');
-				return false
-			  }
-			  if(!checkEmail.test(myForm.email)){
-				this.$tip.alert('请输入正确的邮箱地址');
-				return false
-			  }
-				this.myFormData.id = this.$store.getters.userid
-				if(this.switchC){
-					this.myFormData.sex=1
-				}else{
-					this.myFormData.sex=2
-				}
-				console.log('myform',this.myFormData)
-				this.$tip.loading();
-				this.$http.put('/sys/user/appEdit',this.myFormData).then(res=>{
-					console.log(res)
-					this.$tip.loaded();
-					if (res.data.success){
-						this.$tip.toast('提交成功')
-						this.$Router.replace({name:'userdetail'})
-						/* uni.navigateTo({
+export default {
+  data() {
+    return {
+      index: -1,
+      switchC: true,
+      imgList: [],
+      uploadUrl: "/sys/common/upload",
+      myFormData: {
+        avatar: "",
+        realname: "",
+        username: "",
+        sex: 1,
+        birthday: "",
+        orgCode: "",
+        workNo: "",
+        phone: "",
+        email: "",
+        id: "",
+      },
+    };
+  },
+  onLoad: function (option) {
+    console.log("this.$Route.query", this.$Route.query);
+    let query = this.$Route.query;
+    if (query) {
+      this.myFormData = query;
+      if (this.myFormData.sex == "女") {
+        this.switchC = false;
+      } else if (this.myFormData.sex == "男") {
+        this.switchC = true;
+      }
+      if (this.myFormData.avatar) {
+        this.imgList = [this.myFormData.avatar];
+      }
+      if (!this.myFormData.birthday) {
+        this.myFormData.birthday = "无";
+      }
+      if (this.myFormData.identity == "普通成员") {
+        this.myFormData.identity = 1;
+      } else if (this.myFormData.identity == "上级") {
+        this.myFormData.identity = 2;
+      }
+      if (this.myFormData.status == "正常") {
+        this.myFormData.status = 1;
+      } else if (this.myFormData.status == "冻结") {
+        this.myFormData.status = 2;
+      }
+      this.Avatar = this.myFormData.avatar;
+
+      Object.keys(this.myFormData).map((key) => {
+        if (this.myFormData[key] == "无") {
+          this.myFormData[key] = "";
+        }
+      });
+      console.log("this.myFormData", this.myFormData);
+    }
+  },
+  methods: {
+    onSubmit() {
+      let myForm = this.myFormData;
+      let checkPhone = new RegExp(/^[1]([3-9])[0-9]{9}$/);
+      let checkEmail =
+        /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;
+      console.log("myForm", myForm);
+      if (!myForm.phone || myForm.phone.length == 0) {
+        this.$tip.alert("请输入手机号");
+        return false;
+      }
+      if (!checkPhone.test(myForm.phone)) {
+        this.$tip.alert("请输入正确的手机号");
+        return false;
+      }
+      if (!checkEmail.test(myForm.email)) {
+        this.$tip.alert("请输入正确的邮箱地址");
+        return false;
+      }
+      this.myFormData.id = this.$store.getters.userid;
+      if (this.switchC) {
+        this.myFormData.sex = 1;
+      } else {
+        this.myFormData.sex = 2;
+      }
+      console.log("myform", this.myFormData);
+      this.$tip.loading();
+      this.$http
+        .put("/sys/user/appEdit", this.myFormData)
+        .then((res) => {
+          console.log(res);
+          this.$tip.loaded();
+          if (res.data.success) {
+            this.$tip.toast("提交成功");
+            this.$Router.replace({ name: "userdetail" });
+            /* uni.navigateTo({
 							url: '/pages/user/userdetail'
 						}) */
-					}
-				}).catch(()=>{
-					this.$tip.loaded();
-					this.$tip.error('提交失败')
-				});
-			},
-			DateChange(e) {
-				this.myFormData.birthday = e.detail.value
-			},
-			SwitchC(e) {
-				this.switchC = e.detail.value
-			},
-			ChooseImage() {
-				var that=this;
-				uni.chooseImage({
-					count: 4, //默认9
-					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-					sourceType: ['album'], //从相册选择
-					success: (res) => {
-						that.$http.upload(that.$config.apiUrl+that.uploadUrl, {
-								filePath: res.tempFilePaths[0],
-								name: 'file'
-							})
-							.then(res => {
-								that.myFormData.avatar=res.data.message;
-							})
-							.catch(err => {
-								that.$tip.error(err.data.message)
-							});
-						this.imgList = res.tempFilePaths
-					}
-				});
-			},
-			ViewImage(e) {
-				uni.previewImage({
-					urls: this.imgList,
-					current: e.currentTarget.dataset.url
-				});
-			},
-			DelImg(e) {
-				uni.showModal({
-					title: '召唤师',
-					content: '确定要删除这段回忆吗?',
-					cancelText: '再看看',
-					confirmText: '再见',
-					success: res => {
-						if (res.confirm) {
-							this.imgList.splice(e.currentTarget.dataset.index, 1)
-						}
-					}
-				})
-			}
-		}
-	}
+          }
+        })
+        .catch(() => {
+          this.$tip.loaded();
+          this.$tip.error("提交失败");
+        });
+    },
+    DateChange(e) {
+      this.myFormData.birthday = e.detail.value;
+    },
+    SwitchC(e) {
+      this.switchC = e.detail.value;
+    },
+    ChooseImage() {
+      var that = this;
+      uni.chooseImage({
+        count: 4, //默认9
+        sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
+        sourceType: ["album"], //从相册选择
+        success: (res) => {
+          that.$http
+            .upload(that.$config.apiUrl + that.uploadUrl, {
+              filePath: res.tempFilePaths[0],
+              name: "file",
+            })
+            .then((res) => {
+              that.myFormData.avatar = res.data.message;
+            })
+            .catch((err) => {
+              that.$tip.error(err.data.message);
+            });
+          this.imgList = res.tempFilePaths;
+        },
+      });
+    },
+    ViewImage(e) {
+      uni.previewImage({
+        urls: this.imgList,
+        current: e.currentTarget.dataset.url,
+      });
+    },
+    DelImg(e) {
+      uni.showModal({
+        title: "召唤师",
+        content: "确定要删除这段回忆吗?",
+        cancelText: "再看看",
+        confirmText: "再见",
+        success: (res) => {
+          if (res.confirm) {
+            this.imgList.splice(e.currentTarget.dataset.index, 1);
+          }
+        },
+      });
+    },
+  },
+};
 </script>
 
 <style>
-	.cu-form-group .title {
-		min-width: calc(4em + 15px);
-	}
+.user-edit-form {
+  margin-top: 50rpx;
+}
+
+.user-edit-form .cu-form-group .title {
+  min-width: calc(4em + 15px);
+  flex-shrink: 0;
+}
 </style>

+ 2 - 1
pages/warndata/components/device-detail.vue

@@ -242,7 +242,8 @@ export default {
   .device-content {
     display: flex;
     flex-direction: column;
-    height: 704px;
+    height: auto;
+    min-height: 600px;
     box-sizing: border-box;
     overflow: hidden;
 

+ 1 - 1
pages/warndata/components/dust-detail.vue

@@ -417,7 +417,7 @@ export default {
     // padding: 0px 10px;
     // box-sizing: border-box;
     // overflow-y: auto;
-    height: 704px;
+    height: auto;
     box-sizing: border-box;
     overflow-y: auto;
 

+ 1 - 1
pages/warndata/components/fire-detail.vue

@@ -223,7 +223,7 @@ export default {
   }
 
   .fire-content-box {
-    height: 704px;
+    height: auto;
     box-sizing: border-box;
     overflow-y: auto;
 

+ 9 - 1
pages/warndata/components/gas-detail.vue

@@ -49,7 +49,9 @@
           <view class="content-item-box">
             <view class="content-item">
               <view class="item-l">
-                <view class="item-value">{{ item.warnLevel }}</view>
+                <view class="item-value">{{
+                  warnStatusText(item.warnLevel)
+                }}</view>
                 <view class="item-label">报警状态</view>
               </view>
               <view class="item-c"></view>
@@ -220,6 +222,12 @@ export default {
       }
       return "--";
     },
+    //报警状态:1-正常,0-断开
+    warnStatusText(val) {
+      if (val === 1 || val === "1") return "正常";
+      if (val === 0 || val === "0") return "断开";
+      return val === null || val === undefined || val === "" ? "--" : val;
+    },
     NavChange: function (item) {
       clearTimeout(this.timer);
       this.PageCur = item.index;

+ 1 - 2
pages/warndata/components/vent-detail.vue

@@ -365,7 +365,7 @@ export default {
   }
 
   .vent-content {
-    height: 704px;
+    height: auto;
     box-sizing: border-box;
     overflow-y: auto;
 
@@ -471,7 +471,6 @@ export default {
       box-sizing: border-box;
       background-color: #fff;
       margin-bottom: 2px;
-
       .bot-content {
         overflow-y: auto;
 

+ 0 - 0
static/filecenter/审批状态.svg → static/filecenter/ApprovalStatus.svg


+ 0 - 0
static/filecenter/创建人.svg → static/filecenter/Creator.svg


+ 0 - 0
static/filecenter/文件来源.svg → static/filecenter/FileSource.svg


+ 0 - 0
static/filecenter/上传时间.svg → static/filecenter/UpdateTime.svg


BIN
static/filecenter/laiyuan.png


BIN
static/filecenter/time.png


BIN
static/filecenter/user.png


BIN
static/filecenter/zhuangtai.png


+ 0 - 3
static/filecenter/关闭.svg

@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="16.912" height="16.912" viewBox="0 0 16.912 16.912">
-  <path id="路径_56280" data-name="路径 56280" d="M33.878,27.061l6.887-6.889a.9.9,0,0,0,0-1.268l-.038-.038a.9.9,0,0,0-1.268,0l-6.886,6.9-6.886-6.9a.9.9,0,0,0-1.268,0l-.037.038a.885.885,0,0,0,0,1.268l6.886,6.889-6.886,6.888a.9.9,0,0,0,0,1.268l.037.038a.9.9,0,0,0,1.268,0l6.886-6.888,6.886,6.888a.9.9,0,0,0,1.268,0l.038-.037a.9.9,0,0,0,0-1.268Z" transform="translate(-24.114 -18.604)" fill="#0065f8"/>
-</svg>

+ 0 - 6
static/filecenter/删除.svg

@@ -1,6 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="33.652" height="36" viewBox="0 0 33.652 36">
-  <g id="组_15422" data-name="组 15422" transform="translate(-36.102)">
-    <path id="路径_56282" data-name="路径 56282" d="M53.2,0a6.8,6.8,0,0,0-6.791,6.57H37.831a1.728,1.728,0,1,0,0,3.456h1.91V29.394C39.741,33.03,42.21,36,45.254,36H60.782c3.044,0,5.512-2.952,5.512-6.606V10.045h1.729a1.728,1.728,0,1,0,0-3.456H59.972A6.773,6.773,0,0,0,53.2,0ZM49.406,6.261a3.546,3.546,0,0,1,7.043,0H49.406Zm-3.96,26.59c-1.1,0-2.3-1.384-2.3-3.36V10.174H63.493V29.508c0,1.977-1.2,3.36-2.3,3.36H45.446v-.018Z" transform="translate(0 0)" fill="#0068fb"/>
-    <path id="路径_56283" data-name="路径 56283" d="M325.411,433.858a1.649,1.649,0,0,0,1.565-1.726v-9.851a1.573,1.573,0,1,0-3.13,0v9.851a1.637,1.637,0,0,0,1.566,1.726Zm5.478,0a1.65,1.65,0,0,0,1.566-1.726v-9.851a1.573,1.573,0,1,0-3.131,0v9.851a1.65,1.65,0,0,0,1.566,1.726Zm4.7,0a1.65,1.65,0,0,0,1.565-1.726v-9.851a1.573,1.573,0,1,0-3.13,0v9.851A1.637,1.637,0,0,0,335.585,433.858Z" transform="translate(-277.57 -405.685)" fill="#0068fb"/>
-  </g>
-</svg>

+ 12 - 0
static/home/ctrlLog.svg

@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="29.581" height="29.578" viewBox="0 0 29.581 29.578">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#cce0ff"/>
+      <stop offset="1" stop-color="#8fbbff"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15605" data-name="组 15605" transform="translate(-9.516 -9.959)">
+    <path id="路径_56307" data-name="路径 56307" d="M352.835,23.421a.921.921,0,0,1,0-1.83H364.4a.921.921,0,0,1,0,1.83Zm-3.016,3.66a.921.921,0,0,1,0-1.83H364.4a.921.921,0,0,1,0,1.83Zm-11.58-4.237a4.191,4.191,0,0,1,1.238-2.979l6.267-6.26-.042-.118a9.979,9.979,0,0,1-.583-3.391A10.114,10.114,0,0,1,355.231,0a10.009,10.009,0,0,1,4.008.834l.392.171a.191.191,0,0,0,.061.034.415.415,0,0,1,.27.389.394.394,0,0,1-.122.29.254.254,0,0,0-.046.065l-5.764,5.753L357.78,11.3l5.886-5.875a.151.151,0,0,0,.038-.031.32.32,0,0,1,.453,0,.291.291,0,0,1,.069.1l.038.084.228.53a10.1,10.1,0,0,1-9.285,14.1,9.958,9.958,0,0,1-3.391-.591l-.118-.042-6.271,6.26a4.212,4.212,0,0,1-7.189-2.987Z" transform="translate(-326.723 10.456)" fill="#2663ca" stroke="rgba(0,0,0,0)" stroke-miterlimit="10" stroke-width="1"/>
+    <path id="路径_56308" data-name="路径 56308" d="M352.835,23.421a.921.921,0,0,1,0-1.83H364.4a.921.921,0,0,1,0,1.83Zm-3.016,3.66a.921.921,0,0,1,0-1.83H364.4a.921.921,0,0,1,0,1.83Zm-11.58-4.237a4.191,4.191,0,0,1,1.238-2.979l6.267-6.26-.042-.118a9.979,9.979,0,0,1-.583-3.391A10.114,10.114,0,0,1,355.231,0a10.009,10.009,0,0,1,4.008.834l.392.171a.191.191,0,0,0,.061.034.415.415,0,0,1,.27.389.394.394,0,0,1-.122.29.254.254,0,0,0-.046.065l-5.764,5.753L357.78,11.3l5.886-5.875a.151.151,0,0,0,.038-.031.32.32,0,0,1,.453,0,.291.291,0,0,1,.069.1l.038.084.228.53a10.1,10.1,0,0,1-9.285,14.1,9.958,9.958,0,0,1-3.391-.591l-.118-.042-6.271,6.26a4.212,4.212,0,0,1-7.189-2.987Z" transform="translate(-328.723 12.456)" fill="url(#linear-gradient)"/>
+  </g>
+</svg>

+ 12 - 0
static/home/ctrldevice.svg

@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30.25" height="30.095" viewBox="0 0 30.25 30.095">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#cce0ff"/>
+      <stop offset="1" stop-color="#8fbbff"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15604" data-name="组 15604" transform="translate(-12.183 -12.17)">
+    <path id="路径_56305" data-name="路径 56305" d="M65.206,69.542a10.444,10.444,0,0,0,9.162,15.317,10.276,10.276,0,0,0,4.9-1.237l6.789,6.832a2.069,2.069,0,0,0,2.935,0l1.465-1.475a2.094,2.094,0,0,0,0-2.95l-6.844-6.882A10.44,10.44,0,0,0,74.367,64a10.275,10.275,0,0,0-4.733,1.146l5.583,5.62a3.14,3.14,0,0,1-.019,4.408,3.1,3.1,0,0,1-4.379.017Z" transform="translate(-49.286 -51.329)" fill="#2663ca" stroke="rgba(0,0,0,0)" stroke-miterlimit="10" stroke-width="1"/>
+    <path id="路径_56306" data-name="路径 56306" d="M65.206,69.542a10.444,10.444,0,0,0,9.162,15.317,10.276,10.276,0,0,0,4.9-1.237l6.789,6.832a2.069,2.069,0,0,0,2.935,0l1.465-1.475a2.094,2.094,0,0,0,0-2.95l-6.844-6.882A10.44,10.44,0,0,0,74.367,64a10.275,10.275,0,0,0-4.733,1.146l5.583,5.62a3.14,3.14,0,0,1-.019,4.408,3.1,3.1,0,0,1-4.379.017Z" transform="translate(-51.316 -49.299)" stroke="rgba(0,0,0,0)" stroke-width="1" fill="url(#linear-gradient)"/>
+  </g>
+</svg>

+ 16 - 0
static/home/gfl.svg

@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32.396" height="29.369" viewBox="0 0 32.396 29.369">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#cce0ff"/>
+      <stop offset="1" stop-color="#8fbbff"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15193" data-name="组 15193" transform="translate(-8.837 -12.989)">
+    <g id="组_15195" data-name="组 15195" transform="translate(10.958 12.989)">
+      <path id="路径_55263" data-name="路径 55263" d="M90.632,137.083a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h20.436a1.514,1.514,0,0,0,0-3.028h-6.8a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h6.8a4.541,4.541,0,0,1,0,9.083Zm-4.541,6.055a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h18.165a.757.757,0,0,1,.757.757v1.514a.757.757,0,0,1-.757.757Zm7.569,6.055a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757H98.2a.757.757,0,0,1,.757.757v1.514a.757.757,0,0,1-.757.757Zm7.569-3.028h9.839a4.541,4.541,0,0,1,0,9.083h-6.81a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h6.81a1.514,1.514,0,0,0,0-3.028h-9.839a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757Z" transform="translate(-85.334 -128)" fill="#2663ca"/>
+    </g>
+    <g id="组_15194" data-name="组 15194" transform="translate(8.837 15.111)">
+      <path id="路径_55263-2" data-name="路径 55263" d="M90.632,137.083a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h20.436a1.514,1.514,0,0,0,0-3.028h-6.8a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h6.8a4.541,4.541,0,0,1,0,9.083Zm-4.541,6.055a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h18.165a.757.757,0,0,1,.757.757v1.514a.757.757,0,0,1-.757.757Zm7.569,6.055a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757H98.2a.757.757,0,0,1,.757.757v1.514a.757.757,0,0,1-.757.757Zm7.569-3.028h9.839a4.541,4.541,0,0,1,0,9.083h-6.81a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h6.81a1.514,1.514,0,0,0,0-3.028h-9.839a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757Z" transform="translate(-85.334 -128)" fill="url(#linear-gradient)"/>
+    </g>
+  </g>
+</svg>

+ 32 - 0
static/home/glmj.svg

@@ -0,0 +1,32 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="29.176" height="29.17" viewBox="0 0 29.176 29.17">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#cce0ff"/>
+      <stop offset="1" stop-color="#8fbbff"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15603" data-name="组 15603" transform="translate(3.588 -20.416)">
+    <g id="组_15542" data-name="组 15542" transform="translate(-65.588 -42.984)">
+      <path id="路径_55378" data-name="路径 55378" d="M159.973,139.2h-19.16a1.715,1.715,0,0,0-1.713,1.713V160.07a1.713,1.713,0,0,0,1.713,1.713h19.16a1.715,1.715,0,0,0,1.713-1.713V140.913A1.717,1.717,0,0,0,159.973,139.2Zm-.343,11.842-8.689,8.689h-1.68l10.368-10.368Zm-13.273,8.689h-2.246l15.519-15.519v2.246Zm-5.2-10.878,7.594-7.613-.185.015h1.852l-9.262,9.256Zm0,4.563,12.163-12.163H155.1L141.155,155.2Zm4.678-12.163-4.678,4.693v-4.693Zm-4.678,16.85,16.85-16.847h1.628v.164l-.055-.055-17.951,17.947.421.421h-.894Zm12.691,1.628,5.784-5.784v5.784Z" transform="translate(-72.823 -73.502)" fill="#2663ca"/>
+      <path id="路径_55379" data-name="路径 55379" d="M101.468,101.553H98.585a.684.684,0,0,1-.685-.685V97.985a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.684.684,0,0,1-.685.685" transform="translate(-32.872 -32.872)" fill="#2663ca"/>
+      <path id="路径_55380" data-name="路径 55380" d="M68.6,69.709H65.713A1.713,1.713,0,0,1,64,68V65.113A1.713,1.713,0,0,1,65.713,63.4H68.6a1.715,1.715,0,0,1,1.713,1.713V68A1.713,1.713,0,0,1,68.6,69.709Zm-2.541-2.052h2.2v-2.2h-2.2Z" fill="#2663ca"/>
+      <path id="路径_55381" data-name="路径 55381" d="M789.668,101.553h-2.883a.684.684,0,0,1-.685-.685V97.985a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.683.683,0,0,1-.685.685" transform="translate(-700.208 -32.872)" fill="#2663ca"/>
+      <path id="路径_55382" data-name="路径 55382" d="M756.9,69.709h-2.883A1.713,1.713,0,0,1,752.3,68V65.113a1.715,1.715,0,0,1,1.713-1.713H756.9a1.715,1.715,0,0,1,1.713,1.713V68A1.717,1.717,0,0,1,756.9,69.709Zm-2.544-2.052h2.2v-2.2h-2.2Z" transform="translate(-667.433)" fill="#2663ca"/>
+      <path id="路径_55383" data-name="路径 55383" d="M101.468,789.653H98.585a.684.684,0,0,1-.685-.685v-2.883a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.684.684,0,0,1-.685.685" transform="translate(-32.872 -700.111)" fill="#2663ca"/>
+      <path id="路径_55384" data-name="路径 55384" d="M68.6,757.809H65.713A1.713,1.713,0,0,1,64,756.1v-2.883a1.713,1.713,0,0,1,1.713-1.713H68.6a1.715,1.715,0,0,1,1.713,1.713V756.1A1.715,1.715,0,0,1,68.6,757.809Zm-2.541-2.055h2.2v-2.2h-2.2Z" transform="translate(0 -667.239)" fill="#2663ca"/>
+      <path id="路径_55385" data-name="路径 55385" d="M789.668,789.653h-2.883a.684.684,0,0,1-.685-.685v-2.883a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.682.682,0,0,1-.685.685" transform="translate(-700.208 -700.111)" fill="#2663ca"/>
+      <path id="路径_55386" data-name="路径 55386" d="M756.9,757.809h-2.883A1.713,1.713,0,0,1,752.3,756.1v-2.883a1.715,1.715,0,0,1,1.713-1.713H756.9a1.715,1.715,0,0,1,1.713,1.713V756.1A1.719,1.719,0,0,1,756.9,757.809Zm-2.544-2.055h2.2v-2.2h-2.2Z" transform="translate(-667.433 -667.239)" fill="#2663ca"/>
+    </g>
+    <g id="组_15599" data-name="组 15599" transform="translate(-67.588 -40.984)">
+      <path id="路径_55378-2" data-name="路径 55378" d="M159.973,139.2h-19.16a1.715,1.715,0,0,0-1.713,1.713V160.07a1.713,1.713,0,0,0,1.713,1.713h19.16a1.715,1.715,0,0,0,1.713-1.713V140.913A1.717,1.717,0,0,0,159.973,139.2Zm-.343,11.842-8.689,8.689h-1.68l10.368-10.368Zm-13.273,8.689h-2.246l15.519-15.519v2.246Zm-5.2-10.878,7.594-7.613-.185.015h1.852l-9.262,9.256Zm0,4.563,12.163-12.163H155.1L141.155,155.2Zm4.678-12.163-4.678,4.693v-4.693Zm-4.678,16.85,16.85-16.847h1.628v.164l-.055-.055-17.951,17.947.421.421h-.894Zm12.691,1.628,5.784-5.784v5.784Z" transform="translate(-72.823 -73.502)" fill="url(#linear-gradient)"/>
+      <path id="路径_55379-2" data-name="路径 55379" d="M101.468,101.553H98.585a.684.684,0,0,1-.685-.685V97.985a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.684.684,0,0,1-.685.685" transform="translate(-32.872 -32.872)" fill="url(#linear-gradient)"/>
+      <path id="路径_55380-2" data-name="路径 55380" d="M68.6,69.709H65.713A1.713,1.713,0,0,1,64,68V65.113A1.713,1.713,0,0,1,65.713,63.4H68.6a1.715,1.715,0,0,1,1.713,1.713V68A1.713,1.713,0,0,1,68.6,69.709Zm-2.541-2.052h2.2v-2.2h-2.2Z" fill="url(#linear-gradient)"/>
+      <path id="路径_55381-2" data-name="路径 55381" d="M789.668,101.553h-2.883a.684.684,0,0,1-.685-.685V97.985a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.683.683,0,0,1-.685.685" transform="translate(-700.208 -32.872)" fill="url(#linear-gradient)"/>
+      <path id="路径_55382-2" data-name="路径 55382" d="M756.9,69.709h-2.883A1.713,1.713,0,0,1,752.3,68V65.113a1.715,1.715,0,0,1,1.713-1.713H756.9a1.715,1.715,0,0,1,1.713,1.713V68A1.717,1.717,0,0,1,756.9,69.709Zm-2.544-2.052h2.2v-2.2h-2.2Z" transform="translate(-667.433)" fill="url(#linear-gradient)"/>
+      <path id="路径_55383-2" data-name="路径 55383" d="M101.468,789.653H98.585a.684.684,0,0,1-.685-.685v-2.883a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.684.684,0,0,1-.685.685" transform="translate(-32.872 -700.111)" fill="url(#linear-gradient)"/>
+      <path id="路径_55384-2" data-name="路径 55384" d="M68.6,757.809H65.713A1.713,1.713,0,0,1,64,756.1v-2.883a1.713,1.713,0,0,1,1.713-1.713H68.6a1.715,1.715,0,0,1,1.713,1.713V756.1A1.715,1.715,0,0,1,68.6,757.809Zm-2.541-2.055h2.2v-2.2h-2.2Z" transform="translate(0 -667.239)" fill="url(#linear-gradient)"/>
+      <path id="路径_55385-2" data-name="路径 55385" d="M789.668,789.653h-2.883a.684.684,0,0,1-.685-.685v-2.883a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.682.682,0,0,1-.685.685" transform="translate(-700.208 -700.111)" fill="url(#linear-gradient)"/>
+      <path id="路径_55386-2" data-name="路径 55386" d="M756.9,757.809h-2.883A1.713,1.713,0,0,1,752.3,756.1v-2.883a1.715,1.715,0,0,1,1.713-1.713H756.9a1.715,1.715,0,0,1,1.713,1.713V756.1A1.719,1.719,0,0,1,756.9,757.809Zm-2.544-2.055h2.2v-2.2h-2.2Z" transform="translate(-667.433 -667.239)" fill="url(#linear-gradient)"/>
+    </g>
+  </g>
+</svg>

+ 18 - 0
static/home/maxarea.svg

@@ -0,0 +1,18 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="36.359" height="27.94" viewBox="0 0 36.359 27.94">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#cce0ff"/>
+      <stop offset="1" stop-color="#8fbbff"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15193" data-name="组 15193" transform="translate(-8.837 -12.74)">
+    <g id="组_15191" data-name="组 15191" transform="translate(11.087 12.74)" opacity="0.6">
+      <path id="路径_11" data-name="路径 11" d="M138.762,97.28c-5.505,0-7.016,11.01-10.794,11.01s-4.577-2.591-9.5-2.591c-5.505,0-5.829,4.318-5.829,4.318V122.97h34.11V106.779S144.267,97.28,138.762,97.28Z" transform="translate(-112.64 -97.28)" fill="#2663ca"/>
+      <path id="路径_12" data-name="路径 12" d="M139.194,344.551c-5.505,0-7.232,5.181-11.01,5.181s-7.491-6.692-11.658-6.692a4.473,4.473,0,0,0-3.886,2.375v12.953h34.11V348.221S144.7,344.551,139.194,344.551Z" transform="translate(-112.64 -332.678)" fill="#2663ca"/>
+    </g>
+    <g id="组_15192" data-name="组 15192" transform="translate(8.837 14.989)">
+      <path id="路径_11-2" data-name="路径 11" d="M138.762,97.28c-5.505,0-7.016,11.01-10.794,11.01s-4.577-2.591-9.5-2.591c-5.505,0-5.829,4.318-5.829,4.318V122.97h34.11V106.779S144.267,97.28,138.762,97.28Z" transform="translate(-112.64 -97.28)" fill="url(#linear-gradient)"/>
+      <path id="路径_12-2" data-name="路径 12" d="M139.194,344.551c-5.505,0-7.232,5.181-11.01,5.181s-7.491-6.692-11.658-6.692a4.473,4.473,0,0,0-3.886,2.375v12.953h34.11V348.221S144.7,344.551,139.194,344.551Z" transform="translate(-112.64 -332.678)" fill="url(#linear-gradient)"/>
+    </g>
+  </g>
+</svg>

+ 18 - 0
static/home/pressure.svg

@@ -0,0 +1,18 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34.663" height="21.905" viewBox="0 0 34.663 21.905">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#cce0ff"/>
+      <stop offset="1" stop-color="#8fbbff"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15604" data-name="组 15604" transform="translate(-8.668 -15.047)">
+    <g id="组_64" data-name="组 64" transform="translate(10.795 15.048)">
+      <path id="路径_55264" data-name="路径 55264" d="M61.577,117.753a15.13,15.13,0,0,1,3.485-4.817,16.271,16.271,0,0,1,5.171-3.246,17.446,17.446,0,0,1,12.666,0,16.371,16.371,0,0,1,5.171,3.246,15.067,15.067,0,0,1,3.488,4.817,14.15,14.15,0,0,1,1.277,5.9,14.484,14.484,0,0,1-.253,2.687l-.239,1.251h-5.28a1.521,1.521,0,1,1,0-3.034h2.482c.025-.3.036-.6.036-.9a11.466,11.466,0,0,0-2.1-6.6l-1.136,1.058a1.711,1.711,0,0,1-2.3,0,1.442,1.442,0,0,1,0-2.144l1.328-1.237a13.416,13.416,0,0,0-7.122-3.1,1.455,1.455,0,0,1,.018.219v1.82a1.633,1.633,0,0,1-3.257,0v-1.82a1.688,1.688,0,0,1,.018-.236c-6.456.711-11.475,5.838-11.475,12.034,0,.3.011.6.036.9h2.482a1.521,1.521,0,1,1,0,3.034h-5.28l-.239-1.251a14.284,14.284,0,0,1,1.024-8.582Z" transform="translate(-60.3 -108.5)" fill="#2663ca"/>
+      <path id="路径_55265" data-name="路径 55265" d="M420.278,383.745a1.711,1.711,0,0,1,2.3,0l4.983,4.642a3.306,3.306,0,0,1,.583-.054,2.747,2.747,0,1,1-2.942,2.741,2.69,2.69,0,0,1,.058-.543l-4.983-4.642A1.442,1.442,0,0,1,420.278,383.745Z" transform="translate(-411.177 -374.037)" fill="#2663ca"/>
+    </g>
+    <g id="组_15602" data-name="组 15602" transform="translate(8.668 17.175)">
+      <path id="路径_55264-2" data-name="路径 55264" d="M61.577,117.753a15.13,15.13,0,0,1,3.485-4.817,16.271,16.271,0,0,1,5.171-3.246,17.446,17.446,0,0,1,12.666,0,16.371,16.371,0,0,1,5.171,3.246,15.067,15.067,0,0,1,3.488,4.817,14.15,14.15,0,0,1,1.277,5.9,14.484,14.484,0,0,1-.253,2.687l-.239,1.251h-5.28a1.521,1.521,0,1,1,0-3.034h2.482c.025-.3.036-.6.036-.9a11.466,11.466,0,0,0-2.1-6.6l-1.136,1.058a1.711,1.711,0,0,1-2.3,0,1.442,1.442,0,0,1,0-2.144l1.328-1.237a13.416,13.416,0,0,0-7.122-3.1,1.455,1.455,0,0,1,.018.219v1.82a1.633,1.633,0,0,1-3.257,0v-1.82a1.688,1.688,0,0,1,.018-.236c-6.456.711-11.475,5.838-11.475,12.034,0,.3.011.6.036.9h2.482a1.521,1.521,0,1,1,0,3.034h-5.28l-.239-1.251a14.284,14.284,0,0,1,1.024-8.582Z" transform="translate(-60.3 -108.5)" fill="url(#linear-gradient)"/>
+      <path id="路径_55265-2" data-name="路径 55265" d="M420.278,383.745a1.711,1.711,0,0,1,2.3,0l4.983,4.642a3.306,3.306,0,0,1,.583-.054,2.747,2.747,0,1,1-2.942,2.741,2.69,2.69,0,0,1,.058-.543l-4.983-4.642A1.442,1.442,0,0,1,420.278,383.745Z" transform="translate(-411.177 -374.037)" fill="url(#linear-gradient)"/>
+    </g>
+  </g>
+</svg>

+ 18 - 0
static/home/qyyk.svg

@@ -0,0 +1,18 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="33.897" height="30.829" viewBox="0 0 33.897 30.829">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#cce0ff"/>
+      <stop offset="1" stop-color="#8fbbff"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15193" data-name="组 15193" transform="translate(-8.971 -12.989)">
+    <g id="组_15198" data-name="组 15198" transform="translate(11.198 12.989)" opacity="0.6">
+      <path id="路径_55264" data-name="路径 55264" d="M81.9,131.959l-4.248,1.462a4.273,4.273,0,0,1-3.1-.123l-3.6-1.567a7.473,7.473,0,0,0-6.816.451l-3.656,2.2L62.1,137.1l3.656-2.2a4.291,4.291,0,0,1,3.917-.261l3.6,1.568a7.436,7.436,0,0,0,5.4.211l4.248-1.462a4.282,4.282,0,0,1,3.1.12l4.329,1.877,1.261-2.909-4.329-1.877A7.453,7.453,0,0,0,81.9,131.959Zm8.831-13.79A15.835,15.835,0,0,0,60.3,124.333a16.215,16.215,0,0,0,.247,2.807l.232,1.307h5.139a1.585,1.585,0,1,0,0-3.17H63.5c-.025-.314-.035-.627-.035-.94a12.593,12.593,0,0,1,2.047-6.9l1.106,1.106a1.584,1.584,0,0,0,2.24-2.24l-1.293-1.293a12.64,12.64,0,0,1,6.932-3.237,1.628,1.628,0,0,0-.018.229v1.9a1.585,1.585,0,0,0,3.17,0V112a1.893,1.893,0,0,0-.018-.247A12.683,12.683,0,0,1,88.8,124.333c0,.313-.011.631-.035.94H86.352a1.585,1.585,0,0,0,0,3.17h5.139l.232-1.307a15.874,15.874,0,0,0,.247-2.807A15.63,15.63,0,0,0,90.727,118.169Z" transform="translate(-60.3 -108.5)" fill="#2663ca"/>
+      <path id="路径_55265" data-name="路径 55265" d="M430.321,383.765a1.582,1.582,0,0,0-2.24,0l-4.85,4.85a3.006,3.006,0,0,0-.567-.056,2.864,2.864,0,1,0,2.864,2.864,3.009,3.009,0,0,0-.056-.567l4.85-4.85A1.582,1.582,0,0,0,430.321,383.765Z" transform="translate(-407.137 -373.62)" fill="#2663ca"/>
+    </g>
+    <g id="组_15197" data-name="组 15197" transform="translate(8.971 15.216)">
+      <path id="路径_55264-2" data-name="路径 55264" d="M81.9,131.959l-4.248,1.462a4.273,4.273,0,0,1-3.1-.123l-3.6-1.567a7.473,7.473,0,0,0-6.816.451l-3.656,2.2L62.1,137.1l3.656-2.2a4.291,4.291,0,0,1,3.917-.261l3.6,1.568a7.436,7.436,0,0,0,5.4.211l4.248-1.462a4.282,4.282,0,0,1,3.1.12l4.329,1.877,1.261-2.909-4.329-1.877A7.453,7.453,0,0,0,81.9,131.959Zm8.831-13.79A15.835,15.835,0,0,0,60.3,124.333a16.215,16.215,0,0,0,.247,2.807l.232,1.307h5.139a1.585,1.585,0,1,0,0-3.17H63.5c-.025-.314-.035-.627-.035-.94a12.593,12.593,0,0,1,2.047-6.9l1.106,1.106a1.584,1.584,0,0,0,2.24-2.24l-1.293-1.293a12.64,12.64,0,0,1,6.932-3.237,1.628,1.628,0,0,0-.018.229v1.9a1.585,1.585,0,0,0,3.17,0V112a1.893,1.893,0,0,0-.018-.247A12.683,12.683,0,0,1,88.8,124.333c0,.313-.011.631-.035.94H86.352a1.585,1.585,0,0,0,0,3.17h5.139l.232-1.307a15.874,15.874,0,0,0,.247-2.807A15.63,15.63,0,0,0,90.727,118.169Z" transform="translate(-60.3 -108.5)" fill="url(#linear-gradient)"/>
+      <path id="路径_55265-2" data-name="路径 55265" d="M430.321,383.765a1.582,1.582,0,0,0-2.24,0l-4.85,4.85a3.006,3.006,0,0,0-.567-.056,2.864,2.864,0,1,0,2.864,2.864,3.009,3.009,0,0,0-.056-.567l4.85-4.85A1.582,1.582,0,0,0,430.321,383.765Z" transform="translate(-407.137 -373.62)" fill="url(#linear-gradient)"/>
+    </g>
+  </g>
+</svg>

+ 12 - 0
static/home/user.svg

@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="29.437" height="28.276" viewBox="0 0 29.437 28.276">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#cce0ff"/>
+      <stop offset="1" stop-color="#8fbbff"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15603" data-name="组 15603" transform="translate(-10.373 -13.434)">
+    <path id="路径_56236" data-name="路径 56236" d="M83.628,116.347a.932.932,0,0,1-.935-.928v-2.274a11.009,11.009,0,0,1,1.986-6.322,11.253,11.253,0,0,1,5.1-4.037l.34-.135-.288-.225a6.561,6.561,0,0,1-2.556-5.2,6.657,6.657,0,0,1,13.314,0,6.562,6.562,0,0,1-2.556,5.2l-.288.225.34.135a11.249,11.249,0,0,1,5.1,4.036,11.008,11.008,0,0,1,1.986,6.323v2.274a.932.932,0,0,1-.935.928Zm23.164-3.411c-.011-.622.686-6.751-4.428-9.494-.691-.473-.887-.536-.887-.919a.932.932,0,0,1,.637-.855l.006,0,.006,0c3.6-3.844-.689-8.389-1.35-8.679-.108-.175-.132-.212-.057-.092a5.5,5.5,0,0,1,5.417,5.475,5.439,5.439,0,0,1-1.434,3.672l-.184.2.243.125a8.829,8.829,0,0,1,4.808,7.882v1.759a.932.932,0,0,1-.935.927Z" transform="translate(-69.76 -77.185)" fill="#2663ca"/>
+    <path id="路径_56304" data-name="路径 56304" d="M83.628,116.347a.932.932,0,0,1-.935-.928v-2.274a11.009,11.009,0,0,1,1.986-6.322,11.253,11.253,0,0,1,5.1-4.037l.34-.135-.288-.225a6.561,6.561,0,0,1-2.556-5.2,6.657,6.657,0,0,1,13.314,0,6.562,6.562,0,0,1-2.556,5.2l-.288.225.34.135a11.249,11.249,0,0,1,5.1,4.036,11.008,11.008,0,0,1,1.986,6.323v2.274a.932.932,0,0,1-.935.928Zm23.164-3.411c-.011-.622.686-6.751-4.428-9.494-.691-.473-.887-.536-.887-.919a.932.932,0,0,1,.637-.855l.006,0,.006,0c3.6-3.844-.689-8.389-1.35-8.679-.108-.175-.132-.212-.057-.092a5.5,5.5,0,0,1,5.417,5.475,5.439,5.439,0,0,1-1.434,3.672l-.184.2.243.125a8.829,8.829,0,0,1,4.808,7.882v1.759a.932.932,0,0,1-.935.927Z" transform="translate(-71.82 -75.137)" stroke="rgba(0,0,0,0)" stroke-miterlimit="10" stroke-width="1" fill="url(#linear-gradient)"/>
+  </g>
+</svg>

BIN
static/user/user.png


BIN
static/user/user1.png


BIN
static/user/userTop.png


BIN
static/user/userbg1.png


BIN
static/user/userbg2.png


+ 3 - 0
static/user/userdetail.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="25.61" height="24.547" viewBox="0 0 25.61 24.547">
+  <path id="路径_56189" data-name="路径 56189" d="M97.62,100.97l-1.67-.234a1.056,1.056,0,0,1-.817-.645,10.227,10.227,0,0,0-1.252-2.175,1.052,1.052,0,0,1-.152-1.031l.634-1.562a1.034,1.034,0,0,0-.444-1.288l-3.611-2.087a1.035,1.035,0,0,0-1.337.26l-1.034,1.323a1.06,1.06,0,0,1-.978.388,9.591,9.591,0,0,0-2.5,0,1.06,1.06,0,0,1-.978-.388l-1.034-1.323a1.035,1.035,0,0,0-1.337-.26L77.5,94.033a1.038,1.038,0,0,0-.444,1.287l.634,1.562a1.051,1.051,0,0,1-.152,1.031,10.1,10.1,0,0,0-1.252,2.175,1.045,1.045,0,0,1-.817.645l-1.67.234A1.041,1.041,0,0,0,72.9,102v4.172a1.04,1.04,0,0,0,.893,1.028l1.67.234a1.056,1.056,0,0,1,.817.645,10.227,10.227,0,0,0,1.252,2.175,1.052,1.052,0,0,1,.152,1.031l-.634,1.562a1.034,1.034,0,0,0,.444,1.288l3.611,2.085a1.035,1.035,0,0,0,1.337-.26l1.034-1.323a1.059,1.059,0,0,1,.978-.388,9.592,9.592,0,0,0,2.5,0,1.059,1.059,0,0,1,.978.388l1.034,1.323a1.035,1.035,0,0,0,1.337.26l3.611-2.085a1.038,1.038,0,0,0,.444-1.288l-.634-1.562a1.052,1.052,0,0,1,.152-1.031,10.1,10.1,0,0,0,1.252-2.175,1.045,1.045,0,0,1,.817-.645l1.67-.234a1.038,1.038,0,0,0,.893-1.028V102A1.026,1.026,0,0,0,97.62,100.97Zm-11.912,7.167a4.055,4.055,0,1,1,4.055-4.055A4.056,4.056,0,0,1,85.708,108.137Z" transform="translate(-72.9 -91.809)" fill="#fff"/>
+</svg>

+ 6 - 0
static/user/userexit.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="26.805" height="23.457" viewBox="0 0 26.805 23.457">
+  <g id="组_15117" data-name="组 15117" transform="translate(0 -64)">
+    <path id="路径_56190" data-name="路径 56190" d="M0,67.351V84.106a3.351,3.351,0,0,0,3.351,3.351h9.215a.838.838,0,1,0,0-1.675H3.351a1.677,1.677,0,0,1-1.676-1.676V67.351a1.677,1.677,0,0,1,1.676-1.676h9.215a.838.838,0,1,0,0-1.675H3.351A3.351,3.351,0,0,0,0,67.351Z" fill="#fff"/>
+    <path id="路径_56191" data-name="路径 56191" d="M213.5,154.208l-9.488,8.576a1.675,1.675,0,0,1-2.8-1.244v-3.424a.21.21,0,0,0-.209-.209h-8.168a.837.837,0,0,1-.838-.838v-6.964a.837.837,0,0,1,.838-.838h8.168a.21.21,0,0,0,.209-.209v-3.427a1.675,1.675,0,0,1,2.8-1.244l9.488,8.576A.837.837,0,0,1,213.5,154.208Z" transform="translate(-186.974 -77.859)" fill="#fff"/>
+  </g>
+</svg>

+ 6 - 0
static/user/userscall.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24.231" height="22.416" viewBox="0 0 24.231 22.416">
+  <g id="组_15116" data-name="组 15116" transform="translate(-64.512 -97.792)">
+    <path id="路径_56187" data-name="路径 56187" d="M87.87,109.859h-22.5a.859.859,0,0,1,0-1.718h22.5a.875.875,0,0,1,.873.859A.885.885,0,0,1,87.87,109.859Zm-.9-4.309a.875.875,0,0,1-.873-.859v-4.309a.866.866,0,0,0-.873-.859h-5.2a.875.875,0,0,1-.873-.859.866.866,0,0,1,.873-.859h5.2a2.6,2.6,0,0,1,2.591,2.591v4.309A.84.84,0,0,1,86.97,105.55ZM72.256,99.524H67.934a.875.875,0,0,0-.873.859v4.309a.873.873,0,0,1-1.746,0v-4.309a2.6,2.6,0,0,1,2.591-2.591h4.322a.875.875,0,0,1,.873.859A.83.83,0,0,1,72.256,99.524ZM66.2,112.45a.875.875,0,0,1,.873.859v4.309a.866.866,0,0,0,.873.859H72.27a.875.875,0,0,1,.873.859.866.866,0,0,1-.873.859H67.934a2.6,2.6,0,0,1-2.591-2.591v-4.309A.834.834,0,0,1,66.2,112.45Zm13.84,6.027h5.2a.875.875,0,0,0,.873-.859v-4.309a.866.866,0,0,1,.873-.859.875.875,0,0,1,.873.859v4.309a2.6,2.6,0,0,1-2.591,2.591h-5.2a.875.875,0,0,1-.873-.859A.846.846,0,0,1,80.042,118.476Z" fill="#fff"/>
+    <path id="路径_56188" data-name="路径 56188" d="M285.544,286.72H275.181a1.265,1.265,0,0,0-1.261,1.261v9.67a1.265,1.265,0,0,0,1.261,1.261h10.363a1.265,1.265,0,0,0,1.261-1.261v-9.67A1.265,1.265,0,0,0,285.544,286.72Z" transform="translate(-203.742 -183.816)" fill="#fff"/>
+  </g>
+</svg>

BIN
static/user/usertopbg.png


+ 19 - 0
static/window/AirArea.svg

@@ -0,0 +1,19 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27.176" height="27.17" viewBox="0 0 27.176 27.17">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f9faff"/>
+      <stop offset="1" stop-color="#c4d2fd"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15542" data-name="组 15542" transform="translate(-64 -63.4)">
+    <path id="路径_55378" data-name="路径 55378" d="M159.973,139.2h-19.16a1.715,1.715,0,0,0-1.713,1.713V160.07a1.713,1.713,0,0,0,1.713,1.713h19.16a1.715,1.715,0,0,0,1.713-1.713V140.913A1.717,1.717,0,0,0,159.973,139.2Zm-.343,11.842-8.689,8.689h-1.68l10.368-10.368Zm-13.273,8.689h-2.246l15.519-15.519v2.246Zm-5.2-10.878,7.594-7.613-.185.015h1.852l-9.262,9.256Zm0,4.563,12.163-12.163H155.1L141.155,155.2Zm4.678-12.163-4.678,4.693v-4.693Zm-4.678,16.85,16.85-16.847h1.628v.164l-.055-.055-17.951,17.947.421.421h-.894Zm12.691,1.628,5.784-5.784v5.784Z" transform="translate(-72.823 -73.502)" fill="url(#linear-gradient)"/>
+    <path id="路径_55379" data-name="路径 55379" d="M101.468,101.553H98.585a.684.684,0,0,1-.685-.685V97.985a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.684.684,0,0,1-.685.685" transform="translate(-32.872 -32.872)" fill="url(#linear-gradient)"/>
+    <path id="路径_55380" data-name="路径 55380" d="M68.6,69.709H65.713A1.713,1.713,0,0,1,64,68V65.113A1.713,1.713,0,0,1,65.713,63.4H68.6a1.715,1.715,0,0,1,1.713,1.713V68A1.713,1.713,0,0,1,68.6,69.709Zm-2.541-2.052h2.2v-2.2h-2.2Z" fill="url(#linear-gradient)"/>
+    <path id="路径_55381" data-name="路径 55381" d="M789.668,101.553h-2.883a.684.684,0,0,1-.685-.685V97.985a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.683.683,0,0,1-.685.685" transform="translate(-700.208 -32.872)" fill="url(#linear-gradient)"/>
+    <path id="路径_55382" data-name="路径 55382" d="M756.9,69.709h-2.883A1.713,1.713,0,0,1,752.3,68V65.113a1.715,1.715,0,0,1,1.713-1.713H756.9a1.715,1.715,0,0,1,1.713,1.713V68A1.717,1.717,0,0,1,756.9,69.709Zm-2.544-2.052h2.2v-2.2h-2.2Z" transform="translate(-667.433)" fill="url(#linear-gradient)"/>
+    <path id="路径_55383" data-name="路径 55383" d="M101.468,789.653H98.585a.684.684,0,0,1-.685-.685v-2.883a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.684.684,0,0,1-.685.685" transform="translate(-32.872 -700.111)" fill="url(#linear-gradient)"/>
+    <path id="路径_55384" data-name="路径 55384" d="M68.6,757.809H65.713A1.713,1.713,0,0,1,64,756.1v-2.883a1.713,1.713,0,0,1,1.713-1.713H68.6a1.715,1.715,0,0,1,1.713,1.713V756.1A1.715,1.715,0,0,1,68.6,757.809Zm-2.541-2.055h2.2v-2.2h-2.2Z" transform="translate(0 -667.239)" fill="url(#linear-gradient)"/>
+    <path id="路径_55385" data-name="路径 55385" d="M789.668,789.653h-2.883a.684.684,0,0,1-.685-.685v-2.883a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.682.682,0,0,1-.685.685" transform="translate(-700.208 -700.111)" fill="url(#linear-gradient)"/>
+    <path id="路径_55386" data-name="路径 55386" d="M756.9,757.809h-2.883A1.713,1.713,0,0,1,752.3,756.1v-2.883a1.715,1.715,0,0,1,1.713-1.713H756.9a1.715,1.715,0,0,1,1.713,1.713V756.1A1.719,1.719,0,0,1,756.9,757.809Zm-2.544-2.055h2.2v-2.2h-2.2Z" transform="translate(-667.433 -667.239)" fill="url(#linear-gradient)"/>
+  </g>
+</svg>

+ 9 - 0
static/window/AirFlow.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30.275" height="27.248" viewBox="0 0 30.275 27.248">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f9faff"/>
+      <stop offset="1" stop-color="#c4d2fd"/>
+    </linearGradient>
+  </defs>
+  <path id="路径_55263" data-name="路径 55263" d="M90.632,137.083a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h20.436a1.514,1.514,0,0,0,0-3.028h-6.8a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h6.8a4.541,4.541,0,0,1,0,9.083Zm-4.541,6.055a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h18.165a.757.757,0,0,1,.757.757v1.514a.757.757,0,0,1-.757.757Zm7.569,6.055a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757H98.2a.757.757,0,0,1,.757.757v1.514a.757.757,0,0,1-.757.757Zm7.569-3.028h9.839a4.541,4.541,0,0,1,0,9.083h-6.81a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h6.81a1.514,1.514,0,0,0,0-3.028h-9.839a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757Z" transform="translate(-85.334 -128)" fill="url(#linear-gradient)"/>
+</svg>

+ 10 - 0
static/window/MaxArea.svg

@@ -0,0 +1,10 @@
+<svg id="组_15192" data-name="组 15192" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34.11" height="25.69" viewBox="0 0 34.11 25.69">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f9faff"/>
+      <stop offset="1" stop-color="#c4d2fd"/>
+    </linearGradient>
+  </defs>
+  <path id="路径_11" data-name="路径 11" d="M138.762,97.28c-5.505,0-7.016,11.01-10.794,11.01s-4.577-2.591-9.5-2.591c-5.505,0-5.829,4.318-5.829,4.318V122.97h34.11V106.779S144.267,97.28,138.762,97.28Z" transform="translate(-112.64 -97.28)" fill="url(#linear-gradient)"/>
+  <path id="路径_12" data-name="路径 12" d="M139.194,344.551c-5.505,0-7.232,5.181-11.01,5.181s-7.491-6.692-11.658-6.692a4.473,4.473,0,0,0-3.886,2.375v12.953h34.11V348.221S144.7,344.551,139.194,344.551Z" transform="translate(-112.64 -332.678)" fill="url(#linear-gradient)"/>
+</svg>

+ 12 - 0
static/window/Pressure.svg

@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32.902" height="20" viewBox="0 0 32.902 20">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f9faff"/>
+      <stop offset="1" stop-color="#c4d2fd"/>
+    </linearGradient>
+  </defs>
+  <g id="组_64" data-name="组 64" transform="translate(0)">
+    <path id="路径_55264" data-name="路径 55264" d="M61.592,117.857a15.3,15.3,0,0,1,3.524-4.871,16.454,16.454,0,0,1,5.229-3.283,17.643,17.643,0,0,1,12.808,0,16.555,16.555,0,0,1,5.229,3.283,15.237,15.237,0,0,1,3.528,4.871,14.309,14.309,0,0,1,1.292,5.966,14.647,14.647,0,0,1-.256,2.717L92.7,127.8H87.366a1.538,1.538,0,1,1,0-3.068h2.51c.026-.3.037-.607.037-.91a11.6,11.6,0,0,0-2.126-6.675l-1.149,1.07a1.73,1.73,0,0,1-2.327,0,1.458,1.458,0,0,1,0-2.168l1.343-1.251a13.567,13.567,0,0,0-7.2-3.133,1.471,1.471,0,0,1,.018.222v1.841a1.651,1.651,0,0,1-3.294,0v-1.841a1.707,1.707,0,0,1,.018-.239c-6.529.719-11.6,5.9-11.6,12.17,0,.3.011.61.037.91h2.51a1.538,1.538,0,1,1,0,3.068H60.8l-.242-1.265a14.444,14.444,0,0,1,1.036-8.679Z" transform="translate(-60.3 -108.5)" fill="url(#linear-gradient)"/>
+    <path id="路径_55265" data-name="路径 55265" d="M420.283,383.75a1.73,1.73,0,0,1,2.327,0l5.039,4.694a3.342,3.342,0,0,1,.589-.055,2.778,2.778,0,1,1-2.975,2.771,2.719,2.719,0,0,1,.059-.549l-5.039-4.694A1.458,1.458,0,0,1,420.283,383.75Z" transform="translate(-411.08 -373.932)" fill="url(#linear-gradient)"/>
+  </g>
+</svg>

+ 9 - 0
static/window/RearOpen.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="31" height="23.249" viewBox="0 0 31 23.249">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f9faff"/>
+      <stop offset="1" stop-color="#c4d2fd"/>
+    </linearGradient>
+  </defs>
+  <path id="路径_56172" data-name="路径 56172" d="M78.2,140.037a1.347,1.347,0,0,0,0,1.869l3.841,3.88c-.119.107-.239.214-.355.326a15.541,15.541,0,0,0-1.252,1.283,16.289,16.289,0,0,0-1.153,1.432,15.61,15.61,0,0,0-.992,1.55,15,15,0,0,0-.829,1.617,14.754,14.754,0,0,0-.651,1.668,15.513,15.513,0,0,0-.487,1.7c-.13.566-.245,1.15-.326,1.733s-.13,1.167-.163,1.733c-.009.35-.014.7-.008,1.046H71.1a1.538,1.538,0,0,0,0,3.032H99.516l.022,0a1.3,1.3,0,0,0,.9-.392,1.319,1.319,0,0,0,.374-1.02q0-.051,0-.1a1.456,1.456,0,0,0-1.128-1.507L80.044,140.037A1.311,1.311,0,0,0,78.2,140.037Zm5.71,7.635,5.039,5.1a8.54,8.54,0,0,0-3.069,4.644,8.733,8.733,0,0,0-.279,2.463H78.408c-.006-.326,0-.648.022-.963a14.778,14.778,0,0,1,.406-2.95q.178-.735.423-1.451c.163-.484.357-.95.553-1.417q.319-.7.7-1.367a13.987,13.987,0,0,1,.863-1.318c.31-.415.634-.832.977-1.215s.7-.75,1.071-1.1q.24-.214.485-.422Zm6.922,7,5.152,5.2H88.192a5.924,5.924,0,0,1,.189-1.761,5.72,5.72,0,0,1,1.023-2.1,5.549,5.549,0,0,1,1.424-1.342Z" transform="translate(-69.818 -139.656)" fill="url(#linear-gradient)"/>
+</svg>

+ 14 - 0
static/window/SourcePressure.svg

@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28.816" height="24.242" viewBox="0 0 28.816 24.242">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f9faff"/>
+      <stop offset="1" stop-color="#c4d2fd"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15250" data-name="组 15250" transform="translate(-10.813 -15.394)">
+    <g id="组_64" data-name="组 64" transform="translate(10.813 15.394)">
+      <path id="路径_55264" data-name="路径 55264" d="M79.95,128.383l-3.865,1.239a4.154,4.154,0,0,1-2.824-.1l-3.279-1.329a7.24,7.24,0,0,0-6.2.382l-3.327,1.869,1.487,2.3,3.327-1.866a4.157,4.157,0,0,1,3.564-.221l3.279,1.328a7.228,7.228,0,0,0,4.91.179l3.865-1.239a4.162,4.162,0,0,1,2.82.1l3.939,1.591,1.147-2.466-3.939-1.591A7.245,7.245,0,0,0,79.95,128.383ZM87.984,116.7a13.4,13.4,0,0,0-3.086-4.266,14.41,14.41,0,0,0-4.58-2.875,15.451,15.451,0,0,0-11.217,0,14.5,14.5,0,0,0-4.58,2.875,13.343,13.343,0,0,0-3.09,4.266A12.532,12.532,0,0,0,60.3,121.92a12.829,12.829,0,0,0,.224,2.379l.212,1.108h4.676a1.347,1.347,0,1,0,0-2.687h-2.2c-.022-.266-.032-.531-.032-.8a10.155,10.155,0,0,1,1.862-5.846l1.006.937a1.515,1.515,0,0,0,2.038,0,1.277,1.277,0,0,0,0-1.9l-1.176-1.1a11.883,11.883,0,0,1,6.307-2.744,1.288,1.288,0,0,0-.016.194v1.612a1.446,1.446,0,0,0,2.884,0v-1.612a1.493,1.493,0,0,0-.016-.209c5.718.63,10.163,5.171,10.163,10.658,0,.266-.01.534-.032.8H84a1.347,1.347,0,1,0,0,2.687H88.68l.212-1.108a12.65,12.65,0,0,0-.907-7.6Z" transform="translate(-60.3 -108.5)" fill="url(#linear-gradient)"/>
+      <path id="路径_55265" data-name="路径 55265" d="M429.373,383.694a1.514,1.514,0,0,0-2.038,0l-4.413,4.111a2.938,2.938,0,0,0-.516-.048,2.433,2.433,0,1,0,2.605,2.427,2.38,2.38,0,0,0-.051-.481l4.413-4.111A1.277,1.277,0,0,0,429.373,383.694Z" transform="translate(-408.278 -375.096)" fill="url(#linear-gradient)"/>
+    </g>
+  </g>
+</svg>

+ 9 - 0
static/window/WindowAirflow.svg

@@ -0,0 +1,9 @@
+<svg id="组_15547" data-name="组 15547" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30.275" height="27.248" viewBox="0 0 30.275 27.248">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f9faff"/>
+      <stop offset="1" stop-color="#c4d2fd"/>
+    </linearGradient>
+  </defs>
+  <path id="路径_55263" data-name="路径 55263" d="M90.632,137.083a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h20.436a1.514,1.514,0,0,0,0-3.028h-6.8a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h6.8a4.541,4.541,0,0,1,0,9.083Zm-4.541,6.055a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h18.165a.757.757,0,0,1,.757.757v1.514a.757.757,0,0,1-.757.757Zm7.569,6.055a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757H98.2a.757.757,0,0,1,.757.757v1.514a.757.757,0,0,1-.757.757Zm7.569-3.028h9.839a4.541,4.541,0,0,1,0,9.083h-6.81a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757h6.81a1.514,1.514,0,0,0,0-3.028h-9.839a.757.757,0,0,1-.757-.757v-1.514a.757.757,0,0,1,.757-.757Z" transform="translate(-85.334 -128)" fill="url(#linear-gradient)"/>
+</svg>

+ 19 - 0
static/window/WindowOpenArea.svg

@@ -0,0 +1,19 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27.176" height="27.17" viewBox="0 0 27.176 27.17">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f9faff"/>
+      <stop offset="1" stop-color="#c4d2fd"/>
+    </linearGradient>
+  </defs>
+  <g id="组_15542" data-name="组 15542" transform="translate(-64 -63.4)">
+    <path id="路径_55378" data-name="路径 55378" d="M159.973,139.2h-19.16a1.715,1.715,0,0,0-1.713,1.713V160.07a1.713,1.713,0,0,0,1.713,1.713h19.16a1.715,1.715,0,0,0,1.713-1.713V140.913A1.717,1.717,0,0,0,159.973,139.2Zm-.343,11.842-8.689,8.689h-1.68l10.368-10.368Zm-13.273,8.689h-2.246l15.519-15.519v2.246Zm-5.2-10.878,7.594-7.613-.185.015h1.852l-9.262,9.256Zm0,4.563,12.163-12.163H155.1L141.155,155.2Zm4.678-12.163-4.678,4.693v-4.693Zm-4.678,16.85,16.85-16.847h1.628v.164l-.055-.055-17.951,17.947.421.421h-.894Zm12.691,1.628,5.784-5.784v5.784Z" transform="translate(-72.823 -73.502)" fill="url(#linear-gradient)"/>
+    <path id="路径_55379" data-name="路径 55379" d="M101.468,101.553H98.585a.684.684,0,0,1-.685-.685V97.985a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.684.684,0,0,1-.685.685" transform="translate(-32.872 -32.872)" fill="url(#linear-gradient)"/>
+    <path id="路径_55380" data-name="路径 55380" d="M68.6,69.709H65.713A1.713,1.713,0,0,1,64,68V65.113A1.713,1.713,0,0,1,65.713,63.4H68.6a1.715,1.715,0,0,1,1.713,1.713V68A1.713,1.713,0,0,1,68.6,69.709Zm-2.541-2.052h2.2v-2.2h-2.2Z" fill="url(#linear-gradient)"/>
+    <path id="路径_55381" data-name="路径 55381" d="M789.668,101.553h-2.883a.684.684,0,0,1-.685-.685V97.985a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.683.683,0,0,1-.685.685" transform="translate(-700.208 -32.872)" fill="url(#linear-gradient)"/>
+    <path id="路径_55382" data-name="路径 55382" d="M756.9,69.709h-2.883A1.713,1.713,0,0,1,752.3,68V65.113a1.715,1.715,0,0,1,1.713-1.713H756.9a1.715,1.715,0,0,1,1.713,1.713V68A1.717,1.717,0,0,1,756.9,69.709Zm-2.544-2.052h2.2v-2.2h-2.2Z" transform="translate(-667.433)" fill="url(#linear-gradient)"/>
+    <path id="路径_55383" data-name="路径 55383" d="M101.468,789.653H98.585a.684.684,0,0,1-.685-.685v-2.883a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.684.684,0,0,1-.685.685" transform="translate(-32.872 -700.111)" fill="url(#linear-gradient)"/>
+    <path id="路径_55384" data-name="路径 55384" d="M68.6,757.809H65.713A1.713,1.713,0,0,1,64,756.1v-2.883a1.713,1.713,0,0,1,1.713-1.713H68.6a1.715,1.715,0,0,1,1.713,1.713V756.1A1.715,1.715,0,0,1,68.6,757.809Zm-2.541-2.055h2.2v-2.2h-2.2Z" transform="translate(0 -667.239)" fill="url(#linear-gradient)"/>
+    <path id="路径_55385" data-name="路径 55385" d="M789.668,789.653h-2.883a.684.684,0,0,1-.685-.685v-2.883a.684.684,0,0,1,.685-.685h2.883a.684.684,0,0,1,.685.685v2.883a.682.682,0,0,1-.685.685" transform="translate(-700.208 -700.111)" fill="url(#linear-gradient)"/>
+    <path id="路径_55386" data-name="路径 55386" d="M756.9,757.809h-2.883A1.713,1.713,0,0,1,752.3,756.1v-2.883a1.715,1.715,0,0,1,1.713-1.713H756.9a1.715,1.715,0,0,1,1.713,1.713V756.1A1.719,1.719,0,0,1,756.9,757.809Zm-2.544-2.055h2.2v-2.2h-2.2Z" transform="translate(-667.433 -667.239)" fill="url(#linear-gradient)"/>
+  </g>
+</svg>