如洲 陈
2 天以前 900e4776223c2a42d8859fc8cd635c13ffcfb3b5
pages/BasePages/main.vue
@@ -1,164 +1,274 @@
<template>
  <uni-base-page :footer="false">
    <view slot="page">
      <view v-if="loginInfo.hasLogin">
        <!-- 教学视频、公司内部宣传图片等 -->
        <swiper indicator-dots="true" :autoplay="true" :interval="3000">
          <swiper-item v-for="(img,key) in imgUrls" :key="key">
            <image :src="img"/>
          </swiper-item>
        </swiper>
        <!-- 通报批评、消息预警、公告、报告 -->
        <uni-notice-bar :show-icon="true" :scrollable="true" :speed="30" :single="true"
                        text="通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,"/>
        <!-- 用户系统菜单模块 -->
        <view class="example-body">
          <uni-grid :column="col" :showBorder="true">
            <uni-grid-item v-for="(item, index) in userMenu" :index="index" :key="index">
              <navigator navigateTo class="grid-item-box" hover-class="none"
                         :url="`../${item.path}`">
                <image v-if="item.icoimg" class="imgMenu" :src="`${item.icoimg}`" ></image>
                <image v-else class="imgMenu" src="/static/img/imgMenu/APP01.png" ></image>
                <uni-notice-bar v-if="item.pagE_VIEW.length>6" :speed="30"
                                style="padding:0;margin-bottom:0;font-weight: 900;" textSize="13px"
                                background-color="#ffffff" color="#000000" :scrollable="item.pagE_VIEW.length>6"
                                :single="true" :text="item.pagE_VIEW"/>
                <text v-else class="text">{{ item.pagE_VIEW }}</text>
              </navigator>
            </uni-grid-item>
          </uni-grid>
        </view>
      </view>
      <view v-if="!loginInfo.hasLogin">
        <view class="title">
          您好 游客。
        </view>
        <view class="ul">
          <view>这是 XXMES 首页。</view>
          <view>在 “我的” 中点击 “登录” 可以 “登录您的账户”</view>
        </view>
      </view>
    </view>
  </uni-base-page>
   <uni-base-page :footer="false">
      <view slot="page">
         <view v-if="loginInfo.hasLogin">
            <!-- 教学视频、公司内部宣传图片等 -->
            <swiper indicator-dots="true" :autoplay="true" :interval="3000">
               <swiper-item v-for="(img,key) in imgUrls" :key="key">
                  <image :src="img" />
               </swiper-item>
            </swiper>
            <!-- 通报批评、消息预警、公告、报告 -->
            <uni-notice-bar :show-icon="true" :scrollable="true" :speed="30" :single="true"
               text="通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息,通报批评,消息预警,公告/报告,提示消息," />
            <!-- 用户系统菜单模块 -->
            <view class="example-body">
               <uni-grid :column="col" :showBorder="true">
                  <uni-grid-item v-for="(item, index) in userMenu" :index="index" :key="index">
                     <navigator navigateTo class="grid-item-box" hover-class="none" :url="`../${item.path}`">
                        <image v-if="item.icoimg" class="imgMenu" :src="`${item.icoimg}`"></image>
                        <image v-else class="imgMenu" src="/static/img/imgMenu/APP01.png"></image>
               <uni-notice-bar v-if="item.pagE_VIEW && item.pagE_VIEW.length>6" :speed="30"
                           style="padding:0;margin-bottom:0;font-weight: 900;" textSize="13px"
                        background-color="#ffffff" color="#000000" :scrollable="item.pagE_VIEW && item.pagE_VIEW.length>6"
                        :single="true" :text="item.pagE_VIEW || ''" />
                        <text v-else class="text">{{ item.pagE_VIEW || '' }}</text>
                     </navigator>
                  </uni-grid-item>
               </uni-grid>
            </view>
         </view>
         <view v-if="!loginInfo.hasLogin">
            <view class="title">
               您好 游客。
            </view>
            <view class="ul">
               <view>这是 XXMES 首页。</view>
               <view>在 “我的” 中点击 “登录” 可以 “登录您的账户”</view>
            </view>
         </view>
      </view>
   </uni-base-page>
