Merge branch 'master' into outside-the-system

# Conflicts:
#	config/index.js
#	manifest.json
#	unpackage/dist/build/app-plus/app-config-service.js
#	unpackage/dist/build/app-plus/app-service.js
#	unpackage/dist/build/app-plus/manifest.json
#	unpackage/dist/dev/app-plus/app-config-service.js
#	unpackage/dist/dev/app-plus/app-service.js
#	unpackage/dist/dev/app-plus/manifest.json
outside-the-system
xingyy 3 months ago
commit 00ff06e4d6

@ -4,22 +4,18 @@
"version" : "0.0", "version" : "0.0",
"configurations" : [ "configurations" : [
{ {
"app-plus" : { "app-plus" : {
"launchtype" : "local" "launchtype" : "local"
}, },
"default" : { "default" : {
"launchtype" : "local" "launchtype" : "local"
}, },
"h5" : {
"launchtype" : "local"
},
"provider" : "aliyun",
"type" : "uniCloud" "type" : "uniCloud"
}, },
{ {
"playground" : "custom", "playground" : "custom",
"type" : "uni-app:app-android" "type" : "uni-app:app-android"
}, },
{ {
"playground" : "custom", "playground" : "custom",
"type" : "uni-app:app-ios" "type" : "uni-app:app-ios"

@ -1,40 +1,16 @@
<script setup> <script>
import { onLaunch, onShow, onHide } from "@dcloudio/uni-app"; export default {
/* import location from "./utils/location"; */ onLaunch: function() {
onLaunch(() => { },
/* location.startLocationService((res)=>{ onShow: function() {
console.log(JSON.stringify(res),'JSON.stringify(res)'); console.log('App Show')
uni.showToast({ },
duration:1000, onHide: function() {
icon:'none', console.log('App Hide')
title:JSON.stringify(res) }
}) }
},()=>{
}) */
})
onShow(() => {
})
onHide(() => {
plus.geolocation.clearWatch(LocationId)
console.log("App Hide")
})
uni.getPushClientId({
success: (res) => {
let push_clientid = res.cid
console.log('客户端推送标识cid:',push_clientid)
},
fail(err) {
console.log(err)
}
})
uni.onPushMessage((res)=>{
console.log(JSON.stringify(res),);
})
</script> </script>
<style> <style>
/*每个页面公共css */
</style> </style>

@ -0,0 +1,36 @@
{
"version" : "1",
"prompt" : "template",
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“平台服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://oa.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并接受",
"buttonRefuse" : "不同意",
"second" : {
"title" : "确认提示",
"message" : "  进入应用前,你需先同意<a href=\"https://oa.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
"disagreeMode" : {
"support" : false,
"loadNativePlugins" : false,
"visitorEntry" : false,
"showAlways" : false
},
"styles" : {
"backgroundColor" : "#ffffff",
"borderRadius" : "5px",
"title" : {
"color" : "#000"
},
"buttonAccept" : {
"color" : "#000"
},
"buttonRefuse" : {
"color" : "#000"
},
"buttonVisitor" : {
"color" : "#009"
}
}
}

@ -1,25 +0,0 @@
/* 非空验证 */
const vefEmpty = (key,msg) => {
if (key === '' || key === undefined || key === null) {
uni.showToast({
title: msg,
duration: 2000,
icon: 'none'
});
return false
} else {
return true
}
}
const addZero = (num) => {
if (num < 10) {
num = `0${num}`;
}
return num;
};
export default {
vefEmpty,
addZero
}

@ -1,17 +1,22 @@
const env = 'dev'; const env = 'dev';
const configs = { const configs = {
LocalTest: {
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
h5Url:'http://192.168.88.53:8080/#/'
},
dev: { dev: {
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend', apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
h5Url: 'http://192.168.88.49:8080/#/' h5Url:'http://192.168.88.50:8080/#/'
}, },
test: { test: {
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend', apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
h5Url: 'http://114.218.158.24:9051/#/' h5Url:'http://114.218.158.24:8042/#/'
}, },
prod: { prod: {
apiBaseUrl: 'https://oa-b.szjixun.cn/#/', apiBaseUrl: 'https://oa-a.szjixun.cn/api',
h5Url: 'https://oa-b.szjixun.cn/#/' h5Url:'https://oa-a.szjixun.cn/#/'
}, },
} };
const config = configs[env]; const config = configs[env];
export default config; export default config;

@ -1,8 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0,viewport-fit=cover" /> <meta charset="UTF-8" />
<script> <script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script> </script>
<title></title> <title></title>
<!--preload-links--> <!--preload-links-->

@ -1,21 +1,15 @@
{ {
"name" : "泰丰考勤", "name" : "OA系统",
"appid" : "__UNI__4796942", "appid" : "__UNI__4796942",
"description" : "", "description" : "",
"versionName" : "1.0.0", "versionName" : "2.0.1",
"versionCode" : 100, "versionCode" : 201,
"transformPx" : false, "transformPx" : false,
/* 5+App */ /* 5+App */
"app-plus" : { "app-plus" : {
"usingComponents" : true, "usingComponents" : true,
"nvueStyleCompiler" : "uni-app", "nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3, "compilerVersion" : 3,
"statusbar" : {
"immersed" : true
},
"navigationbar" : {
"hidden" : true
},
"splashscreen" : { "splashscreen" : {
"alwaysShowBeforeRender" : true, "alwaysShowBeforeRender" : true,
"waiting" : true, "waiting" : true,
@ -25,7 +19,8 @@
/* */ /* */
"modules" : { "modules" : {
"Camera" : {}, "Camera" : {},
"Geolocation" : {} "Geolocation" : {},
"Push" : {}
}, },
/* */ /* */
"distribute" : { "distribute" : {
@ -88,6 +83,7 @@
"version" : "2", "version" : "2",
"offline" : true, "offline" : true,
"hms" : {}, "hms" : {},
"oppo" : {},
"vivo" : {} "vivo" : {}
} }
} }
@ -125,10 +121,19 @@
} }
}, },
"splashscreen" : { "splashscreen" : {
"useOriginalMsgbox" : true "useOriginalMsgbox" : true,
"androidStyle" : "default",
"android" : {
"hdpi" : "static/image/sy.png",
"xhdpi" : "static/image/sy.png",
"xxhdpi" : "static/image/sy.png"
},
"iosStyle" : "storyboard",
"ios" : {
"storyboard" : "files/CustomStoryboard.zip"
}
} }
}, }
"nativePlugins" : {}
}, },
/* */ /* */
"quickapp" : {}, "quickapp" : {},

@ -3,15 +3,16 @@
{ {
"path": "pages/index/index", "path": "pages/index/index",
"style": { "style": {
"navigationStyle": "custom", "navigationBarTitleText": "uni-app",
"navigationStyle": "custom"
"app-plus": {
"titleNView": false
}
} }
} }
], ],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {} "uniIdRouter": {}
} }

