501 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			501 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Vue
		
	
	
	
|  | <template> | |||
|  | 	<view class="pb40"> | |||
|  | 		<!-- <view class="content"> | |||
|  | 			<view class="d-s-c mb30"> | |||
|  | 				<picker style="margin-right: 20rpx;" :range="monthList" @change="changeMonth"> | |||
|  | 					<view class="picker-small"> | |||
|  | 						<text>{{ monthIndex + 1 }}{{ $t('ENU_SETTLE_P_3') }}</text> | |||
|  | 						<u-icon name="arrow-down-fill" size="28rpx" color="#333"></u-icon> | |||
|  | 					</view> | |||
|  | 				</picker> | |||
|  | 				<picker :range="typeList" @change="changeType"> | |||
|  | 					<view class="picker-small"> | |||
|  | 						<text>{{ typeList[achievementType] }}</text> | |||
|  | 						<u-icon name="arrow-down-fill" size="28rpx" color="#333"></u-icon> | |||
|  | 					</view> | |||
|  | 				</picker> | |||
|  | 			</view> | |||
|  | 			<view class=" content-box box-2"> | |||
|  | 				<view class="d-b-s"> | |||
|  | 					<view class="mb20 flex-1 ">{{ $t('w_0135') }}</view> | |||
|  | 					<view class="mb20 flex-1 ">{{ $t('S_C_18') + $t('w_0136') }}</view> | |||
|  | 					<view class="mb20 flex-1 ">{{ $t('N_I_88') }}</view> | |||
|  | 				</view> | |||
|  | 				<view class="d-b-c"> | |||
|  | 					<view class="f30 fb flex-1 ">{{ formatNum(detail.leftAchieve || 0) }}</view> | |||
|  | 					<view class="f30 fb flex-1 ">{{ formatNum(detail.leftDirectAchieve || 0) }}</view> | |||
|  | 					<view class="f30 fb flex-1 ">{{ detail.leftCoun }}</view> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 			<view class="d-c-s d-c content-box box-3"> | |||
|  | 				<view class="mb20">{{ $t('w_0136') }}</view> | |||
|  | 				<view class="f30 fb">{{ formatNum(detail.directAchieve) }}</view> | |||
|  | 			</view> | |||
|  | 			<view class=" content-box box-2"> | |||
|  | 				<view class="d-b-s"> | |||
|  | 					<view class="mb20 flex-1 ">{{ $t('w_0137') }}</view> | |||
|  | 					<view class="mb20 flex-1 ">{{ $t('S_C_19') + $t('w_0136') }}</view> | |||
|  | 					<view class="mb20 flex-1 ">{{ $t('N_I_92') }}</view> | |||
|  | 				</view> | |||
|  | 				<view class="d-b-c"> | |||
|  | 					<view class="f30 fb flex-1">{{ formatNum(detail.rightAchieve || 0) }}</view> | |||
|  | 					<view class="f30 fb flex-1">{{ formatNum(detail.rightDirectAchieve || 0) }}</view> | |||
|  | 					<view class="f30 fb flex-1">{{ detail.rightCount }}</view> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 		</view> --> | |||
|  | 		<view class="pt40"> | |||
|  | 			<view class="title">{{$t('ENU_MENU_512')}}</view> | |||
|  | 			<view class="pt30"> | |||
|  | 				<view class="d-c-c d-c" style="margin-bottom: 100rpx;" @click="getMould('detail1', diagramDetail.memberCode)"> | |||
|  | 					<view><image class="user-img" src="/static/default.png" mode=""></image></view> | |||
|  | 					<view class="f28 gray3">{{ diagramDetail.memberCode }}</view> | |||
|  | 					<view class="f24 gray6">{{ diagramDetail.memberName }}</view> | |||
|  | 				</view> | |||
|  | 				<view class="d-a-c list-wrap" :class="memberAchieveDisVOList && memberAchieveDisVOList.length > 4 ? '' : 'short-small'"> | |||
|  | 					<template v-for="(v, idx) in memberAchieveDisVOList"> | |||
|  | 						<view class="d-c-c d-c list-item" @click="getMould('detail2', v.lastMemberCode)"  :key="idx"> | |||
|  | 							<view><image class="user-img" src="/static/default.png" mode=""></image></view> | |||
|  | 							<view class="f24 gray3">{{ v.lastMemberCode }}</view> | |||
|  | 							<view class="f24 gray3 mb10 mt10">{{ $t('N_I_101') }}</view> | |||
|  | 							 <view class="f28 gray3" v-if="v.placeDept >= 4"> | |||
|  |           					  {{ v.placeDept}}<span v-if="languages==='en-US'">th</span> {{ '' }} {{ $t("fn_011") }} | |||
|  |           				  </view> | |||
|  |            				 <view class="f28 gray3" v-else> | |||
|  |            					   {{ v.placeDept }}{{ $t("fn_011") }} | |||
|  |             				</view> | |||
|  | 							<!-- <view class="f28 gray3">{{ $t('fn_010')+v.placeDept+$t('fn_011') }}</view> --> | |||
|  | 						</view> | |||
|  | 					</template> | |||
|  | 					<!-- <template v-for="(v,idx) in memberAchieveDisVOList" :key="idx"> | |||
|  | 						<view class="d-c-c d-c"> | |||
|  | 							<view><image class="user-img" src="/static/default.png" mode=""></image></view> | |||
|  | 							<view class="f24 gray3">{{ v.lastMemberName }}</view> | |||
|  | 							<view class="f28 gray3">{{ $t('N_I_101') }}</view> | |||
|  | 							<view class="f24 gray6">{{ $t('S_C_18') }}</view> | |||
|  | 						</view> | |||
|  | 					</template> --> | |||
|  | 
 | |||
