Commit 7e1c776ad8ac4956327d68a96fe714fcbba5df0d

Authored by chenxt
1 parent 161722ed

app

Showing 39 changed files with 1002 additions and 0 deletions
app/index.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  6 + <title></title>
  7 + <script src="./js/common.js" type="text/javascript"></script>
  8 + <script type="text/javascript">
  9 + // function disp_confirm()
  10 + // {
  11 + // var r= confirm("Press a button")
  12 + // if (r) {
  13 + // plus.storage.setItem('privacyPolicy', 'agree');
  14 + // }
  15 + // else
  16 + // {
  17 + // // plus.runtime.quit();
  18 + // }
  19 + // }
  20 + document.addEventListener('plusready', function() {
  21 + const data = getUrlData();
  22 + if (!data) {
  23 + window.location.href = 'http://118.178.131.219:8088/loginMobile';
  24 + // showSettingPage();
  25 + } else {
  26 + showMainPage();
  27 + }
  28 + // const sPrivacyPolicy = plus.storage.getItem('privacyPolicy');
  29 + // if (sPrivacyPolicy !== "agree") {
  30 + // disp_confirm();
  31 + // }
  32 + });
  33 +
  34 + function showSettingPage() {
  35 + const view = plus.webview.create('/setting.html', 'setting');
  36 + view.show("pop-in");
  37 + }
  38 +
  39 + function showMainPage() {
  40 + const waitTime = 5000;
  41 + const data = getUrlData();
  42 + const url = `${data.protocol}://${data.url}:${data.port}/loginMobile`;
  43 + // window.location.href = url;
  44 + // console.log(url);
  45 + const webview = plus.webview.currentWebview();
  46 +
  47 + const timerId = setTimeout(() => {
  48 + webview.loadURL('/setting.html');
  49 + }, waitTime);
  50 + webview.onloaded = () => {
  51 + clearTimeout(timerId);
  52 + };
  53 + webview.loadURL(url);
  54 + }
  55 + </script>
  56 + </head>
  57 + <body>
  58 +
  59 + </body>
  60 +</html>
... ...
app/js/backbutton.js 0 → 100644
  1 +// 解决 关于HBuilder X打包的APP按返回键退出的问题
  2 +document.addEventListener('plusready', function() {
  3 + var first = null;
  4 + const webview = window.plus.webview.currentWebview();
  5 + //自定义运行期返回
  6 + const main = plus.android.runtimeMainActivity();
  7 + //返回后台,但是不退出应用
  8 + plus.runtime.quit = function() {
  9 + main.moveTaskToBack(false);
  10 + };
  11 + //监听返回按键
  12 + plus.key.addEventListener("backbutton", function() {
  13 + //监听webview窗口是否可以返回
  14 + webview.canBack(function(e) {
  15 + if(e.canBack) {
  16 + //可以返回返回上一页面
  17 + // plus.navigator.back();
  18 + webview.back();
  19 + } else {
  20 + //不可以返回
  21 + //处理逻辑:2秒内,连续两次按返回键,则退出应用;
  22 + //首次按键,提示再按一次退出应用
  23 + if (!first) {
  24 + first = new Date().getTime();
  25 + //通过H5+ API 调用Android 上的toast 提示框
  26 + plus.nativeUI.toast('再按一次退出应用', {
  27 + duration: 'short'
  28 + });
  29 + setTimeout(function() {
  30 + first = null;
  31 + }, 2000);
  32 + } else {
  33 + if (new Date().getTime() - first < 2000) {
  34 + plus.runtime.quit();//退出app
  35 + }
  36 + }
  37 + }
  38 + });
  39 + }, false);
  40 +});
0 41 \ No newline at end of file
... ...
app/js/common.js 0 → 100644
  1 +/**
  2 + * @param {String} protocol 协议, http/https
  3 + * @param {string} url url地址
  4 + * @param {number} port
  5 + */
  6 +// eslint-disable-next-line no-unused-vars
  7 +function setUrlData(protocol, url, port) {
  8 + // eslint-disable-next-line no-undef
  9 + plus.storage.setItem('urlData', JSON.stringify({
  10 + protocol,
  11 + url,
  12 + port,
  13 + }));
  14 +}
  15 +
  16 +/**
  17 + * @return {{protocol:'http'|'https', url:string, port:number} | null}
  18 + */
  19 +// eslint-disable-next-line no-unused-vars
  20 +function getUrlData() {
  21 + // eslint-disable-next-line no-undef
  22 + const str = plus.storage.getItem('urlData');
  23 + try {
  24 + return JSON.parse(str);
  25 + } catch (e) {
  26 + return null;
  27 + }
  28 +}
  29 +
  30 +// eslint-disable-next-line no-unused-vars
  31 +function getDefaultUrlData() {
  32 + return {
  33 + protocol: 'http',
  34 + url: '118.178.131.219',
  35 + port: 8088,
  36 + };
  37 +}