@ -0,0 +1,90 @@
<template>
<web-view class="webview" @message="webLoad" style="flex: 1;" ref="webViewRef" :src="config.h5Url"></web-view>
</template>
<script setup>
import { ref } from 'vue'
import config from "../../config";
import { onShow, onHide } from "@dcloudio/uni-app";
/* import location from "../../utils/location"; */
/* import {
registerRequestPermissionTipsListener,
unregisterRequestPermissionTipsListener,
setRequestPermissionTips
} from "@/uni_modules/uni-registerRequestPermissionTips" */
/* plus.runtime.setBadgeNumber(999); */
/* const permissionListener = uni.createRequestPermissionListener();
permissionListener.onRequest((e)=>{
})
permissionListener.onConfirm((e) => {
sendWebWiew(webViewRef.value,{auth:e,open:true})
});
permissionListener.onComplete((e) => {
/* uni.showToast({
duration:1000000,
title:`${JSON.stringify(e)}1111${JSON.stringify(f)}`,
icon:'none'
}) */
/* sendWebWiew(webViewRef.value,{auth:e,open:false})
}); *!/*/
/* registerRequestPermissionTipsListener({
onRequest: (e) => {
console.log(e)
},
onConfirm: (e) => {
sendWebWiew(webViewRef.value,{auth:e,open:true})
},
onComplete: (e) => {
const arr=['android.permission.ACCESS_COARSE_LOCATION','android.permission.ACCESS_FINE_LOCATION','android.permission.ACCESS_LOCATION_EXTRA_COMMANDS','android.permission.ACCESS_MOCK_LOCATION']
const hasIntersection = Object.keys(e).some(item => new Set(arr).has(item));
uni.setSt
sendWebWiew(webViewRef.value,{auth:Object.keys(e),open:false})
}
})*/
//iosh5
const networkStatusChange=(res)=>{
if(res.isConnected) {
uni.redirectTo({
url: '/pages/index/index'
})
} else {
uni.showToast({
title: '网络无连接',
icon: 'none'
})
}
}
const webViewObj=ref(null)
onShow(()=>{
uni.onNetworkStatusChange(networkStatusChange);
plus.push.getClientInfoAsync((info) => {
console.log('获取CID',info.clientid)
});
})
onHide(()=>{
uni.offNetworkStatusChange(networkStatusChange)
})
const webLoad=(e)=>{
const h5SendString=e.detail.data?.[0]?.action
switch (h5SendString) {
//webview
case 'load-complete':{
const {statusBarHeight} = uni.getSystemInfoSync()
const currentWebview = getCurrentPages().pop().$getAppWebview()
webViewObj.value=currentWebview.children()[0]
webViewObj.value.setStyle({
top: statusBarHeight,
bottom: 0,
})
}
}
}
</script>
<style>
</style>

@ -1,10 +0,0 @@
uni.addInterceptor({
returnValue (res) {
if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
return res;
}
return new Promise((resolve, reject) => {
res.then((res) => res[0] ? reject(res[0]) : resolve(res[1]));
});
},
});

@ -0,0 +1,6 @@
## 0.0.32022-11-11
- 修复 config 方法获取根节点为数组格式配置时错误的转化为了对象的Bug
## 0.0.22021-04-16
- 修改插件package信息
## 0.0.12021-03-15
- 初始化项目

@ -0,0 +1,81 @@
{
"id": "uni-config-center",
"displayName": "uni-config-center",
"version": "0.0.3",
"description": "uniCloud 配置中心",
"keywords": [
"配置",
"配置中心"
],
"repository": "",
"engines": {
"HBuilderX": "^3.1.0"
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "",
"type": "unicloud-template-function"
},
"directories": {
"example": "../../../scripts/dist"
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"App": {
"app-vue": "u",
"app-nvue": "u"
},
"H5-mobile": {
"Safari": "u",
"Android Browser": "u",
"微信浏览器(Android)": "u",
"QQ浏览器(Android)": "u"
},
"H5-pc": {
"Chrome": "u",
"IE": "u",
"Edge": "u",
"Firefox": "u",
"Safari": "u"
},
"小程序": {
"微信": "u",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",
"vue3": "u"
}
}
}
}
}

