增加 常用服务查询及修改

This commit is contained in:
xuli3099
2025-08-01 18:12:36 +08:00
parent 909187a569
commit 540f513e82
16 changed files with 735 additions and 125 deletions

View File

@@ -107,19 +107,60 @@ app.post('/api/search', (req,res) => {
}))
});
// 查询业务列表
app.post('/api/businessList', (req,res) => {
res.json(Mock.mock({
code: 0,
data: {
list:[
{bizId:1,bizName:'企业日常',children:[
{bizId:11,bizName:'任务计划',icon:'static/images/business/icon-rwjh.png',status:1,isDaily:true},
{bizId:12,bizName:'日报',icon:'static/images/business/icon-rb.png',status:1,isDaily:true},
{bizId:13,bizName:'设备管理',icon:'static/images/business/icon-sbgl.png',status:1},
{bizId:14,bizName:'绩效管理',icon:'static/images/business/icon-jxgl.png',status:1},
{bizId:15,bizName:'公章申请',icon:'static/images/business/icon-gzsq.png',status:1,isDaily:true},
{bizId:16,bizName:'会议室预约',icon:'static/images/business/icon-hysyy.png',status:1,isDaily:true},
{bizId:17,bizName:'报修',icon:'static/images/business/icon-bx.png',status:1}
]},
{bizId:2,bizName:'CRM系统',children:[
{bizId:21,bizName:'走访报告',icon:'static/images/business/demo.png',bizUrl:'/pages/business/CRM/visitorReport',status:true},
{bizId:101,bizName:'走访报告',icon:'static/images/business/icon-zfbg.png',status:1},
{bizId:102,bizName:'走访查看',icon:'static/images/business/icon-zfck.png',status:1,isDaily:true},
{bizId:103,bizName:'走访审批',icon:'static/images/business/icon-zfsp.png',status:1},
{bizId:104,bizName:'计划查看',icon:'static/images/business/icon-jhck.png',status:1},
{bizId:105,bizName:'签到打卡',icon:'static/images/business/icon-qddk.png',status:1},
{bizId:106,bizName:'打卡信息',icon:'static/images/business/icon-dkxx.png',status:1},
{bizId:107,bizName:'打卡统计',icon:'static/images/business/icon-dktj.png',status:1},
{bizId:108,bizName:'人员新增',icon:'static/images/business/icon-ryxz.png',status:1},
{bizId:109,bizName:'信息查看',icon:'static/images/business/icon-xxck.png',status:1,isDaily:true},
{bizId:1010,bizName:'信息审核',icon:'static/images/business/xxsh.png',badgeCount:5,status:1,isDaily:true},
{bizId:1011,bizName:'信息统计',icon:'static/images/business/icon-xxtj.png',status:1},
{bizId:1012,bizName:'回款查看',icon:'static/images/business/icon-hkck.png',status:1},
{bizId:1013,bizName:'客户人员审核',icon:'static/images/business/icon-khrysh.png',badgeCount:3,status:true},
{bizId:1014,bizName:'客户人员所属',icon:'static/images/business/icon-khryss.png',status:1},
{bizId:1015,bizName:'客户人员归属人变更',icon:'static/images/business/icon-khrybg.png',status:1},
{bizId:1016,bizName:'市场活动',icon:'static/images/business/icon-schd.png',status:1}
]},
{bizId:3,bizName:'供应链采纳',children:[]},
{bizId:4,bizName:'PLM系统',children:[]}
]
}
}))
});
// 查询企业日常 Daily business
app.post('/api/businessDaily', (req,res) => {
res.json(Mock.mock({
code: 0,
data: {
list:[
{id:1,name:'任务计划',imgSrc:'static/images/business/icon-rwjh.png'},
{id:2,name:'日报',imgSrc:'static/images/business/icon-rb.png'},
{id:3,name:'设备管理',imgSrc:'static/images/business/icon-sbgl.png'},
{id:4,name:'绩效管理',imgSrc:'static/images/business/icon-jxgl.png'},
{id:5,name:'公章申请',imgSrc:'static/images/business/icon-gzsq.png'},
{id:6,name:'会议室预约',imgSrc:'static/images/business/icon-hysyy.png'},
{id:7,name:'报修',imgSrc:'static/images/business/icon-bx.png'}
{id:11,name:'任务计划',imgSrc:'static/images/business/icon-rwjh.png'},
{id:12,name:'日报',imgSrc:'static/images/business/icon-rb.png'},
{id:13,name:'设备管理',imgSrc:'static/images/business/icon-sbgl.png'},
{id:14,name:'绩效管理',imgSrc:'static/images/business/icon-jxgl.png'},
{id:15,name:'公章申请',imgSrc:'static/images/business/icon-gzsq.png'},
{id:16,name:'会议室预约',imgSrc:'static/images/business/icon-hysyy.png'},
{id:17,name:'报修',imgSrc:'static/images/business/icon-bx.png'}
]
}
}))
@@ -131,15 +172,15 @@ app.post('/api/businessCRMList', (req,res) => {
code: 0,
data: {
list:[
{id:1,name:'走访报告',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/visitorReport'},
{id:2,name:'走访报告添加',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/visitorReportAdd'},
{id:3,name:'走访报告详情',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/visitorReportDetail'},
{id:4,name:'走访报告内容录入',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/visitorReportEnter'},
{id:5,name:'市场信息管理',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/marketInformation'},
{id:6,name:'修改周计划',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/weekPlanUpdate'},
{id:7,name:'签到打卡',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/vistorCheckin'},
{id:8,name:'打卡统计',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/checkinStatistics'},
{id:9,name:'回款查看',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/paymentCollection'},
{id:21,name:'走访报告',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/visitorReport'},
{id:22,name:'走访报告添加',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/visitorReportAdd'},
{id:23,name:'走访报告详情',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/visitorReportDetail'},
{id:24,name:'走访报告内容录入',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/visitorReportEnter'},
{id:25,name:'市场信息管理',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/marketInformation'},
{id:26,name:'修改周计划',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/weekPlanUpdate'},
{id:27,name:'签到打卡',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/vistorCheckin'},
{id:28,name:'打卡统计',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/checkinStatistics'},
{id:29,name:'回款查看',imgSrc:'static/images/business/demo.png',url:'/pages/business/CRM/paymentCollection'},
{id:101,name:'走访报告',imgSrc:'static/images/business/icon-zfbg.png'},
{id:102,name:'走访查看',imgSrc:'static/images/business/icon-zfck.png'},
{id:103,name:'走访审批',imgSrc:'static/images/business/icon-zfsp.png'},
@@ -488,6 +529,23 @@ app.post('/api/getBindStatus', (req,res) => {
}))
})
// 查询版本号
app.post('/api/versionCheck', (req,res) => {
res.json(Mock.mock({
"code": 0,
"message": "Success.",
"data": {
"status": 0,//版本状态 0-最新版本 1-有新版本,但现有版本可用 2-现有版本不可用,需要下载新版本
"latestVersion": "1.0.1",
"downloadURL": "https://www.718ys.com/downloads/android/ys718_test_v1.0.0.apk",
"availableVersionsList": "1.0.0",
remark:'fdsfddf'
},
"ok": true
}))
})
//2.创建server
const server = http.createServer(app);

View File

@@ -7,11 +7,24 @@
import { onLaunch } from '@dcloudio/uni-app';
onLaunch((opt) => {
console.log("onLaunch")
uni.preloadPage({ url: "/pages/login/login" });
uni.preloadPage({ url: "/pages/home/home" });
uni.preloadPage({ url: "/pages/business/business" });
uni.preloadPage({ url: "/pages/notice/notice" });
uni.preloadPage({ url: "/pages/userinfo/userinfo" });
})
</script>
<style>
@import '@/static/common.css';
.uni-app--show{
opacity:1;
transition: opacity 0.3s;
}
.uni-app--hide {
opacity:0;
transition:opacity 0.3s;
}
</style>

View File

@@ -1,9 +1,18 @@
import request from "@/utils/request"
// 获取客户端版本
export function versionCheck(data) {
return request.post({
url: '/api/versionCheck',
data
})
}
// 获取设备绑定状态
export function getBindStatus() {
export function getBindStatus(data) {
return request.post({
url: '/api/getBindStatus',
data
})
}

View File

@@ -8,6 +8,14 @@ export function search(data) {
})
}
// 业务列表
export function businessList(data) {
return request.post({
url: '/api/businessList',
data
})
}
// 企业日常
export function businessDaily(data) {
return request.post({

View File

@@ -16,7 +16,7 @@
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"waiting" : false,// 是否显示等待界面
"autoclose" : true,
"delay" : 0
},

View File

@@ -28,13 +28,25 @@
{
"path": "pages/home/home",
"style": {
"navigationBarTitleText": ""
"navigationBarTitleText": "",
"renderer": "native", // 实验性选项,可能提升性能
"hardwareAccelerated": true // 启用 GPU 加速
}
},
{
"path": "pages/business/business",
"style": {
"navigationBarTitleText": ""
"navigationBarTitleText": "",
"renderer": "native", // 实验性选项,可能提升性能
"hardwareAccelerated": true // 启用 GPU 加速
}
},
{
"path": "pages/business/editDaily",
"style": {
"navigationBarTitleText": "",
"renderer": "native", // 实验性选项,可能提升性能
"hardwareAccelerated": true // 启用 GPU 加速
}
},
{
@@ -103,6 +115,14 @@
},
{
"path": "pages/userinfo/userinfo",
"style": {
"navigationBarTitleText": "",
"renderer": "native", // 实验性选项,可能提升性能
"hardwareAccelerated": true // 启用 GPU 加速
}
},
{
"path": "pages/userinfo/version",
"style": {
"navigationBarTitleText": ""
}

View File

@@ -27,49 +27,26 @@
<view class="white-bg">
<view class="w-b-title">
首页日常服务
<view type="primary" @click="handleEdit" class="btn-edit"> </view>
<view type="primary" @click="handleJump('/pages/business/editDaily')" class="btn-edit"> </view>
</view>
</view>
<!-- 企业日常 -->
<view class="white-bg">
<view class="w-b-title" @click="handleExpand">企业日常
<text>{{expandFlag?'展开':'收起'}}<i :class="{iconfont:true,'icon-up':!expandFlag,'icon-down':expandFlag}"></i></text>
<!-- 业务列表 -->
<view class="white-bg" v-for="(item,index) in list" :key="index">
<view class="w-b-title" @click="handleExpand(item)">{{ item.bizName }}
<text>{{item.expandFlag?'展开':'收起'}}<i :class="{iconfont:true,'icon-up':!item.expandFlag,'icon-down':item.expandFlag}"></i></text>
</view>
<view class="logo-list" v-if="!expandFlag">
<view v-for="(item,index) in list1" class="l-l-item" :key="index">
<img :src="item.imgSrc" />
<text class="font-gray">{{ item.name }}</text>
<block v-if="!item.expandFlag">
<view class="logo-list" v-if="item.children&&item.children.length>0">
<block v-for="(item2,index2) in item.children">
<view class="l-l-item" :key="index2"
@click="handleJump(item2.bizUrl)" v-if="item2.status==1">
<img :src="item2.icon" />
<text class="font-gray">{{ item2.bizName }}</text>
</view>
</block>
</view>
</view>
</view>
<!-- CRM系统 -->
<view class="white-bg">
<view class="w-b-title" @click="handleExpand2">CRM系统
<text>{{expandFlag2?'展开':'收起'}}<i :class="{iconfont:true,'icon-up':!expandFlag2,'icon-down':expandFlag2}"></i></text>
</view>
<view class="logo-list" v-if="!expandFlag2">
<view v-for="(item,index) in list2" class="l-l-item" :key="index" @click="handleJump(item.url)">
<uni-badge :text="item.badgeCount" size="small"></uni-badge>
<img :src="item.imgSrc" />
<text class="font-gray">{{ item.name }}</text>
</view>
</view>
</view>
<!-- 供应链采纳 -->
<view class="white-bg">
<view class="w-b-title">供应链采纳
<text>展开<i :class="{iconfont:true,'icon-down':true}"></i></text>
</view>
</view>
<!-- PLM系统 -->
<view class="white-bg">
<view class="w-b-title">PLM系统
<text>展开<i :class="{iconfont:true,'icon-down':true}"></i></text>
</view>
</block>
</view>
<!-- 底部加高度来避免tabbar遮挡 -->
@@ -81,17 +58,39 @@
<script setup>
import { ref,onMounted } from 'vue'
import { onLoad } from '@dcloudio/uni-app';
import customHeader from '@/components/customHeader.vue'
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
import { getNavBarPaddingTop} from '@/utils/system.js'
import { businessDaily,businessCRMList } from '@/api/business.js';
import { businessList } from '@/api/business.js';
onLoad(async(opt) => {
uni.setStorageSync('page_cache',true);
})
// 获取导航栏高度用于内容区域padding
const navBarPaddingTop = ref(0);
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop()*2;
getList();
})
// 查询列表
let list = ref([]);
let getList = async()=>{
let res = await businessList({});
let arr = res.list || [];
arr.forEach(item => {
item.expandFlag = false;
});
list.value = arr;
}
// 右侧展开
let handleExpand = (item)=>{
item.expandFlag = !item.expandFlag;
}
// 查询搜索跳转
let handleSearch = ()=>{
@@ -124,41 +123,8 @@ const downCallback = async (mescroll) => {
}
}
// 日常服务编辑
let handleEdit=()=>{
}
// 图标查询处理
// 1.企业日常
let list1 = ref([])
let getBusinessDailyList= async ()=>{
let busRes = await businessDaily({});
list1.value = busRes.list || [];
}
getBusinessDailyList();
// 企业日常-右侧展开
let expandFlag=ref(false);
let handleExpand = ()=>{
expandFlag.value = !expandFlag.value;
}
// 2.CRM系统
let list2 = ref([])
let getBusinessCRMList= async ()=>{
let busRes = await businessCRMList({});
list2.value = busRes.list || [];
}
getBusinessCRMList();
// 企业日常-右侧展开
let expandFlag2=ref(false);
let handleExpand2 = ()=>{
expandFlag2.value = !expandFlag2.value;
}
// 跳转
let handleJump=(url)=>{
console.log(url)
if(url){
uni.navigateTo({ url })
}

View File

@@ -0,0 +1,189 @@
<template>
<view class="con-body">
<view class="con-bg">
<!-- 头部 -->
<customHeader ref="customHeaderRef" :title="'常用服务'"
:leftFlag="true" :rightFlag="false"
></customHeader>
<!-- 高度来避免头部遮挡 -->
<view class="top-height"></view>
<!-- 下拉刷新 -->
<mescroll-uni ref="mescrollRef" @init="mescrollInit"
:down="downOption" @down="downCallback"
:fixed="false" class="scroll-h"
>
<view class="white-bg">
<view v-for="(item,index) in list" :key="index">
<view class="bus-title">{{ item.bizName }}</view>
<view class="bus-list">
<view class="bus-tips" :class="{'bus-blue':item2.isDaily}"
v-for="(item2,index2) in item.children" :key="index2"
@click="handleCheck(item2)"
>
{{ item2.bizName }}
<view class="bus-icon" v-if="item2.isDaily">
<uni-icons type="checkmarkempty" size="12" color="#fff"></uni-icons>
</view>
</view>
</view>
</view>
<view class="bottom-height"></view>
</view>
</mescroll-uni>
<!-- 提交按钮 -->
<view class="bus-btn-con">
<view class="bus-btn" @click="handleSubmit"> {{count}}</view>
</view>
</view>
</view>
</template>
<script setup>
import { ref,onMounted } from 'vue'
import { onLoad } from '@dcloudio/uni-app';
import customHeader from '@/components/customHeader.vue'
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
import { getNavBarPaddingTop} from '@/utils/system.js'
import { businessList } from '@/api/business.js';
// 获取导航栏高度用于内容区域padding
const navBarPaddingTop = ref(0);
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop()*2;
getList();
})
// 查询列表
let list = ref([]);
let count = ref(7);
let getList = async()=>{
let res = await businessList({});
let arr = res.list || [];
arr.forEach(item => {
item.expandFlag = false;
});
list.value = arr;
}
// 下拉刷新
const mescrollRef = ref(null);
const mescrollInit = (mescroll) => {
mescrollRef.value = mescroll;
};
const downOption = ref({
auto: true,
textInOffset: '下拉刷新',
textOutOffset: '释放更新',
textLoading: '刷新中...'
});
// 下拉刷新
const downCallback = async (mescroll) => {
try {
setTimeout(async ()=>{
// mescroll.resetUpScroll();
},500);
} catch (error) {
mescroll.endErr();
} finally {
setTimeout(async ()=>{
mescroll.endSuccess();
},500);
}
}
// 选择常用
const handleCheck=(item)=>{
item.isDaily = !item.isDaily;
if(item.isDaily){
count.value++;
}else{
count.value--;
}
}
// 提交
const handleSubmit=(item)=>{
}
</script>
<style scoped>
.scroll-h{
height: 100vh;
}
.white-bg{
width: 690rpx;
margin-bottom:0;
border-radius: 8px 8px 0 0;
}
:deep(.mescroll-upwarp){
display:none
}
.bus-title{
font-weight: bold;
margin:0rpx 0 30rpx;
}
.bus-list{
display: flex;
align-items: center;
gap:10px;
flex-flow:row wrap;
margin-bottom:40rpx;
}
.bus-list .bus-tips{
/* width:210rpx; */
min-width: calc(100% / 3 - 30px);
height:60rpx;
line-height: 60rpx;
font-size:28rpx;
border-radius: 5px;
text-align: center;
padding:0 10px;
background-color: #fff;
color:#333333;
border:1px solid #E8E8E8;
}
.bus-list .bus-blue{
border:1px solid #05A3F4;
background-color: #05A3F4;
color:#fff;
position: relative;
}
.bus-list .bus-blue .bus-icon{
position:absolute;
right:-10rpx;
top:-10rpx;
background-color: #02C74C;
width:32rpx;
height:32rpx;
line-height: 32rpx;
border-radius: 50%;
text-align: center;
}
.bus-btn-con{
position: fixed;
bottom:0;
background-color: #fff;
width:100%;
padding:70rpx 0;
}
.bus-btn-con .bus-btn{
background-color: #05A3F4;
color:#fff;
text-align: center;
width:360rpx;
height:80rpx;
line-height: 80rpx;
margin:0 auto;
border-radius: 40rpx;
}
</style>

View File

@@ -82,6 +82,7 @@
<script setup>
import { ref,nextTick,onMounted,onUnmounted,getCurrentInstance } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import { v4 as uuidv4 } from 'uuid'
import { getNavBarPaddingTop} from '@/utils/system.js';
import { getBindStatus } from '@/api/auth.js';
@@ -91,6 +92,13 @@ const { proxy } = getCurrentInstance();
import { useUserStore } from '@/stores/user';
const userStore = useUserStore();
onLoad(async(opt) => {
console.log("onLoad");
uni.setStorageSync('page_cache',true);
// uni.preloadPage({url: "/pages/login/login"});
// uni.preloadPage({url: "/pages/home/home"});
})
// 绑定状态1=已提交、2=等待审核、3=审核通过、4=绑定成功、5=审核拒绝)
let bindStatus = ref(undefined);
let deviceId = ref(undefined);
@@ -141,6 +149,17 @@ let refreshBindStatus = async ()=>{
bindStatus.value = res.bindStatus;
console.log("222bindStatus=>",bindStatus.value)
if(bindStatus.value==2){}else{
if(bindStatus.value==4){
if (userStore.isLogin) {
uni.reLaunch({
url: '/pages/home/home',
});
}else{
uni.reLaunch({
url: '/pages/login/login',
});
}
}
clearInterval(timer);
}
}

View File

@@ -142,7 +142,8 @@
</template>
<script setup>
import { ref,onMounted,computed } from 'vue'
import { ref,onMounted,computed } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
import customSteps from '@/components/customSteps.vue'
import { getNavBarPaddingTop} from '@/utils/system.js'
@@ -150,6 +151,11 @@ import { backBlogCount,swiperList,stepData,salesTask,commonServices,newsQueryLis
import { getWeekStr,formatTimestamp } from '@/utils/datetime.js'
import { formatMoney } from '@/utils/formatter.js'
onLoad(async(opt) => {
uni.setStorageSync('page_cache',true);
})
// 下拉刷新
const mescrollRef = ref(null);
const mescrollInit = (mescroll) => {

View File

@@ -1,52 +1,158 @@
<template>
<view>
<view class="container" :style="{ height: `100vh` }">
<view class="bg"></view>
<view class="version">Version {{ version }}</view>
<view class="bottom-bg"></view>
<view class="container" :style="{ height: `100vh` }">
<view class="bg"></view>
<view class="version">Version {{ appVersion }}</view>
<!-- <view class="bottom-bg"></view> -->
<!-- 检查版本弹窗 -->
<view class="version-con" v-if="versionVisible">
<view class="v-bg">
<view class="v-title">发现新版本</view>
<uni-icons custom-prefix="iconfont" color="#28B6FF" type="icon-phonefilled" size="40"></uni-icons>
<view class="v-version">最新版本 Version 8.1.2</view>
<view class="v-update">立刻更新吗</view>
<view class="version-btn" @click="handleDown"> </view>
<view class="version-sub" @click="handleClose" v-if="btnVisible">暂不处理</view>
</view>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import { versionCheck,getBindStatus } from '@/api/auth.js';
import { useUserStore } from '@/stores/user';
const userStore = useUserStore();
let version = ref("1.0.0");
const systemInfo = uni.getSystemInfoSync();
// #ifdef APP-PLUS
version = systemInfo.appWgtVersion,//当前版本号
// #endif
// #ifdef H5
version = systemInfo.appVersion,
// #endif
onLoad((opt) => {
let appVersion = ref("1.0.0");//当前版本号
let newVersion = ref('1.0.0');//最新版本号
let versionVisible=ref(false);//版本弹窗
let btnVisible = ref(true);// 暂不处理 按钮是否显示
let downloadURL = ref(''); //下载地址
let versionData = ref({}); //版本参数
// 初始load页面
onLoad(async(opt) => {
console.log("onLoad");
// 检查是否已登录 并 获取用户信息
if (userStore.isLogin) {
// userStore.getUser()
// TODO 未登录会在拦截器中处理跳转登录页, 请在 xxx 配置登录页路径
uni.reLaunch({
url: '/pages/deviceAuth/deviceAuth',
});
}else{
uni.reLaunch({
url: '/pages/login/login',
});
}
uni.preloadPage({url: "/pages/login/login"});
uni.preloadPage({url: "/pages/deviceAuth/deviceAuth"});
uni.preloadPage({url: "/pages/home/home"});
// #ifdef APP-PLUS
// 查询版本接口
await getOSVesion();
// #endif
// 不更新版本 执行设备ID查询和绑定操作
if(!versionVisible.value){
selectDeviceId()
}
});
// 检查版本是否是最新的
let getOSVesion = async()=>{
let systemInfo = uni.getSystemInfoSync();
let param = {
// #ifdef APP-PLUS
appVersion:systemInfo.appWgtVersion,//当前版本号
// #endif
// #ifdef H5
appVersion : systemInfo.appVersion,
// #endif
deviceType:systemInfo.model,//型号
os: systemInfo.osName,//操作系统 Android IOS
osVersion:systemInfo.osVersion,//操作系统版本
resolution:systemInfo.windowWidth+"*"+systemInfo.windowHeight,//分辨率
trademark:systemInfo.deviceBrand,//设备品牌
uniqueCode:systemInfo.deviceId//设备ID
}
// 当前手机版本
appVersion.value = param.appVersion;
// console.log("appVersion=>",appVersion)
versionData.value = param;
let data = await versionCheck(param);
newVersion.value = data.latestVersion;
// 版本状态 0-最新版本 1-有新版本,但现有版本可用 2-现有版本不可用,需要下载新版本
if(data.status == 1 || data.status == 2){
versionVisible.value = true;
downloadURL.value = data.downloadURL;
// 可用版本列表
let availableVersionsList = data.availableVersionsList;
// let versionList = availableVersionsList.split(",");
if(availableVersionsList.indexOf(appVersion.value)>-1){
btnVisible.value = true;
}else{
btnVisible.value = false;
}
// }else{
// if(userStore.isLogin){
// // _this.getUserInfo();
// }else{
// uni.reLaunch({
// url: '/pages/home/home',
// });
// }
}
}
// 下载最新版本
const handleDown = ()=>{
// 跳转到应用商店或下载最新版本的页面
plus.runtime.openURL(downloadURL.value);
// if (versionData.value.os == 'ios'){
// plus.ios.import("UIApplication").sharedApplication().performSelector("exit")
// } else if (versionData.value.os == 'android'){
plus.runtime.quit();
// }
}
//版本更新关闭
const handleClose=()=>{
versionVisible.value = false;
// 不更新版本 执行设备ID查询和绑定操作
if(!versionVisible.value){
selectDeviceId()
}
}
// 查询设备ID
const selectDeviceId = async()=>{
// 查询本地缓存的设备状态是否绑定过
let deviceId = ref(undefined);
deviceId.value = uni.getStorageSync('app_device');// 本地设备ID
let res = await getBindStatus({deviceId:deviceId.value});
setTimeout(()=>{
// 检查是否已登录 并 获取用户信息
if (userStore.isLogin) {
// 绑定状态1=已提交、2=等待审核、3=审核通过、4=绑定成功、5=审核拒绝)
if(res.bindStatus == 4){
uni.reLaunch({
url: '/pages/home/home',
});
}else{
uni.reLaunch({
url: '/pages/deviceAuth/deviceAuth',
});
}
}else{
uni.reLaunch({
url: '/pages/login/login',
});
}
},2000)
}
</script>
<style>
.container {
background:#307AF5 !important;
height:100vh !important;
height: calc(100vh - 100px) !important;
position: relative;
padding-top:100px;
}
.container .bg{
background:url('@/static/images/loading-logo.png') no-repeat;
@@ -71,4 +177,62 @@ onLoad((opt) => {
left:50%;
margin-left:-328rpx;
}
.container .version-con{
width:100%;
position: fixed;
top:0;
left:0;
height: 100vh;
background: rgba(0, 0, 0, 0.4);
}
.version-con .v-bg{
position: absolute;
top:50%;
left: 50%;
/* width:620rpx; */
width:540rpx;
background-color: #fff;
border-radius: 20rpx;
padding:40rpx;
margin-left:-310rpx;
margin-top:-45%;
text-align: center;
}
.version-con .v-bg .v-title{
font-size: 36rpx;
font-weight: bold;
text-align: center;
margin-bottom:30rpx;
}
.version-con .v-bg .v-icon{
font-size:70rpx;
color:#28B6FF;
}
.version-con .v-bg .v-version{
color:#0395E0;
font-size:42rpx;
font-weight: bold;
margin:20rpx 0 30rpx;
}
.version-con .v-bg .v-update{
font-size:32rpx;
margin-bottom:70rpx;
}
.version-con .v-bg .version-btn{
background-color: #05A3F4;
text-align: center;
width:360rpx;
height:80rpx;
line-height: 80rpx;
border-radius: 40rpx;
margin:0 auto;
color:#fff;
}
.version-con .v-bg .version-sub{
color:#05A3F4;
font-size:32rpx;
margin:40rpx 0 30rpx;
}
</style>

View File

@@ -74,6 +74,7 @@
<script setup>
import { ref,onMounted } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import customTabs from '@/components/customTabs.vue';
import {isPhoneNumber} from '@/utils/validate';
import {showAlert} from '@/utils/message';
@@ -85,6 +86,9 @@ import { getNavBarPaddingTop} from '@/utils/system.js'
import { useUserStore } from '@/stores/user';
const userStore = useUserStore()
onLoad(async(opt) => {
uni.setStorageSync('page_cache',true);
})
// 获取导航栏高度用于内容区域padding
const navBarPaddingTop = ref(0);

View File

@@ -76,7 +76,7 @@
</view>
</view>
<view class="item-border"></view>
<view class="list-item item-padding">
<view class="list-item item-padding" @click="handleVersion">
<img :src="'static/images/userinfo/icon-bbgx@2x.png'" class="l-icon" />
<view class="item-text">版本更新 <view class="dot"></view></view>
<view class="list-right">
@@ -98,19 +98,31 @@
<script setup>
import { ref, onMounted } from 'vue'
import { onLoad } from '@dcloudio/uni-app';
// import customHeader from '@/components/customHeader.vue'
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
import { getNavBarPaddingTop } from '@/utils/system.js'
import { getUserInfo } from '@/api/auth.js'
import { useUserStore } from '@/stores/user';
const userStore = useUserStore()
onLoad(async(opt) => {
uni.setStorageSync('page_cache',true);
})
// 1.头部导航栏
const navBarPaddingTop = ref(0);
let appVersion = ref("1.0.0");//当前版本号
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
let systemInfo = uni.getSystemInfoSync();
// #ifdef APP-PLUS
appVersion.value=systemInfo.appWgtVersion; //当前版本号
// #endif
// #ifdef H5
appVersion.value=systemInfo.appVersion;
// #endif
})
// 下拉刷新
@@ -156,6 +168,14 @@ const handleLoginOut = async ()=>{
});
}
// 4.跳转到版本
const handleVersion=()=>{
uni.navigateTo({url:'/pages/userinfo/version'})
}
</script>
<style scoped>

View File

@@ -0,0 +1,130 @@
<template>
<view class="con-body">
<view class="con-bg">
<!-- 头部 -->
<customHeader ref="customHeaderRef" :title="'版本更新'" :leftFlag="true" :rightFlag="false"></customHeader>
<!-- 高度来避免头部遮挡 -->
<view class="top-height" :style="{ paddingTop: navBarPaddingTop + 'px' }"></view>
<view class="white-bg">
<view class="version-con">
<view class="v-title">当前版本 Version {{appVersion}}</view>
<block v-if="appVersion!=newVersion">
<view class="v-sub-title">最新版本 Version {{ newVersion }}</view>
<view class="v-remark">
<view class="v-r-title">本期更新</view>
{{ remark }}
</view>
<view class="v-btn" @click="handleDown"> </view>
</block>
<block v-else>
<view class="v-new-title">已经是最新版本</view>
</block>
</view>
</view>
</view>
</view>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import customHeader from '@/components/customHeader.vue'
import { versionCheck } from '@/api/auth.js';
import { getNavBarPaddingTop } from '@/utils/system.js'
// 1.头部导航栏
let navBarPaddingTop = ref(0);
let appVersion = ref("1.0.0");//当前版本号
let newVersion = ref('1.0.0');//最新版本号
let remark = ref('');//更新内容
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
getOSVesion();
})
let getOSVesion = async()=>{
let systemInfo = uni.getSystemInfoSync();
let param = {
// #ifdef APP-PLUS
appVersion:systemInfo.appWgtVersion,//当前版本号
// #endif
// #ifdef H5
appVersion : systemInfo.appVersion,
// #endif
deviceType:systemInfo.model,//型号
os: systemInfo.osName,//操作系统 Android IOS
osVersion:systemInfo.osVersion,//操作系统版本
resolution:systemInfo.windowWidth+"*"+systemInfo.windowHeight,//分辨率
trademark:systemInfo.deviceBrand,//设备品牌
uniqueCode:systemInfo.deviceId//设备ID
}
// 当前手机版本
appVersion.value = param.appVersion;
// console.log("appVersion=>",appVersion)
let data = await versionCheck(param);
newVersion.value = data.latestVersion;
remark.value = data.remark //|| '全新的UI界面 优化了签到/打卡功能,整体流程更加简洁清晰 搜索功能全面升级 修复了已知BUG'
}
// 下载最新版本
const handleDown = ()=>{
// #ifdef APP-PLUS
// 跳转到应用商店或下载最新版本的页面
plus.runtime.openURL(downloadURL.value);
// if (versionData.value.os == 'ios'){
// plus.ios.import("UIApplication").sharedApplication().performSelector("exit")
// } else if (versionData.value.os == 'android'){
plus.runtime.quit();
// }
// #endif
}
</script>
<style scoped>
.white-bg{
width: 750rpx;
padding: 40rpx 0 ;
margin-bottom:0;
border-radius: 8px 8px 0 0;
height:calc(100vh - 105px)
}
.version-con{
padding:10rpx 53rpx;
}
.version-con .v-title{
font-size:38rpx;
font-weight: bold;
}
.version-con .v-sub-title{
color:#3384DF;
font-size: 28rpx;
margin-top: 35rpx;
font-weight: bold;
border-bottom:1px solid #E7E7E7;
padding-bottom: 25rpx;
}
.version-con .v-remark{
padding-top:25rpx;
font-size:28rpx;
line-height: 50rpx;
}
.version-con .v-remark .v-r-title{
font-size: 32rpx;
font-weight: bold;
margin-bottom:10rpx;
}
.version-con .v-btn{
width:496rpx;
height:80rpx;
line-height:80rpx;
text-align: center;
color:#F0F0F0;
background-color: #05A3F4;
margin:100rpx auto;
border-radius: 44rpx;
}
.version-con .v-new-title{
color:#919191;
font-size:28rpx;
font-weight: bold;
margin-top:40rpx;
}
</style>

View File

@@ -11,6 +11,10 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-phonefilled:before {
content: "\e68d";
}
.icon-phonebaocun:before {
content: "\e80b";
}

Binary file not shown.