431 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			431 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <template>
 | ||
|   <view>
 | ||
|     <view class="banner">
 | ||
|       <view class="d-b-c">
 | ||
|         <view class="banner-name">{{ memberAwardsUnderVO.memberName }}</view>
 | ||
|         <view class="banner-position">
 | ||
|           <image
 | ||
|             class="banner-logo"
 | ||
|             v-if="memberAwardsUnderVO.image"
 | ||
|             :src="memberAwardsUnderVO.image"
 | ||
|             mode="widthFix"
 | ||
|           ></image>
 | ||
|           <image
 | ||
|             class="banner-logo"
 | ||
|             v-else
 | ||
|             src="/static/default.png"
 | ||
|             mode="widthFix"
 | ||
|           ></image>
 | ||
|           <view class="banner-txt">{{
 | ||
|             memberAwardsUnderVO.pkTransactionVal
 | ||
|           }}</view>
 | ||
|         </view>
 | ||
|       </view>
 | ||
|     </view>
 | ||
| 
 | ||
|     <view class="department-wrap">
 | ||
|       <view class="department-item" v-for="(v, idx) in awardsList" :key="idx">
 | ||
|         <view class="department-data d-b-c">
 | ||
|           <view v-if="v.placeDept >= 4">
 | ||
|             {{ v.placeDept }}<span v-if="languages === 'en-US'">th</span>
 | ||
|             {{ "" }} {{ $t("fn_011") }}:
 | ||
|           </view>
 | ||
|           <view v-else> {{ v.placeDept }}{{ $t("fn_011") }}: </view>
 | ||
|           <!-- <view class="">{{ $t('fn_010') }}{{ v.placeDept }}{{ $t('fn_011') }}:</view> -->
 | ||
|           <view class="gray9">{{ v.pkTransactionVal }}</view>
 | ||
|         </view>
 | ||
|         <view class="department-progress d-b-c mb10">
 | ||
|           <view class="progress-bg flex-1">
 | ||
|             <view
 | ||
|               class="progress-active"
 | ||
|               :style="{
 | ||
|                 width: `${
 | ||
|                   v.asumRealPv > '0.00'
 | ||
|                     ? GetPercent(v.asumRealPv, v.targetPv) >= 100
 | ||
|                       ? '100%'
 | ||
|                       : GetPercent(v.asumRealPv, v.targetPv) + '%'
 | ||
|                     : '0%'
 | ||
|                 }`,
 | ||
|               }"
 | ||
|             >
 | ||
|               <image
 | ||
|                 class="progress-active-img"
 | ||
|                 src="/static/icon/award-slider.png"
 | ||
|                 mode="widthFix"
 | ||
|               ></image>
 | ||
|             </view>
 | ||
|           </view>
 | ||
|         </view>
 | ||
|         <view class="d-b-c">
 | ||
|           <view class="department-data">
 | ||
|             {{ getsum(v.asumRealPv) }}
 | ||
|             {{ $t(v.asumRealPv >= 1000 ? "fn_312" : "fn_136") }}
 | ||
|           </view>
 | ||
|           <view class="gray9">{{ v.targetPv }}</view>
 | ||
|         </view>
 | ||
|       </view>
 | ||
|     </view>
 | ||
| 
 | ||
|     <view class="total-wrap">
 | ||
|       <view class="top-tabbar-box">
 | ||
|         <!-- <template v-for="(v, idx) in labelList">
 | ||
| 					<view class="tab-item" :key="idx" :class="{ active: placeDept == idx + 1 }" @click="stateFunc(idx + 1)">{{$t('fn_010')}}{{ idx + 1 }}{{$t('fn_011')}}</view>
 | ||
| 				</template> -->
 | ||
|         <u-tabs
 | ||
|           :list="labelList"
 | ||
|           @click="stateFunc"
 | ||
|           lineColor="#e85346"
 | ||
|         ></u-tabs>
 | ||
|       </view>
 | ||
| 
 | ||
|       <view class="user-list">
 | ||
|         <view class="user-item" v-for="(v, idx) in awardsFiveList" :key="idx">
 | ||
|           <view class="d-b-c">
 | ||
|             <view class="d-c-s">
 | ||
|               <image
 | ||
|                 class="user-avatar"
 | ||
|                 v-if="v.memberPath"
 | ||
|                 :src="v.memberPath"
 | ||
|                 mode="widthFix"
 | ||
|               ></image>
 | ||
