mirror of
https://gitee.com/dromara/electron-egg.git
synced 2026-06-13 11:14:37 +08:00
Merge branch 'dev_v3' into test_v3
# Conflicts: # electron/config/config.local.js # package.json # public/dist/assets/AppSider-871239d4.js # public/dist/assets/AppSider-a7301cdd.js # public/dist/assets/AppSider-c97621a5.js # public/dist/assets/HttpServer-0912c8b7.js # public/dist/assets/HttpServer-8bfec31d.js # public/dist/assets/HttpServer-d7066a37.js # public/dist/assets/Index-034efc6a.js # public/dist/assets/Index-08001b4c.js # public/dist/assets/Index-101996e4.js # public/dist/assets/Index-16a4dd02.js # public/dist/assets/Index-18d35d1c.js # public/dist/assets/Index-29283367.js # public/dist/assets/Index-354876ed.js # public/dist/assets/Index-39077248.js # public/dist/assets/Index-3b3f7743.js # public/dist/assets/Index-413b80ae.js # public/dist/assets/Index-46b18835.js # public/dist/assets/Index-46bae197.js # public/dist/assets/Index-53ee5687.js # public/dist/assets/Index-55188015.js # public/dist/assets/Index-5e3fc052.js # public/dist/assets/Index-5e799834.js # public/dist/assets/Index-6c47115f.js # public/dist/assets/Index-7412a1d7.js # public/dist/assets/Index-7f01e8aa.js # public/dist/assets/Index-7f0cd861.js # public/dist/assets/Index-8ca1895c.js # public/dist/assets/Index-922a1229.js # public/dist/assets/Index-9563719d.js # public/dist/assets/Index-9e9d1c9b.js # public/dist/assets/Index-a717c6f6.js # public/dist/assets/Index-afb9111c.js # public/dist/assets/Index-afdf2d82.js # public/dist/assets/Index-b2727714.js # public/dist/assets/Index-bbf9da88.js # public/dist/assets/Index-c2f0b408.js # public/dist/assets/Index-c521a9f5.js # public/dist/assets/Index-c62981d9.js # public/dist/assets/Index-ce621282.js # public/dist/assets/Index-dc93a782.js # public/dist/assets/Index-e0cd22d1.js # public/dist/assets/Index-e239b54e.js # public/dist/assets/Index-e75e109f.js # public/dist/assets/Index-ea03b463.js # public/dist/assets/Index-ea299cba.js # public/dist/assets/Index-f2c2d585.js # public/dist/assets/Index-f4d16407.js # public/dist/assets/Index-f5517914.js # public/dist/assets/Index-f7288458.js # public/dist/assets/Ipc-4d92174b.js # public/dist/assets/Ipc-9b727d04.js # public/dist/assets/Ipc-d007eef7.js # public/dist/assets/Ipc-f792091f.js # public/dist/assets/SocketServer-14a819df.js # public/dist/assets/Window-73e498f2.js # public/dist/assets/index-0d31d5fa.js # public/dist/assets/index-3bb9c4c1.js # public/dist/assets/index-71914d0e.js # public/dist/assets/index-c01cca1d.js # public/dist/assets/index-c01cca1d.js.gz # public/dist/assets/store2-127baa44.js # public/dist/assets/store2-5d974a5c.js # public/dist/assets/store2-c97601fe.js # public/dist/index.html # public/dist/index.html.gz
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -15,3 +15,7 @@ build/extraResources/goapp.exe
|
||||
go/go.sum
|
||||
build/extraResources/java-app.jar
|
||||
build/extraResources/jre1.8.0_201/
|
||||
python/.venv/
|
||||
python/*.spec
|
||||
python/build/
|
||||
python/dist/
|
||||
|
||||
@@ -4,6 +4,7 @@ const is = require('ee-core/utils/is');
|
||||
const Log = require('ee-core/log');
|
||||
const Conf = require('ee-core/config');
|
||||
const CoreWindow = require('ee-core/electron/window');
|
||||
const Electron = require('ee-core/electron');
|
||||
|
||||
/**
|
||||
* 自动升级插件
|
||||
@@ -102,6 +103,10 @@ class AutoUpdaterAddon {
|
||||
info.status = status.downloaded;
|
||||
info.desc = '下载完成';
|
||||
this.sendStatusToWindow(info);
|
||||
|
||||
// 托盘插件默认会阻止窗口关闭,这里设置允许关闭窗口
|
||||
Electron.extra.closeWindow = true;
|
||||
|
||||
autoUpdater.quitAndInstall();
|
||||
// const mainWindow = CoreWindow.getMainWindow();
|
||||
// if (mainWindow) {
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
const server = require("./server");
|
||||
const { app: electronApp } = require('electron');
|
||||
const Log = require('ee-core/log');
|
||||
const Conf = require('ee-core/config');
|
||||
const GetPort = require('ee-core/utils/get-port');
|
||||
|
||||
/**
|
||||
* java server插件
|
||||
* @class
|
||||
*/
|
||||
class JavaServerAddon {
|
||||
|
||||
constructor() {
|
||||
this.cfg;
|
||||
this.javaServer;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建java服务
|
||||
*
|
||||
* @function
|
||||
* @since 1.0.0
|
||||
*/
|
||||
async createServer () {
|
||||
|
||||
this.cfg = Conf.getValue('addons.javaServer');
|
||||
await this.createJavaPorts();
|
||||
|
||||
this.javaServer = new server();
|
||||
await this.javaServer.create(this.cfg);
|
||||
|
||||
// kill
|
||||
electronApp.on("before-quit", async () => {
|
||||
Log.info("[addon:javaServer] before-quit: kill-----------");
|
||||
await this.javaServer.kill();
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* todo 检查服务是否启动
|
||||
*
|
||||
* @function
|
||||
* @since 1.0.0
|
||||
*/
|
||||
async check () {
|
||||
Log.info("进入-----检查服务是否启动------"+this.javaServer);
|
||||
if(this.javaServer == undefined){
|
||||
Log.info("[addon:javaServer:check] status-----------"+false);
|
||||
return false;
|
||||
}
|
||||
|
||||
const flag = await this.javaServer.isRun(Conf.getValue('addons.javaServer'));
|
||||
Log.info("[addon:javaServer:check] status-----------"+flag);
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建服务端口
|
||||
*
|
||||
* @function
|
||||
* @since 1.0.0
|
||||
*/
|
||||
async createJavaPorts() {
|
||||
if (!this.cfg.enable) {
|
||||
return;
|
||||
}
|
||||
const javaPort = await GetPort({ port: this.cfg.port });
|
||||
process.env.EE_JAVA_PORT = javaPort;
|
||||
this.cfg.port = javaPort;
|
||||
|
||||
// 更新config配置
|
||||
Conf.setValue('addons.javaServer', this.cfg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 杀掉进程
|
||||
*
|
||||
* @function
|
||||
* @since 1.0.0
|
||||
*/
|
||||
async kill() {
|
||||
if (!this.cfg.enable) {
|
||||
return;
|
||||
}
|
||||
await this.javaServer.kill();
|
||||
}
|
||||
}
|
||||
|
||||
JavaServerAddon.toString = () => '[class JavaServerAddon]';
|
||||
module.exports = JavaServerAddon;
|
||||
@@ -1,257 +0,0 @@
|
||||
var ChildProcess = require("child_process");
|
||||
var IS_WIN = process.platform === "win32";
|
||||
var TableParser = require("table-parser");
|
||||
/**
|
||||
* End of line.
|
||||
* Basically, the EOL should be:
|
||||
* - windows: \r\n
|
||||
* - *nix: \n
|
||||
* But i'm trying to get every possibilities covered.
|
||||
*/
|
||||
var EOL = /(\r\n)|(\n\r)|\n|\r/;
|
||||
var SystemEOL = require("os").EOL;
|
||||
|
||||
/**
|
||||
* Execute child process
|
||||
* @type {Function}
|
||||
* @param {String[]} args
|
||||
* @param {String} where
|
||||
* @param {Function} callback
|
||||
* @param {Object=null} callback.err
|
||||
* @param {Object[]} callback.stdout
|
||||
*/
|
||||
var Exec = function (args, where) {
|
||||
var spawnSync = ChildProcess.spawnSync;
|
||||
var execSync = ChildProcess.execSync;
|
||||
|
||||
// on windows, if use ChildProcess.exec(`wmic process get`), the stdout will gives you nothing
|
||||
// that's why I use `cmd` instead
|
||||
if (IS_WIN) {
|
||||
const cmd = `wmic process where ${where} get ProcessId,ParentProcessId,CommandLine \n`;
|
||||
const result = execSync(cmd);
|
||||
if (!result) {
|
||||
throw new Error(result);
|
||||
}
|
||||
|
||||
var stdout = result.toString();
|
||||
|
||||
var beginRow;
|
||||
stdout = stdout.split(EOL);
|
||||
|
||||
// Find the line index for the titles
|
||||
stdout.forEach(function (out, index) {
|
||||
if (
|
||||
out &&
|
||||
typeof beginRow == "undefined" &&
|
||||
out.indexOf("CommandLine") === 0
|
||||
) {
|
||||
beginRow = index;
|
||||
}
|
||||
});
|
||||
|
||||
// get rid of the start (copyright) and the end (current pwd)
|
||||
stdout.splice(stdout.length - 1, 1);
|
||||
stdout.splice(0, beginRow);
|
||||
|
||||
return stdout.join(SystemEOL) || false;
|
||||
} else {
|
||||
if (typeof args === "string") {
|
||||
args = args.split(/\s+/);
|
||||
}
|
||||
const result = spawnSync("ps", args);
|
||||
if (result.stderr && !!result.stderr.toString()) {
|
||||
throw new Error(result.stderr);
|
||||
} else {
|
||||
return result.stdout.toString();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Query Process: Focus on pid & cmd
|
||||
* @param query
|
||||
* @param {String|String[]} query.pid
|
||||
* @param {String} query.command RegExp String
|
||||
* @param {String} query.arguments RegExp String
|
||||
* @param {String|array} query.psargs
|
||||
* @param {String|array} query.where where 条件
|
||||
* @param {Function} callback
|
||||
* @param {Object=null} callback.err
|
||||
* @param {Object[]} callback.processList
|
||||
* @return {Object}
|
||||
*/
|
||||
|
||||
exports.lookup = function (query) {
|
||||
/**
|
||||
* add 'lx' as default ps arguments, since the default ps output in linux like "ubuntu", wont include command arguments
|
||||
*/
|
||||
var exeArgs = query.psargs || ["lx"];
|
||||
var where = query.where || 'name="javaw.exe"';
|
||||
var filter = {};
|
||||
var idList;
|
||||
|
||||
// Lookup by PID
|
||||
if (query.pid) {
|
||||
if (Array.isArray(query.pid)) {
|
||||
idList = query.pid;
|
||||
} else {
|
||||
idList = [query.pid];
|
||||
}
|
||||
|
||||
// Cast all PIDs as Strings
|
||||
idList = idList.map(function (v) {
|
||||
return String(v);
|
||||
});
|
||||
}
|
||||
|
||||
if (query.command) {
|
||||
filter["command"] = new RegExp(query.command, "i");
|
||||
}
|
||||
|
||||
if (query.arguments) {
|
||||
filter["arguments"] = new RegExp(query.arguments, "i");
|
||||
}
|
||||
|
||||
if (query.ppid) {
|
||||
filter["ppid"] = new RegExp(query.ppid);
|
||||
}
|
||||
|
||||
const result = Exec(exeArgs, where);
|
||||
|
||||
var processList = parseGrid(result);
|
||||
var resultList = [];
|
||||
|
||||
processList.forEach(function (p) {
|
||||
var flt;
|
||||
var type;
|
||||
var result = true;
|
||||
|
||||
if (idList && idList.indexOf(String(p.pid)) < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (type in filter) {
|
||||
flt = filter[type];
|
||||
result = flt.test(p[type]) ? result : false;
|
||||
}
|
||||
|
||||
if (result) {
|
||||
resultList.push(p);
|
||||
}
|
||||
});
|
||||
|
||||
return resultList;
|
||||
};
|
||||
|
||||
/**
|
||||
* Kill process
|
||||
* @param pid
|
||||
* @param {Object|String} signal
|
||||
* @param {String} signal.signal
|
||||
* @param {number} signal.timeout
|
||||
* @param next
|
||||
*/
|
||||
|
||||
exports.kill = function (pid, signal, next) {
|
||||
//opts are optional
|
||||
if (arguments.length == 2 && typeof signal == "function") {
|
||||
next = signal;
|
||||
signal = undefined;
|
||||
}
|
||||
|
||||
var checkTimeoutSeconds = (signal && signal.timeout) || 30;
|
||||
|
||||
if (typeof signal === "object") {
|
||||
signal = signal.signal;
|
||||
}
|
||||
|
||||
try {
|
||||
process.kill(pid, signal);
|
||||
} catch (e) {
|
||||
return next && next(e);
|
||||
}
|
||||
|
||||
var checkConfident = 0;
|
||||
var checkTimeoutTimer = null;
|
||||
var checkIsTimeout = false;
|
||||
|
||||
function checkKilled(finishCallback) {
|
||||
exports.lookup({ pid: pid }, function (err, list) {
|
||||
if (checkIsTimeout) return;
|
||||
|
||||
if (err) {
|
||||
clearTimeout(checkTimeoutTimer);
|
||||
finishCallback && finishCallback(err);
|
||||
} else if (list.length > 0) {
|
||||
checkConfident = checkConfident - 1 || 0;
|
||||
checkKilled(finishCallback);
|
||||
} else {
|
||||
checkConfident++;
|
||||
if (checkConfident === 5) {
|
||||
clearTimeout(checkTimeoutTimer);
|
||||
finishCallback && finishCallback();
|
||||
} else {
|
||||
checkKilled(finishCallback);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
next && checkKilled(next);
|
||||
|
||||
checkTimeoutTimer =
|
||||
next &&
|
||||
setTimeout(function () {
|
||||
checkIsTimeout = true;
|
||||
next(new Error("Kill process timeout"));
|
||||
}, checkTimeoutSeconds * 1000);
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse the stdout into readable object.
|
||||
* @param {String} output
|
||||
*/
|
||||
|
||||
function parseGrid(output) {
|
||||
if (!output) {
|
||||
return [];
|
||||
}
|
||||
return formatOutput(TableParser.parse(output));
|
||||
}
|
||||
|
||||
/**
|
||||
* format the structure, extract pid, command, arguments, ppid
|
||||
* @param data
|
||||
* @return {Array}
|
||||
*/
|
||||
|
||||
function formatOutput(data) {
|
||||
var formatedData = [];
|
||||
data.forEach(function (d) {
|
||||
var pid =
|
||||
(d.PID && d.PID[0]) || (d.ProcessId && d.ProcessId[0]) || undefined;
|
||||
var cmd = d.CMD || d.CommandLine || d.COMMAND || undefined;
|
||||
var ppid =
|
||||
(d.PPID && d.PPID[0]) ||
|
||||
(d.ParentProcessId && d.ParentProcessId[0]) ||
|
||||
undefined;
|
||||
|
||||
if (pid && cmd) {
|
||||
var command = cmd[0];
|
||||
var args = "";
|
||||
|
||||
if (cmd.length > 1) {
|
||||
args = cmd.slice(1);
|
||||
}
|
||||
|
||||
formatedData.push({
|
||||
pid: pid,
|
||||
command: command,
|
||||
arguments: args,
|
||||
ppid: ppid,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return formatedData;
|
||||
}
|
||||
@@ -1,126 +0,0 @@
|
||||
const _ = require("lodash");
|
||||
const assert = require("assert");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { exec, execSync } = require("child_process");
|
||||
const ps = require("./ps");
|
||||
const Log = require('ee-core/log');
|
||||
const is = require('ee-core/utils/is');
|
||||
const UtilsPs = require('ee-core/ps');
|
||||
|
||||
/**
|
||||
* java server
|
||||
*/
|
||||
class JavaServer {
|
||||
constructor () {
|
||||
this.options;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建服务
|
||||
*/
|
||||
async create (cfg) {
|
||||
this.options = cfg;
|
||||
if (this.options.enable == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
let port = process.env.EE_JAVA_PORT ? parseInt(process.env.EE_JAVA_PORT) : parseInt(this.options.port);
|
||||
assert(typeof port === "number", "java port required, and must be a number");
|
||||
|
||||
try {
|
||||
const jarName = this.options.name;
|
||||
let softwarePath = path.join(UtilsPs.getExtraResourcesDir(), jarName);
|
||||
let javaOptStr = this.options.opt;
|
||||
let jrePath = path.join(UtilsPs.getExtraResourcesDir(), this.options.jreVersion);
|
||||
let cmdStr = '';
|
||||
|
||||
Log.info("[addon:javaServer] jar file path:", softwarePath);
|
||||
if (!fs.existsSync(softwarePath)) throw new Error('java program does not exist');
|
||||
|
||||
// 替换opt参数
|
||||
javaOptStr = _.replace(javaOptStr, "${port}", port);
|
||||
javaOptStr = _.replace(javaOptStr, "${path}", UtilsPs.getLogDir());
|
||||
|
||||
if (is.windows()) {
|
||||
jrePath = path.join(jrePath, "bin", "javaw.exe");
|
||||
cmdStr = `start ${jrePath} -jar ${javaOptStr} ${softwarePath}`;
|
||||
} else if (is.macOS()) {
|
||||
// 如果提示:不受信任,请执行: sudo spctl --master-disable
|
||||
jrePath = path.join(jrePath, "Contents", "Home", "bin", "java");
|
||||
//cmdStr = `nohup ${jrePath} -jar ${javaOptStr} ${softwarePath} >/dev/null 2>&1 &`;
|
||||
cmdStr = `${jrePath} -jar ${javaOptStr} ${softwarePath}`;
|
||||
} else {
|
||||
// todo linux
|
||||
}
|
||||
|
||||
Log.info("[addon:javaServer] cmdStr:", cmdStr);
|
||||
exec(cmdStr);
|
||||
|
||||
} catch (err) {
|
||||
Log.error('[addon:javaServer] throw error:', err);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭服务
|
||||
*/
|
||||
async kill () {
|
||||
const jarName = this.options.name;
|
||||
if (is.windows()) {
|
||||
const resultList = ps.lookup({
|
||||
command: "java",
|
||||
where: 'caption="javaw.exe"',
|
||||
arguments: jarName,
|
||||
});
|
||||
|
||||
//Log.info("[addon:javaServer] resultList:", resultList);
|
||||
resultList.forEach((item) => {
|
||||
ps.kill(item.pid, "SIGKILL", (err) => {
|
||||
if (err) {
|
||||
throw new Error(err);
|
||||
}
|
||||
Log.info("[addon:javaServer] java程序退出 pid: ", item.pid);
|
||||
});
|
||||
});
|
||||
|
||||
// const cmd = `for /f "tokens=1-5" %i in ('netstat -ano ^| findstr ":${port}"') do taskkill /F /T /PID %m`;
|
||||
// const a = await execSync(cmd, {encoding: 'utf-8'});
|
||||
// Log.info("[javaServer] kill:", a);
|
||||
} else if (is.macOS()) {
|
||||
const cmd = `ps -ef | grep java | grep ${jarName} | grep -v grep | awk '{print $2}' | xargs kill -9`;
|
||||
const result = await execSync(cmd);
|
||||
Log.info("[addon:javaServer] kill:", result != null ? result.toString(): '');
|
||||
} else {
|
||||
// todo linux
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务是否运行中
|
||||
*/
|
||||
async isRun(cfg){
|
||||
const jarName = cfg.name;
|
||||
if (is.windows()) {
|
||||
const resultList = ps.lookup({
|
||||
command: "java",
|
||||
where: 'caption="javaw.exe"',
|
||||
arguments: jarName,
|
||||
});
|
||||
|
||||
Log.info("[addon:javaServer] resultList:", resultList);
|
||||
return resultList.length>0;
|
||||
} else if (is.macOS()) {
|
||||
const cmd = `ps -ef | grep java | grep ${jarName} | grep -v grep | awk '{print $2}' `;
|
||||
Log.info("[addon:javaServer:isRun] cmdStr:", cmd);
|
||||
const result = execSync(cmd);
|
||||
Log.info('[addon:javaServer:isRun] result:', result.toString());
|
||||
//不等于空说明正在运行
|
||||
return result.toString()!==""
|
||||
} else {
|
||||
// todo linux
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = JavaServer;
|
||||
@@ -62,6 +62,10 @@ class TrayAddon {
|
||||
this.tray.setToolTip(cfg.title);
|
||||
const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);
|
||||
this.tray.setContextMenu(contextMenu);
|
||||
// 左键双击的时候能够显示主窗口
|
||||
this.tray.on('double-click', () => {
|
||||
mainWindow.show()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ module.exports = {
|
||||
protocol: 'http://',
|
||||
hostname: 'localhost',
|
||||
port: 8080,
|
||||
indexPath: 'index.html'
|
||||
indexPath: 'index.html',
|
||||
},
|
||||
electron: {
|
||||
directory: './',
|
||||
@@ -35,21 +35,31 @@ module.exports = {
|
||||
cmd: 'npm',
|
||||
args: ['run', 'build'],
|
||||
},
|
||||
go_build_w: {
|
||||
go_w: {
|
||||
directory: './go',
|
||||
cmd: 'go',
|
||||
args: ['build', '-o=../build/extraResources/goapp.exe'],
|
||||
},
|
||||
go_build_m: {
|
||||
go_m: {
|
||||
directory: './go',
|
||||
cmd: 'go',
|
||||
args: ['build', '-o=../build/extraResources/goapp'],
|
||||
},
|
||||
go_build_l: {
|
||||
go_l: {
|
||||
directory: './go',
|
||||
cmd: 'go',
|
||||
args: ['build', '-o=../build/extraResources/goapp'],
|
||||
}
|
||||
},
|
||||
python_w: {
|
||||
directory: './python',
|
||||
cmd: 'pyinstaller',
|
||||
args: ['-n=pyapp', '-F', './main.py'],
|
||||
},
|
||||
python_m: {
|
||||
directory: './python',
|
||||
cmd: 'pyinstaller',
|
||||
args: ['-n=pyapp', '-F', './main.py'],
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -76,7 +86,11 @@ module.exports = {
|
||||
go_images: {
|
||||
dist: './public/images',
|
||||
target: './go/public/images'
|
||||
}
|
||||
},
|
||||
python_dist: {
|
||||
dist: './python/dist',
|
||||
target: './build/extraResources/py'
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -125,5 +139,11 @@ module.exports = {
|
||||
cmd: 'npm',
|
||||
args: ['-v'],
|
||||
},
|
||||
python: {
|
||||
directory: './python',
|
||||
cmd: 'python',
|
||||
args: ['./main.py', '--port=7074'],
|
||||
stdio: "inherit", // ignore
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -119,7 +119,7 @@ module.exports = (appInfo) => {
|
||||
/**
|
||||
* Cross-language service
|
||||
* 跨语言服务
|
||||
* 例如:执行go的二进制程序
|
||||
* 例如:执行go的二进制程序,默认目录为 ./extraResources/
|
||||
*/
|
||||
config.cross = {
|
||||
go: {
|
||||
@@ -128,6 +128,14 @@ module.exports = (appInfo) => {
|
||||
args: ['--port=7073'],
|
||||
appExit: true,
|
||||
},
|
||||
python: {
|
||||
enable: false,
|
||||
name: 'pyapp',
|
||||
cmd: './py/pyapp',
|
||||
directory: './py',
|
||||
args: ['--port=7074'],
|
||||
appExit: true,
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -41,7 +41,16 @@ module.exports = (appInfo) => {
|
||||
directory: './go',
|
||||
args: ['run', './main.go', '--env=dev','--basedir=../', '--port=7073'],
|
||||
appExit: true,
|
||||
}
|
||||
},
|
||||
python: {
|
||||
enable: false,
|
||||
name: 'pyapp',
|
||||
cmd: 'python',
|
||||
directory: './python',
|
||||
args: ['./main.py', '--port=7074'],
|
||||
stdio: "inherit",
|
||||
appExit: true,
|
||||
},
|
||||
};
|
||||
|
||||
return {
|
||||
|
||||
@@ -67,6 +67,8 @@ class CrossController extends Controller {
|
||||
Services.get('cross').createGoServer();
|
||||
} else if (program == 'java') {
|
||||
Services.get('cross').createJavaServer();
|
||||
} else if (program == 'python') {
|
||||
Services.get('cross').createPythonServer();
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
** preload为预加载模块,该文件将会在程序启动时加载 **
|
||||
*************************************************/
|
||||
const Addon = require('ee-core/addon');
|
||||
const Services = require('ee-core/services');
|
||||
|
||||
/**
|
||||
* 预加载模块入口
|
||||
@@ -13,4 +14,6 @@ module.exports = async () => {
|
||||
Addon.get('security').create();
|
||||
Addon.get('awaken').create();
|
||||
Addon.get('autoUpdater').create();
|
||||
|
||||
//Services.get('cross').createGoServer();
|
||||
}
|
||||
@@ -30,12 +30,15 @@ class CrossService extends Service {
|
||||
const serviceName = "go";
|
||||
const opt = {
|
||||
name: 'goapp',
|
||||
appExit: false,
|
||||
cmd: path.join(Ps.getExtraResourcesDir(), 'goapp'),
|
||||
directory: Ps.getExtraResourcesDir(),
|
||||
args: ['--port=7073'],
|
||||
appExit: true,
|
||||
}
|
||||
const entity = await Cross.run(serviceName, opt);
|
||||
Log.info('server name:', entity.name);
|
||||
Log.info('server config:', entity.config);
|
||||
Log.info('server url:', Cross.getUrl(entity.name));
|
||||
Log.info('server url:', entity.getUrl());
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -68,6 +71,33 @@ class CrossService extends Service {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* create python service
|
||||
* In the default configuration, services can be started with applications.
|
||||
* Developers can turn off the configuration and create it manually.
|
||||
*/
|
||||
async createPythonServer() {
|
||||
// method 1: Use the default Settings
|
||||
//const entity = await Cross.run(serviceName);
|
||||
|
||||
// method 2: Use custom configuration
|
||||
const serviceName = "python";
|
||||
const opt = {
|
||||
name: 'pyapp',
|
||||
cmd: path.join(Ps.getExtraResourcesDir(), 'py', 'pyapp'),
|
||||
directory: path.join(Ps.getExtraResourcesDir(), 'py'),
|
||||
args: ['--port=7074'],
|
||||
windowsExtname: true,
|
||||
appExit: true,
|
||||
}
|
||||
const entity = await Cross.run(serviceName, opt);
|
||||
Log.info('server name:', entity.name);
|
||||
Log.info('server config:', entity.config);
|
||||
Log.info('server url:', entity.getUrl());
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
CrossService.toString = () => '[class CrossService]';
|
||||
|
||||
@@ -171,7 +171,12 @@ const constantRouterMap = [
|
||||
path: '/cross/java/index',
|
||||
name: 'CrossJavaIndex',
|
||||
component: () => import('@/views/cross/java/Index.vue')
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/cross/python/index',
|
||||
name: 'CrossPythonIndex',
|
||||
component: () => import('@/views/cross/python/Index.vue')
|
||||
},
|
||||
]
|
||||
},
|
||||
]
|
||||
|
||||
@@ -142,6 +142,12 @@ export default {
|
||||
title: 'java服务',
|
||||
pageName: 'CrossJavaIndex',
|
||||
params: {}
|
||||
},
|
||||
},
|
||||
'menu_120' : {
|
||||
icon: 'profile',
|
||||
title: 'python服务',
|
||||
pageName: 'CrossPythonIndex',
|
||||
params: {}
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
const cfg = {
|
||||
method: 'get',
|
||||
url: testApi,
|
||||
params: { id: '1111111'},
|
||||
params: { id: '111'},
|
||||
timeout: 1000,
|
||||
}
|
||||
axios(cfg).then(res => {
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</div>
|
||||
<div class="one-block-2">
|
||||
<a-space>
|
||||
<a-button @click="create()"> 再启动一个 </a-button>
|
||||
<a-button @click="create()"> 启动 </a-button>
|
||||
<a-button @click="killAll()"> kill所有 </a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
|
||||
117
frontend/src/views/cross/python/Index.vue
Normal file
117
frontend/src/views/cross/python/Index.vue
Normal file
@@ -0,0 +1,117 @@
|
||||
<template>
|
||||
<div id="app-cross-python">
|
||||
<div class="one-block-1">
|
||||
<span>
|
||||
1. 基础控制
|
||||
</span>
|
||||
</div>
|
||||
<div class="one-block-2">
|
||||
<a-space>
|
||||
<a-button @click="create()"> 启动 </a-button>
|
||||
<a-button @click="getUrl()"> 获取地址 </a-button>
|
||||
<a-button @click="kill()"> kill </a-button>
|
||||
<a-button @click="info()"> test </a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
<div class="one-block-1">
|
||||
<span>
|
||||
2. 发送http请求
|
||||
</span>
|
||||
</div>
|
||||
<div class="one-block-2">
|
||||
<a-space>
|
||||
<a-button @click="request(1)"> 前端发送 </a-button>
|
||||
<a-button @click="request(2)"> 主进程发送 </a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
<div class="one-block-1">
|
||||
<span>
|
||||
3. 多个服务
|
||||
</span>
|
||||
</div>
|
||||
<div class="one-block-2">
|
||||
<a-space>
|
||||
<a-button @click="create()"> 启动 </a-button>
|
||||
<a-button @click="killAll()"> kill all </a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { ipcApiRoute } from '@/api/main';
|
||||
import { ipc } from '@/utils/ipcRenderer';
|
||||
import axios from 'axios';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
type: 1,
|
||||
serverUrl: ''
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
info() {
|
||||
ipc.invoke(ipcApiRoute.crossInfo, {}).then(res => {
|
||||
console.log('res:', res);
|
||||
})
|
||||
},
|
||||
getUrl() {
|
||||
ipc.invoke(ipcApiRoute.getCrossUrl, {name: 'pyapp'}).then(url => {
|
||||
this.serverUrl = url;
|
||||
this.$message.info(`服务地址: ${url}`);
|
||||
})
|
||||
},
|
||||
kill() {
|
||||
// name参数是 进程对象上的name,这里仅作为参照
|
||||
ipc.invoke(ipcApiRoute.killCrossServer, {type: 'one', name: 'pyapp'})
|
||||
},
|
||||
killAll() {
|
||||
ipc.invoke(ipcApiRoute.killCrossServer, {type: 'all', name: 'pyapp'})
|
||||
},
|
||||
create() {
|
||||
ipc.invoke(ipcApiRoute.createCrossServer, { program: 'python' })
|
||||
},
|
||||
request(type) {
|
||||
if (type == 1 && this.serverUrl == "") {
|
||||
this.$message.info("请先获取服务地址");
|
||||
return
|
||||
}
|
||||
if (type == 1) {
|
||||
const testApi = this.serverUrl + '/api/hello';
|
||||
const cfg = {
|
||||
method: 'get',
|
||||
url: testApi,
|
||||
params: { id: '111'},
|
||||
timeout: 1000,
|
||||
}
|
||||
axios(cfg).then(res => {
|
||||
console.log('res:', res);
|
||||
const data = res.data || null;
|
||||
this.$message.info(`服务返回: ${JSON.stringify(data)}`);
|
||||
})
|
||||
} else {
|
||||
ipc.invoke(ipcApiRoute.requestApi, {name: 'pyapp', urlPath: '/api/hello'}).then(res => {
|
||||
console.log('res:', res);
|
||||
const data = res || null;
|
||||
this.$message.info(`服务返回: ${JSON.stringify(data)}`);
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
#app-cross-python {
|
||||
padding: 0px 10px;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
.one-block-1 {
|
||||
font-size: 16px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
.one-block-2 {
|
||||
padding-top: 10px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
13
package.json
13
package.json
@@ -1,16 +1,20 @@
|
||||
{
|
||||
"name": "ee",
|
||||
"version": "3.10.0",
|
||||
"version": "3.11.0",
|
||||
"description": "A fast, desktop software development framework",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"dev": "ee-bin dev",
|
||||
"dev-frontend": "ee-bin dev --serve=frontend",
|
||||
"dev-electron": "ee-bin dev --serve=electron",
|
||||
"dev-go": "ee-bin dev --serve=go",
|
||||
"dev-python": "ee-bin exec --cmds=python",
|
||||
"build-frontend": "ee-bin build --cmds=frontend && ee-bin move --flag=frontend_dist",
|
||||
"build-go-w": "ee-bin move --flag=go_static,go_config,go_package,go_images && ee-bin build --cmds=go_build_w",
|
||||
"build-go-m": "ee-bin move --flag=go_static,go_config,go_package,go_images && ee-bin build --cmds=go_build_m",
|
||||
"build-go-l": "ee-bin move --flag=go_static,go_config,go_package,go_images && ee-bin build --cmds=go_build_l",
|
||||
"build-go-w": "ee-bin build --cmds=go_w",
|
||||
"build-go-m": "ee-bin build --cmds=go_m",
|
||||
"build-go-l": "ee-bin build --cmds=go_l",
|
||||
"build-python-w": "ee-bin build --cmds=python_w && ee-bin move --flag=python_dist",
|
||||
"build-python-m": "ee-bin build --cmds=python_m && ee-bin move --flag=python_dist",
|
||||
"start": "ee-bin start",
|
||||
"move": "ee-bin move --flag=go_static,go_config,go_package,go_images",
|
||||
"rd": "ee-bin move --flag=frontend_dist",
|
||||
@@ -24,6 +28,7 @@
|
||||
"build-w-32": "electron-builder --config=./electron/config/builder.json -w=nsis --ia32",
|
||||
"build-w-64": "electron-builder --config=./electron/config/builder.json -w=nsis --x64",
|
||||
"build-w-arm64": "electron-builder --config=./electron/config/builder.json -w=nsis --arm64",
|
||||
"build-we": "electron-builder --config=./electron/config/builder.json -w=portable --x64",
|
||||
"build-wz": "electron-builder --config=./electron/config/builder.json -w=7z --x64",
|
||||
"build-wz-32": "electron-builder --config=./electron/config/builder.json -w=7z --ia32",
|
||||
"build-wz-64": "electron-builder --config=./electron/config/builder.json -w=7z --x64",
|
||||
|
||||
BIN
public/dist/assets/AppSider-871239d4.js.gz
vendored
Normal file
BIN
public/dist/assets/AppSider-871239d4.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/AppSider-c97621a5.js
vendored
1
public/dist/assets/AppSider-c97621a5.js
vendored
@@ -1 +0,0 @@
|
||||
import{_ as e,r as a,o as n,c as t,w as o,a as s,b as l,d as i,F as u,e as c,t as r,p as m,f as d,g as p}from"./index-f283ba7d.js";const g=""+new URL("logo-abcaf0c2.png",import.meta.url).href,f={name:"AppSider",data:()=>({collapsed:!0,current:"menu_1",menu:{menu_1:{icon:"icon-fengche",title:"框架",pageName:"Framework",params:{}},menu_2:{icon:"icon-niudan",title:"系统",pageName:"Os",params:{}},menu_3:{icon:"icon-xiangji",title:"硬件",pageName:"Hardware",params:{}},menu_4:{icon:"icon-liuxing",title:"特效",pageName:"Effect",params:{}},menu_5:{icon:"icon-gouwu",title:"cross",pageName:"Cross",params:{}}}}),created(){},mounted(){this.menuHandle()},methods:{menuHandle(e){console.log("sider menu e:",e),this.current=e?e.key:this.current,console.log("sider menu current:",this.current);const a=this.menu[this.current];console.log("[home] load linkInfo:",a),this.$router.push({name:a.pageName,params:a.params})},changeMenu(e){console.log("sider menu e:",e)}}},h=(e=>(m("data-v-a1fe120d"),e=e(),d(),e))((()=>p("div",{class:"logo"},[p("img",{class:"pic-logo",src:g})],-1)));const _=e(f,[["render",function(e,m,d,p,g,f){const _=a("icon-font"),y=a("a-menu-item"),w=a("a-menu"),k=a("a-layout-sider"),N=a("router-view"),v=a("a-layout-content"),x=a("a-layout");return n(),t(x,{id:"app-layout-sider"},{default:o((()=>[s(k,{modelValue:g.collapsed,"onUpdate:modelValue":m[0]||(m[0]=e=>g.collapsed=e),theme:"light",class:"layout-sider",width:"100"},{default:o((()=>[h,s(w,{class:"menu-item",theme:"light",mode:"inline",selectedKeys:[g.current],onClick:f.menuHandle},{default:o((()=>[(n(!0),l(u,null,i(g.menu,((e,a)=>(n(),t(y,{key:a},{default:o((()=>[s(_,{type:e.icon},null,8,["type"]),c(" "+r(e.title),1)])),_:2},1024)))),128))])),_:1},8,["selectedKeys","onClick"])])),_:1},8,["modelValue"]),s(x,null,{default:o((()=>[s(v,{class:"layout-content"},{default:o((()=>[s(N)])),_:1})])),_:1})])),_:1})}],["__scopeId","data-v-a1fe120d"]]);export{_ as default};
|
||||
1
public/dist/assets/HttpServer-8bfec31d.js
vendored
1
public/dist/assets/HttpServer-8bfec31d.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as t}from"./main-3bb0017c.js";import{i as e}from"./ipcRenderer-5e19eaee.js";import{a as s}from"./index-0d31d5fa.js";import{s as o}from"./store2-c97601fe.js";import{_ as r,r as n,o as a,b as i,g as l,t as c,e as u,a as d,w as p,p as h,f as m}from"./index-f283ba7d.js";const v={data:()=>({currentStatus:"关闭",servicAddress:"无"}),mounted(){this.init()},methods:{init(){e.invoke(t.checkHttpServer,{}).then((t=>{t.enable&&(this.currentStatus="开启",this.servicAddress=t.server,o.set("httpServiceConfig",t))}))},sendRequest(e){"关闭"!=this.currentStatus?this.requestHttp(t.doHttpRequest,{id:e}).then((t=>{})):this.$message.error("http服务未开启")},requestHttp(t,e){const r=o.get("httpServiceConfig").server||"http://localhost:7071";let n=t.split(".").join("/");return n=r+"/"+n,console.log("url:",n),s({url:n,method:"post",data:e,timeout:6e4})},backendRequest(){console.log("GO_URL:","http://www.test.com");s({baseURL:"http://www.test.com",method:"get",url:"/hello",timeout:6e4}).then((t=>{console.log("res:",t);const e=t.data||null;this.$message.info(`go服务返回: ${e}`)}))}}},f=t=>(h("data-v-3508e997"),t=t(),m(),t),b={id:"app-base-httpserver"},g=f((()=>l("div",{class:"one-block-1"},[l("span",null," 1. 使用http与主进程通信 ")],-1))),k={class:"one-block-2"},w=f((()=>l("div",{class:"one-block-1"},[l("span",null," 2. 使用http与服务端通信 ")],-1))),R={class:"one-block-2"};const q=r(v,[["render",function(t,e,s,o,r,h){const m=n("a-button");return a(),i("div",b,[g,l("div",k,[l("p",null,"* 状态:"+c(r.currentStatus),1),l("p",null,"* 地址:"+c(r.servicAddress),1),l("p",null,[u("* 发送请求: "),d(m,{onClick:e[0]||(e[0]=t=>h.sendRequest("pictures"))},{default:p((()=>[u(" 打开【我的图片】 ")])),_:1})])]),w,l("div",R,[l("p",null,[d(m,{onClick:e[1]||(e[1]=t=>h.backendRequest())},{default:p((()=>[u(" 发送请求 ")])),_:1}),u(" (请自行创建服务) ")])])])}],["__scopeId","data-v-3508e997"]]);export{q as default};
|
||||
BIN
public/dist/assets/HttpServer-d7066a37.js.gz
vendored
Normal file
BIN
public/dist/assets/HttpServer-d7066a37.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-08001b4c.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-08001b4c.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-096d4d09.css
vendored
Normal file
1
public/dist/assets/Index-096d4d09.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
#app-cross-java[data-v-5d226b2a]{padding:0 10px;text-align:left;width:100%}#app-cross-java .one-block-1[data-v-5d226b2a]{font-size:16px;padding-top:10px}#app-cross-java .one-block-2[data-v-5d226b2a]{padding-top:10px}
|
||||
1
public/dist/assets/Index-101996e4.js
vendored
1
public/dist/assets/Index-101996e4.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as t}from"./main-3bb0017c.js";import{i}from"./ipcRenderer-5e19eaee.js";import{_ as e,h as s,r as n,o,b as a,g as l,a as d,w as c,e as f,p as r,f as p}from"./index-f283ba7d.js";const u={data:()=>({views:[{type:"main",title:"通知标题",subtitle:"副标题",body:"这是通知内容-默认",silent:!0},{type:"main",title:"提示音",subtitle:"副标题-提示音",body:"这是通知内容-提示音",silent:!1},{type:"main",title:"点击通知事件",subtitle:"副标题-点击通知事件",body:"这是通知内容-点击通知事件",clickEvent:!0},{type:"main",title:"关闭通知事件",subtitle:"副标题-关闭通知事件",body:"这是通知内容-点击通知事件",closeEvent:!0}]}),mounted(){this.init()},methods:{init(){i.removeAllListeners(t.sendNotification),i.on(t.sendNotification,((t,i)=>{"[object Object]"==Object.prototype.toString.call(i)&&this.$message.info(i.msg)}))},sendNotification(e){i.send(t.sendNotification,s(this.views[e]))}}},b={id:"app-base-notification"},m=(t=>(r("data-v-6555f14e"),t=t(),p(),t))((()=>l("div",{class:"one-block-1"},[l("span",null," 1. 弹出桌面通知 ")],-1))),v={class:"one-block-2"};const y=e(u,[["render",function(t,i,e,s,r,p){const u=n("a-button"),y=n("a-space");return o(),a("div",b,[m,l("div",v,[d(y,null,{default:c((()=>[d(u,{onClick:i[0]||(i[0]=t=>p.sendNotification(0))},{default:c((()=>[f("默认")])),_:1}),d(u,{onClick:i[1]||(i[1]=t=>p.sendNotification(1))},{default:c((()=>[f("发出提示音")])),_:1}),d(u,{onClick:i[2]||(i[2]=t=>p.sendNotification(2))},{default:c((()=>[f("点击通知触发事件")])),_:1}),d(u,{onClick:i[3]||(i[3]=t=>p.sendNotification(3))},{default:c((()=>[f("关闭通知触发事件")])),_:1})])),_:1})])])}],["__scopeId","data-v-6555f14e"]]);export{y as default};
|
||||
BIN
public/dist/assets/Index-16a4dd02.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-16a4dd02.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-18d35d1c.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-18d35d1c.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-29283367.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-29283367.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-354876ed.js
vendored
1
public/dist/assets/Index-354876ed.js
vendored
File diff suppressed because one or more lines are too long
1
public/dist/assets/Index-36bbde3b.css
vendored
Normal file
1
public/dist/assets/Index-36bbde3b.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
#app-cross-go[data-v-e1875343]{padding:0 10px;text-align:left;width:100%}#app-cross-go .one-block-1[data-v-e1875343]{font-size:16px;padding-top:10px}#app-cross-go .one-block-2[data-v-e1875343]{padding-top:10px}
|
||||
1
public/dist/assets/Index-39077248.js
vendored
1
public/dist/assets/Index-39077248.js
vendored
File diff suppressed because one or more lines are too long
BIN
public/dist/assets/Index-3b3f7743.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-3b3f7743.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-413b80ae.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-413b80ae.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-46bae197.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-46bae197.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-55188015.js
vendored
1
public/dist/assets/Index-55188015.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as a}from"./main-3bb0017c.js";import{i as e}from"./ipcRenderer-5e19eaee.js";import{_ as s,r as t,o as n,b as c,g as l,a as o,w as d,e as i,F as r,d as u,p as f,f as p,c as b,t as k}from"./index-f283ba7d.js";const m={data:()=>({data:[]}),methods:{getScreen(s){e.invoke(a.getScreen,s).then((a=>{this.data=a}))}}},v=a=>(f("data-v-5c2facb0"),a=a(),p(),a),_={id:"app-base-screen"},g=v((()=>l("div",{class:"one-block-1"},[l("span",null," 1. 屏幕信息 ")],-1))),S={class:"one-block-2"},h=v((()=>l("div",{class:"one-block-1"},[l("span",null," 结果: ")],-1))),j={class:"one-block-2"};const C=s(m,[["render",function(a,e,s,f,p,m){const v=t("a-button"),C=t("a-space"),x=t("a-descriptions-item"),w=t("a-descriptions");return n(),c("div",_,[g,l("div",S,[o(C,null,{default:d((()=>[o(v,{onClick:e[0]||(e[0]=a=>m.getScreen(0))},{default:d((()=>[i("获取当前鼠标位置")])),_:1}),o(v,{onClick:e[1]||(e[1]=a=>m.getScreen(1))},{default:d((()=>[i("获取主屏幕")])),_:1}),o(v,{onClick:e[2]||(e[2]=a=>m.getScreen(2))},{default:d((()=>[i("获取所有屏幕")])),_:1})])),_:1})]),h,l("div",j,[o(w,{title:""},{default:d((()=>[(n(!0),c(r,null,u(p.data,((a,e)=>(n(),b(x,{key:e,label:a.title},{default:d((()=>[i(k(a.desc),1)])),_:2},1032,["label"])))),128))])),_:1})])])}],["__scopeId","data-v-5c2facb0"]]);export{C as default};
|
||||
BIN
public/dist/assets/Index-5e3fc052.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-5e3fc052.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-5e799834.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-5e799834.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-6c47115f.js
vendored
1
public/dist/assets/Index-6c47115f.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as e}from"./main-3bb0017c.js";import{i as s}from"./ipcRenderer-5e19eaee.js";import{s as a}from"./store2-c97601fe.js";import{_ as o,r as t,o as l,b as i,g as n,a as d,w as c,e as r,p as u,f as p}from"./index-f283ba7d.js";const f=[{content:"【下载】目录",id:"downloads"},{content:"【图片】目录",id:"pictures"},{content:"【文档】目录",id:"documents"},{content:"【音乐】目录",id:"music"}],h={data:()=>({file_list:f,action_url:"",image_info:[],num:0,servicAddress:"",dir_path:"D:\\www\\ee"}),mounted(){this.getHost()},methods:{getHost(){s.invoke(e.checkHttpServer,{}).then((s=>{if(s.enable){this.servicAddress=s.server,a.set("httpServiceConfig",s);const o=s.server||"http://localhost:7071";let t=e.uploadFile.split(".").join("/");this.action_url=o+"/"+t}}))},openDirectry(a){s.invoke(e.openDirectory,{id:a}).then((e=>{}))},selectDir(){s.invoke(e.selectFolder,"").then((e=>{this.dir_path=e,this.$message.info(e)}))},messageShow(){s.invoke(e.messageShow,"").then((e=>{this.$message.info(e)}))},messageShowConfirm(){s.invoke(e.messageShowConfirm,"").then((e=>{this.$message.info(e)}))},handleFileChange(e){if(console.log("handleFileChange-----"),""==this.action_url)return void this.$message.error("http服务未开启");const s=e.file.status;if("uploading"!==s&&console.log(e.file),"done"===s){const s=e.file.response;if(console.log("uploadRes:",s),"success"!==s.code)return this.$message.error(`file upload failed ${s.code} .`),!1;this.num++;const a=s.data;a.id=this.num,a.imageUrlText="image url",this.image_info.push(a),this.$message.success(`${e.file.name} file uploaded successfully.`)}else"error"===s&&this.$message.error(`${e.file.name} file upload failed.`)}}},m=e=>(u("data-v-d30dccef"),e=e(),p(),e),g={id:"app-base-file"},_=m((()=>n("div",{class:"one-block-1"},[n("span",null," 1. 系统原生对话框 ")],-1))),v={class:"one-block-2"},k=m((()=>n("div",{class:"one-block-1"},[n("span",null," 2. 选择保存目录 ")],-1))),C={class:"one-block-2"},b=m((()=>n("div",{class:"one-block-1"},[n("span",null," 3. 打开文件夹 ")],-1))),w={class:"one-block-2"},$=m((()=>n("div",{class:"one-block-1"},[n("span",null," 4. 上传文件到图床 ")],-1))),S={class:"one-block-2"},D=m((()=>n("p",{class:"ant-upload-drag-icon"},null,-1))),j=m((()=>n("p",{class:"ant-upload-text"}," 点击 或 拖拽文件到这里 ",-1))),x=m((()=>n("p",{class:"ant-upload-hint"}," 注意:请使用您自己的图床token ",-1))),y=m((()=>n("div",{class:"footer"},null,-1)));const F=o(h,[["render",function(e,s,a,o,u,p){const f=t("a-button"),h=t("a-space"),m=t("a-input"),F=t("a-col"),H=t("a-row"),V=t("a-card"),A=t("a-list-item"),I=t("a-list"),R=t("a-upload-dragger");return l(),i("div",g,[_,n("div",v,[d(h,null,{default:c((()=>[d(f,{onClick:s[0]||(s[0]=e=>p.messageShow())},{default:c((()=>[r("消息提示(ipc)")])),_:1}),d(f,{onClick:s[1]||(s[1]=e=>p.messageShowConfirm())},{default:c((()=>[r("消息提示与确认(ipc)")])),_:1})])),_:1})]),k,n("div",C,[d(H,null,{default:c((()=>[d(F,{span:12},{default:c((()=>[d(m,{modelValue:u.dir_path,"onUpdate:modelValue":s[2]||(s[2]=e=>u.dir_path=e),value:u.dir_path,"addon-before":"保存目录"},null,8,["modelValue","value"])])),_:1}),d(F,{span:12},{default:c((()=>[d(f,{onClick:p.selectDir},{default:c((()=>[r(" 修改目录 ")])),_:1},8,["onClick"])])),_:1})])),_:1})]),b,n("div",w,[d(I,{grid:{gutter:16,column:4},"data-source":u.file_list},{renderItem:c((({item:e})=>[d(A,{onClick:s=>p.openDirectry(e.id)},{default:c((()=>[d(V,{title:e.content},{default:c((()=>[d(f,{type:"link"},{default:c((()=>[r(" 打开 ")])),_:1})])),_:2},1032,["title"])])),_:2},1032,["onClick"])])),_:1},8,["data-source"])]),$,n("div",S,[d(R,{name:"file",multiple:!0,action:u.action_url,onChange:p.handleFileChange},{default:c((()=>[D,j,x])),_:1},8,["action","onChange"])]),y])}],["__scopeId","data-v-d30dccef"]]);export{F as default};
|
||||
1
public/dist/assets/Index-7570f463.js
vendored
Normal file
1
public/dist/assets/Index-7570f463.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as e}from"./main-ce25b28f.js";import{i as l}from"./ipcRenderer-5e19eaee.js";import{a as s}from"./index-3bb9c4c1.js";import{_ as o,r as a,o as t,b as n,g as i,a as r,w as c,e as p,p as d,f as u}from"./index-c01cca1d.js";const f={data:()=>({type:1,serverUrl:""}),methods:{info(){l.invoke(e.crossInfo,{}).then((e=>{console.log("res:",e)}))},getUrl(){l.invoke(e.getCrossUrl,{name:"pyapp"}).then((e=>{this.serverUrl=e,this.$message.info(`服务地址: ${e}`)}))},kill(){l.invoke(e.killCrossServer,{type:"one",name:"pyapp"})},killAll(){l.invoke(e.killCrossServer,{type:"all",name:"pyapp"})},create(){l.invoke(e.createCrossServer,{program:"python"})},request(o){if(1!=o||""!=this.serverUrl)if(1==o){const e=this.serverUrl+"/api/hello";s({method:"get",url:e,params:{id:"111"},timeout:1e3}).then((e=>{console.log("res:",e);const l=e.data||null;this.$message.info(`服务返回: ${JSON.stringify(l)}`)}))}else l.invoke(e.requestApi,{name:"pyapp",urlPath:"/api/hello"}).then((e=>{console.log("res:",e);const l=e||null;this.$message.info(`服务返回: ${JSON.stringify(l)}`)}));else this.$message.info("请先获取服务地址")}}},k=e=>(d("data-v-89c3cb98"),e=e(),u(),e),v={id:"app-cross-python"},m=k((()=>i("div",{class:"one-block-1"},[i("span",null," 1. 基础控制 ")],-1))),h={class:"one-block-2"},g=k((()=>i("div",{class:"one-block-1"},[i("span",null," 2. 发送http请求 ")],-1))),_={class:"one-block-2"},C=k((()=>i("div",{class:"one-block-1"},[i("span",null," 3. 多个服务 ")],-1))),y={class:"one-block-2"};const b=o(f,[["render",function(e,l,s,o,d,u){const f=a("a-button"),k=a("a-space");return t(),n("div",v,[m,i("div",h,[r(k,null,{default:c((()=>[r(f,{onClick:l[0]||(l[0]=e=>u.create())},{default:c((()=>[p(" 启动 ")])),_:1}),r(f,{onClick:l[1]||(l[1]=e=>u.getUrl())},{default:c((()=>[p(" 获取地址 ")])),_:1}),r(f,{onClick:l[2]||(l[2]=e=>u.kill())},{default:c((()=>[p(" kill ")])),_:1}),r(f,{onClick:l[3]||(l[3]=e=>u.info())},{default:c((()=>[p(" test ")])),_:1})])),_:1})]),g,i("div",_,[r(k,null,{default:c((()=>[r(f,{onClick:l[4]||(l[4]=e=>u.request(1))},{default:c((()=>[p(" 前端发送 ")])),_:1}),r(f,{onClick:l[5]||(l[5]=e=>u.request(2))},{default:c((()=>[p(" 主进程发送 ")])),_:1})])),_:1})]),C,i("div",y,[r(k,null,{default:c((()=>[r(f,{onClick:l[6]||(l[6]=e=>u.create())},{default:c((()=>[p(" 启动 ")])),_:1}),r(f,{onClick:l[7]||(l[7]=e=>u.killAll())},{default:c((()=>[p(" kill all ")])),_:1})])),_:1})])])}],["__scopeId","data-v-89c3cb98"]]);export{b as default};
|
||||
BIN
public/dist/assets/Index-7570f463.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-7570f463.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-7f01e8aa.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-7f01e8aa.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-8ca1895c.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-8ca1895c.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-9563719d.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-9563719d.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-9ae1ed3b.js
vendored
Normal file
1
public/dist/assets/Index-9ae1ed3b.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as e}from"./main-ce25b28f.js";import{i as s}from"./ipcRenderer-5e19eaee.js";import{a}from"./index-3bb9c4c1.js";import{s as r}from"./store2-127baa44.js";import{_ as t,r as o,o as i,b as n,g as v,a as c,w as d,e as m,p as l,f}from"./index-c01cca1d.js";const u={data:()=>({server:""}),methods:{startServer(){s.invoke(e.startJavaServer,{}).then((e=>{0!=e.code?this.$message.error(e.msg):(this.$message.info("异步启动"),r.set("javaService",e.server))}))},closeServer(){s.invoke(e.closeJavaServer,{}).then((e=>{0!=e.code&&this.$message.error(e.msg),this.$message.info("异步关闭"),r.remove("javaService")}))},sendRequest(){const e=r.get("javaService")||"";if(""==e)return void this.$message.error("服务未开启 或 正在启动中");a({method:"get",url:e+"/test1/get",params:{id:"1111111"},timeout:6e4}).then((e=>{const s=e.data||null;this.$message.info(`java服务返回: ${s}`)}))}}},p={id:"app-other"},g=(e=>(l("data-v-c3213243"),e=e(),f(),e))((()=>v("div",{class:"one-block-1"},[v("span",null," 请求java服务接口(废弃,请使用跨语言服务) ")],-1))),h={class:"one-block-2"};const j=t(u,[["render",function(e,s,a,r,t,l){const f=o("a-button"),u=o("a-space");return i(),n("div",p,[g,v("div",h,[c(u,null,{default:d((()=>[c(f,{onClick:s[0]||(s[0]=e=>l.startServer())},{default:d((()=>[m(" 启动java项目 ")])),_:1}),c(f,{onClick:s[1]||(s[1]=e=>l.sendRequest())},{default:d((()=>[m(" 测试接口 ")])),_:1}),c(f,{onClick:s[2]||(s[2]=e=>l.closeServer())},{default:d((()=>[m(" 关闭java项目 ")])),_:1})])),_:1})])])}],["__scopeId","data-v-c3213243"]]);export{j as default};
|
||||
BIN
public/dist/assets/Index-9ae1ed3b.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-9ae1ed3b.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-9e9d1c9b.js
vendored
1
public/dist/assets/Index-9e9d1c9b.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as e}from"./main-3bb0017c.js";import{i as t}from"./ipcRenderer-5e19eaee.js";import{_ as i,h as s,r as a,o as n,b as l,g as o,a as r,w as d,e as c,t as u,p as m,f as v}from"./index-f283ba7d.js";const p={data:()=>({defaultDeviceName:"",printerList:[],views:[{type:"html",content:"/public/html/view_example.html"}]}),mounted(){this.init()},methods:{init(){t.removeAllListeners(e.printStatus),t.on(e.printStatus,((e,t)=>{console.log("result",t),this.$message.info("打印中...")}))},getPrinter(){t.invoke(e.getPrinterList,{}).then((e=>{this.printerList=e}))},doPrint(i){console.log("defaultDeviceName:",this.defaultDeviceName);const a={view:s(this.views[i]),deviceName:this.defaultDeviceName};t.send(e.print,a)},defaultDevice(e){let t="";return e.isDefault&&(t="- 默认",this.defaultDeviceName=e.name),t}}},f=e=>(m("data-v-b732860b"),e=e(),v(),e),h={id:"app-hw-bluetooth"},b=f((()=>o("div",{class:"one-block-1"},[o("span",null," 1. 打印机设备 ")],-1))),k={class:"one-block-2"},D={class:"one-block-2"},_=f((()=>o("div",null,"设备列表",-1))),g=f((()=>o("div",{class:"one-block-1"},[o("span",null," 2. 打印内容 ")],-1))),N={class:"one-block-2"};const w=i(p,[["render",function(e,t,i,s,m,v){const p=a("a-button"),f=a("a-list-item"),w=a("a-list");return n(),l("div",h,[b,o("div",k,[r(p,{onClick:t[0]||(t[0]=e=>v.getPrinter())},{default:d((()=>[c(" 获取打印机列表 ")])),_:1})]),o("div",D,[r(w,{size:"small",bordered:"","data-source":m.printerList},{renderItem:d((({item:e})=>[r(f,null,{default:d((()=>[c(u(e.displayName)+" "+u(v.defaultDevice(e)),1)])),_:2},1024)])),header:d((()=>[_])),_:1},8,["data-source"])]),g,o("div",N,[r(p,{onClick:t[1]||(t[1]=e=>v.doPrint(0))},{default:d((()=>[c(" 打印一个页面 ")])),_:1})])])}],["__scopeId","data-v-b732860b"]]);export{w as default};
|
||||
1
public/dist/assets/Index-ad85ce78.js
vendored
Normal file
1
public/dist/assets/Index-ad85ce78.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as e}from"./main-ce25b28f.js";import{i as l}from"./ipcRenderer-5e19eaee.js";import{a as s}from"./index-3bb9c4c1.js";import{_ as o,r as a,o as t,b as n,g as i,a as r,w as c,e as d,p,f as u}from"./index-c01cca1d.js";const k={data:()=>({type:1,serverUrl:""}),methods:{info(){l.invoke(e.crossInfo,{}).then((e=>{console.log("res:",e)}))},getUrl(){l.invoke(e.getCrossUrl,{name:"goapp"}).then((e=>{this.serverUrl=e,this.$message.info(`服务地址: ${e}`)}))},kill(){l.invoke(e.killCrossServer,{type:"one",name:"goapp"})},killAll(){l.invoke(e.killCrossServer,{type:"all",name:"goapp"})},create(){l.invoke(e.createCrossServer,{program:"go"})},request(o){if(1!=o||""!=this.serverUrl)if(1==o){const e=this.serverUrl+"/api/hello";s({method:"get",url:e,params:{id:"111"},timeout:1e3}).then((e=>{console.log("res:",e);const l=e.data.data||null;this.$message.info(`服务返回: ${l}`)}))}else l.invoke(e.requestApi,{name:"goapp",urlPath:"/api/hello"}).then((e=>{console.log("res:",e);const l=e.data||null;this.$message.info(`服务返回: ${l}`)}));else this.$message.info("请先获取服务地址")}}},f=e=>(p("data-v-e1875343"),e=e(),u(),e),v={id:"app-cross-go"},m=f((()=>i("div",{class:"one-block-1"},[i("span",null," 1. 基础控制 ")],-1))),g={class:"one-block-2"},h=f((()=>i("div",{class:"one-block-1"},[i("span",null," 2. 发送http请求 ")],-1))),_={class:"one-block-2"},C=f((()=>i("div",{class:"one-block-1"},[i("span",null," 3. 多个服务 ")],-1))),b={class:"one-block-2"};const U=o(k,[["render",function(e,l,s,o,p,u){const k=a("a-button"),f=a("a-space");return t(),n("div",v,[m,i("div",g,[r(f,null,{default:c((()=>[r(k,{onClick:l[0]||(l[0]=e=>u.create())},{default:c((()=>[d(" 启动 ")])),_:1}),r(k,{onClick:l[1]||(l[1]=e=>u.getUrl())},{default:c((()=>[d(" 获取地址 ")])),_:1}),r(k,{onClick:l[2]||(l[2]=e=>u.kill())},{default:c((()=>[d(" kill ")])),_:1}),r(k,{onClick:l[3]||(l[3]=e=>u.info())},{default:c((()=>[d(" test ")])),_:1})])),_:1})]),h,i("div",_,[r(f,null,{default:c((()=>[r(k,{onClick:l[4]||(l[4]=e=>u.request(1))},{default:c((()=>[d(" 前端发送 ")])),_:1}),r(k,{onClick:l[5]||(l[5]=e=>u.request(2))},{default:c((()=>[d(" 主进程发送 ")])),_:1})])),_:1})]),C,i("div",b,[r(f,null,{default:c((()=>[r(k,{onClick:l[6]||(l[6]=e=>u.create())},{default:c((()=>[d(" 启动 ")])),_:1}),r(k,{onClick:l[7]||(l[7]=e=>u.killAll())},{default:c((()=>[d(" kill所有 ")])),_:1})])),_:1})])])}],["__scopeId","data-v-e1875343"]]);export{U as default};
|
||||
BIN
public/dist/assets/Index-ad85ce78.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-ad85ce78.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-af0c3b59.css
vendored
Normal file
1
public/dist/assets/Index-af0c3b59.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
#app-cross-python[data-v-89c3cb98]{padding:0 10px;text-align:left;width:100%}#app-cross-python .one-block-1[data-v-89c3cb98]{font-size:16px;padding-top:10px}#app-cross-python .one-block-2[data-v-89c3cb98]{padding-top:10px}
|
||||
1
public/dist/assets/Index-c2f0b408.js
vendored
1
public/dist/assets/Index-c2f0b408.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as t}from"./main-3bb0017c.js";import{i as s}from"./ipcRenderer-5e19eaee.js";import{_ as n,r as o,o as e,b as a,g as i,a as r,w as l,t as c,p,f as u}from"./index-f283ba7d.js";const d={data:()=>({currentStatus:"无"}),mounted(){this.init()},methods:{init(){s.removeAllListeners(t.initPowerMonitor),s.on(t.initPowerMonitor,((t,s)=>{"[object Object]"==Object.prototype.toString.call(s)&&(this.currentStatus=s.msg,this.$message.info(s.msg))})),s.send(t.initPowerMonitor,"")}}},m=t=>(p("data-v-564cbe99"),t=t(),u(),t),b={id:"app-base-powermonitor"},f=m((()=>i("div",{class:"one-block-1"},[i("span",null," 1. 监控电源状态 ")],-1))),v={class:"one-block-2"},j=m((()=>i("p",null,"* 拔掉电源,使用电池供电",-1))),g=m((()=>i("p",null,"* 接入电源",-1))),w=m((()=>i("p",null,"* 锁屏",-1))),h=m((()=>i("p",null,"* 解锁",-1)));const S=n(d,[["render",function(t,s,n,p,u,d){const m=o("a-space");return e(),a("div",b,[f,i("div",v,[r(m,null,{default:l((()=>[i("p",null,"* 当前状态:"+c(u.currentStatus),1)])),_:1}),j,g,w,h])])}],["__scopeId","data-v-564cbe99"]]);export{S as default};
|
||||
1
public/dist/assets/Index-c4fe10d4.js
vendored
Normal file
1
public/dist/assets/Index-c4fe10d4.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as a}from"./main-ce25b28f.js";import{i as e}from"./ipcRenderer-5e19eaee.js";import{_ as s,r as t,o as n,b as c,g as l,a as o,w as d,e as i,F as r,d as f,p,f as u,c as b,t as k}from"./index-c01cca1d.js";const m={data:()=>({data:[]}),methods:{getScreen(s){e.invoke(a.getScreen,s).then((a=>{this.data=a}))}}},v=a=>(p("data-v-5c2facb0"),a=a(),u(),a),_={id:"app-base-screen"},g=v((()=>l("div",{class:"one-block-1"},[l("span",null," 1. 屏幕信息 ")],-1))),S={class:"one-block-2"},h=v((()=>l("div",{class:"one-block-1"},[l("span",null," 结果: ")],-1))),j={class:"one-block-2"};const C=s(m,[["render",function(a,e,s,p,u,m){const v=t("a-button"),C=t("a-space"),w=t("a-descriptions-item"),x=t("a-descriptions");return n(),c("div",_,[g,l("div",S,[o(C,null,{default:d((()=>[o(v,{onClick:e[0]||(e[0]=a=>m.getScreen(0))},{default:d((()=>[i("获取当前鼠标位置")])),_:1}),o(v,{onClick:e[1]||(e[1]=a=>m.getScreen(1))},{default:d((()=>[i("获取主屏幕")])),_:1}),o(v,{onClick:e[2]||(e[2]=a=>m.getScreen(2))},{default:d((()=>[i("获取所有屏幕")])),_:1})])),_:1})]),h,l("div",j,[o(x,{title:""},{default:d((()=>[(n(!0),c(r,null,f(u.data,((a,e)=>(n(),b(w,{key:e,label:a.title},{default:d((()=>[i(k(a.desc),1)])),_:2},1032,["label"])))),128))])),_:1})])])}],["__scopeId","data-v-5c2facb0"]]);export{C as default};
|
||||
BIN
public/dist/assets/Index-c4fe10d4.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-c4fe10d4.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-c521a9f5.js
vendored
1
public/dist/assets/Index-c521a9f5.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as e}from"./main-3bb0017c.js";import{i as a}from"./ipcRenderer-5e19eaee.js";import{_ as s,r as t,o,b as n,g as r,a as d,w as i,e as l,t as c,p,f as u}from"./index-f283ba7d.js";const f={data:()=>({data:[{content:"powershell.exe",id:"powershell.exe"}]}),methods:{openSoft(s){a.invoke(e.openSoftware,s).then((e=>{e||this.$message.error("程序不存在")}))}}},m={id:"app-base-software-open"},b=(e=>(p("data-v-90e4d11c"),e=e(),u(),e))((()=>r("div",{class:"one-block-1"},[r("span",null," 1. 调用其它软件(exe、bash等可执行程序) "),r("p"),r("span",{class:"sub-content"}," 注:请先将【powershell.exe】复制到【electron-egg/build/extraResources】目录中 ")],-1))),h={class:"one-block-2"};const v=s(f,[["render",function(e,a,s,p,u,f){const v=t("a-button"),x=t("a-list-item"),k=t("a-list");return o(),n("div",m,[b,r("div",h,[d(k,{bordered:"","data-source":u.data},{renderItem:i((({item:e})=>[d(x,{onClick:a=>f.openSoft(e.id)},{default:i((()=>[l(c(e.content)+" ",1),d(v,{type:"link"},{default:i((()=>[l(" 执行 ")])),_:1})])),_:2},1032,["onClick"])])),_:1},8,["data-source"])])])}],["__scopeId","data-v-90e4d11c"]]);export{v as default};
|
||||
1
public/dist/assets/Index-ce621282.js
vendored
1
public/dist/assets/Index-ce621282.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as a}from"./main-3bb0017c.js";import{i as e}from"./ipcRenderer-5e19eaee.js";import{_ as t,r as n,o,b as s,g as u,a as c,w as i,p as l,f as h}from"./index-f283ba7d.js";const d={data:()=>({autoLaunchChecked:!1}),mounted(){this.init()},methods:{init(){e.invoke(a.autoLaunch,"check").then((a=>{console.log("[ipcRenderer] [autoLaunch] result:",a),this.autoLaunchChecked=a.status}))},autoLaunchChange(a){console.log("[ipcRenderer] [autoLaunch] self.autoLaunchChecked:",this.autoLaunchChecked)}}},r=a=>(l("data-v-1b008e01"),a=a(),h(),a),m={id:"app-base-system-launch"},p={class:"one-block-2"},C=r((()=>u("a",null,"启动",-1))),L=r((()=>u("span",null," 开机自动启动 ",-1)));const k=t(d,[["render",function(a,e,t,l,h,d){const r=n("a-list-item-meta"),k=n("a-switch"),f=n("a-list-item"),g=n("a-list");return o(),s("div",m,[u("div",p,[c(g,{class:"set-auto",itemLayout:"horizontal"},{default:i((()=>[c(f,{style:{"text-align":"left"}},{actions:i((()=>[c(k,{modelValue:h.autoLaunchChecked,"onUpdate:modelValue":e[0]||(e[0]=a=>h.autoLaunchChecked=a),checkedChildren:"开",unCheckedChildren:"关",onChange:e[1]||(e[1]=a=>d.autoLaunchChange())},null,8,["modelValue"])])),default:i((()=>[c(r,null,{title:i((()=>[C])),description:i((()=>[L])),_:1})])),_:1})])),_:1})])])}],["__scopeId","data-v-1b008e01"]]);export{k as default};
|
||||
BIN
public/dist/assets/Index-dc93a782.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-dc93a782.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-e0cd22d1.js
vendored
1
public/dist/assets/Index-e0cd22d1.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as e}from"./main-3bb0017c.js";import{i}from"./ipcRenderer-5e19eaee.js";import{_ as n,h as o,r as a,o as l,b as t,g as s,a as d,w,e as c,p as u,f as m}from"./index-f283ba7d.js";const p={data:()=>({views:[{type:"web",content:"https://www.bilibili.com/",windowName:"window-web",windowTitle:"bilibili"},{type:"html",content:"/public/html/view_example.html",windowName:"window-html",windowTitle:"html window"},{type:"vue",content:"#/special/subwindow",windowName:"window-vue",windowTitle:"vue window"}]}),methods:{createWindow(n){i.invoke(e.createWindow,o(this.views[n])).then((e=>{console.log(e)}))}}},r=e=>(u("data-v-f82edd5f"),e=e(),m(),e),b={id:"app-base-window"},v=r((()=>s("div",{class:"one-block-1"},[s("span",null," 1. 新窗口中加载web内容 ")],-1))),f={class:"one-block-2"},h=r((()=>s("div",{class:"one-block-1"},[s("span",null," 2. 新窗口中加载html内容 ")],-1))),k={class:"one-block-2"},_=r((()=>s("div",{class:"one-block-1"},[s("span",null," 3. 新窗口中加载当前项目页面 ")],-1))),W={class:"one-block-2"};const j=n(p,[["render",function(e,i,n,o,u,m){const p=a("a-button"),r=a("a-space");return l(),t("div",b,[v,s("div",f,[d(r,null,{default:w((()=>[d(p,{onClick:i[0]||(i[0]=e=>m.createWindow(0))},{default:w((()=>[c("打开哔哩哔哩")])),_:1})])),_:1})]),h,s("div",k,[d(r,null,{default:w((()=>[d(p,{onClick:i[1]||(i[1]=e=>m.createWindow(1))},{default:w((()=>[c("打开html页面")])),_:1})])),_:1})]),_,s("div",W,[d(r,null,{default:w((()=>[d(p,{onClick:i[2]||(i[2]=e=>m.createWindow(2))},{default:w((()=>[c("打开vue页面")])),_:1})])),_:1})])])}],["__scopeId","data-v-f82edd5f"]]);export{j as default};
|
||||
1
public/dist/assets/Index-e239b54e.js
vendored
1
public/dist/assets/Index-e239b54e.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as e}from"./main-3bb0017c.js";import{i as t}from"./ipcRenderer-5e19eaee.js";import{_ as a,r as s,o,b as n,g as l,a as r,w as d,t as u,e as m,p as h,f as i}from"./index-f283ba7d.js";const c={data:()=>({currentThemeMode:"",themeList:["system","light","dark"]}),mounted(){},methods:{setTheme(a){this.currentThemeMode=a.target.value,console.log("setTheme currentThemeMode:",this.currentThemeMode),t.invoke(e.setTheme,this.currentThemeMode).then((e=>{console.log("result:",e),this.currentThemeMode=e}))},getTheme(){t.invoke(e.getTheme).then((e=>{console.log("result:",e),this.currentThemeMode=e}))}}},v=e=>(h("data-v-5a0f8a17"),e=e(),i(),e),T={id:"app-base-screen"},f=v((()=>l("div",{class:"one-block-1"},[l("span",null," 1. 系统主题模式 ")],-1))),p={class:"one-block-2"},g=v((()=>l("div",{class:"one-block-1"}," 2. 设置主题模式(请自行实现前端UI效果) ",-1))),M={class:"one-block-2"};const _=a(c,[["render",function(e,t,a,h,i,c){const v=s("a-button"),_=s("a-space"),k=s("a-radio"),b=s("a-radio-group");return o(),n("div",T,[f,l("div",p,[r(_,null,{default:d((()=>[r(v,{onClick:t[0]||(t[0]=e=>c.getTheme())},{default:d((()=>[m("获取模式")])),_:1})])),_:1}),l("span",null," 结果:"+u(i.currentThemeMode),1)]),g,l("div",M,[r(b,{modelValue:i.currentThemeMode,"onUpdate:modelValue":t[1]||(t[1]=e=>i.currentThemeMode=e),onChange:c.setTheme},{default:d((()=>[r(k,{value:i.themeList[0]},{default:d((()=>[m(u(i.themeList[0]),1)])),_:1},8,["value"]),r(k,{value:i.themeList[1]},{default:d((()=>[m(u(i.themeList[1]),1)])),_:1},8,["value"]),r(k,{value:i.themeList[2]},{default:d((()=>[m(u(i.themeList[2]),1)])),_:1},8,["value"])])),_:1},8,["modelValue","onChange"])])])}],["__scopeId","data-v-5a0f8a17"]]);export{_ as default};
|
||||
1
public/dist/assets/Index-e4243358.js
vendored
Normal file
1
public/dist/assets/Index-e4243358.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as e}from"./main-ce25b28f.js";import{i as s}from"./ipcRenderer-5e19eaee.js";import{a}from"./index-3bb9c4c1.js";import{_ as l,r as o,o as t,b as n,g as i,a as r,w as c,e as d,p,f as u}from"./index-c01cca1d.js";const v={data:()=>({type:1,serverUrl:""}),methods:{info(){s.invoke(e.crossInfo,{}).then((e=>{console.log("res:",e)}))},getUrl(){s.invoke(e.getCrossUrl,{name:"javaapp"}).then((e=>{this.serverUrl=e,this.$message.info(`服务地址: ${e}`)}))},kill(){s.invoke(e.killCrossServer,{type:"one",name:"javaapp"})},killAll(){s.invoke(e.killCrossServer,{type:"all",name:"javaapp"})},create(){s.invoke(e.createCrossServer,{program:"java"})},request(l){if(1!=l||""!=this.serverUrl)if(1==l){const e=this.serverUrl+"/test1/get";a({method:"get",url:e,params:{id:"1111111"},timeout:1e3}).then((e=>{console.log("res:",e);const s=e.data||null;this.$message.info(`服务返回: ${s}`)}))}else s.invoke(e.requestApi,{name:"javaapp",urlPath:"/test1/get",params:{id:"1111111"}}).then((e=>{console.log("res:",e);const s=e||null;this.$message.info(`服务返回: ${s}`)}));else this.$message.info("请先获取服务地址")}}},k=e=>(p("data-v-5d226b2a"),e=e(),u(),e),f={id:"app-cross-java"},m=k((()=>i("div",{class:"one-block-1"},[i("span",null," 1. 基础控制 ")],-1))),g={class:"one-block-2"},h=k((()=>i("div",{class:"one-block-1"},[i("span",null," 2. 发送http请求 ")],-1))),_={class:"one-block-2"},C=k((()=>i("div",{class:"one-block-1"},[i("span",null," 3. 多个服务 ")],-1))),b={class:"one-block-2"};const j=l(v,[["render",function(e,s,a,l,p,u){const v=o("a-button"),k=o("a-space");return t(),n("div",f,[m,i("div",g,[r(k,null,{default:c((()=>[r(v,{onClick:s[0]||(s[0]=e=>u.create())},{default:c((()=>[d(" 启动 ")])),_:1}),r(v,{onClick:s[1]||(s[1]=e=>u.getUrl())},{default:c((()=>[d(" 获取地址 ")])),_:1}),r(v,{onClick:s[2]||(s[2]=e=>u.kill())},{default:c((()=>[d(" kill ")])),_:1}),r(v,{onClick:s[3]||(s[3]=e=>u.info())},{default:c((()=>[d(" 查看 ")])),_:1})])),_:1})]),h,i("div",_,[r(k,null,{default:c((()=>[r(v,{onClick:s[4]||(s[4]=e=>u.request(1))},{default:c((()=>[d(" 前端发送 ")])),_:1}),r(v,{onClick:s[5]||(s[5]=e=>u.request(2))},{default:c((()=>[d(" 主进程发送 ")])),_:1})])),_:1})]),C,i("div",b,[r(k,null,{default:c((()=>[r(v,{onClick:s[6]||(s[6]=e=>u.create())},{default:c((()=>[d(" 启动 ")])),_:1}),r(v,{onClick:s[7]||(s[7]=e=>u.killAll())},{default:c((()=>[d(" kill所有 ")])),_:1})])),_:1})])])}],["__scopeId","data-v-5d226b2a"]]);export{j as default};
|
||||
BIN
public/dist/assets/Index-e4243358.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-e4243358.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-e9c7b9bd.js
vendored
Normal file
1
public/dist/assets/Index-e9c7b9bd.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as e}from"./main-ce25b28f.js";import{i as a}from"./ipcRenderer-5e19eaee.js";import{_ as s,r as t,o,b as n,g as r,a as d,w as i,e as l,t as c,p,f}from"./index-c01cca1d.js";const m={data:()=>({data:[{content:"powershell.exe",id:"powershell.exe"}]}),methods:{openSoft(s){a.invoke(e.openSoftware,s).then((e=>{e||this.$message.error("程序不存在")}))}}},u={id:"app-base-software-open"},b=(e=>(p("data-v-90e4d11c"),e=e(),f(),e))((()=>r("div",{class:"one-block-1"},[r("span",null," 1. 调用其它软件(exe、bash等可执行程序) "),r("p"),r("span",{class:"sub-content"}," 注:请先将【powershell.exe】复制到【electron-egg/build/extraResources】目录中 ")],-1))),h={class:"one-block-2"};const v=s(m,[["render",function(e,a,s,p,f,m){const v=t("a-button"),w=t("a-list-item"),x=t("a-list");return o(),n("div",u,[b,r("div",h,[d(x,{bordered:"","data-source":f.data},{renderItem:i((({item:e})=>[d(w,{onClick:a=>m.openSoft(e.id)},{default:i((()=>[l(c(e.content)+" ",1),d(v,{type:"link"},{default:i((()=>[l(" 执行 ")])),_:1})])),_:2},1032,["onClick"])])),_:1},8,["data-source"])])])}],["__scopeId","data-v-90e4d11c"]]);export{v as default};
|
||||
BIN
public/dist/assets/Index-e9c7b9bd.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-e9c7b9bd.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/Index-ea03b463.js.gz
vendored
Normal file
BIN
public/dist/assets/Index-ea03b463.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Index-ea299cba.js
vendored
1
public/dist/assets/Index-ea299cba.js
vendored
@@ -1 +0,0 @@
|
||||
import{s,i as e}from"./main-3bb0017c.js";import{i as a}from"./ipcRenderer-5e19eaee.js";import{_ as t,r as o,o as n,b as r,g as c,a as d,w as i,e as l,t as p,p as u,f as m}from"./index-f283ba7d.js";const f={data:()=>({status:0,progress:"",percentNumber:0}),mounted(){this.init()},methods:{init(){a.removeAllListeners(s.appUpdater),a.on(s.appUpdater,((s,e)=>{e=JSON.parse(e),this.status=e.status,3==e.status?(this.progress=e.desc,this.percentNumber=e.percentNumber):this.$message.info(e.desc)}))},checkForUpdater(){a.invoke(e.checkForUpdater).then((s=>{console.log(s)}))},download(){1===this.status?a.invoke(e.downloadApp).then((s=>{console.log(s)})):this.$message.info("没有可用版本")}}},h=s=>(u("data-v-88c3fe69"),s=s(),m(),s),v={id:"app-demo-window"},k=h((()=>c("div",{class:"one-block-1"},[c("span",null," 1. 自动更新 ")],-1))),b={class:"one-block-2"},g=h((()=>c("div",{class:"one-block-1"},[c("span",null," 2. 下载进度 ")],-1))),_={class:"one-block-2"};const w=t(f,[["render",function(s,e,a,t,u,m){const f=o("a-button"),h=o("a-space"),w=o("a-progress");return n(),r("div",v,[k,c("div",b,[d(h,null,{default:i((()=>[d(f,{onClick:e[0]||(e[0]=s=>m.checkForUpdater())},{default:i((()=>[l("检查更新")])),_:1}),d(f,{onClick:e[1]||(e[1]=s=>m.download())},{default:i((()=>[l("下载并安装")])),_:1})])),_:1})]),g,c("div",_,[d(w,{percent:u.percentNumber,status:"active"},null,8,["percent"]),d(h,null,{default:i((()=>[l(p(u.progress),1)])),_:1})])])}],["__scopeId","data-v-88c3fe69"]]);export{w as default};
|
||||
1
public/dist/assets/Index-f2c2d585.js
vendored
1
public/dist/assets/Index-f2c2d585.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as s}from"./main-3bb0017c.js";import{i as r}from"./ipcRenderer-5e19eaee.js";import{_ as e,r as o,o as i,b as p,g as l,a as d,w as t,e as a,t as n,p as u,f as c}from"./index-f283ba7d.js";const g={data:()=>({processPids:"",progress1:0,progress2:0,progress3:0,progress4:0,progress5:0,progress6:0,progress1_pid:0,progress2_pid:0,progress3_pid:0,progress4_pid:0,progress5_pid:0,progress6_pid:0}),mounted(){this.init()},methods:{init(){r.removeAllListeners(s.timerJobProgress),r.removeAllListeners(s.createPoolNotice),r.on(s.timerJobProgress,((s,r)=>{switch(r.jobId){case 1:this.progress1=r.number,this.progress1_pid=0==r.pid?r.pid:this.progress1_pid;break;case 2:this.progress2=r.number,this.progress2_pid=0==r.pid?r.pid:this.progress2_pid;break;case 3:this.progress3=r.number,this.progress3_pid=0==r.pid?r.pid:this.progress3_pid;break;case 4:this.progress4=r.number,this.progress4_pid=0==r.pid?r.pid:this.progress4_pid;break;case 5:this.progress5=r.number,this.progress5_pid=0==r.pid?r.pid:this.progress5_pid;break;case 6:this.progress6=r.number,this.progress6_pid=0==r.pid?r.pid:this.progress6_pid}})),r.on(s.createPoolNotice,((s,r)=>{let e=JSON.stringify(r);this.processPids=e}))},runJob(e,o){let i={id:e,type:"timer",action:o};r.invoke(s.someJob,i).then((s=>{if("close"!=o)switch(s.jobId){case 1:this.progress1_pid=s.result.pid;break;case 2:this.progress2_pid=s.result.pid}}))},createPool(){r.send(s.createPool,{number:3})},runJobByPool(e,o){let i={id:e,type:"timer",action:o};r.invoke(s.someJobByPool,i).then((s=>{switch(s.jobId){case 3:this.progress3_pid=s.result.pid;break;case 4:this.progress4_pid=s.result.pid;break;case 5:this.progress5_pid=s.result.pid;break;case 6:this.progress6_pid=s.result.pid}}))}}},_=s=>(u("data-v-71705fa7"),s=s(),c(),s),b={id:"app-base-jobs"},h=_((()=>l("div",{class:"one-block-1"},[l("span",null," 1. 任务 / 并发任务 ")],-1))),f={class:"one-block-2"},k=_((()=>l("p",null,null,-1))),m=_((()=>l("div",{class:"one-block-1"},[l("span",null," 2. 任务池 / 并发任务 ")],-1))),P={class:"one-block-2"},J=_((()=>l("p",null,null,-1))),v=_((()=>l("p",null,null,-1))),y=_((()=>l("p",null,null,-1))),C=_((()=>l("p",null,null,-1)));const j=e(g,[["render",function(s,r,e,u,c,g){const _=o("a-button"),j=o("a-space");return i(),p("div",b,[h,l("div",f,[d(j,null,{default:t((()=>[d(_,{onClick:r[0]||(r[0]=s=>g.runJob(1,"create"))},{default:t((()=>[a("执行任务1")])),_:1}),a(" 进度:"+n(c.progress1)+" , 进程pid:"+n(c.progress1_pid)+" ",1),d(_,{onClick:r[1]||(r[1]=s=>g.runJob(1,"close"))},{default:t((()=>[a("关闭")])),_:1})])),_:1}),k,d(j,null,{default:t((()=>[d(_,{onClick:r[2]||(r[2]=s=>g.runJob(2,"create"))},{default:t((()=>[a("执行任务2")])),_:1}),a(" 进度:"+n(c.progress2)+" , 进程pid:"+n(c.progress2_pid)+" ",1),d(_,{onClick:r[3]||(r[3]=s=>g.runJob(2,"close"))},{default:t((()=>[a("关闭")])),_:1})])),_:1})]),m,l("div",P,[d(j,null,{default:t((()=>[d(_,{onClick:r[4]||(r[4]=s=>g.createPool())},{default:t((()=>[a("创建进程池")])),_:1}),a(" 进程pids:"+n(c.processPids),1)])),_:1}),J,d(j,null,{default:t((()=>[d(_,{onClick:r[5]||(r[5]=s=>g.runJobByPool(3,"run"))},{default:t((()=>[a("执行任务3")])),_:1}),a(" 进度:"+n(c.progress3)+" ,进程pid:"+n(c.progress3_pid),1)])),_:1}),v,d(j,null,{default:t((()=>[d(_,{onClick:r[6]||(r[6]=s=>g.runJobByPool(4,"run"))},{default:t((()=>[a("执行任务4")])),_:1}),a(" 进度:"+n(c.progress4)+" ,进程pid:"+n(c.progress4_pid),1)])),_:1}),y,d(j,null,{default:t((()=>[d(_,{onClick:r[7]||(r[7]=s=>g.runJobByPool(5,"run"))},{default:t((()=>[a("执行任务5")])),_:1}),a(" 进度:"+n(c.progress5)+" ,进程pid:"+n(c.progress5_pid),1)])),_:1}),C,d(j,null,{default:t((()=>[d(_,{onClick:r[8]||(r[8]=s=>g.runJobByPool(6,"run"))},{default:t((()=>[a("执行任务6")])),_:1}),a(" 进度:"+n(c.progress6)+" ,进程pid:"+n(c.progress6_pid),1)])),_:1})])])}],["__scopeId","data-v-71705fa7"]]);export{j as default};
|
||||
1
public/dist/assets/Index-f4d16407.js
vendored
1
public/dist/assets/Index-f4d16407.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as a}from"./main-3bb0017c.js";import{i as o}from"./ipcRenderer-5e19eaee.js";import{_ as n,r as s,o as i,b as e,g as t,a as d,w as l,e as r,p as c,f as p}from"./index-f283ba7d.js";const u={data:()=>({}),methods:{loginWindow(){this.$router.push({name:"SpecialLoginWindow",params:{}}),o.invoke(a.loginWindow,{width:400,height:300}).then((a=>{}))}}},f={id:"effect-login-index"},m=(a=>(c("data-v-3b73b158"),a=a(),p(),a))((()=>t("div",{class:"one-block-1"},[t("span",null," 1. 登录 ")],-1))),b={class:"one-block-2"};const g=n(u,[["render",function(a,o,n,c,p,u){const g=s("a-button"),h=s("a-space");return i(),e("div",f,[m,t("div",b,[d(h,null,{default:l((()=>[d(g,{onClick:o[0]||(o[0]=a=>u.loginWindow())},{default:l((()=>[r("切换为登录窗口")])),_:1})])),_:1})])])}],["__scopeId","data-v-3b73b158"]]);export{g as default};
|
||||
1
public/dist/assets/Index-f5517914.js
vendored
1
public/dist/assets/Index-f5517914.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as n}from"./main-3bb0017c.js";import{i as e}from"./ipcRenderer-5e19eaee.js";import{_ as a,r as o,o as i,b as t,g as c,a as p,w as s,e as m,p as y,f as l}from"./index-f283ba7d.js";const d=[{name:"对话框",type:"icon-duihuakuang"},{name:"闹钟",type:"icon-naozhong"},{name:"笑脸",type:"icon-xiaolian"},{name:"ok",type:"icon-ok"},{name:"风车",type:"icon-fengche"},{name:"汗颜",type:"icon-hanyan"},{name:"相机",type:"icon-xiangji"},{name:"礼物",type:"icon-liwu"},{name:"礼花",type:"icon-lihua"},{name:"扭蛋",type:"icon-niudan"},{name:"流星",type:"icon-liuxing"},{name:"风筝",type:"icon-fengzheng"},{name:"蛋糕",type:"icon-dangao"},{name:"泡泡",type:"icon-paopao"},{name:"购物",type:"icon-gouwu"},{name:"饮料",type:"icon-yinliao"},{name:"云彩",type:"icon-yuncai"},{name:"彩铅",type:"icon-caiqian"},{name:"纸飞机",type:"icon-zhifeiji"},{name:"点赞",type:"icon-dianzan"},{name:"煎蛋",type:"icon-jiandan"},{name:"小熊",type:"icon-xiaoxiong"},{name:"花",type:"icon-hua"},{name:"眼睛",type:"icon-yanjing"}],u={data:()=>({type:1,iconData:d}),methods:{exec(a){console.log("process:",process);const o={id:a};e.invoke(n.test,o).then((n=>{console.log("res:",n)}))},exec2(n){}}},r={id:"app-base-test-api"},g=(n=>(y("data-v-e3ea38b6"),n=n(),l(),n))((()=>c("div",{class:"one-block-1"},[c("span",null," 1. 测试一些操作系统api ")],-1))),f={class:"one-block-2"};const x=a(u,[["render",function(n,e,a,y,l,d){const u=o("a-button"),x=o("a-space");return i(),t("div",r,[g,c("div",f,[p(x,null,{default:s((()=>[p(u,{onClick:e[0]||(e[0]=n=>d.exec(1))},{default:s((()=>[m(" 点击 ")])),_:1}),p(u,{onClick:e[1]||(e[1]=n=>d.exec2(1))},{default:s((()=>[m(" 点击2 ")])),_:1})])),_:1})])])}],["__scopeId","data-v-e3ea38b6"]]);export{x as default};
|
||||
BIN
public/dist/assets/Ipc-9b727d04.js.gz
vendored
Normal file
BIN
public/dist/assets/Ipc-9b727d04.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Ipc-d007eef7.js
vendored
1
public/dist/assets/Ipc-d007eef7.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as e,s as n}from"./main-3bb0017c.js";import{i as s}from"./ipcRenderer-5e19eaee.js";import{_ as o,r as a,o as l,b as i,g as d,a as t,w as c,e as g,t as u,p as r,f as k}from"./index-f283ba7d.js";const m={data:()=>({messageString:"",message1:"",message2:"",message3:"",mainWCid:0}),mounted(){this.init()},methods:{init(){s.removeAllListeners(e.ipcSendMsg),s.on(e.ipcSendMsg,((n,s)=>{console.log("[ipcRenderer] [socketMsgStart] result:",s),this.messageString=s,n.sender.send(e.hello,"electron-egg")})),s.removeAllListeners(n.window1ToWindow2),s.on(n.window1ToWindow2,((e,n)=>{this.$message.info(n)}))},sendMsgStart(){s.send(e.ipcSendMsg,{type:"start",content:"开始"})},sendMsgStop(){s.send(e.ipcSendMsg,{type:"end",content:""})},handleInvoke(){s.invoke(e.ipcInvokeMsg,"异步-回调").then((e=>{console.log("r:",e),this.message1=e}))},async handleInvoke2(){const n=await s.invoke(e.ipcInvokeMsg,"异步");console.log("msg:",n),this.message2=n},handleSendSync(){const n=s.sendSync(e.ipcSendSyncMsg,"同步");this.message3=n},sendTosubWindow(){s.invoke(e.getWCid,"main").then((e=>{this.mainWCid=e,s.sendTo(this.mainWCid,n.window2ToWindow1,"窗口2 通过 sendTo 给主窗口发送消息")}))}}},p=e=>(r("data-v-54ef5770"),e=e(),k(),e),v={id:"app-base-subwindow-ipc"},f=p((()=>d("div",{class:"one-block-1"},[d("span",null," 1. 发送异步消息 ")],-1))),S={class:"one-block-2"},h=p((()=>d("p",null,null,-1))),w=p((()=>d("div",{class:"one-block-1"},[d("span",null," 2. 同步消息(不推荐,阻塞执行) ")],-1))),C={class:"one-block-2"},b=p((()=>d("div",{class:"one-block-1"},[d("span",null," 3. 长消息: 服务端持续向前端页面发消息 ")],-1))),_={class:"one-block-2"},M=p((()=>d("div",{class:"one-block-1"},[d("span",null," 4. 多窗口通信:窗口之间互相通信 ")],-1))),W={class:"one-block-2"};const y=o(m,[["render",function(e,n,s,o,r,k){const m=a("a-button"),p=a("a-space");return l(),i("div",v,[f,d("div",S,[t(p,null,{default:c((()=>[t(m,{onClick:k.handleInvoke},{default:c((()=>[g("发送 - 回调")])),_:1},8,["onClick"]),g(" 结果:"+u(r.message1),1)])),_:1}),h,t(p,null,{default:c((()=>[t(m,{onClick:k.handleInvoke2},{default:c((()=>[g("发送 - async/await")])),_:1},8,["onClick"]),g(" 结果:"+u(r.message2),1)])),_:1})]),w,d("div",C,[t(p,null,{default:c((()=>[t(m,{onClick:k.handleSendSync},{default:c((()=>[g("同步消息")])),_:1},8,["onClick"]),g(" 结果:"+u(r.message3),1)])),_:1})]),b,d("div",_,[t(p,null,{default:c((()=>[t(m,{onClick:k.sendMsgStart},{default:c((()=>[g("开始")])),_:1},8,["onClick"]),t(m,{onClick:k.sendMsgStop},{default:c((()=>[g("结束")])),_:1},8,["onClick"]),g(" 结果:"+u(r.messageString),1)])),_:1})]),M,d("div",W,[t(p,null,{default:c((()=>[t(m,{onClick:n[0]||(n[0]=e=>k.sendTosubWindow())},{default:c((()=>[g("向主窗口发消息")])),_:1})])),_:1})])])}],["__scopeId","data-v-54ef5770"]]);export{y as default};
|
||||
1
public/dist/assets/Ipc-dea63cd8.js
vendored
Normal file
1
public/dist/assets/Ipc-dea63cd8.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as e,s as n}from"./main-ce25b28f.js";import{i as s}from"./ipcRenderer-5e19eaee.js";import{_ as o,h as i,r as a,o as d,b as l,g as t,a as c,w,e as g,t as r,p,f as u}from"./index-c01cca1d.js";const k={data:()=>({messageString:"",message1:"",message2:"",message3:"",windowName:"window-ipc",newWcId:0,views:[{type:"vue",content:"#/special/subwindow",windowName:"window-ipc",windowTitle:"ipc window"}]}),mounted(){this.init()},methods:{init(){s.removeAllListeners(e.ipcSendMsg),s.on(e.ipcSendMsg,((n,s)=>{console.log("[ipcRenderer] [socketMsgStart] result:",s),this.messageString=s,n.sender.send(e.hello,"electron-egg")})),s.removeAllListeners(n.window2ToWindow1),s.on(n.window2ToWindow1,((e,n)=>{this.$message.info(n)}))},sendMsgStart(){s.send(e.ipcSendMsg,{type:"start",content:"开始"})},sendMsgStop(){s.send(e.ipcSendMsg,{type:"end",content:""})},handleInvoke(){s.invoke(e.ipcInvokeMsg,"异步-回调").then((e=>{console.log("r:",e),this.message1=e}))},async handleInvoke2(){const n=await s.invoke(e.ipcInvokeMsg,"异步");console.log("msg:",n),this.message2=n},handleSendSync(){const n=s.sendSync(e.ipcSendSyncMsg,"同步");this.message3=n},createWindow(n){s.invoke(e.createWindow,i(this.views[n])).then((e=>{console.log("[createWindow] id:",e)}))},async sendTosubWindow(){this.newWcId=await s.invoke(e.getWCid,this.windowName),s.sendTo(this.newWcId,n.window1ToWindow2,"窗口1通过 sendTo 给窗口2发送消息")}}},m=e=>(p("data-v-227d95f1"),e=e(),u(),e),v={id:"app-base-socket-ipc"},f=m((()=>t("div",{class:"one-block-1"},[t("span",null," 1. 发送异步消息 ")],-1))),h={class:"one-block-2"},S=m((()=>t("p",null,null,-1))),_=m((()=>t("div",{class:"one-block-1"},[t("span",null," 2. 同步消息(不推荐,阻塞执行) ")],-1))),b={class:"one-block-2"},C=m((()=>t("div",{class:"one-block-1"},[t("span",null," 3. 长消息: 服务端持续向前端页面发消息 ")],-1))),W={class:"one-block-2"},M=m((()=>t("div",{class:"one-block-1"},[t("span",null," 4. 多窗口通信:子窗口与主进程通信,子窗口互相通信 ")],-1))),y={class:"one-block-2"};const I=o(k,[["render",function(e,n,s,o,i,p){const u=a("a-button"),k=a("a-space");return d(),l("div",v,[f,t("div",h,[c(k,null,{default:w((()=>[c(u,{onClick:p.handleInvoke},{default:w((()=>[g("发送 - 回调")])),_:1},8,["onClick"]),g(" 结果:"+r(i.message1),1)])),_:1}),S,c(k,null,{default:w((()=>[c(u,{onClick:p.handleInvoke2},{default:w((()=>[g("发送 - async/await")])),_:1},8,["onClick"]),g(" 结果:"+r(i.message2),1)])),_:1})]),_,t("div",b,[c(k,null,{default:w((()=>[c(u,{onClick:p.handleSendSync},{default:w((()=>[g("同步消息")])),_:1},8,["onClick"]),g(" 结果:"+r(i.message3),1)])),_:1})]),C,t("div",W,[c(k,null,{default:w((()=>[c(u,{onClick:p.sendMsgStart},{default:w((()=>[g("开始")])),_:1},8,["onClick"]),c(u,{onClick:p.sendMsgStop},{default:w((()=>[g("结束")])),_:1},8,["onClick"]),g(" 结果:"+r(i.messageString),1)])),_:1})]),M,t("div",y,[c(k,null,{default:w((()=>[c(u,{onClick:n[0]||(n[0]=e=>p.createWindow(0))},{default:w((()=>[g("打开新窗口2")])),_:1}),c(u,{onClick:n[1]||(n[1]=e=>p.sendTosubWindow())},{default:w((()=>[g("向新窗口2发消息")])),_:1})])),_:1})])])}],["__scopeId","data-v-227d95f1"]]);export{I as default};
|
||||
BIN
public/dist/assets/Ipc-dea63cd8.js.gz
vendored
Normal file
BIN
public/dist/assets/Ipc-dea63cd8.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Ipc-f792091f.js
vendored
1
public/dist/assets/Ipc-f792091f.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as e,s as n}from"./main-3bb0017c.js";import{i as s}from"./ipcRenderer-5e19eaee.js";import{_ as o,h as i,r as a,o as d,b as l,g as t,a as c,w,e as g,t as r,p as u,f as p}from"./index-f283ba7d.js";const k={data:()=>({messageString:"",message1:"",message2:"",message3:"",windowName:"window-ipc",newWcId:0,views:[{type:"vue",content:"#/special/subwindow",windowName:"window-ipc",windowTitle:"ipc window"}]}),mounted(){this.init()},methods:{init(){s.removeAllListeners(e.ipcSendMsg),s.on(e.ipcSendMsg,((n,s)=>{console.log("[ipcRenderer] [socketMsgStart] result:",s),this.messageString=s,n.sender.send(e.hello,"electron-egg")})),s.removeAllListeners(n.window2ToWindow1),s.on(n.window2ToWindow1,((e,n)=>{this.$message.info(n)}))},sendMsgStart(){s.send(e.ipcSendMsg,{type:"start",content:"开始"})},sendMsgStop(){s.send(e.ipcSendMsg,{type:"end",content:""})},handleInvoke(){s.invoke(e.ipcInvokeMsg,"异步-回调").then((e=>{console.log("r:",e),this.message1=e}))},async handleInvoke2(){const n=await s.invoke(e.ipcInvokeMsg,"异步");console.log("msg:",n),this.message2=n},handleSendSync(){const n=s.sendSync(e.ipcSendSyncMsg,"同步");this.message3=n},createWindow(n){s.invoke(e.createWindow,i(this.views[n])).then((e=>{console.log("[createWindow] id:",e)}))},async sendTosubWindow(){this.newWcId=await s.invoke(e.getWCid,this.windowName),s.sendTo(this.newWcId,n.window1ToWindow2,"窗口1通过 sendTo 给窗口2发送消息")}}},m=e=>(u("data-v-227d95f1"),e=e(),p(),e),v={id:"app-base-socket-ipc"},f=m((()=>t("div",{class:"one-block-1"},[t("span",null," 1. 发送异步消息 ")],-1))),h={class:"one-block-2"},S=m((()=>t("p",null,null,-1))),_=m((()=>t("div",{class:"one-block-1"},[t("span",null," 2. 同步消息(不推荐,阻塞执行) ")],-1))),b={class:"one-block-2"},C=m((()=>t("div",{class:"one-block-1"},[t("span",null," 3. 长消息: 服务端持续向前端页面发消息 ")],-1))),W={class:"one-block-2"},M=m((()=>t("div",{class:"one-block-1"},[t("span",null," 4. 多窗口通信:子窗口与主进程通信,子窗口互相通信 ")],-1))),y={class:"one-block-2"};const I=o(k,[["render",function(e,n,s,o,i,u){const p=a("a-button"),k=a("a-space");return d(),l("div",v,[f,t("div",h,[c(k,null,{default:w((()=>[c(p,{onClick:u.handleInvoke},{default:w((()=>[g("发送 - 回调")])),_:1},8,["onClick"]),g(" 结果:"+r(i.message1),1)])),_:1}),S,c(k,null,{default:w((()=>[c(p,{onClick:u.handleInvoke2},{default:w((()=>[g("发送 - async/await")])),_:1},8,["onClick"]),g(" 结果:"+r(i.message2),1)])),_:1})]),_,t("div",b,[c(k,null,{default:w((()=>[c(p,{onClick:u.handleSendSync},{default:w((()=>[g("同步消息")])),_:1},8,["onClick"]),g(" 结果:"+r(i.message3),1)])),_:1})]),C,t("div",W,[c(k,null,{default:w((()=>[c(p,{onClick:u.sendMsgStart},{default:w((()=>[g("开始")])),_:1},8,["onClick"]),c(p,{onClick:u.sendMsgStop},{default:w((()=>[g("结束")])),_:1},8,["onClick"]),g(" 结果:"+r(i.messageString),1)])),_:1})]),M,t("div",y,[c(k,null,{default:w((()=>[c(p,{onClick:n[0]||(n[0]=e=>u.createWindow(0))},{default:w((()=>[g("打开新窗口2")])),_:1}),c(p,{onClick:n[1]||(n[1]=e=>u.sendTosubWindow())},{default:w((()=>[g("向新窗口2发消息")])),_:1})])),_:1})])])}],["__scopeId","data-v-227d95f1"]]);export{I as default};
|
||||
1
public/dist/assets/Menu-451835af.js
vendored
Normal file
1
public/dist/assets/Menu-451835af.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as e,r as a,o as n,c as t,w as i,a as o,b as r,d as m,F as s,g as p,t as l}from"./index-c01cca1d.js";const u={framework:{menu_100:{icon:"profile",title:"通信",pageName:"FrameworkSocketIpc",params:{}},menu_101:{icon:"profile",title:"http服务",pageName:"FrameworkSocketHttpServer",params:{}},menu_102:{icon:"profile",title:"socket服务",pageName:"FrameworkSocketSocketServer",params:{}},menu_103:{icon:"profile",title:"json数据库",pageName:"FrameworkJsonDBIndex",params:{}},menu_104:{icon:"profile",title:"sqlite数据库",pageName:"FrameworkSqliteDBIndex",params:{}},menu_105:{icon:"profile",title:"任务",pageName:"FrameworkJobsIndex",params:{}},menu_106:{icon:"profile",title:"自动更新",pageName:"FrameworkUpdaterIndex",params:{}},menu_107:{icon:"profile",title:"软件调用",pageName:"FrameworkSoftwareIndex",params:{}},menu_109:{icon:"profile",title:"测试",pageName:"FrameworkTestApiIndex",params:{}}},os:{menu_100:{icon:"profile",title:"文件",pageName:"OsFileIndex",params:{}},menu_101:{icon:"profile",title:"视图",pageName:"OsWindowViewIndex",params:{}},menu_102:{icon:"profile",title:"窗口",pageName:"OsWindowIndex",params:{}},menu_103:{icon:"profile",title:"桌面通知",pageName:"OsNotificationIndex",params:{}},menu_104:{icon:"profile",title:"电源监控",pageName:"OsPowerMonitorIndex",params:{}},menu_105:{icon:"profile",title:"屏幕信息",pageName:"OsScreenIndex",params:{}},menu_106:{icon:"profile",title:"系统主题",pageName:"OsThemeIndex",params:{}},menu_110:{icon:"profile",title:"图片",pageName:"OsFilePic",params:{}}},hardware:{menu_100:{icon:"profile",title:"打印机",pageName:"HardwarePrinterIndex",params:{}}},effect:{menu_100:{icon:"profile",title:"视频播放器",pageName:"EffectVideoIndex",params:{}},menu_110:{icon:"profile",title:"登录",pageName:"EffectLoginIndex",params:{}}},cross:{menu_100:{icon:"profile",title:"go服务",pageName:"CrossGoIndex",params:{}},menu_110:{icon:"profile",title:"java服务",pageName:"CrossJavaIndex",params:{}},menu_120:{icon:"profile",title:"python服务",pageName:"CrossPythonIndex",params:{}}}};const c=e({props:{id:{type:String,default:""}},data:()=>({menu:{},current:"menu_100",keys:[]}),watch:{id:function(){console.log("watch id ----- ",this.id),this.current="menu_100",this.menuHandle()}},created(){},mounted(){this.menuHandle()},methods:{menuHandle(){console.log("menu ------ id:",this.id),this.menu=u[this.id];const e=this.menu[this.current];this.$router.push({name:e.pageName,params:e.params})},changeMenu(e){console.log("changeMenu e:",e),this.current=e.key}}},[["render",function(e,u,c,d,f,g){const _=a("router-link"),h=a("a-menu-item"),N=a("a-menu"),k=a("a-layout-sider"),w=a("router-view"),x=a("a-layout-content"),I=a("a-layout");return n(),t(I,{id:"app-menu"},{default:i((()=>[o(k,{theme:"light",class:"layout-sider"},{default:i((()=>[o(N,{theme:"light",mode:"inline",selectedKeys:[f.current],onClick:g.changeMenu},{default:i((()=>[(n(!0),r(s,null,m(f.menu,((e,a)=>(n(),t(h,{key:a},{default:i((()=>[o(_,{to:{name:e.pageName,params:e.params}},{default:i((()=>[p("span",null,l(e.title),1)])),_:2},1032,["to"])])),_:2},1024)))),128))])),_:1},8,["selectedKeys","onClick"])])),_:1}),o(I,null,{default:i((()=>[o(x,null,{default:i((()=>[o(w)])),_:1})])),_:1})])),_:1})}],["__scopeId","data-v-cb2fcd1f"]]);export{c as default};
|
||||
BIN
public/dist/assets/Menu-451835af.js.gz
vendored
Normal file
BIN
public/dist/assets/Menu-451835af.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Pic-38ac96b3.js
vendored
Normal file
1
public/dist/assets/Pic-38ac96b3.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as s}from"./main-ce25b28f.js";import{i as a}from"./ipcRenderer-5e19eaee.js";import{_ as e,r as t,o as i,b as c,g as o,a as l,w as n,e as p,p as d,f as r}from"./index-c01cca1d.js";const f={data:()=>({picPath:"https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"}),methods:{selectPic(){a.invoke(s.selectPic,{}).then((s=>{this.picPath=s}))}}},u=s=>(d("data-v-d083fee8"),s=s(),r(),s),m={id:"os-file-pic"},h=u((()=>o("div",{class:"one-block-1"},[o("span",null," 1. 加载本机图片 ")],-1))),v={class:"one-block-2"},P=u((()=>o("p",null,null,-1)));const j=e(f,[["render",function(s,a,e,d,r,f){const u=t("a-button"),j=t("a-space"),k=t("a-image");return i(),c("div",m,[h,o("div",v,[l(j,null,{default:n((()=>[l(u,{onClick:a[0]||(a[0]=s=>f.selectPic(0))},{default:n((()=>[p("选择图片")])),_:1})])),_:1}),P,l(k,{width:500,src:r.picPath},null,8,["src"])])])}],["__scopeId","data-v-d083fee8"]]);export{j as default};
|
||||
BIN
public/dist/assets/SocketServer-14a819df.js.gz
vendored
Normal file
BIN
public/dist/assets/SocketServer-14a819df.js.gz
vendored
Normal file
Binary file not shown.
1
public/dist/assets/Window-73e498f2.js
vendored
1
public/dist/assets/Window-73e498f2.js
vendored
@@ -1 +0,0 @@
|
||||
import{i as o}from"./main-3bb0017c.js";import{i as a}from"./ipcRenderer-5e19eaee.js";import{_ as e,r as i,o as t,b as s,g as n,a as r,w as d,t as l,e as m}from"./index-f283ba7d.js";const g={id:"effect-login-window"},p={class:"block-1"},c={key:1};const u=e({data:()=>({loading:!1,loginText:"正在登陆......"}),methods:{login(){this.loading=!0,setTimeout((()=>{this.$router.push({name:"Framework",params:{}}),a.invoke(o.restoreWindow,{width:980,height:650}).then((o=>{}))}),2e3)}}},[["render",function(o,a,e,u,f,h){const k=i("a-button");return t(),s("div",g,[n("div",p,[f.loading?(t(),s("span",c,l(f.loginText),1)):(t(),s("a",{key:0,onClick:a[0]||(a[0]=(...o)=>h.login&&h.login(...o))},[r(k,{type:"primary"},{default:d((()=>[m(" 登录 ")])),_:1})]))])])}],["__scopeId","data-v-be47062b"]]);export{u as default};
|
||||
1
public/dist/assets/Window-9bd34d76.js
vendored
Normal file
1
public/dist/assets/Window-9bd34d76.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{i as o}from"./main-ce25b28f.js";import{i as a}from"./ipcRenderer-5e19eaee.js";import{_ as e,r as i,o as t,b as s,g as n,a as r,w as d,t as l,e as m}from"./index-c01cca1d.js";const g={id:"effect-login-window"},p={class:"block-1"},c={key:1};const f=e({data:()=>({loading:!1,loginText:"正在登陆......"}),methods:{login(){this.loading=!0,setTimeout((()=>{this.$router.push({name:"Framework",params:{}}),a.invoke(o.restoreWindow,{width:980,height:650}).then((o=>{}))}),2e3)}}},[["render",function(o,a,e,f,h,u){const w=i("a-button");return t(),s("div",g,[n("div",p,[h.loading?(t(),s("span",c,l(h.loginText),1)):(t(),s("a",{key:0,onClick:a[0]||(a[0]=(...o)=>u.login&&u.login(...o))},[r(w,{type:"primary"},{default:d((()=>[m(" 登录 ")])),_:1})]))])])}],["__scopeId","data-v-be47062b"]]);export{f as default};
|
||||
1
public/dist/assets/index-0d31d5fa.js
vendored
1
public/dist/assets/index-0d31d5fa.js
vendored
File diff suppressed because one or more lines are too long
BIN
public/dist/assets/index-3bb9c4c1.js.gz
vendored
Normal file
BIN
public/dist/assets/index-3bb9c4c1.js.gz
vendored
Normal file
Binary file not shown.
BIN
public/dist/assets/store2-127baa44.js.gz
vendored
Normal file
BIN
public/dist/assets/store2-127baa44.js.gz
vendored
Normal file
Binary file not shown.
3
public/dist/assets/store2-c97601fe.js
vendored
3
public/dist/assets/store2-c97601fe.js
vendored
@@ -1,3 +0,0 @@
|
||||
import{i as t,j as e}from"./index-f283ba7d.js";var r,n,i,s,a,o={exports:{}};
|
||||
/*! store2 - v2.14.2 - 2022-07-18
|
||||
* Copyright (c) 2022 Nathan Bubna; Licensed (MIT OR GPL-3.0) */r=o,n=t,i=t&&t.define,(a=(s={version:"2.14.2",areas:{},apis:{},nsdelim:".",inherit:function(t,e){for(var r in t)e.hasOwnProperty(r)||Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));return e},stringify:function(t,e){return void 0===t||"function"==typeof t?t+"":JSON.stringify(t,e||s.replace)},parse:function(t,e){try{return JSON.parse(t,e||s.revive)}catch(r){return t}},fn:function(t,e){for(var r in s.storeAPI[t]=e,s.apis)s.apis[r][t]=e},get:function(t,e){return t.getItem(e)},set:function(t,e,r){t.setItem(e,r)},remove:function(t,e){t.removeItem(e)},key:function(t,e){return t.key(e)},length:function(t){return t.length},clear:function(t){t.clear()},Store:function(t,e,r){var n=s.inherit(s.storeAPI,(function(t,e,r){return 0===arguments.length?n.getAll():"function"==typeof e?n.transact(t,e,r):void 0!==e?n.set(t,e,r):"string"==typeof t||"number"==typeof t?n.get(t):"function"==typeof t?n.each(t):t?n.setAll(t,e):n.clear()}));n._id=t;try{var i="__store2_test";e.setItem(i,"ok"),n._area=e,e.removeItem(i)}catch(a){n._area=s.storage("fake")}return n._ns=r||"",s.areas[t]||(s.areas[t]=n._area),s.apis[n._ns+n._id]||(s.apis[n._ns+n._id]=n),n},storeAPI:{area:function(t,e){var r=this[t];return r&&r.area||(r=s.Store(t,e,this._ns),this[t]||(this[t]=r)),r},namespace:function(t,e,r){if(r=r||this._delim||s.nsdelim,!t)return this._ns?this._ns.substring(0,this._ns.length-r.length):"";var n=t,i=this[n];if(!(i&&i.namespace||((i=s.Store(this._id,this._area,this._ns+n+r))._delim=r,this[n]||(this[n]=i),e)))for(var a in s.areas)i.area(a,s.areas[a]);return i},isFake:function(t){return t?(this._real=this._area,this._area=s.storage("fake")):!1===t&&(this._area=this._real||this._area),"fake"===this._area.name},toString:function(){return"store"+(this._ns?"."+this.namespace():"")+"["+this._id+"]"},has:function(t){return this._area.has?this._area.has(this._in(t)):!!(this._in(t)in this._area)},size:function(){return this.keys().length},each:function(t,e){for(var r=0,n=s.length(this._area);r<n;r++){var i=this._out(s.key(this._area,r));if(void 0!==i&&!1===t.call(this,i,this.get(i),e))break;n>s.length(this._area)&&(n--,r--)}return e||this},keys:function(t){return this.each((function(t,e,r){r.push(t)}),t||[])},get:function(t,e){var r,n=s.get(this._area,this._in(t));return"function"==typeof e&&(r=e,e=null),null!==n?s.parse(n,r):null!=e?e:n},getAll:function(t){return this.each((function(t,e,r){r[t]=e}),t||{})},transact:function(t,e,r){var n=this.get(t,r),i=e(n);return this.set(t,void 0===i?n:i),this},set:function(t,e,r){var n,i=this.get(t);return null!=i&&!1===r?e:("function"==typeof r&&(n=r,r=void 0),s.set(this._area,this._in(t),s.stringify(e,n),r)||i)},setAll:function(t,e){var r,n;for(var i in t)n=t[i],this.set(i,n,e)!==n&&(r=!0);return r},add:function(t,e,r){var n=this.get(t);if(n instanceof Array)e=n.concat(e);else if(null!==n){var i=typeof n;if(i===typeof e&&"object"===i){for(var a in e)n[a]=e[a];e=n}else e=n+e}return s.set(this._area,this._in(t),s.stringify(e,r)),e},remove:function(t,e){var r=this.get(t,e);return s.remove(this._area,this._in(t)),r},clear:function(){return this._ns?this.each((function(t){s.remove(this._area,this._in(t))}),1):s.clear(this._area),this},clearAll:function(){var t=this._area;for(var e in s.areas)s.areas.hasOwnProperty(e)&&(this._area=s.areas[e],this.clear());return this._area=t,this},_in:function(t){return"string"!=typeof t&&(t=s.stringify(t)),this._ns?this._ns+t:t},_out:function(t){return this._ns?t&&0===t.indexOf(this._ns)?t.substring(this._ns.length):void 0:t}},storage:function(t){return s.inherit(s.storageAPI,{items:{},name:t})},storageAPI:{length:0,has:function(t){return this.items.hasOwnProperty(t)},key:function(t){var e=0;for(var r in this.items)if(this.has(r)&&t===e++)return r},setItem:function(t,e){this.has(t)||this.length++,this.items[t]=e},removeItem:function(t){this.has(t)&&(delete this.items[t],this.length--)},getItem:function(t){return this.has(t)?this.items[t]:null},clear:function(){for(var t in this.items)this.removeItem(t)}}}).Store("local",function(){try{return localStorage}catch(t){}}())).local=a,a._=s,a.area("session",function(){try{return sessionStorage}catch(t){}}()),a.area("page",s.storage("page")),"function"==typeof i&&void 0!==i.amd?i("store2",[],(function(){return a})):r.exports?r.exports=a:(n.store&&(s.conflict=n.store),n.store=a);const h=e(o.exports);export{h as s};
|
||||
107
public/dist/index.html
vendored
107
public/dist/index.html
vendored
@@ -1,107 +0,0 @@
|
||||
<!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, initial-scale=1.0, user-scalable=no, maximum-scale=1.0, minimum-scale=1.0" />
|
||||
<title></title>
|
||||
<!-- 优化:vue渲染未完成之前,先加一个css动画 -->
|
||||
<style>
|
||||
#loadingPage {
|
||||
background-color: #dedede;
|
||||
font-size: 12px;
|
||||
}
|
||||
.base {
|
||||
height: 9em;
|
||||
left: 50%;
|
||||
margin: -7.5em;
|
||||
padding: 3em;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 9em;
|
||||
transform: rotateX(45deg) rotateZ(45deg);
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.cube,
|
||||
.cube:after,
|
||||
.cube:before {
|
||||
content: '';
|
||||
float: left;
|
||||
height: 3em;
|
||||
position: absolute;
|
||||
width: 3em;
|
||||
}
|
||||
/* Top */
|
||||
.cube {
|
||||
background-color: #06cf68;
|
||||
position: relative;
|
||||
transform: translateZ(3em);
|
||||
transform-style: preserve-3d;
|
||||
transition: .25s;
|
||||
box-shadow: 13em 13em 1.5em rgba(0, 0, 0, 0.1);
|
||||
animation: anim 1s infinite;
|
||||
}
|
||||
.cube:after {
|
||||
background-color: #05a151;
|
||||
transform: rotateX(-90deg) translateY(3em);
|
||||
transform-origin: 100% 100%;
|
||||
}
|
||||
.cube:before {
|
||||
background-color: #026934;
|
||||
transform: rotateY(90deg) translateX(3em);
|
||||
transform-origin: 100% 0;
|
||||
}
|
||||
.cube:nth-child(1) {
|
||||
animation-delay: 0.05s;
|
||||
}
|
||||
.cube:nth-child(2) {
|
||||
animation-delay: 0.1s;
|
||||
}
|
||||
.cube:nth-child(3) {
|
||||
animation-delay: 0.15s;
|
||||
}
|
||||
.cube:nth-child(4) {
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
.cube:nth-child(5) {
|
||||
animation-delay: 0.25s;
|
||||
}
|
||||
.cube:nth-child(6) {
|
||||
animation-delay: 0.3s;
|
||||
}
|
||||
.cube:nth-child(7) {
|
||||
animation-delay: 0.35s;
|
||||
}
|
||||
.cube:nth-child(8) {
|
||||
animation-delay: 0.4s;
|
||||
}
|
||||
.cube:nth-child(9) {
|
||||
animation-delay: 0.45s;
|
||||
}
|
||||
@keyframes anim {
|
||||
50% {
|
||||
transform: translateZ(0.5em);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script type="module" crossorigin src="./assets/index-f283ba7d.js"></script>
|
||||
<link rel="stylesheet" href="./assets/index-244dcb81.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="loadingPage">
|
||||
<div class='base'>
|
||||
<div class='cube'></div>
|
||||
<div class='cube'></div>
|
||||
<div class='cube'></div>
|
||||
<div class='cube'></div>
|
||||
<div class='cube'></div>
|
||||
<div class='cube'></div>
|
||||
<div class='cube'></div>
|
||||
<div class='cube'></div>
|
||||
<div class='cube'></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="app"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
BIN
public/dist/index.html.gz
vendored
BIN
public/dist/index.html.gz
vendored
Binary file not shown.
28
python/fastapi-demo.py
Normal file
28
python/fastapi-demo.py
Normal file
@@ -0,0 +1,28 @@
|
||||
import argparse
|
||||
import uvicorn
|
||||
from fastapi import FastAPI
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
# argparse
|
||||
parser = argparse.ArgumentParser(description='Process some integers.')
|
||||
parser.add_argument('--port', type=int, default=7074, help='The port number.')
|
||||
args = parser.parse_args()
|
||||
|
||||
@app.get("/")
|
||||
async def index():
|
||||
return {"message": "Hello World"}
|
||||
|
||||
@app.get("/api/hello")
|
||||
async def hello():
|
||||
return {
|
||||
"app_name": "FastAPI框架学习",
|
||||
"app_version": "v0.0.1"
|
||||
}
|
||||
|
||||
if __name__ == "__main__":
|
||||
# uvicorn会多创建一个进程,并且stdio独立于控制台,如果(开发时)出现进程没有关闭,可尝试关闭终端
|
||||
uvicorn.run(app, host="127.0.0.1", port=args.port)
|
||||
|
||||
# 控制台默认关闭输出信息,如果想要查看控制台输出,请单独启动服务 npm run dev-python
|
||||
print("python server is running at port:", args.port)
|
||||
57
python/main.py
Normal file
57
python/main.py
Normal file
@@ -0,0 +1,57 @@
|
||||
from flask import Flask, request, jsonify
|
||||
from flask_cors import CORS
|
||||
import argparse
|
||||
import signal
|
||||
import sys
|
||||
|
||||
# flask-demo
|
||||
|
||||
# argparse
|
||||
parser = argparse.ArgumentParser(description='Process some integers.')
|
||||
parser.add_argument('--port', type=int, default=7074, help='The port number.')
|
||||
args = parser.parse_args()
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# 配置 CORS,允许所有来源
|
||||
CORS(app)
|
||||
|
||||
# 定义路由和处理器
|
||||
@app.route('/', methods=['GET'])
|
||||
def index():
|
||||
name = request.args.get('name', 'World')
|
||||
return jsonify({'message': f'Hello, {name}!'}), 200
|
||||
|
||||
|
||||
@app.route('/api/hello', methods=['GET'])
|
||||
def hello():
|
||||
name = request.args.get('name', 'World')
|
||||
return jsonify({'message': f'Hello, {name}!'}), 200
|
||||
|
||||
# 通过信号来退出服务,否则会出现终端显示退出后,实际进程仍在运行
|
||||
# 定义信号处理函数
|
||||
def signal_handler(sig, frame):
|
||||
print("[python] [flask] Received signal to terminate the server:", sig)
|
||||
sys.exit(0)
|
||||
|
||||
# 关闭 Flask 应用
|
||||
# func = request.environ.get('werkzeug.server.shutdown')
|
||||
# if func is None:
|
||||
# func = lambda: None
|
||||
# func()
|
||||
|
||||
# 退出主线程
|
||||
# threading.main_thread().exit()
|
||||
|
||||
# 注册信号处理函数
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 以api方式启动服务会出现警告,请忽略
|
||||
app.run(port=args.port)
|
||||
|
||||
# 或许flask内置的stdio与node.js stdio有冲突,导致控制台无法显示信息。
|
||||
# 如果想要查看控制台输出,请单独启动服务 npm run dev-python
|
||||
print("python server is running at port:", args.port)
|
||||
|
||||
2
python/requirements.txt
Normal file
2
python/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Flask==3.0.2
|
||||
Flask_Cors==4.0.0
|
||||
BIN
requirements.txt
Normal file
BIN
requirements.txt
Normal file
Binary file not shown.
Reference in New Issue
Block a user