@ -0,0 +1,93 @@
# 为什么使用uni-config-center
实际开发中很多插件需要配置文件才可以正常运行,如果每个插件都单独进行配置的话就会产生下面这样的目录结构
```bash
cloudfunctions
└─────common 公共模块
├─plugin-a // 插件A对应的目录
│ ├─index.js
│ ├─config.json // plugin-a对应的配置文件
│ └─other-file.cert // plugin-a依赖的其他文件
└─plugin-b // plugin-b对应的目录
├─index.js
└─config.json // plugin-b对应的配置文件
```
假设插件作者要发布一个项目模板,里面使用了很多需要配置的插件,无论是作者发布还是用户使用都是一个大麻烦。
uni-config-center就是用了统一管理这些配置文件的使用uni-config-center后的目录结构如下
```bash
cloudfunctions
└─────common 公共模块
├─plugin-a // 插件A对应的目录
│ └─index.js
├─plugin-b // plugin-b对应的目录
│ └─index.js
└─uni-config-center
├─index.js // config-center入口文件
├─plugin-a
│ ├─config.json // plugin-a对应的配置文件
│ └─other-file.cert // plugin-a依赖的其他文件
└─plugin-b
└─config.json // plugin-b对应的配置文件
```
使用uni-config-center后的优势
- 配置文件统一管理,分离插件主体和配置信息,更新插件更方便
- 支持对config.json设置schema插件使用者在HBuilderX内编写config.json文件时会有更好的提示后续HBuilderX会提供支持
# 用法
在要使用uni-config-center的公共模块或云函数内引入uni-config-center依赖请参考[使用公共模块](https://uniapp.dcloud.net.cn/uniCloud/cf-common)
```js
const createConfig = require('uni-config-center')
const uniIdConfig = createConfig({
pluginId: 'uni-id', // 插件id
defaultConfig: { // 默认配置
tokenExpiresIn: 7200,
tokenExpiresThreshold: 600,
},
customMerge: function(defaultConfig, userConfig) { // 自定义默认配置和用户配置的合并规则,不设置的情况侠会对默认配置和用户配置进行深度合并
// defaudltConfig 默认配置
// userConfig 用户配置
return Object.assign(defaultConfig, userConfig)
}
})
// 以如下配置为例
// {
// "tokenExpiresIn": 7200,
// "passwordErrorLimit": 6,
// "bindTokenToDevice": false,
// "passwordErrorRetryTime": 3600,
// "app-plus": {
// "tokenExpiresIn": 2592000
// },
// "service": {
// "sms": {
// "codeExpiresIn": 300
// }
// }
// }
// 获取配置
uniIdConfig.config() // 获取全部配置注意uni-config-center内不存在对应插件目录时会返回空对象
uniIdConfig.config('tokenExpiresIn') // 指定键值获取配置返回7200
uniIdConfig.config('service.sms.codeExpiresIn') // 指定键值获取配置返回300
uniIdConfig.config('tokenExpiresThreshold', 600) // 指定键值获取配置如果不存在则取传入的默认值返回600
// 获取文件绝对路径
uniIdConfig.resolve('custom-token.js') // 获取uni-config-center/uni-id/custom-token.js文件的路径
// 引用文件require
uniIDConfig.requireFile('custom-token.js') // 使用require方式引用uni-config-center/uni-id/custom-token.js文件。文件不存在时返回undefined文件内有其他错误导致require失败时会抛出错误。
// 判断是否包含某文件
uniIDConfig.hasFile('custom-token.js') // 配置目录是否包含某文件true: 文件存在false: 文件不存在
```

@ -0,0 +1,9 @@
{
"name": "uni-config-center",
"version": "0.0.3",
"description": "配置中心",
"main": "index.js",
"keywords": [],
"author": "DCloud",
"license": "Apache-2.0"
}

@ -0,0 +1,34 @@
## 1.0.172024-04-26
- 兼容uni-app-x对客户端uniPlatform的调整uni-app-x内uniPlatform区分app-android、app-ios
## 1.0.162023-04-25
- 新增maxTokenLength配置用于限制数据库用户记录token数组的最大长度
## 1.0.152023-04-06
- 修复部分语言国际化出错的Bug
## 1.0.142023-03-07
- 修复 admin用户包含其他角色时未包含在token的Bug
## 1.0.132022-07-21
- 修复 创建token时未传角色权限信息生成的token不正确的bug
## 1.0.122022-07-15
- 提升与旧版本uni-id的兼容性补充读取配置文件时回退平台app-plus、h5但是仍推荐使用新平台名进行配置app、web
## 1.0.112022-07-14
- 修复 部分情况下报`read property 'reduce' of undefined`的错误
## 1.0.102022-07-11
- 将token存储在用户表的token字段内与旧版本uni-id保持一致
## 1.0.92022-07-01
- checkToken兼容token内未缓存角色权限的情况此时将查库获取角色权限
## 1.0.82022-07-01
- 修复clientDB默认依赖时部分情况下获取不到uni-id配置的Bug
## 1.0.72022-06-30
- 修复config文件不合法时未抛出具体错误的Bug
## 1.0.62022-06-28
- 移除插件内的数据表schema
## 1.0.52022-06-27
- 修复使用多应用配置时报`Cannot read property 'appId' of undefined`的Bug
## 1.0.42022-06-27
- 修复使用自定义token内容功能报错的Bug [详情](https://ask.dcloud.net.cn/question/147945)
## 1.0.22022-06-23
- 对齐旧版本uni-id默认配置
## 1.0.12022-06-22
- 补充对uni-config-center的依赖
## 1.0.02022-06-21
- 提供uni-id token创建、校验、刷新接口简化旧版uni-id公共模块

@ -0,0 +1,85 @@
{
"id": "uni-id-common",
"displayName": "uni-id-common",
"version": "1.0.17",
"description": "包含uni-id token生成、校验、刷新功能的云函数公共模块",
"keywords": [
"uni-id-common",
"uniCloud",
"token",
"权限"
],
"repository": "https://gitcode.net/dcloud/uni-id-common",
"engines": {
"HBuilderX": "^3.1.0"
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "",
"type": "unicloud-template-function"
},
"uni_modules": {
"dependencies": ["uni-config-center"],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "n"
},
"client": {
"Vue": {
"vue2": "u",
"vue3": "u"
},
"App": {
"app-vue": "u",
"app-nvue": "u"
},
"H5-mobile": {
"Safari": "u",
"Android Browser": "u",
"微信浏览器(Android)": "u",
"QQ浏览器(Android)": "u"
},
"H5-pc": {
"Chrome": "u",
"IE": "u",
"Edge": "u",
"Firefox": "u",
"Safari": "u"
},
"小程序": {
"微信": "u",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u",
"钉钉": "u",
"快手": "u",
"飞书": "u",
"京东": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
}
}
}
}
}

@ -0,0 +1,3 @@
# uni-id-common
文档请参考:[uni-id-common](https://uniapp.dcloud.net.cn/uniCloud/uni-id-common.html)

File diff suppressed because one or more lines are too long

@ -0,0 +1,16 @@
{
"name": "uni-id-common",
"version": "1.0.17",
"description": "uni-id token生成、校验、刷新",
"main": "index.js",
"homepage": "https://uniapp.dcloud.io/uniCloud/uni-id-common.html",
"repository": {
"type": "git",
"url": "git+https://gitee.com/dcloud/uni-id-common.git"
},
"author": "DCloud",
"license": "Apache-2.0",
"dependencies": {
"uni-config-center": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
}
}

@ -0,0 +1,2 @@
## 1.0.02024-03-09
支持全局监听权限申请。当申请权限时,会在页面顶部显示申请权限的目的。

@ -0,0 +1,114 @@
{
"id": "uni-registerRequestPermissionTips",
"displayName": "uni-registerRequestPermissionTips",
"version": "1.0.0",
"description": "支持android平台全局监听权限的申请。当申请权限时会在页面顶部显示申请权限的目的。主要解决上架华为应用市场审核要求APP在调用终端权限时应同步告知用户申请该权限的目的。",
"keywords": [
"权限",
"权限申请",
"上架",
"华为"
],
"repository": "",
"engines": {
"HBuilderX": "^4.0"
},
"dcloudext": {
"type": "uts",
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": ""
},
"uni_modules": {
"dependencies": [
],
"uni-ext-api": {
"uni": {
"registerRequestPermissionTipsListener": {
"name": "registerRequestPermissionTipsListener",
"app": {
"js": false,
"kotlin": true,
"swift": false
}
},
"unregisterRequestPermissionTipsListener": {
"name": "unregisterRequestPermissionTipsListener",
"app": {
"js": false,
"kotlin": true,
"swift": false
}
},
"setRequestPermissionTips": {
"name": "setRequestPermissionTips",
"app": {
"js": false,
"kotlin": true,
"swift": false
}
}
}
},
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "y"
},
"client": {
"Vue": {
"vue2": "y",
"vue3": "y"
},
"App": {
"app-android": "y",
"app-ios": "n"
},
"H5-mobile": {
"Safari": "n",
"Android Browser": "n",
"微信浏览器(Android)": "n",
"QQ浏览器(Android)": "n"
},
"H5-pc": {
"Chrome": "n",
"IE": "n",
"Edge": "n",
"Firefox": "n",
"Safari": "n"
},
"小程序": {
"微信": "n",
"阿里": "n",
"百度": "n",
"字节跳动": "n",
"QQ": "n",
"钉钉": "n",
"快手": "n",
"飞书": "n",
"京东": "n"
},
"快应用": {
"华为": "n",
"联盟": "n"
}
}
}
}
}