... ...
app/manifest.json 0 → 100644
  1 +{
  2 + "@platforms" : [ "android", "iPhone", "iPad" ],
  3 + "id" : "H5F097120",
  4 + /*应用的标识*/
  5 + "name" : "小羚羊ERP",
  6 + /*应用名称,程序桌面图标名称*/
  7 + "version" : {
  8 + "name" : "1.1",
  9 + /*应用版本名称*/
  10 + "code" : 101
  11 + },
  12 + "description" : "",
  13 + /*应用描述信息*/
  14 + "icons" : {
  15 + "72" : "icon.png"
  16 + },
  17 + "launch_path" : "index.html",
  18 + /*应用的入口页面,默认为根目录下的index.html;支持网络地址,必须以http://或https://开头*/
  19 + "developer" : {
  20 + "name" : "",
  21 + /*开发者名称*/
  22 + "email" : "",
  23 + /*开发者邮箱地址*/
  24 + "url" : "" /*开发者个人主页地址*/
  25 + },
  26 + "permissions" : {
  27 + "Accelerometer" : {
  28 + "description" : "访问加速度感应器"
  29 + },
  30 + "Audio" : {
  31 + "description" : "访问麦克风"
  32 + },
  33 + "Messaging" : {
  34 + "description" : "短彩邮件插件"
  35 + },
  36 + "Cache" : {
  37 + "description" : "管理应用缓存"
  38 + },
  39 + "Camera" : {
  40 + "description" : "访问摄像头"
  41 + },
  42 + "Console" : {
  43 + "description" : "跟踪调试输出日志"
  44 + },
  45 + "Contacts" : {
  46 + "description" : "访问系统联系人信息"
  47 + },
  48 + "Device" : {
  49 + "description" : "访问设备信息"
  50 + },
  51 + "Downloader" : {
  52 + "description" : "文件下载管理"
  53 + },
  54 + "Events" : {
  55 + "description" : "应用扩展事件"
  56 + },
  57 + "File" : {
  58 + "description" : "访问本地文件系统"
  59 + },
  60 + "Gallery" : {
  61 + "description" : "访问系统相册"
  62 + },
  63 + "Geolocation" : {
  64 + "description" : "访问位置信息"
  65 + },
  66 + "Invocation" : {
  67 + "description" : "使用Native.js能力"
  68 + },
  69 + "Orientation" : {
  70 + "description" : "访问方向感应器"
  71 + },
  72 + "Proximity" : {
  73 + "description" : "访问距离感应器"
  74 + },
  75 + "Storage" : {
  76 + "description" : "管理应用本地数据"
  77 + },
  78 + "Uploader" : {
  79 + "description" : "管理文件上传任务"
  80 + },
  81 + "Runtime" : {
  82 + "description" : "访问运行期环境"
  83 + },
  84 + "XMLHttpRequest" : {
  85 + "description" : "跨域网络访问"
  86 + },
  87 + "Zip" : {
  88 + "description" : "文件压缩与解压缩"
  89 + },
  90 + "Barcode" : {
  91 + "description" : "管理二维码扫描插件"
  92 + },
  93 + "Maps" : {
  94 + "description" : "管理地图插件"
  95 + },
  96 + "Speech" : {
  97 + "description" : "管理语音识别插件"
  98 + },
  99 + "Webview" : {
  100 + "description" : "窗口管理"
  101 + },
  102 + "NativeUI" : {
  103 + "description" : "原生UI控件"
  104 + },
  105 + "Navigator" : {
  106 + "description" : "浏览器信息"
  107 + },
  108 + "NativeObj" : {
  109 + "description" : "原生对象"
  110 + }
  111 + },
  112 + "plus" : {
  113 + "error" : {
  114 + "url" : "/setting.html"
  115 + },
  116 + "splashscreen" : {
  117 + "autoclose" : true,
  118 + /*是否自动关闭程序启动界面,true表示应用加载应用入口页面后自动关闭;false则需调plus.navigator.closeSplashscreen()关闭*/
  119 + "waiting" : true, /*是否在程序启动界面显示等待雪花,true表示显示,false表示不显示。*/
  120 + "delay" : 1
  121 + },
  122 + "popGesture" : "close",
  123 + /*设置应用默认侧滑返回关闭Webview窗口,"none"为无侧滑返回功能,"hide"为侧滑隐藏Webview窗口。参考http://ask.dcloud.net.cn/article/102*/
  124 + "runmode" : "normal",
  125 + /*应用的首次启动运行模式,可取liberate或normal,liberate模式在第一次启动时将解压应用资源(Android平台File API才可正常访问_www目录)*/
  126 + "signature" : "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==",
  127 + /*可选,保留给应用签名,暂不使用*/
  128 + "distribute" : {
  129 + "apple" : {
  130 + "appid" : "",
  131 + /*iOS应用标识,苹果开发网站申请的appid,如io.dcloud.HelloH5*/
  132 + "mobileprovision" : "",
  133 + /*iOS应用打包配置文件*/
  134 + "password" : "",
  135 + /*iOS应用打包个人证书导入密码*/
  136 + "p12" : "",
  137 + /*iOS应用打包个人证书,打包配置文件关联的个人证书*/
  138 + "devices" : "universal",
  139 + /*iOS应用支持的设备类型,可取值iphone/ipad/universal*/
  140 + "frameworks" : [] /*调用Native.js调用原生Objective-c API需要引用的FrameWork,如需调用GameCenter,则添加"GameKit.framework"*/
  141 + },
  142 + "google" : {
  143 + "packagename" : "",
  144 + /*Android应用包名,如io.dcloud.HelloH5*/
  145 + "keystore" : "",
  146 + /*Android应用打包使用的密钥库文件*/
  147 + "password" : "",
  148 + /*Android应用打包使用密钥库中证书的密码*/
  149 + "aliasname" : "",
  150 + /*Android应用打包使用密钥库中证书的别名*/
  151 + "permissions" : [
  152 + "<uses-feature android:name=\"android.hardware.camera\"/>",
  153 + "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
  154 + "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
  155 + "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
  156 + "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
  157 + "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
  158 + "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
  159 + "<uses-permission android:name=\"android.permission.CAMERA\"/>",
  160 + "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
  161 + "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
  162 + "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
  163 + "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
  164 + "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
  165 + "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
  166 + "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
  167 + "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
  168 + "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
  169 + "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
  170 + "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
  171 + "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
  172 + "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
  173 + "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
  174 + ]
  175 + },
  176 + /*使用Native.js调用原生安卓API需要使用到的系统权限*/
  177 + "orientation" : [ "portrait-primary" ],
  178 + /*应用支持的方向,portrait-primary:竖屏正方向;portrait-secondary:竖屏反方向;landscape-primary:横屏正方向;landscape-secondary:横屏反方向*/
  179 + "icons" : {
  180 + "ios" : {
  181 + "prerendered" : true,
  182 + /*应用图标是否已经高亮处理,在iOS6及以下设备上有效*/
  183 + "auto" : "",
  184 + /*应用图标,分辨率:512x512,用于自动生成各种尺寸程序图标*/
  185 + "iphone" : {
  186 + "normal" : "",
  187 + /*iPhone3/3GS程序图标,分辨率:57x57*/
  188 + "retina" : "",
  189 + /*iPhone4程序图标,分辨率:114x114*/
  190 + "retina7" : "",
  191 + /*iPhone4S/5/6程序图标,分辨率:120x120*/
  192 + "retina8" : "",
  193 + /*iPhone6 Plus程序图标,分辨率:180x180*/
  194 + "spotlight-normal" : "",
  195 + /*iPhone3/3GS Spotlight搜索程序图标,分辨率:29x29*/
  196 + "spotlight-retina" : "",
  197 + /*iPhone4 Spotlight搜索程序图标,分辨率:58x58*/
  198 + "spotlight-retina7" : "",
  199 + /*iPhone4S/5/6 Spotlight搜索程序图标,分辨率:80x80*/
  200 + "settings-normal" : "",
  201 + /*iPhone4设置页面程序图标,分辨率:29x29*/
  202 + "settings-retina" : "",
  203 + /*iPhone4S/5/6设置页面程序图标,分辨率:58x58*/
  204 + "settings-retina8" : "", /*iPhone6Plus设置页面程序图标,分辨率:87x87*/
  205 + "app@2x" : "unpackage/res/icons/120x120.png",
  206 + "app@3x" : "unpackage/res/icons/180x180.png",
  207 + "notification@2x" : "unpackage/res/icons/40x40.png",
  208 + "notification@3x" : "unpackage/res/icons/60x60.png",
  209 + "settings@2x" : "unpackage/res/icons/58x58.png",
  210 + "settings@3x" : "unpackage/res/icons/87x87.png",
  211 + "spotlight@2x" : "unpackage/res/icons/80x80.png",
  212 + "spotlight@3x" : "unpackage/res/icons/120x120.png"
  213 + },
  214 + "ipad" : {
  215 + "normal" : "",
  216 + /*iPad普通屏幕程序图标,分辨率:72x72*/
  217 + "retina" : "",
  218 + /*iPad高分屏程序图标,分辨率:144x144*/
  219 + "normal7" : "",
  220 + /*iPad iOS7程序图标,分辨率:76x76*/
  221 + "retina7" : "",
  222 + /*iPad iOS7高分屏程序图标,分辨率:152x152*/
  223 + "spotlight-normal" : "",
  224 + /*iPad Spotlight搜索程序图标,分辨率:50x50*/
  225 + "spotlight-retina" : "",
  226 + /*iPad高分屏Spotlight搜索程序图标,分辨率:100x100*/
  227 + "spotlight-normal7" : "",
  228 + /*iPad iOS7 Spotlight搜索程序图标,分辨率:40x40*/
  229 + "spotlight-retina7" : "",
  230 + /*iPad iOS7高分屏Spotlight搜索程序图标,分辨率:80x80*/
  231 + "settings-normal" : "",
  232 + /*iPad设置页面程序图标,分辨率:29x29*/
  233 + "settings-retina" : "", /*iPad高分屏设置页面程序图标,分辨率:58x58*/
  234 + "app" : "unpackage/res/icons/76x76.png",
  235 + "app@2x" : "unpackage/res/icons/152x152.png",
  236 + "notification" : "unpackage/res/icons/20x20.png",
  237 + "notification@2x" : "unpackage/res/icons/40x40.png",
  238 + "proapp@2x" : "unpackage/res/icons/167x167.png",
  239 + "settings" : "unpackage/res/icons/29x29.png",
  240 + "settings@2x" : "unpackage/res/icons/58x58.png",
  241 + "spotlight" : "unpackage/res/icons/40x40.png",
  242 + "spotlight@2x" : "unpackage/res/icons/80x80.png"
  243 + },
  244 + "appstore" : "unpackage/res/icons/1024x1024.png"
  245 + },
  246 + "android" : {
  247 + "mdpi" : "",
  248 + /*普通屏程序图标,分辨率:48x48*/
  249 + "ldpi" : "",
  250 + /*大屏程序图标,分辨率:48x48*/
  251 + "hdpi" : "unpackage/res/icons/72x72.png",
  252 + /*高分屏程序图标,分辨率:72x72*/
  253 + "xhdpi" : "unpackage/res/icons/96x96.png",
  254 + /*720P高分屏程序图标,分辨率:96x96*/
  255 + "xxhdpi" : "unpackage/res/icons/144x144.png", /*1080P 高分屏程序图标,分辨率:144x144*/
  256 + "xxxhdpi" : "unpackage/res/icons/192x192.png"
  257 + }
  258 + },
  259 + "splashscreen" : {
  260 + "ios" : {
  261 + "iphone" : {
  262 + "default" : "",
  263 + /*iPhone3启动图片选,分辨率:320x480*/
  264 + "retina35" : "",
  265 + /*3.5英寸设备(iPhone4)启动图片,分辨率:640x960*/
  266 + "retina40" : "",
  267 + /*4.0 英寸设备(iPhone5/iPhone5s)启动图片,分辨率:640x1136*/
  268 + "retina47" : "",
  269 + /*4.7 英寸设备(iPhone6)启动图片,分辨率:750x1334*/
  270 + "retina55" : "",
  271 + /*5.5 英寸设备(iPhone6 Plus)启动图片,分辨率:1242x2208*/
  272 + "retina55l" : "" /*5.5 英寸设备(iPhone6 Plus)横屏启动图片,分辨率:2208x1242*/
  273 + },
  274 + "ipad" : {
  275 + "portrait" : "",
  276 + /*iPad竖屏启动图片,分辨率:768x1004*/
  277 + "portrait-retina" : "",
  278 + /*iPad高分屏竖屏图片,分辨率:1536x2008*/
  279 + "landscape" : "",
  280 + /*iPad横屏启动图片,分辨率:1024x748*/
  281 + "landscape-retina" : "",
  282 + /*iPad高分屏横屏启动图片,分辨率:2048x1496*/
  283 + "portrait7" : "",
  284 + /*iPad iOS7竖屏启动图片,分辨率:768x1024*/
  285 + "portrait-retina7" : "",
  286 + /*iPad iOS7高分屏竖屏图片,分辨率:1536x2048*/
  287 + "landscape7" : "",
  288 + /*iPad iOS7横屏启动图片,分辨率:1024x768*/
  289 + "landscape-retina7" : "" /*iPad iOS7高分屏横屏启动图片,分辨率:2048x1536*/
  290 + }
  291 + },
  292 + "android" : {
  293 + "mdpi" : "",
  294 + /*普通屏启动图片,分辨率:240x282*/
  295 + "ldpi" : "",
  296 + /*大屏启动图片,分辨率:320x442*/
  297 + "hdpi" : "",
  298 + /*高分屏启动图片,分辨率:480x762*/
  299 + "xhdpi" : "",
  300 + /*720P高分屏启动图片,分辨率:720x1242*/
  301 + "xxhdpi" : "" /*1080P高分屏启动图片,分辨率:1080x1882*/
  302 + },
  303 + "androidStyle" : "common"
  304 + },
  305 + "plugins" : {
  306 + "speech" : {
  307 + "ifly" : {}
  308 + },
  309 + "ad" : {}
  310 + },
  311 + "ios" : {
  312 + "dSYMs" : false
  313 + }
  314 + }
  315 + },
  316 + "screenOrientation" : [ "portrait-primary" ]
  317 +}