</template>
<script>
export default {
  data() {
    return {
      loginInfo: this.$loginInfo,
      color: this.$defaultColor,
      userMenu: [],
      imgUrls: [
        "../../static/img/SN-GG.png",
        "../../static/img/SN-GG1.png"
      ],
      col: 4, //菜单列数
    };
  },
  methods: {
    getMenu(isShowMask) {
      if (isShowMask) uni.showLoading({
        mask: true,
        title: "加载中..."
      });
      this.$getUserMenu({
        type: 'sys',
        programId: this.loginInfo.sysNumber,
        success: (res) => {
          this.userMenu = res;
          uni.stopPullDownRefresh();
        },
        fail: (err) => {
   export default {
      data() {
         return {
            loginInfo: this.$loginInfo,
            color: this.$defaultColor,
            userMenu: [],
            imgUrls: [
               "../../static/img/SN-GG.png",
               "../../static/img/SN-GG1.png"
            ],
            col: 4, //菜单列数
            updateChecked: false,
            msg: "",
         };
      },
      methods: {
         getMenu(isShowMask) {
            if (isShowMask) uni.showLoading({
               mask: true,
               title: "加载中..."
            });
            this.$getUserMenu({
               type: 'sys',
               programId: this.loginInfo.sysNumber,
               success: (res) => {
                  this.userMenu = res;
                  uni.stopPullDownRefresh();
               },
               fail: (err) => {
        },
        complete() {
          if (isShowMask) uni.hideLoading();
        }
      });
    }
  },
  onLoad() {
    if (!this.loginInfo.hasLogin) {
      uni.showModal({
        title: '未登录',
        content: '您未登录,需要登录后才能继续',
        /**
         * 如果需要强制登录,不显示取消按钮
         */
        showCancel: !this.loginInfo.forcedLogin,
        success: (res) => {
          if (res.confirm) {
            /**
             * 如果需要强制登录,使用reLaunch方式
             */
            if (this.loginInfo.forcedLogin) {
              uni.reLaunch({
                url: 'login'
              });
            } else {
              uni.navigateTo({
                url: 'login'
              });
            }
          }
        }
      });
    } else {
      this.getMenu(true);
    }
               },
               complete() {
                  if (isShowMask) uni.hideLoading();
               }
            });
         },
         getIsMsg() {
            this.$post({
               url: "/MessageCenter/IsShow",
               data: {
                  createBy: this.$loginInfo.account,
                  isShow: 1,
               },
            }).then(res => {
               if (res.data.tbBillList > 0) {
                  this.msg = "您有新的异常待处理/您有新的异常待处理";
                  //展示图标
                  uni.showTabBarRedDot({
                     index: 1
                  });
               } else {
                  this.msg = "宁波广深科技有限公司";
                  //展示图标
                  uni.hideTabBarRedDot({
                     index: 1
                  });
               }
            })
         },
         checkForUpdate() {
            if (this.updateChecked) return;
            if (!this.$post || typeof this.$post !== 'function') return;
            this.$post({
               url: "/Login/getAppUpgradeInfo",
               data: {}
            }).then(res => {
               const newVersion = res && res.data ? res.data.version : null;
               const sysInfo = uni.getSystemInfoSync();
               const currentVersion = sysInfo && sysInfo.appVersion ? sysInfo.appVersion : null;
               if (!newVersion || !currentVersion) {
                  this.updateChecked = true;
                  return; // 非 APP 端或缺少版本信息时跳过
               }
               // 简单比较,不处理复杂语义版本
               if (String(newVersion) !== String(currentVersion)) {
                  uni.showModal({
                     title: "发现新版本",
                     content: "是否下载最新版本?",
                     success: (modalRes) => {
                        if (modalRes.confirm) {
                           this.downloadNewApk(res.data.apkUrl);
                        }
                     }
                  });
                  this.updateChecked = true;
               }
            }).catch(err => {
               console.error('getAppUpgradeInfo error:', err);
               this.updateChecked = true;
            })
         },
                  downloadNewApk(apkUrl) {
                     if (typeof plus === "undefined" || !plus.runtime) {
                        uni.showToast({
                           title: "仅支持在APP内更新",
                           icon: "none",
                           duration: 2000
                        });
                        return;
                     }
                     uni.showToast({
                        title: "开始下载更新...",
                        icon: "none",
                        duration: 2000
                     });
                     uni.downloadFile({
                        url: apkUrl,
                        success: (res) => {
                           if (res.statusCode === 200) {
                              plus.runtime.install(res.tempFilePath, {
                                 force: true
                              }, function() {
                                 console.log("安装成功,重启应用");
                                 //plus.runtime.restart();
                                 //plus.runtime.quit();
                                 // uni.navigateBack()
                              }, function(e) {
                                 console.error("安装失败:", e);
                              });
                           }
                        },
                        fail: (err) => {
                           console.error("下载失败:", err);
                           uni.showToast({
                              title: "下载失败,请检查网络",
                              icon: "none",
                              duration: 2000
                           });
                        }
                     });
                  }
      },
      onLoad() {
         if (!this.loginInfo.hasLogin) {
            uni.showModal({
               title: '未登录',
               content: '您未登录,需要登录后才能继续',
               /**
                * 如果需要强制登录,不显示取消按钮
                */
               showCancel: !this.loginInfo.forcedLogin,
               success: (res) => {
                  if (res.confirm) {
                     /**
                      * 如果需要强制登录,使用reLaunch方式
                      */
                     if (this.loginInfo.forcedLogin) {
                        uni.reLaunch({
                           url: 'login'
                        });
                     } else {
                        uni.navigateTo({
                           url: 'login'
                        });
                     }
                  }
               }
            });
         } else {
            this.getMenu(true);
            // 检查应用更新(仅 APP 端)
            if (typeof plus !== "undefined") {
               this.checkForUpdate();
            }
         }
  },
  onPullDownRefresh() {
    if (this.loginInfo.hasLogin)
      this.getMenu(true);
  },
}
      },
      onPullDownRefresh() {
         if (this.loginInfo.hasLogin) {
            this.getMenu(true);
            // 下拉刷新时也检查更新(仅 APP 端)
            if (typeof plus !== "undefined") {
               this.checkForUpdate();
            }
         }
      },
   }
