This commit is contained in:
saplf
2019-09-08 13:03:43 +08:00
parent b004908af9
commit 5351afaae3
25 changed files with 263 additions and 14 deletions
+7
View File
@@ -21,3 +21,10 @@
/.vscode
/.idea
*.iml
# HBuilder
/h5pack/*.js
/h5pack/*.css
/h5pack/index.html
/h5pack/favicon.ico
/h5pack/static/
+225
View File
@@ -0,0 +1,225 @@
{
"@platforms" : [ "android", "iPhone" ],
"id" : "H51E9A088", /*应用的标识*/
"name" : "FIV", /*应用名称,程序桌面图标名称*/
"version" : {
"name" : "1.0", /*应用版本名称*/
"code" : 1
},
"description" : "", /*应用描述信息*/
"icons" : {
"72" : "icon.png"
},
"launch_path" : "index.html", /*应用的入口页面,默认为根目录下的index.html;支持网络地址,必须以http://或https://开头*/
"developer" : {
"name" : "", /*开发者名称*/
"email" : "", /*开发者邮箱地址*/
"url" : "" /*开发者个人主页地址*/
},
"permissions" : {
"Accelerometer" : {
"description" : "访问加速度感应器"
},
"Audio" : {
"description" : "访问麦克风"
},
"Cache" : {
"description" : "管理应用缓存"
},
"Camera" : {
"description" : "访问摄像头"
},
"Console" : {
"description" : "跟踪调试输出日志"
},
"Device" : {
"description" : "访问设备信息"
},
"Downloader" : {
"description" : "文件下载管理"
},
"Events" : {
"description" : "应用扩展事件"
},
"File" : {
"description" : "访问本地文件系统"
},
"Gallery" : {
"description" : "访问系统相册"
},
"Geolocation" : {
"description" : "访问位置信息"
},
"Invocation" : {
"description" : "使用Native.js能力"
},
"Orientation" : {
"description" : "访问方向感应器"
},
"Proximity" : {
"description" : "访问距离感应器"
},
"Share" : {
"description" : "分享"
},
"Storage" : {
"description" : "管理应用本地数据"
},
"Uploader" : {
"description" : "管理文件上传任务"
},
"Runtime" : {
"description" : "访问运行期环境"
},
"XMLHttpRequest" : {
"description" : "跨域网络访问"
},
"Zip" : {
"description" : "文件压缩与解压缩"
},
"Barcode" : {
"description" : "管理二维码扫描插件"
},
"Webview" : {
"description" : "窗口管理"
},
"NativeUI" : {
"description" : "原生UI控件"
},
"Navigator" : {
"description" : "浏览器信息"
},
"NativeObj" : {
"description" : "原生对象"
}
},
"plus" : {
"splashscreen" : {
"autoclose" : true, /*是否自动关闭程序启动界面,true表示应用加载应用入口页面后自动关闭;false则需调plus.navigator.closeSplashscreen()关闭*/
"waiting" : true /*是否在程序启动界面显示等待雪花,true表示显示,false表示不显示。*/
},
"popGesture" : "close", /*设置应用默认侧滑返回关闭Webview窗口,"none"为无侧滑返回功能,"hide"为侧滑隐藏Webview窗口。参考http://ask.dcloud.net.cn/article/102*/
"runmode" : "normal", /*应用的首次启动运行模式,可取liberate或normal,liberate模式在第一次启动时将解压应用资源(Android平台File API才可正常访问_www目录)*/
"signature" : "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==", /*可选,保留给应用签名,暂不使用*/
"distribute" : {
"apple" : {
"appid" : "org.faronear.fiv", /*iOS应用标识,苹果开发网站申请的appid,如io.dcloud.HelloH5*/
"mobileprovision" : "", /*iOS应用打包配置文件*/
"password" : "", /*iOS应用打包个人证书导入密码*/
"p12" : "", /*iOS应用打包个人证书,打包配置文件关联的个人证书*/
"devices" : "iphone", /*iOS应用支持的设备类型,可取值iphone/ipad/universal*/
"frameworks" : [] /*调用Native.js调用原生Objective-c API需要引用的FrameWork,如需调用GameCenter,则添加"GameKit.framework"*/
},
"google" : {
"packagename" : "org.faronear.fiv", /*Android应用包名,如io.dcloud.HelloH5*/
"keystore" : "unpackage/key/fiv.keystore", /*Android应用打包使用的密钥库文件*/
"password" : "fivfiv", /*Android应用打包使用密钥库中证书的密码*/
"aliasname" : "fiv", /*Android应用打包使用密钥库中证书的别名*/
"permissions" : [
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>"
]
},
/*使用Native.js调用原生安卓API需要使用到的系统权限*/
"orientation" : [ "portrait-primary" ], /*应用支持的方向,portrait-primary:竖屏正方向;portrait-secondary:竖屏反方向;landscape-primary:横屏正方向;landscape-secondary:横屏反方向*/
"icons" : {
"ios" : {
"prerendered" : true, /*应用图标是否已经高亮处理,在iOS6及以下设备上有效*/
"auto" : "", /*应用图标,分辨率:512x512,用于自动生成各种尺寸程序图标*/
"iphone" : {
"normal" : "", /*iPhone3/3GS程序图标,分辨率:57x57*/
"retina" : "", /*iPhone4程序图标,分辨率:114x114*/
"retina7" : "", /*iPhone4S/5/6程序图标,分辨率:120x120*/
"retina8" : "", /*iPhone6 Plus程序图标,分辨率:180x180*/
"spotlight-normal" : "", /*iPhone3/3GS Spotlight搜索程序图标,分辨率:29x29*/
"spotlight-retina" : "", /*iPhone4 Spotlight搜索程序图标,分辨率:58x58*/
"spotlight-retina7" : "", /*iPhone4S/5/6 Spotlight搜索程序图标,分辨率:80x80*/
"settings-normal" : "", /*iPhone4设置页面程序图标,分辨率:29x29*/
"settings-retina" : "", /*iPhone4S/5/6设置页面程序图标,分辨率:58x58*/
"settings-retina8" : "", /*iPhone6Plus设置页面程序图标,分辨率:87x87*/
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
},
"ipad" : {
"normal" : "", /*iPad普通屏幕程序图标,分辨率:72x72*/
"retina" : "", /*iPad高分屏程序图标,分辨率:144x144*/
"normal7" : "", /*iPad iOS7程序图标,分辨率:76x76*/
"retina7" : "", /*iPad iOS7高分屏程序图标,分辨率:152x152*/
"spotlight-normal" : "", /*iPad Spotlight搜索程序图标,分辨率:50x50*/
"spotlight-retina" : "", /*iPad高分屏Spotlight搜索程序图标,分辨率:100x100*/
"spotlight-normal7" : "", /*iPad iOS7 Spotlight搜索程序图标,分辨率:40x40*/
"spotlight-retina7" : "", /*iPad iOS7高分屏Spotlight搜索程序图标,分辨率:80x80*/
"settings-normal" : "", /*iPad设置页面程序图标,分辨率:29x29*/
"settings-retina" : "", /*iPad高分屏设置页面程序图标,分辨率:58x58*/
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"appstore" : "unpackage/res/icons/1024x1024.png"
},
"android" : {
"mdpi" : "", /*普通屏程序图标,分辨率:48x48*/
"ldpi" : "", /*大屏程序图标,分辨率:48x48*/
"hdpi" : "unpackage/res/icons/72x72.png", /*高分屏程序图标,分辨率:72x72*/
"xhdpi" : "unpackage/res/icons/96x96.png", /*720P高分屏程序图标,分辨率:96x96*/
"xxhdpi" : "unpackage/res/icons/144x144.png", /*1080P 高分屏程序图标,分辨率:144x144*/
"xxxhdpi" : "unpackage/res/icons/192x192.png"
}
},
"splashscreen" : {
"ios" : {
"iphone" : {
"default" : "", /*iPhone3启动图片选,分辨率:320x480*/
"retina35" : "", /*3.5英寸设备(iPhone4)启动图片,分辨率:640x960*/
"retina40" : "", /*4.0 英寸设备(iPhone5/iPhone5s)启动图片,分辨率:640x1136*/
"retina47" : "", /*4.7 英寸设备(iPhone6)启动图片,分辨率:750x1334*/
"retina55" : "", /*5.5 英寸设备(iPhone6 Plus)启动图片,分辨率:1242x2208*/
"retina55l" : "" /*5.5 英寸设备(iPhone6 Plus)横屏启动图片,分辨率:2208x1242*/
},
"ipad" : {
"portrait" : "", /*iPad竖屏启动图片,分辨率:768x1004*/
"portrait-retina" : "", /*iPad高分屏竖屏图片,分辨率:1536x2008*/
"landscape" : "", /*iPad横屏启动图片,分辨率:1024x748*/
"landscape-retina" : "", /*iPad高分屏横屏启动图片,分辨率:2048x1496*/
"portrait7" : "", /*iPad iOS7竖屏启动图片,分辨率:768x1024*/
"portrait-retina7" : "", /*iPad iOS7高分屏竖屏图片,分辨率:1536x2048*/
"landscape7" : "", /*iPad iOS7横屏启动图片,分辨率:1024x768*/
"landscape-retina7" : "" /*iPad iOS7高分屏横屏启动图片,分辨率:2048x1536*/
}
},
"android" : {
"mdpi" : "", /*普通屏启动图片,分辨率:240x282*/
"ldpi" : "", /*大屏启动图片,分辨率:320x442*/
"hdpi" : "", /*高分屏启动图片,分辨率:480x762*/
"xhdpi" : "", /*720P高分屏启动图片,分辨率:720x1242*/
"xxhdpi" : "" /*1080P高分屏启动图片,分辨率:1080x1882*/
}
},
"plugins" : {
"speech" : {}
}
}
}
}
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1003 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