@ -0,0 +1,95 @@
## registerRequestPermissionTipsListener(listener?)
注册权限监听事件
## unregisterRequestPermissionTipsListener(listener?)
取消注册权限监听事件
## RequestPermissionTipsListener的属性值
|名称 |类型 |描述 |必填 |
|:-- |:-- |:-- |:-- |
|onRequest |(permissions:Array<string>)=>void |申请系统权限回调permissions为触发权限申请的所有权限 |否 |
|onConfirm |(permissions:Array<string>)=>void |弹出系统权限授权框回调permissions为触发弹出权限授权框的所有权限 |否 |
|onComplete |(permissions:UTSJSONObject)=>void |权限申请完成回调permissions包括权限及权限的状态。`grant`为权限已获取,`denied`为权限已拒绝 |否 |
## setRequestPermissionTips(UTSJSONObject)
设置权限监听的说明。支持针对权限设置具体的说明。
参考:`{"android.permission.CAMERA":"<p>相机权限申请说明</p>"}`
安卓权限列表可参考[谷歌官方文档](https://developer.android.com/reference/android/Manifest.permission)。
权限申请说明基于原生TextView实现可以实现加载html内容支持的标签及属性可参考
```
<b><strong>:加粗文本。
<i><em>:斜体文本。
<u>:下划线文本。
<sup>:上标文本。
<sub>:下标文本。
<tt>:等宽字体文本。
<big>:放大字体。
<small>:缩小字体。
<strike><s><del>:带有删除线的文本。
<p>:段落。
<div>:块级容器。
<h1><h2><h3><h4><h5><h6>:区域标题元素。
<ul>, <ol>, <li>:无序列表和有序列表。
<br>:换行。
<font color="..."><font size="...">:设置文本颜色和大小。
```
## 示例
```
<script>
import {
registerRequestPermissionTipsListener,
unregisterRequestPermissionTipsListener,
setRequestPermissionTips
} from "@/uni_modules/uni-registerRequestPermissionTips"
var PermissionTips = {
"android.permission.CAMERA": "<h4 style=\"font-size:40px;\">正在读取通讯录权限</h4><font color=#cccccc>通讯录权限不会获取任何信息,请注意</font>",
"android.permission.READ_PHONE_STATE": "<h4 style=\"font-size:40px;\">正在读取网络状态权限</h4><font color=#cccccc>通讯录权限不会获取任何信息,请注意通讯录权限不会获取任何信息,请注意通讯录权限不会获取任何信息,请注意</font>"
}
export default {
onLaunch: function() {
var brand = uni.getSystemInfoSync().deviceBrand
setRequestPermissionTips(PermissionTips)
registerRequestPermissionTipsListener({
onRequest: (e) => {
console.log(e)
},
onConfirm: (e) => {
console.log(e)
},
onComplete: (e) => {
// 华为手机在权限禁止之后,再次申请权限不会出现权限申请框。此时应该引导用户去系统设置开启此权限,不应该频繁申请。
if (brand.toLowerCase() == "huawei") {
var tips = {}
var hasDeniedPermission = false
for (var k in PermissionTips) {
if (e[k] != "denied") {
tips[k] = PermissionTips[k]
} else {
hasDeniedPermission = true
}
}
setRequestPermissionTips(tips) // 更新弹框提醒,防止华为手机不出现权限申请框时权限提醒框闪烁的情况
if (hasDeniedPermission)
uni.showModal({
content: "权限已经被拒绝,请前往设置中开启"
})
}
}
})
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
},
onExit: function() {
unregisterRequestPermissionTipsListener(null)
}
}
</script>
```

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="io.dcloud.uts.permissionrequest">
</manifest>

@ -0,0 +1,115 @@
import { UnregisterRequestPermissionTipsListener, RegisterRequestPermissionTipsListener, RequestPermissionTipsListener, SetRequestPermissionTips } from "../interface";
import RelativeLayout from 'android.widget.RelativeLayout';
import LinearLayout from 'android.widget.LinearLayout';
import Color from 'android.graphics.Color';
import TextView from 'android.widget.TextView';
import ViewGroup from 'android.view.ViewGroup';
import Activity from 'android.app.Activity';
import HashMap from 'java.util.HashMap';
import AnimationUtils from 'android.view.animation.AnimationUtils';
import R from 'io.dcloud.uts.permissionrequest.R'
import Html from 'android.text.Html';
import View from 'android.view.View';
let PermissionTipsView : View | null = null
let permissionTips : HashMap<String, String> = new HashMap<String, String>()
var permissionListener : RequestPermissionListener | null = null
var listener : RequestPermissionTipsListener | null = null
export const unregisterRequestPermissionTipsListener : UnregisterRequestPermissionTipsListener = (l : RequestPermissionTipsListener | null) => {
listener = null;
if (permissionListener != null) {
permissionListener!.stop()
permissionListener = null
}
if (PermissionTipsView != null) {
if (PermissionTipsView!.getParent() != null) {
PermissionTipsView!.setAnimation(null);
((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView)
}
PermissionTipsView = null
}
}
export const registerRequestPermissionTipsListener : RegisterRequestPermissionTipsListener = (l : RequestPermissionTipsListener | null) => {
listener = l
if (permissionListener == null) {
permissionListener = uni.createRequestPermissionListener()
permissionListener!.onRequest((permissions : Array<string>) => {
if (listener != null)
listener!.onRequest?.invoke(permissions)
})
permissionListener!.onConfirm((permissions : Array<string>) => {
let activity = UTSAndroid.getUniActivity()!
if (PermissionTipsView != null && PermissionTipsView!.getParent() != null) {
PermissionTipsView!.setAnimation(null);
((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView)
}
if (permissions.length > 0) {
PermissionTipsView = createPermissionWindow(activity, permissions);
if (PermissionTipsView != null) {
(activity.findViewById(android.R.id.content) as ViewGroup).addView(PermissionTipsView!)
}
}
if (listener != null)
listener!.onConfirm?.invoke(permissions)
})
permissionListener!.onComplete((permissions : Array<string>) => {
// clearTimeout(timeoutRequestId)
let activity = UTSAndroid.getUniActivity()!
if (PermissionTipsView != null) {
PermissionTipsView!.setAnimation(AnimationUtils.loadAnimation(activity, R.anim.popupwindow_exit));
((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView!)
PermissionTipsView = null
}
if (listener != null) {
var permissionStatus = {}
for (var p in permissions) {
permissionStatus[p] = UTSAndroid.checkSystemPermissionGranted(UTSAndroid.getUniActivity()!, [p]) ? "grant" : "denied"
}
listener!.onComplete?.invoke(permissionStatus)
}
})
}
}
export const setRequestPermissionTips : SetRequestPermissionTips = (tips : UTSJSONObject) => {
permissionTips.clear()
for (var k in tips) {
permissionTips.put(k, tips[k] != null ? tips[k].toString() : "")
}
}
function createPermissionWindow(activity : Activity, permissions : Array<string>) : ViewGroup | null {
let rootView = new RelativeLayout(activity);
rootView.setBackgroundColor(Color.TRANSPARENT);
let backgroundView = new LinearLayout(activity);
backgroundView.setPadding(30, 0, 30, 30);
backgroundView.setOrientation(1)
backgroundView.setBackgroundResource(R.drawable.dcloud_permission_background);
let permissionTipsList : Array<string> = new Array<string>()
for (var p in permissions) {
if (permissionTips.containsKey(p) && permissionTipsList.indexOf(permissionTips.get(p)) == -1) {
permissionTipsList.push(permissionTips.get(p)!)
}
}
for (var p in permissionTipsList) {
let text = new TextView(activity);
text.setText(Html.fromHtml(p, Html.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING))
text.setPadding(0, 30, 0, 0)
text.setTextSize((5 * UTSAndroid.getScale()).toFloat())
text.setTextColor(Color.BLACK)
backgroundView.addView(text)
}
if (backgroundView.getChildCount() == 0) {
return null;
}
let rll = new RelativeLayout.LayoutParams(-1, -2)
rll.topMargin = (UTSAndroid.getStatusBarHeight() * UTSAndroid.getScale()).toInt();
rll.leftMargin = 30;
rll.rightMargin = 30;
rll.bottomMargin = 30;
rootView.addView(backgroundView, rll)
rootView.setAnimation(AnimationUtils.loadAnimation(activity, R.anim.popupwindow_enter));
return rootView;
}

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromYDelta="-100%"
android:toYDelta="0" >
</translate>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromYDelta="0"
android:toYDelta="-100%" />

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners android:radius="8dp" />
<!-- <stroke android:color="@color/black" android:width="2dp"/>-->
<solid android:color="#ffffff"/>
</shape>

@ -0,0 +1,19 @@
export type RequestPermissionTipsListener = {
onRequest ?: ((permissions : Array<string>) => void) | null,
onConfirm ?: ((permission : Array<string>) => void) | null,
onComplete ?: ((permissions : UTSJSONObject) => void) | null
}
export type RegisterRequestPermissionTipsListener = (listener : RequestPermissionTipsListener | null) => void
export type UnregisterRequestPermissionTipsListener = (listener : RequestPermissionTipsListener | null) => void
export type SetRequestPermissionTips = (tips : UTSJSONObject) => void
export interface Uni {
registerRequestPermissionTipsListener : RegisterRequestPermissionTipsListener,
unregisterRequestPermissionTipsListener : UnregisterRequestPermissionTipsListener
setRequestPermissionTips : SetRequestPermissionTips
}

@ -0,0 +1,30 @@
[appleAppid]
appleAppid=com.fonchain.attendance
[appstore]
appstore=70695af7d1a0be20d1ba633bf98ec76e
[iosStyle]
iosStyle=storyboard
[universalLinks]
universalLinks=
spaceid=
[universalLinks_qq]
universalLinks_qq=
spaceid_qq=
[universalLinks_weibo]
universalLinks_weibo=
spaceid_weibo=
[iphone]
app%402x=efbc54bca681a68f352e357693dd0adc
app%403x=07cc7fe6568729d8260f2ea5400cdb1c
notification%402x=6dab6ded0ca82920d3ae1cf618bc07ca
notification%403x=8b4f295e9144a8e30070a2b64c5593bb
settings%402x=4291cf8010e170f83b69d002111be23b
settings%403x=94c1b4514f88af3d1cc1f496471c16b3
spotlight%402x=7862b7a531181221e609694960355fd3
spotlight%403x=efbc54bca681a68f352e357693dd0adc

@ -0,0 +1,3 @@
iosProfile=D:/WebstormProjects/oa-base/files/ios/oa_dev_20240104.mobileprovision
ioscertFile=D:/WebstormProjects/oa-base/files/ios/20230714_dev.p12
ioscertPassword=uecGPNMV8s+KLcdEgW/MRg==

@ -0,0 +1 @@
{"dir":"/Users/seaman/srv/bdserver.dcloud.net.cn/service/storage/app/package/IOS/queue/b87978d0-38da-11ef-862d-698846b5d25e/wgtRoot/__UNI__4796942/"}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>View</title>
<link rel="stylesheet" href="app.css" />
<script>var __uniConfig = {"globalStyle":{},"darkmode":false}</script>
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
</head>
<body>
<div id="app"></div>
<script src="uni-app-view.umd.js"></script>
</body>
</html>

@ -0,0 +1,36 @@
{
"version" : "1",
"prompt" : "template",
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“平台服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://oa.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并接受",
"buttonRefuse" : "不同意",
"second" : {
"title" : "确认提示",
"message" : "  进入应用前,你需先同意<a href=\"https://oa.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
"disagreeMode" : {
"support" : false,
"loadNativePlugins" : false,
"visitorEntry" : false,
"showAlways" : false
},
"styles" : {
"backgroundColor" : "#ffffff",
"borderRadius" : "5px",
"title" : {
"color" : "#000"
},
"buttonAccept" : {
"color" : "#000"
},
"buttonRefuse" : {
"color" : "#000"
},
"buttonVisitor" : {
"color" : "#009"
}
}
}

@ -0,0 +1,11 @@
;(function(){
let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"OA系统","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.15","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}};
const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"navigationBar":{"titleText":"uni-app","style":"custom","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
__uniConfig.styles=[];//styles
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:16})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,global:u,window:u,document:u,frames:u,self:u,location:u,navigator:u,localStorage:u,history:u,Caches:u,screen:u,alert:u,confirm:u,prompt:u,fetch:u,XMLHttpRequest:u,WebSocket:u,webkit:u,print:u}}}});
})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