|               <image
 | ||
|                 class="user-avatar"
 | ||
|                 v-else
 | ||
|                 src="/static/default.png"
 | ||
|                 mode="widthFix"
 | ||
|               ></image>
 | ||
|               <view>
 | ||
|                 <view class="user-level">NO.0{{ idx + 1 }}</view>
 | ||
|                 <view class="user-name">{{ v.memberName }}</view>
 | ||
|               </view>
 | ||
|             </view>
 | ||
|             <view>
 | ||
|               <image
 | ||
|                 :src="v.image"
 | ||
|                 v-if="v.pkAwards != 1 && v.image"
 | ||
|                 mode="widthFix"
 | ||
|               />
 | ||
|               <!-- <image src="/static/define-po.png" v-else mode="widthFix" /> -->
 | ||
|               <view class="user-position">{{ v.pkTransactionVal }}</view>
 | ||
|             </view>
 | ||
|           </view>
 | ||
| 
 | ||
|           <view class="mt40">
 | ||
|             <view
 | ||
|               v-for="(awardsFive, avindex) in v.awardsFiveList"
 | ||
|               :key="avindex"
 | ||
|               class="mb20"
 | ||
|             >
 | ||
|               <view class="d-s-c">
 | ||
|                 <view class="f24 mr20 user-deplement" v-if="avindex + 1 >= 4">
 | ||
|                   {{ avindex + 1 }}<span v-if="languages === 'en-US'">th</span>
 | ||
|                   {{ "" }} {{ $t("fn_011") }}
 | ||
|                 </view>
 | ||
|                 <view class="f24 mr20 user-deplement" v-else>
 | ||
|                   {{ avindex + 1 }}{{ $t("fn_011") }}
 | ||
|                 </view>
 | ||
|                 <!-- <view class="f24 mr20 user-deplement">{{ $t('fn_010') }}{{ avindex + 1 }}{{ $t('fn_011') }}</view> -->
 | ||
|                 <view class="department-progress flex-1">
 | ||
|                   <view class="progress-bg">
 | ||
|                     <view
 | ||
|                       class="progress-active"
 | ||
|                       :style="{
 | ||
|                         width: `${
 | ||
|                           awardsFive.asumRealPv > '0.00'
 | ||
|                             ? GetPercent(
 | ||
|                                 awardsFive.asumRealPv,
 | ||
|                                 awardsFive.targetPv
 | ||
|                               ) >= 100
 | ||
|                               ? '100%'
 | ||
|                               : GetPercent(
 | ||
|                                   awardsFive.asumRealPv,
 | ||
|                                   awardsFive.targetPv
 | ||
|                                 ) + '%'
 | ||
|                             : '0%'
 | ||
|                         }`,
 | ||
|                       }"
 | ||
|                     >
 | ||
|                       <image
 | ||
|                         class="progress-active-img"
 | ||
|                         src="/static/icon/award-slider.png"
 | ||
|                         mode="widthFix"
 | ||
|                       ></image>
 | ||
|                     </view>
 | ||
|                   </view>
 | ||
|                 </view>
 | ||
|               </view>
 | ||
|             </view>
 | ||
|           </view>
 | ||
|         </view>
 | ||
|       </view>
 | ||
|     </view>
 | ||
