吉安感知网项目-前端
罗广辉
2026-02-09 53d98f546cd75d9a54a99a9faf6456cdefd0d755
feat: 后台弹出弹框
3 files modified
9 files added
381 ■■■■■ changed files
uniapps/work-app/src/App.vue 28 ●●●● patch | view | raw | blame | history
uniapps/work-app/src/manifest.json 5 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/changelog.md patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/package.json 97 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/readme.md 7 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/app-android/config.json 3 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/app-android/index.uts 67 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/app-ios/config.json 3 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/app-ios/index.uts 85 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/interface.uts 45 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/unierror.uts 39 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/uni_modules/lgh-getbatteryinfo/utssdk/app-android/index.uts 2 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/App.vue
@@ -4,6 +4,7 @@
import { useGlobalWS } from '@/hooks/useGlobalWS.js'
// #ifdef APP-PLUS
import { keepAliveStart, requestIgnoreBatteryOptimization } from '@/uni_modules/keep-app'
import { openDialog,closeDialog } from '@/uni_modules/lgh-dialog'
// #endif
const appStore = useAppStore()
@@ -15,14 +16,29 @@
// console.log('电池电量:', getBatteryCapacity())
// #endif
const valuetest = ref(1)
const currentKey = ref(1)
function tests() {
    setInterval(() => {
        valuetest.value = valuetest.value + 1
        console.log('valuetest.value:', valuetest.value)
        uni.showToast({ title: valuetest.value, icon: 'none' })
        currentKey.value = currentKey.value + 1
        const val = '保活服务验证:' + currentKey.value
        console.log(val)
        uni.showToast({ title: val, icon: 'none' })
    }, 1000)
}
function popUpInterface() {
  uni.showToast({ title: '弹框', icon: 'none' })
    openDialog()
}
setTimeout(() => {
    popUpInterface()
},10000)
setTimeout(() => {
    closeDialog()
},20000)
tests()
useGlobalWS()
@@ -52,9 +68,7 @@
    // #ifdef APP-PLUS
    keepAliveStart()
    // 请求用户允许忽略电池优化(重要:用于保活)
    setTimeout(() => {
        requestIgnoreBatteryOptimization()
    }, 2000)
    setTimeout(requestIgnoreBatteryOptimization, 2000)
    // #endif
    if (!userStore.userInfo) {
        //不存在则跳转至登录页
uniapps/work-app/src/manifest.json
@@ -55,7 +55,9 @@
                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />",
                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",
                    "<uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />",
                    "<uses-permission android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\" />"
                    "<uses-permission android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\" />",
                    "<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />",
                    "<uses-permission android:name=\"android.permission.USE_FULL_SCREEN_INTENT\" />"
                ]
            },
            /* ios打包配置 */