@ -4,7 +4,8 @@ var __commonJS = (cb, mod) => function __require() {
}; };
var require_app_css = __commonJS({ var require_app_css = __commonJS({
"app.css.js"(exports) { "app.css.js"(exports) {
exports.styles = []; const _style_0 = {};
exports.styles = [_style_0];
} }
}); });
export default require_app_css(); export default require_app_css();

@ -0,0 +1,36 @@
{
"version" : "1",
"prompt" : "template",
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“平台服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://oa.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并接受",
"buttonRefuse" : "不同意",
"second" : {
"title" : "确认提示",
"message" : "  进入应用前,你需先同意<a href=\"https://oa.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
"disagreeMode" : {
"support" : false,
"loadNativePlugins" : false,
"visitorEntry" : false,
"showAlways" : false
},
"styles" : {
"backgroundColor" : "#ffffff",
"borderRadius" : "5px",
"title" : {
"color" : "#000"
},
"buttonAccept" : {
"color" : "#000"
},
"buttonRefuse" : {
"color" : "#000"
},
"buttonVisitor" : {
"color" : "#009"
}
}
}

@ -1,8 +1,8 @@
;(function(){ ;(function(){
let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[]; let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
const __uniConfig = {"pages":[],"globalStyle":{"navigationBar":{},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"泰丰考勤","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.15","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}}; const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"OA系统","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.15","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}};
const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"titleNView":false,"navigationBar":{"style":"custom","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute)); const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"navigationBar":{"titleText":"uni-app","style":"custom","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
__uniConfig.styles=[];//styles __uniConfig.styles=[];//styles
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); __uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); __uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});

File diff suppressed because one or more lines are too long

@ -5,10 +5,10 @@
"iPad" "iPad"
], ],
"id": "__UNI__4796942", "id": "__UNI__4796942",
"name": "泰丰考勤", "name": "OA系统",
"version": { "version": {
"name": "1.0.0", "name": "2.0.1",
"code": 100 "code": 201
}, },
"description": "", "description": "",
"developer": { "developer": {
@ -19,6 +19,7 @@
"permissions": { "permissions": {
"Camera": {}, "Camera": {},
"Geolocation": {}, "Geolocation": {},
"Push": {},
"UniNView": { "UniNView": {
"description": "UniNView原生渲染" "description": "UniNView原生渲染"
} }
@ -43,14 +44,6 @@
"usingComponents": true, "usingComponents": true,
"nvueStyleCompiler": "uni-app", "nvueStyleCompiler": "uni-app",
"compilerVersion": 3, "compilerVersion": 3,
"statusbar": {
"immersed": "supportedDevice",
"style": "dark",
"background": "#000000"
},
"navigationbar": {
"hidden": true
},
"distribute": { "distribute": {
"icons": { "icons": {
"android": { "android": {
@ -85,7 +78,17 @@
} }
}, },
"splashscreen": { "splashscreen": {
"useOriginalMsgbox": true "useOriginalMsgbox": true,
"androidStyle": "default",
"android": {
"hdpi": "static/image/sy.png",
"xhdpi": "static/image/sy.png",
"xxhdpi": "static/image/sy.png"
},
"iosStyle": "storyboard",
"ios": {
"storyboard": "files/CustomStoryboard.zip"
}
}, },
"google": { "google": {
"permissions": [ "permissions": [
@ -152,6 +155,7 @@
"version": "2", "version": "2",
"offline": true, "offline": true,
"hms": {}, "hms": {},
"oppo": {},
"vivo": {} "vivo": {}
} }
}, },
@ -162,7 +166,11 @@
} }
} }
}, },
"nativePlugins": {}, "statusbar": {
"immersed": "supportedDevice",
"style": "dark",
"background": "#F8F8F8"
},
"uniStatistics": { "uniStatistics": {
"enable": false "enable": false
}, },

