平昌党建首页,个人中心
This commit is contained in:
		@@ -72,7 +72,6 @@
 | 
			
		||||
<script>
 | 
			
		||||
import {mapActions, mapState} from 'vuex'
 | 
			
		||||
 | 
			
		||||
const navbarTitle = wx.getAccountInfoSync().miniProgram.appId == "wx41792b6cbf573dc0" ? "平昌党建" : "数字平昌"
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'AppHome',
 | 
			
		||||
  appName: "首页",
 | 
			
		||||
@@ -103,7 +102,7 @@ export default {
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onReady() {
 | 
			
		||||
    uni.setNavigationBarTitle({title: navbarTitle})
 | 
			
		||||
    uni.setNavigationBarTitle({title: '数字平昌'})
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.autoLogin().then(() => {
 | 
			
		||||
@@ -240,7 +239,7 @@ export default {
 | 
			
		||||
 | 
			
		||||
  onShareAppMessage() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: `欢迎使用${navbarTitle}~`,
 | 
			
		||||
      title: `欢迎使用数字平昌~`,
 | 
			
		||||
      path: `/pages/AppHome/AppHome`
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										353
									
								
								src/project/pingchang/AppMine/AppMine.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										353
									
								
								src/project/pingchang/AppMine/AppMine.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,353 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="header-bg">
 | 
			
		||||
      <div class="header-info">
 | 
			
		||||
        <div class="wrap" @click="handleLogin()">
 | 
			
		||||
          <div class="user-img-div">
 | 
			
		||||
            <img :src="user.avatarUrl" alt="" class="user-img" v-if="user.id && user.avatarUrl"/>
 | 
			
		||||
            <open-data type="userAvatarUrl" lang="zh_CN" class="user-img" v-else/>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="user-info">
 | 
			
		||||
            <div class="option">
 | 
			
		||||
              <template v-if="!user.id">
 | 
			
		||||
                <p>登录</p>
 | 
			
		||||
                <p>点击进行登录</p>
 | 
			
		||||
              </template>
 | 
			
		||||
              <template v-else>
 | 
			
		||||
                <p v-if="isApprove">{{ user.realName }}</p>
 | 
			
		||||
                <p v-else>{{ user.nickName }}</p>
 | 
			
		||||
                <p>{{ user.areaName || "" }}</p>
 | 
			
		||||
              </template>
 | 
			
		||||
            </div>
 | 
			
		||||
            <p class="info" v-if="user.id" @click.stop="$linkTo('./userInfo')">个人信息</p>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="approve">
 | 
			
		||||
      <img class="icon" src="https://cdn.cunwuyun.cn/wxmp/mine/approve.png" alt="">
 | 
			
		||||
      <div class="flex">
 | 
			
		||||
        <span class="cert" v-if="isApprove" v-text="approveLabel" @click="$linkTo('/mods/AppAuth/AppAuth')"/>
 | 
			
		||||
        <u-icon v-else name="arrow-right" color="#E7F2FF" size="28"
 | 
			
		||||
                :label="approveLabel" label-color="#E7F2FF" label-pos="left" @click="approve"/>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="list-wrap">
 | 
			
		||||
      <div class="card" v-for="(group,index) in listGroup" :key="index">
 | 
			
		||||
        <div class="item" v-for="(item) in group" hover-class="bg-hover" :key="item.label"
 | 
			
		||||
             @click="linkTo(item.path, item.type)">
 | 
			
		||||
          <div class="block">
 | 
			
		||||
            <img class="icon" :src="item.icon" alt="">
 | 
			
		||||
          </div>
 | 
			
		||||
          <span class="desc" v-if="!item.share">{{ item.label }}</span>
 | 
			
		||||
          <button open-type="share" v-else>
 | 
			
		||||
            <span>{{ item.label }}</span>
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <AiLogin ref="login" @success="getAuth()"/>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import {mapActions, mapState} from "vuex";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AppMine",
 | 
			
		||||
  appName: "我的",
 | 
			
		||||
  customNavigation: true,
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user', 'token']),
 | 
			
		||||
    isApprove() {
 | 
			
		||||
      return this.user?.status == 2;
 | 
			
		||||
    },
 | 
			
		||||
    approveLabel() {
 | 
			
		||||
      return this.user?.status == 2 ? "已认证" :
 | 
			
		||||
          this.user?.status == 1 ? "审核中" :
 | 
			
		||||
              this.user?.status == -1 ? "审核驳回" : "前往认证"
 | 
			
		||||
    },
 | 
			
		||||
    listGroup() {
 | 
			
		||||
      return [
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            icon: "https://cdn.cunwuyun.cn/wxmp/mine/wodejiating.png",
 | 
			
		||||
            label: "我的家庭",
 | 
			
		||||
            path: "./myFamily",
 | 
			
		||||
            type: 'idNumber'
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            icon: "https://cdn.cunwuyun.cn/wxmp/mine/wodejiaxiang.png",
 | 
			
		||||
            label: "我的家乡",
 | 
			
		||||
            path: "/mods/AppHometown/AppHometown",
 | 
			
		||||
            type: 'token'
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            icon: "https://cdn.cunwuyun.cn/wxmp/mine/wodejifen.png",
 | 
			
		||||
            label: "我的积分",
 | 
			
		||||
            path: "/mods/AppCreditPoints/AppCreditPoints?type=detail",
 | 
			
		||||
            type: 'idNumber'
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            icon: "https://cdn.cunwuyun.cn/wxmp/mine/chaoshidingdan.png",
 | 
			
		||||
            label: "超市订单",
 | 
			
		||||
            path: "/mods/AppOrderList/AppOrderList",
 | 
			
		||||
            type: 'idNumber'
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            icon: "https://cdn.cunwuyun.cn/wxmp/mine/banshijindu.png",
 | 
			
		||||
            label: "办事进度",
 | 
			
		||||
            path: "/mods/AppMyPlan/AppMyPlan",
 | 
			
		||||
            type: 'idNumber'
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    ...mapActions(['getUserInfo']),
 | 
			
		||||
    approve() {
 | 
			
		||||
      if (!this.token) {
 | 
			
		||||
        this.$refs.login.show();
 | 
			
		||||
      } else if (!this.isApprove) {
 | 
			
		||||
        if (this.user.status == 0) {
 | 
			
		||||
          this.$linkTo('/mods/AppAuth/AppAuth');
 | 
			
		||||
        } else {
 | 
			
		||||
          this.$linkTo('/mods/AppAuth/authSuccess')
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    linkTo(url, type) {
 | 
			
		||||
      if (type) {
 | 
			
		||||
        if (this.token) {
 | 
			
		||||
          if (type == 'token') {
 | 
			
		||||
            this.$linkTo(url)
 | 
			
		||||
          }
 | 
			
		||||
          if (type == 'idNumber') {
 | 
			
		||||
            if (this.user.status == 0) {
 | 
			
		||||
              if (!this.user.phone) {
 | 
			
		||||
                this.$linkTo('/pages/phone/bingPhoneNumber?from=auth')
 | 
			
		||||
              } else {
 | 
			
		||||
                this.$linkTo('/mods/AppAuth/AppAuth')
 | 
			
		||||
              }
 | 
			
		||||
            } else {
 | 
			
		||||
              this.$linkTo(url)
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          this.$refs.login.show()
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$linkTo(url)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    handleLogin() {
 | 
			
		||||
      if (!this.token) {
 | 
			
		||||
        this.$refs.login.show();
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    getAuth() {
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.token && this.getUserInfo()
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onShow() {
 | 
			
		||||
    this.getAuth();
 | 
			
		||||
  },
 | 
			
		||||
  onShareAppMessage() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: '欢迎使用数字乡村治理服务一体化平台~',
 | 
			
		||||
      path: `/pages/AppModules/AppModules`
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "~dvcp-wui/common";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  min-height: 100%;
 | 
			
		||||
  background-color: #F3F6F9;
 | 
			
		||||
  position: relative;
 | 
			
		||||
 | 
			
		||||
  .header-bg {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 512px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
 | 
			
		||||
    .header-info {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      background: url("https://cdn.cunwuyun.cn/wxmp/sanjianxi/mineBg.png") no-repeat no-repeat;
 | 
			
		||||
      background-size: 100% 100%;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      padding: 240px 0 0 48px;
 | 
			
		||||
 | 
			
		||||
      .wrap {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        height: 96px;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        .user-img-div {
 | 
			
		||||
          display: inline-block;
 | 
			
		||||
          width: 96px;
 | 
			
		||||
          height: 96px;
 | 
			
		||||
          border-radius: 50%;
 | 
			
		||||
          overflow: hidden;
 | 
			
		||||
          border: 4px solid #FFFFFF;
 | 
			
		||||
          flex-shrink: 0;
 | 
			
		||||
 | 
			
		||||
          .user-img {
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
            width: 96px;
 | 
			
		||||
            height: 96px;
 | 
			
		||||
            border-radius: 58px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-info {
 | 
			
		||||
          flex: 1;
 | 
			
		||||
          display: flex;
 | 
			
		||||
          align-items: center;
 | 
			
		||||
          justify-content: space-between;
 | 
			
		||||
          margin-left: 26px;
 | 
			
		||||
          box-sizing: border-box;
 | 
			
		||||
          padding-right: 32px;
 | 
			
		||||
 | 
			
		||||
          .option {
 | 
			
		||||
            & > p:first-child {
 | 
			
		||||
              font-size: 34px;
 | 
			
		||||
              font-weight: 600;
 | 
			
		||||
              color: #333333;
 | 
			
		||||
              line-height: 54px;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            & > p:last-child {
 | 
			
		||||
              font-size: 26px;
 | 
			
		||||
              font-weight: 400;
 | 
			
		||||
              color: #7088A0;
 | 
			
		||||
              line-height: 36px;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          .info {
 | 
			
		||||
            width: 136px;
 | 
			
		||||
            height: 48px;
 | 
			
		||||
            border-radius: 8px;
 | 
			
		||||
            border: 2px solid #7088A0;
 | 
			
		||||
            font-size: 26px;
 | 
			
		||||
            font-weight: 400;
 | 
			
		||||
            color: #7088A0;
 | 
			
		||||
            display: flex;
 | 
			
		||||
            align-items: center;
 | 
			
		||||
            justify-content: center;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .approve {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    left: 50%;
 | 
			
		||||
    top: 400px;
 | 
			
		||||
    transform: translateX(-50%);
 | 
			
		||||
    width: 686px;
 | 
			
		||||
    height: 112px;
 | 
			
		||||
    background: linear-gradient(90deg, #8FB4FF 0%, #4181FF 100%);
 | 
			
		||||
    border-radius: 16px;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    padding: 0 20px;
 | 
			
		||||
 | 
			
		||||
    .icon {
 | 
			
		||||
      width: 296px;
 | 
			
		||||
      height: 52px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .cert {
 | 
			
		||||
      font-family: PingFangSC-Regular, PingFang SC;
 | 
			
		||||
      font-size: 28px;
 | 
			
		||||
      color: #E7F2FF;
 | 
			
		||||
      margin-right: 4px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .list-wrap {
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    padding: 32px;
 | 
			
		||||
 | 
			
		||||
    .card {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      min-height: 100px;
 | 
			
		||||
      border-radius: 16px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
      margin-bottom: 32px;
 | 
			
		||||
 | 
			
		||||
      .item {
 | 
			
		||||
        height: 100px;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
 | 
			
		||||
        &:last-child {
 | 
			
		||||
          .desc {
 | 
			
		||||
            border-bottom: none !important;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .block {
 | 
			
		||||
          width: 80px;
 | 
			
		||||
          height: 100%;
 | 
			
		||||
          display: flex;
 | 
			
		||||
          align-items: center;
 | 
			
		||||
          justify-content: center;
 | 
			
		||||
          flex-shrink: 0;
 | 
			
		||||
 | 
			
		||||
          .icon {
 | 
			
		||||
            width: 44px;
 | 
			
		||||
            height: 44px;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .desc, & > button {
 | 
			
		||||
          height: 100%;
 | 
			
		||||
          flex: 1;
 | 
			
		||||
          font-size: 30px;
 | 
			
		||||
          font-weight: 400;
 | 
			
		||||
          color: #666666;
 | 
			
		||||
          display: flex;
 | 
			
		||||
          align-items: center;
 | 
			
		||||
          border-bottom: 1px solid #EEEEEE;
 | 
			
		||||
 | 
			
		||||
          & > span {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
            height: 100%;
 | 
			
		||||
            text-align: left;
 | 
			
		||||
            display: flex;
 | 
			
		||||
            align-items: center;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          &::after {
 | 
			
		||||
            border: none;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .no-border {
 | 
			
		||||
          border-bottom: none;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      &:first-of-type {
 | 
			
		||||
        margin-bottom: 32px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								src/project/pingchang/AppMine/me.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/pingchang/AppMine/me.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 993 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/project/pingchang/AppMine/me_selected.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/pingchang/AppMine/me_selected.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.0 KiB  | 
							
								
								
									
										180
									
								
								src/project/pingchang/AppMine/myFamily.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								src/project/pingchang/AppMine/myFamily.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,180 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="credit-points">
 | 
			
		||||
      <div class="bg-blue"></div>
 | 
			
		||||
      <div class="header-content">
 | 
			
		||||
        <div class="title">家庭地址</div>
 | 
			
		||||
        <div class="address">
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/img/location-blue.svg" alt="">
 | 
			
		||||
          <p>{{ info.resident.currentAreaName || '' }}{{ info.resident.currentAddress || '' }}</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="list-content">
 | 
			
		||||
        <div class="title">家庭成员</div>
 | 
			
		||||
        <div class="item" v-for="(item, index) in info.family" :key="index">
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/dvcp/myFamily/1.png" alt="" class="banner-top" v-if="item.sex == 1">
 | 
			
		||||
          <img src="https://cdn.cunwuyun.cn/dvcp/myFamily/2.png" alt="" class="banner-top" v-else>
 | 
			
		||||
          <div class="user-img">
 | 
			
		||||
            <img v-if="item.photo" :src="item.photo" alt=""/>
 | 
			
		||||
            <img v-else src="https://cdn.cunwuyun.cn/dvcp/myFamily/tx.png" alt=""/>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="user-info">
 | 
			
		||||
            <p>{{ item.name }}</p>
 | 
			
		||||
            <div v-if="item.householdName == 1" class="color-5AAD6A">户主</div>
 | 
			
		||||
            <div v-else>{{ $dict.getLabel('householdRelation', item.householdRelation) }}</div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import {mapState} from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  appName: "我的家庭",
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user', 'token'])
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      info: {}
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.$dict.load('householdRelation').then(() => {
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.getUser()
 | 
			
		||||
      })
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getUser() {
 | 
			
		||||
      this.$instance.post(`/app/appresident/detailForWx?id=${this.user.residentId}`).then(res => {
 | 
			
		||||
        if (res.code === 0) {
 | 
			
		||||
          this.info = res.data
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "~dvcp-wui/common";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-color: #f3f6f9;
 | 
			
		||||
 | 
			
		||||
  .credit-points {
 | 
			
		||||
    .bg-blue {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 112px;
 | 
			
		||||
      background-color: #197DF0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .header-content {
 | 
			
		||||
      width: 690px;
 | 
			
		||||
      background: #FFF;
 | 
			
		||||
      border-radius: 16px;
 | 
			
		||||
      margin: -80px 0 32px 30px;
 | 
			
		||||
      padding: 0 30px 80px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.02);
 | 
			
		||||
 | 
			
		||||
      .address {
 | 
			
		||||
        font-size: 32px;
 | 
			
		||||
        color: #666;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
 | 
			
		||||
        img {
 | 
			
		||||
          width: 34px;
 | 
			
		||||
          height: 38px;
 | 
			
		||||
          margin-right: 14px;
 | 
			
		||||
          vertical-align: middle;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        p {
 | 
			
		||||
          line-height: 44px;
 | 
			
		||||
          width: 580px;
 | 
			
		||||
          word-break: break-all;
 | 
			
		||||
          float: right;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .title {
 | 
			
		||||
      font-size: 32px;
 | 
			
		||||
      font-weight: 500;
 | 
			
		||||
      color: #333;
 | 
			
		||||
      line-height: 120px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .list-content {
 | 
			
		||||
      width: 690px;
 | 
			
		||||
      background: #FFF;
 | 
			
		||||
      border-radius: 16px;
 | 
			
		||||
      padding: 0 30px 110px;
 | 
			
		||||
      box-sizing: border-box;
 | 
			
		||||
      margin-left: 30px;
 | 
			
		||||
      box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.02);
 | 
			
		||||
 | 
			
		||||
      .item {
 | 
			
		||||
        width: 630px;
 | 
			
		||||
        height: 192px;
 | 
			
		||||
        background: #FFF;
 | 
			
		||||
        box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.08);
 | 
			
		||||
        border-radius: 16px;
 | 
			
		||||
        padding-left: 30px;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
        margin-bottom: 32px;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
 | 
			
		||||
        .banner-top {
 | 
			
		||||
          width: 100%;
 | 
			
		||||
          height: 72px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-img {
 | 
			
		||||
          width: 104px;
 | 
			
		||||
          height: 104px;
 | 
			
		||||
          margin: -16px 34px 0 0;
 | 
			
		||||
          border-radius: 50%;
 | 
			
		||||
          float: left;
 | 
			
		||||
 | 
			
		||||
          img {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
            height: 100%;
 | 
			
		||||
            border-radius: 50%;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-info {
 | 
			
		||||
          margin-top: -16px;
 | 
			
		||||
          width: calc(100% - 138px);
 | 
			
		||||
          float: right;
 | 
			
		||||
 | 
			
		||||
          p {
 | 
			
		||||
            font-size: 32px;
 | 
			
		||||
            font-weight: 600;
 | 
			
		||||
            color: #333;
 | 
			
		||||
            line-height: 44px;
 | 
			
		||||
            margin-bottom: 8px;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          div {
 | 
			
		||||
            font-size: 26px;
 | 
			
		||||
            font-weight: 400;
 | 
			
		||||
            color: #666;
 | 
			
		||||
            line-height: 36px;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          .color-5AAD6A {
 | 
			
		||||
            color: #5AAD6A;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										222
									
								
								src/project/pingchang/AppMine/userInfo.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										222
									
								
								src/project/pingchang/AppMine/userInfo.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,222 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="page">
 | 
			
		||||
    <div class="info-list">
 | 
			
		||||
      <div class="item-content mar-b8">
 | 
			
		||||
        <div class="item solid">
 | 
			
		||||
          <p class="mar-t22">头像</p>
 | 
			
		||||
          <button class="user-img-div" open-type="chooseAvatar" @chooseavatar="handleWeixinSync">
 | 
			
		||||
            <img :src="user.avatarUrl" class="user-img">
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="item">
 | 
			
		||||
          <p>用户昵称</p>
 | 
			
		||||
          <div v-if="!editNickName" @click="editNickName=true">
 | 
			
		||||
            <p class="name" v-text="nickName"/>
 | 
			
		||||
          </div>
 | 
			
		||||
          <input v-else type="nickname" class="editNickName" v-model="nickName" @blur="handleWeixinSync">
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-content mar-b8">
 | 
			
		||||
        <div class="item">
 | 
			
		||||
          <p>手机号</p>
 | 
			
		||||
          <div>{{ user.phone || '' }}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="item-content" @click="onLogout">
 | 
			
		||||
        <div class="item">
 | 
			
		||||
          <p class="login-out">退出登录</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import {mapActions, mapState} from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "userInfo",
 | 
			
		||||
  appName: "个人中心",
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState(['user', 'token']),
 | 
			
		||||
    nickName: {
 | 
			
		||||
      set(v) {
 | 
			
		||||
      },
 | 
			
		||||
      get() {
 | 
			
		||||
        const {nickName} = this.user
 | 
			
		||||
        return nickName
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  onLoad() {
 | 
			
		||||
    this.getUserInfo()
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      editNickName: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    ...mapActions(['getUserInfo', 'autoLogin']),
 | 
			
		||||
    upLoad(img) {
 | 
			
		||||
      return new Promise((resolve, reject) => {
 | 
			
		||||
        uni.uploadFile({
 | 
			
		||||
          url: `${this.$instance.defaults.baseURL}/admin/file/add`,
 | 
			
		||||
          filePath: img,
 | 
			
		||||
          name: 'file',
 | 
			
		||||
          header: {
 | 
			
		||||
            'Content-Type': 'multipart/form-data',
 | 
			
		||||
            Authorization: uni.getStorageSync('token')
 | 
			
		||||
          },
 | 
			
		||||
          success: uploadFileRes => {
 | 
			
		||||
            resolve(uploadFileRes)
 | 
			
		||||
          },
 | 
			
		||||
          fail: err => {
 | 
			
		||||
            reject(err)
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    onLogout() {
 | 
			
		||||
      uni.showModal({
 | 
			
		||||
        title: '提示',
 | 
			
		||||
        content: "是否要退出登录",
 | 
			
		||||
        success: res => {
 | 
			
		||||
          if (res.confirm) {
 | 
			
		||||
            this.$store.commit('logout')
 | 
			
		||||
            this.$toast('退出成功');
 | 
			
		||||
            setTimeout(() => {
 | 
			
		||||
              uni.switchTab({
 | 
			
		||||
                url: '/pages/AppMine/AppMine'
 | 
			
		||||
              })
 | 
			
		||||
            }, 500)
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    handleWeixinSync({detail}) {
 | 
			
		||||
      const {value: nickName, avatarUrl} = detail
 | 
			
		||||
      this.autoLogin({nickName, avatarUrl})
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
@import "~dvcp-wui/common";
 | 
			
		||||
 | 
			
		||||
.page {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-color: #F5F5F5;
 | 
			
		||||
 | 
			
		||||
  .info-list {
 | 
			
		||||
    margin: 0 0 16px 0;
 | 
			
		||||
 | 
			
		||||
    .item-content {
 | 
			
		||||
      padding: 0 32px;
 | 
			
		||||
      background-color: #fff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .item {
 | 
			
		||||
      padding: 36px 0;
 | 
			
		||||
      line-height: 40px;
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      box-sizing: content-box;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
      p {
 | 
			
		||||
        color: #333;
 | 
			
		||||
        font-weight: 400;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      div {
 | 
			
		||||
        color: #666;
 | 
			
		||||
        font-size: 28px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .user-img-div {
 | 
			
		||||
        width: 104px;
 | 
			
		||||
        height: 104px;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .user-img {
 | 
			
		||||
        width: 104px;
 | 
			
		||||
        height: 104px;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
        border-radius: 50%;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .right-icon {
 | 
			
		||||
        width: 40px;
 | 
			
		||||
        height: 40px;
 | 
			
		||||
        vertical-align: middle;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .mar-t22 {
 | 
			
		||||
        margin-top: 44px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .login-out {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      font-size: 30px;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .self-knowledge-show {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    z-index: 100;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    background: rgba(0, 0, 0, 0.3);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .toast-bg {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    z-index: 101;
 | 
			
		||||
    top: 50%;
 | 
			
		||||
    left: 50%;
 | 
			
		||||
    transform: translate(-50%, -50%);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .toast {
 | 
			
		||||
    background-color: #fff;
 | 
			
		||||
    width: 686px;
 | 
			
		||||
    height: 316px;
 | 
			
		||||
    font-size: 36px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .toast-msg {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    line-height: 50px;
 | 
			
		||||
    color: #333;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
    padding: 84px 0 80px 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .toast-btn {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    width: 120px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    line-height: 50px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .cancel {
 | 
			
		||||
    margin-left: 394px;
 | 
			
		||||
    margin-right: 40px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .confirm {
 | 
			
		||||
    color: #197DF0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .editNickName {
 | 
			
		||||
    text-align: right;
 | 
			
		||||
    font-size: 28px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										491
									
								
								src/project/pingchang/AppPartyHome/AppPartyHome.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										491
									
								
								src/project/pingchang/AppPartyHome/AppPartyHome.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: 'AppPartyHome',
 | 
			
		||||
  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: '平昌党建'})
 | 
			
		||||
  },
 | 
			
		||||
  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/pingchang/AppPartyHome/home.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/pingchang/AppPartyHome/home.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 965 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/project/pingchang/AppPartyHome/home_selected.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/project/pingchang/AppPartyHome/home_selected.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1000 B  | 
@@ -32,7 +32,7 @@
 | 
			
		||||
                :label="approveLabel" label-color="#E7F2FF" label-pos="left" @click="approve"/>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="list-wrap">
 | 
			
		||||
    <!-- <div class="list-wrap">
 | 
			
		||||
      <div class="card" v-for="(group,index) in listGroup" :key="index">
 | 
			
		||||
        <div class="item" v-for="(item) in group" hover-class="bg-hover" :key="item.label"
 | 
			
		||||
             @click="linkTo(item.path, item.type)">
 | 
			
		||||
@@ -45,7 +45,7 @@
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    </div> -->
 | 
			
		||||
    <AiLogin ref="login" @success="getAuth()"/>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
@@ -158,8 +158,8 @@ export default {
 | 
			
		||||
  },
 | 
			
		||||
  onShareAppMessage() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: '欢迎使用数字乡村治理服务一体化平台~',
 | 
			
		||||
      path: `/pages/AppModules/AppModules`
 | 
			
		||||
      title: `欢迎使用数字平昌~`,
 | 
			
		||||
      path: `/pages/AppHome/AppHome`
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user