瀏覽代碼

设施查看

fanghuisheng 1 年之前
父節點
當前提交
d76371a301

+ 47 - 0
src/api/business/fireIot/facilitiesView/index.js

@@ -0,0 +1,47 @@
+import upload from "@/utils/upload";
+import request from "@/utils/request";
+
+// 设施查询列表请求
+export function baseFacilityType(param) {
+    return request({
+        url: "/service-iot/baseFacilityType/typeInfo",
+        method: "POST",
+        data: param,
+    });
+}
+
+// 设施详情列表接口请求
+export function baseGgpFacility(param) {
+    return request({
+        url: "/service-iot/baseGgpFacility/page",
+        method: "POST",
+        data: param,
+    });
+}
+
+// 设施详情接口请求
+export function facilityInfo(param) {
+    return request({
+        url: "/service-iot/baseGgpFacility/facilityInfo",
+        method: "GET",
+        data: param,
+    });
+}
+
+// 设施详情关联设备接口请求
+export function deviceInfo(param) {
+    return request({
+        url: "/service-iot/baseGgpFacility/deviceInfo",
+        method: "GET",
+        data: param,
+    });
+}
+
+// 设施详情关联建筑接口请求
+export function buildInfo(param) {
+    return request({
+        url: "/service-iot/baseGgpFacility/buildInfo",
+        method: "GET",
+        data: param,
+    });
+}

+ 90 - 0
src/pages.json

@@ -431,6 +431,96 @@
           }
         }
       ]
+    },
+    // 消防物联网
+    {
+      "root": "pages/business/fireIot",
+      "pages": [
+        {
+          "path": "/deviceSelect/index",
+          "style": {
+            "navigationBarTitleText": "设备查询",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "/deviceSelect/components/deviceDetailsList",
+          "style": {
+            "navigationBarTitleText": "",
+            "enablePullDownRefresh": false,
+            "app-plus": {
+              "titleNView": {
+                "buttons": [
+                  {
+                    "text": "\ue7c7",
+                    "fontSize": "18px",
+                    // "redDot": true,
+                    "float": "right",
+                    "fontSrc": "/static/iconfont/iconfont.ttf",
+                    "width": "auto"
+                  }
+                ]
+              }
+            }
+          }
+        },
+        {
+          "path": "/deviceSelect/components/deviceDetails",
+          "style": {
+            "navigationBarTitleText": "设备详情",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "/facilitiesManage/index",
+          "style": {
+            "navigationBarTitleText": "设施管理",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "/facilitiesGather/index",
+          "style": {
+            "navigationBarTitleText": "设施采集",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "/facilitiesView/index",
+          "style": {
+            "navigationBarTitleText": "设施查看",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "/facilitiesView/facilitiesDetailsList",
+          "style": {
+            "navigationBarTitleText": "",
+            "enablePullDownRefresh": false,
+            "app-plus": {
+              "titleNView": {
+                "buttons": [
+                  {
+                    "text": "\ue7c7",
+                    "fontSize": "18px",
+                    // "redDot": true,
+                    "float": "right",
+                    "fontSrc": "/static/iconfont/iconfont.ttf",
+                    "width": "auto"
+                  }
+                ]
+              }
+            }
+          }
+        },
+        {
+          "path": "/facilitiesView/facilitiesDetails",
+          "style": {
+            "navigationBarTitleText": "设施详情",
+            "enablePullDownRefresh": false
+          }
+        }
+      ]
     }
   ],
   "globalStyle": {

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

@@ -0,0 +1,77 @@
+<template>
+  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+    <view class="padding-sm">
+      <!-- 宫格列表 -->
+      <view class="section2 section bg-white">
+        <view class="cu-list grid col-4 no-border" style="padding-top: 0.3125rem">
+          <view class="cu-item justify-center align-center" v-for="(item, index) in inspectList" :key="index" @tap="navItemClick(item.redirectUrl, item.id)">
+            <image :src="item.imgUrl" style="width: 40px; height: 40px"></image>
+            <view class="cu-tag badge" v-if="item.badge != 0">
+              <block v-if="item.badge != 0">{{ item.badge > 99 ? "99+" : item.badge }}</block>
+            </view>
+            <text style="font-size: 14px">{{ item.title }}</text>
+          </view>
+        </view>
+      </view>
+      <!-- 宫格列表 end -->
+    </view>
+  </scroll-view>
+</template>
+
+<script setup>
+import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
+import { ref, reactive, computed, onMounted, getCurrentInstance, toRefs, inject } from "vue";
+import { xunJianStores, publicStores } from "@/store/modules/index";
+
+import json from "@/static/js/json.js";
+
+const publicStore = publicStores(); //全局公共Store
+const xunJianStore = xunJianStores(); //全局变量值Store
+
+const { proxy } = getCurrentInstance();
+
+const inspectList = [
+  {
+    id: 1,
+    title: "设施采集",
+    badge: "0",
+    imgUrl: "/static/images/xunjian/xunJian-icon1.png",
+    redirectUrl: "/pages/business/fireIot/facilitiesGather/index",
+  },
+  {
+    id: 2,
+    title: "设施查看",
+    badge: "0",
+    imgUrl: "/static/images/xunjian/xunJian-icon2.png",
+    redirectUrl: "/pages/business/fireIot/facilitiesView/index",
+  },
+]; //九宫格json数据
+
+function navItemClick(url, id) {
+  if (url) {
+    uni.navigateTo({
+      url: url,
+    });
+  } else {
+    uni.showModal({
+      title: "Tips",
+      content: "此模块开发中~",
+      showCancel: false,
+      success: function (res) {
+        if (res.confirm) {
+        } else if (res.cancel) {
+        }
+      },
+    });
+  }
+}
+
+onLoad(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+</script>
+
+<style lang="scss"></style>

+ 216 - 0
src/pages/business/fireIot/facilitiesView/facilitiesDetails.vue

@@ -0,0 +1,216 @@
+<template>
+  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+    <view class="deviceDetails-container">
+      <view class="flex bg-white padding-15 margin-b-15">
+        <image style="width: 40px; height: 40px; margin: auto 15px auto 0" :src="dataArray.imagesUrl ? dataArray.imagesUrl : '/static/images/404.png'" mode="aspectFill"></image>
+
+        <view style="margin: auto auto auto 0">
+          <view style="font-size: 15px"> {{ dataArray.facilityName }} </view>
+        </view>
+
+        <view style="margin: auto 0 auto 0">
+          <!-- {{ siteList.siteStatus == null }} -->
+          <view style="font-size: 15px; color: #30bb00" :style="{ color: dataArray.status == 0 ? '#30bb00' : dataArray.status == 1 ? '#FF6000' : '#797979' }">
+            {{ dataArray.status == 0 ? "正常" : dataArray.status == 1 ? "维修" : "关闭" }}
+          </view>
+          <!-- #f07d28 -->
+        </view>
+      </view>
+
+      <view class="bg-white padding-15 margin-b-15">
+        <uni-section class="margin-bottom-10" title="基本信息" type="line"></uni-section>
+
+        <view class="tableType3 padding-0">
+          <u-empty v-if="dataList.length <= 0" text="暂无数据" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> </u-empty>
+
+          <u-row v-for="po in dataList" :key="po">
+            <u-col span="4">
+              <view style="text-align: right; padding: 0px 5px 0px 5px">{{ po.title }}</view>
+            </u-col>
+            <u-col span="8">
+              <view style="text-align: left; padding: 0px 5px 0px 5px">{{ po.value }}</view>
+            </u-col>
+          </u-row>
+        </view>
+      </view>
+
+      <view class="bg-white padding-15 margin-b-15">
+        <uni-section class="margin-bottom-10" title="关联设备" type="line"></uni-section>
+
+        <view class="flex margin-bottom-sm" style="height: 35px; line-height: 35px">
+          <u-input v-model="deviceId" placeholder="设备编号" @change="deviceInfoApi()" disabledColor="transparent" prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" clearable />
+        </view>
+
+        <view class="tableType1 price2">
+          <u-row>
+            <u-col span="1.5">
+              <view>序号</view>
+            </u-col>
+            <u-col span="3">
+              <view>设备编号</view>
+            </u-col>
+            <u-col span="3">
+              <view>设备名称</view>
+            </u-col>
+            <u-col span="4.5">
+              <view>设备地址</view>
+            </u-col>
+          </u-row>
+          <u-row v-for="(co, index) in dataList1" :key="index">
+            <u-col span="1.5">
+              <view>{{ index + 1 }}</view>
+            </u-col>
+            <u-col span="3">
+              <view>{{ co.deviceId }}</view>
+            </u-col>
+            <u-col span="3">
+              <view>{{ co.deviceName }}</view>
+            </u-col>
+            <u-col span="4.5">
+              <view>{{ co.installAddress }}</view>
+            </u-col>
+          </u-row>
+        </view>
+      </view>
+
+      <view class="bg-white padding-15 margin-b-15">
+        <uni-section class="margin-bottom-10" title="关联建筑" type="line"></uni-section>
+
+        <view class="flex margin-bottom-sm" style="height: 35px; line-height: 35px">
+          <u-input v-model="buildNum" placeholder="建筑编号" @change="buildInfoApi()" disabledColor="transparent" prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" clearable />
+        </view>
+
+        <view class="tableType1 price2">
+          <u-row>
+            <u-col span="1.5">
+              <view>序号</view>
+            </u-col>
+            <u-col span="3">
+              <view>建筑编号</view>
+            </u-col>
+            <u-col span="3">
+              <view>建筑名称</view>
+            </u-col>
+            <u-col span="4.5">
+              <view>建筑地址</view>
+            </u-col>
+          </u-row>
+          <u-row v-for="(co, index) in dataList2" :key="index">
+            <u-col span="1.5">
+              <view>{{ index + 1 }}</view>
+            </u-col>
+            <u-col span="3">
+              <view>{{ co.buildNum }}</view>
+            </u-col>
+            <u-col span="3">
+              <view>{{ co.buildName }}</view>
+            </u-col>
+            <u-col span="4.5">
+              <view>{{ co.address }}</view>
+            </u-col>
+          </u-row>
+        </view>
+      </view>
+    </view>
+  </scroll-view>
+</template>
+
+<script setup>
+import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
+
+import { facilityInfo, deviceInfo, buildInfo } from "@/api/business/fireIot/facilitiesView/index";
+
+const { proxy } = getCurrentInstance();
+
+const id = ref(undefined);
+const deviceId = ref(undefined);
+const buildNum = ref(undefined);
+const dataArray = ref({});
+const dataList = ref([
+  {
+    title: "所属部门",
+    value: "",
+  },
+  {
+    title: "设施类型",
+    value: "",
+  },
+  {
+    title: "设施编号",
+    value: "",
+  },
+  {
+    title: "设施位置",
+    value: "",
+  },
+  {
+    title: "创建时间",
+    value: "",
+  },
+]);
+
+const dataList1 = ref([]);
+const dataList2 = ref([]);
+
+/**
+ * @页面初始化
+ */
+function init() {
+  facilityInfo({ id: id.value }).then((requset) => {
+    if (requset.status === "SUCCESS") {
+      dataArray.value = requset.data[0];
+      dataList.value[2].value = requset.data[0].facilityNum ? requset.data[0].facilityNum : "无";
+      dataList.value[3].value = requset.data[0].address ? requset.data[0].address : "无";
+      dataList.value[4].value = requset.data[0].createTime ? requset.data[0].createTime.replace("T", " ") : requset.data[0].createTime;
+    }
+  });
+
+  deviceInfoApi();
+  buildInfoApi();
+}
+
+/**
+ * @设施详情关联设备接口请求
+ * @api接口请求
+ */
+function deviceInfoApi() {
+  deviceInfo({ id: id.value, deviceId: deviceId.value, current: 1, size: 1000 }).then((requset) => {
+    if (requset.status === "SUCCESS") {
+      dataList1.value = requset.data.records;
+    }
+  });
+}
+
+/**
+ * @设施详情关联建筑接口请求
+ * @api接口请求
+ */
+function buildInfoApi() {
+  buildInfo({ id: id.value, buildNum: buildNum.value, current: 1, size: 1000 }).then((requset) => {
+    if (requset.status === "SUCCESS") {
+      dataList2.value = requset.data.records;
+    }
+  });
+}
+
+onReady(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+
+onLoad((options) => {
+  if ("typeName" in options) {
+    dataList.value[1].value = options.typeName;
+  }
+  if ("id" in options) {
+    id.value = parseInt(options.id);
+    init();
+  }
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 112 - 0
src/pages/business/fireIot/facilitiesView/facilitiesDetailsList.vue

@@ -0,0 +1,112 @@
+<template>
+  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+    <u-sticky class="example-body" style="top: 0px" v-if="show">
+      <view class="padding-sm padding-tb-10" :class="'bg-' + proxy.$settingStore.themeColor.name">
+        <u--input
+          v-model="facilityName"
+          placeholder="搜索"
+          prefixIcon="search"
+          prefixIconStyle="font-size: 22px;color: #909399"
+          customStyle="height:35px;background-color:#f5f6fa;"
+          @confirm="init()"
+          clearable
+        ></u--input>
+      </view>
+    </u-sticky>
+
+    <view class="deviceDetailsList-container">
+      <view class="menu-list margin-0">
+        <view class="list-cell list-cell-arrow" v-for="(base, index) in dataList" :key="index" @click="handleToDevice(base.id)">
+          <view class="menu-item-box">
+            <view class="title">{{ base.facilityName }}</view>
+          </view>
+        </view>
+      </view>
+
+      <uni-pagination class="app-pagination bg-white" :current="current" :total="total" :pageSize="pageSize" prev-text="上一页" next-text="下一页" @change="paginationChange" />
+    </view>
+  </scroll-view>
+</template>
+
+<script setup>
+import { onLoad, onShow, onReady, onHide, onLaunch, onNavigationBarButtonTap, onPageScroll } from "@dcloudio/uni-app";
+import { ref, reactive, computed, getCurrentInstance, toRefs, inject } from "vue";
+import { publicStores, useStores } from "@/store/modules/index";
+
+import { baseGgpFacility } from "@/api/business/fireIot/facilitiesView/index";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+
+const show = ref(false);
+const facilityType = ref(undefined);
+const facilityName = ref("");
+const facilityTypeName = ref("");
+const pageSize = ref(20);
+const current = ref(1);
+const total = ref(0);
+
+/**
+ * @页面初始化
+ */
+function init() {
+  baseGgpFacility({ facilityType: facilityType.value, facilityName: facilityName.value, current: current.value, size: pageSize.value }).then((requset) => {
+    if (requset.status === "SUCCESS") {
+      if (requset.data.records.length > 0) {
+        uni.setNavigationBarTitle({
+          title: `${facilityTypeName.value}(${requset.data.total})`,
+        });
+      }
+
+      dataList.value = requset.data.records;
+      total.value = requset.data.total;
+    }
+  });
+}
+
+/**
+ * @分页chage事件
+ */
+function paginationChange(e) {
+  current.value = e.current;
+  init();
+}
+
+/**
+ * @设备详情跳转点击事件
+ */
+function handleToDevice(id) {
+  proxy.$tab.navigateTo(`/pages/business/fireIot/facilitiesView/facilitiesDetails?id=${id}&typeName=${facilityTypeName.value}`);
+}
+
+onReady(() => {});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+
+onLoad((options) => {
+  if ("typeName" in options) {
+    facilityTypeName.value = options.typeName;
+  }
+  if ("id" in options) {
+    facilityType.value = parseInt(options.id);
+    init();
+  }
+});
+
+// 自定义导航事件
+onNavigationBarButtonTap((e) => {
+  if (e.float == "right") {
+    show.value = !show.value;
+  } else {
+  }
+});
+</script>
+
+<style lang="scss" scoped>
+.deviceDetailsList-container {
+}
+</style>

+ 80 - 0
src/pages/business/fireIot/facilitiesView/index.vue

@@ -0,0 +1,80 @@
+<template>
+  <scroll-view class="scroll-height" :scroll-y="true" :data-theme="'theme-' + proxy.$settingStore.themeColor.name">
+    <view class="flex padding-tb-sm bg-white">
+      <view class="padding-lr-sm text-center" style="width: 50%">设施类型:{{ typeNum ? typeNum : 0 }}</view>
+      <view class="divider-default"></view>
+      <view class="padding-lr-sm text-center" style="width: 50%">设施总数:{{ facilityNum ? facilityNum : 0 }}</view>
+    </view>
+
+    <view class="flex bg-white margin-lr-sm margin-top-sm padding-sm shadow-default radius" v-for="(data, index) in dataList" :key="index" @click="handleToDevice(data.id, data.typeName)">
+      <view class="margin-right-sm" style="margin-top: auto; margin-bottom: auto">
+        <image style="width: 40px; height: 40px" :src="data.typeImg ? data.typeImg : '/static/images/404.png'" mode="aspectFill"></image>
+      </view>
+
+      <view style="width: 100%">
+        <view class="flex margin-bottom-xl">
+          <view class="text-dfl text-bold">{{ data.typeName }}</view>
+          <view style="font-size: 14px; margin-top: auto; margin-right: auto">({{ data.typeFacilityNum ? data.typeFacilityNum : 0 }})</view>
+          <view style="font-size: 14px; margin-top: auto" :style="{ color: proxy.$settingStore.themeColor.color }">查看地图</view>
+        </view>
+        <view>
+          <view class="flex">
+            <view style="font-size: 14px; width: 33.33%">正常:{{ data.normalFacilityNum ? data.normalFacilityNum : 0 }}</view>
+            <view style="font-size: 14px; width: 33.33%">维修:{{ data.upkeepFacilityNum ? data.upkeepFacilityNum : 0 }}</view>
+            <view style="font-size: 14px; width: 33.33%">关闭:{{ data.closeFacilityNum ? data.closeFacilityNum : 0 }}</view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </scroll-view>
+</template>
+
+<script setup>
+import { onLoad, onShow, onHide, onLaunch } from "@dcloudio/uni-app";
+import { ref, reactive, computed, onMounted, getCurrentInstance, toRefs, inject } from "vue";
+import { xunJianStores, publicStores } from "@/store/modules/index";
+
+import json from "@/static/js/json.js";
+
+import { baseFacilityType } from "@/api/business/fireIot/facilitiesView/index";
+
+const publicStore = publicStores(); //全局公共Store
+const xunJianStore = xunJianStores(); //全局变量值Store
+
+const { proxy } = getCurrentInstance();
+
+const typeNum = ref(0);
+const facilityNum = ref(0);
+const dataList = ref([]);
+
+/**
+ * @页面初始化
+ */
+function init() {
+  baseFacilityType().then((requset) => {
+    if (requset.status === "SUCCESS") {
+      dataList.value = requset.data[0].baseGgpFacilityTypeNumVO;
+      typeNum.value = requset.data[0].typeNum;
+      facilityNum.value = requset.data[0].facilityNum;
+    }
+  });
+}
+
+/**
+ * @设施详情列表跳转点击事件
+ */
+function handleToDevice(id, typeName) {
+  proxy.$tab.navigateTo(`/pages/business/fireIot/facilitiesView/facilitiesDetailsList?id=${id}&typeName=${typeName}`);
+}
+
+onLoad(() => {
+  init();
+});
+
+onShow(() => {
+  //调用系统主题颜色
+  proxy.$settingStore.systemThemeColor([1]);
+});
+</script>
+
+<style lang="scss"></style>

+ 0 - 66
src/pages/business/mhxf/xunJian/plan/components/siteDetails.vue

@@ -184,69 +184,3 @@ onMounted(() => {});
   //#endif
 }
 </style>
-
-<!--自定义图片上传功能样式-->
-<style scoped>
-.uploadView {
-  position: relative;
-  overflow: hidden;
-  width: calc(33% - 10px);
-  height: 110px;
-  margin: 0 15px 15px 0;
-  border: 1px solid #d9d9d9;
-  border-radius: 6px;
-  cursor: pointer;
-}
-
-.uploadView .uploadUimage {
-  height: 100%;
-}
-
-.uploadView .uploadUimage > uni-view {
-  height: 100%;
-}
-
-.uploadViewClose {
-  position: absolute;
-  background-color: #409eff;
-  transform: rotate(45deg);
-  width: 40px;
-  height: 24px;
-  text-align: center;
-  right: -15px;
-  top: -6px;
-  cursor: pointer;
-}
-
-.uploadViewClose .u-icon {
-  font-size: 12px;
-  margin-top: 4px;
-  margin-left: 10px;
-  transform: rotate(-45deg);
-  color: #ffffff;
-}
-
-.uploadView img {
-  width: 100%;
-}
-
-.upload-buttom {
-  display: flex;
-  font-size: 28px;
-  color: #909399;
-  border: 1px dashed #d9d9d9;
-  background-color: #fafafa;
-}
-
-.uploadView:nth-child(3n) {
-  margin: 0 !important;
-}
-
-.upload-buttom:hover {
-  border: 1px dashed #409eff;
-}
-
-:deep(.uploadDisabled) {
-  display: none !important;
-}
-</style>

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

@@ -59,13 +59,25 @@
             <view>常见问题</view>
           </view>
         </view>
-
-        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleSetting()">
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleCleanTmp()">
+          <view class="menu-item-box">
+            <view class="iconfont ucicon-qinglihuancun menu-icon"></view>
+            <view>清理缓存</view>
+            <view style="margin: 0 15px 0 auto; font-size: 14px; color: #909399">{{ proxy.$settingStore.currentSize }}</view>
+          </view>
+        </view>
+        <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleToUpgrade()">
+          <view class="menu-item-box">
+            <view class="iconfont ucicon-jianchagengxin menu-icon"></view>
+            <view>检查更新</view>
+          </view>
+        </view>
+        <!-- <view class="list-cell list-cell-arrow" @click="proxy.$settingStore.handleSetting()">
           <view class="menu-item-box">
             <view class="iconfont ucicon-shezhi menu-icon"></view>
             <view>设置</view>
           </view>
-        </view>
+        </view> -->
       </view>
 
       <!-- <view class="menu-list">

+ 69 - 1
src/static/scss/public.scss

@@ -133,6 +133,8 @@ uni-input {
 
     >.u-col {
       border-right: 1px #e5e5e5 solid;
+      white-space: normal;
+      word-break: break-all;
     }
 
     >.u-col:last-child {
@@ -306,4 +308,70 @@ uni-input {
   padding-bottom: constant(safe-area-inset-bottom);
   padding-bottom: env(safe-area-inset-bottom);
   //#endif
-}
+}
+
+// 自定义图片上传功能样式 开始
+.uploadView {
+  position: relative;
+  overflow: hidden;
+  width: calc(33% - 10px);
+  height: 110px;
+  margin: 0 15px 15px 0;
+  border: 1px solid #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+
+  .uploadUimage {
+    height: 100%;
+
+    >uni-view {
+      height: 100%;
+    }
+  }
+
+  .uploadViewClose {
+    position: absolute;
+    background-color: #409eff;
+    transform: rotate(45deg);
+    width: 40px;
+    height: 24px;
+    text-align: center;
+    right: -15px;
+    top: -6px;
+    cursor: pointer;
+
+    .u-icon {
+      font-size: 12px;
+      margin-top: 4px;
+      margin-left: 10px;
+      transform: rotate(-45deg);
+      color: #ffffff;
+    }
+  }
+
+  img {
+    width: 100%;
+  }
+}
+
+.uploadView:nth-child(3n) {
+  margin: 0 !important;
+}
+
+.upload-buttom {
+  display: flex;
+  font-size: 28px;
+  color: #909399;
+  border: 1px dashed #d9d9d9;
+  background-color: #fafafa;
+}
+
+.upload-buttom:hover {
+  border: 1px dashed #409eff;
+}
+
+:deep(.uploadDisabled) {
+  display: none !important;
+}
+
+// 自定义图片上传功能样式 结束