... ...
app/setting.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  6 + <title></title>
  7 + <script src="./js/common.js"></script>
  8 + <script src="./js/backbutton.js"></script>
  9 + <style>
  10 + * {
  11 + box-sizing: border-box;
  12 + }
  13 +
  14 + html,
  15 + body {
  16 + margin: 0;
  17 + padding: 0;
  18 + color: #666;
  19 + font-size: 14px;
  20 + }
  21 +
  22 + header {
  23 + background-color: #f2f2f2;
  24 + padding: 15px 10px;
  25 + font-weight: bold;
  26 + font-size: 16px;
  27 + }
  28 +
  29 + main {
  30 + margin: 10px;
  31 + }
  32 +
  33 + h3 {
  34 + font-size: 14px;
  35 + margin: 20px 0 5px 0;
  36 + font-weight: normal;
  37 + }
  38 +
  39 + select,
  40 + input {
  41 + border: none;
  42 + border-bottom: 1px solid #eee;
  43 + width: 100%;
  44 + outline: none;
  45 + padding: 10px 0;
  46 + transition: all 0.3s;
  47 + color: #666;
  48 + border-radius: 0;
  49 + }
  50 +
  51 + input:focus {
  52 + border-bottom: 1px solid #aaa;
  53 + }
  54 +
  55 + button {
  56 + background-color: #f2f2f2;
  57 + color: #1d498d;
  58 + border: none;
  59 + width: 100%;
  60 + padding: 8px;
  61 + border-radius: 8px;
  62 + outline: none;
  63 + transition: all 0.3s;
  64 + }
  65 +
  66 + button:active {
  67 + background-color: #d9dede;
  68 + }
  69 +
  70 + .ControlGroup {
  71 + display: flex;
  72 + }
  73 +
  74 + .ControlGroup>*:not(:last-child) {
  75 + margin-right: 10px;
  76 + }
  77 +
  78 + .BottomFixed {
  79 + position: fixed;
  80 + bottom: 10px;
  81 + left: 10px;
  82 + right: 10px;
  83 + }
  84 + </style>
  85 + <script type="text/javascript">
  86 + let settingData;
  87 +
  88 + document.addEventListener('plusready', function() {
  89 + settingData = getUrlData() || getDefaultUrlData();
  90 + updateDisplay();
  91 + addListeners();
  92 + });
  93 +
  94 + function updateDisplay() {
  95 + const data = settingData;
  96 + document.getElementById('stProtocol').value = data.protocol;
  97 + document.getElementById('tbIp').value = data.url;
  98 + document.getElementById('tbPort').value = data.port;
  99 + }
  100 +
  101 + function close() {
  102 + plus.webview.currentWebview().close();
  103 + }
  104 +
  105 + function addListeners() {
  106 + document.getElementById('stProtocol').addEventListener('change', (event) => {
  107 + settingData.protocol = event.target.value;
  108 + });
  109 + document.getElementById('tbIp').addEventListener('change', (event) => {
  110 + settingData.url = event.target.value;
  111 + });
  112 + document.getElementById('tbPort').addEventListener('change', (event) => {
  113 + settingData.port = event.target.value;
  114 + });
  115 +
  116 + // document.getElementById('btnSave').addEventListener('click', () => {
  117 + // let error = '';
  118 + // if (!settingData.url) {
  119 + // error = '请填写url';
  120 + // } else if (!settingData.port) {
  121 + // error = '请填写端口号';
  122 + // } else if (isNaN(settingData.port)) {
  123 + // error = '请输入正确的端口号'
  124 + // }
  125 +
  126 + // if (error) {
  127 + // plus.nativeUI.toast(error);
  128 + // return;
  129 + // }
  130 + // setUrlData(settingData.protocol, settingData.url, settingData.port);
  131 + // plus.runtime.restart();
  132 + // });
  133 + document.getElementById('btnSave').addEventListener('click', () => {
  134 + let error = '';
  135 + if (!settingData.url) {
  136 + error = '请填写url';
  137 + } else if (!settingData.port) {
  138 + error = '请填写端口号';
  139 + } else if (isNaN(settingData.port)) {
  140 + error = '请输入正确的端口号';
  141 + }
  142 +
  143 + if (error) {
  144 + plus.nativeUI.toast(error);
  145 + return;
  146 + }
  147 +
  148 + const testUrl = `${settingData.protocol}://${settingData.url}:${settingData.port}/`;
  149 + plus.nativeUI.showWaiting('正在连接服务器...');
  150 +
  151 + const xhr = new plus.net.XMLHttpRequest();
  152 + xhr.open('GET', testUrl, true);
  153 + xhr.timeout = 5000; // 5秒超时
  154 +
  155 + xhr.onreadystatechange = function() {
  156 + if (xhr.readyState === 4) {
  157 + plus.nativeUI.closeWaiting();
  158 + if (xhr.status === 0) {
  159 + // 网络层失败:DNS错误、连接拒绝、超时等
  160 + plus.nativeUI.toast('无法连接到服务器,请检查地址和网络');
  161 + } else {
  162 + // 成功收到 HTTP 响应(200/404/500 都算通)
  163 + setUrlData(settingData.protocol, settingData.url, settingData.port);
  164 + plus.nativeUI.toast('连接成功,正在重启应用...');
  165 + setTimeout(() => {
  166 + plus.runtime.restart();
  167 + }, 800);
  168 + }
  169 + }
  170 + };
  171 +
  172 + // 注意:不再单独监听 onerror/ontimeout,因为 onreadystatechange 已覆盖
  173 + xhr.send();
  174 + });
  175 + document.getElementById('btnCancel').addEventListener('click', (event) => {
  176 + plus.runtime.restart();
  177 + });
  178 + }
  179 + </script>
  180 + </head>
  181 + <body>
  182 + <header>服务器设置</header>
  183 + <main>
  184 + <h3>协议</h3>
  185 + <select id='stProtocol'>
  186 + <option value="http">http</option>
  187 + <option value="https">https</option>
  188 + </select>
  189 +
  190 + <h3>IP地址</h3>
  191 + <input id="tbIp" />
  192 + <h3>端口号</h3>
  193 + <input id="tbPort" />
  194 + <div class="ControlGroup BottomFixed">
  195 + <button id='btnCancel'>取消</button>
  196 + <button id='btnSave'>保存</button>
  197 + </div>
  198 + </main>
  199 + </body>
  200 +</html>
