Commit b481fc9b authored by 李智书's avatar 李智书

1.初始化;

parent 353ba747
Pipeline #396 failed with stages
.DS_Store
node_modules/
unpackage/
dist/
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.project
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
const plugins = []
if (process.env.UNI_OPT_TREESHAKINGNG) {
plugins.push(require('@dcloudio/vue-cli-plugin-uni-optimize/packages/babel-plugin-uni-api/index.js'))
}
if (
(
process.env.UNI_PLATFORM === 'app-plus' &&
process.env.UNI_USING_V8
) ||
(
process.env.UNI_PLATFORM === 'h5' &&
process.env.UNI_H5_BROWSER === 'builtin'
)
) {
const path = require('path')
const isWin = /^win/.test(process.platform)
const normalizePath = path => (isWin ? path.replace(/\\/g, '/') : path)
const input = normalizePath(process.env.UNI_INPUT_DIR)
try {
plugins.push([
require('@dcloudio/vue-cli-plugin-hbuilderx/packages/babel-plugin-console'),
{
file (file) {
file = normalizePath(file)
if (file.indexOf(input) === 0) {
return path.relative(input, file)
}
return false
}
}
])
} catch (e) {}
}
process.UNI_LIBRARIES = process.UNI_LIBRARIES || ['@dcloudio/uni-ui']
process.UNI_LIBRARIES.forEach(libraryName => {
plugins.push([
'import',
{
'libraryName': libraryName,
'customName': (name) => {
return `${libraryName}/lib/${name}/${name}`
}
}
])
})
module.exports = {
presets: [
[
'@vue/app',
{
modules: 'commonjs',
useBuiltIns: process.env.UNI_PLATFORM === 'h5' ? 'usage' : 'entry'
}
]
],
plugins
}
This diff is collapsed.
{
"name": "xzf_uniapp-wechat-web",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "npm run dev:h5",
"build": "npm run build:h5",
"build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build",
"build:custom": "cross-env NODE_ENV=production uniapp-cli custom",
"build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build",
"build:mp-alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build",
"build:mp-baidu": "cross-env NODE_ENV=production UNI_PLATFORM=mp-baidu vue-cli-service uni-build",
"build:mp-kuaishou": "cross-env NODE_ENV=production UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build",
"build:mp-qq": "cross-env NODE_ENV=production UNI_PLATFORM=mp-qq vue-cli-service uni-build",
"build:mp-toutiao": "cross-env NODE_ENV=production UNI_PLATFORM=mp-toutiao vue-cli-service uni-build",
"build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
"build:quickapp-native": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-native vue-cli-service uni-build",
"build:quickapp-webview": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview vue-cli-service uni-build",
"build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build",
"build:quickapp-webview-union": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build",
"dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch",
"dev:custom": "cross-env NODE_ENV=development uniapp-cli custom",
"dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
"dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch",
"dev:mp-alipay": "cross-env NODE_ENV=development UNI_PLATFORM=mp-alipay vue-cli-service uni-build --watch",
"dev:mp-baidu": "cross-env NODE_ENV=development UNI_PLATFORM=mp-baidu vue-cli-service uni-build --watch",
"dev:mp-kuaishou": "cross-env NODE_ENV=development UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build --watch",
"dev:mp-qq": "cross-env NODE_ENV=development UNI_PLATFORM=mp-qq vue-cli-service uni-build --watch",
"dev:mp-toutiao": "cross-env NODE_ENV=development UNI_PLATFORM=mp-toutiao vue-cli-service uni-build --watch",
"dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
"dev:quickapp-native": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-native vue-cli-service uni-build --watch",
"dev:quickapp-webview": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview vue-cli-service uni-build --watch",
"dev:quickapp-webview-huawei": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build --watch",
"dev:quickapp-webview-union": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build --watch",
"info": "node node_modules/@dcloudio/vue-cli-plugin-uni/commands/info.js",
"serve:quickapp-native": "node node_modules/@dcloudio/uni-quickapp-native/bin/serve.js",
"test:android": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=android jest -i",
"test:h5": "cross-env UNI_PLATFORM=h5 jest -i",
"test:ios": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=ios jest -i",
"test:mp-baidu": "cross-env UNI_PLATFORM=mp-baidu jest -i",
"test:mp-weixin": "cross-env UNI_PLATFORM=mp-weixin jest -i"
},
"dependencies": {
"@dcloudio/uni-app-plus": "^2.0.0-32920210927002",
"@dcloudio/uni-h5": "^2.0.0-32920210927002",
"@dcloudio/uni-helper-json": "*",
"@dcloudio/uni-i18n": "^2.0.0-32920210927002",
"@dcloudio/uni-mp-360": "^2.0.0-32920210927002",
"@dcloudio/uni-mp-alipay": "^2.0.0-32920210927002",
"@dcloudio/uni-mp-baidu": "^2.0.0-32920210927002",
"@dcloudio/uni-mp-kuaishou": "^2.0.0-32920210927002",
"@dcloudio/uni-mp-qq": "^2.0.0-32920210927002",
"@dcloudio/uni-mp-toutiao": "^2.0.0-32920210927002",
"@dcloudio/uni-mp-vue": "^2.0.0-32920210927002",
"@dcloudio/uni-mp-weixin": "^2.0.0-32920210927002",
"@dcloudio/uni-quickapp-native": "^2.0.0-32920210927002",
"@dcloudio/uni-quickapp-webview": "^2.0.0-32920210927002",
"@dcloudio/uni-stat": "^2.0.0-32920210927002",
"@vue/shared": "^3.0.0",
"core-js": "^3.6.5",
"dayjs": "^1.10.4",
"echarts": "^5.1.0",
"flyio": "^0.6.2",
"jweixin-module": "^1.6.0",
"less-loader": "5.0.0",
"regenerator-runtime": "^0.12.1",
"sass-loader": "7.0.0",
"node-sass": "^6.0.1",
"vant": "^2.12.30",
"vconsole": "^3.7.0",
"vue": "^2.6.11",
"vuex": "^3.2.0"
},
"devDependencies": {
"@babel/runtime": "~7.12.0",
"@dcloudio/types": "*",
"@dcloudio/uni-automator": "^2.0.0-32920210927002",
"@dcloudio/uni-cli-i18n": "^2.0.0-32920210927002",
"@dcloudio/uni-cli-shared": "^2.0.0-32920210927002",
"@dcloudio/uni-migration": "^2.0.0-32920210927002",
"@dcloudio/uni-template-compiler": "^2.0.0-32920210927002",
"@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.0-32920210927002",
"@dcloudio/vue-cli-plugin-uni": "^2.0.0-32920210927002",
"@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.0-32920210927002",
"@dcloudio/webpack-uni-mp-loader": "^2.0.0-32920210927002",
"@dcloudio/webpack-uni-pages-loader": "^2.0.0-32920210927002",
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"babel-plugin-import": "^1.11.0",
"cross-env": "^7.0.2",
"jest": "^25.4.0",
"mini-types": "*",
"miniprogram-api-typings": "*",
"postcss-comment": "^2.0.0",
"vue-template-compiler": "^2.6.11"
},
"browserslist": [
"Android >= 4.4",
"ios >= 9"
],
"uni-app": {
"scripts": {}
}
}
const path = require('path')
module.exports = {
parser: require('postcss-comment'),
plugins: [
require('postcss-import')({
resolve (id, basedir, importOptions) {
if (id.startsWith('~@/')) {
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3))
} else if (id.startsWith('@/')) {
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2))
} else if (id.startsWith('/') && !id.startsWith('//')) {
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1))
}
return id
}
}),
require('autoprefixer')({
remove: process.env.UNI_PLATFORM !== 'h5'
}),
require('@dcloudio/vue-cli-plugin-uni/packages/postcss')
]
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="./faceico.ico"/>
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
<script src="//s1.pstatp.com/cdn/expire-1-M/jquery/1.8.0/jquery-1.8.0.min.js" async="async"></script>
<script src="//res.wx.qq.com/open/libs/weuijs/1.2.1/weui.min.js" async="async"></script>
<script src="//res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script src="//static.runoob.com/assets/qrcode/qrcode.min.js" async="async"></script>
<script type="text/javascript" src="//cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></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>
<link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
<script src="//cdn.bootcdn.net/ajax/libs/clipboard.js/2.0.6/clipboard.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/eruda" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
// eruda.init();
</script>
</head>
<body>
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
.DS_Store
node_modules/
unpackage/
dist/
.hbuilderx/
# local env files
.env.local
.env.*.local
manifest.json
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.project
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
<script>
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script>
<style>
/*每个页面公共css */
@import url("./common/css/weui.min.css");
/* #ifdef H5 */
@import url("../node_modules/vant/lib/index.css");
/* #endif */
</style>
# az-uniapp-wechat-web
传统web页面使用uniapp框架重写
\ No newline at end of file
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
const baseUrl = 'https://szcf.superbest.wang/API' //稳定版本环境
let UrlReg = /^http:\/\/.*/i
let UrlReg2 = /^https:\/\/.*/i
function uploadFile(params) {
var _this = this,
url = params.url,
filePath = params.filePath,
name = params.name ? params.name : 'file',
data = params.data;
console.log('uploadFile', params)
//fileType String 见平台差异说明 文件类型,image/video/audio
uni.uploadFile({
url: url, //仅为示例,非真实的接口地址
filePath: filePath,
name: name,
formData: data,
success: (uploadFileRes) => {
if (params.success) {
console.log("uploadFile成功", uploadFileRes)
params.success(uploadFileRes)
}
}
});
}
function downloadFile(params) {
uni.downloadFile({
url: 'https://www.example.com/file/test', //仅为示例,并非真实的资源
success: (res) => {
if (res.statusCode === 200) {
console.log('下载成功');
}
}
});
}
/**
* 方法说明
* @url 请求地址
* @method 请求方式
* @dataType 请求类型
* @data 参数
* @header {参数类型} 额外头部信息
* @return {返回值类型} 返回值说明
*
*/
function request(params, data) {
return new Promise((resolve, reject) => {
uni.request({
url: (UrlReg.test(params.url) || UrlReg2.test(params.url)) ? params.url : baseUrl + params.url,
method: params.method,
dataType: params.dataType,
data,
header: Object.assign({
"Content-Type": "application/json;charset=utf-8",
}, params.header),
success: function(res) {
resolve(res)
},
fail: function(fail) {
reject(fail)
}
});
})
}
/**
* 方法说明
* @url 请求地址
* @parms 参数
* @header {参数类型} 额外头部信息
* @return {返回值类型} 返回值说明
*
*/
function postRequest(params, data = {}) {
return new Promise((resolve, reject) => {
uni.showLoading({
title: params.Ltitle ? params.Ltitle : "加载中..."
});
try {
//登录错误提示
let duration;
if(params.url == '/user/login/pwd'){
duration = 20000
}else{
duration = 3000
}
//token
let token = uni.getStorageSync("token")
//用户id
let userId = uni.getStorageSync("userId")
data.userId = data.userId || userId;
params.header = {
"token": token || ""
};
params.method = "POST";
params.dataType = "JSON"
if (!params.url) {
uni.showToast({
icon: "none",
title: "url不能为空",
duration
})
uni.hideLoading();
reject("url不能为空")
}
request(params, data).then(reslt => {
try {
reslt.data = JSON.parse(reslt.data)
} catch (e) {
reslt.data = reslt.data
//TODO handle the exception
}
if (reslt.data.code != 200) {
//token失效或者错误 ----401
//账号已在其他地方登录! -----1006
if (reslt.data.code == 401 || reslt.data.code == 1006) {
uni.showToast({
icon: "none",
title: reslt.data.message,
duration
})
uni.hideLoading();
//401跳转登录
uni.redirectTo({
// url: "/pages/notecheck/notecheck?phone=13428967050",
// url: "/pages/notecheck/notecheck",
url: "/pages/login/login"
})
reject(reslt.data.message)
}
uni.showToast({
icon: "none",
title: reslt.data.message,
duration
})
uni.hideLoading();
reject(reslt.data.message)
}
console.log(reslt);
uni.hideLoading();
resolve(reslt.data)
}).catch(e => {
reject(e.message)
})
} catch (e) {
console.log(e);
uni.hideLoading();
reject(e.message)
//TODO handle the exception
}
})
}
/**
* 方法说明
* @url 请求地址
* @parms 参数
* @header {参数类型} 额外头部信息
* @return {返回值类型} 返回值说明
*
*/
function getRequest(params, data) {
return new Promise((resolve, reject) => {
uni.showLoading({
title: params.Ltitle ? params.Ltitle : "加载中..."
});
try {
//token
let token = uni.getStorageSync("token")
//用户id
let userId = uni.getStorageSync("userId")
data.userId = data.userId || userId;
params.header = {
"token": token || ""
};
params.method = "GET";
params.dataType = "JSON"
if (!params.url) {
uni.showToast({
icon: "none",
title: "url不能为空",
duration:3000
})
uni.hideLoading();
reject("url不能为空")
}
request(params, data).then(reslt => {
try {
reslt.data = JSON.parse(reslt.data)
} catch (e) {
reslt.data = reslt.data
//TODO handle the exception
}
if (reslt.data.code != 200) {
//token失效或者错误
if (reslt.data.code == 401) {
uni.showToast({
icon: "none",
title: reslt.data.message,
duration:3000
})
uni.hideLoading();
//401跳转登录
uni.redirectTo({
// url: "/pages/notecheck/notecheck?phone=13428967050",
// url: "/pages/notecheck/notecheck",
url: "/pages/login/login"
})
reject(reslt.data.message)
}
uni.showToast({
icon: "none",
title: reslt.data.message,
duration:3000
})
uni.hideLoading();
reject(reslt.data.message)
}
console.log(reslt);
uni.hideLoading();
resolve(reslt.data)
}).catch(e => {
reject(e.message)
})
} catch (e) {
console.log(e);
uni.hideLoading();
reject(e.message)
//TODO handle the exception
}
})
}
/**
* 方法说明
* @url 请求地址
* @parms 参数
* @header {参数类型} 额外头部信息
* @return {返回值类型} 返回值说明
*
*/
async function Login(params, data) {
try {
await uni.showLoading({
title: params.Ltitle ? params.Ltitle : "加载中..."
});
params.method = "POST";
params.dataType = "JSON"
if (!params.url) {
await uni.showToast({
icon: "none",
title: "url不能为空",
duration:3000
})
await uni.hideLoading();
throw Error("url不能为空")
}
//获取验证码
let [err, reslt] = await request(params, data);
try {
reslt.data = JSON.parse(reslt.data)
} catch (e) {
reslt.data = reslt.data
//TODO handle the exception
}
if (err) {
await uni.showToast({
icon: "none",
title: JSON.stringify(err),
duration:3000
})
await uni.hideLoading();
throw Error(JSON.stringify(err))
}
if (reslt.data.code != 200) {
await uni.showToast({
icon: "none",
title: reslt.data.message,
duration:3000
})
await uni.hideLoading();
throw Error(reslt.data.message)
}
//获取token 用户信息
let [LoginErr, LoginInfo] = await request({
method: "POST",
url: '/user/login/to_login'
}, {
phone: reslt.data.data.phone,
verifyCode: reslt.data.data.verifyCode
});
try {
reslt.data = JSON.parse(reslt.data)
} catch (e) {
reslt.data = reslt.data
//TODO handle the exception
}
if (LoginErr) {
await uni.showToast({
icon: "none",
title: JSON.stringify(LoginErr),
duration:3000
})
await uni.hideLoading();
throw Error(JSON.stringify(LoginErr))
}
if (LoginInfo.data.code != 200) {
await uni.showToast({
icon: "none",
title: LoginInfo.data.message,
duration:3000
})
await uni.hideLoading();
throw Error(LoginInfo.data.message)
}
//缓存用户信息
uni.setStorageSync("token", LoginInfo.data.data.token)
uni.setStorageSync("userId", LoginInfo.data.data.userId)
await uni.hideLoading();
return true
} catch (e) {
console.log(e);
await uni.hideLoading();
throw Error(e)
//TODO handle the exception
}
}
module.exports = {
post: postRequest,
get: getRequest,
upload: uploadFile,
download: downloadFile,
Login,
//接口地址
baseUrl
}
let idCardNoUtil = {
/*省,直辖市代码表*/
provinceAndCitys: {
11: "北京",
12: "天津",
13: "河北",
14: "山西",
15: "内蒙古",
21: "辽宁",
22: "吉林",
23: "黑龙江",
31: "上海",
32: "江苏",
33: "浙江",
34: "安徽",
35: "福建",
36: "江西",
37: "山东",
41: "河南",
42: "湖北",
43: "湖南",
44: "广东",
45: "广西",
46: "海南",
50: "重庆",
51: "四川",
52: "贵州",
53: "云南",
54: "西藏",
61: "陕西",
62: "甘肃",
63: "青海",
64: "宁夏",
65: "新疆",
71: "台湾",
81: "香港",
82: "澳门",
91: "国外"
},
/*每位加权因子*/
powers: ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"],
/*第18位校检码*/
parityBit: ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"],
/*性别*/
genders: {
male: "",
female: ""
},
/*校验地址码*/
checkAddressCode: function(addressCode) {
let check = /^[1-9]\d{5}$/.test(addressCode);
if (!check) return false;
if (idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(0, 2))]) {
return true;
} else {
return false;
}
},
/*校验日期码*/
checkBirthDayCode: function(birDayCode) {
let check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
if (!check) return false;
let yyyy = parseInt(birDayCode.substring(0, 4), 10);
let mm = parseInt(birDayCode.substring(4, 6), 10);
let dd = parseInt(birDayCode.substring(6), 10);
let xdata = new Date(yyyy, mm - 1, dd);
if (xdata > new Date()) {
return false; //生日不能大于当前日期
} else if ((xdata.getFullYear() == yyyy) && (xdata.getMonth() == mm - 1) && (xdata.getDate() == dd)) {
return true;
} else {
return false;
}
},
/*计算校检码*/
getParityBit: function(idCardNo) {
let id17 = idCardNo.substring(0, 17);
/*加权 */
let power = 0;
for (let i = 0; i < 17; i++) {
power += parseInt(id17.charAt(i), 10) * parseInt(idCardNoUtil.powers[i]);
}
/*取模*/
let mod = power % 11;
return idCardNoUtil.parityBit[mod];
},
/*验证校检码*/
checkParityBit: function(idCardNo) {
let parityBit = idCardNo.charAt(17).toUpperCase();
if (idCardNoUtil.getParityBit(idCardNo) == parityBit) {
return true;
} else {
return false;
}
},
/*校验15位或18位的身份证号码*/
checkIdCardNo: function(idCardNo) {
//15位和18位身份证号码的基本校验
let check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
if (!check) return false;
//判断长度为15位或18位
if (idCardNo.length == 15) {
return idCardNoUtil.check15IdCardNo(idCardNo);
} else if (idCardNo.length == 18) {
return idCardNoUtil.check18IdCardNo(idCardNo);
} else {
return false;
}
},
//校验15位的身份证号码
check15IdCardNo: function(idCardNo) {
//15位身份证号码的基本校验
let check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
if (!check) return false;
//校验地址码
let addressCode = idCardNo.substring(0, 6);
check = idCardNoUtil.checkAddressCode(addressCode);
if (!check) return false;
let birDayCode = '19' + idCardNo.substring(6, 12);
//校验日期码
return idCardNoUtil.checkBirthDayCode(birDayCode);
},
//校验18位的身份证号码
check18IdCardNo: function(idCardNo) {
//18位身份证号码的基本格式校验
let check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
if (!check) return false;
//校验地址码
let addressCode = idCardNo.substring(0, 6);
check = idCardNoUtil.checkAddressCode(addressCode);
if (!check) return false;
//校验日期码
let birDayCode = idCardNo.substring(6, 14);
check = idCardNoUtil.checkBirthDayCode(birDayCode);
if (!check) return false;
//验证校检码
return idCardNoUtil.checkParityBit(idCardNo);
},
formateDateCN: function(day) {
let yyyy = day.substring(0, 4);
let mm = day.substring(4, 6);
let dd = day.substring(6);
return yyyy + '-' + mm + '-' + dd;
},
//获取信息
getIdCardInfo: function(idCardNo) {
let idCardInfo = {
gender: "", //性别
birthday: "" // 出生日期(yyyy-mm-dd)
};
if (idCardNo.length == 15) {
let aday = '19' + idCardNo.substring(6, 12);
idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
if (parseInt(idCardNo.charAt(14)) % 2 == 0) {
idCardInfo.gender = idCardNoUtil.genders.female;
} else {
idCardInfo.gender = idCardNoUtil.genders.male;
}
} else if (idCardNo.length == 18) {
let aday = idCardNo.substring(6, 14);
idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
if (parseInt(idCardNo.charAt(16)) % 2 == 0) {
idCardInfo.gender = idCardNoUtil.genders.female;
} else {
idCardInfo.gender = idCardNoUtil.genders.male;
}
}
return idCardInfo;
},
/*18位转15位*/
getId15: function(idCardNo) {
if (idCardNo.length == 15) {
return idCardNo;
} else if (idCardNo.length == 18) {
return idCardNo.substring(0, 6) + idCardNo.substring(8, 17);
} else {
return null;
}
},
/*15位转18位*/
getId18: function(idCardNo) {
if (idCardNo.length == 15) {
let id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);
let parityBit = idCardNoUtil.getParityBit(id17);
return id17 + parityBit;
} else if (idCardNo.length == 18) {
return idCardNo;
} else {
return null;
}
},
/* 护照 */
isPassPortCard(idCardNo) {
// 护照
// 规则: 14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等
// 样本: 141234567, G12345678, P1234567
var reg = /^([a-zA-z]|[0-9]){5,17}$/;
if (reg.test(idCardNo) === false) {
return false;
} else {
return idCardNo;
}
},
/* 台湾居民来往大陆通行证 */
isTWCard(idCardNo) {
// 台湾居民来往大陆通行证
// 规则: 新版8位或18位数字, 旧版10位数字 + 英文字母
// 样本: 12345678 或 1234567890B
var reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$/;
if (reg.test(idCardNo) === false) {
// return { 'status': 0, 'msg': '台湾居民来往大陆通行证号码不合规' };
return false;
} else {
return idCardNo;
}
},
/* 港澳居民来往内地通行证 */
isHMCard(idCardNo) {
// 港澳居民来往内地通行证
// 规则: H/M + 10位或6位数字
// 样本: H1234567890
var reg = /^([A-Z]\d{6,10}(\(\w{1}\))?)$/;
if (reg.test(idCardNo) === false) {
return false;
// return {
// 'status': 0,
// 'msg': '港澳居民来往内地通行证号码不合规'
// };
} else {
return idCardNo;
}
},
/* 港澳台居民居住证 */
isHMTCard(idCardNo){
var reg = /^8[123]0000(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dX]$/;
if (reg.test(idCardNo) === false) {
return false;
} else {
return idCardNo;
}
},
/* 军官证 */
isOfficerCard(idCardNo) {
// 军官证
// 规则: 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"
// 样本: 军字第2001988号, 士字第P011816X号
var reg = /^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(?)$/;
if (reg.test(idCardNo) === false) {
return false;
} else {
return idCardNo;
}
},
};
export default idCardNoUtil;
<template>
<uni-popup :custom="true" type="bottom" ref="keyboardPackage">
<view class="keyboardbox">
<view class="numkeyboard" v-if="type==='number'">
<view class="num-area">
<view class="row" v-for="(item,index) in numKeybordList" :key="index">
<view :class="['item',ite===0?'z':'',(disableDot && ite==='.')?'disabled':'']"
v-for="(ite,idx) in item" hover-class="active" :hover-start-time="0" :hover-stay-time="5"
:key="idx" @tap="input(ite)">{{ite}}</view>
</view>
</view>
<view class="btn-area">
<view :class="['item','del']" hover-class="active" :hover-start-time="0" :hover-stay-time="5"
@tap="deleteVal">
<image src="../../static/img/deleteIcon.png" mode="aspectFit" style="width: 60rpx;height: 35rpx;"></image>
</view>
<view class="confirem item" hover-class="active" :hover-start-time="0" :hover-stay-time="5"
@tap="confirm">
充值
</view>
</view>
</view>
<view class="numkeyboard" v-if="type==='idCard'">
<view class="num-area">
<view class="row" v-for="(item,index) in idCardList" :key="index">
<view :class="['item',ite===0?'z':'',(disableDot && ite==='.')?'disabled':'']"
v-for="(ite,idx) in item" hover-class="active" :hover-start-time="0" :hover-stay-time="5"
:key="idx" @tap="input(ite)">{{ite}}</view>
</view>
</view>
<view class="btn-area">
<view :class="['item','del']" hover-class="active" :hover-start-time="0" :hover-stay-time="5"
@tap="deleteVal">
</view>
<view class="confirem item" hover-class="active" :hover-start-time="0" :hover-stay-time="5"
@tap="confirm">
完成
</view>
</view>
</view>
<view class="platenumber" v-if="type==='plateNumber'">
<view class="header">
<view @tap="active=active===1?2:1" hover-class="active" :hover-start-time="0" :hover-stay-time="5">
{{active===1?'地区':'车牌号'}}
</view>
<view hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="confirm">完成</view>
</view>
<view class="main">
<view class="normal" v-show="active===1">
<view class="row" v-for="(item,index) in EngKeyBoardList" :key="index">
<view class="item" v-for="(ite,idx) in item" :key="idx" hover-class="active"
:hover-start-time="0" :hover-stay-time="5" @tap="input(ite)">
{{ite}}
</view>
<view class="item img" v-if="index===EngKeyBoardList.length-1" hover-class="active"
:hover-start-time="0" :hover-stay-time="5" @tap="deleteVal">
<image src="/static/delete.png" mode=""></image>
</view>
</view>
</view>
<view class="area" v-show="active===2">
<view class="row" v-for="(item,index) in areaList" :key="index">
<view class="item" v-for="(ite,idx) in item" :key="idx" hover-class="active"
:hover-start-time="0" :hover-stay-time="5" @tap="input(ite)">
{{ite}}
</view>
<view class="item img" v-if="index===EngKeyBoardList.length-1" hover-class="active"
:hover-start-time="0" :hover-stay-time="5" @tap="deleteVal">
<image src="/static/delete.png" mode=""></image>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="safe-area" v-if="safeAreaInsetBottom"></view>
</uni-popup>
</template>
<script>
export default {
props: {
type: {
type: String,
default: 'number'
},
safeAreaInsetBottom: { //是否设置安全区
type: Boolean,
default: false
},
disableDot: { //数字键盘是否禁止点击.仅type为number生效
type: Boolean,
default: false
}
},
data() {
return {
numKeybordList: [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[0, '.']
],
idCardList: [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[0, 'X']
],
areaList: [
['', '', '', '', '', '', '', '', '', ''],
['', '', '', '', '', '', '', '', '', ''],
['', '', '', '', '', '', '', '', ''],
['', '', '使', '', '', '']
],
EngKeyBoardList: [
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'],
['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'],
['Z', 'X', 'C', 'V', 'B', 'N', 'M']
],
active: 2
};
},
methods: {
open() {
this.$refs.keyboardPackage.open();
},
confirm() {
this.close();
this.$emit('onConfirm');
},
deleteVal() {
this.$emit('onDelete');
},
input(val) {
if (val === '.' && this.disableDot) return;
this.$emit('onInput', val);
if (this.active === 2) {
this.active = 1;
}
},
close() {
this.$refs.keyboardPackage.close();
}
}
}
</script>
<style lang="scss" scoped>
.keyboardbox {
background-color: #FFFFFF;
.numkeyboard {
height: 440rpx;
display: flex;
background: #F7F7F7;
.btn-area {
display: flex;
// flex-direction: column;
flex-wrap: wrap;
align-items: center;
.item {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
flex-grow: 1;
}
.del {
width: 170rpx;
height: 90rpx;
background: #FFFFFF;
border-radius: 8rpx;
margin: 0 auto;
text-align: center;
&.active {
background-color: #f1f3f5;
}
}
.confirem {
width: 170rpx;
height: 302rpx;
background: #04BA73;
border-radius: 8rpx;
color: #FFFFFF;
&.active {
background-color: #0570db;
}
}
}
.num-area {
flex-grow: 1;
display: flex;
flex-wrap: wrap;
height: 100%;
.row {
width: 100%;
// height: 25%;
display: flex;
margin-top: 1px;
justify-content: space-around;
align-items: center;
.item {
// flex-grow: 1;
// height: 100%;
display: flex;
justify-content: center;
align-items: center;
width: 170rpx;
height: 90rpx;
background: #FFFFFF;
border-radius: 8rpx;
&.active {
background-color: #04BA73;
color: #FFFFFF;
}
&.z {
// flex-grow: 1.5;
width: 62%;
font-size: 36rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #303030;
}
&.disabled {
background: #FFFFFF;
color: #B9B9B9;
}
}
}
}
}
}
.safe-area {
padding-bottom: 0rpx;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
.platenumber {
background-color: #f5f5f5;
.header {
height: 76rpx;
background-color: #FFFFFF;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 28rpx;
border-top: 1px solid #f5f5f5;
&>view {
padding: 0 45rpx;
color: #00a7ea;
height: 100%;
display: flex;
align-items: center;
&.active {
background-color: #ebedf0;
}
}
}
.main {
height: 435rpx;
.row {
margin: 13rpx 0;
display: flex;
justify-content: center;
align-items: center;
.item {
width: 56rpx;
height: 94rpx;
display: flex;
justify-content: center;
align-items: center;
background-color: #FFFFFF;
border-radius: 6rpx;
margin: 0 7rpx;
font-size: 24rpx;
&.active {
background-color: #ebedf0;
}
&.img {
background-color: #c2cacc;
width: 94rpx;
&.active {
background-color: #ddd;
}
&>image {
width: 49rpx;
height: 48rpx;
}
}
}
}
}
}
</style>
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>
<template>
<view class="box">
<view :class="['item',list.length===index?'fakecursor':'']" v-for="(item,index) in length" :key="item" :style="{margin:formatMargin(gutter)}">
<view class="psw" v-if="showPsw">{{list[index]}}</view>
<view :class="['circle',(index<list.length)?'dot':'']" v-else></view>
</view>
</view>
</template>
<script>
export default {
props: {
length: { //长度只允许为6和4
type: Number,
default: 6,
validator(val) {
if (val !== 6 && val !== 4) {
return false;
}
return true;
}
},
gutter: {
type: Number,
default: 0
},
list: {
type: Array,
default: function() {
return [];
}
},
showPsw: { // 展示密码
type: Boolean,
default: false,
}
},
data() {
return {};
},
computed: {
},
methods: {
formatMargin(gutter) {
return 0 + ' ' + gutter + 'rpx';
}
}
}
</script>
<style lang="scss" scoped>
.box {
background-color: #F5F5F5;
padding: 20rpx;
display: flex;
.item {
position: relative;
background-color: #FFFFFF;
height: 100rpx;
flex: 1;
border: 1px solid #F5F5F5;
display: flex;
justify-content: center;
align-items: center;
border-radius: 20rpx;
.circle {
width: 20rpx;
height: 20rpx;
border-radius: 50%;
background-color: #fff;
&.dot {
background-color: #000;
}
}
.psw{
font-size: 24rpx;
}
}
}
.fakecursor::after {
content: '';
display: block;
width: 1px;
height: 32rpx;
animation: blink 1s infinite steps(1, start);
position: absolute;
left: 50%;
top: 50%;
margin-top: -16rpx;
}
@keyframes blink {
0% {
background-color: white;
}
50% {
background-color: black;
}
100% {
background-color: white;
}
}
</style>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>本地网页</title>
<style type="text/css">
.btn {
display: block;
margin: 20px auto;
padding: 5px;
background-color: #007aff;
border: 0;
color: #ffffff;
height: 40px;
width: 200px;
}
.btn-red {
background-color: #dd524d;
}
.btn-yellow {
background-color: #f0ad4e;
}
.desc {
padding: 10px;
color: #999999;
}
</style>
</head>
<body>
<p class="desc">web-view 组件加载本地 html 示例,仅在 App 环境下生效。点击下列按钮,跳转至其它页面。</p>
<div class="btn-list">
<button class="btn" type="button" data-action="navigateTo">navigateTo</button>
<button class="btn" type="button" data-action="redirectTo">redirectTo</button>
<button class="btn" type="button" data-action="navigateBack">navigateBack</button>
<button class="btn" type="button" data-action="reLaunch">reLaunch</button>
<button class="btn" type="button" data-action="switchTab">switchTab</button>
</div>
<p class="desc">网页向应用发送消息。注意:小程序端应用会在此页面后退时接收到消息。</p>
<div class="btn-list">
<button class="btn btn-red" type="button" id="postMessage">postMessage</button>
</div>
<!-- uni 的 SDK -->
<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
<script type="text/javascript">
document.addEventListener('UniAppJSBridgeReady', function() {
document.querySelector('.btn-list').addEventListener('click', function(evt) {
var target = evt.target;
if (target.tagName === 'BUTTON') {
var action = target.getAttribute('data-action');
switch (action) {
case 'switchTab':
uni.switchTab({
url: '/pages/tabBar/API/API'
});
break;
case 'reLaunch':
uni.reLaunch({
url: '/pages/tabBar/API/API'
});
break;
case 'navigateBack':
uni.navigateBack({
delta: 1
});
break;
default:
uni[action]({
url: '/pages/component/button/button'
});
break;
}
}
});
document.querySelector("#postMessage").addEventListener('click', function() {
uni.postMessage({
data: {
action: 'message'
}
});
})
});
</script>
</body>
</html>
<!--
THIS EXAMPLE WAS DOWNLOADED FROM https://echarts.apache.org/examples/zh/editor.html?c=pie-doughnut
-->
<!DOCTYPE html>
<html style="height: 100%">
<head>
<meta charset="utf-8">
<meta name=viewport
content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1">
</head>
<body style="height: 100%; margin: 0">
<div id="container" style="height: 100%"></div>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
<!-- Uncomment this line if you want to dataTool extension
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/extension/dataTool.min.js"></script>
-->
<!-- Uncomment this line if you want to use gl extension
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-gl@2/dist/echarts-gl.min.js"></script>
-->
<!-- Uncomment this line if you want to echarts-stat extension
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-stat@latest/dist/ecStat.min.js"></script>
-->
<!-- Uncomment this line if you want to use map
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/map/js/china.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/map/js/world.js"></script>
-->
<!-- Uncomment these two lines if you want to use bmap extension
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=<Your Key Here>"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/extension/bmap.min.js"></script>
-->
<script type="text/javascript">
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
var app = {};
var option;
option = {
tooltip: {
trigger: 'item'
},
legend: {
top: '5%',
left: 'center'
},
series: [{
name: '访问来源',
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [{
value: 1048,
name: '搜索引擎'
},
{
value: 735,
name: '直接访问'
},
{
value: 580,
name: '邮件营销'
},
{
value: 484,
name: '联盟广告'
},
{
value: 300,
name: '视频广告'
}
]
}]
};
if (option && typeof option === 'object') {
myChart.setOption(option);
}
</script>
</body>
</html>
import Vue from 'vue'
import App from './App'
// OSS静态资源
Vue.prototype.$iImgUrl = 'https://szcf.superbest.wang/xcxImages/'
//http请求
import http from '@/common/js/http.js'
Vue.prototype.$http = http
// 时间处理模块
import dayjs from 'dayjs'
Vue.prototype.$day = dayjs
// OSS静态资源
Vue.prototype.$ImgUrl = 'https://xiaopay2020.oss-cn-shenzhen.aliyuncs.com/static/weapp/';
// #ifdef H5
import Vant from 'vant';
Vue.use(Vant);
// echarts图标
// var echarts = require('echarts')
// Vue.prototype.$echarts = echarts
// console.log(echarts);
// 微信JSSDK
// import jweixin from 'jweixin-module'
// Vue.prototype.$jweixin = jweixin
// console.log(jweixin);
import VConsole from 'vconsole';
// const vConsole = new VConsole();
//加载es5>>js
function loadJs(path, callback) {
let secScript = document.createElement("script");
secScript.setAttribute("src", path);
secScript.setAttribute("async", "async");
document.body.insertBefore(secScript, document.body.lastChild);
secScript.onload = callback;
if (secScript.readyState) {
// IE
secScript.onreadystatechange = function() {
if (secScript.readyState === 'loaded' || secScript.readyState === 'complete') {
secScript.onreadystatechange = null;
callback();
}
};
} else {
//其他浏览器
secScript.onload = callback;
}
}
// //JQ
// loadJs("//s1.pstatp.com/cdn/expire-1-M/jquery/1.8.0/jquery-1.8.0.min.js")
// // 微信-WEUI框架
// loadJs("//res.wx.qq.com/open/libs/weuijs/1.2.1/weui.min.js")
// // 公众号js-sdk
// loadJs("//res.wx.qq.com/open/js/jweixin-1.6.0.js")
// // 二维码生成
// loadJs("//static.runoob.com/assets/qrcode/qrcode.min.js")
// #endif
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
{
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "校智付电子校园卡",
"navigationStyle": "custom",
"usingComponents": {
},
"h5": {
"titleNView": "transparent"
}
}
}, {
"path": "pages/WxworkTearch/WxworkTearch",
"style": {
"navigationBarTitleText": "企业微信教职工采集签约助手",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/wxWorkAuth/wxWorkAuth",
"style": {
"navigationBarTitleText": "校智付",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/assignDeposit/assignDeposit",
"style": {
"navigationBarTitleText": "电子校园卡",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/confirmQrCode/confirmQrCode",
"style": {
"navigationBarTitleText": "识别二维码确认采集信息",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/CreditRefund/CreditRefund",
"style": {
"navigationBarTitleText": "信用金退款",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/ClsWeekReport/ClsWeekReport",
"style": {
"navigationBarTitleText": "周消费报告",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"usingComponents": {
},
"h5": {
"titleNView": "transparent"
}
}
}, {
"path": "pages/NoticeInfo/NoticeInfo",
"style": {
"navigationBarTitleText": "通知公告",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"usingComponents": {
},
"h5": {
"titleNView": "transparent"
}
}
}, {
"path": "pages/AccessControlModular/SchoolAttendance/SchoolAttendance",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}, {
"path": "pages/AccessControlModular/StudentAttendance/StudentAttendance",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}, {
"path": "pages/AccessControlModular/TeacherAttendance/TeacherAttendance",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}, {
"path": "pages/QueryMyWechat/QueryMyWechat",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "我的微信信息",
"enablePullDownRefresh": false,
"h5": {
"titleNView": "transparent"
}
}
}, {
"path": "pages/IcbcModule/Recharge/Recharge",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "充值",
"enablePullDownRefresh": false
}
}, {
"path": "pages/IcbcModule/Reflect/Reflect",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "提现",
"enablePullDownRefresh": false
}
}, {
"path": "pages/AccessControlModular/SchoolAttendance/SchoolAttendance",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}, {
"path": "pages/AccessControlModular/StudentAttendance/StudentAttendance",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}, {
"path": "pages/AccessControlModular/TeacherAttendance/TeacherAttendance",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}, {
"path": "pages/StudentsGraduate/StudentsGraduate",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "首页",
"enablePullDownRefresh": false
}
}, {
"path": "pages/AgreementXL/agreement/main",
"style": {
"navigationBarTitleText": "笑脸校园",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementXL/privacy/main",
"style": {
"navigationBarTitleText": "笑脸校园",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementXL/rule/main",
"style": {
"navigationBarTitleText": "笑脸校园",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementXZF/agreement/main",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementXZF/privacy/main",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementXZF/rule/main",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementICBC/account/main",
"style": {
"navigationBarTitleText": "个人银行电子账户服务协议",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementICBC/personal/main",
"style": {
"navigationBarTitleText": "中国工商银行电子银行个人客户服务协议",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementJSX/agreement/main",
"style": {
"navigationBarTitleText": "晋尚学服务协议",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementJSX/privacy/main",
"style": {
"navigationBarTitleText": "晋尚学未成年人个人信息保护规则",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementJSX/rule/main",
"style": {
"navigationBarTitleText": "晋尚学隐私权政策",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
},
{
"path": "pages/AgreementSZXY/agreement/main",
"style": {
"navigationBarTitleText": "数字校园服务协议",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementSZXY/privacy/main",
"style": {
"navigationBarTitleText": "数字校园未成年人个人信息保护规则",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/AgreementSZXY/rule/main",
"style": {
"navigationBarTitleText": "数字校园隐私权政策",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "校智付",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
<template>
<view class="container">
</view>
</template>
<script>
export default {
name: "SchoolAttendance",
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
</style>
<template>
<view class="container">
</view>
</template>
<script>
export default {
name: "StudentAttendance",
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
</style>
<template>
<view class="container">
</view>
</template>
<script>
export default {
name: "TeacherAttendance",
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
</style>
This diff is collapsed.
This diff is collapsed.
<template>
<view class="container">
<div class="title">晋尚学服务协议</div>
感谢您选择晋尚学服务。
<div class="paragraph">
<div class="t bold">第一条 总则</div>
<p>
1、本服务协议(以下简称“本协议”)是太原市茗庐科贸有限公司(以下简称“晋尚学”)与晋尚学用户(以下简称“用户”或“您”)就“人脸服务”(以下简称“本服务”)的使用等相关事项所订立的有效合约。您通过网络页面点击确认或以其他方式选择接受本协议,即表示您与晋尚学已达成协议并同意接受本协议的全部约定内容。
</p>
<p>
2、由于晋尚学服务是本公司依托微信支付提供的服务,在使用本服务前,您应阅读并遵守本协议和<span class="bold">《微信支付用户服务协议》</span><span class="bold">
在接受本协议之前,请您仔细阅读本协议的全部内容,尤其是加粗的文字部分。如果您不同意本协议的任意内容,或者无法准确理解晋尚学对条款的解释,请不要进行后续操作。</span>
</p>
<p class="bold">
3、如您为无民事行为能力人或为限制民事行为能力人,请告知您的监护人,并在您监护人的指导下阅读本协议和使用我们的服务。
</p>
</div>
<div class="paragraph">
<div class="t bold">第二条 定义</div>
<p>1、刷脸服务:指用户开通刷脸服务并完成人脸图片的采集后,用户可通过在商家处扫描人脸即识别您的晋尚学账户信息,并完成相关O2O服务。</p>
</div>
<div class="paragraph">
<div class="t bold">第三条 基础条款</div>
<p>
1、您在开通刷脸服务过程中进行脸部拍摄所得的脸部图片(以下简称“原图”),仅用于达成您的刷脸服务。您应根据晋尚学页面的提示做出相应动作,晋尚学系统判断您的动作符合要求后,即可完成脸部拍摄。晋尚学承诺不通过任何技术手段留存您的任何敏感信息,包括但不限于银行账户账号、账户余额及用于客户鉴别的个人生物识别信息等。
</p>
<p>
2、晋尚学应在现有技术能力上保障刷脸服务的有效、正常运行。
</p>
<p>
3、除本协议另有规定外,晋尚学在提前邮件通知您或在网站公告的情况下,可以单方面终止向您提供刷脸服务,并不承担任何赔偿责任。晋尚学在终止提供刷脸服务后,若发现您之前存在违法或违反本协议目的的使用行为,给晋尚学造成损失的,则晋尚学仍可据此要求您承担相应赔偿责任并保留通过司法途径予以解决的权利。
</p>
<p>
4、晋尚学负责向您提供刷脸服务的咨询,并在晋尚学网站公布功能介绍、使用规则等内容。
</p>
<p>
5、晋尚学应根据<span class="bold"
@click="ToOtherPage('rule')">《晋尚学隐私权政策》</span>的约定严格保护您的信息及使用您在使用本服务过程中留存在晋尚学的相关信息。
</p>
</div>
<div class="paragraph">
<div class="t bold">第四条 刷脸服务特别约定</div>
<p>1、您开通刷脸服务后,可在开通了刷脸服务的商家处直接通过商家收银设备扫描您的人脸直接完成O2O服务,而不需要输入微信账户支付密码。</p>
<p>2、您理解并同意,您使用刷脸服务扫描您人脸的行为,视为您向晋尚学发出了不可撤销地支付、核销等指令;且该行为与您使用微信账户、密码的行为具有相同的法律效力。</p>
<p>3、本协议所称的O2O服务,是指在晋尚学特约商户的线下门店中开展的折扣核销、线下支付等。</p>
<p>4、您理解并同意晋尚学支持的O2O服务将根据市场情况不断进行调整,具体以晋尚学支持的场景为准。</p>
</div>
<div class="paragraph">
<div class="t bold">第五条用户信息的收集和使用</div>
<p>1.您理解并同意,<span
class="bold">您通过网络页面点击确认或以其他方式选择接受本协议时,您即授权我们收集、存储并为提供服务之目的合理使用您的用户信息,包括创建晋尚学账户的登记注册信息,以及基于晋尚学使用产生的消费数据信息等。</span>
</p>
<p>
2.我们出于如下目的,使用您提交以及我们收集的用户信息:
<p>(1)为了向您和您的孩子提供产品服务(如实名认证信息、用来接受验证码的手机号,是继续获得服务的前提;如身份证号、人脸信息是您孩子在学校享受人脸识别产品的认证前提)。</p>
<p>(2)为了维护、改进服务(如您提交的手机号用来接收服务通知和进行服务沟通)。</p>
<p>(3)因校方管理需要提供的消费数据报表内包含您的消费数据信息,或者为您提供您孩子一定时间阶段的个人消费报表而进行的必要数据采集加工。</p>
<p>(4)在法律法规允许的前提下,向您推广、介绍产品。</p>
<p>(5)经您许可的其他用途。</p>
</p>
<p>
3.个人信息不被泄露和买卖的服务保障
<p>
为保障您的信息安全,我们努力采取各种合理的物理、电子和管理方面的安全措施来保护您的信息,使您和您孩子的信息不会被泄露、毁损或者丢失。我们对可能接触到您的信息的员工采取了严格的管理,包括但不限于根据岗位的不同采取不同的权限控制,与他们签署保密协议。晋尚学会按现有技术提供相应的安全措施来保护您的信息,提供合理的安全保障,晋尚学将尽力做到使您的信息不被泄露、毁损或丢失。
<p class="bold">鉴于国家信息中心安全要求,对于您孩子因刷脸消费所采集的人脸信息,由深圳市腾讯计算机系统有限公司进行存管。</p>
</p>
</p>
<p>
4.如您为未成年人的监护人,当您对您所监护的未成年人的信息处理存在疑问时,请通过客服热线<span class="bold">0351-3200799</span>联系我们。更多详情,敬请查阅<span
class="bold" @click="ToOtherPage('privacy')">《晋尚学未成年人个人信息保护规则》</span>
</p>
</div>
<div class="paragraph">
<div class="t bold">第六条 协议修改</div>
<p>
1、晋尚学将有权随时修改本协议的有关条款,一旦相关内容发生变动,晋尚学公司将会通过电子邮件或网站公告等方式向您提示修改内容。
</p>
<p>
2、如果您不同意晋尚学对本协议相关条款所做的修改或者晋尚学不时公布的《晋尚学服务协议》及相关附属规则,您应立即停止使用晋尚学提供的本项服务。如果您继续使用晋尚学提供的服务,则视为您接受并认可本协议相关条款的修改及晋尚学不时公布的《晋尚学服务协议》及相关附属规则。
</p>
</div>
<div class="paragraph bold">
<div class="t bold">第七条 不可抗力、免责及责任限制</div>
<p>免责条款</p>
<p>因下列原因导致我们无法正常提供服务,我们免于承担责任:</p>
<p>1、我们的系统停机维护或升级;</p>
<p>2、因台风、地震、洪水、雷电或恐怖袭击等不可抗力原因;</p>
<p>3、您的电子设备软硬件和通信线路、供电线路出现故障的;</p>
<p>4、因您操作不当或通过非经我们授权或认可的方式使用我们服务的;</p>
<p>5、因病毒、木马、恶意程序攻击、网络拥堵、系统不稳定、系统或设备故障、通讯故障、电力故障、银行原因、第三方服务瑕疵或政府行为等原因。
尽管有前款约定,我们将采取合理行动积极促使服务恢复正常。</p>
</div>
<div class="paragraph">
<div class="t bold">第八条 争议的解决</div>
<p>本协议签订地为中华人民共和国山西省太原市万柏林区人民法院。</p>
<p>双方在履行本协议的过程中,如发生争议,应协商解决。协商不成的,<span class="bold">何一方均可向合同签订地(山西省太原市万柏林区)有管辖权的人民法院提起诉讼。</span></p>
</div>
<div class="paragraph">
<div class="t bold">第九条 协议的解释</div>
<p>本协议的成立、生效、履行和解释,均适用中华人民共和国法律。<span
class="bold">本服务协议未规定部分依照《微信支付用户服务协议》及相关附属规则予以履行;本协议与《微信支付用户服务协议》及相关附属规则不一致的,以本协议为准。</span></p>
</div>
</view>
</template>
<script>
export default {
name: "agreement",
data() {
return {
}
},
onLoad: function(options) {
// AppID
},
methods: {
async ToOtherPage(name) {
uni.navigateTo({
url: `../${name}/main`
})
}
}
}
</script>
<style scoped>
.container {
padding: 20rpx;
}
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
padding: 20rpx 0;
}
.paragraph {
margin-top: 20rpx;
font-size: 14px;
}
.paragraph .t {
font-size: 16px;
}
.bold {
font-weight: bold;
}
</style>
<template>
<view class="container">
<div class="title">晋尚学未成年人个人信息保护规则</div>
<div class="bold" style="text-indent: 2em;">
我们非常理解个人信息对未成年人及其监护人而言的重要性,也感谢未成年人及其监护人对我们的信任。为了更好地保护未成年人信息,除《晋尚学隐私权政策》以外,我们还将通过《晋尚学未成年人个人信息保护规则》(以下简称“本规则”)向未成年人及其监护人说明晋尚学会怎样对外提供未成年人的个人信息(以下简称“未成年人信息”),并说明未成年人及其监护人所享有的权利。为了维护未成年人的合法权益,未成年人应当在其监护人的指导下使用我们的服务。
</div>
<div class="paragraph">
<div class="t bold">一、我们如何收集未成年人信息</div>
<p>
在用户使用我们提供的各项业务功能(以下统称“服务”)的过程中,我们可能需要收集一些信息来向用户提供服务,这些信息当中涉及部分未成年人信息。我们在
<span class="bold"
@click="ToOtherPage('rule')">《晋尚学隐私权政策》</span>当中,结合具体服务逐一说明了需要用户同意我们收集的信息类型与用途以及拒绝同意的后果。
<p class="bold">
当用户使用我们提供的与未成年人有关的服务时,我们在服务中将按照如下约定收集信息:
</p>
</p>
<div class="bold">1.1 校园相关服务</div>
<p>
我们专为学校提供服务(例如:校园人脸支付、电子校园卡等,具体服务以实际提供的为准)。可以按照页面提示输入必要的未成年人信息,例如:姓名、证件号码,我们将与学校进行信息核验。核验通过后,我们将根据机构反馈的信息提供相应的服务。如用户不提供前述信息,可能无法使用校园相关服务。
</p>
<p class="bold">
1.2 我们提供的与未成年人有关的服务是不断迭代更新的。如果我们需要使用本规则尚未说明的有关信息,我们会通过页面提示、协议约定的方式另行说明信息收集的范围、目的与用途,并征得未成年人及其监护人的同意。
</p>
</div>
<div class="paragraph">
<div class="t bold">二、我们如何对外提供未成年人信息</div>
<p>
2.1 我们承诺对未成年人信息进行严格保密,仅在<span class="bold"
@click="ToOtherPage('rule')">《晋尚学隐私权政策》</span>约定的情况下对外提供未成年人信息。
<span class="bold">
如果为了向用户提供服务而需要将未成年人信息共享至第三方,我们会按照法律法规及国家标准的要求征得未成年人及其监护人的同意,或确认第三方已经征得未成年人及其监护人的同意。
</span>
</p>
</div>
<div class="paragraph">
<div class="t bold">三、我们如何存储和保护未成年人信息</div>
<p style="margin-top: 20rpx;">
3.1
我们会按照<span class="bold"
@click="ToOtherPage('rule')">《晋尚学隐私权政策》</span>的约定存储与保护未成年人信息。我们指定了专人负责未成年人信息的保护,严格设定信息访问权限,对可能接触到未成年人信息的工作人员采取最小够用授权原则,并采取技术措施对工作人员处理未成年人信息的行为进行记录和管控,避免违法复制、下载未成年人个人信息。
</p>
<p style="margin-top: 20rpx;">3.2
若不幸发生未成年人信息安全事件,我们将按照法律法规的要求,及时向未成年人及其监护人告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、未成年人及其监护人可自主防范和降低风险的建议、对未成年人及其监护人的补救措施等。我们将及时将事件相关情况以微信推送通知、发送邮件/短消息等方式告知未成年人及其监护人。难以逐一告知时,我们会采取合理、有效的方式发布相关警示信息。同时,我们还将按照监管部门要求,主动上报未成年人信息安全事件的处置情况。若未成年人及其监护人的合法权益受损,我们将承担相应的法律责任。
</p>
<p style="margin-top:20rpx;">3.3
在未成年人终止使用晋尚学服务后,我们会停止对未成年人信息的使用,法律法规或监管部门另有规定的除外。如我们停止运营,我们将及时停止运营的通知以逐一送达或公告的形式进行通知,并对所持有的未成年人信息进行删除。
</p>
</div>
<div class="paragraph">
<div style="margin-top:20rpx;" class="t bold">四、我们如何使用未成年人信息</div>
<p>4.1 为了遵守国家法律法规及监管要求,以及向用户提供服务及提升服务质量,或保障用户的账户和资金安全,我们会按照《晋尚学隐私权政策》及本规则的约定使用未成年人信息。</p>
<p style="margin-top:20rpx;" class="bold">4.2
当我们要将未成年人信息用于《晋尚学隐私权政策》及本规则未载明的其他用途时,会按照法律法规及国家标准的要求再次征得未成年人及其监护人的同意。</p>
</div>
<div class="paragraph">
<div class="t bold">五、如何访问和管理未成年人信息</div>
<p>
5.1 下列情形下,监护人及学校可联系我们,要求删除相应的未成年人信息:
<p>(1)我们违反法律、行政法规的规定或者双方的约定收集、存储、使用、对外提供未成年人信息的;</p>
<p>(2)超出目的范围或者必要期限收集、存储、使用、对外提供未成年人信息的;</p>
<p>(3)未成年人的监护人撤回同意的;</p>
<p>(4)未成年的监护人通过注销等方式终止使用产品或者服务的。</p>
</p>
<p style="margin-top:20rpx;">
5.2
为保障未成年人信息的安全,如发生投诉等情况,我们会在收到投诉后的三个工作日内处理完成,特殊情形下最长将在不超过三十天或法律法规规定期限内作出答复。如未成年人或者其监护人不满意我们的答复,还可以通过电话12315向消费者权益保护部门投诉或向有管辖权的法院提起诉讼。
</p>
</div>
<div class="paragraph bold">
<div class="t bold">六、本规则的适用及更新</div>
<p>
6.1 发生下列重大变化情形时,我们会适时对本规则进行更新:
<p>(1)我们的基本情况发生变化,例如:兼并、收购、重组引起的所有者变更;</p>
<p>(2)收集、存储、使用、对外提供未成年人信息的范围、目的、规则发生变化;</p>
<p>(3)未成年人信息存储的地点、期限和到期后的处理方式发生变化;</p>
<p>(4)数据安全能力、信息安全风险、未成年人信息的安全保障措施发生变化;</p>
<p>(5)拒绝同意的后果发生变化;</p>
<p>(6)用户询问、投诉的渠道和机制,以及外部纠纷解决机构及联络方式发生变化;</p>
<p>(7)更正、删除未成年人信息的途径和方法发生变化;</p>
<p>(8)其他可能对未成年人信息权益产生重大影响的变化。</p>
</p>
<p>如本规则发生更新,我们将以微信推送通知、小程序弹窗提示、发送邮件/短消息或者在晋尚学官方网站发布公告的方式来通知未成年人及其监护人。为了未成年人及其监护人能及时接收到通知,建议未成年人及其监护人在联系方式更新时及时通知我们。如未成年人在本规则更新生效后继续使用晋尚学服务,即表示未成年人及其监护人已充分阅读、理解并接受更新后的规则并愿意受更新后的规则约束。
</p>
</div>
<div class="paragraph bold">
<div class="t bold">七、本规则中关键词说明</div>
<p>7.1 本规则中的“未成年人”是指:不满十四周岁的中华人民共和国公民。</p>
</div>
</view>
</template>
<script>
export default {
name: "privacy",
data() {
return {
}
},
methods: {
async ToOtherPage(name) {
uni.navigateTo({
url: `../${name}/main`
})
}
}
}
</script>
<style scoped>
.container {
padding: 20rpx;
}
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
padding: 20rpx 0;
}
.paragraph {
margin-top: 20rpx;
font-size: 14px;
}
.paragraph .t {
font-size: 16px;
}
.bold {
font-weight: bold;
}
</style>
This diff is collapsed.
<template>
<view class="container">
<div class="title">数字校园服务协议</div>
感谢您选择数字校园服务。
<div class="paragraph">
<div class="t bold">第一条 总则</div>
<p>
1、本服务协议(以下简称“本协议”)是广州市安开信息科技有限公司(以下简称“数字校园”)与数字校园用户(以下简称“用户”或“您”)就“人脸服务”(以下简称“本服务”)的使用等相关事项所订立的有效合约。您通过网络页面点击确认或以其他方式选择接受本协议,即表示您与数字校园已达成协议并同意接受本协议的全部约定内容。
</p>
<p>
2、由于数字校园服务是本公司依托微信支付提供的服务,在使用本服务前,您应阅读并遵守本协议和<span class="bold">《微信支付用户服务协议》</span>。在接受本协议之前,请您仔细阅读本协议的全部内容,<span class="bold">尤其是加粗的文字部分。如果您不同意本协议的任意内容,或者无法准确理解数字校园对条款的解释,请不要进行后续操作。</span>
</p>
<p class="bold">
3、如您为无民事行为能力人或为限制民事行为能力人,请告知您的监护人,并在您监护人的指导下阅读本协议和使用我们的服务。
</p>
</div>
<div class="paragraph">
<div class="t bold">第二条 定义</div>
<p>1、刷脸服务:指用户开通刷脸服务并完成人脸图片的采集后,用户可通过在商家处扫描人脸即识别您的数字校园账户信息,并完成相关O2O服务。</p>
</div>
<div class="paragraph">
<div class="t bold">第三条 基础条款</div>
<p>1、您在开通刷脸服务过程中进行脸部拍摄所得的脸部图片(以下简称“原图”),仅用于达成您的刷脸服务。您应根据数字校园页面的提示做出相应动作,数字校园系统判断您的动作符合要求后,即可完成脸部拍摄。数字校园承诺不通过任何技术手段留存您的任何敏感信息,包括但不限于银行账户账号、账户余额及用于客户鉴别的个人生物识别信息等。
</p>
<p>2、数字校园应在现有技术能力上保障刷脸服务的有效、正常运行。</p>
<p>3、除本协议另有规定外,数字校园在提前邮件通知您或在网站公告的情况下,可以单方面终止向您提供刷脸服务,并不承担任何赔偿责任。数字校园在终止提供刷脸服务后,若发现您之前存在违法或违反本协议目的的使用行为,给数字校园造成损失的,则数字校园仍可据此要求您承担相应赔偿责任并保留通过司法途径予以解决的权利。
</p>
<p>4、数字校园负责向您提供刷脸服务的咨询,并在数字校园网站公布功能介绍、使用规则等内容。</p>
<p>5、数字校园应根据 <span class="bold"
@click="ToOtherPage('rule')">《数字校园隐私权政策》</span>的约定严格保护您的信息及使用您在使用本服务过程中留存在数字校园的相关信息。</p>
</div>
<div class="paragraph">
<div class="t bold">第四条 刷脸服务特别约定</div>
<p>1、您开通刷脸服务后,可在开通了刷脸服务的商家处直接通过商家收银设备扫描您的人脸直接完成O2O服务,而不需要输入微信账户支付密码。</p>
<p>2、您理解并同意,您使用刷脸服务扫描您人脸的行为,视为您向数字校园发出了不可撤销地支付、核销等指令;且该行为与您使用微信账户、密码的行为具有相同的法律效力。</p>
<p>3、本协议所称的O2O服务,是指在数字校园特约商户的线下门店中开展的折扣核销、线下支付等。</p>
<p>4、您理解并同意数字校园支持的O2O服务将根据市场情况不断进行调整,具体以数字校园支持的场景为准。</p>
</div>
<div class="paragraph">
<div class="t bold">第五条用户信息的收集和使用</div>
<p class="bold">
1.您理解并同意,<span class="bold">您通过网络页面点击确认或以其他方式选择接受本协议时,您即授权我们收集、存储并为提供服务之目的合理使用您的用户信息,包括创建数字校园账户的登记注册信息,以及基于数字校园使用产生的消费数据信息等。</span>
</p>
<p>
2.我们出于如下目的,使用您提交以及我们收集的用户信息:
<p>(1)为了向您和您的孩子提供产品服务(如实名认证信息、用来接受验证码的手机号,是继续获得服务的前提;如身份证号、人脸信息是您孩子在学校享受人脸识别产品的认证前提)。</p>
<p>(2)为了维护、改进服务(如您提交的手机号用来接收服务通知和进行服务沟通)。</p>
<p>(3)因校方管理需要提供的消费数据报表内包含您的消费数据信息,或者为您提供您孩子一定时间阶段的个人消费报表而进行的必要数据采集加工。</p>
<p>(4)在法律法规允许的前提下,向您推广、介绍产品。</p>
<p>(5)经您许可的其他用途。</p>
</p>
<p>
3.个人信息不被泄露和买卖的服务保障
<p>
为保障您的信息安全,我们努力采取各种合理的物理、电子和管理方面的安全措施来保护您的信息,使您和您孩子的信息不会被泄露、毁损或者丢失。我们对可能接触到您的信息的员工采取了严格的管理,包括但不限于根据岗位的不同采取不同的权限控制,与他们签署保密协议。数字校园会按现有技术提供相应的安全措施来保护您的信息,提供合理的安全保障,数字校园将尽力做到使您的信息不被泄露、毁损或丢失。
<p class="bold">鉴于国家信息中心安全要求,对于您孩子因刷脸消费所采集的人脸信息,由深圳市腾讯计算机系统有限公司进行存管。</p>
</p>
</p>
<p>4.如您为未成年人的监护人,当您对您所监护的未成年人的信息处理存在疑问时,请通过客服热线<span class="bold">020-22092396</span>联系我们。更多详情,敬请查阅<span
class="bold" @click="ToOtherPage('privacy')">《数字校园未成年人个人信息保护规则》</span></p>
</div>
<div class="paragraph">
<div class="t bold">第六条 协议修改</div>
<p>1、数字校园将有权随时修改本协议的有关条款,一旦相关内容发生变动,数字校园公司将会通过电子邮件或网站公告等方式向您提示修改内容。</p>
<p>2、如果您不同意数字校园对本协议相关条款所做的修改或者数字校园不时公布的《数字校园服务协议》及相关附属规则,您应立即停止使用数字校园提供的本项服务。如果您继续使用数字校园提供的服务,则视为您接受并认可本协议相关条款的修改及数字校园不时公布的《数字校园服务协议》及相关附属规则。
</p>
</div>
<div class="paragraph bold">
<div class="t bold">第七条 不可抗力、免责及责任限制</div>
<p class="bold">免责条款</p>
<p class="bold">因下列原因导致我们无法正常提供服务,我们免于承担责任:</p>
<p class="bold">1、我们的系统停机维护或升级;</p>
<p class="bold">2、因台风、地震、洪水、雷电或恐怖袭击等不可抗力原因;</p>
<p class="bold">3、您的电子设备软硬件和通信线路、供电线路出现故障的;</p>
<p class="bold">4、因您操作不当或通过非经我们授权或认可的方式使用我们服务的;</p>
<p class="bold">5、因病毒、木马、恶意程序攻击、网络拥堵、系统不稳定、系统或设备故障、通讯故障、电力故障、银行原因、第三方服务瑕疵或政府行为等原因。</p>
<p class="bold">尽管有前款约定,我们将采取合理行动积极促使服务恢复正常。</p>
</div>
<div class="paragraph">
<div class="t bold">第八条 争议的解决</div>
<p>本协议签订地为中华人民共和国广东省广州市天河区人民法院。</p>
<p>双方在履行本协议的过程中,如发生争议,应协商解决。协商不成的,<span class="bold">任何一方均可向合同签订地(广东省广州市天河区)有管辖权的人民法院提起诉讼。</span></p>
</div>
<div class="paragraph">
<div class="t bold">第九条 协议的解释</div>
<p>本协议的成立、生效、履行和解释,均适用中华人民共和国法律。<span
class="bold">本服务协议未规定部分依照《微信支付用户服务协议》及相关附属规则予以履行;本协议与《微信支付用户服务协议》及相关附属规则不一致的,以本协议为准。</span> </p>
</div>
</view>
</template>
<script>
export default {
name: "StudentAttendance",
data() {
return {
}
},
onLoad: function(options) {
// AppID
},
methods: {
async ToOtherPage(name) {
uni.navigateTo({
url: `../${name}/main`
})
}
}
}
</script>
<style scoped>
.container {
padding: 20rpx;
}
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
padding: 20rpx 0;
}
.paragraph {
margin-top: 20rpx;
font-size: 14px;
}
.paragraph .t {
font-size: 16px;
}
.bold {
font-weight: bold;
}
</style>
<template>
<view class="container">
<div class="title">数字校园未成年人个人信息保护规则</div>
<div class="bold" style="text-indent: 2em;">
我们非常理解个人信息对未成年人及其监护人而言的重要性,也感谢未成年人及其监护人对我们的信任。为了更好地保护未成年人信息,除《数字校园隐私权政策》以外,我们还将通过《数字校园未成年人个人信息保护规则》(以下简称“本规则”)向未成年人及其监护人说明数字校园会怎样对外提供未成年人的个人信息(以下简称“未成年人信息”),并说明未成年人及其监护人所享有的权利。为了维护未成年人的合法权益,未成年人应当在其监护人的指导下使用我们的服务。
</div>
<div class="paragraph">
<div class="t bold">一、我们如何收集未成年人信息</div>
<p>
在用户使用我们提供的各项业务功能(以下统称“服务”)的过程中,我们可能需要收集一些信息来向用户提供服务,这些信息当中涉及部分未成年人信息。我们在《数字校园隐私权政策》当中,结合具体服务逐一说明了需要用户同意我们收集的信息类型与用途以及拒绝同意的后果。<span class="bold">当用户使用我们提供的与未成年人有关的服务时,我们在服务中将按照如下约定收集信息:</span>
</p>
<p class="bold">1.1 校园相关服务</p>
<p>我们专为学校提供服务(例如:校园人脸支付、电子校园卡等,具体服务以实际提供的为准)。可以按照页面提示输入必要的未成年人信息,例如:姓名、证件号码,我们将与学校进行信息核验。核验通过后,我们将根据机构反馈的信息提供相应的服务。如用户不提供前述信息,可能无法使用校园相关服务。</p>
<p class="bold">1.2 我们提供的与未成年人有关的服务是不断迭代更新的。如果我们需要使用本规则尚未说明的有关信息,我们会通过页面提示、协议约定的方式另行说明信息收集的范围、目的与用途,并征得未成年人及其监护人的同意。</p>
</div>
<div class="paragraph">
<div class="t bold">二、我们如何对外提供未成年人信息</div>
<p>2.1 我们承诺对未成年人信息进行严格保密,仅在《数字校园隐私权政策》约定的情况下对外提供未成年人信息。<span class="bold">如果为了向用户提供服务而需要将未成年人信息共享至第三方,我们会按照法律法规及国家标准的要求征得未成年人及其监护人的同意,或确认第三方已经征得未成年人及其监护人的同意。</span> </p>
</div>
<div class="paragraph">
<div class="t bold">三、我们如何存储和保护未成年人信息</div>
<p>3.1 我们会按照《数字校园隐私权政策》的约定存储与保护未成年人信息。我们指定了专人负责未成年人信息的保护,严格设定信息访问权限,对可能接触到未成年人信息的工作人员采取最小够用授权原则,并采取技术措施对工作人员处理未成年人信息的行为进行记录和管控,避免违法复制、下载未成年人个人信息。</p>
<p>3.2 若不幸发生未成年人信息安全事件,我们将按照法律法规的要求,及时向未成年人及其监护人告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、未成年人及其监护人可自主防范和降低风险的建议、对未成年人及其监护人的补救措施等。我们将及时将事件相关情况以微信推送通知、发送邮件/短消息等方式告知未成年人及其监护人。难以逐一告知时,我们会采取合理、有效的方式发布相关警示信息。同时,我们还将按照监管部门要求,主动上报未成年人信息安全事件的处置情况。若未成年人及其监护人的合法权益受损,我们将承担相应的法律责任。</p>
<p>3.3 在未成年人终止使用数字校园服务后,我们会停止对未成年人信息的使用,法律法规或监管部门另有规定的除外。如我们停止运营,我们将及时停止运营的通知以逐一送达或公告的形式进行通知,并对所持有的未成年人信息进行删除。</p>
</div>
<div class="paragraph">
<div class="t bold">四、我们如何使用未成年人信息</div>
<p>4.1 为了遵守国家法律法规及监管要求,以及向用户提供服务及提升服务质量,或保障用户的账户和资金安全,我们会按照《数字校园隐私权政策》及本规则的约定使用未成年人信息。</p>
<p class="bold">4.2 当我们要将未成年人信息用于《数字校园隐私权政策》及本规则未载明的其他用途时,会按照法律法规及国家标准的要求再次征得未成年人及其监护人的同意。</p>
</div>
<div class="paragraph">
<div class="t bold">五、如何访问和管理未成年人信息</div>
<p>
5.1 下列情形下,监护人及学校可联系我们,要求删除相应的未成年人信息:
<p>(1)我们违反法律、行政法规的规定或者双方的约定收集、存储、使用、对外提供未成年人信息的;</p>
<p>(2)超出目的范围或者必要期限收集、存储、使用、对外提供未成年人信息的;</p>
<p>(3)未成年人的监护人撤回同意的;</p>
<p>(4)未成年人的监护人通过注销等方式终止使用产品或者服务的。</p>
</p>
<p>5.2 为保障未成年人信息的安全,如发生投诉等情况,我们会在收到投诉后的三个工作日内处理完成,特殊情形下最长将在不超过三十天或法律法规规定期限内作出答复。如未成年人或者其监护人不满意我们的答复,还可以通过电话12315向消费者权益保护部门投诉或向有管辖权的法院提起诉讼。</p>
</div>
<div class="paragraph">
<div class="t bold">六、本规则的适用及更新</div>
<p class="bold">
6.1 发生下列重大变化情形时,我们会适时对本规则进行更新:
<p class="bold">(1)我们的基本情况发生变化,例如:兼并、收购、重组引起的所有者变更;</p>
<p class="bold">(2)收集、存储、使用、对外提供未成年人信息的范围、目的、规则发生变化;</p>
<p class="bold">(3)未成年人信息存储的地点、期限和到期后的处理方式发生变化;</p>
<p class="bold">(4)数据安全能力、信息安全风险、未成年人信息的安全保障措施发生变化;</p>
<p class="bold">(5)拒绝同意的后果发生变化;</p>
<p class="bold">(6)用户询问、投诉的渠道和机制,以及外部纠纷解决机构及联络方式发生变化;</p>
<p class="bold">(7)更正、删除未成年人信息的途径和方法发生变化;</p>
<p class="bold">(8)其他可能对未成年人信息权益产生重大影响的变化。</p>
</p>
<p class="bold">
如本规则发生更新,我们将以微信推送通知、小程序弹窗提示、发送邮件/短消息或者在数字校园官方网站发布公告的方式来通知未成年人及其监护人。为了未成年人及其监护人能及时接收到通知,建议未成年人及其监护人在联系方式更新时及时通知我们。如未成年人在本规则更新生效后继续使用数字校园服务,即表示未成年人及其监护人已充分阅读、理解并接受更新后的规则并愿意受更新后的规则约束。
</p>
</div>
<div class="paragraph">
<div class="t bold">七、本规则中关键词说明</div>
<p class="bold">7.1 本规则中的“未成年人”是指:不满十四周岁的中华人民共和国公民。</p>
</div>
</view>
</template>
<script>
export default {
name: "StudentAttendance",
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
.container {
padding:20rpx;
}
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
padding: 20rpx 0;
}
.paragraph {
margin-top:20rpx;
font-size:14px;
}
.paragraph .t{
font-size:16px;
}
.bold {
font-weight: bold;
}
</style>
This diff is collapsed.
<template>
<view class="container">
<div class="title">笑脸校园服务协议</div>
感谢您选择笑脸校园服务。
<div class="paragraph">
<div class="t bold">第一条 总则</div>
<p>
1、本服务协议(以下简称“本协议”)是北京笑脸校园科技有限公司(以下简称“笑脸校园”)与笑脸校园用户(以下简称“用户”或“您”)就“人脸服务”(以下简称“本服务”)的使用等相关事项所订立的有效合约。您通过网络页面点击确认或以其他方式选择接受本协议,即表示您与笑脸校园已达成协议并同意接受本协议的全部约定内容。
</p>
<p>
2、由于笑脸校园服务是本公司依托微信支付提供的服务,在使用本服务前,您应阅读并遵守本协议和<span class="bold">《微信支付用户服务协议》</span><span
class="bold">在接受本协议之前,请您仔细阅读本协议的全部内容,尤其是加粗的文字部分。如果您不同意本协议的任意内容,或者无法准确理解笑脸校园对条款的解释,请不要进行后续操作</span>
</p>
<p class="bold">
3、如您为无民事行为能力人或为限制民事行为能力人,请告知您的监护人,并在您监护人的指导下阅读本协议和使用我们的服务。
</p>
</div>
<div class="paragraph">
<div class="t bold">第二条 定义</div>
<p>1、刷脸服务:指用户开通刷脸服务并完成人脸图片的采集后,用户可通过在商家处扫描人脸即识别您的笑脸校园账户信息,并完成相关O2O服务。</p>
</div>
<div class="paragraph">
<div class="t bold">第三条 基础条款</div>
<p>
1、您在开通刷脸服务过程中进行脸部拍摄所得的脸部图片(以下简称“原图”),仅用于达成您的刷脸服务。您应根据笑脸校园页面的提示做出相应动作,笑脸校园系统判断您的动作符合要求后,即可完成脸部拍摄。笑脸校园承诺不通过任何技术手段留存您的任何敏感信息,包括但不限于银行账户账号、账户余额及用于客户鉴别的个人生物识别信息等。
</p>
<p>
2、笑脸校园应在现有技术能力上保障刷脸服务的有效、正常运行。
</p>
<p>
3、除本协议另有规定外,笑脸校园在提前邮件通知您或在网站公告的情况下,可以单方面终止向您提供刷脸服务,并不承担任何赔偿责任。笑脸校园在终止提供刷脸服务后,若发现您之前存在违法或违反本协议目的的使用行为,给笑脸校园造成损失的,则笑脸校园仍可据此要求您承担相应赔偿责任并保留通过司法途径予以解决的权利。
</p>
<p>
4、笑脸校园负责向您提供刷脸服务的咨询,并在笑脸校园网站公布功能介绍、使用规则等内容。
</p>
<p>
5、笑脸校园应根据<span class="bold"
@click="ToOtherPage('rule')">《笑脸校园隐私权政策》</span>的约定严格保护您的信息及使用您在使用本服务过程中留存在笑脸校园的相关信息。
</p>
</div>
<div class="paragraph">
<div class="t bold">第四条 刷脸服务特别约定</div>
<p>1、您开通刷脸服务后,可在开通了刷脸服务的商家处直接通过商家收银设备扫描您的人脸直接完成O2O服务,而不需要输入微信账户支付密码。</p>
<p>2、您理解并同意,您使用刷脸服务扫描您人脸的行为,视为您向笑脸校园发出了不可撤销地支付、核销等指令;且该行为与您使用微信账户、密码的行为具有相同的法律效力。</p>
<p>3、本协议所称的O2O服务,是指在笑脸校园特约商户的线下门店中开展的折扣核销、线下支付等。</p>
<p>4、您理解并同意笑脸校园支持的O2O服务将根据市场情况不断进行调整,具体以笑脸校园支持的场景为准。</p>
</div>
<div class="paragraph">
<div class="t bold">第五条用户信息的收集和使用</div>
<p>1.您理解并同意,<span
class="bold">您通过网络页面点击确认或以其他方式选择接受本协议时,您即授权我们收集、存储并为提供服务之目的合理使用您的用户信息,包括创建笑脸校园账户的登记注册信息,以及基于笑脸校园使用产生的消费数据信息等。</span>
</p>
<p>
2.我们出于如下目的,使用您提交以及我们收集的用户信息:
<p>(1)为了向您和您的孩子提供产品服务(如实名认证信息、用来接受验证码的手机号,是继续获得服务的前提;如身份证号、人脸信息是您孩子在学校享受人脸识别产品的认证前提)。</p>
<p>(2)为了维护、改进服务(如您提交的手机号用来接收服务通知和进行服务沟通)。</p>
<p>(3)因校方管理需要提供的消费数据报表内包含您的消费数据信息,或者为您提供您孩子一定时间阶段的个人消费报表而进行的必要数据采集加工。</p>
<p>(4)在法律法规允许的前提下,向您推广、介绍产品。</p>
<p>(5)经您许可的其他用途。</p>
</p>
<p>
3.个人信息不被泄露和买卖的服务保障
<p>
为保障您的信息安全,我们努力采取各种合理的物理、电子和管理方面的安全措施来保护您的信息,使您和您孩子的信息不会被泄露、毁损或者丢失。我们对可能接触到您的信息的员工采取了严格的管理,包括但不限于根据岗位的不同采取不同的权限控制,与他们签署保密协议。笑脸校园会按现有技术提供相应的安全措施来保护您的信息,提供合理的安全保障,笑脸校园将尽力做到使您的信息不被泄露、毁损或丢失。
<p class="bold">鉴于国家信息中心安全要求,对于您孩子因刷脸消费所采集的人脸信息,由深圳市腾讯计算机系统有限公司进行存管。</p>
</p>
</p>
<p>
4.如您为未成年人的监护人,当您对您所监护的未成年人的信息处理存在疑问时,请通过客服热线<span class="bold">400-1661-276</span>联系我们。更多详情,敬请查阅<span
class="bold" @click="ToOtherPage('privacy')">《笑脸校园未成年人个人信息保护规则》</span>
</p>
</div>
<div class="paragraph">
<div class="t bold">第六条 协议修改</div>
<p>
1、笑脸校园将有权随时修改本协议的有关条款,一旦相关内容发生变动,笑脸校园公司将会通过电子邮件或网站公告等方式向您提示修改内容。
</p>
<p>
2、如果您不同意笑脸校园对本协议相关条款所做的修改或者笑脸校园不时公布的《笑脸校园服务协议》及相关附属规则,您应立即停止使用笑脸校园提供的本项服务。如果您继续使用笑脸校园提供的服务,则视为您接受并认可本协议相关条款的修改及笑脸校园不时公布的《笑脸校园服务协议》及相关附属规则。
</p>
</div>
<div class="paragraph bold">
<div class="t bold">第七条 不可抗力、免责及责任限制</div>
<p>免责条款</p>
<p>因下列原因导致我们无法正常提供服务,我们免于承担责任:</p>
<p>1、我们的系统停机维护或升级;</p>
<p>2、因台风、地震、洪水、雷电或恐怖袭击等不可抗力原因;</p>
<p>3、您的电子设备软硬件和通信线路、供电线路出现故障的;</p>
<p>4、因您操作不当或通过非经我们授权或认可的方式使用我们服务的;</p>
<p>5、因病毒、木马、恶意程序攻击、网络拥堵、系统不稳定、系统或设备故障、通讯故障、电力故障、银行原因、第三方服务瑕疵或政府行为等原因。
尽管有前款约定,我们将采取合理行动积极促使服务恢复正常。</p>
</div>
<div class="paragraph">
<div class="t bold">第八条 争议的解决</div>
<p>本协议签订地为中华人民共和国北京市海淀区人民法院。</p>
<p>双方在履行本协议的过程中,如发生争议,应协商解决。协商不成的,<span class="bold">任何一方均可向合同签订地(北京市海淀区)有管辖权的人民法院提起诉讼</span></p>
</div>
<div class="paragraph">
<div class="t bold">第九条 协议的解释</div>
<p>本协议的成立、生效、履行和解释,均适用中华人民共和国法律。<span
class="bold">本服务协议未规定部分依照《微信支付用户服务协议》及相关附属规则予以履行;本协议与《微信支付用户服务协议》及相关附属规则不一致的,以本协议为准</span></p>
</div>
</view>
</template>
<script>
export default {
name: "StudentAttendance",
data() {
return {
}
},
onLoad: function(options) {
// AppID
},
methods: {
async ToOtherPage(name) {
uni.navigateTo({
url: `../${name}/main`
})
}
}
}
</script>
<style scoped>
.container {
padding: 20rpx;
}
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
padding: 20rpx 0;
}
.paragraph {
margin-top: 20rpx;
font-size: 14px;
}
.paragraph .t {
font-size: 16px;
}
.bold {
font-weight: bold;
}
</style>
<template>
<view class="container">
<div class="title">笑脸校园未成年人个人信息保护规则</div>
<div class="bold" style="text-indent: 2em;">
我们非常理解个人信息对未成年人及其监护人而言的重要性,也感谢未成年人及其监护人对我们的信任。为了更好地保护未成年人信息,除《笑脸校园隐私权政策》以外,我们还将通过《笑脸校园未成年人个人信息保护规则》(以下简称“本规则”)向未成年人及其监护人说明笑脸校园会怎样对外提供未成年人的个人信息(以下简称“未成年人信息”),并说明未成年人及其监护人所享有的权利。为了维护未成年人的合法权益,未成年人应当在其监护人的指导下使用我们的服务。
</div>
<div class="paragraph">
<div class="t bold">一、我们如何收集未成年人信息</div>
<p>
在用户使用我们提供的各项业务功能(以下统称“服务”)的过程中,我们可能需要收集一些信息来向用户提供服务,这些信息当中涉及部分未成年人信息。我们在《笑脸校园隐私权政策》当中,结合具体服务逐一说明了需要用户同意我们收集的信息类型与用途以及拒绝同意的后果。当用户使用我们提供的与未成年人有关的服务时,我们在服务中将按照如下约定收集信息:
</p>
<p>1.1 校园相关服务</p>
<p>
我们专为学校提供服务(例如:校园人脸支付、电子校园卡等,具体服务以实际提供的为准)。可以按照页面提示输入必要的未成年人信息,例如:姓名、证件号码,我们将与学校进行信息核验。核验通过后,我们将根据机构反馈的信息提供相应的服务。如用户不提供前述信息,可能无法使用校园相关服务。
</p>
<p>
1.2 我们提供的与未成年人有关的服务是不断迭代更新的。如果我们需要使用本规则尚未说明的有关信息,我们会通过页面提示、协议约定的方式另行说明信息收集的范围、目的与用途,并征得未成年人及其监护人的同意。
</p>
</div>
<div class="paragraph">
<div class="t bold">二、我们如何对外提供未成年人信息</div>
<p>
2.1 我们承诺对未成年人信息进行严格保密,仅在《笑脸校园隐私权政策》约定的情况下对外提供未成年人信息。如果为了向用户提供服务而需要将未成年人信息共享至第三方,我们会按照法律法规及国家标准的要求征得未成年人及其监护人的同意,或确认第三方已经征得未成年人及其监护人的同意。
</p>
</div>
<div class="paragraph">
<div class="t bold">三、我们如何存储和保护未成年人信息</div>
<p>
3.1 我们会按照《笑脸校园隐私权政策》的约定存储与保护未成年人信息。我们指定了专人负责未成年人信息的保护,严格设定信息访问权限,对可能接触到未成年人信息的工作人员采取最小够用授权原则,并采取技术措施对工作人员处理未成年人信息的行为进行记录和管控,避免违法复制、下载未成年人个人信息。
</p>
<p>3.2 若不幸发生未成年人信息安全事件,我们将按照法律法规的要求,及时向未成年人及其监护人告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、未成年人及其监护人可自主防范和降低风险的建议、对未成年人及其监护人的补救措施等。我们将及时将事件相关情况以微信推送通知、发送邮件/短消息等方式告知未成年人及其监护人。难以逐一告知时,我们会采取合理、有效的方式发布相关警示信息。同时,我们还将按照监管部门要求,主动上报未成年人信息安全事件的处置情况。若未成年人及其监护人的合法权益受损,我们将承担相应的法律责任。</p>
<p>3.3 在未成年人终止使用笑脸校园服务后,我们会停止对未成年人信息的使用,法律法规或监管部门另有规定的除外。如我们停止运营,我们将及时停止运营的通知以逐一送达或公告的形式进行通知,并对所持有的未成年人信息进行删除。</p>
</div>
<div class="paragraph">
<div class="t bold">四、我们如何使用未成年人信息</div>
<p>4.1 为了遵守国家法律法规及监管要求,以及向用户提供服务及提升服务质量,或保障用户的账户和资金安全,我们会按照《笑脸校园隐私权政策》及本规则的约定使用未成年人信息。</p>
<p>4.2 当我们要将未成年人信息用于《笑脸校园隐私权政策》及本规则未载明的其他用途时,会按照法律法规及国家标准的要求再次征得未成年人及其监护人的同意。</p>
</div>
<div class="paragraph">
<div class="t bold">五、如何访问和管理未成年人信息</div>
<p>
5.1 下列情形下,监护人及学校可联系我们,要求删除相应的未成年人信息:
<p>(1)我们违反法律、行政法规的规定或者双方的约定收集、存储、使用、对外提供未成年人信息的;</p>
<p>(2)超出目的范围或者必要期限收集、存储、使用、对外提供未成年人信息的;</p>
<p>(3)未成年人的监护人撤回同意的;</p>
<p>(4)未成年的监护人通过注销等方式终止使用产品或者服务的。</p>
</p>
<p>
5.2 为保障未成年人信息的安全,如发生投诉等情况,我们会在收到投诉后的三个工作日内处理完成,特殊情形下最长将在不超过三十天或法律法规规定期限内作出答复。如未成年人或者其监护人不满意我们的答复,还可以通过电话12315向消费者权益保护部门投诉或向有管辖权的法院提起诉讼。
</p>
</div>
<div class="paragraph">
<div class="t bold">六、本规则的适用及更新</div>
<p>
6.1 发生下列重大变化情形时,我们会适时对本规则进行更新:
<p>(1)我们的基本情况发生变化,例如:兼并、收购、重组引起的所有者变更;</p>
<p>(2)收集、存储、使用、对外提供未成年人信息的范围、目的、规则发生变化;</p>
<p>(3)未成年人信息存储的地点、期限和到期后的处理方式发生变化;</p>
<p>(4)数据安全能力、信息安全风险、未成年人信息的安全保障措施发生变化;</p>
<p>(5)拒绝同意的后果发生变化;</p>
<p>(6)用户询问、投诉的渠道和机制,以及外部纠纷解决机构及联络方式发生变化;</p>
<p>(7)更正、删除未成年人信息的途径和方法发生变化;</p>
<p>(8)其他可能对未成年人信息权益产生重大影响的变化。</p>
</p>
<p>如本规则发生更新,我们将以微信推送通知、小程序弹窗提示、发送邮件/短消息或者在笑脸校园官方网站发布公告的方式来通知未成年人及其监护人。为了未成年人及其监护人能及时接收到通知,建议未成年人及其监护人在联系方式更新时及时通知我们。如未成年人在本规则更新生效后继续使用笑脸校园服务,即表示未成年人及其监护人已充分阅读、理解并接受更新后的规则并愿意受更新后的规则约束。</p>
</div>
<div class="paragraph">
<div class="t bold">七、本规则中关键词说明</div>
<p>7.1 本规则中的“未成年人”是指:不满十四周岁的中华人民共和国公民。</p>
</div>
</view>
</template>
<script>
export default {
name: "StudentAttendance",
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
.container {
padding:20rpx;
}
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
padding: 20rpx 0;
}
.paragraph {
margin-top:20rpx;
font-size:14px;
}
.paragraph .t{
font-size:16px;
}
.bold {
font-weight: bold;
}
</style>
This diff is collapsed.
<template>
<view class="container">
<div class="title">校智付服务协议</div>
感谢您选择校智付服务。
<div class="paragraph">
<div class="t bold">第一条 总则</div>
<p>
1、本服务协议(以下简称“本协议”)是湖南校智付网络科技有限公司(以下简称“校智付”)与校智付用户(以下简称“用户”或“您”)就“人脸服务”(以下简称“本服务”)的使用等相关事项所订立的有效合约。您通过网络页面点击确认或以其他方式选择接受本协议,即表示您与校智付已达成协议并同意接受本协议的全部约定内容。
</p>
<p>
2、由于校智付服务是本公司依托微信支付提供的服务,在使用本服务前,您应阅读并遵守本协议和<span class="bold">《微信支付用户服务协议》</span><span
class="bold">在接受本协议之前,请您仔细阅读本协议的全部内容,尤其是加粗的文字部分。如果您不同意本协议的任意内容,或者无法准确理解校智付对条款的解释,请不要进行后续操作。</span>
</p>
<p class="bold">
3、如您为无民事行为能力人或为限制民事行为能力人,请告知您的监护人,并在您监护人的指导下阅读本协议和使用我们的服务。
</p>
</div>
<div class="paragraph">
<div class="t bold">第二条 定义</div>
<p>1、刷脸服务:指用户开通刷脸服务并完成人脸图片的采集后,用户可通过在商家处扫描人脸即识别您的校智付账户信息,并完成相关O2O服务。</p>
</div>
<div class="paragraph">
<div class="t bold">第三条 基础条款</div>
<p>1、您在开通刷脸服务过程中进行脸部拍摄所得的脸部图片(以下简称“原图”),仅用于达成您的刷脸服务。您应根据校智付页面的提示做出相应动作,校智付系统判断您的动作符合要求后,即可完成脸部拍摄。校智付承诺不通过任何技术手段留存您的任何敏感信息,包括但不限于银行账户账号、账户余额及用于客户鉴别的个人生物识别信息等。
</p>
<p>2、校智付应在现有技术能力上保障刷脸服务的有效、正常运行。</p>
<p>3、除本协议另有规定外,校智付在提前邮件通知您或在网站公告的情况下,可以单方面终止向您提供刷脸服务,并不承担任何赔偿责任。校智付在终止提供刷脸服务后,若发现您之前存在违法或违反本协议目的的使用行为,给校智付造成损失的,则校智付仍可据此要求您承担相应赔偿责任并保留通过司法途径予以解决的权利。
</p>
<p>4、校智付负责向您提供刷脸服务的咨询,并在校智付网站公布功能介绍、使用规则等内容。</p>
<p>5、校智付应根据 <span class="bold"
@click="ToOtherPage('rule')">《校智付隐私权政策》</span>的约定严格保护您的信息及使用您在使用本服务过程中留存在校智付的相关信息。</p>
</div>
<div class="paragraph">
<div class="t bold">第四条 刷脸服务特别约定</div>
<p>1、您开通刷脸服务后,可在开通了刷脸服务的商家处直接通过商家收银设备扫描您的人脸直接完成O2O服务,而不需要输入微信账户支付密码。</p>
<p>2、您理解并同意,您使用刷脸服务扫描您人脸的行为,视为您向校智付发出了不可撤销地支付、核销等指令;且该行为与您使用微信账户、密码的行为具有相同的法律效力。</p>
<p>3、本协议所称的O2O服务,是指在校智付特约商户的线下门店中开展的折扣核销、线下支付等。</p>
<p>4、您理解并同意校智付支持的O2O服务将根据市场情况不断进行调整,具体以校智付支持的场景为准。</p>
</div>
<div class="paragraph">
<div class="t bold">第五条用户信息的收集和使用</div>
<p class="bold">
1.您理解并同意,您通过网络页面点击确认或以其他方式选择接受本协议时,您即授权我们收集、存储并为提供服务之目的合理使用您的用户信息,包括创建校智付账户的登记注册信息,以及基于校智付使用产生的消费数据信息等。
</p>
<p>
2.我们出于如下目的,使用您提交以及我们收集的用户信息:
<p>(1)为了向您和您的孩子提供产品服务(如实名认证信息、用来接受验证码的手机号,是继续获得服务的前提;如身份证号、人脸信息是您孩子在学校享受人脸识别产品的认证前提)。</p>
<p>(2)为了维护、改进服务(如您提交的手机号用来接收服务通知和进行服务沟通)。</p>
<p>(3)因校方管理需要提供的消费数据报表内包含您的消费数据信息,或者为您提供您孩子一定时间阶段的个人消费报表而进行的必要数据采集加工。</p>
<p>(4)在法律法规允许的前提下,向您推广、介绍产品。</p>
<p>(5)经您许可的其他用途。</p>
</p>
<p>
3.个人信息不被泄露和买卖的服务保障
<p>
为保障您的信息安全,我们努力采取各种合理的物理、电子和管理方面的安全措施来保护您的信息,使您和您孩子的信息不会被泄露、毁损或者丢失。我们对可能接触到您的信息的员工采取了严格的管理,包括但不限于根据岗位的不同采取不同的权限控制,与他们签署保密协议。校智付会按现有技术提供相应的安全措施来保护您的信息,提供合理的安全保障,校智付将尽力做到使您的信息不被泄露、毁损或丢失。
<p class="bold">鉴于国家信息中心安全要求,对于您孩子因刷脸消费所采集的人脸信息,由深圳市腾讯计算机系统有限公司进行存管。</p>
</p>
</p>
<p>4.如您为未成年人的监护人,当您对您所监护的未成年人的信息处理存在疑问时,请通过客服热线<span class="bold">400-9656-210</span>联系我们。更多详情,敬请查阅<span
class="bold" @click="ToOtherPage('privacy')">《校智付未成年人个人信息保护规则》</span></p>
</div>
<div class="paragraph">
<div class="t bold">第六条 协议修改</div>
<p>1、校智付将有权随时修改本协议的有关条款,一旦相关内容发生变动,校智付公司将会通过电子邮件或网站公告等方式向您提示修改内容。</p>
<p>2、如果您不同意校智付对本协议相关条款所做的修改或者校智付不时公布的《校智付服务协议》及相关附属规则,您应立即停止使用校智付提供的本项服务。如果您继续使用校智付提供的服务,则视为您接受并认可本协议相关条款的修改及校智付不时公布的《校智付服务协议》及相关附属规则。
</p>
</div>
<div class="paragraph bold">
<div class="t bold">第七条 不可抗力、免责及责任限制</div>
<p>免责条款</p>
<p>因下列原因导致我们无法正常提供服务,我们免于承担责任:</p>
<p>1、我们的系统停机维护或升级;</p>
<p>2、因台风、地震、洪水、雷电或恐怖袭击等不可抗力原因;</p>
<p>3、您的电子设备软硬件和通信线路、供电线路出现故障的;</p>
<p>4、因您操作不当或通过非经我们授权或认可的方式使用我们服务的;</p>
<p>5、因病毒、木马、恶意程序攻击、网络拥堵、系统不稳定、系统或设备故障、通讯故障、电力故障、银行原因、第三方服务瑕疵或政府行为等原因。
尽管有前款约定,我们将采取合理行动积极促使服务恢复正常。</p>
</div>
<div class="paragraph">
<div class="t bold">第八条 争议的解决</div>
<p>本协议签订地为中华人民共和国湖南省长沙市岳麓区人民法院。</p>
<p>双方在履行本协议的过程中,如发生争议,应协商解决。协商不成的,<span class="bold">任何一方均可向合同签订地(长沙市岳麓区)有管辖权的人民法院提起诉讼。</span></p>
</div>
<div class="paragraph">
<div class="t bold">第九条 协议的解释</div>
<p>本协议的成立、生效、履行和解释,均适用中华人民共和国法律。<span
class="bold">本服务协议未规定部分依照《微信支付用户服务协议》及相关附属规则予以履行;本协议与《微信支付用户服务协议》及相关附属规则不一致的,以本协议为准</span></p>
</div>
</view>
</template>
<script>
export default {
name: "StudentAttendance",
data() {
return {
}
},
onLoad: function(options) {
// AppID
},
methods: {
async ToOtherPage(name) {
uni.navigateTo({
url: `../${name}/main`
})
}
}
}
</script>
<style scoped>
.container {
padding: 20rpx;
}
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
padding: 20rpx 0;
}
.paragraph {
margin-top: 20rpx;
font-size: 14px;
}
.paragraph .t {
font-size: 16px;
}
.bold {
font-weight: bold;
}
</style>
<template>
<view class="container">
<div class="title">校智付未成年人个人信息保护规则</div>
<div class="bold" style="text-indent: 2em;">
我们非常理解个人信息对未成年人及其监护人而言的重要性,也感谢未成年人及其监护人对我们的信任。为了更好地保护未成年人信息,除《校智付隐私权政策》以外,我们还将通过《校智付未成年人个人信息保护规则》(以下简称“本规则”)向未成年人及其监护人说明校智付会怎样对外提供未成年人的个人信息(以下简称“未成年人信息”),并说明未成年人及其监护人所享有的权利。为了维护未成年人的合法权益,未成年人应当在其监护人的指导下使用我们的服务。
</div>
<div class="paragraph">
<div class="t bold">一、我们如何收集未成年人信息</div>
<p>
在用户使用我们提供的各项业务功能(以下统称“服务”)的过程中,我们可能需要收集一些信息来向用户提供服务,这些信息当中涉及部分未成年人信息。我们在《校智付隐私权政策》当中,结合具体服务逐一说明了需要用户同意我们收集的信息类型与用途以及拒绝同意的后果。当用户使用我们提供的与未成年人有关的服务时,我们在服务中将按照如下约定收集信息:
</p>
<p>1.1 校园相关服务</p>
<p>我们专为学校提供服务(例如:校园人脸支付、电子校园卡等,具体服务以实际提供的为准)。可以按照页面提示输入必要的未成年人信息,例如:姓名、证件号码,我们将与学校进行信息核验。核验通过后,我们将根据机构反馈的信息提供相应的服务。如用户不提供前述信息,可能无法使用校园相关服务。</p>
<p>1.2 我们提供的与未成年人有关的服务是不断迭代更新的。如果我们需要使用本规则尚未说明的有关信息,我们会通过页面提示、协议约定的方式另行说明信息收集的范围、目的与用途,并征得未成年人及其监护人的同意。</p>
</div>
<div class="paragraph">
<div class="t bold">二、我们如何对外提供未成年人信息</div>
<p>2.1 我们承诺对未成年人信息进行严格保密,仅在《校智付隐私权政策》约定的情况下对外提供未成年人信息。如果为了向用户提供服务而需要将未成年人信息共享至第三方,我们会按照法律法规及国家标准的要求征得未成年人及其监护人的同意,或确认第三方已经征得未成年人及其监护人的同意。</p>
</div>
<div class="paragraph">
<div class="t bold">三、我们如何存储和保护未成年人信息</div>
<p>3.1 我们会按照《校智付隐私权政策》的约定存储与保护未成年人信息。我们指定了专人负责未成年人信息的保护,严格设定信息访问权限,对可能接触到未成年人信息的工作人员采取最小够用授权原则,并采取技术措施对工作人员处理未成年人信息的行为进行记录和管控,避免违法复制、下载未成年人个人信息。</p>
<p>3.2 若不幸发生未成年人信息安全事件,我们将按照法律法规的要求,及时向未成年人及其监护人告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、未成年人及其监护人可自主防范和降低风险的建议、对未成年人及其监护人的补救措施等。我们将及时将事件相关情况以微信推送通知、发送邮件/短消息等方式告知未成年人及其监护人。难以逐一告知时,我们会采取合理、有效的方式发布相关警示信息。同时,我们还将按照监管部门要求,主动上报未成年人信息安全事件的处置情况。若未成年人及其监护人的合法权益受损,我们将承担相应的法律责任。</p>
<p>3.3 在未成年人终止使用校智付服务后,我们会停止对未成年人信息的使用,法律法规或监管部门另有规定的除外。如我们停止运营,我们将及时停止运营的通知以逐一送达或公告的形式进行通知,并对所持有的未成年人信息进行删除。</p>
</div>
<div class="paragraph">
<div class="t bold">四、我们如何使用未成年人信息</div>
<p>4.1 为了遵守国家法律法规及监管要求,以及向用户提供服务及提升服务质量,或保障用户的账户和资金安全,我们会按照《校智付隐私权政策》及本规则的约定使用未成年人信息。</p>
<p>4.2 当我们要将未成年人信息用于《校智付隐私权政策》及本规则未载明的其他用途时,会按照法律法规及国家标准的要求再次征得未成年人及其监护人的同意。</p>
</div>
<div class="paragraph">
<div class="t bold">五、如何访问和管理未成年人信息</div>
<p>
5.1 下列情形下,监护人及学校可联系我们,要求删除相应的未成年人信息:
<p>(1)我们违反法律、行政法规的规定或者双方的约定收集、存储、使用、对外提供未成年人信息的;</p>
<p>(2)超出目的范围或者必要期限收集、存储、使用、对外提供未成年人信息的;</p>
<p>(3)未成年人的监护人撤回同意的;</p>
<p>(4)未成年人的监护人通过注销等方式终止使用产品或者服务的。</p>
</p>
<p>5.2 为保障未成年人信息的安全,如发生投诉等情况,我们会在收到投诉后的三个工作日内处理完成,特殊情形下最长将在不超过三十天或法律法规规定期限内作出答复。如未成年人或者其监护人不满意我们的答复,还可以通过电话12315向消费者权益保护部门投诉或向有管辖权的法院提起诉讼。</p>
</div>
<div class="paragraph">
<div class="t bold">六、本规则的适用及更新</div>
<p>
6.1 发生下列重大变化情形时,我们会适时对本规则进行更新:
<p>(1)我们的基本情况发生变化,例如:兼并、收购、重组引起的所有者变更;</p>
<p>(2)收集、存储、使用、对外提供未成年人信息的范围、目的、规则发生变化;</p>
<p>(3)未成年人信息存储的地点、期限和到期后的处理方式发生变化;</p>
<p>(4)数据安全能力、信息安全风险、未成年人信息的安全保障措施发生变化;</p>
<p>(5)拒绝同意的后果发生变化;</p>
<p>(6)用户询问、投诉的渠道和机制,以及外部纠纷解决机构及联络方式发生变化;</p>
<p>(7)更正、删除未成年人信息的途径和方法发生变化;</p>
<p>(8)其他可能对未成年人信息权益产生重大影响的变化。</p>
</p>
<p>
如本规则发生更新,我们将以微信推送通知、小程序弹窗提示、发送邮件/短消息或者在校智付官方网站发布公告的方式来通知未成年人及其监护人。为了未成年人及其监护人能及时接收到通知,建议未成年人及其监护人在联系方式更新时及时通知我们。如未成年人在本规则更新生效后继续使用校智付服务,即表示未成年人及其监护人已充分阅读、理解并接受更新后的规则并愿意受更新后的规则约束。
</p>
</div>
<div class="paragraph">
<div class="t bold">七、本规则中关键词说明</div>
<p>7.1 本规则中的“未成年人”是指:不满十四周岁的中华人民共和国公民。</p>
</div>
</view>
</template>
<script>
export default {
name: "StudentAttendance",
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
.container {
padding:20rpx;
}
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
padding: 20rpx 0;
}
.paragraph {
margin-top:20rpx;
font-size:14px;
}
.paragraph .t{
font-size:16px;
}
.bold {
font-weight: bold;
}
</style>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment