From 3a178cdd49413cbe2551ca0d4a11cf2629d082cb Mon Sep 17 00:00:00 2001
From: Lou <luzhiping@qqyjz.com>
Date: Thu, 16 Nov 2023 18:08:01 +0800
Subject: [PATCH] 编写逻辑获取权限菜单,网格巡查数据交互

---
 mixin/uploadMixin.js                  |    4 
 api/patrol/patrol.js                  |   11 +
 subPackage/workbench/views/patrol.vue |  118 +++++++++-----
 pages/home/index.vue                  |  170 +++++++++++++-------
 api/system/index.js                   |   12 +
 subPackage/user/role/index.vue        |   43 ++--
 common/setting.js                     |    6 
 subPackage/label/index.vue            |    1 
 subPackage/task/index.vue             |   14 +
 http/api.js                           |   16 +
 store/index.js                        |   38 ++++
 11 files changed, 296 insertions(+), 137 deletions(-)

diff --git a/api/patrol/patrol.js b/api/patrol/patrol.js
index 036f582..e6bc2ce 100644
--- a/api/patrol/patrol.js
+++ b/api/patrol/patrol.js
@@ -1,5 +1,15 @@
 import http from '@/http/api.js'
 
+// 添加巡查
+export const addPartrol = (data) => {
+	return http.request({
+		url: '/blade-gridPatrolRecord/gridPatrolRecord/save',
+		method: 'POST',
+		data:data
+	})
+}
+
+
 // 获取全部巡查类型
 export const getAllPatrolType = () => {
 	return http.request({
@@ -7,7 +17,6 @@
 		method: 'GET'
 	})
 }
-
 
 /**
  * 获取巡查任务列表
diff --git a/api/system/index.js b/api/system/index.js
new file mode 100644
index 0000000..054ad79
--- /dev/null
+++ b/api/system/index.js
@@ -0,0 +1,12 @@
+import http from '@/http/api.js'
+
+//获取轮播图
+export const getBannerList = (params) => {
+	return http.request({
+		url: '/blade-rotation/rotation/page',
+		method: 'GET',
+		params: {
+			...params
+		}
+	})
+}
\ No newline at end of file
diff --git a/common/setting.js b/common/setting.js
index 1f08edf..4239c01 100644
--- a/common/setting.js
+++ b/common/setting.js
@@ -12,9 +12,9 @@
 	// devUrl: 'https://sk.hubeishuiyi.cn',
 	// devUrl: 'http://192.168.1.156:9528',
 	// devUrl:'http://192.168.1.50:9528',
-	devUrl: 'http://192.168.0.102:9528',
-	// devUrl: 'https://srgdjczzxtpt.com:2080/api',
-	minioBaseUrl: "http://60.220.177.113:9000/jczz/",
+	// devUrl: 'http://192.168.0.102:9528',
+	devUrl: 'https://srgdjczzxtpt.com:2080/api',
+	minioBaseUrl: "https://srgdjczzxtpt.com:2080/gminio/jczz/",
 	// 数据中台接口url
 	// dataCenterUrl: 'http://10.10.2.192/services',
 	dataCenterUrl: 'https://sk.hubeishuiyi.cn/services',
diff --git a/http/api.js b/http/api.js
index ec32f02..d874e6c 100644
--- a/http/api.js
+++ b/http/api.js
@@ -68,11 +68,12 @@
 	return Promise.reject(config)
 })
 
-uni.showLoading({
-	title:"加载中..."
-})
+// uni.showLoading({
+// 	title:"加载中..."
+// })
 
 http.interceptors.response.use((response) => {
+	
 	// 若有数据返回则通过
 	if (response.data.access_token || response.data.key) {
 		return response.data
@@ -120,7 +121,6 @@
 		const currentPage = pages[pages.length - 1]
 		uni.setStorageSync("responIndex", 0)
 		uni.clearStorageSync()
-        
         uni.redirectTo({
         	url: `/pages/login/login-account?redirect=/${currentPage.route}`
         })
@@ -140,9 +140,11 @@
 		// 		}
 		// 	}
 		// })
-
-
-
+	}else {
+		uni.showToast({
+			title: '系统繁忙,请稍后再试',
+			icon: 'none'
+		});
 	}
 	return Promise.reject(response)
 })
diff --git a/mixin/uploadMixin.js b/mixin/uploadMixin.js
index 23d8f1f..df043fe 100644
--- a/mixin/uploadMixin.js
+++ b/mixin/uploadMixin.js
@@ -1,5 +1,5 @@
 import {
-	devUrl,
+	minioBaseUrl,
 	clientId,
 	clientSecret
 } from '@/common/setting'
@@ -22,7 +22,7 @@
 				maxCount: "5",
 				previewFullImage: true,
 				uploadText: "上传中",
-				url: devUrl + "/blade-resource/oss/endpoint/put-file-attach",
+				url: minioBaseUrl + "/blade-resource/oss/endpoint/put-file-attach",
 				header: {},
 			},
 		}
diff --git a/pages/home/index.vue b/pages/home/index.vue
index 26df391..300549c 100644
--- a/pages/home/index.vue
+++ b/pages/home/index.vue
@@ -14,7 +14,7 @@
 			</view>
 			<view class="" v-if="roleType != 1">
 				<u-grid :border="false" :col="curSelectSite.addressType != 2?4:2">
-					<u-grid-item v-for="(i,k) in cellList" :key="k" @click.native="toPage(i)">
+					<!-- <u-grid-item v-for="(i,k) in cellList" :key="k" @click.native="toPage(i)">
 						<u-icon :name="i.icon" :size="45"></u-icon>
 						<text class="f-26 mt-20">{{i.text}}</text>
 					</u-grid-item>
@@ -26,7 +26,12 @@
 					<u-grid-item @click.native="navTo()" v-if="curSelectSite.addressType != 2">
 						<u-icon name="/static/icon/nav-04.png" width="90rpx" height="90rpx"></u-icon>
 						<text class="f-26 mt-20">租客上报</text>
+					</u-grid-item> -->
+					<u-grid-item @click.native="navTo()" v-for="(i,k) in liveList"   :key="k">
+						<u-icon :name="i.source" width="90rpx" height="90rpx"></u-icon>
+						<text class="f-26 mt-20">{{i.name}}</text>
 					</u-grid-item>
+					
 				</u-grid>
 
 				<view class="section flex j-c-s-b mt-40">
@@ -67,7 +72,7 @@
 				</view>
 			</view>
 
-			<view class="" v-if="hasMenu('楼盘表').length>0">
+			<view class=""  v-if="hasMenu('楼盘表').length">
 				<view class="caption">
 					<view class="flex a-i-c">
 						<view class="line"></view>
@@ -204,6 +209,10 @@
 		getCountFrequencyNumber,
 		getCountTypeNumber
 	} from "@/api/task/task";
+	
+	import { getBannerList } from "@/api/system/index"
+	import { uploadUrl } from "@/common/setting"
+
 	export default {
 		data() {
 			return {
@@ -212,16 +221,17 @@
 					'http://220.176.210.217:9000/jczz/upload/20231111/cc093afc5e21639ef5b251eb865c24f4.png',
 					'http://220.176.210.217:9000/jczz/upload/20231111/cc093afc5e21639ef5b251eb865c24f4.png'
 				],
-				cellList: [{
+				cellList: [
+					{
 						icon: "/static/icon/nav-01.png",
 						text: "标签报事",
 						path: '/subPackage/label/index'
 					},
-					// {
-					// 	icon: "/static/icon/nav-02.png",
-					// 	text: "报事报修",
-					// 	path: '/subPackage/bs/views/repair'
-					// },
+					{
+						icon: "/static/icon/nav-02.png",
+						text: "报事报修",
+						path: '/subPackage/bs/views/repair'
+					},
 					{
 						icon: "/static/icon/nav-03.png",
 						text: "便民热线",
@@ -356,15 +366,18 @@
 				notice: [],
 				frequencyNumber: {},
 				typeNumber: {},
-				selectSiteIndex: [0, 0]
+				selectSiteIndex: [0, 0],
+				liveList:[],   //生活菜单
+				contactList:[]   //便民服务联系方式
+				
 
 			}
 		},
 
 		onLoad() {
+			this.getBanner();
 			this.init()
 			uni.$on('refresh', () => {
-				console.log("<====>")
 				this.selectSiteIndex = [0, 0]
 				this.init()
 			})
@@ -372,9 +385,8 @@
 		computed: {
 			hasMenu() {
 				return (name) => {
-					let resultArr = []
-					resultArr = this.getMenu(name, this.menuList, resultArr)
-					if (resultArr.length > 0) {
+					let resultArr = this.getMenu(name,this.menuList)
+					if (resultArr.length) {
 						return resultArr
 					} else {
 						return []
@@ -393,6 +405,18 @@
 				},
 				deep: true,
 				immediate: true
+			},
+			
+			'curSelectSite.addressType':{   
+				handler(newVal,oldVal){
+				   if(newVal){
+					   this.$store.dispatch("getMenuList").then(res=>{
+						    this.getMenuList();
+					   });
+				   }
+				},
+				deep: true,
+				immediate: true
 			}
 		},
 
@@ -401,16 +425,30 @@
 			//初始化
 			init() {
 				this.curSelectSite = {}
-				this.menuList = uni.getStorageSync("menu")
+				
 				this.selectRole = uni.getStorageSync("activeRole")
-				console.log(uni.getStorageSync("activeRole"))
 				this.getMenuList()
 				this.getSiteList()
 				this.getNoticeList()
 				this.getFrequencyNumber()
 				this.getTypeNumber()
 			},
-
+			
+			getBanner(){
+				getBannerList({
+					current:1,
+					size:5
+				}).then(res=>{
+					 let data = res.data.records;
+					 if(data.length){
+						 for(let i of data){
+						 	i.url = `${uploadUrl}${i.url}`
+						 }
+						 this.bannerList = data;
+					 }
+				})
+			},
+			
 			async getFrequencyNumber() {
 				const res = await getCountFrequencyNumber()
 				this.frequencyNumber = res.data
@@ -518,72 +556,83 @@
 				this.curHouseCode = e.value[0].id
 				console.log("curSite=>", this.curSelectSite);
 			},
-			getMenu(menuName, menuList, resultArr) {
+			getMenu(menuName) {
 				// console.log(menuList, menuName)
-				for (var i = 0; i < menuList.length; i++) {
-					if (menuList[i].name == menuName) {
-						resultArr.push(menuList[i])
-					} else {
-						if (menuList[i].children && menuList[i].children.length) {
-							this.getMenu(menuName, menuList[i].children, resultArr);
-						}
+				// for (var i = 0; i < menuList.length; i++) {
+				// 	if (menuList[i].name == menuName) {
+				// 		resultArr.push(menuList[i])
+				// 	} else {
+				// 		if (menuList[i].children && menuList[i].children.length) {
+				// 			this.getMenu(menuName, menuList[i].children, resultArr);
+				// 		}
+				// 	}
+				// }
+				let list = [];
+				for(let i of this.menuList){
+					if(i.name == menuName){
+						if(i.children && i.children.length){
+						 	list = i.children;
+							break;
+						 }
 					}
 				}
-				return resultArr
+				return list;
 			},
+			
 			//获取首页菜单
 			getMenuList() {
-				console.log("当前角色菜单", this.menuList)
-				this.getPhoneList()
-				this.getLiveList()
-				this.getWorkbenchList()
+				// console.log("当前角色菜单", this.menuList)
+				// this.getPhoneList()
+				// this.getLiveList()
+				this.menuList = uni.getStorageSync("menu")
+				this.liveList = this.hasMenu('生活')
+				this.contactList = this.hasMenu('快捷拨号');
+				// this.jobList = this.hasMenu('工作台')
+				// this.getWorkbenchList()
 			},
+			
+			
 			getPhoneList() {
-				this.gridDataList = []
-				const resultArr = this.hasMenu('快捷拨号')
-				if (resultArr.length == 0) {
-					return
+				const resultArr = this.hasMenu('快捷拨号');
+				if (resultArr.length) {
+					this.contactList = resultArr;
 				}
 
-				const topMenu = resultArr[0]
-
-				topMenu.children.forEach(menu => {
-					this.gridDataList.push({
-						title: menu.name,
-						data: "无数据",
-						phone: "无"
-					})
-				})
+				// const topMenu = resultArr[0]
+				// topMenu.children.forEach(menu => {
+				// 	this.gridDataList.push({
+				// 		title: menu.name,
+				// 		data: "无数据",
+				// 		phone: "无"
+				// 	})
+				// })
 			},
 
 			//获取生活菜单
 			getLiveList() {
 				this.liveList = []
 				const resultArr = this.hasMenu('生活')
-				if (resultArr.length == 0) {
-					return
+				console.log(resultArr);
+				if (resultArr.length) {
+					this.liveList = resultArr;
 				}
-
-				const topMenu = resultArr[0]
-
-				topMenu.children.forEach(menu => {
-					this.liveList.push({
-						imgUrl: menu.source,
-						title: menu.name,
-					})
-				})
+				// const topMenu = resultArr[0];
+				// console.log("topMenu====>",topMenu);
+				// this.liveList = topMenu.children;
+				// topMenu.children.forEach(menu => {
+				// 	this.liveList.push({
+				// 		imgUrl: menu.source,
+				// 		title: menu.name,
+				// 	})
+				// })
 			},
 
 			//获取工作台菜单
 			getWorkbenchList() {
 				// this.jobList = []
-				const resultArr = this.hasMenu('工作台')
-				if (resultArr.length == 0) {
-					return
-				}
-
-				const topMenu = resultArr[0]
-
+				const jobList = this.hasMenu('工作台')
+				
+				// const topMenu = resultArr[0]
 				// topMenu.children.forEach(menu => {
 				// 	this.jobList.push({
 				// 		imgUrl: menu.source,
@@ -634,6 +683,7 @@
 				}
 			},
 
+            //扫一扫
 			scan() {
 				const that = this
 				uni.scanCode({
diff --git a/store/index.js b/store/index.js
index ee6b0ac..c8321c1 100644
--- a/store/index.js
+++ b/store/index.js
@@ -1,7 +1,9 @@
 import Vue from 'vue'
 import Vuex from 'vuex'
 Vue.use(Vuex)
-
+import {
+		dynamicMenu,
+	} from "@/api/system/role.js"
 let lifeData = {};
 
 try {
@@ -53,7 +55,8 @@
 		// tabbarIndex: uni.getStorageSync("tabbarIndex") || 0,
 		hasUpdate: false, //true为不可登录,需要更新,false则是最新版
 		menu: [],
-		siteInfo:{}    //社区信息
+		siteInfo:{}    ,//社区信息
+		labelMenuList:[]      //标签报事菜单
 	},
 
 	mutations: {
@@ -120,8 +123,39 @@
 		setSiteInfo(state,val){
 			state.siteInfo = val;
 			uni.setStorageSync('siteInfo', val)
+		},
+		//标签报事菜单
+		setLabelReporMenutList(state,val){
+			state.labelMenuList = val;
+			uni.setStorageSync('labelMenuList',val);
 		}
 		
+	},
+	actions:{
+		getMenuList({commit}){
+			return new Promise((resolve,reject)=>{
+				dynamicMenu(this.state.activeRole.id).then(res=>{
+					if(res.code == 200){
+						let data = res.data;
+						let menu = data.filter(e => e.name == 'app')[0].children;
+						commit("SET_MENU",menu);
+						let liveList = menu.filter(item=>item.name == '生活')
+						let labelList = [];
+						if(liveList.length && liveList[0].children){
+							for(let i of liveList[0].children){
+								if(i.name == "标签报事" && i.children.length){
+									commit("setLabelReporMenutList",i.children)
+									break;
+								}
+							}
+						}
+						resolve("success")
+					}else {
+						reject("fail")
+					}
+				})
+			})
+		}
 	}
 })
 
diff --git a/subPackage/label/index.vue b/subPackage/label/index.vue
index fe95711..6e9a470 100644
--- a/subPackage/label/index.vue
+++ b/subPackage/label/index.vue
@@ -105,6 +105,7 @@
 		
 		onLoad(){
 			this.siteInfo = uni.getStorageSync("siteInfo");
+			this.navList = uni.getStorageSync("labelMenuList");
 		},
 		
 		onShow() {
diff --git a/subPackage/task/index.vue b/subPackage/task/index.vue
index 742c39f..c7e0823 100644
--- a/subPackage/task/index.vue
+++ b/subPackage/task/index.vue
@@ -91,6 +91,7 @@
 </template>
 
 <script>
+	import { getCountFrequencyNumber } from "@/api/task/task.js"
 	export default {
 		data() {
 			return {
@@ -99,7 +100,20 @@
 
 				}]
 			}
+		},
+		
+		onLoad(){
+			this.getCount();
+		},
+		
+		methods:{
+			getCount(){
+				getCountFrequencyNumber().then(res=>{
+					console.log(res);
+				})
+			}
 		}
+		
 	}
 </script>
 
diff --git a/subPackage/user/role/index.vue b/subPackage/user/role/index.vue
index 2bd95f4..487dbeb 100644
--- a/subPackage/user/role/index.vue
+++ b/subPackage/user/role/index.vue
@@ -74,29 +74,28 @@
 			},
 
 			async submit() {
-				const that = this
-
 				//保存当前激活的角色
-				store.commit("setActiveRole", this.selectRole)
-
-				//获取角色菜单
-				const res = await dynamicMenu(this.selectRole.id)
-				//把菜单存入store中
-				let data = res.data
-				const appMenu = data.filter(e => e.name == 'app')[0].children
-				console.log("菜单:", appMenu)
-				store.commit("SET_MENU", appMenu)
-				uni.showToast({
-					title: "切换身份成功",
-					icon: "success",
-					duration: data.duration || 1500,
-					success: () => {
-						uni.$emit("refresh")
-						setTimeout(() => {
-							this.$u.func.globalNavigator("/pages/home/index", "switchTab")
-						}, 1000)
-					}
-				})
+				this.$store.commit("setActiveRole", this.selectRole)
+				// const res = await dynamicMenu(this.selectRole.id)
+				// let data = res.data
+				// const appMenu = data.filter(e => e.name == 'app')[0].children
+				// console.log("菜单:", appMenu)
+				// store.commit("SET_MENU", appMenu)
+				
+				this.$store.dispatch("getMenuList").then(res=>{
+					uni.showToast({
+						title: "切换身份成功",
+						icon: "success",
+						duration:1500,
+						success: () => {
+							uni.$emit("refresh")
+							setTimeout(() => {
+								this.$u.func.globalNavigator("/pages/home/index", "switchTab")
+							}, 1000)
+						}
+					})
+				});
+				
 			}
 		}
 	}
diff --git a/subPackage/workbench/views/patrol.vue b/subPackage/workbench/views/patrol.vue
index b75e668..08f7fd6 100644
--- a/subPackage/workbench/views/patrol.vue
+++ b/subPackage/workbench/views/patrol.vue
@@ -1,30 +1,29 @@
 <template>
 	<view>
 		<view class="content bgc-ff">
-			<u-form labelPosition="left" :model="info" :rules="rules" ref="uForm" labelWidth="90"
+			<u-form labelPosition="left" :model="info" :rules="rules" ref="form" labelWidth="90"
 				:labelStyle="{fontSize:'28rpx'}">
-				<u-form-item label="标题" prop="info.title" borderBottom ref="item1">
-					<u-input v-model="info.title" border="none" placeholder="请输入标题" placeholderClass="f-28 c-99"
+				<u-form-item label="巡查标题" prop="info.name" borderBottom  required>
+					<u-input v-model="info.name" border="none" placeholder="请输入标题" placeholderClass="f-28 c-99"
 						inputAlign="right"></u-input>
 				</u-form-item>
-				<u-form-item label="内容" borderBottom ref="item1">
-					<u-input  type="textarea" v-model="info.address" border="none"  placeholderClass="f-28 c-99"
+				<u-form-item label="巡查内容" borderBottom prop="context"  required>
+					<u-input type="textarea" v-model="info.context" border="none" placeholderClass="f-28 c-99"
 						inputAlign="right">
-						
 					</u-input>
 				</u-form-item>
-				
-				<u-form-item label="走访时间" prop="applyTime" borderBottom  required @click="showSelectDate = true">
-					<u-input v-model="info.applyTime" disabled disabledColor="#ffffff" border="none" placeholder="请输入"
+
+				<u-form-item label="巡查时间" prop="patrolTime" borderBottom required  @click="showSelectDate = true">
+					<u-input v-model="info.patrolTime" disabled disabledColor="#ffffff" border="none" placeholder="请输入"
 						placeholderClass="f-28 c-99" inputAlign="right"></u-input>
 					<u-icon slot="right" name="arrow-right"></u-icon>
 				</u-form-item>
 			</u-form>
 		</view>
 		<view class="upload bgc-ff">
-			<view class="f-28">走访图片</view>
+			<view class="f-28">巡查图片</view>
 			<view class="mt-20">
-				<u-upload :fileList="images" :previewFullImage="uploadConfig.previewFullImage"
+				<u-upload :fileList="form.images" :previewFullImage="uploadConfig.previewFullImage"
 					:accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple" :maxCount="uploadConfig.maxCount"
 					:capture="uploadConfig.capture" @afterRead="afterReadImg" @delete="deletePic">
 					<view class="upload-item upload-icon flex_base">
@@ -33,12 +32,12 @@
 				</u-upload>
 			</view>
 		</view>
-		
-		<u-datetime-picker ref="datetimePicker" :show="showSelectDate" v-model="applyTime" mode="datetime"
-			:formatter="formatter" @confirm="confirmDate"  @cancel="showSelectDate = false"></u-datetime-picker>
+
+		<u-datetime-picker ref="datetimePicker" :show="showSelectDate" v-model="patrolTime" mode="datetime"
+			:formatter="formatter" @confirm="confirmDate" @cancel="showSelectDate = false"></u-datetime-picker>
 
 		<view class="footer">
-			<button class="footer-btn">提交</button>
+			<button class="footer-btn" @click="submitInfo">提交</button>
 		</view>
 
 	</view>
@@ -47,48 +46,84 @@
 
 <script>
 	import uploadMixin from "@/mixin/uploadMixin";
+	import {
+		addPartrol
+	} from "@/api/patrol/patrol.js"
 	export default {
 		mixins: [uploadMixin],
 		data() {
 			return {
+				form: {
+					images: []
+				},
 				info: {
-					title: "",
-					content: ""
+					name: "",
+					context: "",
+					patrolTime:""
 				},
 				rules: {
-					'title': {
+					'name': {
 						type: 'string',
 						required: true,
-						message: '请输入工作主题',
+						message: '请输入巡查标题',
 						trigger: ['blur', 'change']
 					},
-					'content': {
+					'context': {
 						type: 'string',
 						required: true,
-						message: '请输入工作内容',
+						message: '请输入巡查内容',
 						trigger: ['blur', 'change']
 					},
+					'patrolTime': {
+						type: 'string',
+						required: true,
+						message: '请选择巡查时间',
+						trigger: ['blur', 'change']
+					}
 				},
 
 				images: [
 
 				],
-				showSelectDate:false
+				showSelectDate: false,
+				patrolTime: Number(new Date())
 			}
 		},
-		methods:{
-			
+		methods: {
+
 			confirmDate(e) {
 				this.showSelectDate = false;
-				this.info.applyTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
+				this.info.patrolTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
 			},
-			
-			
-			getLocation(){
-				uni.chooseLocation({
-					success:(res)=>{
-						console.log(res);
-					}
+
+			checkImages() {
+				if (this.form.images.length) {
+					this.$set(this.info, "url", this.setImages())
+				}
+			},
+
+			setImages() {
+				let urls = [];
+				for (let i of this.form.images) {
+					urls.push(i.url);
+				}
+				return urls.join(",")
+			},
+
+			submitInfo() {
+				this.$refs.form.validate().then(valid => {
+					this.checkImages();
+					addPartrol(this.info).then(res => {
+						uni.showToast({
+							icon: 'success',
+							title: '提交成功',
+							success() {
+								setTimeout(() => {
+									uni.navigateBack()
+								}, 1000)
+							}
+						})
+					})
 				})
 			}
 		}
@@ -104,23 +139,26 @@
 		margin: 20rpx 30rpx;
 		padding: 0 30rpx;
 	}
-	.row{
-		padding:20rpx 0;
-		border-bottom:1px solid 
+
+	.row {
+		padding: 20rpx 0;
+		border-bottom: 1px solid
 	}
-	.location-btn{
-		width:116rpx;
-		height:46rpx;
+
+	.location-btn {
+		width: 116rpx;
+		height: 46rpx;
 		line-height: 46rpx;
 		border-radius: 4rpx;
-		border:1px solid currentColor;
-		padding:0;
+		border: 1px solid currentColor;
+		padding: 0;
 		background-color: #fff;
 	}
 
 	.upload {
 		margin: 0 30rpx;
 		padding: 30rpx;
+
 		.upload-item {
 			width: 140rpx;
 			height: 140rpx;

--
Gitblit v1.9.3