Compare commits
	
		
			6 Commits
		
	
	
		
			7274566ef7
			...
			dev
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | d50cb09d98 | ||
|  | ed1fc2b718 | ||
|  | bcd540914a | ||
|  | b9b70ea740 | ||
|  | 1de1e3b6d6 | ||
|  | 549dc9f18e | 
							
								
								
									
										664
									
								
								src/project/icswb/AppEnteringVillage/AppEnteringVillage.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										664
									
								
								src/project/icswb/AppEnteringVillage/AppEnteringVillage.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,664 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="wrapper"> | ||||||
|  |     <div class="header" :class="[isFixed ? 'header-active' : '']"> | ||||||
|  |       <div class="status-bar" :style="{height: statusBarHeight + 'px'}"></div> | ||||||
|  |       <div class="nav-bar"> | ||||||
|  |         <h2>活动</h2> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <header> | ||||||
|  |       <image src="https://cdn.sinoecare.com/i/2024/07/23/669f246434b23.png"/> | ||||||
|  |       <div> | ||||||
|  |         <AiAreaPicker :selectRoot="false" ref="area" :value="areaId" :name.sync="areaName" :areaId="$areaId" | ||||||
|  |                       @input="areaSelect"> | ||||||
|  |           <div class="ai-area__wrapper"> | ||||||
|  |             <span class="label" v-if="areaName">{{ areaName }}</span> | ||||||
|  |             <span v-else>请选择</span> | ||||||
|  |             <image src="/static/img/area-bottom.png"/> | ||||||
|  |           </div> | ||||||
|  |         </AiAreaPicker> | ||||||
|  |         <div class="welcome">欢迎进入{{ areaName }}</div> | ||||||
|  |         <div class="tag" v-if="user.homeArea === areaId">我的家乡</div> | ||||||
|  |         <div class="tag1" @click="updateUserInfo" v-if="!user.homeArea && token">设为家乡</div> | ||||||
|  |       </div> | ||||||
|  |     </header> | ||||||
|  | <!--    <div class="card">--> | ||||||
|  | <!--      <div class="card-item" hover-class="text-hover" @click="$linkTo('/mods/AppVillagerInfo/AppVillagerInfo?type=0')">--> | ||||||
|  | <!--        <image src="/static/img/bcjj.png"/>--> | ||||||
|  | <!--      </div>--> | ||||||
|  | <!--      <div class="card-item" hover-class="text-hover" @click="$linkTo('/mods/AppVillagerInfo/AppVillagerInfo?type=4')">--> | ||||||
|  | <!--        <image src="/static/img/cgmy.png"/>--> | ||||||
|  | <!--      </div>--> | ||||||
|  | <!--      <div class="card-item" hover-class="text-hover"--> | ||||||
|  | <!--           @click="linkTo('/mods/AppCreditPoints/AppIntegralRanking', 'idNumber')">--> | ||||||
|  | <!--        <image src="/static/img/jfph.png"/>--> | ||||||
|  | <!--      </div>--> | ||||||
|  | <!--      <div class="card-item" hover-class="text-hover"--> | ||||||
|  | <!--           @click="linkTo('/mods/AppVillagerDiscussion/AppVillagerDiscussion', 'idNumber')">--> | ||||||
|  | <!--        <image src="/static/img/cmys.png"/>--> | ||||||
|  | <!--      </div>--> | ||||||
|  | <!--    </div>--> | ||||||
|  |     <div class="banner" @click="linkTo('/mods/AppCreditPoints/AppCpSupermarket', 'idNumber')"> | ||||||
|  |       <image src="/static/img/jf-banner.png" class="banner"/> | ||||||
|  |     </div> | ||||||
|  |     <tempalte v-if="publicList.length"> | ||||||
|  |       <div class="title-wrap"> | ||||||
|  |         <span class="title">三务公开</span> | ||||||
|  |         <div class="right" hover-class="text-hover" | ||||||
|  |              @click="$linkTo(`/mods/AppContent/AppContent?names=三务公开&areaId=${areaId}`)"> | ||||||
|  |           <span class="title-more">更多专题</span> | ||||||
|  |           <u-icon name="arrow-right" size="28" color="#999999"></u-icon> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div class="list-news"> | ||||||
|  |         <div class="news-wrap" v-for="(item,index) in publicList" :key="index" | ||||||
|  |              @click="$linkTo('/mods/AppContent/contentDetail?id='+ item.id)"> | ||||||
|  |           <div class="news-title">{{ item.title }}</div> | ||||||
|  |           <div class="news-bottom"> | ||||||
|  |             <div class="tag">{{ item.categoryName }}</div> | ||||||
|  |             <div class="date">{{ item.createTime ? item.createTime.split(' ')[0] : '' }}</div> | ||||||
|  |             <div class="view"> | ||||||
|  |               <em>{{ item.viewCount }}</em> | ||||||
|  |               人看过 | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </tempalte> | ||||||
|  |     <div class="title-wrap" v-if="activityList.length"> | ||||||
|  |       <span class="title">居民活动</span> | ||||||
|  |       <div class="right"> | ||||||
|  |         <span class="title-more" @click="$linkTo('/mods/AppVillageActivity/AppVillageActivity')">更多活动</span> | ||||||
|  |         <u-icon name="arrow-right" size="28" color="#999999"></u-icon> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <scroll-view :scroll-x="true" style="width: 100%" class="scroll-wrap" v-if="activityList.length"> | ||||||
|  |       <div | ||||||
|  |           class="scroll-card" | ||||||
|  |           @click="$linkTo('/mods/AppVillageActivity/ActivityDetail?id=' + item.id)" | ||||||
|  |           hover-class="text-hover" | ||||||
|  |           v-for="(item, index) in activityList" | ||||||
|  |           :key="index"> | ||||||
|  |         <image :src="item.url" mode="aspectFill"/> | ||||||
|  |         <div class="text"> | ||||||
|  |           <span>{{ item.title }}</span> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <AiEmpty v-if="!activityList.length"></AiEmpty> | ||||||
|  |     </scroll-view> | ||||||
|  | <!--    <div class="title-wrap">--> | ||||||
|  | <!--      <span class="title">乡村相册</span>--> | ||||||
|  | <!--    </div>--> | ||||||
|  | <!--    <div class="album-list">--> | ||||||
|  | <!--      <div--> | ||||||
|  | <!--          class="album"--> | ||||||
|  | <!--          v-for="(item, index) in albumList"--> | ||||||
|  | <!--          hover-class="text-hover"--> | ||||||
|  | <!--          :key="index"--> | ||||||
|  | <!--          @click="$linkTo('/mods/AppPhotoAlbum/AppPhotoAlbum?type=' + item.type + '&name=' + item.name + '&url=' + item.coverImg)">--> | ||||||
|  | <!--        <image :src="item.coverImg"/>--> | ||||||
|  | <!--        <div class="total">共{{ item.total }}张</div>--> | ||||||
|  | <!--        <div class="desc">{{ item.name }}</div>--> | ||||||
|  | <!--      </div>--> | ||||||
|  | <!--      <AiEmpty style="width: 100%" v-if="!albumList.length"></AiEmpty>--> | ||||||
|  | <!--    </div>--> | ||||||
|  |     <AiLogin ref="login"/> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | <script> | ||||||
|  | import {mapActions, mapState} from 'vuex' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: "AppEnteringVillage", | ||||||
|  |   appName: "进村", | ||||||
|  |   customNavigation: true, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       isFixed: false, | ||||||
|  |       statusBarHeight: 20, | ||||||
|  |       top: 0, | ||||||
|  |       areaName: '', | ||||||
|  |       areaId: '', | ||||||
|  |       $areaId: '', | ||||||
|  |       albumList: [], | ||||||
|  |       activityList: [], | ||||||
|  |       publicList: [], | ||||||
|  |       moduleId: "", | ||||||
|  |       isInit: false | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   onLoad() { | ||||||
|  |     this.areaId = this.$mp.query.areaId || this.$areaId | ||||||
|  |     this.areaName = this.$mp.query.areaName || this.$areaName | ||||||
|  |     this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight | ||||||
|  |     this.autoLogin() | ||||||
|  |  | ||||||
|  |     this.$nextTick(() => { | ||||||
|  |       this.getAlbumList() | ||||||
|  |       this.getActiveList() | ||||||
|  |       this.getName() | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |     uni.$on('update', () => { | ||||||
|  |       this.getAlbumList() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user', 'token']) | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   onShow() { | ||||||
|  |     this.$nextTick(() => { | ||||||
|  |       this.token && this.getUserInfo() | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |     if (this.user.homeArea) { | ||||||
|  |       if (!this.isInit) { | ||||||
|  |         this.areaId = this.user.homeArea | ||||||
|  |         this.areaName = this.user.homeName | ||||||
|  |         uni.setStorageSync('areaId', this.user.homeArea) | ||||||
|  |         uni.setStorageSync('areaName', this.user.homeName) | ||||||
|  |         this.isInit = true | ||||||
|  |       } | ||||||
|  |     } else if (!this.isInit && !this.user.homeArea) { | ||||||
|  |       setTimeout(() => { | ||||||
|  |         this.$dialog.alert({ | ||||||
|  |           content: '请选择您的家乡' | ||||||
|  |         }).then(() => { | ||||||
|  |           this.$refs.area?.handleJump() | ||||||
|  |           this.isInit = true | ||||||
|  |         }) | ||||||
|  |       }, 600) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     ...mapActions(['autoLogin', 'getUserInfo']), | ||||||
|  |     getName() { | ||||||
|  |       this.$instance.post("/app/appcontentmoduleinfo/listByNames", null, { | ||||||
|  |         params: {names: "三务公开"} | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res.data && res.data.length) { | ||||||
|  |           this.moduleId = res.data[0]["id"]; | ||||||
|  |           this.getPublicList(); | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     updateUserInfo() { | ||||||
|  |       if (this.areaId.endsWith('000')) { | ||||||
|  |         this.$dialog.alert({ | ||||||
|  |           content: '请选择村' | ||||||
|  |         }).then(() => { | ||||||
|  |         }) | ||||||
|  |  | ||||||
|  |         return false | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       this.$instance.post("/app/appwechatuser/updateById", { | ||||||
|  |         id: this.user.id, | ||||||
|  |         homeArea: this.areaId, | ||||||
|  |         homeName: this.areaName | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           this.getUserInfo() | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getPublicList() { | ||||||
|  |       this.$instance.post("/app/appcontentinfo/list", null, { | ||||||
|  |         params: {moduleId: this.moduleId, size: 3, areaId: this.areaId} | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.publicList = res.data.records; | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     linkTo(url, type) { | ||||||
|  |       if (type) { | ||||||
|  |         if (this.token) { | ||||||
|  |           if (type === 'idNumber') { | ||||||
|  |             if (!this.user.residentId) { | ||||||
|  |               this.$linkTo('/mods/AppAuth/AppAuth') | ||||||
|  |             } else { | ||||||
|  |               this.$linkTo(url) | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } else { | ||||||
|  |           this.$refs.login.show() | ||||||
|  |         } | ||||||
|  |       } else { | ||||||
|  |         this.$linkTo(url) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     areaSelect(v) { | ||||||
|  |       this.areaId = v | ||||||
|  |       this.isMore = false | ||||||
|  |       this.current = 0 | ||||||
|  |       this.newsList = [] | ||||||
|  |  | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.getActiveList() | ||||||
|  |         this.getAlbumList() | ||||||
|  |         this.getPublicList() | ||||||
|  |         uni.setStorageSync('areaId', this.areaId) | ||||||
|  |         uni.setStorageSync('areaName', this.areaName) | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getAlbumList() { | ||||||
|  |       this.$instance.post(`/app/appvillagepicturealbum/queryAlbumMenu?areaId=${this.areaId}`).then(res => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.albumList = res.data.map(v => { | ||||||
|  |             return { | ||||||
|  |               ...v, | ||||||
|  |               coverImg: `${this.$cdn}/dvcp/album/album${v.type}.png` | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getActiveList() { | ||||||
|  |       this.$instance.post(`/app/appvillageactivityinfo/listUp`, null, { | ||||||
|  |         params: { | ||||||
|  |           current: 1, | ||||||
|  |           size: 6, | ||||||
|  |           areaId: this.areaId | ||||||
|  |         } | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.activityList = res.data.records.map(v => { | ||||||
|  |             return { | ||||||
|  |               ...v, | ||||||
|  |               url: v.url ? JSON.parse(v.url)[0].url : '' | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   onShareAppMessage() { | ||||||
|  |     return { | ||||||
|  |       title: '欢迎使用数字乡村治理服务一体化平台~', | ||||||
|  |       path: `/pages/AppEnteringVillage/AppEnteringVillage` | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   onPageScroll(params) { | ||||||
|  |     this.isFixed = params.scrollTop > 60; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .wrapper { | ||||||
|  |   min-height: 100%; | ||||||
|  |   background: #F3F6F9; | ||||||
|  |  | ||||||
|  |   ::v-deep .emptyImg { | ||||||
|  |     margin-top: 0 !important; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .header { | ||||||
|  |     position: fixed; | ||||||
|  |     left: 0; | ||||||
|  |     top: 0; | ||||||
|  |     z-index: 0; | ||||||
|  |     width: 100%; | ||||||
|  |     opacity: 0; | ||||||
|  |     transition: all 0.2s ease; | ||||||
|  |  | ||||||
|  |     &.header-active { | ||||||
|  |       z-index: 1111; | ||||||
|  |       opacity: 1; | ||||||
|  |       background: #4181FF; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .nav-bar { | ||||||
|  |       position: relative; | ||||||
|  |       height: 88px; | ||||||
|  |       line-height: 88px; | ||||||
|  |       color: #fff; | ||||||
|  |       font-size: 32px; | ||||||
|  |       text-align: center; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   & > header { | ||||||
|  |     position: relative; | ||||||
|  |     height: 656px; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding-left: 32px; | ||||||
|  |  | ||||||
|  |     & > div { | ||||||
|  |       position: relative; | ||||||
|  |       z-index: 11; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .ai-area__wrapper { | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |       padding-top: 100px; | ||||||
|  |  | ||||||
|  |       span { | ||||||
|  |         margin-right: 16px; | ||||||
|  |         color: #FFFFFF; | ||||||
|  |         font-size: 44px; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       image { | ||||||
|  |         width: 16px; | ||||||
|  |         height: 8px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     & > image { | ||||||
|  |       position: absolute; | ||||||
|  |       left: 0; | ||||||
|  |       top: 0; | ||||||
|  |       z-index: 1; | ||||||
|  |       width: 100%; | ||||||
|  |       height: 656px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .welcome { | ||||||
|  |       font-size: 28px; | ||||||
|  |       font-weight: 400; | ||||||
|  |       color: #FFFFFF; | ||||||
|  |       line-height: 40px; | ||||||
|  |       margin-top: 20px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .tag { | ||||||
|  |       width: 120px; | ||||||
|  |       height: 44px; | ||||||
|  |       background: rgba(0, 0, 0, 0.3); | ||||||
|  |       border-radius: 8px; | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |       justify-content: center; | ||||||
|  |       font-size: 22px; | ||||||
|  |       font-weight: 400; | ||||||
|  |       color: #c0cae0; | ||||||
|  |       margin-top: 16px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .tag1 { | ||||||
|  |       width: 120px; | ||||||
|  |       height: 44px; | ||||||
|  |       border: 1px solid #c0cae0; | ||||||
|  |       background: rgba(0, 0, 0, 0.1); | ||||||
|  |       border-radius: 8px; | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |       justify-content: center; | ||||||
|  |       font-size: 22px; | ||||||
|  |       font-weight: 400; | ||||||
|  |       color: #c0cae0; | ||||||
|  |       margin-top: 16px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .card { | ||||||
|  |     position: relative; | ||||||
|  |     z-index: 1; | ||||||
|  |     background: #FFFFFF; | ||||||
|  |     border-radius: 32px 32px 0 0; | ||||||
|  |     margin-top: -336px; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 32px 32px 0 32px; | ||||||
|  |     display: flex; | ||||||
|  |     align-items: center; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     flex-wrap: wrap; | ||||||
|  |  | ||||||
|  |     .card-item { | ||||||
|  |       width: 332px; | ||||||
|  |       height: 160px; | ||||||
|  |       margin-bottom: 32px; | ||||||
|  |       border-radius: 16px; | ||||||
|  |  | ||||||
|  |       image { | ||||||
|  |         width: 332px; | ||||||
|  |         height: 160px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .banner { | ||||||
|  |     position: relative; | ||||||
|  |     z-index: 2; | ||||||
|  |     height: 200px; | ||||||
|  |     background: linear-gradient(180deg, #FFFFFF 0%, #F3F6F9 100%); | ||||||
|  |  | ||||||
|  |     image { | ||||||
|  |       display: block; | ||||||
|  |       width: 692px; | ||||||
|  |       height: 200px; | ||||||
|  |       margin: 0 auto; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .title-wrap { | ||||||
|  |     display: flex; | ||||||
|  |     align-items: center; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 48px 32px 32px; | ||||||
|  |  | ||||||
|  |     .title { | ||||||
|  |       font-size: 44px; | ||||||
|  |       font-weight: 600; | ||||||
|  |       color: #333333; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .right { | ||||||
|  |  | ||||||
|  |       .title-more { | ||||||
|  |         font-size: 28px; | ||||||
|  |         font-weight: 400; | ||||||
|  |         line-height: 40px; | ||||||
|  |         color: #999999; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .list-news { | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 0 32px; | ||||||
|  |  | ||||||
|  |     .news-wrap { | ||||||
|  |       height: 186px; | ||||||
|  |       background: #FFFFFF; | ||||||
|  |       box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.02); | ||||||
|  |       border-radius: 16px; | ||||||
|  |       box-sizing: border-box; | ||||||
|  |       padding: 32px; | ||||||
|  |       display: flex; | ||||||
|  |       flex-direction: column; | ||||||
|  |       justify-content: space-between; | ||||||
|  |       margin-bottom: 24px; | ||||||
|  |  | ||||||
|  |       &:last-child { | ||||||
|  |         margin-bottom: 0; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .news-title { | ||||||
|  |         font-size: 36px; | ||||||
|  |         font-weight: 600; | ||||||
|  |         color: #333333; | ||||||
|  |         overflow: hidden; | ||||||
|  |         text-overflow: ellipsis; | ||||||
|  |         white-space: nowrap; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .news-bottom { | ||||||
|  |         display: flex; | ||||||
|  |         align-items: center; | ||||||
|  |  | ||||||
|  |         .tag { | ||||||
|  |           width: 144px; | ||||||
|  |           height: 48px; | ||||||
|  |           background: #EEEEEE; | ||||||
|  |           border-radius: 24px; | ||||||
|  |           display: flex; | ||||||
|  |           align-items: center; | ||||||
|  |           justify-content: center; | ||||||
|  |           font-size: 28px; | ||||||
|  |           font-weight: 400; | ||||||
|  |           color: #999999; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .date { | ||||||
|  |           font-size: 28px; | ||||||
|  |           font-weight: 400; | ||||||
|  |           color: #999999; | ||||||
|  |           margin-left: 16px; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .view { | ||||||
|  |           font-size: 28px; | ||||||
|  |           font-weight: 400; | ||||||
|  |           color: #999999; | ||||||
|  |           margin-left: auto; | ||||||
|  |           display: flex; | ||||||
|  |           align-items: center; | ||||||
|  |  | ||||||
|  |           & > em { | ||||||
|  |             color: #4181FF; | ||||||
|  |             font-style: normal; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .scroll-wrap { | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 0 32px; | ||||||
|  |     width: 100%; | ||||||
|  |     white-space: nowrap; | ||||||
|  |  | ||||||
|  |     .scroll-card { | ||||||
|  |       display: inline-block; | ||||||
|  |       width: 400px; | ||||||
|  |       height: 332px; | ||||||
|  |       background: #FFFFFF; | ||||||
|  |       box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.02); | ||||||
|  |       border-radius: 16px; | ||||||
|  |       margin-right: 32px; | ||||||
|  |       font-size: 0; | ||||||
|  |  | ||||||
|  |       & > image { | ||||||
|  |         width: 400px; | ||||||
|  |         height: 240px; | ||||||
|  |         border-radius: 16px 16px 0 0; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .text { | ||||||
|  |         height: calc(100% - 240px); | ||||||
|  |         display: flex; | ||||||
|  |         align-items: center; | ||||||
|  |         box-sizing: border-box; | ||||||
|  |         padding: 0 32px; | ||||||
|  |  | ||||||
|  |         & > span { | ||||||
|  |           font-size: 32px; | ||||||
|  |           font-weight: 600; | ||||||
|  |           color: #333333; | ||||||
|  |           overflow: hidden; | ||||||
|  |           text-overflow: ellipsis; | ||||||
|  |           white-space: nowrap; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       &:last-child { | ||||||
|  |         margin-right: 0; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .album-list { | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 0 32px 32px; | ||||||
|  |     display: flex; | ||||||
|  |     align-items: center; | ||||||
|  |     flex-wrap: wrap; | ||||||
|  |     gap: 16px; | ||||||
|  |  | ||||||
|  |     .album { | ||||||
|  |       position: relative; | ||||||
|  |       width: 218px; | ||||||
|  |       height: 240px; | ||||||
|  |       background: #FFFFFF; | ||||||
|  |       box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.02); | ||||||
|  |       border-radius: 16px; | ||||||
|  |       overflow: hidden; | ||||||
|  |  | ||||||
|  |       image { | ||||||
|  |         position: absolute; | ||||||
|  |         left: 0; | ||||||
|  |         top: 0; | ||||||
|  |         z-index: 1; | ||||||
|  |         width: 100%; | ||||||
|  |         height: 100%; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .total { | ||||||
|  |         display: flex; | ||||||
|  |         position: absolute; | ||||||
|  |         align-items: center; | ||||||
|  |         justify-content: center; | ||||||
|  |         right: 8px; | ||||||
|  |         top: 8px; | ||||||
|  |         z-index: 2; | ||||||
|  |         width: 74px; | ||||||
|  |         height: 40px; | ||||||
|  |         background: rgba(0, 0, 0, .6); | ||||||
|  |         border-radius: 8px; | ||||||
|  |         font-size: 22px; | ||||||
|  |         font-weight: 400; | ||||||
|  |         color: #FFFFFF; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .desc { | ||||||
|  |         position: absolute; | ||||||
|  |         bottom: 16px; | ||||||
|  |         left: 0; | ||||||
|  |         z-index: 2; | ||||||
|  |         width: 100%; | ||||||
|  |         height: 40px; | ||||||
|  |         line-height: 40px; | ||||||
|  |         padding: 0 12px; | ||||||
|  |         font-size: 32px; | ||||||
|  |         text-align: center; | ||||||
|  |         color: #FFFFFF; | ||||||
|  |         font-weight: 600; | ||||||
|  |         box-sizing: border-box; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   ::v-deep .AiArea { | ||||||
|  |     padding-top: 64px; | ||||||
|  |     height: 88px; | ||||||
|  |  | ||||||
|  |     ._img { | ||||||
|  |       display: none; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .area-name { | ||||||
|  |       font-size: 44px; | ||||||
|  |       font-weight: 600; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/project/icswb/AppEnteringVillage/custom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/icswb/AppEnteringVillage/custom.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 970 B | 
							
								
								
									
										
											BIN
										
									
								
								src/project/icswb/AppEnteringVillage/custom_selected.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/icswb/AppEnteringVillage/custom_selected.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										491
									
								
								src/project/icswb/AppHome/AppHome.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										491
									
								
								src/project/icswb/AppHome/AppHome.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,491 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="page"> | ||||||
|  |     <div class="search-wrap"> | ||||||
|  |       <div class="search fill" @click="$linkTo('/mods/AppContent/contentManager?moduleId=' + search.moduleId)"> | ||||||
|  |         <u-icon name="search" color="#ffffff" size="40"></u-icon> | ||||||
|  |         <span class="desc">请输入需要搜索的内容</span> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="header-bg"></div> | ||||||
|  |     <img class="border" :src="`${cdn}/border.png`" alt=""> | ||||||
|  |     <div class="swiper-content"> | ||||||
|  |       <u-swiper :list="swiperList" mode="none" height="240" bg-color="none" @click="handleBannerClick"/> | ||||||
|  |     </div> | ||||||
|  |     <div class="grid-content"> | ||||||
|  |       <u-grid :col="4" hover-class="text-hover" :border="false"> | ||||||
|  |         <u-grid-item v-for="(item, index) in grids" :key="index" :custom-style="{padding:'8px 0'}" bg-color="none" | ||||||
|  |                      class="grid-item" @click="handleClick(item)"> | ||||||
|  |           <img :src="item.pictureUrl" alt=""/> | ||||||
|  |           <div class="grid-text">{{ item.name }}</div> | ||||||
|  |         </u-grid-item> | ||||||
|  |       </u-grid> | ||||||
|  |     </div> | ||||||
|  |     <div class="notice"> | ||||||
|  |       <img :src="`${cdn}/notice-new.png`" alt=""> | ||||||
|  |       <u-notice-bar mode="vertical" color="#4181FF" style="flex: 1;" :volume-icon="false" :is-circular="false" | ||||||
|  |                     duration="5000" speed="5000" :list="noticeList" @click="clickNotice"/> | ||||||
|  |     </div> | ||||||
|  |     <template v-if="activeList.length>0"> | ||||||
|  |       <header>推荐专题</header> | ||||||
|  |       <scroll-view :scroll-x="true" style="width: 100%" class="scroll-wrap"> | ||||||
|  |         <div class="scroll-card" | ||||||
|  |              :style="{background:'url(' + item.pictureUrl + ') no-repeat no-repeat;background-size:100% 100%;'}" | ||||||
|  |              v-for="(item,index) in activeList" :key="index" @click="handleActive(item)"/> | ||||||
|  |       </scroll-view> | ||||||
|  |     </template> | ||||||
|  |     <template v-if="categorys&&categorys.length>0"> | ||||||
|  |       <u-tabs :list="categorys.map(e=>({name:e.categoryName}))" font-size="40" bg-color="transparent" | ||||||
|  |               inactive-color="#999999" :active-item-style="active" | ||||||
|  |               :is-scroll="true" :current="index" @change="tabChange"/> | ||||||
|  |       <div class="list-wrap" v-if="categoryList && categoryList.length>0"> | ||||||
|  |         <div class="list-card" v-for="(category,index) in categoryList" :key="index" | ||||||
|  |              @click="$linkTo('/mods/AppContent/contentDetail?id='+category.id)"> | ||||||
|  |           <div class="header">{{ category.title }}</div> | ||||||
|  |           <div class="content-wrap" | ||||||
|  |                v-if="category.contentType==0 && category.files && category.files.length<3&&category.files.length>0"> | ||||||
|  |             <img class="img" :src="item.url" v-for="(item,index) in category.files.slice(0,1)" :key="index.id"> | ||||||
|  |           </div> | ||||||
|  |           <div class="content-wrap" v-if="category.contentType==0 && category.files && category.files.length >= 3"> | ||||||
|  |             <img class="min-img" :src="item.url" v-for="(item,index) in  category.files.slice(0,3)" :key="index.id"> | ||||||
|  |           </div> | ||||||
|  |           <div class="content-wrap" v-if="category.contentType == 1"> | ||||||
|  |             <img class="img" :src="category.pictureUrl" alt=""/> | ||||||
|  |             <img class="play-icon" :src="`${cdn}/play.png`" alt=""/> | ||||||
|  |           </div> | ||||||
|  |           <div class="bottom"> | ||||||
|  |             <div class="left"> | ||||||
|  |               <div class="tag">{{ category.categoryName }}</div> | ||||||
|  |               {{ category.createTime }} | ||||||
|  |             </div> | ||||||
|  |             <div class="right"> | ||||||
|  |               <em>{{ category.viewCount }}</em> | ||||||
|  |               人看过 | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <AiEmpty v-else/> | ||||||
|  |     </template> | ||||||
|  |     <AiLogin ref="login"/> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | <script> | ||||||
|  | import {mapActions, mapState} from 'vuex' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'AppHome', | ||||||
|  |   appName: "首页", | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       cdn: "https://cdn.cunwuyun.cn/wxmp", | ||||||
|  |       swiperList: [], | ||||||
|  |       index: 0, | ||||||
|  |       grids: [], | ||||||
|  |       activeList: [], | ||||||
|  |       notices: [], | ||||||
|  |       categorys: [], | ||||||
|  |       categoryList: [], | ||||||
|  |       search: {areaId: ''}, | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user', 'token']), | ||||||
|  |     active() { | ||||||
|  |       return { | ||||||
|  |         fontSize: '22px', | ||||||
|  |         color: '#333333', | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     noticeList() { | ||||||
|  |       let {notices} = this | ||||||
|  |       return notices?.length > 0 ? notices?.map(e => e.title) || ['暂无公告'] : ['暂无公告'] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   onReady() { | ||||||
|  |     uni.setNavigationBarTitle({title: "党媒e家"}) | ||||||
|  |   }, | ||||||
|  |   onLoad() { | ||||||
|  |     this.autoLogin().then(() => { | ||||||
|  |       this.getSwiperList(); | ||||||
|  |       this.getName(); | ||||||
|  |       this.getGrids(); | ||||||
|  |       this.getActive(); | ||||||
|  |       this.getNotice(); | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     ...mapActions(['autoLogin', 'authCheck']), | ||||||
|  |     getName() { | ||||||
|  |       this.$instance.post("/app/appcontentmoduleinfo/listByName", null, { | ||||||
|  |         params: {names: "新闻发布"}, | ||||||
|  |         withoutToken: true | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res?.data[0]?.categoryList?.length) { | ||||||
|  |           this.categorys = res.data[0]["categoryList"]; | ||||||
|  |           this.search.moduleId = res.data[0]['id'] | ||||||
|  |           this.search.categoryId = res.data[0]['categoryList'][0]['id'] | ||||||
|  |           this.getCategoryList() | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     tabChange(idx) { | ||||||
|  |       this.index = idx | ||||||
|  |       this.search.categoryId = this.categorys[idx]['id'] | ||||||
|  |       this.getCategoryList() | ||||||
|  |     }, | ||||||
|  |     getCategoryList() { | ||||||
|  |       this.$instance.post("/app/appcontentinfo/list", null, { | ||||||
|  |         params: {...this.search, size: 100} | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.categoryList = res.data.records; | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     clickNotice(val) { | ||||||
|  |       const id = this.notices[val]["id"]; | ||||||
|  |       if (id) { | ||||||
|  |         uni.navigateTo({ | ||||||
|  |           url: "/mods/AppNotice/AppNotice?id=" + id | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     handleActive({type, appId, url}) { | ||||||
|  |       if (type == 0) { | ||||||
|  |         uni.navigateToMiniProgram({appId}) | ||||||
|  |       } else if (type == 1) { | ||||||
|  |         this.$linkTo("/subPages/h5/webview?link=" + url); | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     getNotice() { | ||||||
|  |       this.$instance.post("/app/appmininotice/list", null, { | ||||||
|  |         params: {size: 999}, | ||||||
|  |         withoutToken: true | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.notices = res.data.records; | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getActive() { | ||||||
|  |       this.$instance.post("/app/appminitopicconfig/list", null, { | ||||||
|  |         params: {size: 999}, | ||||||
|  |         withoutToken: true | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.activeList = res.data.records; | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     /** | ||||||
|  |      * 获取顶部九宫格 | ||||||
|  |      */ | ||||||
|  |     getGrids() { | ||||||
|  |       this.$instance.post("/app/appminihomeconfig/list", null, { | ||||||
|  |         params: {picked: 1}, | ||||||
|  |         withoutToken: true | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.grids = res.data.records; | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getSwiperList() { | ||||||
|  |       this.$instance.post('/app/appbanner/listForWx', null, { | ||||||
|  |         withoutToken: true | ||||||
|  |       }).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.swiperList = res.data?.map((e) => ({...e, image: e.imgUrl})) || [] | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     handleClick({type, appId, modulePath, url, checkType, corpId}) { | ||||||
|  |       //先判读是不是系统应用 | ||||||
|  |       if (type != "0") { | ||||||
|  |         if (type == "1") { | ||||||
|  |           uni.navigateToMiniProgram({appId}); | ||||||
|  |         } else if (type == "2") { | ||||||
|  |           uni.navigateTo({url: "/subPages/h5/webview?link=" + url}); | ||||||
|  |         } else if (type == "3") { | ||||||
|  |           this.$linkTo(url); | ||||||
|  |         } else if (type == "4") { | ||||||
|  |           uni.openCustomerServiceChat({ | ||||||
|  |             extInfo: {url: url}, | ||||||
|  |             corpId: corpId, | ||||||
|  |             fail: () => { | ||||||
|  |               this.$u.toast('请使用普通微信打开小程序进行咨询'); | ||||||
|  |             } | ||||||
|  |           }); | ||||||
|  |         } | ||||||
|  |       } else if (type && type == "0") { | ||||||
|  |         uni.showLoading({title: '正在进入应用...'}) | ||||||
|  |         this.authCheck({checkType, modulePath}).finally(() => uni.hideLoading()) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     handleBannerClick(index) { | ||||||
|  |       if (!this.swiperList[index].linkUrl) return | ||||||
|  |  | ||||||
|  |       if (this.swiperList[index].type == '0') {  //0 h5链接; 1 小程序链接; 2外部小程序 | ||||||
|  |         this.$linkTo(`/subPages/h5/webview?link=${this.swiperList?.[index]?.linkUrl}&title=${this.swiperList?.[index]?.title}`) | ||||||
|  |       } else if (this.swiperList[index].type == '1') { | ||||||
|  |         this.$linkTo(`${this.swiperList?.[index]?.linkUrl}`) | ||||||
|  |       } else { | ||||||
|  |         wx.navigateToMiniProgram({ | ||||||
|  |           appId: this.swiperList[index].linkUrl | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   onShareAppMessage() { | ||||||
|  |     return { | ||||||
|  |       title: '欢迎使用数字乡村治理服务一体化平台~', | ||||||
|  |       path: `/pages/AppHome/AppHome` | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | @import "~dvcp-wui/common"; | ||||||
|  |  | ||||||
|  | .page { | ||||||
|  |   width: 100%; | ||||||
|  |   min-height: 100%; | ||||||
|  |   background-color: #F3F6F9; | ||||||
|  |   position: relative; | ||||||
|  |  | ||||||
|  |   .search-wrap { | ||||||
|  |     width: 750px; | ||||||
|  |     height: 112px; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 0 32px; | ||||||
|  |     display: flex; | ||||||
|  |     align-items: center; | ||||||
|  |     justify-content: center; | ||||||
|  |     background-color: #4181FF; | ||||||
|  |  | ||||||
|  |     .search { | ||||||
|  |       width: 100%; | ||||||
|  |       height: 64px; | ||||||
|  |       background: #000000; | ||||||
|  |       border-radius: 32px; | ||||||
|  |       opacity: 0.2; | ||||||
|  |       box-sizing: border-box; | ||||||
|  |       padding: 0 32px; | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |  | ||||||
|  |       .desc { | ||||||
|  |         font-size: 28px; | ||||||
|  |         color: #FFFFFF; | ||||||
|  |         margin-left: 16px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .area-content { | ||||||
|  |     height: 96px; | ||||||
|  |     line-height: 96px; | ||||||
|  |     background-color: #2d80fb; | ||||||
|  |  | ||||||
|  |     .area-ai { | ||||||
|  |       display: block; | ||||||
|  |       width: 200px; | ||||||
|  |       margin-left: 34px; | ||||||
|  |       text-align: left; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .picker-location { | ||||||
|  |       text-align: left; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .header-bg { | ||||||
|  |     width: 100%; | ||||||
|  |     height: 160px; | ||||||
|  |     background-color: #4181FF; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .border { | ||||||
|  |     width: 100%; | ||||||
|  |     height: 40px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .swiper-content { | ||||||
|  |     width: 686px; | ||||||
|  |     height: 240px; | ||||||
|  |     margin: -176px auto 24px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .grid-content { | ||||||
|  |     box-sizing: border-box; | ||||||
|  |  | ||||||
|  |     .grid-item { | ||||||
|  |       img { | ||||||
|  |         width: 108px; | ||||||
|  |         height: 108px; | ||||||
|  |         object-fit: fill; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .grid-text { | ||||||
|  |         font-size: 26px; | ||||||
|  |         font-weight: 400; | ||||||
|  |         color: #333333; | ||||||
|  |         line-height: 36px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   ::v-deep .notice { | ||||||
|  |     width: 686px; | ||||||
|  |     height: 88px; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 0 24px; | ||||||
|  |     margin: 30px auto 48px; | ||||||
|  |     background: #FFFFFF; | ||||||
|  |     box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.02); | ||||||
|  |     border-radius: 16px; | ||||||
|  |     display: flex; | ||||||
|  |     align-items: center; | ||||||
|  |     justify-content: center; | ||||||
|  |  | ||||||
|  |     & > img { | ||||||
|  |       width: 128px; | ||||||
|  |       height: 52px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .u-news-item { | ||||||
|  |       text-overflow: ellipsis; | ||||||
|  |       overflow: hidden; | ||||||
|  |       white-space: nowrap; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .list-wrap { | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 32px; | ||||||
|  |  | ||||||
|  |     .list-card { | ||||||
|  |       width: 100%; | ||||||
|  |       min-height: 100px; | ||||||
|  |       background: #FFFFFF; | ||||||
|  |       box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.02); | ||||||
|  |       border-radius: 16px; | ||||||
|  |       box-sizing: border-box; | ||||||
|  |       padding: 32px; | ||||||
|  |       margin-bottom: 24px; | ||||||
|  |  | ||||||
|  |       .header { | ||||||
|  |         font-size: 36px; | ||||||
|  |         font-weight: 600; | ||||||
|  |         color: #333333; | ||||||
|  |         line-height: 50px; | ||||||
|  |         display: -webkit-box; | ||||||
|  |         -webkit-box-orient: vertical; | ||||||
|  |         -webkit-line-clamp: 2; | ||||||
|  |         overflow: hidden; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .content-wrap { | ||||||
|  |         display: flex; | ||||||
|  |         gap: 4px; | ||||||
|  |         flex-wrap: wrap; | ||||||
|  |         margin-top: 24px; | ||||||
|  |         position: relative; | ||||||
|  |  | ||||||
|  |         .img { | ||||||
|  |           width: 100%; | ||||||
|  |           height: 350px; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .min-img { | ||||||
|  |           width: 204px; | ||||||
|  |           height: 204px; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .play-icon { | ||||||
|  |           width: 80px; | ||||||
|  |           height: 80px; | ||||||
|  |           border-radius: 50%; | ||||||
|  |           position: absolute; | ||||||
|  |           left: 50%; | ||||||
|  |           top: 50%; | ||||||
|  |           transform: translate(-50%, -50%); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .bottom { | ||||||
|  |         display: flex; | ||||||
|  |         align-items: center; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         margin-top: 24px; | ||||||
|  |  | ||||||
|  |         .left { | ||||||
|  |           display: flex; | ||||||
|  |           align-items: center; | ||||||
|  |           font-size: 28px; | ||||||
|  |           font-weight: 400; | ||||||
|  |           color: #999999; | ||||||
|  |  | ||||||
|  |           .tag { | ||||||
|  |             width: 144px; | ||||||
|  |             height: 48px; | ||||||
|  |             background: #EEEEEE; | ||||||
|  |             border-radius: 24px; | ||||||
|  |             display: flex; | ||||||
|  |             align-items: center; | ||||||
|  |             justify-content: center; | ||||||
|  |             font-size: 28px; | ||||||
|  |             font-weight: 400; | ||||||
|  |             color: #999999; | ||||||
|  |             margin-right: 16px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .right { | ||||||
|  |           font-size: 28px; | ||||||
|  |           font-weight: 400; | ||||||
|  |           color: #999999; | ||||||
|  |           display: flex; | ||||||
|  |           align-items: center; | ||||||
|  |  | ||||||
|  |           em { | ||||||
|  |             font-style: normal; | ||||||
|  |             color: #4181FF; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   header { | ||||||
|  |     font-size: 44px; | ||||||
|  |     font-weight: 600; | ||||||
|  |     color: #333333; | ||||||
|  |     padding: 0 32px; | ||||||
|  |     margin-bottom: 32px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .scroll-wrap { | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     padding: 0 32px; | ||||||
|  |     width: 100%; | ||||||
|  |     white-space: nowrap; | ||||||
|  |     margin-bottom: 24px; | ||||||
|  |  | ||||||
|  |     .scroll-card { | ||||||
|  |       display: inline-block; | ||||||
|  |       width: 440px; | ||||||
|  |       height: 240px; | ||||||
|  |       box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.02); | ||||||
|  |       border-radius: 16px; | ||||||
|  |       margin-right: 32px; | ||||||
|  |  | ||||||
|  |       &:last-child { | ||||||
|  |         margin-right: 0; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/project/icswb/AppHome/home.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/icswb/AppHome/home.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 965 B | 
							
								
								
									
										
											BIN
										
									
								
								src/project/icswb/AppHome/home_selected.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/icswb/AppHome/home_selected.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1000 B | 
| @@ -1,6 +1,6 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="service"> |   <div class="service"> | ||||||
|     <image src="https://cdn.sinoecare.com/i/2024/11/27/6746d227e20be.png" class="headerBanner" mode="widthFix"/> |     <image src="https://cdn.sinoecare.com/i/2024/11/28/674830fb48664.png" class="headerBanner" mode="widthFix"/> | ||||||
|     <div class="service-list" v-if="list.length"> |     <div class="service-list" v-if="list.length"> | ||||||
|       <div class="service-item" hover-class="bg-hover" @click="toDetail('./detail?id=' + item.id)" v-for="(item, index) in list" :key="index"> |       <div class="service-item" hover-class="bg-hover" @click="toDetail('./detail?id=' + item.id)" v-for="(item, index) in list" :key="index"> | ||||||
|         <div class="service-item__wrapper"> |         <div class="service-item__wrapper"> | ||||||
|   | |||||||
							
								
								
									
										377
									
								
								src/project/lianhua/AppRedemptionPoints/AppRedemptionPoints.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										377
									
								
								src/project/lianhua/AppRedemptionPoints/AppRedemptionPoints.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,377 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="AppRedemptionPoints"> | ||||||
|  |     <div class="fixed-top"> | ||||||
|  |       <div class="header"> | ||||||
|  |         <div class="num"> | ||||||
|  |           <p>积分余额</p> | ||||||
|  |           <h3>{{total}}</h3> | ||||||
|  |         </div> | ||||||
|  |         <div class="btn" @click="toMyOrder">我的订单</div> | ||||||
|  |       </div> | ||||||
|  |       <div class="search"> | ||||||
|  |         <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="76" font-size="28" bg-color="#fff" inactive-color="#8891A1"  | ||||||
|  |           active-color="#1D2229 " :bar-style="barStyle" @change="changeTab" ></u-tabs> | ||||||
|  |         <div class="type-select"> | ||||||
|  |           <div :class="currentType == index ? 'item active' : 'item'" v-for="(item, index) in typeList" :key="index" @click="typeClick(index)"> | ||||||
|  |             {{item}} | ||||||
|  |             <span v-if="index == 1" class="down-icon">⏷</span> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |         <div class="point-select" v-if="currentType == 1"> | ||||||
|  |           <u-tabs :list="pointTypeList" :is-scroll="true" :current="currentPoint" height="80" font-size="24" bg-color="#fff" inactive-color="#666666"  | ||||||
|  |           active-color="#4181FF" bar-width="0" :bold="false" @change="pointClick" ></u-tabs> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="list-content"> | ||||||
|  |       <div class="left-list" v-if="leftList.length"> | ||||||
|  |         <div class="list-info" v-for="(item, index) in leftList" :key="index"> | ||||||
|  |           <div class="item" @click="toProductDetail(item)"> | ||||||
|  |             <img :src="item.picUrl" alt=""> | ||||||
|  |             <div class="type" :class="`type`+item.type">{{ $dict.getLabel('integralSGTypeText', item.typeText) }}</div> | ||||||
|  |             <div class="content"> | ||||||
|  |               <p class="text">{{item.title}}</p> | ||||||
|  |               <div class="item-money"> | ||||||
|  |                 <h3>{{item.integralPrice}}积分</h3> | ||||||
|  |                 <p v-if="item.type == 1">+¥{{item.payMoney}}</p> | ||||||
|  |                 <span v-if="item.type == 1">兑换后再付</span> | ||||||
|  |               </div> | ||||||
|  |               <div v-if="item.shopStatus == 1"> | ||||||
|  |                 <div class="btn" :class="total >= item.integralPrice ? 'btn1' : 'btn0'" @click.stop="toOrder(item)" v-if="item.stock > 0">{{total >= item.integralPrice ? '去兑换' : '积分不足'}}</div> | ||||||
|  |                 <div class="btn btn0" v-else>商品缺货</div> | ||||||
|  |               </div> | ||||||
|  |               <div v-else> | ||||||
|  |                 <div class="btn btn0">店铺停用</div> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div class="right-list" v-if="rightList.length"> | ||||||
|  |         <div class="list-info" v-for="(item, index) in rightList" :key="index"> | ||||||
|  |           <div class="item" @click="toProductDetail(item)"> | ||||||
|  |             <img :src="item.picUrl" alt=""> | ||||||
|  |             <div class="type" :class="`type`+item.type">{{ $dict.getLabel('integralSGTypeText', item.typeText) }}</div> | ||||||
|  |             <div class="content"> | ||||||
|  |               <p class="text">{{item.title}}</p> | ||||||
|  |               <div class="item-money"> | ||||||
|  |                 <h3>{{item.integralPrice}}积分</h3> | ||||||
|  |                 <p v-if="item.type == 1">+¥{{item.payMoney}}</p> | ||||||
|  |                 <span v-if="item.type == 1">兑换后再付</span> | ||||||
|  |               </div> | ||||||
|  |               <div v-if="item.shopStatus == 1"> | ||||||
|  |                 <div class="btn" :class="total >= item.integralPrice ? 'btn1' : 'btn0'" @click.stop="toOrder(item)" v-if="item.stock > 0">{{total >= item.integralPrice ? '去兑换' : '积分不足'}}</div> | ||||||
|  |                 <div class="btn btn0" v-else>商品缺货</div> | ||||||
|  |               </div> | ||||||
|  |               <div v-else> | ||||||
|  |                 <div class="btn btn0">店铺停用</div> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <AiEmpty v-if="!goodsList.length"></AiEmpty> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import {mapState} from "vuex"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'AppRedemptionPoints', | ||||||
|  |   appName: '积分兑换', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       tabList: [{name: '全部'}, {name: '积分兑换'}, {name: '低价商品'}], | ||||||
|  |       currentTabs: 0, | ||||||
|  |       barStyle: { | ||||||
|  |         'width': '20px', | ||||||
|  |         'height': '3px', | ||||||
|  |         'border-radius': '2px', | ||||||
|  |         'bottom': '-3px', | ||||||
|  |         'background': '#2D7DFF' | ||||||
|  |       }, | ||||||
|  |       typeList: ['最新上架', '积分', '我可兑换的'], | ||||||
|  |       currentType: 0, | ||||||
|  |       pointTypeList: [{name: '全部'}, {name: '50分以下'},  {name: '100分以下'},  {name: '200分以下'},  {name: '5000分以下'}], | ||||||
|  |       currentPoint: 0, | ||||||
|  |       goodsList: [], | ||||||
|  |       leftList: [], | ||||||
|  |       rightList: [], | ||||||
|  |       total: 0, | ||||||
|  |       current: 1 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   onLoad() { | ||||||
|  |     this.getTotal() | ||||||
|  |     this.$dict.load(['integralSGTypeText']).then(() => { | ||||||
|  |       this.getList() | ||||||
|  |     }) | ||||||
|  |     uni.$on('updateGoodsList', () => { | ||||||
|  |       this.getListInit() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   onShow() { | ||||||
|  |     this.getTotal() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getTotal() { | ||||||
|  |       this.$instance.post(`/app/appintegraluser/integralUserInfoFD`).then(res => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.total = res.data.integral || 0 | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getListInit() { | ||||||
|  |       this.goodsList = [] | ||||||
|  |       this.leftList = [] | ||||||
|  |       this.rightList = [] | ||||||
|  |       this.current = 1 | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |     getList() { | ||||||
|  |       this.$instance.post(`/app/appintegralsupermarketshop/goodsListXCX`, null, { | ||||||
|  |         params: { | ||||||
|  |           goodsType: this.currentTabs,  //商品类型,0:全部、1:积分兑换、2:京东低价商品,默认0 | ||||||
|  |           orderType: this.currentType == 0 ? 1 : 0,  //排序类型,0:积分升序、1:上架时间倒序,默认0 | ||||||
|  |           filterIntegral: this.currentType == 2 ? true : false,  //过滤我可兑换的,默认false | ||||||
|  |           integralRange: this.currentType == 1 ? this.currentPoint : '',  //积分区间类型,0:全部、1:50分以下、2:100分以下、3:200分以下、4:5000分以下默认0 | ||||||
|  |           current: this.current | ||||||
|  |         } | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           this.goodsList = this.current == 1 ? res.data.records : [...this.goodsList, ...res.data.records] | ||||||
|  |           res.data.records.map((item, index) => { | ||||||
|  |             item.typeText = item.type == 0 ? 0 : 1 | ||||||
|  |             if(index%2 ==0) { | ||||||
|  |               this.leftList.push(item) | ||||||
|  |             }else { | ||||||
|  |               this.rightList.push(item) | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     changeTab(index) { | ||||||
|  |       this.currentTabs = index | ||||||
|  |       this.getListInit() | ||||||
|  |     }, | ||||||
|  |     typeClick(index) { | ||||||
|  |       this.currentType = index | ||||||
|  |       this.getListInit() | ||||||
|  |     }, | ||||||
|  |     pointClick(index) { | ||||||
|  |       this.currentPoint = index | ||||||
|  |       this.getListInit() | ||||||
|  |     }, | ||||||
|  |     toProductDetail(item) { | ||||||
|  |       uni.navigateTo({url: `./productDetails?shopGoodsId=${item.shopGoodsId}&total=${this.total}`}) | ||||||
|  |     }, | ||||||
|  |     toMyOrder() { | ||||||
|  |       uni.navigateTo({url: './myOrderList'}) | ||||||
|  |     }, | ||||||
|  |     toOrder(item) { | ||||||
|  |       if(this.total >= item.integralPrice && item.stock > 0) { | ||||||
|  |         uni.navigateTo({url: `./placeOrder?shopGoodsId=${item.shopGoodsId}&total=${this.total}&backLevel=3`}) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   onReachBottom() { | ||||||
|  |     this.current ++ | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .AppRedemptionPoints { | ||||||
|  |   .fixed-top { | ||||||
|  |     background-color: #f3f6f9; | ||||||
|  |     position: fixed; | ||||||
|  |     top: 0; | ||||||
|  |     left: 0; | ||||||
|  |     z-index: 2; | ||||||
|  |   } | ||||||
|  |   .header { | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     padding: 32px 24px; | ||||||
|  |     background-color: #fff; | ||||||
|  |     margin-bottom: 24px; | ||||||
|  |     .num { | ||||||
|  |       p { | ||||||
|  |         font-family: PingFangSC-Regular; | ||||||
|  |         font-weight: 400; | ||||||
|  |         font-size: 24px; | ||||||
|  |         color: #999; | ||||||
|  |         line-height: 34px; | ||||||
|  |       } | ||||||
|  |       h3 { | ||||||
|  |         font-family: PingFangSC-SNaNpxibold; | ||||||
|  |         font-weight: 600; | ||||||
|  |         font-size: 66px; | ||||||
|  |         color: #FF6900; | ||||||
|  |         line-height: 92px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .btn { | ||||||
|  |       width: 168px; | ||||||
|  |       height: 64px; | ||||||
|  |       border: 1px solid #4181FF; | ||||||
|  |       line-height: 62px; | ||||||
|  |       border-radius: 44px; | ||||||
|  |       box-sizing: border-box; | ||||||
|  |       text-align: center; | ||||||
|  |       font-family: PingFangSC-Medium; | ||||||
|  |       font-weight: 500; | ||||||
|  |       font-size: 26px; | ||||||
|  |       color: #4181FF; | ||||||
|  |       margin-top: 28px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .search { | ||||||
|  |     background-color: #fff; | ||||||
|  |     .type-select { | ||||||
|  |       display: flex;  | ||||||
|  |       border-top: 1px solid #D8D8D8; | ||||||
|  |       line-height: 84px; | ||||||
|  |       .item { | ||||||
|  |         flex: 1; | ||||||
|  |         text-align: center; | ||||||
|  |         font-family: PingFangSC-Regular; | ||||||
|  |         font-size: 26px; | ||||||
|  |         color: #8891A1; | ||||||
|  |         .down-icon { | ||||||
|  |           display: inline-block; | ||||||
|  |           margin-left: 8px; | ||||||
|  |           transition: all 0.3s ease-in-out; | ||||||
|  |           transform: rotate(0deg); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       .active { | ||||||
|  |         color: #4181FF; | ||||||
|  |         .down-icon { | ||||||
|  |           transform: rotate(180deg); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .list-content { | ||||||
|  |     padding: 396px 0 24px 24px; | ||||||
|  |     background-color: #f3f6f9; | ||||||
|  |     overflow: hidden; | ||||||
|  |     .left-list, | ||||||
|  |     .right-list { | ||||||
|  |       width: 50%; | ||||||
|  |       float: left; | ||||||
|  |     } | ||||||
|  |     .list-info { | ||||||
|  |       width: 100%; | ||||||
|  |     } | ||||||
|  |     .item { | ||||||
|  |       width: calc(100% - 24px); | ||||||
|  |       background-color: #fff; | ||||||
|  |       border-radius: 20px; | ||||||
|  |       position: relative; | ||||||
|  |       margin-bottom: 24px; | ||||||
|  |       img { | ||||||
|  |         width: 100%; | ||||||
|  |         height: 340px; | ||||||
|  |         border-top-left-radius: 20px; | ||||||
|  |         border-top-right-radius: 20px; | ||||||
|  |       } | ||||||
|  |       .type { | ||||||
|  |         padding: 8px 16px; | ||||||
|  |         font-family: PingFangSC-Regular; | ||||||
|  |         font-size: 20px; | ||||||
|  |         line-height: 28px; | ||||||
|  |         color: #FFF; | ||||||
|  |         border-top-right-radius: 20px; | ||||||
|  |         border-bottom-left-radius: 20px; | ||||||
|  |         position: absolute; | ||||||
|  |         top: 0; | ||||||
|  |         right: 0; | ||||||
|  |       } | ||||||
|  |       .type2 { | ||||||
|  |         background-color: #E64E39; | ||||||
|  |       } | ||||||
|  |       .type1 { | ||||||
|  |         background-color: #E64E39; | ||||||
|  |       } | ||||||
|  |       .type0 { | ||||||
|  |         background-color: #FF6900; | ||||||
|  |       } | ||||||
|  |       .content { | ||||||
|  |         padding: 16px 16px 24px; | ||||||
|  |         position: relative; | ||||||
|  |         background-color: #fff; | ||||||
|  |         .text { | ||||||
|  |           font-family: PingFangSC-SNaNpxibold; | ||||||
|  |           font-weight: 600; | ||||||
|  |           font-size: 26px; | ||||||
|  |           color: #222; | ||||||
|  |           line-height: 38px; | ||||||
|  |           text-overflow: -o-ellipsis-lastline; | ||||||
|  |           overflow: hidden; | ||||||
|  |           text-overflow: ellipsis; | ||||||
|  |           display: -webkit-box; | ||||||
|  |           -webkit-line-clamp: 2; | ||||||
|  |           line-clamp: 2;					 | ||||||
|  |           -webkit-box-orient: vertical; | ||||||
|  |           margin-bottom: 12px; | ||||||
|  |         } | ||||||
|  |         .item-money { | ||||||
|  |           width: calc(100% - 160px); | ||||||
|  |           h3 { | ||||||
|  |             font-family: PingFangSC-SNaNpxibold; | ||||||
|  |             font-weight: 600; | ||||||
|  |             font-size: 34px; | ||||||
|  |             color: #FF6900; | ||||||
|  |             line-height: 48px; | ||||||
|  |           } | ||||||
|  |           p { | ||||||
|  |             font-family: PingFangSC; | ||||||
|  |             font-weight: 600; | ||||||
|  |             font-size: 26px; | ||||||
|  |             color: #4181FF; | ||||||
|  |           } | ||||||
|  |           span { | ||||||
|  |             display: inline-block; | ||||||
|  |             font-family: PingFangSC-Regular; | ||||||
|  |             font-weight: 400; | ||||||
|  |             font-size: 20px; | ||||||
|  |             color: #4181FF; | ||||||
|  |             line-height: 22px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         .btn { | ||||||
|  |           padding: 14px 32px; | ||||||
|  |           font-family: PingFangSC-Medium; | ||||||
|  |           font-weight: 500; | ||||||
|  |           font-size: 22px; | ||||||
|  |           line-height: 28px; | ||||||
|  |           border-radius: 44px; | ||||||
|  |           position: absolute; | ||||||
|  |           bottom: 24px; | ||||||
|  |           right: 16px; | ||||||
|  |         } | ||||||
|  |         .btn1 { | ||||||
|  |           background-color: #2D7DFF; | ||||||
|  |           color: #FFF; | ||||||
|  |         } | ||||||
|  |         .btn0 { | ||||||
|  |           background-color: #E2E2E2; | ||||||
|  |           color: #666; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .item:nth-of-type(2n-1) { | ||||||
|  |       margin-right: 22px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/project/lianhua/AppRedemptionPoints/img/success.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/lianhua/AppRedemptionPoints/img/success.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 19 KiB | 
							
								
								
									
										20
									
								
								src/project/lianhua/AppRedemptionPoints/jdH5.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/project/lianhua/AppRedemptionPoints/jdH5.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="jdH5"> | ||||||
|  |     <web-view :src="goodsJdUrl"></web-view> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'jdH5', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       goodsJdUrl: '' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     this.goodsJdUrl = option.goodsJdUrl | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										315
									
								
								src/project/lianhua/AppRedemptionPoints/myOrderList.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										315
									
								
								src/project/lianhua/AppRedemptionPoints/myOrderList.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,315 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="myOrderList"> | ||||||
|  |     <div class="fixed-top"> | ||||||
|  |       <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="90" font-size="28" bg-color="#fff" inactive-color="#8891A1"  | ||||||
|  |           active-color="#1D2229 " :bar-style="barStyle" @change="changeTab" ></u-tabs> | ||||||
|  |     </div> | ||||||
|  |     <div class="list-content" v-if="list.length"> | ||||||
|  |       <div class="item" v-for="(item, index) in list" :key="index"> | ||||||
|  |         <div class="time-flex"> | ||||||
|  |           <p>{{item.createTime.substring(0, 16)}}</p> | ||||||
|  |           <div :class="`status`+item.status">{{ $dict.getLabel('integralSGOStatus', item.status) }}</div> | ||||||
|  |         </div> | ||||||
|  |         <div class="flex"> | ||||||
|  |           <img :src="item.goodsPicUrl" alt=""> | ||||||
|  |           <div class="type" :class="`type`+item.goodsTypeText">{{ $dict.getLabel('integralSGTypeText', item.goodsTypeText) }}</div> | ||||||
|  |           <div class="flex-right"> | ||||||
|  |             <p>{{item.goodsTitle}}</p> | ||||||
|  |             <div class="num-flex"> | ||||||
|  |               <h3>{{item.usedIntegral}}积分<span v-if="item.goodsType == 2">+{{item.payMoney}}元</span></h3> | ||||||
|  |               <div>x {{item.quantity}}</div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |         <p class="tips" v-if="item.goodsType == 2"><span>兑换成功后,点击「去购买」前往京东低价购买</span></p> | ||||||
|  |          <p class="tips" v-else>积分兑换商品,可到固定的兑换点进行「核销兑换」</p> | ||||||
|  |         <p class="remark" v-if="item.remarks">备注:{{item.remarks}}</p> | ||||||
|  |         <div class="flex-btn" v-if="item.goodsType == 2 && item.status != 2"> | ||||||
|  |           <p></p> | ||||||
|  |           <div class="btn confirm" @click="openJd(item)">去购买</div> | ||||||
|  |         </div> | ||||||
|  |         <div class="flex-btn" v-if="item.goodsType != 2"> | ||||||
|  |           <p>核销码:<span>{{item.verificationCode}}</span></p> | ||||||
|  |           <div class="btn" v-if="item.status == 0" @click="cancel(item)">取消订单</div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <AiEmpty v-else></AiEmpty> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import {mapState} from "vuex"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'myOrderList', | ||||||
|  |   appName: '我的订单', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       tabList: [{name: '全部'}, {name: '待核销'}, {name: '已完成'}, {name: '已取消'}], | ||||||
|  |       currentTabs: 0, | ||||||
|  |       barStyle: { | ||||||
|  |         'width': '20px', | ||||||
|  |         'height': '3px', | ||||||
|  |         'border-radius': '2px', | ||||||
|  |         'bottom': '3px', | ||||||
|  |         'background': '#2D7DFF' | ||||||
|  |       }, | ||||||
|  |       list: [], | ||||||
|  |       current: 1 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   onLoad() { | ||||||
|  |     this.$dict.load(['integralSGOStatus', 'integralSGTypeText']).then(() => { | ||||||
|  |       this.getList() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     changeTab(index) { | ||||||
|  |       this.currentTabs = index | ||||||
|  |       this.getListInit() | ||||||
|  |     }, | ||||||
|  |     getListInit() { | ||||||
|  |       this.current = 1 | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |     getList() { | ||||||
|  |       this.$instance.post(`/app/appintegralsupermarketorder/listForXCX`, null, { | ||||||
|  |         params: { | ||||||
|  |           current: this.current, | ||||||
|  |           status: this.currentTabs == 0 ? '' : this.currentTabs - 1, | ||||||
|  |           createUserId: this.user.id | ||||||
|  |         } | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           res.data.records.map((item) => { | ||||||
|  |             item.goodsTypeText = item.goodsType == 0 ? 0 : 1 | ||||||
|  |           }) | ||||||
|  |           this.list = this.current == 1 ? res.data.records : [...this.list, ...res.data.records] | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     openJd(item) { | ||||||
|  |       if(item.goodsType == 1) { | ||||||
|  |         uni.navigateTo({url: `./jdH5?goodsJdUrl=${item.goodsJdUrl}`}) | ||||||
|  |       }else { | ||||||
|  |         uni.navigateToMiniProgram({ | ||||||
|  |           appId: item.goodsJdAppid, | ||||||
|  |           path: item.goodsJdUrl | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     cancel(item) { | ||||||
|  |       uni.showModal({ | ||||||
|  |         title: '确认取消此订单?', | ||||||
|  |         content: '取消订单后,积分将退回至积分余额', | ||||||
|  |         confirmColor: "#2D7DFF", | ||||||
|  |         cancelColor: "#2D7DFF", | ||||||
|  |         cancelText: "我在想想", | ||||||
|  |         confirmText: "确认取消",  | ||||||
|  |         success: (res) => { | ||||||
|  |           if (res.confirm) { | ||||||
|  |             this.cancelOrder(item) | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     cancelOrder(item) { | ||||||
|  |       this.$instance.post(`/app/appintegralsupermarketorder/cancelForXCX?id=${item.id}`).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           this.getListInit() | ||||||
|  |           uni.$emit('updateGoodsList') | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   onReachBottom() { | ||||||
|  |     this.current = this.current + 1 | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .myOrderList { | ||||||
|  |   min-height: 100%; | ||||||
|  |   .fixed-top { | ||||||
|  |     background-color: #fff; | ||||||
|  |     position: fixed; | ||||||
|  |     top: 0; | ||||||
|  |     left: 0; | ||||||
|  |     z-index: 2; | ||||||
|  |   } | ||||||
|  |   .list-content { | ||||||
|  |     padding: 112px 24px 24px; | ||||||
|  |     background-color: #F3F6F9; | ||||||
|  |     .item { | ||||||
|  |       width: 100%; | ||||||
|  |       background: #FFF; | ||||||
|  |       border-radius: 16px; | ||||||
|  |       margin-bottom: 32px; | ||||||
|  |       .time-flex { | ||||||
|  |         padding: 0 32px; | ||||||
|  |         line-height: 64px; | ||||||
|  |         font-family: PingFangSC-Regular; | ||||||
|  |         font-size: 24px; | ||||||
|  |         color: #666; | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         border-bottom: 1px solid #ddd; | ||||||
|  |         div { | ||||||
|  |           color: #2D7DFF; | ||||||
|  |         } | ||||||
|  |         .status2 { | ||||||
|  |           color: #999; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       .flex { | ||||||
|  |         padding: 32px 32px 0; | ||||||
|  |         display: flex; | ||||||
|  |         position: relative; | ||||||
|  |         margin-bottom: 20px; | ||||||
|  |         img { | ||||||
|  |           width: 166px; | ||||||
|  |           height: 166px; | ||||||
|  |           border-radius: 16px; | ||||||
|  |           margin-right: 20px; | ||||||
|  |         } | ||||||
|  |         .type { | ||||||
|  |           position: absolute; | ||||||
|  |           left: 32px; | ||||||
|  |           bottom: 0; | ||||||
|  |           border-bottom-left-radius: 16px; | ||||||
|  |           border-bottom-right-radius: 16px; | ||||||
|  |           width: 166px; | ||||||
|  |           text-align: center; | ||||||
|  |           line-height: 34px; | ||||||
|  |           font-family: PingFangSC-Regular; | ||||||
|  |           font-size: 18px; | ||||||
|  |           color: #FFF; | ||||||
|  |           p { | ||||||
|  |             scale: 0.9; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         .type2 { | ||||||
|  |           background-color: #E64E39; | ||||||
|  |         } | ||||||
|  |         .type1 { | ||||||
|  |           background-color: #E64E39; | ||||||
|  |         } | ||||||
|  |         .type0 { | ||||||
|  |           background-color: #FF6900; | ||||||
|  |         } | ||||||
|  |         .flex-right { | ||||||
|  |           width: calc(100% - 186px); | ||||||
|  |           p { | ||||||
|  |             word-break: break-all; | ||||||
|  |             font-family: PingFangSC-Regular; | ||||||
|  |             font-size: 26px; | ||||||
|  |             color: #222; | ||||||
|  |             line-height: 34px; | ||||||
|  |             text-overflow: -o-ellipsis-lastline; | ||||||
|  |             overflow: hidden; | ||||||
|  |             text-overflow: ellipsis; | ||||||
|  |             display: -webkit-box; | ||||||
|  |             -webkit-line-clamp: 2; | ||||||
|  |             line-clamp: 2;					 | ||||||
|  |             -webkit-box-orient: vertical; | ||||||
|  |             margin-bottom: 50px; | ||||||
|  |           } | ||||||
|  |           .num-flex { | ||||||
|  |             display: flex; | ||||||
|  |             h3 { | ||||||
|  |               width: calc(100% - 100px); | ||||||
|  |               font-family: PingFangSC-SNaNpxibold; | ||||||
|  |               font-weight: 600; | ||||||
|  |               font-size: 34px; | ||||||
|  |               color: #FF6900; | ||||||
|  |               line-height: 48px; | ||||||
|  |               span { | ||||||
|  |                 display: inline-block; | ||||||
|  |                 font-size: 34px; | ||||||
|  |                 color: #4181FF; | ||||||
|  |                 margin-left: 8px; | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |             div { | ||||||
|  |               width: 100px; | ||||||
|  |               text-align: right; | ||||||
|  |               font-family: PingFangSC-SNaNpxibold; | ||||||
|  |               font-weight: 600; | ||||||
|  |               font-size: 24px; | ||||||
|  |               color: #222; | ||||||
|  |               line-height: 48px; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |            | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       .tips { | ||||||
|  |         display: inline-block; | ||||||
|  |         padding: 12px; | ||||||
|  |         line-height: 36px; | ||||||
|  |         background: #F5FCF5; | ||||||
|  |         border-radius: 16px; | ||||||
|  |         font-family: PingFangSC-Regular; | ||||||
|  |         font-size: 24px; | ||||||
|  |         color: #3BBC37; | ||||||
|  |         margin: 0 32px 16px 32px; | ||||||
|  |         span { | ||||||
|  |           display: inline-block; | ||||||
|  |           scale: 0.9; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       .remark { | ||||||
|  |         font-family: PingFangSC-Regular; | ||||||
|  |         font-size: 24px; | ||||||
|  |         color: #666; | ||||||
|  |         line-height: 34px; | ||||||
|  |         word-break: break-all; | ||||||
|  |         margin: 0 32px 24px 32px; | ||||||
|  |       } | ||||||
|  |       .flex-btn { | ||||||
|  |         padding: 0 32px 32px; | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         p { | ||||||
|  |           height: 56px; | ||||||
|  |           line-height: 56px; | ||||||
|  |           font-family: PingFangSC-Regular; | ||||||
|  |           font-size: 24px; | ||||||
|  |           color: #666; | ||||||
|  |           span { | ||||||
|  |             display: inline-block; | ||||||
|  |             font-family: PingFangSC-SNaNpxibold; | ||||||
|  |             font-weight: 600; | ||||||
|  |             font-size: 28px; | ||||||
|  |             color: #2D7DFF; | ||||||
|  |             margin-left: 8px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         .btn { | ||||||
|  |           width: 136px; | ||||||
|  |           text-align: center; | ||||||
|  |           line-height: 54px; | ||||||
|  |           border: 1px solid #CCC; | ||||||
|  |           border-radius: 44px; | ||||||
|  |           font-family: PingFangSC-Regular; | ||||||
|  |           font-size: 22px; | ||||||
|  |           color: #666; | ||||||
|  |         } | ||||||
|  |         .confirm { | ||||||
|  |           border: 1px solid #2D7DFF; | ||||||
|  |           background-color: #2D7DFF; | ||||||
|  |           color: #fff; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |    | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										291
									
								
								src/project/lianhua/AppRedemptionPoints/placeOrder.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										291
									
								
								src/project/lianhua/AppRedemptionPoints/placeOrder.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,291 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="placeOrder"> | ||||||
|  |     <div class="header-info"> | ||||||
|  |       <div class="flex"> | ||||||
|  |         <img :src="goodsInfo.picUrl" alt=""> | ||||||
|  |         <div class="type" :class="`type`+goodsInfo.typeText">{{ $dict.getLabel('integralSGTypeText', goodsInfo.typeText) }}</div> | ||||||
|  |         <div class="flex-right"> | ||||||
|  |           <p>{{goodsInfo.title}}</p> | ||||||
|  |           <div> | ||||||
|  |             <u-number-box v-model="goodsNum" @change="valChange" input-height="44" size="24" :min="1" :max="goodsInfo.stock"></u-number-box> | ||||||
|  |           </div> | ||||||
|  |           <h3>{{goodsInfo.integralPrice}}积分<span v-if="goodsInfo.type == 2">+¥{{goodsInfo.payMoney}}.00</span></h3> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <p class="tips" v-if="goodsInfo.type == 2">兑换成功后,点击「去购买」前往京东低价购买</p> | ||||||
|  |       <p class="tips" v-else>积分兑换商品,可到固定的兑换点进行「核销兑换」</p> | ||||||
|  |     </div> | ||||||
|  |     <div class="content"> | ||||||
|  |       <div class="item-flex" @click="show=true"> | ||||||
|  |         <div class="label">订单备注</div> | ||||||
|  |         <div class="value" :class="value ? '' : 'color-999'">{{value || '无备注'}}<u-icon name="arrow-right" color="#bbb" size="24"></u-icon></div> | ||||||
|  |       </div> | ||||||
|  |       <div class="item-flex"> | ||||||
|  |         <div class="label">积分余额</div> | ||||||
|  |         <div class="value color-FF6900">{{total}}积分</div> | ||||||
|  |       </div> | ||||||
|  |       <div class="item-flex"> | ||||||
|  |         <div class="label">支付积分</div> | ||||||
|  |         <div class="value">减{{(goodsNum*goodsInfo.integralPrice).toFixed(2)}}积分</div> | ||||||
|  |       </div> | ||||||
|  |       <div class="item-flex" v-if="goodsInfo.type == 2"> | ||||||
|  |         <div class="label">京东支付</div> | ||||||
|  |         <div class="value color-999">¥{{(goodsNum*goodsInfo.payMoney).toFixed(2)}}</div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <u-popup v-model="show" mode="bottom"> | ||||||
|  |       <div class="textarea"> | ||||||
|  |         <u-input v-model="value" type="textarea" :height="120" :auto-height="true" placeholder="请输入备注" :clearable="false" maxlength="1000" /> | ||||||
|  |         <p>字数{{value.length}}/1000</p> | ||||||
|  |       </div> | ||||||
|  |       <div class="btn"> | ||||||
|  |         <span @click="value=''">清空内容</span> | ||||||
|  |         <span class="confirm" @click="confirm">保存</span> | ||||||
|  |       </div> | ||||||
|  |     </u-popup> | ||||||
|  |     <div class="bottom-btn" @click="confirmOrder()"> | ||||||
|  |       <div>提交订单</div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import {mapState} from "vuex"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'placeOrder', | ||||||
|  |   appName: '提交订单', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       value: '', | ||||||
|  |       show: false, | ||||||
|  |       total: 0, | ||||||
|  |       goodsInfo: {}, | ||||||
|  |       goodsNum: 1, | ||||||
|  |       backLevel: 0 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     this.shopGoodsId = option.shopGoodsId | ||||||
|  |     this.total = option.total | ||||||
|  |     this.backLevel = option.backLevel | ||||||
|  |     this.$dict.load(['integralSGTypeText']).then(() => { | ||||||
|  |       this.getDetail() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getDetail() { | ||||||
|  |       this.$instance.post(`/app/appintegralsupermarketshop/queryGoodsInfoXCX?shopGoodsId=${this.shopGoodsId}`).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           this.goodsInfo = res.data | ||||||
|  |           this.goodsInfo.typeText = this.goodsInfo.type == 0 ? 0 : 1 | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     valChange(e) { | ||||||
|  |       this.goodsNum = e.value | ||||||
|  |     }, | ||||||
|  |     confirm() { | ||||||
|  |       this.show = false | ||||||
|  |     }, | ||||||
|  |     confirmOrder() { | ||||||
|  |       this.$instance.post(`/app/appintegralsupermarketorder/add`,  { | ||||||
|  |         shopId: this.goodsInfo.shopId, | ||||||
|  |         goodsId: this.goodsInfo.id, | ||||||
|  |         remarks: this.value, | ||||||
|  |         quantity: this.goodsNum | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           uni.$emit('updateGoodsList') | ||||||
|  |           this.toSuccess() | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     toSuccess() { | ||||||
|  |       var integralPrice = this.goodsNum*this.goodsInfo.integralPrice | ||||||
|  |       uni.navigateTo({url: `./successOrder?integralPrice=${integralPrice}&backLevel=${this.backLevel}&shopGoodsId=${this.goodsInfo.shopGoodsId}`}) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .placeOrder { | ||||||
|  |   .header-info { | ||||||
|  |     padding: 48px 32px; | ||||||
|  |     background-color: #fff; | ||||||
|  |     margin-bottom: 24px; | ||||||
|  |     .flex { | ||||||
|  |       margin-bottom: 32px; | ||||||
|  |       display: flex; | ||||||
|  |       position: relative; | ||||||
|  |       img { | ||||||
|  |         width: 166px; | ||||||
|  |         height: 166px; | ||||||
|  |         border-radius: 16px; | ||||||
|  |         margin-right: 20px; | ||||||
|  |       } | ||||||
|  |       .type { | ||||||
|  |         position: absolute; | ||||||
|  |         left: 0; | ||||||
|  |         bottom: 0; | ||||||
|  |         border-bottom-left-radius: 16px; | ||||||
|  |         border-bottom-right-radius: 16px; | ||||||
|  |         width: 166px; | ||||||
|  |         text-align: center; | ||||||
|  |         line-height: 34px; | ||||||
|  |         font-family: PingFangSC-Regular; | ||||||
|  |         font-size: 18px; | ||||||
|  |         color: #FFF; | ||||||
|  |         p { | ||||||
|  |           scale: 0.9; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       .type2 { | ||||||
|  |         background-color: #E64E39; | ||||||
|  |       } | ||||||
|  |       .type1 { | ||||||
|  |         background-color: #E64E39; | ||||||
|  |       } | ||||||
|  |       .type0 { | ||||||
|  |         background-color: #FF6900; | ||||||
|  |       } | ||||||
|  |       .flex-right { | ||||||
|  |         width: calc(100% - 186px); | ||||||
|  |         p { | ||||||
|  |           word-break: break-all; | ||||||
|  |           font-family: PingFangSC-Regular; | ||||||
|  |           font-size: 26px; | ||||||
|  |           color: #222; | ||||||
|  |           line-height: 34px; | ||||||
|  |           text-overflow: -o-ellipsis-lastline; | ||||||
|  |           overflow: hidden; | ||||||
|  |           text-overflow: ellipsis; | ||||||
|  |           display: -webkit-box; | ||||||
|  |           -webkit-line-clamp: 2; | ||||||
|  |           line-clamp: 2;					 | ||||||
|  |           -webkit-box-orient: vertical; | ||||||
|  |           margin-bottom: 22px; | ||||||
|  |         } | ||||||
|  |         div { | ||||||
|  |           text-align: right; | ||||||
|  |         } | ||||||
|  |         h3 { | ||||||
|  |           font-family: PingFangSC-SNaNpxibold; | ||||||
|  |           font-weight: 600; | ||||||
|  |           font-size: 34px; | ||||||
|  |           color: #FF6900; | ||||||
|  |           line-height: 48px; | ||||||
|  |           span { | ||||||
|  |             display: inline-block; | ||||||
|  |             font-size: 34px; | ||||||
|  |             color: #4181FF; | ||||||
|  |             margin-left: 8px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .tips { | ||||||
|  |       display: inline-block; | ||||||
|  |       padding: 12px; | ||||||
|  |       line-height: 36px; | ||||||
|  |       background: #F5FCF5; | ||||||
|  |       border-radius: 16px; | ||||||
|  |       font-family: PingFangSC-Regular; | ||||||
|  |       font-size: 24px; | ||||||
|  |       color: #3BBC37; | ||||||
|  |       span { | ||||||
|  |         display: inline-block; | ||||||
|  |         scale: 0.9; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .content { | ||||||
|  |     padding: 0 32px; | ||||||
|  |     background-color: #fff; | ||||||
|  |     .item-flex { | ||||||
|  |       display: flex; | ||||||
|  |       padding: 30px 0; | ||||||
|  |       font-size: 26px; | ||||||
|  |       line-height: 34px; | ||||||
|  |       font-family: PingFangSC-Regular; | ||||||
|  |       .label { | ||||||
|  |         color: #222; | ||||||
|  |         width: 120px; | ||||||
|  |       } | ||||||
|  |       .value { | ||||||
|  |         width: calc(100% - 120px); | ||||||
|  |         text-align: right; | ||||||
|  |         color: #222; | ||||||
|  |       } | ||||||
|  |       .color-FF6900 { | ||||||
|  |         color: #FF6900; | ||||||
|  |       } | ||||||
|  |       .color-999 { | ||||||
|  |         color: #999; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .textarea { | ||||||
|  |     margin: 32px 32px 24px; | ||||||
|  |     width: calc(100% - 64px); | ||||||
|  |     padding: 16px; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     background: #f7f7f7; | ||||||
|  |     border-radius: 8px; | ||||||
|  |     p { | ||||||
|  |       font-size: 26px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #999; | ||||||
|  |       line-height: 36px; | ||||||
|  |       text-align: right; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .btn { | ||||||
|  |     padding: 0 32px 24px; | ||||||
|  |     height: 64px; | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     span { | ||||||
|  |       display: inline-block; | ||||||
|  |       line-height: 64px; | ||||||
|  |       font-size: 26px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #666; | ||||||
|  |     } | ||||||
|  |     .confirm { | ||||||
|  |       width: 144px; | ||||||
|  |       text-align: center; | ||||||
|  |       background: #1365dd; | ||||||
|  |       border-radius: 32px; | ||||||
|  |       font-size: 28px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #fff; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .bottom-btn { | ||||||
|  |     position: fixed; | ||||||
|  |     left: 0; | ||||||
|  |     bottom: 0; | ||||||
|  |     width: 100%; | ||||||
|  |     background-color: #fff; | ||||||
|  |     padding: 20px 32px; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     div { | ||||||
|  |       width: 100%; | ||||||
|  |       height: 88px; | ||||||
|  |       line-height: 88px; | ||||||
|  |       text-align: center; | ||||||
|  |       border-radius: 44px; | ||||||
|  |       font-family: PingFangSC-Medium; | ||||||
|  |       font-weight: 500; | ||||||
|  |       font-size: 34px; | ||||||
|  |       color: #FFF; | ||||||
|  |       background: #4181FF; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										165
									
								
								src/project/lianhua/AppRedemptionPoints/pointsPublicity.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								src/project/lianhua/AppRedemptionPoints/pointsPublicity.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="pointsPublicity"> | ||||||
|  |     <div class="header"> | ||||||
|  |       <img :src="`${cdn}/publicity-header.png`" alt=""> | ||||||
|  |       <div class="title">{{user.girdName}}积分公示</div> | ||||||
|  |     </div> | ||||||
|  |     <div class="list-content"> | ||||||
|  |       <div class="item" v-for="(item, index) in list" :key="index"> | ||||||
|  |         <span class="blue-tips"></span> | ||||||
|  |         <p class="title">{{item.classOne}}</p> | ||||||
|  |         <div class="item-info"> | ||||||
|  |           <p class="mini-title">{{item.classTwo}}</p> | ||||||
|  |           <div class="text-flex"> | ||||||
|  |             <p>{{item.classThree}}</p> | ||||||
|  |             <div> | ||||||
|  |               <img :src="`${cdn}/star-icon.png`" alt="">+{{item.integral}} | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <AiEmpty v-if="!list.length"></AiEmpty> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import {mapActions, mapState} from "vuex"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'pointsPublicity', | ||||||
|  |   appName: '积分公示', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       cdn: "https://cdn.cunwuyun.cn/fengdu", | ||||||
|  |       list: [], | ||||||
|  |       current: 1 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   onLoad() { | ||||||
|  |     this.getAuth() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     ...mapActions(['getUserInfo']), | ||||||
|  |     getList() { | ||||||
|  |       this.$instance.post(`/app/appintegralpublicityinfo/list?current=${this.current}&girdId=${this.user.girdId}`).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           this.list = this.current == 1 ? res.data.records : [...this.list, ...res.data.records] | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getAuth() { | ||||||
|  |       this.$nextTick(() => { | ||||||
|  |         this.getUserInfo('qujing') | ||||||
|  |         this.getList() | ||||||
|  |          | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   onReachBottom() { | ||||||
|  |     this.current++ | ||||||
|  |     this.getList() | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | uni-page-body{ | ||||||
|  |   background-color: #fff; | ||||||
|  | } | ||||||
|  | .pointsPublicity { | ||||||
|  |   .header { | ||||||
|  |     position: fixed; | ||||||
|  |     top: 0; | ||||||
|  |     left: 0; | ||||||
|  |     width: 100%; | ||||||
|  |     z-index: 9; | ||||||
|  |     background-color: #f3f6f9; | ||||||
|  |     img { | ||||||
|  |       width: 100%; | ||||||
|  |       height: 216px; | ||||||
|  |     } | ||||||
|  |     .title { | ||||||
|  |       font-family: PingFangSC-Medium; | ||||||
|  |       font-weight: 500; | ||||||
|  |       font-size: 34px; | ||||||
|  |       color: #222; | ||||||
|  |       line-height: 40px; | ||||||
|  |       padding: 38px 32px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .list-content { | ||||||
|  |     padding: 332px 32px 32px; | ||||||
|  |     .item { | ||||||
|  |       width: 100%; | ||||||
|  |       background: #FFF; | ||||||
|  |       box-shadow: inset 0 0 0 0 #EEEEEE; | ||||||
|  |       padding: 32px 32px 0; | ||||||
|  |       box-sizing: border-box; | ||||||
|  |       position: relative; | ||||||
|  |       margin-bottom: 24px; | ||||||
|  |       .blue-tips { | ||||||
|  |         position: absolute; | ||||||
|  |         top: 34px; | ||||||
|  |         left: 0; | ||||||
|  |         width: 8px; | ||||||
|  |         height: 36px; | ||||||
|  |         background: #2D7DFF; | ||||||
|  |         border-radius: 4px; | ||||||
|  |       } | ||||||
|  |       .title { | ||||||
|  |         font-family: PingFangSC-Medium; | ||||||
|  |         font-weight: 500; | ||||||
|  |         font-size: 34px; | ||||||
|  |         color: #333; | ||||||
|  |         line-height: 40px; | ||||||
|  |         word-break: break-all; | ||||||
|  |       } | ||||||
|  |       .item-info { | ||||||
|  |         width: 100%; | ||||||
|  |         padding: 32px 0; | ||||||
|  |         border-top: 1px solid #eee; | ||||||
|  |         .mini-title { | ||||||
|  |           font-family: PingFangSC-Regular; | ||||||
|  |           font-size: 34px; | ||||||
|  |           color: #333; | ||||||
|  |           line-height: 40px; | ||||||
|  |           word-break: break-all; | ||||||
|  |           margin-bottom: 14px; | ||||||
|  |         } | ||||||
|  |         .text-flex { | ||||||
|  |           display: flex; | ||||||
|  |           width: 100%; | ||||||
|  |           p { | ||||||
|  |             width: calc(100% - 160px); | ||||||
|  |             font-family: PingFangSC-Regular; | ||||||
|  |             font-size: 26px; | ||||||
|  |             color: #666; | ||||||
|  |             word-break: break-all; | ||||||
|  |           } | ||||||
|  |           div { | ||||||
|  |             width: 160px; | ||||||
|  |             text-align: right; | ||||||
|  |             font-family: DINAlternate-Bold; | ||||||
|  |             font-weight: 700; | ||||||
|  |             font-size: 30px; | ||||||
|  |             color: #FF7109; | ||||||
|  |             img { | ||||||
|  |               width: 32px; | ||||||
|  |               height: 32px; | ||||||
|  |               margin-right: 8px; | ||||||
|  |               vertical-align: bottom; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       .item-info:nth-of-type(2) { | ||||||
|  |         border-top: 0; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										185
									
								
								src/project/lianhua/AppRedemptionPoints/productDetails.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								src/project/lianhua/AppRedemptionPoints/productDetails.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="productDetails" v-if="goodsInfo.picUrl"> | ||||||
|  |     <img :src="goodsInfo.picUrl" alt=""> | ||||||
|  |     <div class="type" :class="`type`+goodsInfo.typeText">{{ $dict.getLabel('integralSGTypeText', goodsInfo.typeText) }}</div> | ||||||
|  |     <div class="product-info"> | ||||||
|  |       <p>{{goodsInfo.title}}</p> | ||||||
|  |       <h3>{{goodsInfo.integralPrice}}积分<span v-if="goodsInfo.type == 2">+¥{{goodsInfo.payMoney}}<span v-if="goodsInfo.type == 2">(兑换后再付)</span></span></h3> | ||||||
|  |       <div>零售单价¥{{goodsInfo.retailPrice}}</div> | ||||||
|  |       <span class="tips" v-if="goodsInfo.type == 2">兑换成功后,点击「去购买」前往京东低价购买</span> | ||||||
|  |       <span class="tips" v-else>积分兑换商品,可到固定的兑换点进行「核销兑换」</span> | ||||||
|  |     </div> | ||||||
|  |     <div class="product-content"> | ||||||
|  |       <p>商品描述:</p> | ||||||
|  |       <p v-html="goodsInfo.description"></p> | ||||||
|  |     </div> | ||||||
|  |     <div class="btn" @click="toOrder()" v-if="goodsInfo.shopStatus == 1"> | ||||||
|  |       <div :class="total >= goodsInfo.integralPrice ? 'status1' : 'status0'" v-if="goodsInfo.stock > 0">{{total >= goodsInfo.integralPrice ? '立即兑换' : '积分不足'}}</div> | ||||||
|  |       <div class="status0" v-else>商品缺货</div> | ||||||
|  |     </div> | ||||||
|  |     <div class="btn" v-else> | ||||||
|  |       <div class="status0">店铺停用</div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import {mapState} from "vuex"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'productDetails', | ||||||
|  |   appName: '兑换商品', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       shopGoodsId: '', | ||||||
|  |       goodsInfo: {}, | ||||||
|  |       total: 0 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     this.shopGoodsId = option.shopGoodsId | ||||||
|  |     this.total = option.total | ||||||
|  |     this.$dict.load(['integralSGTypeText']).then(() => { | ||||||
|  |       this.getDetail() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getDetail() { | ||||||
|  |       this.$instance.post(`/app/appintegralsupermarketshop/queryGoodsInfoXCX?shopGoodsId=${this.shopGoodsId}`).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           this.goodsInfo = res.data | ||||||
|  |           this.goodsInfo.typeText = this.goodsInfo.type == 0 ? 0 : 1 | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     toOrder() { | ||||||
|  |       if(this.total >= this.goodsInfo.integralPrice && this.goodsInfo.stock > 0 && this.goodsInfo.status == 1) { | ||||||
|  |         uni.navigateTo({url: `./placeOrder?shopGoodsId=${this.goodsInfo.shopGoodsId}&total=${this.total}&backLevel=4`}) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .productDetails { | ||||||
|  |   background-color: #f3f6f9; | ||||||
|  |   position: relative; | ||||||
|  |   img { | ||||||
|  |     width: 100%; | ||||||
|  |     height: 750px; | ||||||
|  |   } | ||||||
|  |   .type { | ||||||
|  |     position: absolute; | ||||||
|  |     top: 0; | ||||||
|  |     right: 0; | ||||||
|  |     line-height: 42px; | ||||||
|  |     font-family: PingFangSC-SNaNpxibold; | ||||||
|  |     font-weight: 600; | ||||||
|  |     font-size: 30px; | ||||||
|  |     color: #FFF; | ||||||
|  |     padding: 16px 16px 16px 36px; | ||||||
|  |     border-bottom-left-radius: 40px; | ||||||
|  |   } | ||||||
|  |   .type2 { | ||||||
|  |     background-color: #E64E39; | ||||||
|  |   } | ||||||
|  |   .type1 { | ||||||
|  |     background-color: #E64E39; | ||||||
|  |   } | ||||||
|  |   .type0 { | ||||||
|  |     background-color: #FF6900; | ||||||
|  |   } | ||||||
|  |   .product-info { | ||||||
|  |     padding: 32px; | ||||||
|  |     background-color: #fff; | ||||||
|  |     margin-bottom: 24px; | ||||||
|  |     p { | ||||||
|  |       word-break: break-all; | ||||||
|  |       font-family: PingFangSC-SNaNpxibold; | ||||||
|  |       font-weight: 600; | ||||||
|  |       font-size: 48px; | ||||||
|  |       color: #222; | ||||||
|  |       letter-spacing: 0; | ||||||
|  |       line-height: 76px; | ||||||
|  |       margin-bottom: 8px; | ||||||
|  |     } | ||||||
|  |     h3 { | ||||||
|  |       font-family: PingFangSC-SNaNpxibold; | ||||||
|  |       font-weight: 600; | ||||||
|  |       font-size: 44px; | ||||||
|  |       color: #FF6900; | ||||||
|  |       margin-bottom: 8px; | ||||||
|  |       span { | ||||||
|  |         font-size: 44px; | ||||||
|  |         color: #4181FF; | ||||||
|  |         margin-left: 8px; | ||||||
|  |         span { | ||||||
|  |           font-weight: 400; | ||||||
|  |           font-family: PingFangSC-Regular; | ||||||
|  |           font-size: 32px; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     div { | ||||||
|  |       font-family: PingFangSC-Regular; | ||||||
|  |       font-weight: 400; | ||||||
|  |       font-size: 24px; | ||||||
|  |       color: #999; | ||||||
|  |       line-height: 34px; | ||||||
|  |       margin-bottom: 24px; | ||||||
|  |       text-decoration: line-through; | ||||||
|  |     } | ||||||
|  |     .tips { | ||||||
|  |       display: inline-block; | ||||||
|  |       padding: 12px; | ||||||
|  |       line-height: 36px; | ||||||
|  |       background: #F5FCF5; | ||||||
|  |       border-radius: 16px; | ||||||
|  |       font-family: PingFangSC-Regular; | ||||||
|  |       font-size: 24px; | ||||||
|  |       color: #3BBC37; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .product-content { | ||||||
|  |     padding: 34px 64px 162px; | ||||||
|  |     background-color: #fff; | ||||||
|  |     p { | ||||||
|  |       font-family: PingFangSC-Regular; | ||||||
|  |       font-size: 32px; | ||||||
|  |       color: #666; | ||||||
|  |       line-height: 60px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .btn { | ||||||
|  |     position: fixed; | ||||||
|  |     left: 0; | ||||||
|  |     bottom: 0; | ||||||
|  |     width: 100%; | ||||||
|  |     background-color: #fff; | ||||||
|  |     padding: 20px 32px; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     div { | ||||||
|  |       width: 100%; | ||||||
|  |       height: 88px; | ||||||
|  |       line-height: 88px; | ||||||
|  |       text-align: center; | ||||||
|  |       border-radius: 44px; | ||||||
|  |       font-family: PingFangSC-Medium; | ||||||
|  |       font-weight: 500; | ||||||
|  |       font-size: 34px; | ||||||
|  |     } | ||||||
|  |     .status1 { | ||||||
|  |       color: #FFF; | ||||||
|  |       background: #4181FF; | ||||||
|  |     } | ||||||
|  |     .status0 { | ||||||
|  |       color: #666; | ||||||
|  |       background: #E2E2E2; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										145
									
								
								src/project/lianhua/AppRedemptionPoints/successOrder.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								src/project/lianhua/AppRedemptionPoints/successOrder.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="successOrder"> | ||||||
|  |     <img src="./img/success.png" alt=""> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     <div v-if="goodsInfo.type == 0"> | ||||||
|  |       <h3>提交成功</h3> | ||||||
|  |       <p>提交「积分兑换」订单成功,扣减 <span>{{integralPrice}}积分</span></p> | ||||||
|  |       <div class="btn-flex"> | ||||||
|  |         <div @click="back">返回</div> | ||||||
|  |         <div @click="toOrderList">查看订单</div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div v-else> | ||||||
|  |       <h3>兑换成功</h3> | ||||||
|  |       <p>提交「京东低价商品」订单成功,扣减 <span>{{integralPrice}}积分</span><br/> | ||||||
|  |         可点击下方按钮前往京东商城进行低价购买 | ||||||
|  |       </p> | ||||||
|  |       <div class="btn" @click="openJd">去购买</div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import {mapState} from "vuex"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'successOrder', | ||||||
|  |   appName: '提交订单', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       integralPrice: 0, | ||||||
|  |       backLevel: 1, | ||||||
|  |       shopGoodsId: '', | ||||||
|  |       goodsInfo: {} | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     console.log(option) | ||||||
|  |     this.integralPrice = option.integralPrice | ||||||
|  |     this.backLevel = option.backLevel | ||||||
|  |     this.shopGoodsId = option.shopGoodsId | ||||||
|  |     this.getDetail() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getDetail() { | ||||||
|  |       this.$instance.post(`/app/appintegralsupermarketshop/queryGoodsInfoXCX?shopGoodsId=${this.shopGoodsId}`).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           this.goodsInfo = res.data | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     openJd() { | ||||||
|  |       if(this.goodsInfo.type == 1) { | ||||||
|  |         uni.navigateTo({url: `./jdH5?goodsJdUrl=${this.goodsInfo.jdUrl}`}) | ||||||
|  |       }else { | ||||||
|  |         uni.navigateToMiniProgram({ | ||||||
|  |           appId: this.goodsInfo.jdAppid, | ||||||
|  |           path: this.goodsInfo.jdUrl | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     back() { | ||||||
|  |       uni.navigateBack({delta: Number(this.backLevel)}) | ||||||
|  |     }, | ||||||
|  |     toOrderList() { | ||||||
|  |       uni.redirectTo({ | ||||||
|  |         url: './myOrderList' | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | uni-page-body{ | ||||||
|  |   background-color: #fff; | ||||||
|  | } | ||||||
|  | .successOrder { | ||||||
|  |   padding: 0 60px; | ||||||
|  |   text-align: center; | ||||||
|  |   img { | ||||||
|  |     width: 240px; | ||||||
|  |     height: 232px; | ||||||
|  |     margin: 168px auto 32px auto; | ||||||
|  |   } | ||||||
|  |   h3 { | ||||||
|  |     font-family: PingFangSC-SNaNpxibold; | ||||||
|  |     font-weight: 600; | ||||||
|  |     font-size: 40px; | ||||||
|  |     color: #333; | ||||||
|  |     line-height: 56px; | ||||||
|  |     margin-bottom: 16px; | ||||||
|  |   } | ||||||
|  |   p { | ||||||
|  |     color: #333; | ||||||
|  |     font-size: 30px; | ||||||
|  |     font-family: PingFangSC; | ||||||
|  |     line-height: 50px; | ||||||
|  |     text-align: center; | ||||||
|  |     margin-bottom: 80px; | ||||||
|  |     span { | ||||||
|  |       color: #FF6900; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .btn { | ||||||
|  |     width: 410px; | ||||||
|  |     height: 88px; | ||||||
|  |     line-height: 88px; | ||||||
|  |     background: #2D7DFF; | ||||||
|  |     border-radius: 44px; | ||||||
|  |     font-family: PingFangSC-Medium; | ||||||
|  |     font-weight: 500; | ||||||
|  |     font-size: 34px; | ||||||
|  |     color: #FFF; | ||||||
|  |     text-align: center; | ||||||
|  |     margin: 0 auto; | ||||||
|  |   } | ||||||
|  |   .btn-flex { | ||||||
|  |     font-family: PingFangSC-Medium; | ||||||
|  |     font-weight: 500; | ||||||
|  |     font-size: 34px; | ||||||
|  |     margin: 0 auto; | ||||||
|  |     div { | ||||||
|  |       display: inline-block; | ||||||
|  |       width: 272px; | ||||||
|  |       text-align: center; | ||||||
|  |       height: 88px; | ||||||
|  |       line-height: 88px; | ||||||
|  |       border-radius: 44px; | ||||||
|  |       color: #FFF; | ||||||
|  |       background-color: #2D7DFF; | ||||||
|  |     } | ||||||
|  |     div:nth-of-type(1) { | ||||||
|  |       background-color: #E5EFFF; | ||||||
|  |       color: #2D7DFF; | ||||||
|  |       margin-right: 26px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |    | ||||||
|  | } | ||||||
|  | </style> | ||||||
		Reference in New Issue
	
	Block a user