|  | 					<!-- <view class="d-c-c d-c" @click="getMould('detail2', diagramDetail.leftMember.lastMemberCode)"> | |||
|  | 						<view><image class="user-img" src="/static/default.png" mode=""></image></view> | |||
|  | 						<view class="f28 gray3">{{ diagramDetail.leftMember.lastMemberCode }}</view> | |||
|  | 						<view class="f28 gray3">{{ $t('N_I_101') }}</view> | |||
|  | 						<view class="f24 gray6">{{ $t('S_C_18') }}</view> | |||
|  | 					</view> | |||
|  | 					<view class="d-c-c d-c" @click="getMould('detail3', diagramDetail.rightMember.lastMemberCode)"> | |||
|  | 						<view><image class="user-img" src="/static/default.png" mode=""></image></view> | |||
|  | 						<view class="f28 gray3">{{ diagramDetail.rightMember.lastMemberCode }}</view> | |||
|  | 						<view class="f28 gray3">{{ $t('N_I_101') }}</view> | |||
|  | 						<view class="f24 gray6">{{ $t('S_C_19') }}</view> | |||
|  | 					</view> --> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 			<template v-if="isOpen"> | |||
|  | 				<view class="pop-bg" @click.stop="isOpen = false"></view> | |||
|  | 				<view class="pop-content"> | |||
|  | 					<view class="mb10">{{ $t('N_I_124') }}</view> | |||
|  | 					<view class="mb10"> | |||
|  | 						{{ module[detailMould].memberCode }} | |||
|  | 						<text class="ml20 copy-text" @click="copyFunc(module[detailMould].memberCode)">{{ $t('MY_CK_27') }}</text> | |||
|  | 					</view> | |||
|  | 					<view class="mb10">{{ $t('CK_KS_14') }}:{{ module[detailMould].memberName }}</view> | |||
|  | 					<view class="mb10">{{ $t('PER_DA_9') }}:{{ module[detailMould].payTime }}</view> | |||
|  | 					<view>{{ $t('w_0306') }}:{{ formatNum(module[detailMould].consumeAchieve) }}</view> | |||
|  | 				</view> | |||
|  | 			</template> | |||
|  | 		</view> | |||
|  | 	</view> | |||
|  | </template> | |||
|  | 
 | |||
