Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
0056d1e4a4 |
@ -13,7 +13,7 @@
|
|||||||
"h5" : {
|
"h5" : {
|
||||||
"launchtype" : "local"
|
"launchtype" : "local"
|
||||||
},
|
},
|
||||||
"provider" : "aliyun",
|
"provider" : "alipay",
|
||||||
"type" : "uniCloud"
|
"type" : "uniCloud"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
76
App.vue
@ -1,65 +1,25 @@
|
|||||||
<script>
|
<script>
|
||||||
|
export default {
|
||||||
export default {
|
methods:{
|
||||||
data() {
|
networkStatusChange(res){
|
||||||
return {
|
if(res.isConnected){
|
||||||
// 上一次网络状态
|
|
||||||
lastNetworkStatus: null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
// 判断是否是第一次安装APP并且打开
|
|
||||||
isFirstOpen() {
|
|
||||||
let isFirstOpen = uni.getStorageSync('isFirstOpen')
|
|
||||||
if (!isFirstOpen) {
|
|
||||||
uni.setStorageSync('isFirstOpen', true)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
},
|
|
||||||
networkStatusChange(res) {
|
|
||||||
console.log(res)
|
|
||||||
if (res.isConnected) {
|
|
||||||
// 如果是第一次安装进入,并且网络状态为有网络,则跳转到主页
|
|
||||||
if (this.isFirstOpen()) {
|
|
||||||
uni.redirectTo({
|
uni.redirectTo({
|
||||||
url: '/pages/index/index'
|
url:'/pages/index/index'
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
uni.redirectTo({
|
||||||
|
url:'/pages/networko/index'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 如果上一次网络状态为无网络,且当前网络状态为有网络,则跳转到首页
|
|
||||||
if (this.lastNetworkStatus === false) {
|
|
||||||
uni.showModal({
|
|
||||||
title: "提示",
|
|
||||||
content: "当前设备网络发生更改,是否刷新页面?",
|
|
||||||
showCancel: true,
|
|
||||||
success: function (res) {
|
|
||||||
if (res.confirm || res.cancel) {
|
|
||||||
uni.redirectTo({
|
|
||||||
url: '/pages/index/index'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
}
|
||||||
uni.redirectTo({
|
|
||||||
url: '/pages/networko/index'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.lastNetworkStatus = res.isConnected
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
onLaunch: function () {
|
onLaunch: function() {
|
||||||
console.log('onLaunch')
|
|
||||||
|
|
||||||
},
|
},
|
||||||
onShow: function () {
|
onShow: function() {
|
||||||
uni.onNetworkStatusChange(this.networkStatusChange);
|
|
||||||
uni.getNetworkType({
|
uni.getNetworkType({
|
||||||
success: (res) => {
|
success:(res)=> {
|
||||||
if (res.networkType === 'none') {
|
if(res.networkType==='none') {
|
||||||
uni.redirectTo({
|
uni.redirectTo({
|
||||||
url: '/pages/networko/index'
|
url: '/pages/networko/index'
|
||||||
})
|
})
|
||||||
@ -67,14 +27,14 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
uni.onNetworkStatusChange(this.networkStatusChange);
|
||||||
},
|
},
|
||||||
onHide: function () {
|
onHide: function() {
|
||||||
uni.offNetworkStatusChange(this.networkStatusChange)
|
uni.offNetworkStatusChange(this.networkStatusChange)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/*每个页面公共css */
|
/*每个页面公共css */
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"version" : "1",
|
"version" : "1",
|
||||||
"prompt" : "template",
|
"prompt" : "template",
|
||||||
"title" : "温馨提示",
|
"title" : "服务协议和隐私政策",
|
||||||
"message" : " 感谢您对oa考勤系统的信赖!在使用前请务必阅读并同意<a href=\"https://oa-a.szjixun.cn/#/pages/setting/severInfo\">《用户服务协议》</a>和<a href=\"https://oa-a.szjixun.cn/#/pages/setting/privateInfo\">《隐私政策》</a>,我们将按照协议和政策内容为您提供服务。<br/>oa考勤系统系统的基本功能为打卡、审批等考勤管理及协同办公服务。基于您的授权及服务之必要,基本功能的必要个人信息包括移动电话号码、账号信息等。您同意<a href=\"https://oa-a.szjixun.cn/#/pages/setting/privateInfo\">《隐私政策》</a>仅代表同意oa考勤系统在您使用基本功能时处理相关必要信息。附加功能如需处理个人信息,将单独征求您的同意。",
|
"message" : " 请你务必审慎阅读、充分理解“平台服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的<span style=\"font-weight: bold\">设备标识</span>、<span>操作日志</span> 等信息用于分析、优化应用性能。我们需要访问你的<span style=\"font-weight: bold\">相册/或相机(摄像头)权限</span>,<span style=\"font-weight: bold\">位置权限</span>,<span style=\"font-weight: bold\">通知权限</span>用于应用内功能的基本使用<br/> 你可阅读<a href=\"https://oa-a.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
|
||||||
"buttonAccept" : "同意并接受",
|
"buttonAccept" : "同意并接受",
|
||||||
"buttonRefuse" : "不同意",
|
"buttonRefuse" : "不同意",
|
||||||
"second" : {
|
"second" : {
|
||||||
"title" : " 您需要同意本隐私政策才能继续使用oa考勤系统",
|
"title" : "确认提示",
|
||||||
"message" : " 若您不同意本<a href=\"https://oa-a.szjixun.cn/#/pages/setting/privateInfo\">《隐私政策》</a>,很遗憾我们将无法为您提供服务",
|
"message" : " 进入应用前,你需先同意<a href=\"https://oa-a.szjixun.cn/#/pages/login/serveInfo\">《用户服务协议》</a>和<a href=\"https://oa-a.szjixun.cn/#/pages/login/privateInfo\">《隐私政策》</a>,否则将退出应用。",
|
||||||
"buttonAccept" : "同意并继续",
|
"buttonAccept" : "同意并继续",
|
||||||
"buttonRefuse" : "退出应用"
|
"buttonRefuse" : "退出应用"
|
||||||
},
|
},
|
||||||
|
19
components/x-tabbar/components/tabbar-item/index.vue
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<script setup>
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="tab">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.tab {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
79
components/x-tabbar/index.vue
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<script setup>
|
||||||
|
import { theme } from '@/config/theme'
|
||||||
|
import tabbarItem from './components/tabbar-item/index.vue'
|
||||||
|
const emit = defineEmits(['update:active'])
|
||||||
|
const props=defineProps({
|
||||||
|
active:{
|
||||||
|
type:Number,
|
||||||
|
default:0
|
||||||
|
},
|
||||||
|
list:{
|
||||||
|
type:Array,
|
||||||
|
default:()=>[]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const clickItem = (item) => {
|
||||||
|
emit('update:active',item.value)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="tabbar-container">
|
||||||
|
<div class="tabbar">
|
||||||
|
<tabbar-item v-for="item in list" :key="item.url" @click="clickItem(item)">
|
||||||
|
<div class="tab-content">
|
||||||
|
<img :src="item.value === active ? item.selectedIconPath : item.iconPath" :style="{width:item.iconWidth?item.iconWidth:'34rpx',height:item.iconHeight?item.iconHeight:'40rpx'}" class="tab-icon">
|
||||||
|
<div class="tab-text" :style="{ color: active === item.value ? theme.colors.primary : '#666666' }">
|
||||||
|
{{ item.text }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</tabbar-item>
|
||||||
|
</div>
|
||||||
|
<!--底部安全区-->
|
||||||
|
<div class="content-placeholder"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.tabbar-container {
|
||||||
|
flex-shrink: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #ffffff;
|
||||||
|
overflow: hidden;
|
||||||
|
.tabbar {
|
||||||
|
display: flex;
|
||||||
|
padding-top: 20rpx;
|
||||||
|
height: 104rpx;
|
||||||
|
|
||||||
|
.tab {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
.tab-icon {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-text {
|
||||||
|
margin-top: 10rpx;
|
||||||
|
font-size: 20rpx;
|
||||||
|
text-align: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-placeholder {
|
||||||
|
height: 58rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -1,20 +1,20 @@
|
|||||||
const env = 'prod';
|
const env = 'LocalTest';
|
||||||
const configs = {
|
const configs = {
|
||||||
LocalTest: {
|
LocalTest: {
|
||||||
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
|
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
|
||||||
h5Url: 'http://192.168.88.61:2367/#/'
|
h5Url:'http://192.168.88.30:2367/#/'
|
||||||
},
|
},
|
||||||
dev: {
|
dev: {
|
||||||
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
|
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
|
||||||
h5Url: 'http://192.168.88.47:2367/#/'
|
h5Url:'http://192.168.88.47:2367/#/'
|
||||||
},
|
},
|
||||||
test: {
|
test: {
|
||||||
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
|
apiBaseUrl: 'https://warehouse.szjixun.cn/oa_backend',
|
||||||
h5Url: 'http://114.218.158.24:8042/#/'
|
h5Url:'http://114.218.158.24:8042/#/'
|
||||||
},
|
},
|
||||||
prod: {
|
prod: {
|
||||||
apiBaseUrl: 'https://oa-a.szjixun.cn/api',
|
apiBaseUrl: 'https://oa-a.szjixun.cn/api',
|
||||||
h5Url: 'https://oa-a.szjixun.cn/#/'
|
h5Url:'https://oa-a.szjixun.cn/#/'
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const config = configs[env];
|
const config = configs[env];
|
||||||
|
58
config/tabbar/index.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// 图片资源导入
|
||||||
|
import clockInIcon from '@/static/image/tabbar/wz@3x1.png' // 打卡图标
|
||||||
|
import clockInSelectedIcon from '@/static/image/tabbar/zu3499@3x.png' // 打卡选中图标
|
||||||
|
import attendanceIcon from '@/static/image/tabbar/attendance2.png' // 考勤图标
|
||||||
|
import attendanceSelectedIcon from '@/static/image/tabbar/kaoqin.png' // 考勤选中图标
|
||||||
|
import myIcon from '@/static/image/tabbar/my1.png' // 我的图标
|
||||||
|
import mySelectedIcon from '@/static/image/tabbar/my2.png' // 我的选中图标
|
||||||
|
import applyIcon from '@/static/image/apply/zu3809@3x.png' // 申请图标
|
||||||
|
import applySelectedIcon from '@/static/image/apply/zu3808@3x.png' // 申请选中图标
|
||||||
|
import spIcon from '@/static/image/apply/sp.png' // 审批图标
|
||||||
|
import spSelectedIcon from '@/static/image/apply/zu3812@3x.png' // 审批选中图标
|
||||||
|
|
||||||
|
// Tabbar 配置
|
||||||
|
export const tabbar = [
|
||||||
|
{
|
||||||
|
text: "打卡",
|
||||||
|
iconPath: clockInIcon,
|
||||||
|
selectedIconPath: clockInSelectedIcon,
|
||||||
|
value: 0,
|
||||||
|
iconWidth: '33.32rpx',
|
||||||
|
iconHeight: '40rpx',
|
||||||
|
url: '/pages/clockIn/index'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "考勤",
|
||||||
|
iconPath: attendanceIcon,
|
||||||
|
selectedIconPath: attendanceSelectedIcon,
|
||||||
|
value: 1,
|
||||||
|
url: '/pages/attendance/index'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "我的",
|
||||||
|
iconPath: myIcon,
|
||||||
|
selectedIconPath: mySelectedIcon,
|
||||||
|
value: 3,
|
||||||
|
url: '/pages/mine/index'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
// 审批页面 Tabbar 配置
|
||||||
|
export const approveTabbar = [
|
||||||
|
{
|
||||||
|
text: "申请",
|
||||||
|
iconPath: applyIcon,
|
||||||
|
selectedIconPath: applySelectedIcon,
|
||||||
|
value: 0,
|
||||||
|
iconWidth: '33.32rpx',
|
||||||
|
iconHeight: '40rpx'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "审批中心",
|
||||||
|
iconPath: spIcon,
|
||||||
|
selectedIconPath: spSelectedIcon,
|
||||||
|
value: 1,
|
||||||
|
iconWidth: '37rpx',
|
||||||
|
iconHeight: '40rpx'
|
||||||
|
}
|
||||||
|
]
|
12
config/theme/index.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
export const theme = {
|
||||||
|
colors: {
|
||||||
|
primary: '#46299D',
|
||||||
|
secondary: '#35495e',
|
||||||
|
accent: '#ff4081',
|
||||||
|
error: '#f44336',
|
||||||
|
warning: '#ff9800',
|
||||||
|
info: '#2196f3',
|
||||||
|
success: '#4caf50'
|
||||||
|
}
|
||||||
|
};
|
@ -33,12 +33,12 @@
|
|||||||
<rect key="frame" x="150.66666666666666" y="391.66666666666669" width="112.66666666666666" height="112.66666666666669"/>
|
<rect key="frame" x="150.66666666666666" y="391.66666666666669" width="112.66666666666666" height="112.66666666666669"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<!-- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="hello uniapp" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QBH-Ne-rcx">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="hello uniapp" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QBH-Ne-rcx">
|
||||||
<rect key="frame" x="168" y="835" width="78.333333333333314" height="17"/>
|
<rect key="frame" x="168" y="835" width="78.333333333333314" height="17"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label> -->
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
<viewLayoutGuide key="safeArea" id="IW3-oA-Ytg"/>
|
<viewLayoutGuide key="safeArea" id="IW3-oA-Ytg"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 732 KiB |
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 732 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 19 KiB |
@ -2,8 +2,8 @@
|
|||||||
"name" : "oa考勤系统",
|
"name" : "oa考勤系统",
|
||||||
"appid" : "__UNI__4796942",
|
"appid" : "__UNI__4796942",
|
||||||
"description" : "",
|
"description" : "",
|
||||||
"versionName" : "2.3.2",
|
"versionName" : "2.1.6",
|
||||||
"versionCode" : 232,
|
"versionCode" : 216,
|
||||||
"transformPx" : false,
|
"transformPx" : false,
|
||||||
/* 5+App特有相关 */
|
/* 5+App特有相关 */
|
||||||
"app-plus" : {
|
"app-plus" : {
|
||||||
@ -26,8 +26,7 @@
|
|||||||
"Maps" : {},
|
"Maps" : {},
|
||||||
"LivePusher" : {},
|
"LivePusher" : {},
|
||||||
"Push" : {},
|
"Push" : {},
|
||||||
"Barcode" : {},
|
"Barcode" : {}
|
||||||
"Share" : {}
|
|
||||||
},
|
},
|
||||||
/* 应用发布信息 */
|
/* 应用发布信息 */
|
||||||
"distribute" : {
|
"distribute" : {
|
||||||
@ -75,28 +74,14 @@
|
|||||||
"ad" : {},
|
"ad" : {},
|
||||||
"share" : {
|
"share" : {
|
||||||
"weixin" : {
|
"weixin" : {
|
||||||
"appid" : "wx3a0f78634d074b23",
|
"appid" : "",
|
||||||
"UniversalLinks" : "https://warehouse.szjixun.cn/oa_backend/static/aretree/"
|
"UniversalLinks" : ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"push" : {
|
"push" : {
|
||||||
"unipush" : {
|
"unipush" : {
|
||||||
"offline" : true,
|
"offline" : true,
|
||||||
"oppo" : {},
|
"version" : "2"
|
||||||
"vivo" : {},
|
|
||||||
"mi" : {},
|
|
||||||
"honor" : {},
|
|
||||||
"version" : "2",
|
|
||||||
"icons" : {
|
|
||||||
"small" : {
|
|
||||||
"ldpi" : "unpackage/pushicon/18.png",
|
|
||||||
"mdpi" : "unpackage/pushicon/24.png",
|
|
||||||
"hdpi" : "unpackage/pushicon/36.png",
|
|
||||||
"xhdpi" : "unpackage/pushicon/48.png",
|
|
||||||
"xxhdpi" : "unpackage/pushicon/72.png"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"meizu" : {}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"maps" : {}
|
"maps" : {}
|
||||||
@ -135,13 +120,13 @@
|
|||||||
},
|
},
|
||||||
"splashscreen" : {
|
"splashscreen" : {
|
||||||
"useOriginalMsgbox" : true,
|
"useOriginalMsgbox" : true,
|
||||||
"androidStyle" : "default",
|
"androidStyle" : "common",
|
||||||
"android" : {
|
"android" : {
|
||||||
"hdpi" : "static/image/drawable-hdpi/sy.9.png",
|
"hdpi" : "static/image/sy.png",
|
||||||
"xhdpi" : "static/image/drawable-xhdpi/sy.9.png",
|
"xhdpi" : "static/image/sy.png",
|
||||||
"xxhdpi" : "static/image/drawable-xxhdpi/sy.9.png"
|
"xxhdpi" : "static/image/sy.png"
|
||||||
},
|
},
|
||||||
"iosStyle" : "storyboard",
|
"iosStyle" : "common",
|
||||||
"ios" : {
|
"ios" : {
|
||||||
"storyboard" : "files/CustomStoryboard.zip"
|
"storyboard" : "files/CustomStoryboard.zip"
|
||||||
}
|
}
|
||||||
|
@ -1,173 +1,101 @@
|
|||||||
<template>
|
<template>
|
||||||
<web-view class="webview" @message="webLoad" style="flex: 1;" :src="config.h5Url"></web-view>
|
<!-- <web-view class="webview" @message="webLoad" style="flex: 1;" :src="config.h5Url"></web-view> -->
|
||||||
|
<view style="position: absolute;bottom: 0;">124124</view>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { onExit, onShow } from "@dcloudio/uni-app";
|
import {onExit } from "@dcloudio/uni-app";
|
||||||
import config from "../../config"
|
import config from "../../config"
|
||||||
onShow(() => {
|
const wv = plus.webview.create(config.h5Url,"custom-webview")
|
||||||
// const { statusBarHeight } = uni.getSystemInfoSync()
|
const currentPages=getCurrentPages()
|
||||||
// const wv1 = plus.webview.getWebviewById("custom-webview");
|
const currentWebview = currentPages[currentPages.length-1].$getAppWebview()
|
||||||
// let wv = null;
|
currentWebview.append(wv)
|
||||||
// if (wv1) {
|
const {statusBarHeight} = uni.getSystemInfoSync()
|
||||||
// wv = wv1;
|
wv.setStyle({
|
||||||
// } else {
|
top: statusBarHeight,
|
||||||
// wv = plus.webview.create(config.h5Url, "custom-webview", {
|
bottom: 20,
|
||||||
// top: statusBarHeight,
|
|
||||||
// bottom: 0,
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// var pages = getCurrentPages();
|
|
||||||
// var page = pages[pages.length - 1];
|
|
||||||
// var currentWebview = page.$getAppWebview();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
import { Communication } from '../../utils/communication.js';
|
import { Communication } from '../../utils/communication.js';
|
||||||
const commun = new Communication()
|
const commun=new Communication()
|
||||||
const shareH5 = () => {
|
|
||||||
uni.share({
|
|
||||||
provider: 'weixin',
|
|
||||||
scene: "WXSceneSession",
|
|
||||||
type: 0,// 5代表分享为小程序
|
|
||||||
imageUrl: 'https://th.bing.com/th?id=ORMS.41c34644e7e67f95a14620e77064b5d9&pid=Wdp&w=268&h=140&qlt=90&c=1&rs=1&dpr=1&p=0', // 必填
|
|
||||||
title: '分享的标题',
|
|
||||||
href: 'https://www.baidu.com/',
|
|
||||||
success: function (res) {
|
|
||||||
console.log("success:" + JSON.stringify(res));
|
|
||||||
},
|
|
||||||
fail: function (err) {
|
|
||||||
console.log("fail:" + JSON.stringify(err));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//#ifdef APP-ANDROID
|
|
||||||
import {
|
|
||||||
registerRequestPermissionTipsListener,
|
|
||||||
unregisterRequestPermissionTipsListener,
|
|
||||||
setRequestPermissionTips
|
|
||||||
} from "@/uni_modules/uni-registerRequestPermissionTips"
|
|
||||||
|
|
||||||
const PermissionTips = {
|
// import {
|
||||||
"android.permission.READ_PHONE_STATE": "<h4 style=\"font-size:40px;\">正在读取网络状态权限</h4><font color=#cccccc>通讯录权限不会获取任何信息,请注意通讯录权限不会获取任何信息,请注意通讯录权限不会获取任何信息,请注意</font>",
|
// registerRequestPermissionTipsListener,
|
||||||
"android.permission.CAMERA": "<h4 style=\"font-size:40px;\">正在访问相机权限</h4><font color=#cccccc>需要扫描二维码或拍照,是否允许打开相机?</font>",
|
// unregisterRequestPermissionTipsListener,
|
||||||
"android.permission.WRITE_EXTERNAL_STORAGE": "<h4 style=\"font-size:40px;\">正在读取相册权限</h4><font color=#cccccc>我们需要获取访问您设备相册的权限,以便您能够选择并上传图片或视频到我们的应用中。</font>",
|
// setRequestPermissionTips
|
||||||
"android.permission.ACCESS_FINE_LOCATION": "<h4 style=\"font-size:40px;\">正在访问位置权限</h4><font color=#cccccc>需要获取您的位置信息,以便您能够进行考勤打卡。</font>",
|
// } from "@/uni_modules/uni-registerRequestPermissionTips"
|
||||||
"android.permission.ACCESS_COARSE_LOCATION": "<h4 style=\"font-size:40px;\">正在访问位置权限</h4><font color=#cccccc>需要获取您的位置信息,以便您能够进行考勤打卡。</font>"
|
|
||||||
}
|
|
||||||
onExit(() => {
|
|
||||||
unregisterRequestPermissionTipsListener()
|
|
||||||
})
|
|
||||||
|
|
||||||
const brand = uni.getSystemInfoSync().deviceBrand
|
// const PermissionTips = {
|
||||||
setRequestPermissionTips(PermissionTips)
|
// "android.permission.READ_PHONE_STATE": "<h4 style=\"font-size:40px;\">正在读取网络状态权限</h4><font color=#cccccc>通讯录权限不会获取任何信息,请注意通讯录权限不会获取任何信息,请注意通讯录权限不会获取任何信息,请注意</font>",
|
||||||
registerRequestPermissionTipsListener({
|
// "android.permission.CAMERA": "<h4 style=\"font-size:40px;\">正在访问相机权限</h4><font color=#cccccc>需要扫描二维码或拍照,是否允许打开相机?</font>",
|
||||||
onRequest: (e) => {
|
// "android.permission.WRITE_EXTERNAL_STORAGE": "<h4 style=\"font-size:40px;\">正在读取相册权限</h4><font color=#cccccc>我们需要获取访问您设备相册的权限,以便您能够选择并上传图片或视频到我们的应用中。</font>"
|
||||||
console.log('onRequest', e)
|
// }
|
||||||
},
|
// onExit(()=>{
|
||||||
onConfirm: (e) => {
|
// unregisterRequestPermissionTipsListener()
|
||||||
// commun.sendToH5('permission-application', { action: 'open-permission', data: e });
|
// })
|
||||||
},
|
|
||||||
onComplete: (e) => {
|
|
||||||
commun.sendToH5('permission-application', { action: 'close-permission', data: e });
|
|
||||||
|
|
||||||
// 华为手机在权限禁止之后,再次申请权限不会出现权限申请框。此时应该引导用户去系统设置开启此权限,不应该频繁申请。
|
// const brand = uni.getSystemInfoSync().deviceBrand
|
||||||
if (brand.toLowerCase() === "huawei") {
|
// setRequestPermissionTips(PermissionTips)
|
||||||
const tips = {}
|
// registerRequestPermissionTipsListener({
|
||||||
let hasDeniedPermission = false
|
// onRequest: (e) => {
|
||||||
for (let k in PermissionTips) {
|
// console.log('onRequest',e)
|
||||||
if (e[k] !== "denied") {
|
// },
|
||||||
tips[k] = PermissionTips[k]
|
// onConfirm: (e) => {
|
||||||
} else {
|
// commun.sendToH5('permission-application',{action:'open-permission',data:e});
|
||||||
hasDeniedPermission = true
|
// },
|
||||||
}
|
// onComplete: (e) => {
|
||||||
}
|
// commun.sendToH5('permission-application',{action:'close-permission',data:e});
|
||||||
setRequestPermissionTips(tips) // 更新弹框提醒,防止华为手机不出现权限申请框时权限提醒框闪烁的情况
|
|
||||||
if (hasDeniedPermission)
|
// // 华为手机在权限禁止之后,再次申请权限不会出现权限申请框。此时应该引导用户去系统设置开启此权限,不应该频繁申请。
|
||||||
uni.showModal({
|
// if (brand.toLowerCase() === "huawei") {
|
||||||
content: "权限已经被拒绝,请前往设置中开启"
|
// const tips = {}
|
||||||
})
|
// let hasDeniedPermission = false
|
||||||
}
|
// for (let k in PermissionTips) {
|
||||||
}
|
// if (e[k] !== "denied") {
|
||||||
})
|
// tips[k] = PermissionTips[k]
|
||||||
//#endif
|
// } else {
|
||||||
const webLoad = (e) => {
|
// hasDeniedPermission = true
|
||||||
const message = e.detail.data?.[0] || '';
|
// }
|
||||||
commun.handleMessage(message);
|
// }
|
||||||
};
|
// setRequestPermissionTips(tips) // 更新弹框提醒,防止华为手机不出现权限申请框时权限提醒框闪烁的情况
|
||||||
|
// if (hasDeniedPermission)
|
||||||
|
// uni.showModal({
|
||||||
|
// content: "权限已经被拒绝,请前往设置中开启"
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// })
|
||||||
function initializeWebView() {
|
function initializeWebView() {
|
||||||
const currentWebview = getCurrentPages().pop().$getAppWebview()
|
const currentWebview = getCurrentPages().pop().$getAppWebview()
|
||||||
commun.setWebView(currentWebview.children()[0])
|
commun.setWebView(currentWebview.children()[0])
|
||||||
}
|
}
|
||||||
//load-complete 注册函数
|
//load-complete 注册函数
|
||||||
commun.registerHandler('load-complete', () => {
|
commun.registerHandler('load-complete',()=>{
|
||||||
|
|
||||||
initializeWebView()
|
initializeWebView()
|
||||||
const { statusBarHeight } = uni.getSystemInfoSync()
|
const {statusBarHeight} = uni.getSystemInfoSync()
|
||||||
commun.webViewObj.setStyle({
|
commun.webViewObj.setStyle({
|
||||||
top: statusBarHeight,
|
top: statusBarHeight,
|
||||||
bottom: 0,
|
bottom: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
commun.registerHandler('getLocation',(data)=>{
|
||||||
commun.registerHandler('getLocation', (data) => {
|
|
||||||
uni.getLocation({
|
uni.getLocation({
|
||||||
type: 'gcj02',
|
type:'gcj02',
|
||||||
geocode: true,
|
geocode:true,
|
||||||
isHighAccuracy: true,
|
isHighAccuracy:true,
|
||||||
...data,
|
...data,
|
||||||
success: (res) => {
|
success: (res) => {
|
||||||
console.log('getLocation', res)
|
console.log('getLocation',res)
|
||||||
commun.sendToH5('getLocation', res);
|
commun.sendToH5('getLocation',res);
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
commun.registerHandler('goCard', async (data) => {
|
const webLoad = (e) => {
|
||||||
await getCard(data.phone)
|
const message = e.detail.data?.[0] || '';
|
||||||
})
|
commun.handleMessage(message);
|
||||||
|
};
|
||||||
commun.registerHandler('createPushMessage', async (data) => {
|
|
||||||
uni.createPushMessage(JSON.parse(decodeURIComponent(data)))
|
|
||||||
})
|
|
||||||
|
|
||||||
// 获取电子名片
|
|
||||||
async function getCard(phone) {
|
|
||||||
uni.request({
|
|
||||||
url: 'https://blockchain.szjixun.cn/api/e_card/info-phone',
|
|
||||||
method: 'POST',
|
|
||||||
data: {
|
|
||||||
phone: phone
|
|
||||||
},
|
|
||||||
success: (res) => {
|
|
||||||
const resData = res.data.data
|
|
||||||
uni.share({
|
|
||||||
provider: 'weixin',
|
|
||||||
scene: "WXSceneSession",
|
|
||||||
type: 5,// 5代表分享为小程序
|
|
||||||
imageUrl: 'https://e-cdn.fontree.cn/fonchain-main/prod/image/139/avatar/ababc42c-7654-47f8-b22b-29dc589c71f0.png', // 必填
|
|
||||||
title: `${resData.name}的电子名片`,
|
|
||||||
miniProgram: {
|
|
||||||
id: "gh_97094c34debd",
|
|
||||||
path: `/pages/mine/index?uid=${resData.uid}&userType=${resData.userType}`,
|
|
||||||
type: 0,
|
|
||||||
webUrl: `/pages/mine/index?uid=${resData.uid}&userType=${resData.userType}`,
|
|
||||||
},
|
|
||||||
success: function (res) {
|
|
||||||
console.log("success:" + JSON.stringify(res));
|
|
||||||
},
|
|
||||||
fail: function (err) {
|
|
||||||
console.log("fail:" + JSON.stringify(err));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
fail: (err) => {
|
|
||||||
console.log('getCard', err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style></style>
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
BIN
static/image/apply/sp.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
static/image/apply/zu3808@3x.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
static/image/apply/zu3809@3x.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
static/image/apply/zu3812@3x.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
static/image/apply/zu3843@3x.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 227 KiB |
Before Width: | Height: | Size: 525 KiB |
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 732 KiB |
BIN
static/image/tabbar/attendance2.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
static/image/tabbar/kaoqin.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
static/image/tabbar/message1.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
static/image/tabbar/message2.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
static/image/tabbar/my1.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
static/image/tabbar/my2.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
static/image/tabbar/wz@3x1.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
static/image/tabbar/zu3499@3x.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
@ -1,14 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"IndexName": "index_device_id",
|
|
||||||
"MgoKeySchema": {
|
|
||||||
"MgoIndexKeys": [
|
|
||||||
{
|
|
||||||
"Name": "device_id",
|
|
||||||
"Direction": "1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"MgoIsUnique": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
@ -1,142 +0,0 @@
|
|||||||
{
|
|
||||||
"bsonType": "object",
|
|
||||||
"required": [],
|
|
||||||
"permission": {
|
|
||||||
"read": false,
|
|
||||||
"create": false,
|
|
||||||
"update": false,
|
|
||||||
"delete": false
|
|
||||||
},
|
|
||||||
"properties": {
|
|
||||||
"_id": {
|
|
||||||
"description": "ID,系统自动生成"
|
|
||||||
},
|
|
||||||
"appid": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "DCloud appid"
|
|
||||||
},
|
|
||||||
"device_id": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备唯一标识"
|
|
||||||
},
|
|
||||||
"vendor": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备厂商"
|
|
||||||
},
|
|
||||||
"push_clientid": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "推送设备客户端标识"
|
|
||||||
},
|
|
||||||
"imei": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "国际移动设备识别码IMEI(International Mobile Equipment Identity)"
|
|
||||||
},
|
|
||||||
"oaid": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "移动智能设备标识公共服务平台提供的匿名设备标识符(OAID)"
|
|
||||||
},
|
|
||||||
"idfa": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "iOS平台配置应用使用广告标识(IDFA)"
|
|
||||||
},
|
|
||||||
"imsi": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "国际移动用户识别码(International Mobile Subscriber Identification Number)"
|
|
||||||
},
|
|
||||||
"model": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备型号"
|
|
||||||
},
|
|
||||||
"platform": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "平台类型"
|
|
||||||
},
|
|
||||||
"uni_platform": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "uni-app 运行平台,与条件编译平台相同。"
|
|
||||||
},
|
|
||||||
"os_name": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "ios|android|windows|mac|linux "
|
|
||||||
},
|
|
||||||
"os_version": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "操作系统版本号 "
|
|
||||||
},
|
|
||||||
"os_language": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "操作系统语言 "
|
|
||||||
},
|
|
||||||
"os_theme": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "操作系统主题 light|dark"
|
|
||||||
},
|
|
||||||
"pixel_ratio": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备像素比 "
|
|
||||||
},
|
|
||||||
"network_model": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备网络型号wifi/3G/4G/"
|
|
||||||
},
|
|
||||||
"window_width": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备窗口宽度 "
|
|
||||||
},
|
|
||||||
"window_height": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备窗口高度"
|
|
||||||
},
|
|
||||||
"screen_width": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备屏幕宽度"
|
|
||||||
},
|
|
||||||
"screen_height": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备屏幕高度"
|
|
||||||
},
|
|
||||||
"rom_name": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "rom 名称"
|
|
||||||
},
|
|
||||||
"rom_version": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "rom 版本"
|
|
||||||
},
|
|
||||||
"location_latitude": {
|
|
||||||
"bsonType": "double",
|
|
||||||
"description": "纬度"
|
|
||||||
},
|
|
||||||
"location_longitude": {
|
|
||||||
"bsonType": "double",
|
|
||||||
"description": "经度"
|
|
||||||
},
|
|
||||||
"location_country": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "国家"
|
|
||||||
},
|
|
||||||
"location_province": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "省份"
|
|
||||||
},
|
|
||||||
"location_city": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "城市"
|
|
||||||
},
|
|
||||||
"create_date": {
|
|
||||||
"bsonType": "timestamp",
|
|
||||||
"description": "创建时间",
|
|
||||||
"forceDefaultValue": {
|
|
||||||
"$env": "now"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"last_update_date": {
|
|
||||||
"bsonType": "timestamp",
|
|
||||||
"description": "最后一次修改时间",
|
|
||||||
"forceDefaultValue": {
|
|
||||||
"$env": "now"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"version": "0.0.1"
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"bsonType": "object",
|
|
||||||
"required": [
|
|
||||||
"value",
|
|
||||||
"expired"
|
|
||||||
],
|
|
||||||
"permission": {
|
|
||||||
"read": false,
|
|
||||||
"create": false,
|
|
||||||
"update": false,
|
|
||||||
"delete": false
|
|
||||||
},
|
|
||||||
"properties": {
|
|
||||||
"_id": {
|
|
||||||
"description": "ID,系统自动生成"
|
|
||||||
},
|
|
||||||
"value": {
|
|
||||||
"description": "值"
|
|
||||||
},
|
|
||||||
"expired": {
|
|
||||||
"description": "过期时间",
|
|
||||||
"bsonType": "timestamp"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"version": "0.0.1"
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"IndexName": "device_id",
|
|
||||||
"MgoKeySchema": {
|
|
||||||
"MgoIndexKeys": [
|
|
||||||
{
|
|
||||||
"Name": "device_id",
|
|
||||||
"Direction": "1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"MgoIsUnique": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IndexName": "oaid",
|
|
||||||
"MgoKeySchema": {
|
|
||||||
"MgoIndexKeys": [
|
|
||||||
{
|
|
||||||
"Name": "oaid",
|
|
||||||
"Direction": "1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"MgoIsUnique": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IndexName": "imei",
|
|
||||||
"MgoKeySchema": {
|
|
||||||
"MgoIndexKeys": [
|
|
||||||
{
|
|
||||||
"Name": "imei",
|
|
||||||
"Direction": "1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"MgoIsUnique": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
"bsonType": "object",
|
|
||||||
"required": [
|
|
||||||
"user_id"
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"_id": {
|
|
||||||
"description": "ID,系统自动生成"
|
|
||||||
},
|
|
||||||
"user_id": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "用户id,参考uni-id-users表"
|
|
||||||
},
|
|
||||||
"ua": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "userAgent"
|
|
||||||
},
|
|
||||||
"uuid": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备唯一标识(需要加密存储)"
|
|
||||||
},
|
|
||||||
"os_name": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "ios|android|windows|mac|linux "
|
|
||||||
},
|
|
||||||
"os_version": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "操作系统版本号 "
|
|
||||||
},
|
|
||||||
"os_language": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "操作系统语言 "
|
|
||||||
},
|
|
||||||
"os_theme": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "操作系统主题 light|dark"
|
|
||||||
},
|
|
||||||
"vendor": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备厂商"
|
|
||||||
},
|
|
||||||
"push_clientid": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "推送设备客户端标识"
|
|
||||||
},
|
|
||||||
"device_id": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备id"
|
|
||||||
},
|
|
||||||
"imei": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "国际移动设备识别码IMEI(International Mobile Equipment Identity)"
|
|
||||||
},
|
|
||||||
"oaid": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "移动智能设备标识公共服务平台提供的匿名设备标识符(OAID)"
|
|
||||||
},
|
|
||||||
"idfa": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "iOS平台配置应用使用广告标识(IDFA)"
|
|
||||||
},
|
|
||||||
"model": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "设备型号"
|
|
||||||
},
|
|
||||||
"platform": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "平台类型"
|
|
||||||
},
|
|
||||||
"create_date": {
|
|
||||||
"bsonType": "timestamp",
|
|
||||||
"description": "创建时间",
|
|
||||||
"forceDefaultValue": {
|
|
||||||
"$env": "now"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"last_active_date": {
|
|
||||||
"bsonType": "timestamp",
|
|
||||||
"description": "最后登录时间"
|
|
||||||
},
|
|
||||||
"last_active_ip": {
|
|
||||||
"bsonType": "string",
|
|
||||||
"description": "最后登录IP"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"version": "0.0.1"
|
|
||||||
}
|
|