0 201 \ No newline at end of file
... ...
app/unpackage/cache/apk/H5F097120_cm.apk 0 → 100644
No preview for this file type
app/unpackage/cache/apk/apkurl 0 → 100644
  1 +https://app.liuyingyong.cn/build/download/ce5fb1f0-f746-11f0-b23f-91d763569281
0 2 \ No newline at end of file
... ...
app/unpackage/cache/apk/cmManifestCache.json 0 → 100644
  1 +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
0 2 \ No newline at end of file
... ...
app/unpackage/cache/certdata 0 → 100644
  1 +andrCertfile=D:/前端学习/jky/前端/预科/HBuilderX/plugins/app-safe-pack/Test.keystore
  2 +andrCertAlias=android
  3 +andrCertPass=ep/Tdjka4Y7WYqDB6/S7dw==
  4 +storePassword=ep/Tdjka4Y7WYqDB6/S7dw==
... ...
app/unpackage/cache/cloudcertificate/certini 0 → 100644
  1 +[General]
  2 +andrCertfile=package.keystore
  3 +andrCertAlias=H5F097120
  4 +andrCertPass="zNXLoJmynEHxS3BJye6BiQ=="
... ...
app/unpackage/cache/cloudcertificate/package.keystore 0 → 100644
No preview for this file type
app/unpackage/cache/wgt/H5F097120/.manifest/icon-android-hdpi.png 0 → 100644

