Commit 75892cf9 authored by zhangkaixuan11's avatar zhangkaixuan11

t

parent fea9b811
......@@ -11,6 +11,12 @@ export default {
params: {
}
},
appVersions: (params) => {
return {
host: Constants.apiPath + '/portal/index/getAppVersion',
params
}
},
getSMSCode: (params) => {
return {
host: Constants.apiPath + '/flplat/api/v1/app/user/captcha',
......@@ -70,7 +76,7 @@ export default {
},
getLessonStat: (params) => {
return {
host: Constants.apiPath + '/flplat/api/v1/app/studentLessonSchedules/lessonSchedule',
host: Constants.apiPath + '/flplat/asemverpi/v1/app/studentLessonSchedules/lessonSchedule',
params: params
}
},
......
.tool{padding:10px;cursor:pointer}.active,.tool:not(.active):hover{background:#e6e9f0;border-radius:5px}.toolSettings{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;background:#fff;padding:10px 5px;border-radius:5px;right:65px;top:0;-webkit-box-shadow:0 10px 30px 8px rgba(0,0,0,.2);box-shadow:0 10px 30px 8px rgba(0,0,0,.2)}.toolSettings,.toolSettings .settingsActions{display:-webkit-box;display:-ms-flexbox;display:flex}.toolSettings .settingsActions .tool:not(:last-child){margin-right:5px}.toolSettings .settingsSlider{margin-top:10px;padding:5px!important}.toolSettings .settingsColorPicker{margin-top:10px}.colorPicker{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.colorPicker .color{width:30px;height:30px;margin:5px;border-radius:15px;-webkit-transition:opacity .2s;transition:opacity .2s;border:1px solid rgba(0,0,0,.1)}.colorPicker .color:not(.active):hover{cursor:pointer;border:1px solid rgba(0,0,0,.5)}.mainPanel{position:fixed;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;top:120px;right:15px;padding:6px;background:#fff;border-radius:5px;-webkit-box-shadow:0 10px 30px 8px rgba(0,0,0,.4);box-shadow:0 10px 30px 8px rgba(0,0,0,.4);z-index:99}.mainPanel .actionsPanel .tool:not(:last-child){margin-bottom:5px;text-align:center}.historyPanel{position:fixed;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:99;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;top:370px;right:15px;padding:6px;background:#fff;border-radius:5px;-webkit-box-shadow:0 10px 30px 8px rgba(0,0,0,.4);box-shadow:0 10px 30px 8px rgba(0,0,0,.4)}body,html{width:100%;height:100%}body{margin:0;padding:0;height:100%}#wrapperBox{position:relative;height:100%;overflow:scroll;-webkit-overflow-scrolling:touch}#cover{left:0;right:0;z-index:-1}#cover,canvas{position:absolute;height:300vh}canvas{width:100%;background:#005141}.btn{position:fixed;width:80px;height:30px;bottom:10px;right:10px;z-index:999;background:#e6e9f0;border:none;line-height:30px;border-radius:5px}
\ No newline at end of file
.vue-slider-disabled{opacity:.5;cursor:not-allowed}.vue-slider-rail{background-color:#ccc;border-radius:15px}.vue-slider-process{background-color:#3498db;border-radius:15px}.vue-slider-mark{z-index:4}.vue-slider-mark:first-child .vue-slider-mark-step,.vue-slider-mark:last-child .vue-slider-mark-step{display:none}.vue-slider-mark-step{width:100%;height:100%;border-radius:50%;background-color:rgba(0,0,0,.16)}.vue-slider-mark-label{font-size:14px;white-space:nowrap}.vue-slider-dot-handle{cursor:pointer;width:100%;height:100%;border-radius:50%;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:.5px .5px 2px 1px rgba(0,0,0,.32);box-shadow:.5px .5px 2px 1px rgba(0,0,0,.32)}.vue-slider-dot-handle-focus{-webkit-box-shadow:0 0 1px 2px rgba(52,152,219,.36);box-shadow:0 0 1px 2px rgba(52,152,219,.36)}.vue-slider-dot-handle-disabled{cursor:not-allowed;background-color:#ccc}.vue-slider-dot-tooltip-inner{font-size:14px;white-space:nowrap;padding:2px 5px;min-width:20px;text-align:center;color:#fff;border-radius:5px;border-color:#3498db;background-color:#3498db;-webkit-box-sizing:content-box;box-sizing:content-box}.vue-slider-dot-tooltip-inner:after{content:"";position:absolute}.vue-slider-dot-tooltip-inner-top:after{top:100%;border-color:transparent;border-style:solid;border-width:5px;border-top-color:inherit}.vue-slider-dot-tooltip-inner-bottom:after,.vue-slider-dot-tooltip-inner-top:after{left:50%;-webkit-transform:translate(-50%);transform:translate(-50%);height:0;width:0}.vue-slider-dot-tooltip-inner-bottom:after{bottom:100%;border-color:transparent;border-style:solid;border-width:5px;border-bottom-color:inherit}.vue-slider-dot-tooltip-inner-left:after{left:100%;border-color:transparent;border-style:solid;border-width:5px;border-left-color:inherit}.vue-slider-dot-tooltip-inner-left:after,.vue-slider-dot-tooltip-inner-right:after{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:0;width:0}.vue-slider-dot-tooltip-inner-right:after{right:100%;border-color:transparent;border-style:solid;border-width:5px;border-right-color:inherit}.vue-slider-dot-tooltip-wrapper{opacity:0;-webkit-transition:all .3s;transition:all .3s}.vue-slider-dot-tooltip-wrapper-show{opacity:1}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>sd</title>
</head>
<body>
sdsdsdsd
</body>
</html>
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
......@@ -155,7 +155,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
versionName "0.3.2"
renderscriptSupportModeEnabled true
}
......
......@@ -3,11 +3,17 @@
package="com.fenghua_student_client">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="*/*" />
</intent>
</queries>
<application
tools:replace="android:allowBackup"
android:name=".MainApplication"
......@@ -16,6 +22,8 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage ="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
......
.tool{padding:10px;cursor:pointer}.active,.tool:not(.active):hover{background:#e6e9f0;border-radius:5px}.toolSettings{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;background:#fff;padding:10px 5px;border-radius:5px;right:65px;top:0;-webkit-box-shadow:0 10px 30px 8px rgba(0,0,0,.2);box-shadow:0 10px 30px 8px rgba(0,0,0,.2)}.toolSettings,.toolSettings .settingsActions{display:-webkit-box;display:-ms-flexbox;display:flex}.toolSettings .settingsActions .tool:not(:last-child){margin-right:5px}.toolSettings .settingsSlider{margin-top:10px;padding:5px!important}.toolSettings .settingsColorPicker{margin-top:10px}.colorPicker{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.colorPicker .color{width:30px;height:30px;margin:5px;border-radius:15px;-webkit-transition:opacity .2s;transition:opacity .2s;border:1px solid rgba(0,0,0,.1)}.colorPicker .color:not(.active):hover{cursor:pointer;border:1px solid rgba(0,0,0,.5)}.mainPanel{position:fixed;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;top:120px;right:15px;padding:6px;background:#fff;border-radius:5px;-webkit-box-shadow:0 10px 30px 8px rgba(0,0,0,.4);box-shadow:0 10px 30px 8px rgba(0,0,0,.4);z-index:99}.mainPanel .actionsPanel .tool:not(:last-child){margin-bottom:5px;text-align:center}.historyPanel{position:fixed;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:99;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;top:370px;right:15px;padding:6px;background:#fff;border-radius:5px;-webkit-box-shadow:0 10px 30px 8px rgba(0,0,0,.4);box-shadow:0 10px 30px 8px rgba(0,0,0,.4)}body,html{width:100%;height:100%}body{margin:0;padding:0;height:100%}#wrapperBox{position:relative;height:100%;overflow:scroll;-webkit-overflow-scrolling:touch}#cover{left:0;right:0;z-index:-1}#cover,canvas{position:absolute;height:300vh}canvas{width:100%;background:#005141}.btn{position:fixed;width:80px;height:30px;bottom:10px;right:10px;z-index:999;background:#e6e9f0;border:none;line-height:30px;border-radius:5px}
\ No newline at end of file
.vue-slider-disabled{opacity:.5;cursor:not-allowed}.vue-slider-rail{background-color:#ccc;border-radius:15px}.vue-slider-process{background-color:#3498db;border-radius:15px}.vue-slider-mark{z-index:4}.vue-slider-mark:first-child .vue-slider-mark-step,.vue-slider-mark:last-child .vue-slider-mark-step{display:none}.vue-slider-mark-step{width:100%;height:100%;border-radius:50%;background-color:rgba(0,0,0,.16)}.vue-slider-mark-label{font-size:14px;white-space:nowrap}.vue-slider-dot-handle{cursor:pointer;width:100%;height:100%;border-radius:50%;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:.5px .5px 2px 1px rgba(0,0,0,.32);box-shadow:.5px .5px 2px 1px rgba(0,0,0,.32)}.vue-slider-dot-handle-focus{-webkit-box-shadow:0 0 1px 2px rgba(52,152,219,.36);box-shadow:0 0 1px 2px rgba(52,152,219,.36)}.vue-slider-dot-handle-disabled{cursor:not-allowed;background-color:#ccc}.vue-slider-dot-tooltip-inner{font-size:14px;white-space:nowrap;padding:2px 5px;min-width:20px;text-align:center;color:#fff;border-radius:5px;border-color:#3498db;background-color:#3498db;-webkit-box-sizing:content-box;box-sizing:content-box}.vue-slider-dot-tooltip-inner:after{content:"";position:absolute}.vue-slider-dot-tooltip-inner-top:after{top:100%;border-color:transparent;border-style:solid;border-width:5px;border-top-color:inherit}.vue-slider-dot-tooltip-inner-bottom:after,.vue-slider-dot-tooltip-inner-top:after{left:50%;-webkit-transform:translate(-50%);transform:translate(-50%);height:0;width:0}.vue-slider-dot-tooltip-inner-bottom:after{bottom:100%;border-color:transparent;border-style:solid;border-width:5px;border-bottom-color:inherit}.vue-slider-dot-tooltip-inner-left:after{left:100%;border-color:transparent;border-style:solid;border-width:5px;border-left-color:inherit}.vue-slider-dot-tooltip-inner-left:after,.vue-slider-dot-tooltip-inner-right:after{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:0;width:0}.vue-slider-dot-tooltip-inner-right:after{right:100%;border-color:transparent;border-style:solid;border-width:5px;border-right-color:inherit}.vue-slider-dot-tooltip-wrapper{opacity:0;-webkit-transition:all .3s;transition:all .3s}.vue-slider-dot-tooltip-wrapper-show{opacity:1}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>sd</title>
</head>
<body>
sdsdsdsd
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
<resources>
<string name="app_name">枫华学生端</string>
<string name="app_name">畅凝智慧课堂学生端</string>
</resources>
import React, {Component} from 'react';
import {Linking,AppState,
NativeModules,Text, View, Animated, Image, Modal, Keyboard, StatusBar, TextInput, TouchableHighlight,TouchableOpacity, findNodeHandle, DeviceEventEmitter} from 'react-native';
import React, { Component } from 'react';
import {
Linking, AppState,
NativeModules, Text, View, Animated, PermissionsAndroid, Image, Modal, Keyboard, StatusBar, TextInput, TouchableHighlight, TouchableOpacity, findNodeHandle, DeviceEventEmitter, Alert
} from 'react-native';
import Constants from '../../Constants';
// import LinearGradient from 'react-native-linear-gradient';
import Button from 'react-native-button';
......@@ -10,8 +12,13 @@ import Api from '../../Api';
import Toast from './Toast';
import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
import Reset from './Reset';
import md5 from 'js-md5'
import md5 from 'js-md5';
import RNFetchBlob from 'rn-fetch-blob';
import DeviceInfo from 'react-native-device-info';
import semver from 'semver'
const appVersion = DeviceInfo.getVersion();
// console.log(semver,'RNFetchBlobRNFetchBlobRNFetchBlob')
console.log(NativeModules.upgrade, 'NativeModulesNativeModules')
export default class Login extends Component {
constructor(props) {
......@@ -77,9 +84,9 @@ export default class Login extends Component {
}
checkCanSubmit = () => {
let mobile= this.state.mobile;
let code= this.state.code;
let password= this.state.password;
let mobile = this.state.mobile;
let code = this.state.code;
let password = this.state.password;
let canSubmmit = false;
if (this.state.loginType === 'code') {
if (/^\d{11}$/.test(mobile) && code.length > 0) {
......@@ -87,7 +94,7 @@ export default class Login extends Component {
}
} else {
// if (/^\d{11}$/.test(mobile) && password.length > 0) {
if ( mobile.length > 0 && password.length > 0) {
if (mobile.length > 0 && password.length > 0) {
canSubmmit = true;
}
}
......@@ -148,7 +155,7 @@ export default class Login extends Component {
djs = () => {
let currentSec = this.state.currentSec;
currentSec --;
currentSec--;
if (currentSec > 0) {
this.setState({
currentSec: currentSec,
......@@ -164,13 +171,101 @@ export default class Login extends Component {
}
login = () => {
console.log(appVersion, 'appVersionappVersion')
// alert(1)
if (Platform.OS === 'android') {
Constants.get(Api.appVersions({
clientType: '10', //10 学生 20 老师
os: Platform.OS === 'android' ? 'Android' : 'ios', // 10 win 20 mac
})).then((response) => {
return response.json()
}).then(res => {
console.log(res)
let shouldUpdate = semver.gt(res.data.version, appVersion)
if (shouldUpdate) {
Alert.alert('发现新版本', '是否下载',
[
{
text: "确定", onPress: () => {
if (this.requestInstallUpdate()) {
this.Update(res.data.downloadUrl);
}
}
},
// {text:"取消", onPress:this.opntion2Selected}
{ text: "取消" }
]
);
} else {
this.loginWithPassword();
}
})
} else {
}
return;
if (this.state.loginType === 'code') {
this.loginWithCode();
} else {
// if(this.requestInstallUpdate()){
// this.Update();
// }
// return;
this.loginWithPassword();
}
}
requestInstallUpdate = async () => {
try {
const result = await PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
]);
const isGranted = result[PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE] === 'granted'
&& result[PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE] === 'granted';
if (isGranted) {
console.log("You can now install updates")
return true;
} else {
console.log("App install permission denied")
return false;
}
} catch (err) {
console.warn(err)
return false;
}
}
Update = (downloadUrl) => {
// Alert.alert('1212')
const android = RNFetchBlob.android;
//配置手机系统通知栏下载文件通知,下载成功后点击通知可运行apk文件
RNFetchBlob.config({
addAndroidDownloads: {
useDownloadManager: true,
title: '畅凝智慧课堂学生端.apk',
description: 'An APK that will be installed',
mime: 'application/vnd.android.package-archive',
path: `${RNFetchBlob.fs.dirs.DownloadDir}/update.apk`,
mediaScannable: true,
notification: true
}
}).fetch(
'GET',
downloadUrl //apk下载地址
).then(res => {
//下载成功后自动打开安装已下载apk文件、
// console.error(res.path())
android.actionViewIntent(
res.path(),
'application/vnd.android.package-archive'
);
}).catch(err => {
console.error(err)
});
}
loginWithPassword = () => {
if (this.state.canSubmit) {
......@@ -284,11 +379,11 @@ export default class Login extends Component {
<KeyboardAwareScrollView
scrollEventThrottle={200} showsVerticalScrollIndicator={false}
>
<TouchableHighlight style={{flex: 1}} onPress={() => {
<TouchableHighlight style={{ flex: 1 }} onPress={() => {
Keyboard.dismiss();
}} underlayColor="rgba(255, 255, 255, 0)" activeOpacity={1}>
<View style={LoginCSS.wrapper}>
<Image style={LoginCSS.logo} source={require('../../images/common/logo.png')}/>
<Image style={LoginCSS.logo} source={require('../../images/common/logo.png')} />
<View style={LoginCSS.tabWrapper}>
{/* <Button onPress={() => {
this.setState({
......@@ -416,7 +511,7 @@ export default class Login extends Component {
<Button style={LoginCSS.rememberLeft} containerStyle={{
flex: 1,
flexDirection: 'row',
justifyContent:'flex-start',
justifyContent: 'flex-start',
}} onPress={() => {
Constants.storeData('rememberPwd', !this.state.rememberPwd ? '1' : '0');
this.setState({
......@@ -429,7 +524,7 @@ export default class Login extends Component {
width: Constants.unitWidth * 20,
height: Constants.unitWidth * 20,
}} source={this.state.rememberPwd ?
require('../../images/common/checkbox-checked.png') : require('../../images/common/checkbox.png')}/>
require('../../images/common/checkbox-checked.png') : require('../../images/common/checkbox.png')} />
</View>
<Text allowFontScaling={false} style={LoginCSS.rememberTxt}>记住密码</Text>
......@@ -442,7 +537,7 @@ export default class Login extends Component {
}} onPress={() => {
this.props.navigation.navigate('Reset');
}}>
<Text allowFontScaling={false} style={LoginCSS.forgetTxt}>忘记密码</Text>
{/* <Text allowFontScaling={false} style={LoginCSS.forgetTxt}>忘记密码</Text> */}
</Button>
</View>
</View>
......@@ -460,7 +555,7 @@ export default class Login extends Component {
this.setState({
showToast: false
})
}} show={this.state.showToast} msg={this.state.msg} icon={this.state.tipsIcon}/>
}} show={this.state.showToast} msg={this.state.msg} icon={this.state.tipsIcon} />
</View>
);
}
......
......@@ -6172,14 +6172,6 @@ react-native-fast-image@^8.3.4:
resolved "https://registry.npm.taobao.org/react-native-fast-image/download/react-native-fast-image-8.3.4.tgz#79edca177e30311b19d59ff335625bcbe22650d7"
integrity sha1-ee3KF34wMRsZ1Z/zNWJby+ImUNc=
react-native-fetch-blob@^0.10.8:
version "0.10.8"
resolved "https://registry.npmmirror.com/react-native-fetch-blob/-/react-native-fetch-blob-0.10.8.tgz#4fc256abae0cb5f10e7c41f28c11b3ff330d72a9"
integrity sha512-+zE/VjBO9HTjqNXL1KgtgS3ZTH8CNuxg9rJDml+GsO1UbIe4EgdRiCy/sIV9X8lVYimKfep8iJsVMTsjJvQHmA==
dependencies:
base-64 "0.1.0"
glob "7.0.6"
react-native-fs@^2.16.6:
version "2.16.6"
resolved "https://registry.npm.taobao.org/react-native-fs/download/react-native-fs-2.16.6.tgz#2901789a43210a35a0ef0a098019bbef3af395fd"
......@@ -6821,6 +6813,14 @@ rimraf@~2.2.6:
resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=
rn-fetch-blob@^0.12.0:
version "0.12.0"
resolved "https://registry.npmmirror.com/rn-fetch-blob/-/rn-fetch-blob-0.12.0.tgz#ec610d2f9b3f1065556b58ab9c106eeb256f3cba"
integrity sha512-+QnR7AsJ14zqpVVUbzbtAjq0iI8c9tCg49tIoKO2ezjzRunN7YL6zFSFSWZm6d+mE/l9r+OeDM3jmb2tBb2WbA==
dependencies:
base-64 "0.1.0"
glob "7.0.6"
rsvp@^4.8.4:
version "4.8.5"
resolved "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
......@@ -6920,6 +6920,13 @@ semver@^7.3.2:
dependencies:
lru-cache "^6.0.0"
semver@^7.3.8:
version "7.3.8"
resolved "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
dependencies:
lru-cache "^6.0.0"
send@0.17.1:
version "0.17.1"
resolved "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
......
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