| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581 |
- <style lang="scss">
- /* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
- @import "@/uni_modules/uview-ui/index.scss";
- </style>
- <script>
- import Vue from "vue";
- import appUpdate from "common/util/appUpdate.js";
- import configService from "@/common/service/config.service.js";
- import api from "@/api/api";
- export default {
- data() {
- return {
- socketTask: null,//websocket对象
- }
- },
- onLaunch: function () {
- //app在线版本更新
- this.checkVersion()
- // this.getVersionFn()
- //消息推送
- this.getPushClientID()
- const savedIP = uni.getStorageSync("selectedIP");
- if (configService.apiUrl !== "") {
- uni.getSystemInfo({
- success: function (e) {
- // #ifdef APP-PLUS
- // 检测升级
- appUpdate();
- // #endif
- // #ifndef MP
- Vue.prototype.StatusBar = e.statusBarHeight;
- if (e.platform == "android") {
- Vue.prototype.CustomBar = e.statusBarHeight + 50;
- } else {
- Vue.prototype.CustomBar = e.statusBarHeight + 45;
- }
- // #endif
- // #ifdef MP-WEIXIN
- Vue.prototype.StatusBar = e.statusBarHeight;
- let custom = wx.getMenuButtonBoundingClientRect();
- Vue.prototype.Custom = custom;
- Vue.prototype.CustomBar =
- custom.bottom + custom.top - e.statusBarHeight;
- // #endif
- // #ifdef MP-ALIPAY
- Vue.prototype.StatusBar = e.statusBarHeight;
- Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight;
- // #endif
- // #ifdef APP-PLUS
- //Vue.prototype.$api.listenTranMsg()
- // var info = plus.push.getClientInfo();
- // /* 5+ push 消息推送 ps:使用:H5+的方式监听,实现推送*/
- // plus.push.addEventListener("click", function(msg) {
- // console.log("click:" + JSON.stringify(msg));
- // console.log(msg.payload);
- // console.log(JSON.stringify(msg));
- // //这里可以写跳转业务代码
- // }, false);
- // // 监听在线消息事件
- // plus.push.addEventListener("receive", function(msg) {
- // // plus.ui.alert(2);
- // //这里可以写跳转业务代码
- // console.log("recevice:" + JSON.stringify(msg))
- // }, false);
- // #endif
- //Vue.prototype.$api.initLogin()
- },
- });
- Vue.prototype.NavBarColor = "bg-gradual-blue";
- Vue.prototype.Radio_Check_Size = "scale(0.7)";
- Vue.prototype.ColorList = [
- {
- title: "嫣红",
- name: "red",
- color: "#e54d42",
- },
- {
- title: "桔橙",
- name: "orange",
- color: "#f37b1d",
- },
- {
- title: "明黄",
- name: "yellow",
- color: "#fbbd08",
- },
- {
- title: "橄榄",
- name: "olive",
- color: "#8dc63f",
- },
- {
- title: "森绿",
- name: "green",
- color: "#39b54a",
- },
- {
- title: "天青",
- name: "cyan",
- color: "#1cbbb4",
- },
- {
- title: "海蓝",
- name: "blue",
- color: "#0081ff",
- },
- {
- title: "姹紫",
- name: "purple",
- color: "#6739b6",
- },
- {
- title: "木槿",
- name: "mauve",
- color: "#9c26b0",
- },
- {
- title: "桃粉",
- name: "pink",
- color: "#e03997",
- },
- {
- title: "棕褐",
- name: "brown",
- color: "#a5673f",
- },
- {
- title: "玄灰",
- name: "grey",
- color: "#8799a3",
- },
- {
- title: "草灰",
- name: "gray",
- color: "#aaaaaa",
- },
- {
- title: "墨黑",
- name: "black",
- color: "#333333",
- },
- {
- title: "雅白",
- name: "white",
- color: "#ffffff",
- },
- ];
- } else {
- if (!savedIP) {
- uni.reLaunch({ url: "/pages/ipConfig/ipConfig" });
- return;
- } else {
- uni.getSystemInfo({
- success: function (e) {
- // #ifdef APP-PLUS
- // 检测升级
- appUpdate();
- // #endif
- // #ifndef MP
- Vue.prototype.StatusBar = e.statusBarHeight;
- if (e.platform == "android") {
- Vue.prototype.CustomBar = e.statusBarHeight + 50;
- } else {
- Vue.prototype.CustomBar = e.statusBarHeight + 45;
- }
- // #endif
- // #ifdef MP-WEIXIN
- Vue.prototype.StatusBar = e.statusBarHeight;
- let custom = wx.getMenuButtonBoundingClientRect();
- Vue.prototype.Custom = custom;
- Vue.prototype.CustomBar =
- custom.bottom + custom.top - e.statusBarHeight;
- // #endif
- // #ifdef MP-ALIPAY
- Vue.prototype.StatusBar = e.statusBarHeight;
- Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight;
- // #endif
- // #ifdef APP-PLUS
- //Vue.prototype.$api.listenTranMsg()
- // var info = plus.push.getClientInfo();
- // /* 5+ push 消息推送 ps:使用:H5+的方式监听,实现推送*/
- // plus.push.addEventListener("click", function(msg) {
- // console.log("click:" + JSON.stringify(msg));
- // console.log(msg.payload);
- // console.log(JSON.stringify(msg));
- // //这里可以写跳转业务代码
- // }, false);
- // // 监听在线消息事件
- // plus.push.addEventListener("receive", function(msg) {
- // // plus.ui.alert(2);
- // //这里可以写跳转业务代码
- // console.log("recevice:" + JSON.stringify(msg))
- // }, false);
- // #endif
- //Vue.prototype.$api.initLogin()
- },
- });
- Vue.prototype.NavBarColor = "bg-gradual-blue";
- Vue.prototype.Radio_Check_Size = "scale(0.7)";
- Vue.prototype.ColorList = [
- {
- title: "嫣红",
- name: "red",
- color: "#e54d42",
- },
- {
- title: "桔橙",
- name: "orange",
- color: "#f37b1d",
- },
- {
- title: "明黄",
- name: "yellow",
- color: "#fbbd08",
- },
- {
- title: "橄榄",
- name: "olive",
- color: "#8dc63f",
- },
- {
- title: "森绿",
- name: "green",
- color: "#39b54a",
- },
- {
- title: "天青",
- name: "cyan",
- color: "#1cbbb4",
- },
- {
- title: "海蓝",
- name: "blue",
- color: "#0081ff",
- },
- {
- title: "姹紫",
- name: "purple",
- color: "#6739b6",
- },
- {
- title: "木槿",
- name: "mauve",
- color: "#9c26b0",
- },
- {
- title: "桃粉",
- name: "pink",
- color: "#e03997",
- },
- {
- title: "棕褐",
- name: "brown",
- color: "#a5673f",
- },
- {
- title: "玄灰",
- name: "grey",
- color: "#8799a3",
- },
- {
- title: "草灰",
- name: "gray",
- color: "#aaaaaa",
- },
- {
- title: "墨黑",
- name: "black",
- color: "#333333",
- },
- {
- title: "雅白",
- name: "white",
- color: "#ffffff",
- },
- ];
- }
- }
- },
- onShow: function () {
- console.log("App Show");
- },
- onHide: function () {
- console.log("App Hide");
- clearInterval(this.$store.state.timer); // 假设定时器存储在 Vuex 的状态管理中
- },
- methods: {
- //消息推送
- getPushClientID() {
- uni.getPushClientId({
- //获取客户端推送标识
- success: (res) => {
- console.log(res.cid, 'cid---');
- uni.setStorageSync('push_cid', res.cid); // 存储CID供后续使用
- },
- fail(err) {
- console.log(err)
- }
- });
- },
- // 检测版本
- checkVersion() {
- plus.runtime.getProperty(plus.runtime.appid, (appInfo) => {
- // 获取版本号
- const currentVersion = appInfo.version
- // 这是用来看看版本是多少的
- console.log(currentVersion, '版本号');
- this.getVersionFn(currentVersion)
- });
- },
- getVersionFn(currentVersion) {
- let that = this
- new Promise((resolve, reject) => {
- api
- .getAppLast({})
- .then((response) => {
- if (response.statusCode == 200) {
- console.log(response, '响应数据')
- const updateUrl = `${configService.apiUrlP}:9999${response.data.downloadUrl}`; // 下载地址
- let indexF = response.data.filename.lastIndexOf('-')
- let indexL = response.data.filename.lastIndexOf('.')
- const latestVersion = response.data.filename.substring(indexF + 1, indexL)// 版本号
- console.log(updateUrl, '下载地址')
- console.log(latestVersion, '版本号')
- // 比较版本号,判断是否有新版本
- if (that.compareVersion(currentVersion, latestVersion) < 0) {
- // 提示用户更新
- uni.showModal({
- title: '更新提示',
- content: '检测到新版本,是否立即更新?',
- success: (modalRes) => {
- if (modalRes.confirm) {
- // 用户确认更新,下载新版本
- that.downloadAndInstall(updateUrl);
- }
- }
- });
- } else {
- console.log('当前已是最新版本');
- }
- } else {
- reject(response);
- }
- })
- .catch((error) => {
- console.log("catch===>response", response);
- reject(error);
- });
- });
- },
- // 比较版本号
- compareVersion(v1, v2) {
- const version1 = v1.split('.').map(Number);
- const version2 = v2.split('.').map(Number);
- for (let i = 0; i < version1.length; i++) {
- if (version1[i] < version2[i]) {
- return -1;
- } else if (version1[i] > version2[i]) {
- return 1;
- }
- }
- return 0;
- },
- // 下载并安装新版本
- downloadAndInstall(url) {
- let dtask = plus.downloader.createDownload(url, {
- filename: '_downloads/temporary.apk' //利用保存路径,实现下载文件的重命名
- },
- function (d, status) {
- // 下载完成
- if (status == 200) {
- plus.runtime.install(plus.io.convertLocalFileSystemURL(
- d.filename), {}, {}, function (error) {
- uni.showToast({
- title: '安装失败',
- duration: 1500
- });
- })
- } else {
- uni.showToast({
- title: '更新失败',
- duration: 1500
- });
- }
- });
- try {
- console.log('开始下载');
- dtask.start(); // 开启下载的任务
- let prg = 0;
- let showLoading = plus.nativeUI.showWaiting(
- "正在下载"); //创建一个showWaiting对象
- dtask.addEventListener('statechanged', function (
- task,
- status
- ) {
- // 给下载任务设置一个监听 并根据状态 做操作
- switch (task.state) {
- case 1:
- showLoading.setTitle("正在下载");
- break;
- case 2:
- showLoading.setTitle("已连接到服务器");
- break;
- case 3:
- prg = parseInt(
- (parseFloat(task.downloadedSize) /
- parseFloat(task.totalSize)) *
- 100
- );
- showLoading.setTitle(" 正在下载" + prg + "% ");
- break;
- case 4:
- plus.nativeUI.closeWaiting();
- //下载完成
- break;
- }
- });
- } catch (err) {
- plus.nativeUI.closeWaiting();
- uni.showToast({
- title: '更新失败',
- mask: false,
- duration: 1500
- });
- }
- }
- }
- };
- </script>
- <style>
- @import "plugin/colorui/main.css";
- @import "plugin/colorui/icon.css";
- @import "plugin/colorui/animation.css";
- .nav-list {
- display: flex;
- flex-wrap: wrap;
- padding: 0px 40upx 0px;
- justify-content: space-between;
- }
- .nav-li {
- padding: 30upx;
- border-radius: 12upx;
- width: 45%;
- margin: 0 2.5% 40upx;
- background-image: url(https://cdn.nlark.com/yuque/0/2019/png/280374/1552996358352-assets/web-upload/cc3b1807-c684-4b83-8f80-80e5b8a6b975.png);
- background-size: cover;
- background-position: center;
- position: relative;
- z-index: 1;
- }
- .nav-li::after {
- content: "";
- position: absolute;
- z-index: -1;
- background-color: inherit;
- width: 100%;
- height: 100%;
- left: 0;
- bottom: -10%;
- border-radius: 10upx;
- opacity: 0.2;
- transform: scale(0.9, 0.9);
- }
- .nav-li.cur {
- color: #fff;
- background: rgb(94, 185, 94);
- box-shadow: 4upx 4upx 6upx rgba(94, 185, 94, 0.4);
- }
- .nav-title {
- font-size: 32upx;
- font-weight: 300;
- }
- .nav-title::first-letter {
- font-size: 40upx;
- margin-right: 4upx;
- }
- .nav-name {
- font-size: 28upx;
- text-transform: Capitalize;
- margin-top: 20upx;
- position: relative;
- }
- .nav-name::before {
- content: "";
- position: absolute;
- display: block;
- width: 40upx;
- height: 6upx;
- background: #fff;
- bottom: 0;
- right: 0;
- opacity: 0.5;
- }
- .nav-name::after {
- content: "";
- position: absolute;
- display: block;
- width: 100upx;
- height: 1px;
- background: #fff;
- bottom: 0;
- right: 40upx;
- opacity: 0.3;
- }
- .nav-name::first-letter {
- font-weight: bold;
- font-size: 36upx;
- margin-right: 1px;
- }
- .nav-li text {
- position: absolute;
- right: 30upx;
- top: 30upx;
- font-size: 52upx;
- width: 60upx;
- height: 60upx;
- text-align: center;
- line-height: 60upx;
- }
- .text-light {
- font-weight: 300;
- }
- @keyframes show {
- 0% {
- transform: translateY(-50px);
- }
- 60% {
- transform: translateY(40upx);
- }
- 100% {
- transform: translateY(0px);
- }
- }
- @-webkit-keyframes show {
- 0% {
- transform: translateY(-50px);
- }
- 60% {
- transform: translateY(40upx);
- }
- 100% {
- transform: translateY(0px);
- }
- }
- </style>
|