5.74 KB

app/unpackage/cache/wgt/H5F097120/.manifest/icon-android-xhdpi.png 0 → 100644

8.14 KB

app/unpackage/cache/wgt/H5F097120/.manifest/icon-android-xxhdpi.png 0 → 100644

13.6 KB

app/unpackage/cache/wgt/H5F097120/.manifest/icon-android-xxxhdpi.png 0 → 100644

19 KB

app/unpackage/cache/wgt/H5F097120/index.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  6 + <title></title>
  7 + <script src="./js/common.js" type="text/javascript"></script>
  8 + <script type="text/javascript">
  9 + // function disp_confirm()
  10 + // {
  11 + // var r= confirm("Press a button")
  12 + // if (r) {
  13 + // plus.storage.setItem('privacyPolicy', 'agree');
  14 + // }
  15 + // else
  16 + // {
  17 + // // plus.runtime.quit();
  18 + // }
  19 + // }
  20 + document.addEventListener('plusready', function() {
  21 + const data = getUrlData();
  22 + if (!data) {
  23 + window.location.href = 'http://118.178.131.219:8088/loginMobile';
  24 + // showSettingPage();
  25 + } else {
  26 + showMainPage();
  27 + }
  28 + // const sPrivacyPolicy = plus.storage.getItem('privacyPolicy');
  29 + // if (sPrivacyPolicy !== "agree") {
  30 + // disp_confirm();
  31 + // }
  32 + });
  33 +
  34 + function showSettingPage() {
  35 + const view = plus.webview.create('/setting.html', 'setting');
  36 + view.show("pop-in");
  37 + }
  38 +
  39 + function showMainPage() {
  40 + const waitTime = 5000;
  41 + const data = getUrlData();
  42 + const url = `${data.protocol}://${data.url}:${data.port}/loginMobile`;
  43 + // window.location.href = url;
  44 + // console.log(url);
  45 + const webview = plus.webview.currentWebview();
  46 +
  47 + const timerId = setTimeout(() => {
  48 + webview.loadURL('/setting.html');
  49 + }, waitTime);
  50 + webview.onloaded = () => {
  51 + clearTimeout(timerId);
  52 + };
  53 + webview.loadURL(url);
  54 + }
  55 + </script>
  56 + </head>
  57 + <body>
  58 +
  59 + </body>
  60 +</html>
