重启项目
This commit is contained in:
parent
89e908fe21
commit
76abef7a94
11
aardiowin/config.json
Normal file
11
aardiowin/config.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"app" : "awin",
|
||||||
|
"title" : "awin",
|
||||||
|
"icon" : "",
|
||||||
|
"backend" : "",
|
||||||
|
"frontend" : "",
|
||||||
|
"window" : {
|
||||||
|
"width" : 500,
|
||||||
|
"height" : 500
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<project ver="10" name="awin" libEmbed="true" icon="..." ui="win" output="awin.exe" CompanyName="aardio" FileDescription="awin" LegalCopyright="Copyright (C) 作者 2024" ProductName="awin" InternalName="awin" FileVersion="0.0.0.1" ProductVersion="0.0.0.1" publishDir="/dist/" dstrip="false">
|
<project ver="10" name="awin" libEmbed="true" icon="..." ui="win" output="awin.exe" CompanyName="aardio" FileDescription="awin" LegalCopyright="Copyright (C) 作者 2024" ProductName="awin" InternalName="awin" FileVersion="0.0.0.1" ProductVersion="0.0.0.1" publishDir="/dist/" dstrip="false" local="false" ignored="false">
|
||||||
<file name="main" path="main.aardio"/>
|
<file name="main" path="main.aardio"/>
|
||||||
<folder name="窗体" path="forms" comment="" embed="true" local="false" ignored="false"/>
|
<folder name="窗体" path="forms" comment="" embed="true" local="false" ignored="false"/>
|
||||||
<folder name="网页" path="web" embed="true" comment="目录" local="true">
|
<folder name="网页" path="web" embed="true" comment="目录" local="true" ignored="false">
|
||||||
<file name="index.html" path="web\index.html" comment="web\index.html"/>
|
<file name="index.html" path="web\index.html" comment="web\index.html"/>
|
||||||
<file name="index.js" path="web\index.js" comment="web\index.js"/>
|
</folder>
|
||||||
</folder>
|
</project>
|
||||||
<folder name="网页源码" path="web.src" embed="false" comment="目录" local="false" ignored="true"/>
|
|
||||||
</project>
|
|
||||||
|
106
aardiowin/lib/init.aardio
Normal file
106
aardiowin/lib/init.aardio
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
// init 初始化
|
||||||
|
import log
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 临时日志
|
||||||
|
var gLog = log( "awin" );
|
||||||
|
var gDebug = false;
|
||||||
|
|
||||||
|
namespace init{
|
||||||
|
import fsys
|
||||||
|
import string
|
||||||
|
import web.json
|
||||||
|
|
||||||
|
// 日志对象
|
||||||
|
getDebug = function(){
|
||||||
|
return gDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 日志对象
|
||||||
|
getLog = function(){
|
||||||
|
return gLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置载入函数
|
||||||
|
loadConfigs = function() {
|
||||||
|
|
||||||
|
|
||||||
|
gLog.print("dir");
|
||||||
|
var configs = {};
|
||||||
|
var currentPath = fsys.getCurDir();
|
||||||
|
gLog.print("currentPath", currentPath);
|
||||||
|
var appDataPath = string.getenv("APPDATA");
|
||||||
|
gLog.print("appDataPath", appDataPath);
|
||||||
|
|
||||||
|
// 读取当前路径下的 config.json
|
||||||
|
var currentConfigPath = currentPath ++ "/config.json";
|
||||||
|
if (io.exist(currentConfigPath)) {
|
||||||
|
var currentConfigContent = string.load(currentConfigPath);
|
||||||
|
configs = web.json.parse(currentConfigContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从当前路径下的 config.json 中读取 app 值
|
||||||
|
var appValue = configs.app;
|
||||||
|
if (!appValue) {
|
||||||
|
error("'app' value not found in the config file.");
|
||||||
|
}
|
||||||
|
gLog.print("app", appValue);
|
||||||
|
|
||||||
|
// 构建 %APPDATA%/%app% 路径
|
||||||
|
var appDir = appDataPath ++ "/" ++ appValue;
|
||||||
|
if (! io.exist( appDir )) {
|
||||||
|
fsys.createDir( appDir )
|
||||||
|
}
|
||||||
|
var appDataConfigPath = appDataPath ++ "/" ++ appValue ++ "/config.json";
|
||||||
|
|
||||||
|
// 读取 %APPDATA%/%app% 路径下的 config.json
|
||||||
|
if (io.exist(appDataConfigPath)) {
|
||||||
|
var appDataConfigContent = string.load(appDataConfigPath);
|
||||||
|
var appDataConfig = web.json.parse(appDataConfigContent);
|
||||||
|
|
||||||
|
// 合并配置,后读取的覆盖先读取的
|
||||||
|
object.merge(configs, appDataConfig, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return configs;
|
||||||
|
};
|
||||||
|
|
||||||
|
checkConfig = function (config){
|
||||||
|
if( ! config.window ){
|
||||||
|
config.window = {}
|
||||||
|
}
|
||||||
|
if( ! config.window.width ) {
|
||||||
|
config.window.width = 500
|
||||||
|
}
|
||||||
|
if( ! config.window.height ) {
|
||||||
|
config.window.height = 500
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
载入配置,配置文件读取顺序,后读的可以覆盖先读的值。
|
||||||
|
1. 读取当前路径下的 config.json
|
||||||
|
2. 读取 %APPDATA%/%app% 路径下的 config.json。其中 %APPDATA% 为操作系统提供的当前用户软件目录。
|
||||||
|
%app% 为当前路径下的 config.json 中配置的 app
|
||||||
|
|
||||||
|
*/
|
||||||
|
init = function(){
|
||||||
|
gLog.print("init")
|
||||||
|
gConfig = {}
|
||||||
|
// 使用示例
|
||||||
|
try {
|
||||||
|
gLog.print("loadConfigs")
|
||||||
|
io.print("")
|
||||||
|
gConfig = loadConfigs()
|
||||||
|
io.print("2")
|
||||||
|
gConfig = checkConfig( gConfig )
|
||||||
|
gLog.print(configs);
|
||||||
|
} catch (e) {
|
||||||
|
io.print("错误会中断try语句块" ++ e)
|
||||||
|
gLog.print(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
aardiowin/lib/log.aardio
Normal file
40
aardiowin/lib/log.aardio
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// log 日志
|
||||||
|
import fsys
|
||||||
|
import fsys.log
|
||||||
|
import time
|
||||||
|
|
||||||
|
var getToday = function(){
|
||||||
|
var $now = time.now() //当前时间
|
||||||
|
return "" ++ $now.year ++ $now.month ++ $now.day
|
||||||
|
}
|
||||||
|
|
||||||
|
var todayLogFile = function( name ) {
|
||||||
|
|
||||||
|
var appDataPath = string.getenv("APPDATA");
|
||||||
|
var appPath = appDataPath ++ "/" ++ name;
|
||||||
|
if (! io.exist( appPath )) {
|
||||||
|
fsys.createDir( appPath )
|
||||||
|
}
|
||||||
|
return appPath ++ "/" ++ name ++ "." ++ getToday() ++ ".log"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class log {
|
||||||
|
ctor( name ){
|
||||||
|
|
||||||
|
path = todayLogFile(name);
|
||||||
|
|
||||||
|
this = ..fsys.log(path) //调用基类构造对象原型
|
||||||
|
this.basePrint = this.print;
|
||||||
|
};
|
||||||
|
|
||||||
|
print = function(...){
|
||||||
|
var t = ..time.now()
|
||||||
|
t.format="%Y%m%d-%H%M%S ";
|
||||||
|
|
||||||
|
var args = {...}
|
||||||
|
..table.insert(args, tostring(t)) // 通常时间非重要信息,以...作视觉区分方便查看
|
||||||
|
|
||||||
|
this.basePrint( ..table.unpack(args) )
|
||||||
|
};
|
||||||
|
}
|
@ -1,85 +1,48 @@
|
|||||||
import win.ui;
|
import win.ui;
|
||||||
|
import init;
|
||||||
/*
|
|
||||||
|
|
||||||
载入配置,配置文件读取顺序,后读的可以覆盖先读的值。
|
// 初始化
|
||||||
1. 读取当前路径下的 config.json
|
init.init();
|
||||||
2. 读取 %APPDATA%/%app% 路径下的 config.json。其中 %APPDATA% 为操作系统提供的当前用户软件目录。
|
var gConfig = init.loadConfigs();
|
||||||
%app% 为当前路径下的 config.json 中配置的 app
|
var gDebug = init.getDebug();
|
||||||
|
|
||||||
*/
|
/*DSG{{*/
|
||||||
gConfig = {}
|
mainForm = win.form(text="awin";right=gConfig.window.width;bottom=gConfig.window.height;border="thin";max=false;min=false)
|
||||||
// 使用示例
|
mainForm.add()
|
||||||
try {
|
/*}}*/
|
||||||
gConfig = loadConfigs()
|
|
||||||
console.log(configs);
|
|
||||||
} catch (e) {
|
// 启动界面
|
||||||
console.error(e.message);
|
var gLog = init.getLog();
|
||||||
}
|
gLog.print("web view")
|
||||||
|
import web.view;
|
||||||
/*DSG{{*/
|
var theView = web.view(mainForm);
|
||||||
mainForm = win.form(text="awin";right=759;bottom=469)
|
|
||||||
mainForm.add()
|
//导出为 JavaScript 中的 aardio 对象
|
||||||
/*}}*/
|
theView.external = {
|
||||||
|
onCounterUpdate = function(name,value){
|
||||||
import web.view;
|
if(name!==null && value!==null){
|
||||||
var theView = web.view(mainForm);
|
return "aardio 返回的值:网页中 React 状态值改变了:value:"+value;
|
||||||
|
}
|
||||||
//导出为 JavaScript 中的 aardio 对象
|
};
|
||||||
theView.external = {
|
}
|
||||||
onCounterUpdate = function(name,value){
|
|
||||||
if(name!==null && value!==null){
|
import wsock.tcp.simpleHttpServer;
|
||||||
return "aardio 返回的值:网页中 React 状态值改变了:value:"+value;
|
/*
|
||||||
}
|
如果导入 simpleHttpServer,则单个斜杠开头的路径会转换为嵌入式 HTTP 地址,
|
||||||
};
|
如果同时文件名为 index.html ,则上级目录自动设为根目录,前端应用发布根目录使用默认的 "/" 即可,不需要改动。
|
||||||
}
|
|
||||||
|
去掉下面的前端项目调试端口号 37151 或发布 EXE 后运行才会打开 "\web\index.html"。
|
||||||
import wsock.tcp.simpleHttpServer;
|
否则打开 http://localhost:37151
|
||||||
/*
|
*/
|
||||||
如果导入 simpleHttpServer,则单个斜杠开头的路径会转换为嵌入式 HTTP 地址,
|
if( gDebug ){
|
||||||
如果同时文件名为 index.html ,则上级目录自动设为根目录,前端应用发布根目录使用默认的 "/" 即可,不需要改动。
|
theView.go("\web\index.html",37151);
|
||||||
|
} else {
|
||||||
去掉下面的前端项目调试端口号 37151 或发布 EXE 后运行才会打开 "\web\index.html"。
|
theView.go("\web\index.html");
|
||||||
否则打开 http://localhost:37151
|
}
|
||||||
*/
|
|
||||||
theView.go("\web\index.html",37151);
|
|
||||||
|
mainForm.show();
|
||||||
mainForm.show();
|
win.loopMessage();
|
||||||
win.loopMessage();
|
|
||||||
|
|
||||||
|
|
||||||
// 配置载入函数
|
|
||||||
function loadConfigs() {
|
|
||||||
var configs = {};
|
|
||||||
var currentPath = file.dir();
|
|
||||||
var appDataPath = env.get("APPDATA");
|
|
||||||
|
|
||||||
// 读取当前路径下的 config.json
|
|
||||||
var currentConfigPath = file.path(currentPath, "config.json");
|
|
||||||
if (file.exists(currentConfigPath)) {
|
|
||||||
var currentConfigContent = file.read(currentConfigPath);
|
|
||||||
configs = json.parse(currentConfigContent);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 从当前路径下的 config.json 中读取 app 值
|
|
||||||
var appValue = configs.app;
|
|
||||||
if (!appValue) {
|
|
||||||
error("'app' value not found in the config file.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 构建 %APPDATA%/%app% 路径
|
|
||||||
var appDataConfigPath = file.path(appDataPath, appValue, "config.json");
|
|
||||||
|
|
||||||
// 读取 %APPDATA%/%app% 路径下的 config.json
|
|
||||||
if (file.exists(appDataConfigPath)) {
|
|
||||||
var appDataConfigContent = file.read(appDataConfigPath);
|
|
||||||
var appDataConfig = json.parse(appDataConfigContent);
|
|
||||||
|
|
||||||
// 合并配置,后读取的覆盖先读取的
|
|
||||||
object.merge(configs, appDataConfig, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return configs;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,15 +1,34 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
</head>
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<body style="margin:50px;white-space: pre;">
|
<style>
|
||||||
请在工程中右键点击「网页源码」目录,
|
.loader {
|
||||||
然后在弹出菜单中点击「用外部编辑器」打开。
|
border: 16px solid #f3f3f3;
|
||||||
|
border-radius: 50%;
|
||||||
在 VSCode 中打开以后,运行 npm install 安装依赖,
|
border-top: 16px solid #3498db;
|
||||||
然后再运行 npm run build 编译网页代码。
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
最后在 aardio 中点击发布生成 EXE 文件。
|
margin: auto;
|
||||||
</body>
|
-webkit-animation: spin 2s linear infinite; /* Safari */
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Safari */
|
||||||
|
@-webkit-keyframes spin {
|
||||||
|
0% { -webkit-transform: rotate(0deg); }
|
||||||
|
100% { -webkit-transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body style="margin:50px;text-align: center; ">
|
||||||
|
<div class="loader"></div>
|
||||||
|
<div style="margin-top: 50px"><p>AWin 已经启动,但是 AWin 只是一个没有灵魂的外壳,这里需要被正确替换成真正的应用~</p></div>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
Reference in New Issue
Block a user