zxz hace 2 años
padre
commit
83a27c86d3

+ 5 - 2
config/index.js

@@ -6,8 +6,11 @@ const dev = {
 	// baseUrlNew: 'http://192.168.1.114:8090/',
 	// baseUrlNew: 'http://192.168.1.122:8090/',
 	// baseUrlNew: 'http://192.168.110.138:8090/',
-	// baseUrlNew: 'http://192.168.110.202:8090/',
-	baseUrlNew: 'http://api1.eliangeyun.com/',
+	baseUrlNew: 'http://192.168.110.202:8090/',
+	// 上传图片的
+	baseUrlNew1: 'http://192.168.110.202:9527/',
+	// baseUrlNew1: 'https://api2.eliangeyun.com/',
+	// baseUrlNew: 'http://api1.eliangeyun.com/',
 	h5Appid: 'wxb66b599f7f61b46f',
 	debug: false
 }

+ 54 - 0
pages.json

@@ -1465,6 +1465,60 @@
         ,{
             "path" : "pages/task/audit/leave_details",
             "style" :                                                                                    
+            {
+                "navigationBarTitleText": "请假详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/oa_office/the_oaOffice",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "OA办公",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/reimbursement/the_reimbursement",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "报销",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/reimbursement/request_funds",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/reimbursement/selectWarehouse",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "选择仓库",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/reimbursement/selectContract",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "选择合同",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/reimbursement/get_request_funds",
+            "style" :                                                                                    
             {
                 "navigationBarTitleText": "",
                 "enablePullDownRefresh": false

+ 21 - 3
pages/clock/the_clock.vue

@@ -26,9 +26,14 @@
 				</view>
 			</view>
 		</view>
-		<view class="footer">
+		<!-- <view class="footer">
 			<view @click='clockRecord' class="button">记录</view>
 			<view @click='submit' class="button">提交</view>
+		</view> -->
+		<u-toast ref="uToast" />
+		<view class="bottom-btn">
+			<u-button type="primary" class="submit" hover-class="none" @click="clockRecord">记录</u-button>
+			<u-button type="primary" class="submit" hover-class="none" @click="submit">提交</u-button>
 		</view>
 	</view>
 </template>
@@ -210,7 +215,7 @@
 
 	}
 
-	.footer {
+/* 	.footer {
 		background: #fff;
 		position: fixed;
 		bottom: 0;
@@ -227,8 +232,21 @@
 			text-align: center;
 			border-radius: 30px;
 		}
+	} */
+	.submit {
+		width: 40%;
+		background: #22C572;
+		border-radius: 10rpx;
+	}
+	.bottom-btn {
+		padding: 30rpx;
+		background: #FFFFFF;
+		width: 100%;
+		position: fixed;
+		bottom: 0rpx;
+		display: flex;
+		z-index: 9999;
 	}
-
 	.buns_item {
 		display: flex;
 		padding: 80rpx 0 50rpx 0;

+ 21 - 2
pages/leave/the_leave.vue

@@ -42,9 +42,14 @@
 				</view>
 			</view>
 		</view>
-		<view class="footer">
+		<!-- <view class="footer">
 			<view @click='clockRecord' class="button">记录</view>
 			<view @click='submit' class="button">提交</view>
+		</view> -->
+		<u-toast ref="uToast" />
+		<view class="bottom-btn">
+			<u-button type="primary" class="submit" hover-class="none" @click="clockRecord">记录</u-button>
+			<u-button type="primary" class="submit" hover-class="none" @click="submit">提交</u-button>
 		</view>
 	</view>
 </template>
@@ -247,7 +252,7 @@
 
 	}
 
-	.footer {
+/* 	.footer {
 		background: #fff;
 		position: fixed;
 		bottom: 0;
@@ -264,6 +269,20 @@
 			text-align: center;
 			border-radius: 30px;
 		}
+	} */
+	.submit {
+		width: 40%;
+		background: #22C572;
+		border-radius: 10rpx;
+	}
+	.bottom-btn {
+		padding: 30rpx;
+		background: #FFFFFF;
+		width: 100%;
+		position: fixed;
+		bottom: 0rpx;
+		display: flex;
+		z-index: 9999;
 	}
 
 	.buns_item {

+ 39 - 2
pages/leave/the_leave_record.vue

@@ -17,6 +17,9 @@
 				<view class="title">结束时间 : {{item.endDate}}</view>
 			</view>
 		</view>
+		<view v-show="isLoadMore">
+			<uni-load-more :status="loadStatus"></uni-load-more>
+		</view>
 	</view>
 </template>
 
@@ -27,11 +30,30 @@
 				pageSize: 10,
 				currentPage: 1,
 				tableData: [],
+				isLoadMore: false, //是否加载中
+				loadStatus: 'loading', //加载样式:more-加载前样式,loading-加载中样式,nomore-没有数据样式
 			}
 		},
 		onShow() {
 			this.getList()
 		},
+		//下拉刷新
+		onPullDownRefresh() {
+			this.currentPage = 1
+			this.isLoadMore = false
+			this.loadStatus = 'loading'
+			this.getList()
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onReachBottom() { //上拉触底函数
+			if (!this.isLoadMore) { //此处判断,上锁,防止重复请求
+				this.isLoadMore = true
+				this.currentPage += 1
+				this.getList()
+			}
+		},
 		methods: {
 			getList() {
 				this.$api.doRequest('get', '/leaveInfo/selectLeaveInfo', {
@@ -41,9 +63,24 @@
 					compId: uni.getStorageSync('pcUserInfo').compId,
 					commonId: uni.getStorageSync('pcUserInfo').userId,
 				}).then(res => {
-					if (res.data.code == 200) {
-						this.tableData = res.data.data.records
+					// if (res.data.code == 200) {
+					// 	this.tableData = res.data.data.records
 
+					// }
+					if (res.data.code == 200) {
+						if(res.data.data.records.length > 0){
+							this.isLoadMore = false
+								this.loadStatus = 'loading'
+						}else{
+							this.isLoadMore = true
+							this.loadStatus = 'nomore'
+						}
+						if(this.currentPage == 1){
+							this.tableData = res.data.data.records
+						}else{
+							this.tableData =this.tableData.concat(res.data.data.records)
+						}
+						
 					}
 				})
 			},

+ 624 - 0
pages/oa_office/the_oaOffice.vue

@@ -0,0 +1,624 @@
+<template>
+	<view>
+		<view class="wrap">
+			<view class="cu-list grid" :class="['col-' + gridCol,gridBorder?'':'no-border']">
+				<view class="cu-item" v-for="(item,index) in gridList" :key="index" @click="gridClick(item, index)"
+					v-if="index<gridCol*2 && item.show">
+					<view :class="['cuIcon-' + item.cuIcon,'text-' + item.color]">
+						<image :src="item.src" class="sign"></image>
+					</view>
+					<text>{{item.name}}</text>
+				</view>
+			</view>
+		</view>
+		<u-modal v-model="isShowAlert" :title-style="{fontSize: '18px',fontWeight:'500'}"
+			:content-style="{fontSize: '14px',fontWeight:'400'}" confirm-color='#22C572' confirm-text='确定' title='温馨提示'
+			showCancelButton='false' :content="content" @confirm="goOpenService" @cancel="cancelClick"></u-modal>
+		<u-modal v-model="isShowAlert1" :title-style="{fontSize: '18px',fontWeight:'500'}"
+			:content-style="{fontSize: '14px',fontWeight:'400'}" confirm-color='#22C572' confirm-text='确定' title='提示'
+			showCancelButton='false' :content="content1" @confirm="alertBtn1" @cancel="cancelClick1"></u-modal>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				isShowAlert1: false,
+				content1: '当前登入信息验证失败,是否重新登录?',
+				isShowAlert: false,
+				content: '您确定要退出吗?',
+				a: false,
+				inputShow: false,
+				modalName: '',
+				mycarStyle: '',
+				feild: undefined,
+				inputContent: '',
+				coverTransform: 'translateY(0px)',
+				coverTransition: '0s',
+				moving: false,
+				footprintList: [],
+				isVip: false,
+				userInfoTmp: [],
+				inputStatus: 'none',
+				carInfo: [],
+				gridCol: 4,
+				gridBorder: false,
+				headUrl: "../../static/img/myimg/YongHu@3x.png",
+				userphone: "",
+				username: "请更改昵称",
+				gridList: [{
+						num: 0,
+						name: '打卡',
+						// icon: 'cuIcon-edit',
+						src: '../../static/img/sign/clock.png',
+						tips: 0,
+						url: `/pages/clock/the_clock`,
+						show: true
+					},
+					{
+						num: 1,
+						name: '请假',
+						// icon: 'cuIcon-edit',
+						src: '../../static/img/oa_office/leave.png',
+						tips: 0,
+						url: `/pages/leave/the_leave`,
+						show: true
+					},
+					{
+						num: 2,
+						name: '加油',
+						// icon: 'cuIcon-edit',
+						src: '../../static/img/sign/fulling.png',
+						tips: 0,
+						url: `/pages/fuelfilling/the_fuel_filling`,
+						show: true
+					},
+					{
+						num: 3,
+						name: '短途记录',
+						// icon: 'cuIcon-edit',
+						src: '../../static/img/sign/shortfull.png',
+						tips: 0,
+						url: `/pages/shortDistance/short_distance_record`,
+						show: true
+					},
+					{
+						num: 4,
+						name: '报销',
+						// icon: 'cuIcon-edit',
+						src: '../../static/img/sign/reimbursement.png',
+						tips: 0,
+						url: `/pages/reimbursement/the_reimbursement`,
+						show: true
+					}
+				],
+
+			}
+		},
+		onShow() {
+			uni.hideKeyboard()
+			uni.showTabBar()
+			this.$api.doRequest('get', '/commonUser/api/checkSession').then(res => {
+				console.log("checkSession", res)
+				if (res.data.data == "INVALID") {
+					this.isShowAlert1 = true;
+				}
+			})
+			console.log("hasLogin", this.hasLogin)
+			if (this.userInfo) {
+				if (!this.userInfo.avatarUrl) {
+					this.headUrl = "../../static/img/myimg/YongHu@3x.png"
+				} else {
+					this.headUrl = this.userInfo.avatarUrl
+				}
+				this.username = this.userInfo.userName
+				this.userphone = this.userInfo.phone
+				var that = this
+				this.$api.doRequest('get', '/newNoticeTask/query/noticeTasks').then(res => {
+					console.log("noticeNumber", res)
+					if (res.data.data) {
+						let name = 'myTip';
+						let value = res.data.data.total;
+						that.$store.commit('$uStore', {
+							name,
+							value
+						});
+						if (value != 0 && value) {
+							uni.setTabBarBadge({
+								index: 4,
+								text: value + ""
+							})
+						}
+						name = 'taskTip';
+						value = res.data.data.total;
+						that.$store.commit('$uStore', {
+							name,
+							value
+						});
+					}
+				})
+			} else {
+				this.headUrl = "../../static/img/myimg/YongHu@3x.png"
+				this.username = "立即登录"
+			}
+			console.log("this.userInfo", this.userInfo)
+		},
+		methods: {
+			alertBtn1() {
+				uni.navigateTo({
+					url: '/pages/public/login'
+				})
+			},
+			cancelClick() {
+				this.isShowAlert = false
+			},
+			cancelClick1() {
+				this.isShowAlert = false
+			},
+			goOpenService() {
+				uni.hideTabBarRedDot({
+					index: 3
+				})
+				this.$store.commit('logout')
+				this.$api.logout()
+				uni.navigateTo({
+					url: `/pages/public/login`
+				})
+			},
+			gridClick(item, index) {
+				var that = this
+				if (!this.hasLogin) {
+					uni.showModal({
+						title: '提示',
+						content: '您尚未登录,是否立即登录?',
+						showCancel: true,
+						confirmText: '登录',
+						success: (e) => {
+							if (e.confirm) {
+								uni.navigateTo({
+									url: '/pages/public/login'
+								})
+							}
+						},
+						fail: () => {},
+						complete: () => {}
+					})
+				} else {
+					if (item.url) {
+						uni.navigateTo({
+							url: item.url
+						})
+					}
+				}
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	page {
+		background: #F5F6FA;
+	}
+
+	.container {
+		padding-top: 85px;
+		padding-top: 35px;
+		background-color: #F5F6FA;
+		position: relative;
+		width: 100vw;
+		height: 100vh;
+		overflow: hidden;
+		background: url('~@/static/img/login/bg_slices/bg@3x.png');
+		background-size: 100% 100%;
+		margin: 0 auto;
+	}
+
+	.cu-tag.badge {
+		right: 26rpx;
+	}
+
+	.path {
+		color: #007aff;
+		display: inline-block;
+		text-align: center;
+	}
+
+	.icon {
+		margin-right: 10rpx;
+	}
+
+	.portrait-box {
+		margin-top: 20rpx;
+	}
+
+	.qr-wrap {
+		margin-top: 20upx;
+		color: #fff;
+		font-size: 32rpx;
+	}
+
+	.cu-list {
+		/* height: 483rpx;
+		overflow-y: scroll; */
+		background: transparent;
+	}
+
+	.cu-list.grid.no-border {
+		padding: 0;
+	}
+
+	.badge_user {
+		color: #fff;
+		background-color: #dc3545;
+		display: inline-block;
+		padding: .25em .4em;
+		font-size: 75%;
+		font-weight: 700;
+		line-height: 1;
+		text-align: center;
+		white-space: nowrap;
+		vertical-align: top;
+		border-radius: 50%;
+		transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+	}
+
+	@keyframes move_wave {
+		0% {
+			transform: translateX(0) translateZ(0) scaleY(1)
+		}
+
+		50% {
+			transform: translateX(-25%) translateZ(0) scaleY(0.55)
+		}
+
+		100% {
+			transform: translateX(-50%) translateZ(0) scaleY(1)
+		}
+	}
+
+	.bg {
+		position: relative;
+		height: 300rpx;
+		/* background: linear-gradient(to bottom, #56ccf2, #2f80ed); */
+		/*background: linear-gradient(to bottom, #0be9fe, #4bb0fe); */
+		background: linear-gradient(to bottom, #d5f8ff, #56ccf2);
+
+	}
+
+	.bg_ware {
+		position: absolute;
+		left: 0;
+		bottom: -2rpx;
+		width: 100%;
+		mix-blend-mode: screen;
+		height: 224rpx;
+	}
+
+	%flex-center {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+	}
+
+	%section {
+		display: flex;
+		justify-content: space-around;
+		align-content: center;
+		background: #fff;
+		border-radius: 10upx;
+	}
+
+	.grid-item-box {
+		flex: 1;
+		/* position: relative;
+ */
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		padding: 15px 0;
+	}
+
+	.image {
+		width: 80rpx;
+		height: 80rpx;
+	}
+
+	.text {
+		font-size: 26rpx;
+		margin-top: 10rpx;
+	}
+
+	.user-section {
+		height: 520upx;
+		padding: 100upx 30upx 0;
+		position: relative;
+
+		.bg {
+			position: absolute;
+			left: 0;
+			top: 0;
+			width: 100%;
+			height: 100%;
+			filter: blur(1px);
+			box-shadow: 0px 1px 8px #ccc;
+			/* background:linear-gradient(#0eb0c9,#126bae); */
+			/* opacity: .7; */
+		}
+	}
+
+	.user-info-box {
+		height: 180upx;
+		/* display:flex; */
+		/* align-items:center; */
+		text-align: center;
+		position: relative;
+		z-index: 1;
+
+		.portrait {
+			width: 130upx;
+			height: 130upx;
+			border: 5upx solid #fff;
+			border-radius: 50%;
+		}
+
+		.username {
+			font-size: $font-lg + 3upx;
+			color: #fff;
+			margin-top: 20upx;
+		}
+	}
+
+	.vip-card-box {
+		display: flex;
+		flex-direction: column;
+		color: #f7d680;
+		height: 240upx;
+		background: linear-gradient(left, rgba(0, 0, 0, .7), rgba(0, 0, 0, .8));
+		border-radius: 16upx 16upx 0 0;
+		overflow: hidden;
+		position: relative;
+		padding: 20upx 24upx;
+
+		.card-bg {
+			position: absolute;
+			top: 20upx;
+			right: 0;
+			width: 380upx;
+			height: 260upx;
+		}
+
+		.b-btn {
+			position: absolute;
+			right: 20upx;
+			top: 16upx;
+			width: 132upx;
+			height: 40upx;
+			text-align: center;
+			line-height: 40upx;
+			font-size: 22upx;
+			color: #36343c;
+			border-radius: 20px;
+			background: linear-gradient(left, #f9e6af, #ffd465);
+			z-index: 1;
+		}
+
+		.tit {
+			font-size: $font-base+2upx;
+			color: #f7d680;
+			margin-bottom: 28upx;
+
+			.yticon {
+				color: #f6e5a3;
+				margin-right: 16upx;
+			}
+		}
+
+		.e-b {
+			font-size: $font-sm;
+			color: #d8cba9;
+			margin-top: 10upx;
+		}
+	}
+
+	.cover-container {
+		padding: 1px 10px;
+		padding-bottom: 200upx;
+
+		/* background-color: #F5F6FA; */
+		/* 	border-radius: 20px; */
+		margin-top: 60upx;
+
+		.arc {
+			position: absolute;
+			left: 0;
+			top: -34upx;
+			width: 100%;
+			height: 36upx;
+		}
+	}
+
+	.tj-sction {
+		@extend %section;
+
+		.tj-item {
+			@extend %flex-center;
+			flex-direction: column;
+			height: 140upx;
+			font-size: $font-sm;
+			color: #75787d;
+		}
+
+		.num {
+			font-size: $font-lg;
+			color: $font-color-dark;
+			margin-bottom: 8upx;
+		}
+	}
+
+	.order-section {
+		@extend %section;
+		padding: 28upx 0;
+		margin-top: 20upx;
+
+		.order-item {
+			@extend %flex-center;
+			width: 120upx;
+			height: 120upx;
+			border-radius: 10upx;
+			font-size: $font-sm;
+			color: $font-color-dark;
+		}
+
+		.yticon {
+			font-size: 48upx;
+			margin-bottom: 18upx;
+			color: #fa436a;
+		}
+
+		.icon-shouhoutuikuan {
+			font-size: 44upx;
+		}
+	}
+
+	.history-section {
+		padding: 30upx 0 0;
+		margin-top: 20upx;
+		background: #fff;
+		border-radius: 10upx;
+
+		.sec-header {
+			display: flex;
+			align-items: center;
+			font-size: $font-base;
+			color: $font-color-dark;
+			line-height: 40upx;
+			margin-left: 30upx;
+
+			.yticon {
+				font-size: 44upx;
+				color: #5eba8f;
+				margin-right: 16upx;
+				line-height: 40upx;
+			}
+		}
+
+		.h-list {
+			white-space: nowrap;
+			padding: 30upx 30upx 0;
+
+			image {
+				display: inline-block;
+				width: 160upx;
+				height: 160upx;
+				margin-right: 20upx;
+				border-radius: 10upx;
+			}
+		}
+	}
+
+	.grid {
+		display: flex;
+		align-items: center;
+		flex-wrap: wrap;
+
+		/* border-top: 2upx solid rgba(172,172,172,.2); */
+		.grid-item-3 {
+			box-sizing: border-box;
+			width: calc(100% / 3);
+			border-bottom: 2upx solid rgba(172, 172, 172, .2);
+			border-right: 2upx solid rgba(172, 172, 172, .2);
+			text-align: center;
+			padding: 40upx 0;
+			position: relative;
+
+			/* view{
+				font-size: $font-sm;
+				margin-top: 16upx;
+				color: $font-color-dark;
+			} */
+			.grid_icon {
+				font-size: 48upx;
+				margin-bottom: 18upx;
+				color: #fa436a;
+			}
+
+			.tip_text {
+				display: block;
+				padding: 4upx 8upx;
+				text-align: center;
+				border-radius: 36upx;
+				font-size: 24upx;
+				background-color: #fa436a;
+				color: rgba(255, 255, 255, 1);
+				position: absolute;
+				right: 6upx;
+				top: 6upx;
+			}
+		}
+
+		.grid-item-3:nth-child(3n + 3),
+		.grid-item-4:nth-child(4n + 4) {
+			border-right: none;
+		}
+	}
+
+	.headPortrait {
+		width: 75px;
+		height: 75px;
+		border-radius: 40px;
+		border: 2px solid #ffffff;
+	}
+
+	.personal {
+		margin-top: 10px;
+		margin-left: 20px;
+	}
+
+	.information {
+		font-size: 15px;
+		font-weight: 600;
+		height: 36px;
+	}
+
+	.indexlow {
+		/* margin-top: 30px; */
+		border-radius: 10px;
+	}
+
+	.cu-list>.cu-item:after {
+		border: none;
+	}
+
+	.sign {
+		width: 40px;
+		height: 40px;
+		top: 4px;
+		margin-right: 6px;
+	}
+
+	.indexUp {
+		padding: 0 20px;
+		align-items: center;
+	}
+
+	.wrap {
+		background: #fff;
+		margin: 10px;
+		border-radius: 10px;
+		padding: 10px;
+
+		.title {
+			font-size: 16px;
+		}
+	}
+
+	.content2 {
+		display: flex;
+		justify-content: space-between;
+	}
+</style>

+ 239 - 0
pages/reimbursement/get_request_funds.vue

@@ -0,0 +1,239 @@
+<template>
+	<view>
+		<view class='wrap'>
+			<view class="xinxi" v-if="detailData.expensesType == '2'" style="font-size: 28rpx; ">请款信息</view>
+			<view class="xinxi" v-if="detailData.expensesType == '1'" style="font-size: 28rpx; ">收款信息</view>
+			<view class="c-row">
+				<view class="title">用途</view>
+				<view class="con-list">
+					<view>{{detailData.purpose}}</view>
+				</view>
+			</view>
+			<view class="c-row" v-if="detailData.purpose == '库点费用'">
+				<view class="title">仓库名称</view>
+				<view class="con-list">
+					<view>{{detailData.warehouseName}}</view>
+				</view>
+			</view>
+			<view class="c-row" v-if="detailData.purpose == '合同费用'">
+				<view class="title">合同编号</view>
+				<view class="con-list">
+					<view>{{detailData.contractNo}}</view>
+				</view>
+			</view>
+			<view class="c-row">
+				<view class="title">费用名称</view>
+				<view class="con-list">
+					<view>{{detailData.expenseName}}</view>
+				</view>
+			</view>
+			<view class="c-row">
+				<view class="title">金额(元)</view>
+				<view class="con-list">
+					<view>{{detailData.amountMoney}}</view>
+				</view>
+			</view>
+			<view class="c-row">
+				<view class="left">备注</view>
+			</view>
+			<view style='position:relative;' class="wrap no-boder">
+				<u-input class='textarea' v-model="detailData.remark" :disabled="disabled" :type="type" :border="border"
+					placeholder="选填,不超过150字" :height="height" :auto-height="autoHeight" maxlength="150" />
+				<view style='position:absolute;right:10px;bottom:20px;color:#AFB3BF;'>
+					{{detailData.remark?detailData.remark.length:"0"}}/150个字
+				</view>
+			</view>
+			<view class="c-row">
+				<view class="title">附件(选填)</view>
+			</view>
+			<view style="display: flex;flex-wrap: wrap;">
+				<view v-for='(item,index) in imglist2' v-if="imglist2.length >0"
+					style="position: relative;margin-left: 20rpx;">
+					<image :src="item.appendixPath" mode="" style="width: 100px;height: 100px;"></image>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				disabled: false,
+				detailData: {
+					purpose: '',
+					remark: "",
+					warehouseName: '',
+					expenseName: '',
+					amountMoney: '',
+					contractNo: '',
+					expensesPurpose: ''
+				},
+				type: 'textarea',
+				border: true,
+				imglist: [], //存
+				imglist2: [], //展示
+				height: 150,
+				autoHeight: true,
+			}
+		},
+		onLoad(options) {
+			this.id = options.id
+			if (this.id) {
+				this.disabled = true
+			} else {
+				return
+			}
+			this.getList()
+		},
+		watch: {
+			imglist: {
+				handler: function() {
+					this.$api.doRequest('get', 'appendix/query/getFileList', {
+						appendixIds: this.imglist.toString()
+					}).then(res => {
+						this.imglist2 = res.data.data
+						console.log(res)
+					})
+				},
+				deep: true
+			}
+		},
+		methods: {
+			calculate() {
+				const query = uni.createSelectorQuery().in(this);
+				query.selectAll('.left')
+				console.log(query)
+			},
+			//获取信息
+			getList() {
+				this.$api.doRequest('get', '/expenseInfo/getInfo', {
+					id: this.id,
+				}).then(res => {
+					if (res.data.code == 200) {
+						this.detailData = res.data.data
+						this.imglist= this.detailData.addressUrl.split(',')
+					}
+				})
+			},
+		},
+	}
+</script>
+
+<style lang='scss' scoped>
+	page {
+		background: #F5F6FA;
+	}
+
+	.delete_img {
+		position: absolute;
+		z-index: 9999;
+		left: 84px;
+		color: #ffffff;
+		font-size: 28rpx;
+		border: 1px;
+		border-radius: 5rpx;
+		width: 32rpx;
+		height: 32rpx;
+		background-color: #ff0000;
+		text-align: center;
+	}
+
+	.title_b {
+		margin: 20rpx 20rpx 0rpx 20rpx;
+		padding: 20rpx 10rpx 20rpx 10rpx;
+		font-size: 18px;
+		font-weight: 550;
+	}
+
+	.xinxi {
+		padding: 20rpx 30rpx;
+	}
+
+	.c-row {
+		display: -webkit-box;
+		display: -webkit-flex;
+		display: flex;
+		-webkit-box-align: center;
+		-webkit-align-items: center;
+		align-items: center;
+		padding: 20rpx 30rpx;
+		position: relative;
+	}
+
+	.con-list {
+		-webkit-box-flex: 1;
+		flex: 1;
+		display: flex;
+		-webkit-box-orient: vertical;
+		-webkit-box-direction: normal;
+		flex-direction: column;
+		color: #303133;
+		line-height: 20px;
+		text-align: right;
+		padding-right: 10px;
+		justify-content: space-between;
+	}
+
+	.wrap {
+		padding-bottom: 10px;
+		font-size: 14px;
+		background: #fff;
+		margin: 10px;
+		border-radius: 10px;
+
+		input {
+			font-size: 14px;
+		}
+
+		>.title {
+			padding: 10px 16px;
+		}
+
+	}
+
+	.buns_item {
+		display: flex;
+		padding: 80rpx 0 50rpx 0;
+		justify-content: space-around;
+	}
+
+	.but_css {
+		background: #22C572;
+		width: 40%;
+		padding: 20rpx;
+		color: #fff;
+		text-align: center;
+		border-radius: 20rpx;
+	}
+
+	/deep/.u-radio-group {
+		flex-direction: row-reverse;
+	}
+
+	.no-boder {
+		border: 0;
+	}
+
+	.textarea {
+		background: #F9F9FA;
+		border: 1px solid #EEEEEE;
+	}
+
+	.submit {
+		width: 100%;
+		background: #2c8ac5;
+		border-radius: 10rpx;
+	}
+
+	.bottom-btn {
+		padding: 30rpx;
+		background: #FFFFFF;
+		width: 100%;
+		position: fixed;
+		bottom: 0rpx;
+		display: flex;
+		z-index: 9999;
+	}
+</style>

+ 455 - 0
pages/reimbursement/request_funds.vue

@@ -0,0 +1,455 @@
+<template>
+	<view>
+		<view class='wrap'>
+			<view class="xinxi" v-if="reType == 2 || expensesType == '2'" style="font-size: 28rpx; ">请款信息</view>
+			<view class="xinxi" v-if="reType == 1 || expensesType == '1'" style="font-size: 28rpx; ">收款信息</view>
+			<view class="c-row">
+				<view class="title">用途</view>
+				<view class="con-list">
+					<view @click='show=true'>{{detailData.purpose}}
+						<u-icon name="arrow-right" color=""></u-icon>
+					</view>
+					<u-picker :range="purposeList" range-key="purpose" @confirm='ltCheck($event)' v-model="show"
+						mode="selector">
+					</u-picker>
+				</view>
+			</view>
+			<view class="c-row" v-if="detailData.purpose == '库点费用'">
+				<view class="title">仓库名称</view>
+				<view class="con-list">
+					<view @click='selectWare()'>{{detailData.warehouseName}}
+						<u-icon name="arrow-right" color=""></u-icon>
+					</view>
+				</view>
+			</view>
+			<view class="c-row" v-if="detailData.purpose == '合同费用'">
+				<view class="title">合同编号</view>
+				<view class="con-list">
+					<view @click='selectCon'>{{detailData.contractNo?detailData.contractNo:"请选择合同编号"}}
+						<u-icon name="arrow-right" color=""></u-icon>
+					</view>
+				</view>
+			</view>
+			<view class="c-row">
+				<view class="title">费用名称</view>
+				<view class="con-list">
+					<input v-model='detailData.expenseName' placeholder="输入费用名称,1-15个字"></input>
+				</view>
+			</view>
+			<view class="c-row">
+				<view class="title">金额(元)</view>
+				<view class="con-list">
+					<input v-if="reType == '2' || expensesType == '2'" v-model='detailData.amountMoney'
+						placeholder="输入请款金额"></input>
+					<input v-if="reType == '1' || expensesType == '1'" v-model='detailData.amountMoney'
+						placeholder="输入收款金额"></input>
+				</view>
+			</view>
+			<view class="c-row">
+				<view class="left">备注</view>
+			</view>
+			<view style='position:relative;' class="wrap no-boder">
+				<u-input class='textarea' v-model="detailData.remark" :type="typeRemark" :border="border"
+					placeholder="选填,不超过150字" :height="height" :auto-height="autoHeight" maxlength="150" />
+				<view class="remark">
+					{{detailData.remark?detailData.remark.length:'0'}}/150个字
+				</view>
+			</view>
+			<view class="c-row">
+				<view class="title">附件(选填)</view>
+			</view>
+			<view style="display: flex;flex-wrap: wrap;">
+				<view v-for='(item,index) in imglist2' v-if="imglist2 && imglist2.length > 0"
+					style="position: relative;margin-left: 20rpx;">
+					<view class="delete_img" @click="deleteImg(index)">X</view>
+					<image :src="item.appendixPath" mode="" style="width: 100px;height: 100px;"></image>
+				</view>
+				<view class="biankuang" @click="uploadClick" v-if="imglist2.length < 9">
+					<view class="tubiao">
+						<image class="upload" src="../../static/img/oa_office/upload.png" mode="">
+						</image>
+						<view class="" style="color:#8c8f98;">
+							选择图片
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<u-toast ref="uToast" />
+		<view class="bottom-btn">
+			<u-button type="primary" class="submit" hover-class="none" @click="submit()">提交</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as config from '../../config'
+	export default {
+		data() {
+			return {
+				show: false,
+				showWare: false,
+				detailData: {
+					purpose: '库点费用',
+					remark: "",
+					warehouseName: '选择仓库',
+					expenseName: '',
+					amountMoney: '',
+					expensesPurpose: '3',
+					expensesType: '',
+					// contractId: '',
+					fieldName: '',
+					identification: '1',
+					costType: '3',
+					agent: '',
+					totalDistribution: '0',
+				},
+				fileList1: [],
+				warehouseType: '1',
+				typeRemark: 'textarea',
+				border: true,
+				imglist: [], //存
+				imglist2: [], //展示
+				height: 150,
+				autoHeight: true,
+				purposeList: [{
+						purpose: "合同费用"
+					},
+					{
+						purpose: "库点费用"
+					},
+					{
+						purpose: "经营性费用"
+					},
+				],
+				reType: "",
+				flag: "",
+				warehouseInfo: {},
+				contractNoInfo: {},
+			}
+		},
+		onLoad(options) {
+			this.reType = options.reType
+			this.expensesType = options.expensesType
+			this.id = options.id
+			if (this.id) {
+				this.getRequest()
+			} else {
+				return
+			}
+		},
+		onShow() {
+			this.warehouseInfo = uni.getStorageSync('theWarehouse');
+			if (this.warehouseInfo && this.detailData.purpose == "库点费用") {
+				this.detailData.warehouseName = this.warehouseInfo.warehouseName
+			}
+			this.contractNoInfo = uni.getStorageSync('reContractNo');
+			if (this.contractNoInfo && this.detailData.purpose == "合同费用") {
+				this.detailData.contractId = this.contractNoInfo.id
+				this.detailData.contractNo = this.contractNoInfo.contractNo
+				this.$forceUpdate()
+			}
+		},
+		watch: {
+			imglist: {
+				handler: function() {
+					this.$api.doRequest('get', 'appendix/query/getFileList', {
+						appendixIds: this.imglist.toString()
+					}).then(res => {
+						this.imglist2 = res.data.data
+						console.log(res)
+					})
+				},
+				deep: true
+			}
+		},
+		methods: {
+			afterRead(e) {
+				console.log(e)
+			},
+			uploadClick() {
+				let baseUrlNew = config.def().baseUrlNew1
+				uni.chooseImage({
+					success: (chooseImageRes) => {
+						let a = chooseImageRes.tempFiles
+						uni.uploadFile({
+							url: baseUrlNew + 'pb/appendix/api/uploadFiles',
+							// url: baseUrlNew+'appendix/api/uploadFiles', //仅为示例,非真实的接口地址
+							files: a,
+							formData: {
+								fileName: chooseImageRes.tempFiles[0],
+								companyId: "2710b21efc1e4393930c5dc800010dc4",
+								modelId: '',
+								vesselId: '',
+							},
+							success: (uploadFileRes) => {
+								console.log(JSON.parse(uploadFileRes.data))
+								var data = JSON.parse(uploadFileRes.data).data
+								this.$api.doRequest('post', '/appendix/api/saveFiles', {
+									newAppendixs: [data],
+									oldAppendixIds: ""
+								}).then(res => {
+									this.imglist.push(res.data.data[0])
+									console.log(res)
+								})
+								console.log(uploadFileRes.data);
+							}
+						});
+					}
+				});
+			},
+			deleteImg(index) {
+				this.imglist.splice(index, 1)
+			},
+			calculate() {
+				const query = uni.createSelectorQuery().in(this);
+				query.selectAll('.left')
+				console.log(query)
+			},
+			ltCheck(e) {
+				this.detailData.purpose = this.purposeList[e[0]].purpose
+				if (this.detailData.purpose == "合同费用") {
+					this.detailData.expensesPurpose = "1"
+					delete this.detailData.warehouseName
+
+				} else if (this.detailData.purpose == "库点费用") {
+					this.detailData.expensesPurpose = "3"
+					delete this.detailData.contractNo
+
+				} else {
+					this.detailData.expensesPurpose = "5"
+					delete this.detailData.warehouseName
+					delete this.detailData.contractNo
+				}
+				console.log(this.detailData)
+			},
+			selectCon() {
+				uni.navigateTo({
+					url: '/pages/reimbursement/selectContract'
+				})
+			},
+			selectWare() {
+				uni.navigateTo({
+					url: '/pages/reimbursement/selectWarehouse?warehouseType=1'
+				})
+			},
+			submit() {
+				if (!this.detailData.purpose) {
+					this.$api.msg('用途不能为空')
+					return
+				}
+				if (!this.detailData.warehouseName && this.detailData.purpose == '库点费用') {
+					this.$api.msg('请选择仓库名称')
+					return
+				}
+				if (!this.detailData.contractNo && this.detailData.purpose == '合同费用') {
+					this.$api.msg('请选择合同编号')
+					return
+				}
+				if (!this.detailData.amountMoney) {
+					this.$api.msg('金额不能为空')
+					return
+				}
+				var that = this
+				var title
+				var theInterface
+				if (that.expensesType == '1') {
+					title = "确定提交收款信息?"
+				} else {
+					title = "确定提交请款信息?"
+				}
+				if (that.id) {
+					theInterface = '/expenseInfo/editInfo'
+					that.detailData.id = that.id
+				} else {
+					theInterface = '/expenseInfo/api/addInfo'
+				}
+				debugger
+				uni.showModal({
+					content: title,
+					showCancel: true,
+					confirmText: '提交',
+					success: function(res) {
+						if (res.confirm) {
+							that.detailData.compId = uni.getStorageSync('pcUserInfo').compId
+							that.detailData.agent = uni.getStorageSync('userInfo').userName
+							that.detailData.identification = that.detailData.identification
+							that.detailData.costType = that.detailData.costType
+							that.detailData.expensesType = that.reType
+							that.detailData.fieldName = uni.getStorageSync('userInfo').userName
+							that.detailData.totalDistribution = that.detailData.totalDistribution
+							if (that.imglist.length > 0) {
+								that.detailData.addressUrl = that.imglist.toString()
+							}
+							that.$api.doRequest('post', theInterface, that.detailData)
+								.then(res => {
+									if (res.data.code == 200) {
+										that.$api.msg('提交成功')
+										uni.navigateTo({
+											url: '/pages/reimbursement/the_reimbursement'
+										})
+									} else {
+										that.$api.msg('提交失败')
+									}
+								})
+						}
+					}
+				})
+			},
+			//获取信息
+			getRequest() {
+				this.$api.doRequest('get', '/expenseInfo/getInfo', {
+					id: this.id,
+				}).then(res => {
+					if (res.data.code == 200) {
+						this.detailData = res.data.data
+						this.imglist = this.detailData.addressUrl.split(',')
+					}
+				})
+			},
+		},
+	}
+</script>
+
+<style lang='scss' scoped>
+	page {
+		background: #F5F6FA;
+	}
+
+	.delete_img {
+		position: absolute;
+		z-index: 100;
+		left: 84px;
+		color: #ffffff;
+		font-size: 28rpx;
+		border: 1px;
+		border-radius: 5rpx;
+		width: 32rpx;
+		height: 32rpx;
+		background-color: #ff0000;
+		text-align: center;
+	}
+
+	.title_b {
+		margin: 20rpx 20rpx 0rpx 20rpx;
+		padding: 20rpx 10rpx 20rpx 10rpx;
+		font-size: 18px;
+		font-weight: 550;
+	}
+
+	.xinxi {
+		padding: 20rpx 30rpx;
+	}
+
+	.tubiao {
+		margin: 0 auto;
+		text-align: center;
+		margin-top: 35rpx;
+	}
+
+	.biankuang {
+		border: 1px dashed #AFB3BF;
+		border-radius: 10rpx;
+		width: 200rpx;
+		height: 200rpx;
+		margin-left: 20rpx;
+	}
+
+	.upload {
+		width: 80rpx;
+		height: 80rpx;
+	}
+
+	.c-row {
+		display: -webkit-box;
+		display: -webkit-flex;
+		display: flex;
+		-webkit-box-align: center;
+		-webkit-align-items: center;
+		align-items: center;
+		padding: 20rpx 30rpx;
+		position: relative;
+	}
+
+	.con-list {
+		-webkit-box-flex: 1;
+		flex: 1;
+		display: flex;
+		-webkit-box-orient: vertical;
+		-webkit-box-direction: normal;
+		flex-direction: column;
+		color: #303133;
+		line-height: 20px;
+		text-align: right;
+		padding-right: 10px;
+		justify-content: space-between;
+	}
+
+	.wrap {
+		padding-bottom: 10px;
+		font-size: 14px;
+		background: #fff;
+		margin: 10px;
+		border-radius: 10px;
+
+		input {
+			font-size: 14px;
+		}
+
+		>.title {
+			padding: 10px 16px;
+		}
+
+	}
+
+	.buns_item {
+		display: flex;
+		padding: 80rpx 0 50rpx 0;
+		justify-content: space-around;
+	}
+
+	.but_css {
+		background: #22C572;
+		width: 40%;
+		padding: 20rpx;
+		color: #fff;
+		text-align: center;
+		border-radius: 20rpx;
+	}
+
+	/deep/.u-radio-group {
+		flex-direction: row-reverse;
+	}
+
+	.no-boder {
+		border: 0;
+	}
+
+	.textarea {
+		background: #F9F9FA;
+		border: 1px solid #EEEEEE;
+	}
+
+	.remark {
+		position: absolute;
+		right: 10px;
+		bottom: 20px;
+		color: #AFB3BF;
+	}
+
+	.submit {
+		width: 100%;
+		background: #2c8ac5;
+		border-radius: 10rpx;
+	}
+
+	.bottom-btn {
+		padding: 30rpx;
+		background: #FFFFFF;
+		width: 100%;
+		position: fixed;
+		bottom: 0rpx;
+		display: flex;
+		z-index: 9999;
+	}
+</style>

+ 165 - 0
pages/reimbursement/selectContract.vue

@@ -0,0 +1,165 @@
+<template>
+	<view class="warp">
+		<view class="content1">
+			<u-search placeholder="输入合同编号" :show-action="false" v-model="inputKeyword"  maxlength="20"></u-search>
+		</view>
+		<view class="content2" v-if="!inputKeyword&&newSelectList.length!=0">
+			<view class="title" v-if="">最新选择</view>
+			<view class="item-contnet">
+				<view class="item-list" v-for="(item,index) in newSelectList" :key="index" @click="confirm(item)">
+					{{item.contractNo}}
+				</view>
+			</view>
+		</view>
+		<view class="content2" v-if="!inputKeyword&&moreList.length!=0 ">
+			<view class="title" v-if="">更多合同</view>
+			<view class="item-contnet">
+				<view class="item-list" v-for="(item,index) in moreList" :key="index" @click="confirm(item)">
+					{{item.contractNo}}
+				</view>
+			</view>
+		</view>
+		<view class="content3" v-if="inputKeyword">
+			<view class="search-item-list" v-for="(item,index) in filterNewList" :key="index" @click="confirm(item)">
+				{{item.contractNo}}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	 import helper from '@/common/helper.js'; 
+	export default {
+		data() {
+			return {
+				inputKeyword: '',
+				newList: [],
+				newSelectList:[],
+				filterNewList: [],
+				moreList:[],
+				compId: '',
+				flag:""
+			}
+		},
+		onShow() {
+			this.newSelectList =  uni.getStorageSync('reContractNoList');
+		},
+		onLoad(options) {
+			this.flag = options.flag
+			this.compId = helper.erpWarehouse.compId 
+			this.getContractNoList()
+		},
+		watch: {
+			inputKeyword(val) {
+				this.filterNewList = this.newList.filter(function(item) {
+					if (item.contractNo.indexOf(val) > -1) {
+						return item
+					}
+				})
+			}
+		},
+		methods: {
+			confirm(item){
+				let _list = uni.getStorageSync('reContractNoList');
+				if(_list==''){
+					_list=[]
+				}
+				if(_list.length<=20){
+					_list = _list.filter(function(val) {
+						if (val.contractNo!=item.contractNo) {
+							return val
+						}
+					})
+					_list.unshift(item)
+				}else{
+					_list.unshift(item).pop(item)
+				}
+				uni.setStorageSync('reContractNoList', _list);
+				uni.setStorageSync('reContractNo', item);
+				uni.navigateBack({
+					delta: 1
+				});
+			},
+			getContractNoList() {
+				if(this.flag){
+					this.$api.doRequest('get', '/warehouseBaseInfo/selectContractNoList', {
+						compId: this.compId,
+						flag: 5,
+						
+					}).then(res => {
+						if (res.data.code == 200) {
+							this.moreList = res.data.data
+							this.newList = res.data.data
+						}
+					})
+				}else{
+					this.$api.doRequest('get', '/warehouseBaseInfo/selectContractNoList', {
+						compId: this.compId,
+						flag: 7,
+					}).then(res => {
+						if (res.data.code == 200) {
+							this.newList = res.data.data
+						}
+					})
+					this.$api.doRequest('get', '/warehouseBaseInfo/selectContractNoList', {
+						compId: this.compId,
+						flag: 6,
+					}).then(res => {
+						if (res.data.code == 200) {
+							this.moreList = res.data.data
+						}
+					})
+				}
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.content1 {
+		background: white;
+		padding: 20rpx;
+		border-radius: 0 0 20rpx 20rpx;
+	}
+
+	.content2 {
+		background: white;
+		margin-top: 20rpx;
+		padding: 20rpx;
+		border-radius: 20rpx 20rpx 0 0;
+
+		.title {
+			font-size: 28rpx;
+			font-weight: 400;
+			color: #AFB3BF;
+		}
+
+		.item-contnet {
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+		}
+
+		.item-list {
+			width: 45%;
+			background: #F5F6F9;
+			margin: 20rpx 0;
+			padding: 10rpx 15rpx;
+			border-radius: 30rpx;
+			text-align: center;
+		}
+	}
+
+	.content3 {
+		height: calc(100vh - 192rpx);
+		background: white;
+		padding: 20rpx;
+		box-sizing: border-box;
+	}
+
+	.search-item-list {
+		margin: 20rpx;
+		border-bottom: 1px solid #EEEEEE;
+		padding-bottom: 20rpx;
+	}
+</style>

+ 147 - 0
pages/reimbursement/selectWarehouse.vue

@@ -0,0 +1,147 @@
+<template>
+	<view class="warp">
+		<view class="content1">
+			<u-search placeholder="输入仓库名称" :show-action="false" v-model="inputKeyword"></u-search>
+		</view>
+		<view class="content2" v-if="!inputKeyword&&newSelectList.length!=0">
+			<view class="title" v-if="">最新选择</view>
+			<view class="item-contnet">
+				<view class="item-list" v-for="(item,index) in newSelectList" :key="index" @click="confirm(item)">
+					{{item.warehouseName}}
+				</view>
+			</view>
+		</view>
+		<view class="content2" v-if="!inputKeyword&&moreList.length!=0 ">
+			<view class="title" v-if="">更多仓库</view>
+			<view class="item-contnet">
+				<view class="item-list" v-for="(item,index) in moreList" :key="index" @click="confirm(item)">
+					{{item.warehouseName}}
+				</view>
+			</view>
+		</view>
+		<view class="content3" v-if="inputKeyword">
+			<view class="search-item-list" v-for="(item,index) in filterNewList" :key="index" @click="confirm(item)">
+				{{item.warehouseName}}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import helper from '@/common/helper.js'; 
+	export default {
+		data() {
+			return {
+				inputKeyword: '',
+				newList: [],
+				newSelectList:[],
+				filterNewList: [],
+				moreList:[],
+				compId: '',
+				warehouseType:"",
+			}
+		},
+		onShow() {
+			this.newSelectList =  uni.getStorageSync('theWarehouseList');
+		},
+		onLoad(options) {
+			this.warehouseType = options.warehouseType
+			// this.compId = helper.theWarehouse.compId 
+			this.getWarehouse()
+		},
+		watch: {
+			inputKeyword(val) {
+				this.filterNewList = this.newList.filter(function(item) {
+					if (item.warehouseName.indexOf(val) > -1) {
+						return item
+					}
+				})
+			}
+		},
+		methods: {
+			confirm(item){
+				let _list = uni.getStorageSync('theWarehouseList');
+				if(_list==''){
+					_list=[]
+				}
+				if(_list.length<=20){
+					_list = _list.filter(function(val) {
+						if (val.warehouseName!=item.warehouseName) {
+							return val
+						}
+					})
+					_list.unshift(item)
+				}else{
+					_list.unshift(item).pop(item)
+				}
+				uni.setStorageSync('theWarehouseList', _list);
+				uni.setStorageSync('theWarehouse', item);
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getWarehouse() {
+				var that = this
+				this.$api.doRequest('get', '/warehouseBaseInfo/selectWarehouse', {
+					compId: uni.getStorageSync("pcUserInfo").compId,
+					warehouseType: '1'
+				}).then(res => {
+					if (res.data.data.length != 0) {
+						that.newList = res.data.data
+						that.moreList = res.data.data
+						
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.content1 {
+		background: white;
+		padding: 20rpx;
+		border-radius: 0 0 20rpx 20rpx;
+	}
+
+	.content2 {
+		background: white;
+		margin-top: 20rpx;
+		padding: 20rpx;
+		border-radius: 20rpx 20rpx 0 0;
+
+		.title {
+			font-size: 28rpx;
+			font-weight: 400;
+			color: #AFB3BF;
+		}
+
+		.item-contnet {
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+		}
+
+		.item-list {
+			width: 45%;
+			background: #F5F6F9;
+			margin: 20rpx 0;
+			padding: 10rpx 15rpx;
+			border-radius: 30rpx;
+			text-align: center;
+		}
+	}
+
+	.content3 {
+		height: calc(100vh - 192rpx);
+		background: white;
+		padding: 20rpx;
+		box-sizing: border-box;
+	}
+
+	.search-item-list {
+		margin: 20rpx;
+		border-bottom: 1px solid #EEEEEE;
+		padding-bottom: 20rpx;
+	}
+</style>

+ 271 - 0
pages/reimbursement/the_reimbursement.vue

@@ -0,0 +1,271 @@
+<template>
+	<view>
+		<view class="" style="padding-bottom: 150rpx;">
+			<view class='wrap' v-for="(item, index) in tableData" :key="index">
+				<view class="" style="display: flex;">
+					<view class="c-row top_type_left">
+						<!-- {{index}} -------- -->
+						<view class="title">{{item.purpose}}--
+							<view @click="requestFunds(1)" style="margin-left: 65px;margin-top: -19px;"
+								v-if="item.expensesType == '1'">收款</view>
+							<view @click="requestFunds(2)" style="margin-left: 65px;margin-top: -19px;"
+								v-else-if="item.expensesType == '2'">请款
+							</view>
+						</view>
+					</view>
+					<view class="top_type_right">
+						<view class="wenzi audit1" v-if="item.approveStatus != null && item.status != '已驳回'  ">
+							{{item.approveStatus}}
+						</view>
+						<view class="wenzi audit2" v-else-if="item.approveStatus == null ">{{item.status}}</view>
+						<view class="wenzi audit3" v-else="item.status == '已驳回' ">{{item.status}}</view>
+					</view>
+				</view>
+				<view class="c-row" style="color: #777e7d;">
+					<view class="title">
+						<view class="title1" v-if="item.expensesPurpose == '1'">{{item.contractNo}}</view>
+						<view class="title1" v-else-if="item.expensesPurpose == '3'">{{item.warehouseName}}
+						</view>
+						<view class="title1" v-else-if="item.expensesPurpose == '5'">{{ }}</view>
+					</view>
+				</view>
+				<view class="c-row" style="font-size: 35rpx;font-weight:550; padding-top:30rpx">
+					<view class="title"> {{item.expenseName}}</view>
+				</view>
+				<view class="c-row" style="padding-top:10rpx">
+					<view class="title" style="color:#777e7d;">{{item.createDate}}</view>
+				</view>
+				<view class="c-row1">
+					<view class="title1"> {{item.amountMoney}} 元</view>
+				</view>
+				<view style="display: flex;justify-content: flex-end;margin-top: 30rpx;">
+					<!-- v-if="item.status == '已驳回'" -->
+					<!-- v-if="item.status == '已驳回'" -->
+					<view class="wenzi1 audit" @click="deleExpense(item)">删除</view>
+					<view class="wenzi1 audit" @click="requestFunds(3,item)">编辑</view>
+					<view class="wenzi1 audit" @click="getRequestFunds(1,item)">查看</view>
+				</view>
+			</view>
+			<view v-show="isLoadMore">
+				<uni-load-more :status="loadStatus"></uni-load-more>
+			</view>
+		</view>
+
+		<u-toast ref="uToast" />
+		<view class="bottom-btn">
+			<u-button type="primary" class="submit" hover-class="none" @click="requestFunds(1)">收款</u-button>
+			<u-button type="primary" class="submit" hover-class="none" @click="requestFunds(2)">请款</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				pageSize: 10,
+				currentPage: 1,
+				tableData: [],
+				reType: '',
+				flag: '',
+				isLoadMore: false, //是否加载中
+				loadStatus: 'loading', //加载样式:more-加载前样式,loading-加载中样式,nomore-没有数据样式
+			}
+		},
+		onShow() {
+			this.getList()
+		},
+		//下拉刷新
+		onPullDownRefresh() {
+			this.currentPage = 1
+			this.isLoadMore = false
+			this.loadStatus = 'loading'
+			this.getList()
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onReachBottom() { //上拉触底函数
+			if (!this.isLoadMore) { //此处判断,上锁,防止重复请求
+				this.isLoadMore = true
+				this.currentPage += 1
+				this.getList()
+			}
+		},
+		methods: {
+			getList() {
+				this.$api.doRequest('get', '/expenseInfo/selectInfo', {
+					pageSize: this.pageSize,
+					currentPage: this.currentPage,
+					compId: uni.getStorageSync('pcUserInfo').compId,
+				}).then(res => {
+					if (res.data.code == 200) {
+						if (res.data.data.records.length > 0) {
+							this.isLoadMore = false
+							this.loadStatus = 'loading'
+						} else {
+							this.isLoadMore = true
+							this.loadStatus = 'nomore'
+						}
+						if (this.currentPage == 1) {
+							this.tableData = res.data.data.records
+						} else {
+							this.tableData = this.tableData.concat(res.data.data.records)
+						}
+
+					}
+				})
+			},
+			deleExpense(val) {
+				var title
+				var that = this
+				if (that.expensesType == '1') {
+					title = "确定删除收款信息?"
+				} else {
+					title = "确定删除请款信息?"
+				}
+				uni.showModal({
+					content: title,
+					showCancel: true,
+					confirmText: '确定',
+					success: function(res) {
+						if (res.confirm) {
+							that.$api.doRequest('post', '/expenseInfo/deleteInfo', {
+								id: val.id,
+							}).then(res => {
+								if (res.data.code == 200) {
+									that.$api.msg('删除成功')
+									that.getList()
+								} else {
+									that.$api.msg('删除失败')
+								}
+							})
+						}
+					}
+				})
+			},
+			requestFunds(e, val) {
+				if (val) {
+					uni.navigateTo({
+						url: '/pages/reimbursement/request_funds?id=' + val.id + "&expensesType=" + val
+							.expensesType
+					})
+				} else {
+					uni.navigateTo({
+						url: '/pages/reimbursement/request_funds?reType=' + e
+					})
+				}
+
+			},
+			getRequestFunds(e, val) {
+				uni.navigateTo({
+					url: '/pages/reimbursement/get_request_funds?id=' + val.id
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	page {
+		background: #F5F6FA;
+	}
+
+	.wrap {
+		padding-top: 30rpx;
+		padding-bottom: 50rpx;
+		font-size: 28rpx;
+		background: #fff;
+		margin: 20rpx;
+		border-radius: 20rpx;
+
+		input {
+			font-size: 14px;
+		}
+
+		>.title {
+			padding: 10px 16px;
+		}
+
+		>.title1 {
+			padding: 10px 16px;
+		}
+
+	}
+
+	.wenzi {
+		border-radius: 10rpx;
+		height: 42rpx;
+		text-align: right;
+		margin-right: 30rpx;
+	}
+
+	.audit1 {
+		color: #ff5500;
+	}
+
+	.audit2 {
+		color: #00df00;
+	}
+
+	.audit3 {
+		color: red;
+	}
+
+	.wenzi1 {
+		margin-right: 40rpx;
+		margin-top: 10rpx;
+		height: 50rpx;
+		width: 100rpx;
+		border-radius: 30rpx;
+		background-color: #ffffff;
+		text-align: center;
+		border: 2rpx solid #AFB3BF;
+	}
+
+	.audit {
+		color: #000000;
+		text-align: center;
+	}
+
+
+	.c-row {
+		display: flex;
+		-webkit-box-align: center;
+		align-items: center;
+		padding: 5rpx 30rpx;
+		position: relative;
+	}
+
+	.c-row1 {
+		display: flex;
+		-webkit-box-align: center;
+		align-items: center;
+		position: relative;
+		padding: 0rpx 30rpx;
+		justify-content: flex-end;
+		margin-top: -21px;
+		font-size: 18px;
+	}
+
+	.submit {
+		width: 40%;
+		background: #2c8ac5;
+		border-radius: 10rpx;
+	}
+
+	.bottom-btn {
+		padding: 30rpx;
+		background: #FFFFFF;
+		width: 100%;
+		position: fixed;
+		bottom: 0rpx;
+		display: flex;
+		z-index: 9999;
+	}
+
+	.top_type_right,
+	.top_type_left {
+		width: 50%;
+	}
+</style>

+ 9 - 0
pages/user/user.vue

@@ -312,6 +312,15 @@
 						url: `/pages/user/depotMonitoring`,
 						show: true
 					},
+					{
+						num:8,
+						name: 'OA办公',
+						// icon: 'cuIcon-edit',
+						src: '../../static/img/oa_office/oaOffice.png',
+						tips: 0,
+						url: `/pages/oa_office/the_oaOffice`,
+						show: true
+					},
 					// {
 					// 	num: 9,
 					// 	name: '打卡',

BIN
static/img/oa_office/clock.png


BIN
static/img/oa_office/fulling.png


BIN
static/img/oa_office/leave.png


BIN
static/img/oa_office/oaOffice.png


BIN
static/img/oa_office/reimbursement.png


BIN
static/img/oa_office/shortfull.png


BIN
static/img/oa_office/upload.png