... ...
app/unpackage/cache/wgt/H5F097120/js/backbutton.js 0 → 100644
  1 +// 解决 关于HBuilder X打包的APP按返回键退出的问题
  2 +document.addEventListener('plusready', function() {
  3 + var first = null;
  4 + const webview = window.plus.webview.currentWebview();
  5 + //自定义运行期返回
  6 + const main = plus.android.runtimeMainActivity();
  7 + //返回后台,但是不退出应用
  8 + plus.runtime.quit = function() {
  9 + main.moveTaskToBack(false);
  10 + };
  11 + //监听返回按键
  12 + plus.key.addEventListener("backbutton", function() {
  13 + //监听webview窗口是否可以返回
  14 + webview.canBack(function(e) {
  15 + if(e.canBack) {
  16 + //可以返回返回上一页面
  17 + // plus.navigator.back();
  18 + webview.back();
  19 + } else {
  20 + //不可以返回
  21 + //处理逻辑:2秒内,连续两次按返回键,则退出应用;
  22 + //首次按键,提示再按一次退出应用
  23 + if (!first) {
  24 + first = new Date().getTime();
  25 + //通过H5+ API 调用Android 上的toast 提示框
  26 + plus.nativeUI.toast('再按一次退出应用', {
  27 + duration: 'short'
  28 + });
  29 + setTimeout(function() {
  30 + first = null;
  31 + }, 2000);
  32 + } else {
  33 + if (new Date().getTime() - first < 2000) {
  34 + plus.runtime.quit();//退出app
  35 + }
  36 + }
  37 + }
  38 + });
  39 + }, false);
  40 +});
0 41 \ No newline at end of file
... ...
app/unpackage/cache/wgt/H5F097120/js/common.js 0 → 100644
  1 +/**
  2 + * @param {String} protocol 协议, http/https
  3 + * @param {string} url url地址
  4 + * @param {number} port
  5 + */
  6 +// eslint-disable-next-line no-unused-vars
  7 +function setUrlData(protocol, url, port) {
  8 + // eslint-disable-next-line no-undef
  9 + plus.storage.setItem('urlData', JSON.stringify({
  10 + protocol,
  11 + url,
  12 + port,
  13 + }));
  14 +}
  15 +
  16 +/**
  17 + * @return {{protocol:'http'|'https', url:string, port:number} | null}
  18 + */
  19 +// eslint-disable-next-line no-unused-vars
  20 +function getUrlData() {
  21 + // eslint-disable-next-line no-undef
  22 + const str = plus.storage.getItem('urlData');
  23 + try {
  24 + return JSON.parse(str);
  25 + } catch (e) {
  26 + return null;
  27 + }
  28 +}
  29 +
  30 +// eslint-disable-next-line no-unused-vars
  31 +function getDefaultUrlData() {
  32 + return {
  33 + protocol: 'http',
  34 + url: '118.178.131.219',
  35 + port: 8088,
  36 + };
  37 +}
