秀山工作台入库
This commit is contained in:
		
							
								
								
									
										560
									
								
								project/xiushan/apps/AppConsole/AppConsole.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										560
									
								
								project/xiushan/apps/AppConsole/AppConsole.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,560 @@ | ||||
| <template> | ||||
|   <section class="AppConsole"> | ||||
|     <div class="top"> | ||||
|       <div class="left"> | ||||
|         <!-- <img :src="user.info.avatar"> --> | ||||
|         <div class="user"> | ||||
|           <h2 class="mar-b10">您好,{{ user.info.name }},欢迎回来!</h2> | ||||
|           <p v-if="user.financeUser" v-text="financeInfo"/> | ||||
|           <span>上次登录时间:{{ user.info.lastLoginTime }}</span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="right"> | ||||
|         <div class="right-item" v-for="row in info" :key="row.name" @click="$router.push({name:row.menuId,query:{status:row.dictValue}})"> | ||||
|           <div class="top"> | ||||
|             <i v-if="row.countNumber>0"/> | ||||
|             <span v-text="row.name"/> | ||||
|           </div> | ||||
|           <h2 v-text="row.countNumber"/> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="middle" v-if="!isFinanceUser"> | ||||
|       <div class="left"> | ||||
|         <div class="title"> | ||||
|           <h2>群众留言</h2> | ||||
|           <div @click="$router.push({name:routeNames.AppMassMessage})"> | ||||
|             <span>全部留言</span> | ||||
|             <img src="./assets/right.png"> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="list"> | ||||
|           <div class="comment-item" v-for="(item, index) in comments" :key="index" | ||||
|                @click="$router.push({name:routeNames.AppMassMessage,query:{id:item.id}})"> | ||||
|             <h3>{{ item.title }}</h3> | ||||
|             <div class="comment-item__bottom"> | ||||
|               <span>{{ dict.getLabel('leaveMessageType', item.type) }}</span> | ||||
|               <i>{{ item.createTime }}</i> | ||||
|             </div> | ||||
|           </div> | ||||
|           <ai-empty class="w100" v-if="!comments.length"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="right"> | ||||
|         <div class="title"> | ||||
|           <h2>政策动态</h2> | ||||
|           <div @click="$router.push({name:routeNames.AppNewsCenter})"> | ||||
|             <span>全部动态</span> | ||||
|             <img src="./assets/right.png"> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="list"> | ||||
|           <div class="dynamic-item" v-for="(item, index) in news" :key="index" @click="$router.push({ | ||||
|             name: routeNames.AppNewsCenter, | ||||
|             query: { | ||||
|               id: item.id | ||||
|             }, | ||||
|             hash: '#' + (item.type === '0' ? 'news' : 'video') | ||||
|           })"> | ||||
|             <i></i> | ||||
|             <div class="dynamic-item__right"> | ||||
|               <h3>{{ item.title }}</h3> | ||||
|               <p>{{ item.createTime }}</p> | ||||
|             </div> | ||||
|           </div> | ||||
|           <ai-empty class="w100" v-if="!news.length"></ai-empty> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="bottom" v-else> | ||||
|       <div class="title"> | ||||
|         <h2>需求抢单</h2> | ||||
|         <div @click="$router.push({name:routeNames.AppFinancingNeeds})"> | ||||
|           <span>查看全部</span> | ||||
|           <img src="./assets/right.png"> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="list"> | ||||
|         <div class="item" v-for="(item, index) in list" :key="index"> | ||||
|           <div class="item-top"> | ||||
|             <div class="item-top__left fill"> | ||||
|               <h2 class="nowrap">{{ item.enterpriseName || item.name }}</h2> | ||||
|               <p>{{ item.areaName }}</p> | ||||
|             </div> | ||||
|             <img @click="$router.push({name:routeNames.AppFinancingNeeds,query:{id:item.id}})" | ||||
|                  src="./assets/qd.png"> | ||||
|           </div> | ||||
|           <div class="item-bottom"> | ||||
|             <div class="item-bottom__item"> | ||||
|               <span>需求金额</span> | ||||
|               <h3>{{ item.loanAmount }}万</h3> | ||||
|             </div> | ||||
|             <div class="item-bottom__item"> | ||||
|               <span>使用时长</span> | ||||
|               <h3 v-text="dict.getLabel('productRepaymentTimeline',item.hopeLifespan)"/> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <ai-empty class="pad-b48 w100" v-if="!list.length"/> | ||||
|       </div> | ||||
|     </div> | ||||
|   </section> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import {mapState} from "vuex"; | ||||
|  | ||||
| export default { | ||||
|   name: "AppConsole", | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|     permissions: Function | ||||
|   }, | ||||
|   computed: { | ||||
|     ...mapState(['user']), | ||||
|     isFinanceUser() { | ||||
|       return !!this.user?.financeUser?.id | ||||
|     }, | ||||
|     financeInfo() { | ||||
|       let {organizationName, userRole} = this.user.financeUser | ||||
|       return [organizationName, this.dict.getLabel("financialOrganizationUserRole", userRole)].join(" | ") | ||||
|     }, | ||||
|     routeNames() { | ||||
|       return { | ||||
|         AppMassMessage: "c66857ca597f49aab9c1aeb8a8e3e7c0", | ||||
|         AppNewsCenter: '6a56c8fdb09a437098f837a03a5fccb0', | ||||
|         AppFinancingNeeds: "27338cb83e77461dbd44356a6760df85", | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       comments: [], | ||||
|       news: [], | ||||
|       list: [], | ||||
|       info: {} | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     this.dict.load('leaveMessageType', 'financialOrganizationUserRole', 'productRepaymentTimeline').then(() => { | ||||
|       this.getComments() | ||||
|       this.getNewsList() | ||||
|       this.getList() | ||||
|       this.getInfo() | ||||
|     }) | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     getComments() { | ||||
|       this.instance.post('/appleavemessage/list?current=1&size=10').then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.comments = res.data.records | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     getInfo() { | ||||
|       this.instance.post("/todo/queryToDoList").then(res => { | ||||
|         if (res?.data) { | ||||
|           this.info = res.data | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     getNewsList() { | ||||
|       this.instance.post('/appnews/list?current=1&size=10').then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.news = res.data.records | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     getList() { | ||||
|       this.instance.post('/appfinancingdemand/list?current=1&size=8', null, { | ||||
|         params: {status: 0} | ||||
|       }).then(res => { | ||||
|         if (res?.data) { | ||||
|           this.list = res.data.records | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| .AppConsole { | ||||
|   height: 100%; | ||||
|   margin-bottom: 20px; | ||||
|   padding: 0 20px; | ||||
|   overflow-y: auto; | ||||
|  | ||||
|   .w100 { | ||||
|     width: 100%; | ||||
|   } | ||||
|  | ||||
|   .item-top__left { | ||||
|     width: 100%; | ||||
|   } | ||||
|  | ||||
|   .nowrap { | ||||
|     width: 100%; | ||||
|     text-overflow: ellipsis; | ||||
|     white-space: nowrap; | ||||
|     overflow: hidden; | ||||
|   } | ||||
|  | ||||
|   .title { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: space-between; | ||||
|     height: 56px; | ||||
|  | ||||
|     h2 { | ||||
|       color: #222222; | ||||
|       font-size: 16px; | ||||
|       font-weight: 600; | ||||
|     } | ||||
|  | ||||
|     div { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       cursor: pointer; | ||||
|  | ||||
|       &:hover { | ||||
|         opacity: 0.6; | ||||
|       } | ||||
|  | ||||
|       span { | ||||
|         margin-right: 4px; | ||||
|         color: #999999; | ||||
|         font-size: 14px; | ||||
|       } | ||||
|  | ||||
|       img { | ||||
|         width: 16px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   * { | ||||
|     box-sizing: border-box; | ||||
|   } | ||||
|  | ||||
|   & > .top { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: space-between; | ||||
|     height: 152px; | ||||
|     margin: 20px 0; | ||||
|     padding: 0 40px 0 16px; | ||||
|     background: #FFFFFF; | ||||
|     box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15); | ||||
|     border-radius: 2px; | ||||
|  | ||||
|     .left { | ||||
|       display: flex; | ||||
|  | ||||
|       img { | ||||
|         width: 64px; | ||||
|         height: 64px; | ||||
|         margin-right: 16px; | ||||
|         border-radius: 50%; | ||||
|       } | ||||
|  | ||||
|       h2 { | ||||
|         font-size: 22px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
|         line-height: 30px; | ||||
|       } | ||||
|  | ||||
|       span { | ||||
|         color: #666666; | ||||
|         font-size: 14px; | ||||
|       } | ||||
|  | ||||
|       p { | ||||
|         margin: 0 0 8px; | ||||
|         color: #46669D; | ||||
|         font-size: 14px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .right { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|  | ||||
|       .right-item { | ||||
|         margin-right: 64px; | ||||
|         text-align: right; | ||||
|         cursor: pointer; | ||||
|  | ||||
|         &:last-child { | ||||
|           margin-right: 0; | ||||
|         } | ||||
|  | ||||
|         h2 { | ||||
|           font-size: 32px; | ||||
|           color: #222; | ||||
|         } | ||||
|  | ||||
|         .top { | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           margin-bottom: 12px; | ||||
|  | ||||
|           i { | ||||
|             width: 6px; | ||||
|             height: 6px; | ||||
|             margin-right: 8px; | ||||
|             border-radius: 50%; | ||||
|             background: #FA9D50; | ||||
|           } | ||||
|  | ||||
|           span { | ||||
|             color: #666666; | ||||
|             font-size: 16px; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .middle { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     margin-bottom: 20px; | ||||
|  | ||||
|     .left { | ||||
|       width: 480px; | ||||
|       height: 360px; | ||||
|       padding: 0 16px 16px; | ||||
|       overflow: hidden; | ||||
|       background: #FFFFFF; | ||||
|       box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15); | ||||
|       border-radius: 4px; | ||||
|  | ||||
|       .comment-item { | ||||
|         padding: 16px 0; | ||||
|         border-bottom: 1px solid #EEEEEE; | ||||
|  | ||||
|         &:first-child { | ||||
|           padding-top: 0; | ||||
|         } | ||||
|  | ||||
|         &:last-child { | ||||
|           border: none; | ||||
|         } | ||||
|  | ||||
|         h3 { | ||||
|           line-height: 1.2; | ||||
|           margin-bottom: 8px; | ||||
|           color: #333333; | ||||
|           font-size: 16px; | ||||
|           font-weight: normal; | ||||
|           overflow: hidden; | ||||
|           text-overflow: ellipsis; | ||||
|           white-space: nowrap; | ||||
|           cursor: pointer; | ||||
|  | ||||
|           &:hover { | ||||
|             color: #2266FF; | ||||
|             text-decoration: underline; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         div { | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|  | ||||
|           i { | ||||
|             color: #999999; | ||||
|             font-size: 14px; | ||||
|             font-style: normal; | ||||
|           } | ||||
|  | ||||
|           span { | ||||
|             height: 20px; | ||||
|             margin-right: 8px; | ||||
|             padding: 0 8px; | ||||
|             color: #2266FF; | ||||
|             font-size: 12px; | ||||
|             background: #E8EFFF; | ||||
|             border-radius: 4px; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .list { | ||||
|       height: calc(100% - 56px); | ||||
|       overflow-y: auto; | ||||
|     } | ||||
|  | ||||
|     .right { | ||||
|       flex: 1; | ||||
|       height: 360px; | ||||
|       margin-left: 20px; | ||||
|       padding: 0 16px 16px; | ||||
|       overflow: hidden; | ||||
|       background: #FFFFFF; | ||||
|       box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15); | ||||
|       border-radius: 4px; | ||||
|  | ||||
|       .dynamic-item { | ||||
|         display: flex; | ||||
|         padding: 16px 0; | ||||
|         border-bottom: 1px solid #EEEEEE; | ||||
|         overflow: hidden; | ||||
|         text-overflow: ellipsis; | ||||
|         white-space: nowrap; | ||||
|  | ||||
|         &:first-child { | ||||
|           padding-top: 0; | ||||
|         } | ||||
|  | ||||
|         &:last-child { | ||||
|           border: none; | ||||
|         } | ||||
|  | ||||
|         i { | ||||
|           position: relative; | ||||
|           top: 8px; | ||||
|           width: 8px; | ||||
|           height: 8px; | ||||
|           margin-right: 8px; | ||||
|           border-radius: 50%; | ||||
|           border: 2px solid #2266FF; | ||||
|         } | ||||
|  | ||||
|         .dynamic-item__right { | ||||
|           flex: 1; | ||||
|           overflow: hidden; | ||||
|           text-overflow: ellipsis; | ||||
|           white-space: nowrap; | ||||
|  | ||||
|           h3 { | ||||
|             color: #333; | ||||
|             font-size: 16px; | ||||
|             font-weight: 600; | ||||
|             margin-bottom: 8px; | ||||
|             cursor: pointer; | ||||
|             overflow: hidden; | ||||
|             text-overflow: ellipsis; | ||||
|             white-space: nowrap; | ||||
|  | ||||
|             &:hover { | ||||
|               color: #2266FF; | ||||
|               text-decoration: underline; | ||||
|             } | ||||
|           } | ||||
|  | ||||
|           p { | ||||
|             color: #999999; | ||||
|             font-size: 14px; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .bottom { | ||||
|     margin-bottom: 20px; | ||||
|     padding: 0 16px 20px; | ||||
|     background: #FFFFFF; | ||||
|     box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15); | ||||
|     border-radius: 4px; | ||||
|  | ||||
|     .list { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       flex-wrap: wrap; | ||||
|     } | ||||
|  | ||||
|     .item { | ||||
|       width: 372px; | ||||
|       height: 132px; | ||||
|       margin-bottom: 16px; | ||||
|       margin-right: 16px; | ||||
|       background: #FFFFFF; | ||||
|       box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.02); | ||||
|       border-radius: 12px; | ||||
|       border: 1px solid #EEEEEE; | ||||
|  | ||||
|       // &:nth-of-type(3n) { | ||||
|       //   margin-right: 0; | ||||
|       // } | ||||
|  | ||||
|       .item-bottom { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         height: 56px; | ||||
|  | ||||
|         .item-bottom__item { | ||||
|           display: flex; | ||||
|           position: relative; | ||||
|           align-items: center; | ||||
|           justify-content: center; | ||||
|           flex: 1; | ||||
|  | ||||
|           &:first-child::after { | ||||
|             position: absolute; | ||||
|             right: 0; | ||||
|             top: 50%; | ||||
|             z-index: 1; | ||||
|             width: 1px; | ||||
|             height: 24px; | ||||
|             background: #EEEEEE; | ||||
|             transform: translateY(-50%); | ||||
|             content: ' '; | ||||
|           } | ||||
|  | ||||
|           span { | ||||
|             margin-right: 12px; | ||||
|             color: #999999; | ||||
|             font-size: 14px; | ||||
|           } | ||||
|  | ||||
|           h3 { | ||||
|             color: #333333; | ||||
|             font-size: 16px; | ||||
|             font-weight: 600; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .item-top { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: space-between; | ||||
|         height: 76px; | ||||
|         padding: 0 16px; | ||||
|         border-bottom: 1px solid #EEEEEE; | ||||
|  | ||||
|         h2 { | ||||
|           margin-bottom: 8px; | ||||
|           color: #333333; | ||||
|           font-size: 17px; | ||||
|           font-weight: normal; | ||||
|         } | ||||
|  | ||||
|         p { | ||||
|           color: #999999; | ||||
|           font-size: 14px; | ||||
|         } | ||||
|  | ||||
|         img { | ||||
|           width: 60px; | ||||
|           height: 60px; | ||||
|           cursor: pointer; | ||||
|  | ||||
|           &:hover { | ||||
|             opacity: 0.6; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										
											BIN
										
									
								
								project/xiushan/apps/AppConsole/assets/qd.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								project/xiushan/apps/AppConsole/assets/qd.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 11 KiB | 
							
								
								
									
										
											BIN
										
									
								
								project/xiushan/apps/AppConsole/assets/right.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								project/xiushan/apps/AppConsole/assets/right.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 346 B | 
		Reference in New Issue
	
	Block a user