@@ -112,4 +114,3 @@
        }
    }
}
uniapps/work-app/src/uni_modules/lgh-dialog/changelog.md
uniapps/work-app/src/uni_modules/lgh-dialog/package.json
New file
@@ -0,0 +1,97 @@
{
    "id": "lgh-dialog",
    "displayName": "lgh-dialog",
    "version": "1.0.0",
    "description": "lgh-dialog",
    "keywords": [
        "lgh-dialog"
    ],
    "repository": "",
    "engines": {
        "HBuilderX": "^3.6.8",
        "uni-app": "^3.1.0",
        "uni-app-x": "^3.1.0"
    },
    "dcloudext": {
        "type": "uts",
        "sale": {
            "regular": {
                "price": "0.00"
            },
            "sourcecode": {
                "price": "0.00"
            }
        },
        "contact": {
            "qq": ""
        },
        "declaration": {
            "ads": "",
            "data": "",
            "permissions": ""
        },
        "npmurl": "",
        "darkmode": "-",
        "i18n": "-",
        "widescreen": "-"
    },
    "uni_modules": {
        "dependencies": [],
        "encrypt": [],
        "platforms": {
            "cloud": {
                "tcb": "-",
                "aliyun": "-",
                "alipay": "-"
            },
            "client": {
                "uni-app": {
                    "vue": {
                        "vue2": "-",
                        "vue3": "-"
                    },
                    "web": {
                        "safari": "-",
                        "chrome": "-"
                    },
                    "app": {
                        "vue": "-",
                        "nvue": "-",
                        "android": "-",
                        "ios": "-",
                        "harmony": "-"
                    },
                    "mp": {
                        "weixin": "-",
                        "alipay": "-",
                        "toutiao": "-",
                        "baidu": "-",
                        "kuaishou": "-",
                        "jd": "-",
                        "harmony": "-",
                        "qq": "-",
                        "lark": "-"
                    },
                    "quickapp": {
                        "huawei": "-",
                        "union": "-"
                    }
                },
                "uni-app-x": {
                    "web": {
                        "safari": "-",
                        "chrome": "-"
                    },
                    "app": {
                        "android": "-",
                        "ios": "-",
                        "harmony": "-"
                    },
                    "mp": {
                        "weixin": "-"
                    }
                }
            }
        }
    }
}
uniapps/work-app/src/uni_modules/lgh-dialog/readme.md
New file
@@ -0,0 +1,7 @@
# lgh-dialog
### 开发文档
[UTS 语法](https://uniapp.dcloud.net.cn/tutorial/syntax-uts.html)
[UTS API插件](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html)
[UTS uni-app兼容模式组件](https://uniapp.dcloud.net.cn/plugin/uts-component.html)
[UTS 标准模式组件](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-vue-component.html)
[Hello UTS](https://gitcode.net/dcloud/hello-uts)
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/app-android/config.json
New file
@@ -0,0 +1,3 @@
{
  "minSdkVersion": "21"
}
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/app-android/index.uts
New file
@@ -0,0 +1,67 @@
import Build from "android.os.Build";
import Context from "android.content.Context";
import WindowManager from "android.view.WindowManager";
import TextView from "android.widget.TextView";
import Gravity from "android.view.Gravity";
import Color from "android.graphics.Color";
import PixelFormat from "android.graphics.PixelFormat";
import Settings from "android.provider.Settings";
import { UTSAndroid } from "io.dcloud.uts";
let dialogView: TextView | null = null;
export function openDialog(): void {
    const context = UTSAndroid.getAppContext();
    if (context == null || dialogView != null) return;
    if (Build.VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(context)) {
        console.error("无悬浮窗权限");
        return;
    }
    const wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager;
    if (wm == null) return;
    dialogView = new TextView(context);
    dialogView!.setText("系统接听页面");
    dialogView!.setTextColor(Color.WHITE);
    dialogView!.setTextSize(22.0.toFloat());
    dialogView!.setGravity(Gravity.CENTER);
    dialogView!.setBackgroundColor(Color.parseColor("#CC000000"));
    const type = Build.VERSION.SDK_INT >= 26 ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : WindowManager.LayoutParams.TYPE_PHONE;
    const flags = WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
        WindowManager.LayoutParams.FLAG_FULLSCREEN |
        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
        WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
    const params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.MATCH_PARENT,
        type,
        flags,
        PixelFormat.TRANSLUCENT
    );
    try {
        wm.addView(dialogView, params);
    } catch (e) {
        console.error(e);
        dialogView = null;
    }
}
export function closeDialog(): void {
    if (dialogView == null) return;
    try {
        const context = UTSAndroid.getAppContext();
        if (context == null) return;
        const wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager;
        wm.removeView(dialogView);
    } catch (e) {
        console.error(e);
    } finally {
        dialogView = null;
    }
}
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/app-ios/config.json
New file
@@ -0,0 +1,3 @@
{
  "deploymentTarget": "12"
}
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/app-ios/index.uts
New file
@@ -0,0 +1,85 @@
/**
 * 引用 iOS 系统库,示例如下:
 * import { UIDevice } from "UIKit";
 * [可选实现,按需引入]
 */
/* 引入 interface.uts 文件中定义的变量 */
import { MyApiOptions, MyApiResult, MyApi, MyApiSync } from '../interface.uts';
/* 引入 unierror.uts 文件中定义的变量 */
import { MyApiFailImpl } from '../unierror';
/**
 * 引入三方库
 * [可选实现,按需引入]
 *
 * 在 iOS 平台引入三方库有以下两种方式:
 * 1、通过引入三方库framework 或者.a 等方式,需要将 .framework 放到 ./Frameworks 目录下,将.a 放到 ./Libs 目录下。更多信息[详见](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#ios-平台原生配置)
 * 2、通过 cocoaPods 方式引入,将要引入的 pod 信息配置到 config.json 文件下的 dependencies-pods 字段下。详细配置方式[详见](https://uniapp.dcloud.net.cn/plugin/uts-ios-cocoapods.html)
 *
 * 在通过上述任意方式依赖三方库后,使用时需要在文件中 import:
 * 示例:import { LottieLoopMode    } from 'Lottie'
 */
/**
 * UTSiOS 为平台内置对象,不需要 import 可直接调用其API,[详见](https://uniapp.dcloud.net.cn/uts/utsios.html)
 */
/**
 * 异步方法
 *
 * uni-app项目中(vue/nvue)调用示例:
 * 1、引入方法声明 import { myApi } from "@/uni_modules/uts-api"
 * 2、方法调用
 * myApi({
 *   paramA: false,
 *   complete: (res) => {
 *      console.log(res)
 *   }
 * });
 *
 */
export const myApi : MyApi = function (options : MyApiOptions) {
  if (options.paramA == true) {
    // 返回数据
    const res : MyApiResult = {
      fieldA: 85,
      fieldB: true,
      fieldC: 'some message'
    };
    options.success?.(res);
    options.complete?.(res);
  } else {
    // 返回错误
    let failResult = new MyApiFailImpl(9010001);
    options.fail?.(failResult)
    options.complete?.(failResult)
  }
}
/**
 * 同步方法
 *
 * uni-app项目中(vue/nvue)调用示例:
 * 1、引入方法声明 import { myApiSync } from "@/uni_modules/uts-api"
 * 2、方法调用
 * myApiSync(true);
 *
 */
export const myApiSync : MyApiSync = function (paramA : boolean) : MyApiResult {
  // 返回数据,根据插件功能获取实际的返回值
  const res : MyApiResult = {
    fieldA: 85,
    fieldB: paramA,
    fieldC: 'some message'
  };
  return res;
}
/**
 * 更多插件开发的信息详见:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html
 */
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/interface.uts
New file
@@ -0,0 +1,45 @@
/**
 * interface.uts
 * uts插件接口定义文件,按规范定义接口文件可以在HBuilderX中更好的做到语法提示
 */
/**
 * myApi 异步函数的参数,在type里定义函数需要的参数以及api成功、失败的相关回调函数。
 */
export type MyApiOptions = {
  paramA : boolean
  success ?: (res : MyApiResult) => void
  fail ?: (res : MyApiFail) => void
  complete ?: (res : any) => void
}
/**
 * 函数返回结果
 * 可以是void, 基本数据类型,自定义type, 或者其他类型。
 * [可选实现]
 */
export type MyApiResult = {
  fieldA : number,
  fieldB : boolean,
  fieldC : string
}
/**
 * 错误码
 * 根据uni错误码规范要求,建议错误码以90开头,以下是错误码示例:
 * - 9010001 错误信息1
 * - 9010002 错误信息2
 */
export type MyApiErrorCode = 9010001 | 9010002;
/**
 * myApi 的错误回调参数
 */
export interface MyApiFail extends IUniError {
  errCode : MyApiErrorCode
};
/* 异步函数定义 */
export type MyApi = (options : MyApiOptions) => void
/* 同步函数定义 */
export type MyApiSync = (paramA : boolean) => MyApiResult
uniapps/work-app/src/uni_modules/lgh-dialog/utssdk/unierror.uts
New file
@@ -0,0 +1,39 @@
/* 此规范为 uni 规范,可以按照自己的需要选择是否实现 */
import { MyApiErrorCode, MyApiFail } from "./interface.uts"
/**
 * 错误主题
 * 注意:错误主题一般为插件名称,每个组件不同,需要使用时请更改。
 * [可选实现]
 */
export const UniErrorSubject = 'uts-api';
/**
 * 错误信息
 * @UniError
 * [可选实现]
 */
export const MyAPIErrors : Map<MyApiErrorCode, string> = new Map([
  /**
   * 错误码及对应的错误信息
   */
  [9010001, 'custom error mseeage1'],
  [9010002, 'custom error mseeage2'],
]);
/**
 * 错误对象实现
 */
export class MyApiFailImpl extends UniError implements MyApiFail {
  /**
   * 错误对象构造函数
   */
  constructor(errCode : MyApiErrorCode) {
    super();
    this.errSubject = UniErrorSubject;
    this.errCode = errCode;
    this.errMsg = MyAPIErrors.get(errCode) ?? "";
  }
}
uniapps/work-app/src/uni_modules/lgh-getbatteryinfo/utssdk/app-android/index.uts
@@ -1,5 +1,3 @@
// index.uts
// 引用android api
import Context from "android.content.Context";
import BatteryManager from "android.os.BatteryManager";