... ...
app/unpackage/cache/wgt/H5F097120/manifest.json 0 → 100644
  1 +{"@platforms":["android","iPhone","iPad"],"id":"H5F097120","name":"小羚羊ERP","version":{"name":"1.1","code":101},"description":"","icons":{"72":"icon.png"},"launch_path":"index.html","developer":{"name":"","email":"","url":""},"permissions":{"Accelerometer":{"description":"访问加速度感应器"},"Audio":{"description":"访问麦克风"},"Messaging":{"description":"短彩邮件插件"},"Cache":{"description":"管理应用缓存"},"Camera":{"description":"访问摄像头"},"Console":{"description":"跟踪调试输出日志"},"Contacts":{"description":"访问系统联系人信息"},"Device":{"description":"访问设备信息"},"Downloader":{"description":"文件下载管理"},"Events":{"description":"应用扩展事件"},"File":{"description":"访问本地文件系统"},"Gallery":{"description":"访问系统相册"},"Geolocation":{"description":"访问位置信息"},"Invocation":{"description":"使用Native.js能力"},"Orientation":{"description":"访问方向感应器"},"Proximity":{"description":"访问距离感应器"},"Storage":{"description":"管理应用本地数据"},"Uploader":{"description":"管理文件上传任务"},"Runtime":{"description":"访问运行期环境"},"XMLHttpRequest":{"description":"跨域网络访问"},"Zip":{"description":"文件压缩与解压缩"},"Barcode":{"description":"管理二维码扫描插件"},"Maps":{"description":"管理地图插件"},"Speech":{"description":"管理语音识别插件"},"Webview":{"description":"窗口管理"},"NativeUI":{"description":"原生UI控件"},"Navigator":{"description":"浏览器信息"},"NativeObj":{"description":"原生对象"}},"plus":{"error":{"url":"/setting.html"},"splashscreen":{"autoclose":true,"delay":1,"waiting":true},"popGesture":"close","runmode":"normal","signature":"Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==","distribute":{"apple":{"appid":"","devices":"universal","frameworks":[],"mobileprovision":"","p12":"","password":""},"google":{"aliasname":"","keystore":"","packagename":"plus.H55770CCC","password":"","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.CALL_PHONE\"/>","<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.GET_ACCOUNTS\"/>","<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>","<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>","<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>","<uses-permission android:name=\"android.permission.READ_LOGS\"/>","<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>","<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>","<uses-permission android:name=\"android.permission.VIBRATE\"/>","<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>","<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>","<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"],"custompermissions":true},"orientation":["portrait-primary"],"icons":{"ios":{"appstore":"unpackage/res/icons/1024x1024.png","ipad":{"app":"unpackage/res/icons/76x76.png","app@2x":"unpackage/res/icons/152x152.png","normal":"","normal7":"","notification":"unpackage/res/icons/20x20.png","notification@2x":"unpackage/res/icons/40x40.png","proapp@2x":"unpackage/res/icons/167x167.png","retina":"","retina7":"","settings":"unpackage/res/icons/29x29.png","settings-normal":"","settings-retina":"","settings@2x":"unpackage/res/icons/58x58.png","spotlight":"unpackage/res/icons/40x40.png","spotlight-normal":"","spotlight-normal7":"","spotlight-retina":"","spotlight-retina7":"","spotlight@2x":"unpackage/res/icons/80x80.png"},"iphone":{"app@2x":"unpackage/res/icons/120x120.png","app@3x":"unpackage/res/icons/180x180.png","normal":"","notification@2x":"unpackage/res/icons/40x40.png","notification@3x":"unpackage/res/icons/60x60.png","retina":"","retina7":"","retina8":"","settings-normal":"","settings-retina":"","settings-retina8":"","settings@2x":"unpackage/res/icons/58x58.png","settings@3x":"unpackage/res/icons/87x87.png","spotlight-normal":"","spotlight-retina":"","spotlight-retina7":"","spotlight@2x":"unpackage/res/icons/80x80.png","spotlight@3x":"unpackage/res/icons/120x120.png"},"prerendered":true},"android":{"ldpi":"","mdpi":"","hdpi":"icon-android-hdpi.png","xhdpi":"icon-android-xhdpi.png","xxhdpi":"icon-android-xxhdpi.png","xxxhdpi":"icon-android-xxxhdpi.png"}},"splashscreen":{"ios":{"iphone":{"default":"","retina35":"","retina40":"","retina47":"","retina55":"","retina55l":""},"ipad":{"portrait":"","portrait-retina":"","landscape":"","landscape-retina":"","portrait7":"","portrait-retina7":"","landscape7":"","landscape-retina7":""}},"android":{"mdpi":"","ldpi":"","hdpi":"","xhdpi":"","xxhdpi":""},"androidStyle":"common"},"plugins":{"ad":{},"speech":{"ifly":{}}},"ios":{"dSYMs":false}},"adid":"128720100312"},"screenOrientation":["portrait-primary"]}