+3 -1
View File
@@ -1,8 +1,10 @@
import { Model } from 'dva';
import { delay } from 'dva/saga';
import _ from 'lodash';
import { getLocale, setLocale } from 'umi-plugin-locale'
import { loadUser, storeUser, clearUser, clearMineList, clearCoins, clearDrawCoins } from '@/utils/storage';
import { User } from '@/types/common';
import { isApp, restart } from '@/utils/h5plus';
const initState = () => {
const user = loadUser();
@@ -55,7 +57,7 @@ const model: Model = {
},
*changeLang({ payload: lang }, { put }) {
setLocale(lang);
setLocale(lang, false);
yield put({ type: 'onUpdateState', payload: { lang } });
},
},
+4 -3
View File
@@ -1,6 +1,6 @@
import React, { useEffect } from 'react';
import { connect, DispatchProp, routerRedux } from 'dva';
import { Spin, Icon } from 'antd';
import _ from 'lodash';
import { formatMessage } from 'umi-plugin-locale';
import FittedImage from 'react-fitted-image';
import { HomeCommunityModelState } from './model';
@@ -10,6 +10,7 @@ import List from '@/components/List';
import { dispatch } from '@/utils/utils';
import styles from './style.less';
import { displayPhone } from '@/utils/transform';
const CommunityPage: React.FC<HomeCommunityModelState & DispatchProp> = ({
dispatch,
@@ -79,10 +80,10 @@ const CommunityPage: React.FC<HomeCommunityModelState & DispatchProp> = ({
{it.avatar ? <FittedImage
src={it.avatar}
fit="cover"
/> : <div className="fake">{(it.nickname && it.nickname[0]) || 'F'}</div>}
/> : <div className="fake">{(it.nickname && it.nickname[0]) || _.last(it.phone) || 'F'}</div>}
</div>
<div className="line">
<span>{it.nickname || it.phone}</span>
<span>{it.nickname || displayPhone(it.phone)}</span>
<span className="time">{formatMessage({ id: 'home.community.time' })}{it.createdAt}</span>
</div>
</div>
+2 -1
View File
@@ -1,6 +1,7 @@
import React from 'react';
import FittedImage from 'react-fitted-image';
import { connect, DispatchProp, routerRedux } from 'dva';
import _ from 'lodash';
import { UserModelState } from '@/models/user';
import SettingItem from '@/components/SettingItem';
import logoAccount from '@/assets/p_account.png';
@@ -24,7 +25,7 @@ const ProfilePage: React.FC<UserModelState & DispatchProp> = ({
<div className="avatar">
{user.avatar ?
<FittedImage src={user.avatar} fit="cover" /> :
<span>{user.nickname ? user.nickname[0] : user.phone[0]}</span>
<span>{user.nickname ? user.nickname[0] : _.last(user.phone)}</span>
}
</div>
<span className="name">{user.nickname || user.phone}</span>
+18 -9
View File
@@ -1,15 +1,17 @@
import { dispatch, getState } from './utils';
import { routerRedux } from 'dva';
const plus = window.plus;
const isApp = () => typeof plus !== 'undefined';
const isApp = () => {
const r = typeof window.plus !== 'undefined';
// console.log(r);
return r;
};
const barcodeId = 'barcode'
const scan = () => {
if (!isApp()) return Promise.resolve('');
return new Promise<string>(resolve => {
const { barcode, webview } = plus;
const { barcode, webview } = window.plus;
const bc = barcode.create(barcodeId, [barcode.QR], {
position: 'absolute',
left: '0px',
@@ -38,42 +40,48 @@ const firstPaths = [
'/home/profile',
];
const backButtonHandler = () => {
const barcode = plus.barcode.getBarcodeById(barcodeId);
const barcode = window.plus.barcode.getBarcodeById(barcodeId);
if (barcode) {
barcode.close();
return;
}
const { pathname } = getState().router.location;
if (firstPaths.includes(pathname)) {
plus.runtime.quit();
window.plus.runtime.quit();
} else {
dispatch(routerRedux.goBack());
}
};
const init = () => {
if (!isApp()) return;
plus.key.addEventListener('backbutton', backButtonHandler);
window.plus.key.addEventListener('backbutton', backButtonHandler);
};
const destory = () => {
if (!isApp()) return;
plus.key.removeEventListener('backbutton', backButtonHandler);
window.plus.key.removeEventListener('backbutton', backButtonHandler);
};
const share = (content: string) => {
if (!isApp()) return;
plus.share.sendWithSystem({
window.plus.share.sendWithSystem({
type: 'text',
content,
}, () => { });
};
const restart = () => {
if (!isApp()) return;
window.plus.runtime.restart();
}
export {
init,
isApp,
scan,
share,
destory,
restart,
};
export default {
@@ -82,4 +90,5 @@ export default {
scan,
share,
destory,
restart,
};
+4
View File
@@ -46,3 +46,7 @@ export function fromLangToText(lang: string) {
export function encryptPwd(pwd: string): string {
return md5(pwd);
}
export function displayPhone(phone: string): string {
return `1******${_.takeRight(phone, 4).join('')}`;
}