|  | <script> | |||
|  | export default { | |||
|  | 	data() { | |||
|  | 		return { | |||
|  | 			now: 0, | |||
|  | 			monthList: [], | |||
|  | 			typeList: [this.$t('ENU_ACHIEVEMENT_TYPE_1'), this.$t('ENU_ACHIEVEMENT_TYPE_2'), this.$t('ENU_ACHIEVEMENT_TYPE_3')], | |||
|  | 			monthIndex: 0, | |||
|  | 			detail: { | |||
|  | 				leftCoun: 0, | |||
|  | 				rightCount: 0, | |||
|  | 				leftAchieve: 0, | |||
|  | 				rightAchieve: 0, | |||
|  | 				directAchieve: 0 | |||
|  | 			}, | |||
|  | 			achievementType: 0, | |||
|  | 			// example: [],
 | |||
|  | 			diagramDetail: { | |||
|  | 				imageUrl: '', | |||
|  | 				leftMember: { | |||
|  | 					lastImageUrl: '', | |||
|  | 					lastMemberCode: '', | |||
|  | 					lastMemberName: '' | |||
|  | 				}, | |||
|  | 				memberCode: '', | |||
|  | 				memberName: '', | |||
|  | 				rightMember: { | |||
|  | 					lastImageUrl: '', | |||
|  | 					lastMemberCode: '', | |||
|  | 					lastMemberName: '' | |||
|  | 				} | |||
|  | 			}, | |||
|  | 			memberCode: '', | |||
|  | 			module: { | |||
|  | 				detail1: null, | |||
|  | 				detail2: null, | |||
|  | 				detail3: null | |||
|  | 			}, | |||
|  | 
 | |||
|  | 			isOpen: false, | |||
|  | 			detailMould: '', | |||
|  | 			languages:'', | |||
|  | 			memberAchieveDisVOList: [] | |||
|  | 		}; | |||
|  | 	}, | |||
|  | 	onLoad() { | |||
|  | 		this.getDiagramData(); | |||
|  | 		this.initDate(); | |||
|  | 		this.languages= uni.getLocale(); | |||
|  | 	}, | |||
|  | 	methods: { | |||
|  | 		copyFunc(data) { | |||
|  | 			let self = this; | |||
|  | 			uni.setClipboardData({ | |||
|  | 				data: data, | |||
|  | 				showToast: false, | |||
|  | 				success: function() { | |||
|  | 					uni.showToast({ | |||
|  | 						title: self.$t('MY_CK_29'), | |||
|  | 						icon: 'none' | |||
|  | 					}); | |||
|  | 					console.log('success'); | |||
|  | 				} | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		dowloadFunc(e, name) { | |||
|  | 			let self = this; | |||
|  | 			uni.showLoading({ | |||
|  | 				title: self.$t('w_0421') | |||
|  | 			}); | |||
|  | 			uni.downloadFile({ | |||
|  | 				url: e, //调接口返给的url
 | |||
|  | 				success: function(res) { | |||
|  | 					console.log(res); | |||
|  | 					if (res.statusCode == 200) { | |||
|  | 						var Path = res.tempFilePath; //调 uni.downloadFile成功之后,会返给tempFilePath
 | |||
|  | 						uni.saveFile({ | |||
|  | 							tempFilePath: Path, | |||
|  | 							success: function(result) { | |||
|  | 								var savedFilePath = result.savedFilePath; | |||
|  | 								self.fSetFileName(savedFilePath, name, e); | |||
|  | 							}, | |||
|  | 							fail: err => { | |||
|  | 								uni.showToast({ | |||
|  | 									title: self.$t('w_0406'), | |||
|  | 									icon: 'none' | |||
|  | 								}); | |||
|  | 								uni.hideLoading(); | |||
|  | 							} | |||
|  | 						}); | |||
|  | 					} else { | |||
|  | 						uni.showToast({ | |||
|  | 							title: self.$t('w_0407'), | |||
|  | 							icon: 'none' | |||
|  | 						}); | |||
|  | 					} | |||
|  | 					uni.hideLoading(); | |||
|  | 				}, | |||
|  | 				fail: err => { | |||
|  | 					uni.hideLoading(); | |||
|  | 					uni.showToast({ | |||
|  | 						title: self.$t('w_0408'), | |||
|  | 						icon: 'none' | |||
|  | 					}); | |||
|  | 				} | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		fSetFileName(sFilePath, sFileName, e) { | |||
|  | 			let self = this; | |||
|  | 			var sFileName = sFileName.split('/')[sFileName.split('/').length - 1]; //原来的文件名
 | |||
|  | 			var aFileUrl = sFilePath.split('/').splice(0, sFilePath.split('/').length - 1); //saveFile API保存的本地地址
 | |||
|  | 			var url = e; //请求地址
 | |||
|  | 			let dtask = plus.downloader.createDownload( | |||
|  | 				url, | |||
|  | 				{ | |||
|  | 					filename: '_downloads' + aFileUrl.join('/') + '/' + sFileName //利用保存路径,实现文件的重命名
 | |||
|  | 				}, | |||
|  | 				(d, status) => { | |||
|  | 					if (status == 200) { | |||
|  | 						let fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename); | |||
|  | 						self.fGetSavedFileList(); | |||
|  | 						console.log('-----------------'); | |||
|  | 						console.log(fileSaveUrl); | |||
|  | 						/*uni.openDocument({ | |||
|  | 								filePath: escape(fileSaveUrl), | |||
|  | 								fail: e => { | |||
|  | 									console.log(JSON.stringify(e)); | |||
|  | 									console.log(escape(fileSaveUrl)); | |||
|  | 									console.log(e); | |||
|  | 									uni.showToast({ | |||
|  | 										title: `打开失败` | |||
|  | 									}); | |||
|  | 								} | |||
|  | 							});*/ | |||
|  | 						setTimeout( | |||
|  | 							() => | |||
|  | 								uni.openDocument({ | |||
|  | 									filePath: fileSaveUrl, | |||
|  | 									showMenu: false, | |||
|  | 									success: function() { | |||
|  | 										console.log('打开文档成功'); | |||
|  | 									}, | |||
|  | 									fail: function(e) { | |||
|  | 										console.log(e); | |||
|  | 										uni.showToast({ | |||
|  | 											title: this.$t('w_0410'), | |||
|  | 											duration: 2000, | |||
|  | 											icon: 'none' | |||
|  | 										}); | |||
|  | 									} | |||
|  | 								}), | |||
|  | 							1000 | |||
|  | 						); | |||
|  | 					} else { | |||
|  | 						//下载失败
 | |||
|  | 						plus.downloader.clear(); //清除下载任务
 | |||
|  | 					} | |||
|  | 				} | |||
|  | 			); | |||
|  | 			dtask.setRequestHeader('Authorization', 'Bearer ' + uni.getStorageSync('SET_TOKEN')); | |||
|  | 			dtask.start(); | |||
|  | 		}, | |||
|  | 		changeType(e) { | |||
|  | 			this.achievementType = e.detail.value; | |||
|  | 			this.getData(); | |||
|  | 		}, | |||
|  | 		changeMonth(e) { | |||
|  | 			this.monthIndex = e.detail.value; | |||
|  | 			this.getData(); | |||
|  | 		}, | |||
|  | 		initDate() { | |||
|  | 			let date = new Date(); | |||
|  | 			let self = this; | |||
|  | 			self.now = date.getMonth(); | |||
|  | 			for (var i = 1; i <= self.now + 1; i++) { | |||
|  | 				self.monthList.push(i); | |||
|  | 			} | |||
|  | 			this.monthIndex = self.now; | |||
|  | 			// this.getData();
 | |||
|  | 			console.log(self.monthList); | |||
|  | 		}, | |||
|  | 		getDiagramData() { | |||
|  | 			let self = this; | |||
|  | 			self._get('member/api/achieve/query-place-tree', {}, res => { | |||
|  | 				self.diagramDetail = res.data; | |||
|  | 				self.memberAchieveDisVOList = res.data && res.data.memberAchieveDisVOList; | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		getMould(e, code) { | |||
|  | 			let self = this; | |||
|  | 			self.detailMould = e; | |||
|  | 			self.memberCode = code; | |||
|  | 			self.getDetail(); | |||
|  | 			/* let self = this; | |||
|  | 			self.detailMould = e; | |||
|  | 			self.memberCode = code; | |||
|  | 			if (!self[e]) { | |||
|  | 				self.getDetail(); | |||
|  | 			} else { | |||
|  | 				this.isOpen = true; | |||
|  | 			} */ | |||
|  | 		}, | |||
|  | 		getDetail() { | |||
|  | 			let self = this; | |||
|  | 			self._post( | |||
|  | 				'member/api/achieve/query-place-tree-detail', | |||
|  | 				{ | |||
|  | 					memberCode: self.memberCode | |||
|  | 				}, | |||
|  | 				res => { | |||
|  | 					self.module[self.detailMould] = res.data; | |||
|  | 					this.isOpen = true; | |||
|  | 				} | |||
|  | 			); | |||
|  | 		}, | |||
|  | 		getData() { | |||
|  | 			return; | |||
|  | 			let self = this; | |||
|  | 			uni.showLoading({ | |||
|  | 				title: 'Loading...' | |||
|  | 			}); | |||
|  | 			self._get( | |||
|  | 				'member/api/achieve/place-new-add-achieve-stat', | |||
|  | 				{ | |||
|  | 					monthType: self.monthIndex + 1, | |||
|  | 					achievementType: self.achievementType + 1 | |||
|  | 				}, | |||
|  | 				res => { | |||
|  | 					self.detail = res.data; | |||
|  | 				}, | |||
|  | 				false, | |||
|  | 				com => { | |||
|  | 					uni.hideLoading(); | |||
|  | 				} | |||
|  | 			); | |||
|  | 		} | |||
|  | 	} | |||
|  | }; | |||
|  | </script> | |||
|  | 
 | |||
|  | <style lang="scss"> | |||
|  | page { | |||
|  | 	background: #fff; | |||
|  | } | |||
|  | 
 | |||
|  | .list-wrap { | |||
|  | 	flex-wrap: nowrap; | |||
|  | 	overflow-x: auto; | |||
|  | 	justify-content: flex-start; | |||
|  | 	padding: 0 22rpx; | |||
|  | 	&.short-small { | |||
|  | 		justify-content: space-around; | |||
|  | 	} | |||
|  | 	.list-item { | |||
|  | 		margin-right: 30rpx; | |||
|  | 		&:last-child { | |||
|  | 			margin-right: 0; | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | .content { | |||
|  | 	padding: 26rpx 22rpx 26rpx 23rpx; | |||
|  | } | |||
|  | 
 | |||
|  | .picker-small { | |||
|  | 	width: 232rpx; | |||
|  | 	height: 72rpx; | |||
|  | 	border: 1rpx solid #eeeeee; | |||
|  | 	border-radius: 15rpx; | |||
|  | 	font-size: 28rpx; | |||
|  | 	padding: 0 28rpx 0 20rpx; | |||
|  | 	display: flex; | |||
|  | 	justify-content: space-between; | |||
|  | 	align-items: center; | |||
|  | 	box-sizing: border-box; | |||
|  | } | |||
|  | 
 | |||
|  | .content-box { | |||
|  | 	padding: 0 20rpx; | |||
|  | 	min-height: 156rpx; | |||
|  | 	border-radius: 10rpx; | |||
|  | 	color: #fff; | |||
|  | 	font-size: 28rpx; | |||
|  | 	margin-bottom: 25rpx; | |||
|  | } | |||
|  | 
 | |||
|  | .box-1 { | |||
|  | 	background: linear-gradient(180deg, #fc7c7c 0%, #f65757 100%); | |||
|  | } | |||
|  | 
 | |||
|  | .box-2 { | |||
|  | 	padding-top: 30rpx; | |||
|  | 	background: linear-gradient(180deg, #ff9354 0%, #ff7f36 100%); | |||
|  | } | |||
|  | 
 | |||
|  | .box-3 { | |||
|  | 	background: linear-gradient(180deg, #677af9 0%, #697bf2 100%); | |||
|  | } | |||
|  | .title { | |||
|  | 	font-size: 30rpx; | |||
|  | 	font-weight: bold; | |||
|  | 	color: #333; | |||
|  | 	margin-left: 22rpx; | |||
|  | 	position: relative; | |||
|  | 	padding-left: 12rpx; | |||
|  | 	&::before { | |||
|  | 		content: ''; | |||
|  | 		width: 3px; | |||
|  | 		height: calc(100% - 14rpx); | |||
|  | 		background: #fb3024; | |||
|  | 		position: absolute; | |||
|  | 		left: 0; | |||
|  | 		top: 50%; | |||
|  | 		transform: translateY(-50%); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | .user-img { | |||
|  | 	width: 120rpx; | |||
|  | 	height: 120rpx; | |||
|  | 	margin-bottom: 20rpx; | |||
|  | } | |||
|  | 
 | |||
|  | .pop-bg { | |||
|  | 	position: fixed; | |||
|  | 	left: 0; | |||
|  | 	top: 0; | |||
|  | 	right: 0; | |||
|  | 	bottom: 0; | |||
|  | 	background-color: rgba(0, 0, 0, 0.3); | |||
|  | 	z-index: 98; | |||
|  | } | |||
|  | 
 | |||
|  | .pop-content { | |||
|  | 	position: fixed; | |||
|  | 	left: 0; | |||
|  | 	right: 0; | |||
|  | 	top: 30%; | |||
|  | 	margin: auto; | |||
|  | 	width: 60%; | |||
|  | 	background: #ffffff; | |||
|  | 	border: 1px solid #fb3024; | |||
|  | 	box-shadow: 0rpx 5rpx 3rpx 0rpx rgba(0, 0, 0, 0.1); | |||
|  | 	border-radius: 15rpx; | |||
|  | 	font-size: 24rpx; | |||
|  | 	color: #666; | |||
|  | 	padding: 33rpx 15rpx; | |||
|  | 	z-index: 99; | |||
|  | 	line-height: 1.5; | |||
|  | } | |||
|  | .example-box { | |||
|  | 	background: #ffffff; | |||
|  | 	border-radius: 20rpx; | |||
|  | 	display: flex; | |||
|  | 	flex-wrap: wrap; | |||
|  | 	align-items: center; | |||
|  | 	justify-content: flex-start; | |||
|  | 	padding: 22rpx 0 28rpx 0; | |||
|  | 	height: 312rpx; | |||
|  | 	overflow-y: auto; | |||
|  | 	margin-bottom: 20rpx; | |||
|  | 
 | |||
|  | 	.example-item { | |||
|  | 		width: 20%; | |||
|  | 		flex-shrink: 0; | |||
|  | 		padding: 10rpx; | |||
|  | 		box-sizing: border-box; | |||
|  | 
 | |||
|  | 		.example-ava { | |||
|  | 			width: 104rpx; | |||
|  | 			height: 104rpx; | |||
|  | 			display: block; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		.example-name { | |||
|  | 			font-size: 26rpx; | |||
|  | 			color: #666; | |||
|  | 			word-break: break-all; | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | .copy-text { | |||
|  | 	// border: 1px solid #ebedf0;
 | |||
|  | 	padding: 5rpx 12rpx; | |||
|  | 	border-radius: 12rpx; | |||
|  | 	font-size: 22rpx; | |||
|  | 	background-color: #ccc; | |||
|  | 	color: #fff; | |||
|  | } | |||
|  | </style> |