0 2 \ No newline at end of file
... ...
app/unpackage/cache/wgt/H5F097120/setting.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  6 + <title></title>
  7 + <script src="./js/common.js"></script>
  8 + <script src="./js/backbutton.js"></script>
  9 + <style>
  10 + * {
  11 + box-sizing: border-box;
  12 + }
  13 +
  14 + html,
  15 + body {
  16 + margin: 0;
  17 + padding: 0;
  18 + color: #666;
  19 + font-size: 14px;
  20 + }
  21 +
  22 + header {
  23 + background-color: #f2f2f2;
  24 + padding: 15px 10px;
  25 + font-weight: bold;
  26 + font-size: 16px;
  27 + }
  28 +
  29 + main {
  30 + margin: 10px;
  31 + }
  32 +
  33 + h3 {
  34 + font-size: 14px;
  35 + margin: 20px 0 5px 0;
  36 + font-weight: normal;
  37 + }
  38 +
  39 + select,
  40 + input {
  41 + border: none;
  42 + border-bottom: 1px solid #eee;
  43 + width: 100%;
  44 + outline: none;
  45 + padding: 10px 0;
  46 + transition: all 0.3s;
  47 + color: #666;
  48 + border-radius: 0;
  49 + }
  50 +
  51 + input:focus {
  52 + border-bottom: 1px solid #aaa;
  53 + }
  54 +
  55 + button {
  56 + background-color: #f2f2f2;
  57 + color: #1d498d;
  58 + border: none;
  59 + width: 100%;
  60 + padding: 8px;
  61 + border-radius: 8px;
  62 + outline: none;
  63 + transition: all 0.3s;
  64 + }
  65 +
  66 + button:active {
  67 + background-color: #d9dede;
  68 + }
  69 +
  70 + .ControlGroup {
  71 + display: flex;
  72 + }
  73 +
  74 + .ControlGroup>*:not(:last-child) {
  75 + margin-right: 10px;
  76 + }
  77 +
  78 + .BottomFixed {
  79 + position: fixed;
  80 + bottom: 10px;
  81 + left: 10px;
  82 + right: 10px;
  83 + }
  84 + </style>
  85 + <script type="text/javascript">
  86 + let settingData;
  87 +
  88 + document.addEventListener('plusready', function() {
  89 + settingData = getUrlData() || getDefaultUrlData();
  90 + updateDisplay();
  91 + addListeners();
  92 + });
  93 +
  94 + function updateDisplay() {
  95 + const data = settingData;
  96 + document.getElementById('stProtocol').value = data.protocol;
  97 + document.getElementById('tbIp').value = data.url;
  98 + document.getElementById('tbPort').value = data.port;
  99 + }
  100 +
  101 + function close() {
  102 + plus.webview.currentWebview().close();
  103 + }
  104 +
  105 + function addListeners() {
  106 + document.getElementById('stProtocol').addEventListener('change', (event) => {
  107 + settingData.protocol = event.target.value;
  108 + });
  109 + document.getElementById('tbIp').addEventListener('change', (event) => {
  110 + settingData.url = event.target.value;
  111 + });
  112 + document.getElementById('tbPort').addEventListener('change', (event) => {
  113 + settingData.port = event.target.value;
  114 + });
  115 +
  116 + // document.getElementById('btnSave').addEventListener('click', () => {
  117 + // let error = '';
  118 + // if (!settingData.url) {
  119 + // error = '请填写url';
  120 + // } else if (!settingData.port) {
  121 + // error = '请填写端口号';
  122 + // } else if (isNaN(settingData.port)) {
  123 + // error = '请输入正确的端口号'
  124 + // }
  125 +
  126 + // if (error) {
  127 + // plus.nativeUI.toast(error);
  128 + // return;
  129 + // }
  130 + // setUrlData(settingData.protocol, settingData.url, settingData.port);
  131 + // plus.runtime.restart();
  132 + // });
  133 + document.getElementById('btnSave').addEventListener('click', () => {
  134 + let error = '';
  135 + if (!settingData.url) {
  136 + error = '请填写url';
  137 + } else if (!settingData.port) {
  138 + error = '请填写端口号';
  139 + } else if (isNaN(settingData.port)) {
  140 + error = '请输入正确的端口号';
  141 + }
  142 +
  143 + if (error) {
  144 + plus.nativeUI.toast(error);
  145 + return;
  146 + }
  147 +
  148 + const testUrl = `${settingData.protocol}://${settingData.url}:${settingData.port}/`;
  149 + plus.nativeUI.showWaiting('正在连接服务器...');
  150 +
  151 + const xhr = new plus.net.XMLHttpRequest();
  152 + xhr.open('GET', testUrl, true);
  153 + xhr.timeout = 5000; // 5秒超时
  154 +
  155 + xhr.onreadystatechange = function() {
  156 + if (xhr.readyState === 4) {
  157 + plus.nativeUI.closeWaiting();
  158 + if (xhr.status === 0) {
  159 + // 网络层失败:DNS错误、连接拒绝、超时等
  160 + plus.nativeUI.toast('无法连接到服务器,请检查地址和网络');
  161 + } else {
  162 + // 成功收到 HTTP 响应(200/404/500 都算通)
  163 + setUrlData(settingData.protocol, settingData.url, settingData.port);
  164 + plus.nativeUI.toast('连接成功,正在重启应用...');
  165 + setTimeout(() => {
  166 + plus.runtime.restart();
  167 + }, 800);
  168 + }
  169 + }
  170 + };
  171 +
  172 + // 注意:不再单独监听 onerror/ontimeout,因为 onreadystatechange 已覆盖
  173 + xhr.send();
  174 + });
  175 + document.getElementById('btnCancel').addEventListener('click', (event) => {
  176 + plus.runtime.restart();
  177 + });
  178 + }
  179 + </script>
  180 + </head>
  181 + <body>
  182 + <header>服务器设置</header>
  183 + <main>
  184 + <h3>协议</h3>
  185 + <select id='stProtocol'>
  186 + <option value="http">http</option>
  187 + <option value="https">https</option>
  188 + </select>
  189 +
  190 + <h3>IP地址</h3>
  191 + <input id="tbIp" />
  192 + <h3>端口号</h3>
  193 + <input id="tbPort" />
  194 + <div class="ControlGroup BottomFixed">
  195 + <button id='btnCancel'>取消</button>
  196 + <button id='btnSave'>保存</button>
  197 + </div>
  198 + </main>
  199 + </body>
  200 +</html>
0 201 \ No newline at end of file
... ...
app/unpackage/res/icons/1024x1024.png 0 → 100644

126 KB

app/unpackage/res/icons/120x120.png 0 → 100644

10.9 KB

app/unpackage/res/icons/144x144.png 0 → 100644

13.6 KB

app/unpackage/res/icons/152x152.png 0 → 100644

14.6 KB

app/unpackage/res/icons/167x167.png 0 → 100644

16.2 KB

app/unpackage/res/icons/180x180.png 0 → 100644

17.6 KB

app/unpackage/res/icons/192x192.png 0 → 100644

19 KB

app/unpackage/res/icons/20x20.png 0 → 100644

1.07 KB

app/unpackage/res/icons/29x29.png 0 → 100644

1.79 KB

app/unpackage/res/icons/40x40.png 0 → 100644

2.68 KB

app/unpackage/res/icons/58x58.png 0 → 100644

4.35 KB

app/unpackage/res/icons/60x60.png 0 → 100644

4.46 KB

app/unpackage/res/icons/72x72.png 0 → 100644

5.74 KB

app/unpackage/res/icons/76x76.png 0 → 100644

6.02 KB

app/unpackage/res/icons/80x80.png 0 → 100644

6.47 KB

app/unpackage/res/icons/87x87.png 0 → 100644

7.17 KB

app/unpackage/res/icons/96x96.png 0 → 100644

8.14 KB

app/unpackage/res/icons/移动端LOGO-16-2.png 0 → 100644

3.52 KB

app/unpackage/res/icons/移动端LOGO-512-2.png 0 → 100644

72.8 KB