@ -0,0 +1,8 @@
{
"hash": "fd84dcc1",
"configHash": "8979c8e1",
"lockfileHash": "e3b0c442",
"browserHash": "4c910bc0",
"optimized": {},
"chunks": {}
}

@ -0,0 +1,3 @@
{
"type": "module"
}

@ -4,7 +4,8 @@ var __commonJS = (cb, mod) => function __require() {
}; };
var require_app_css = __commonJS({ var require_app_css = __commonJS({
"app.css.js"(exports) { "app.css.js"(exports) {
exports.styles = []; const _style_0 = {};
exports.styles = [_style_0];
} }
}); });
export default require_app_css(); export default require_app_css();

@ -0,0 +1,36 @@
{
"version" : "1",
"prompt" : "template",
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“平台服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://oa.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并接受",
"buttonRefuse" : "不同意",
"second" : {
"title" : "确认提示",
"message" : "  进入应用前,你需先同意<a href=\"https://oa.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
"disagreeMode" : {
"support" : false,
"loadNativePlugins" : false,
"visitorEntry" : false,
"showAlways" : false
},
"styles" : {
"backgroundColor" : "#ffffff",
"borderRadius" : "5px",
"title" : {
"color" : "#000"
},
"buttonAccept" : {
"color" : "#000"
},
"buttonRefuse" : {
"color" : "#000"
},
"buttonVisitor" : {
"color" : "#009"
}
}
}

@ -1,8 +1,8 @@
;(function(){ ;(function(){
let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[]; let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
const __uniConfig = {"pages":[],"globalStyle":{"navigationBar":{},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"泰丰考勤","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.15","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}}; const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"OA系统","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.15","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}};
const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"titleNView":false,"navigationBar":{"style":"custom","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute)); const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"navigationBar":{"titleText":"uni-app","style":"custom","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
__uniConfig.styles=[];//styles __uniConfig.styles=[];//styles
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); __uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); __uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});

@ -33,8 +33,6 @@ if (uni.restoreGlobal) {
"use strict"; "use strict";
const ON_SHOW = "onShow"; const ON_SHOW = "onShow";
const ON_HIDE = "onHide"; const ON_HIDE = "onHide";
const ON_LAUNCH = "onLaunch";
const ON_LOAD = "onLoad";
function formatAppLog(type, filename, ...args) { function formatAppLog(type, filename, ...args) {
if (uni.__log__) { if (uni.__log__) {
uni.__log__(type, filename, ...args); uni.__log__(type, filename, ...args);
@ -47,28 +45,26 @@ if (uni.restoreGlobal) {
}; };
const onShow = /* @__PURE__ */ createHook(ON_SHOW); const onShow = /* @__PURE__ */ createHook(ON_SHOW);
const onHide = /* @__PURE__ */ createHook(ON_HIDE); const onHide = /* @__PURE__ */ createHook(ON_HIDE);
const onLaunch = /* @__PURE__ */ createHook(ON_LAUNCH);
const onLoad = /* @__PURE__ */ createHook(ON_LOAD);
const env = "dev"; const env = "dev";
const configs = { const configs = {
LocalTest: {
apiBaseUrl: "https://warehouse.szjixun.cn/oa_backend",
h5Url: "http://192.168.88.53:8080/#/"
},
dev: { dev: {
apiBaseUrl: "https://warehouse.szjixun.cn/oa_backend", apiBaseUrl: "https://warehouse.szjixun.cn/oa_backend",
h5Url: "http://192.168.88.49:8080/#/" h5Url: "http://192.168.88.50:8080/#/"
}, },
test: { test: {
apiBaseUrl: "https://warehouse.szjixun.cn/oa_backend", apiBaseUrl: "https://warehouse.szjixun.cn/oa_backend",
h5Url: "http://114.218.158.24:9051/#/" h5Url: "http://114.218.158.24:8042/#/"
}, },
prod: { prod: {
apiBaseUrl: "https://oa-b.szjixun.cn/#/", apiBaseUrl: "https://oa-a.szjixun.cn/api",
h5Url: "https://oa-b.szjixun.cn/#/" h5Url: "https://oa-a.szjixun.cn/#/"
} }
}; };
const config = configs[env]; const config = configs[env];
const receiveWebView = (e2) => {
return e2.detail.data[0];
};
uni;
const _export_sfc = (sfc, props) => { const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc; const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) { for (const [key, val] of props) {
@ -79,8 +75,6 @@ if (uni.restoreGlobal) {
const _sfc_main$1 = { const _sfc_main$1 = {
__name: "index", __name: "index",
setup(__props) { setup(__props) {
const webViewRef = vue.ref(null);
uni.getSystemInfoSync();
const networkStatusChange = (res) => { const networkStatusChange = (res) => {
if (res.isConnected) { if (res.isConnected) {
uni.redirectTo({ uni.redirectTo({
@ -94,40 +88,26 @@ if (uni.restoreGlobal) {
} }
}; };
const webViewObj = vue.ref(null); const webViewObj = vue.ref(null);
onLoad(() => {
});
onShow(() => { onShow(() => {
uni.onNetworkStatusChange(networkStatusChange); uni.onNetworkStatusChange(networkStatusChange);
plus.push.getClientInfoAsync((info) => {
formatAppLog("log", "at pages/index/index.vue:62", "获取CID", info.clientid);
});
}); });
onHide(() => { onHide(() => {
uni.offNetworkStatusChange(networkStatusChange); uni.offNetworkStatusChange(networkStatusChange);
}); });
const webLoad = (e2) => { const webLoad = (e2) => {
const m2 = receiveWebView(e2); var _a, _b;
switch (m2.action) { const h5SendString = (_b = (_a = e2.detail.data) == null ? void 0 : _a[0]) == null ? void 0 : _b.action;
switch (h5SendString) {
case "load-complete": { case "load-complete": {
const currentWebview = getCurrentPages().at(-1).$getAppWebview(); const { statusBarHeight } = uni.getSystemInfoSync();
const currentWebview = getCurrentPages().pop().$getAppWebview();
webViewObj.value = currentWebview.children()[0]; webViewObj.value = currentWebview.children()[0];
let statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
webViewObj.value.setStyle({ webViewObj.value.setStyle({
//设置web-view距离顶部的距离以及自己的高度单位为px
top: statusBarHeight, top: statusBarHeight,
//此处是距离顶部的高度,应该是你页面的头部
bottom: 0 bottom: 0
//webview的高度
});
const systemInfo = uni.getSystemInfoSync();
uni.getLocation({
type: "gcj02",
geocode: false,
isHighAccuracy: false,
success: async (res) => {
const jsonString = JSON.stringify({ ...res, systemInfo });
webViewObj.value.evalJS(`window.onReceive(${jsonString})`);
},
fail: (e3) => {
formatAppLog("log", "at pages/index/index.vue:111", e3);
}
}); });
} }
} }
@ -137,8 +117,7 @@ if (uni.restoreGlobal) {
class: "webview", class: "webview",
onMessage: webLoad, onMessage: webLoad,
style: { "flex": "1" }, style: { "flex": "1" },
ref_key: "webViewRef", ref: "webViewRef",
ref: webViewRef,
src: vue.unref(config).h5Url src: vue.unref(config).h5Url
}, null, 40, ["src"]); }, null, 40, ["src"]);
}; };
@ -146,31 +125,51 @@ if (uni.restoreGlobal) {
}; };
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__file", "D:/WebstormProjects/oa-base/pages/index/index.vue"]]); const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__file", "D:/WebstormProjects/oa-base/pages/index/index.vue"]]);
__definePage("pages/index/index", PagesIndexIndex); __definePage("pages/index/index", PagesIndexIndex);
const _sfc_main = { function initPushNotification() {
__name: "App", if (typeof plus !== "undefined" && plus.push) {
setup(__props) { plus.globalEvent.addEventListener("newPath", ({ path }) => {
onLaunch(() => { if (!path) {
}); return;
onShow(() => {
});
onHide(() => {
plus.geolocation.clearWatch(LocationId);
formatAppLog("log", "at App.vue:23", "App Hide");
});
uni.getPushClientId({
success: (res) => {
let push_clientid = res.cid;
formatAppLog("log", "at App.vue:28", "客户端推送标识cid:", push_clientid);
},
fail(err) {
formatAppLog("log", "at App.vue:31", err);
} }
const pages2 = getCurrentPages();
const currentPage = pages2[pages2.length - 1];
if (currentPage && currentPage.$page && currentPage.$page.fullPath === path) {
return;
}
uni.navigateTo({
url: path,
fail(res) {
if (res.errMsg.indexOf("tabbar") > -1) {
uni.switchTab({
url: path,
fail(res2) {
console.error(res2.errMsg);
}
});
} else {
console.error(res.errMsg);
}
}
});
}); });
uni.onPushMessage((res) => { }
formatAppLog("log", "at App.vue:35", JSON.stringify(res)); }
}); uni.invokePushCallback({
return () => { type: "enabled",
}; offline: true
});
Promise.resolve().then(() => {
initPushNotification();
plus.push.setAutoNotification && plus.push.setAutoNotification(false);
});
const _sfc_main = {
onLaunch: function() {
},
onShow: function() {
formatAppLog("log", "at App.vue:6", "App Show");
},
onHide: function() {
formatAppLog("log", "at App.vue:9", "App Hide");
} }
}; };
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/WebstormProjects/oa-base/App.vue"]]); const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/WebstormProjects/oa-base/App.vue"]]);
@ -178,16 +177,21 @@ if (uni.restoreGlobal) {
{ {
path: "pages/index/index", path: "pages/index/index",
style: { style: {
navigationStyle: "custom", navigationBarTitleText: "uni-app",
"app-plus": { navigationStyle: "custom"
titleNView: false
}
} }
} }
]; ];
const globalStyle = {
navigationBarTextStyle: "black",
navigationBarTitleText: "uni-app",
navigationBarBackgroundColor: "#F8F8F8",
backgroundColor: "#F8F8F8"
};
const uniIdRouter = {}; const uniIdRouter = {};
const e = { const e = {
pages, pages,
globalStyle,
uniIdRouter uniIdRouter
}; };
var define_process_env_UNI_SECURE_NETWORK_CONFIG_default = []; var define_process_env_UNI_SECURE_NETWORK_CONFIG_default = [];
@ -479,7 +483,7 @@ if (uni.restoreGlobal) {
function I(e2) { function I(e2) {
return e2 && "string" == typeof e2 ? JSON.parse(e2) : e2; return e2 && "string" == typeof e2 ? JSON.parse(e2) : e2;
} }
const S = true, b = "app", A = I(define_process_env_UNI_SECURE_NETWORK_CONFIG_default), P = b, T = I('{\n "address": [\n "127.0.0.1",\n "192.168.56.1",\n "192.168.88.49"\n ],\n "debugPort": 9000,\n "initialLaunchType": "local",\n "servePort": 7000,\n "skipFiles": [\n "<node_internals>/**",\n "C:/Users/37363/Downloads/HBuilderX.4.08.2024040127/HBuilderX/plugins/unicloud/**/*.js"\n ]\n}\n'), C = I('[{"provider":"aliyun","spaceName":"oabase","spaceId":"mp-edf38b0d-bc9a-4e81-9a15-f55995ccca70","clientSecret":"ty1X79FB2pMuAQUzaQBKXA==","endpoint":"https://api.next.bspapp.com"}]') || []; const S = true, b = "app", A = I(define_process_env_UNI_SECURE_NETWORK_CONFIG_default), P = b, T = I('{\n "address": [\n "127.0.0.1",\n "192.168.56.1",\n "192.168.88.50"\n ],\n "debugPort": 9000,\n "initialLaunchType": "local",\n "servePort": 7000,\n "skipFiles": [\n "<node_internals>/**",\n "C:/Users/37363/Downloads/HBuilderX.4.08.2024040127/HBuilderX/plugins/unicloud/**/*.js"\n ]\n}\n'), C = I('[{"provider":"alipay","spaceName":"oaapp","spaceId":"env-00jxgxphla18","spaceAppId":"2021004145628977","accessKey":"ZALus7EgJXdovISb","secretKey":"7qzvVrPN0mAxfcLr"}]') || [];
let O = ""; let O = "";
try { try {
O = "__UNI__4796942"; O = "__UNI__4796942";

File diff suppressed because one or more lines are too long

@ -5,10 +5,10 @@
"iPad" "iPad"
], ],
"id": "__UNI__4796942", "id": "__UNI__4796942",
"name": "泰丰考勤", "name": "OA系统",
"version": { "version": {
"name": "1.0.0", "name": "2.0.1",
"code": 100 "code": 201
}, },
"description": "", "description": "",
"developer": { "developer": {
@ -19,6 +19,7 @@
"permissions": { "permissions": {
"Camera": {}, "Camera": {},
"Geolocation": {}, "Geolocation": {},
"Push": {},
"UniNView": { "UniNView": {
"description": "UniNView原生渲染" "description": "UniNView原生渲染"
} }
@ -43,14 +44,6 @@
"usingComponents": true, "usingComponents": true,
"nvueStyleCompiler": "uni-app", "nvueStyleCompiler": "uni-app",
"compilerVersion": 3, "compilerVersion": 3,
"statusbar": {
"immersed": "supportedDevice",
"style": "dark",
"background": "#000000"
},
"navigationbar": {
"hidden": true
},
"distribute": { "distribute": {
"icons": { "icons": {
"android": { "android": {
@ -85,7 +78,17 @@
} }
}, },
"splashscreen": { "splashscreen": {
"useOriginalMsgbox": true "useOriginalMsgbox": true,
"androidStyle": "default",
"android": {
"hdpi": "static/image/sy.png",
"xhdpi": "static/image/sy.png",
"xxhdpi": "static/image/sy.png"
},
"iosStyle": "storyboard",
"ios": {
"storyboard": "files/CustomStoryboard.zip"
}
}, },
"google": { "google": {
"permissions": [ "permissions": [
@ -152,6 +155,7 @@
"version": "2", "version": "2",
"offline": true, "offline": true,
"hms": {}, "hms": {},
"oppo": {},
"vivo": {} "vivo": {}
} }
}, },
@ -162,7 +166,11 @@
} }
} }
}, },
"nativePlugins": {}, "statusbar": {
"immersed": "supportedDevice",
"style": "dark",
"background": "#F8F8F8"
},
"uniStatistics": { "uniStatistics": {
"enable": false "enable": false
}, },

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save