|   </view>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| export default {
 | ||
|   data() {
 | ||
|     return {
 | ||
|       memberAwardsUnderVO: "",
 | ||
|       awardsList: [],
 | ||
|       awardsFiveList: [],
 | ||
|       labelList: [],
 | ||
|       languages: "",
 | ||
|       placeDept: 1,
 | ||
|     };
 | ||
|   },
 | ||
|   onLoad() {
 | ||
|     // this.getMember();
 | ||
|     this.awardsIndex();
 | ||
|     this.getPlaceDept();
 | ||
|     this.languages = uni.getLocale();
 | ||
|   },
 | ||
|   methods: {
 | ||
|     getsum(num) {
 | ||
|       if (num >= 1000) {
 | ||
|         let result = Math.floor((num / 1000) * 100) / 100;
 | ||
|         return result.toFixed(2);
 | ||
|       } else {
 | ||
|         let result = Math.floor(num * 100) / 100;
 | ||
|         return result.toFixed(2);
 | ||
|       }
 | ||
|     },
 | ||
|     GetPercent(num, total) {
 | ||
|       /// <summary>
 | ||
|       /// 求百分比
 | ||
|       /// </summary>
 | ||
|       /// <param name="num">当前数</param>
 | ||
|       /// <param name="total">总数</param>
 | ||
| 
 | ||
|       num = parseFloat(num);
 | ||
|       total = parseFloat(total);
 | ||
|       // if(isNaN(total) >= isNaN(num)){
 | ||
|       //     return 100+'%'
 | ||
|       // }
 | ||
|       if (total < 0) {
 | ||
|         return 100 + "%";
 | ||
|       }
 | ||
|       if (isNaN(num) || isNaN(total)) {
 | ||
|         return "-";
 | ||
|       }
 | ||
|       return total <= 0 ? 0 : (num / total) * 100;
 | ||
|     },
 | ||
|     getMember() {
 | ||
|       // let self = this;
 | ||
|       // self._get('member/api/member/index-member-awards', {}, res => {
 | ||
|       // 	const { data } = res;
 | ||
|       // 	self.memberAwardsUnderVO = Object.assign({}, data);
 | ||
|       // });
 | ||
|     },
 | ||
|     awardsIndex() {
 | ||
|       let self = this;
 | ||
|       self._get("member/api/member/index-awards", {}, (res) => {
 | ||
|         const { data } = res;
 | ||
|         self.awardsList = res.data.memberAwardsList;
 | ||
|         self.memberAwardsUnderVO = res.data.memberAwardsUnderVO;
 | ||
|       });
 | ||
|     },
 | ||
|     getPlaceDept() {
 | ||
|       let self = this;
 | ||
|       self._get("member/api/member/place-dept", {}, (res) => {
 | ||
|         const { data } = res;
 | ||
|         self.labelList = data;
 | ||
|         self.labelList.forEach((item) => {
 | ||
|           if (item.placeDept >= 4 && this.languages === "en-US") {
 | ||
|             item.name = item.placeDept + "th" + " " + self.$t("fn_011");
 | ||
|           } else {
 | ||
|             item.name = item.placeDept + self.$t("fn_011");
 | ||
|           }
 | ||
|         });
 | ||
|         if (self.labelList && self.labelList.length > 0) {
 | ||
|           self.getAwardsList();
 | ||
|         }
 | ||
|       });
 | ||
|     },
 | ||
|     stateFunc(e) {
 | ||
|       let index = e.placeDept;
 | ||
|       console.log(index);
 | ||
|       if (index == this.placeDept) {
 | ||
|         return;
 | ||
|       }
 | ||
|       this.placeDept = index;
 | ||
|       this.getAwardsList();
 | ||
|     },
 | ||
|     getAwardsList() {
 | ||
|       let self = this;
 | ||
|       self._get(
 | ||
|         "member/api/member/index-awards-five",
 | ||
|         {
 | ||
|           placeDept: self.placeDept,
 | ||
|         },
 | ||
|         (res) => {
 | ||
|           res.data.forEach((v) => {
 | ||
|             let yuanAwardsFiveList = v.awardsFiveList || [];
 | ||
|             let awardsFiveLen =
 | ||
|               (v.awardsFiveList && v.awardsFiveList.length) || 0;
 | ||
|             let awardsFiveList = [];
 | ||
|             let minLen = 3;
 | ||
|             if (awardsFiveLen < minLen) {
 | ||
|               for (let i = 0; i < minLen - awardsFiveLen; i++) {
 | ||
|                 awardsFiveList.push({});
 | ||
|               }
 | ||
|             }
 | ||
|             v.awardsFiveList = yuanAwardsFiveList.concat(awardsFiveList);
 | ||
|           });
 | ||
|           self.awardsFiveList = res.data;
 | ||
|         }
 | ||
|       );
 | ||
|     },
 | ||
|   },
 | ||
| };
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="scss" scoped>
 | ||