</script>
<style>
.text {
  /* color: #ffffff; */
  /* font-size: 15px; */
  font-weight: 900;
}
   .text {
      /* color: #ffffff; */
      /* font-size: 15px; */
      font-weight: 900;
   }
.example-body {
  flex-direction: row;
  flex-wrap: wrap;
  justify-content: center;
  padding: 0;
  font-size: 14px;
  /* background-color: #ffffff; */
}
   .example-body {
      flex-direction: row;
      flex-wrap: wrap;
      justify-content: center;
      padding: 0;
      font-size: 14px;
      /* background-color: #ffffff; */
   }
.grid-item-box {
  flex: 1;
  /* position: relative;*/
  /* #ifndef APP-NVUE */
  display: flex;
  /* #endif */
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 5px 0;
}
   .grid-item-box {
      flex: 1;
      /* position: relative;*/
      /* #ifndef APP-NVUE */
      display: flex;
      /* #endif */
      flex-direction: column;
      align-items: center;
      justify-content: center;
      padding: 5px 0;
   }
.imgMenu {
  width: 100rpx;
  height: 100rpx;
}
   .imgMenu {
      width: 100rpx;
      height: 100rpx;
   }
image,
swiper,
.img-view {
  width: 100%;
  height: 350rpx;
  margin-bottom: 10rpx;
}
   image,
   swiper,
   .img-view {
      width: 100%;
      height: 350rpx;
      margin-bottom: 10rpx;
   }
.example-body {
  flex-direction: row;
  justify-content: flex-start;
}
   .example-body {
      flex-direction: row;
      justify-content: flex-start;
   }
</style>