| .banner {
 | ||
|   height: 287rpx;
 | ||
|   background: #e85346;
 | ||
|   color: #fff;
 | ||
|   padding: 0 40rpx;
 | ||
|   padding-top: 54rpx;
 | ||
|   box-sizing: border-box;
 | ||
|   .banner-name {
 | ||
|     font-size: 32rpx;
 | ||
|     font-weight: bold;
 | ||
|     color: #ffffff;
 | ||
|     // padding: 56rpx 0;
 | ||
|   }
 | ||
|   .banner-logo {
 | ||
|     width: 72rpx;
 | ||
|     height: 66rpx;
 | ||
|     margin: 0 auto;
 | ||
|   }
 | ||
|   .banner-txt {
 | ||
|     font-size: 24rpx;
 | ||
|     margin-top: 12rpx;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .department-wrap {
 | ||
|   background: #ffffff;
 | ||
|   border-radius: 20rpx;
 | ||
|   padding: 28rpx 25rpx;
 | ||
|   position: relative;
 | ||
|   top: -90rpx;
 | ||
|   margin: 0 20rpx;
 | ||
|   .department-item {
 | ||
|     margin-bottom: 33rpx;
 | ||
|     &:last-child {
 | ||
|       margin-bottom: 0;
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| .department-progress {
 | ||
|   margin-top: 21rpx;
 | ||
|   .progress-bg {
 | ||
|     height: 18rpx;
 | ||
|     background: #eeeeee;
 | ||
|     border-radius: 9rpx;
 | ||
|     position: relative;
 | ||
|   }
 | ||
|   .progress-active {
 | ||
|     width: 20%;
 | ||
|     height: 100%;
 | ||
|     background: #fb3024;
 | ||
|     position: relative;
 | ||
|     border-radius: 9rpx;
 | ||
|     .progress-active-img {
 | ||
|       width: 79rpx;
 | ||
|       height: 62rpx;
 | ||
|       position: absolute;
 | ||
|       right: -21rpx;
 | ||
|       top: -23rpx;
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .total-wrap {
 | ||
|   margin: 0 20rpx;
 | ||
|   margin-top: -25rpx;
 | ||
|   border-radius: 20rpx;
 | ||
| }
 | ||
| .total-wrap {
 | ||
|   background: #fff;
 | ||
|   padding: 0 20rpx;
 | ||
| }
 | ||
| .top-tabbar-box {
 | ||
|   height: 94rpx;
 | ||
|   border-bottom: 1px solid #eeeeee;
 | ||
|   padding: 0;
 | ||
| }
 | ||
| .top-tabbar {
 | ||
|   height: 94rpx;
 | ||
|   justify-content: flex-start;
 | ||
|   flex-wrap: nowrap;
 | ||
|   overflow-x: auto;
 | ||
|   border-bottom: 1px solid #eeeeee;
 | ||
|   padding: 0;
 | ||
| }
 | ||
| .tab-item {
 | ||
|   flex-shrink: 0;
 | ||
|   white-space: nowrap;
 | ||
|   padding: 0 42rpx;
 | ||
|   font-size: 28rpx;
 | ||
|   color: #333;
 | ||
|   font-weight: bold;
 | ||
|   position: relative;
 | ||
|   &::after {
 | ||
|     content: "";
 | ||
|     position: absolute;
 | ||
|     bottom: 10rpx;
 | ||
|     width: 30%;
 | ||
|     height: 5rpx;
 | ||
|     background: #fb3024;
 | ||
|     opacity: 0;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| .tab-item.active {
 | ||
|   &::after {
 | ||
|     opacity: 1;
 | ||
|   }
 | ||
| }
 | ||
| .user-list {
 | ||
|   padding: 20rpx 0;
 | ||
| }
 | ||
| .user-item {
 | ||
|   background: #f2f2f2;
 | ||
|   padding: 30rpx;
 | ||
|   border-radius: 20rpx;
 | ||
|   margin-bottom: 20rpx;
 | ||
|   .user-avatar {
 | ||
|     width: 75rpx;
 | ||
|     height: 75rpx;
 | ||
|     border-radius: 50%;
 | ||
|     margin-right: 20rpx;
 | ||
|   }
 | ||
|   .user-level {
 | ||
|     font-weight: bold;
 | ||
|     color: #fb3024;
 | ||
|     font-size: 20rpx;
 | ||
|   }
 | ||
|   .user-name {
 | ||
|     font-size: 28rpx;
 | ||
|     color: #030219;
 | ||
|   }
 | ||
|   .user-level-img {
 | ||
|     width: 65rpx;
 | ||
|     height: 60rpx;
 | ||
|     margin: 0 auto;
 | ||
|   }
 | ||
|   .user-position {
 | ||
|     font-size: 20rpx;
 | ||
|     color: #666666;
 | ||
|     margin-top: 9rpx;
 | ||
|   }
 | ||
|   .user-deplement {
 | ||
|     position: relative;
 | ||
|     top: 6rpx;
 | ||
|   }
 | ||
| }
 | ||
| </style>
 |