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:
gaoshuaixing
2024-03-04 16:42:42 +08:00
87 changed files with 336 additions and 625 deletions

4
.gitignore vendored
View File

@@ -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/

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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()
})
}
}

View File

@@ -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
},
},
};

View File

@@ -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,
},
};
/**

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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]';

View File

@@ -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')
},
]
},
]

View File

@@ -142,6 +142,12 @@ export default {
title: 'java服务',
pageName: 'CrossJavaIndex',
params: {}
},
},
'menu_120' : {
icon: 'profile',
title: 'python服务',
pageName: 'CrossPythonIndex',
params: {}
},
},
}

View File

@@ -81,7 +81,7 @@
const cfg = {
method: 'get',
url: testApi,
params: { id: '1111111'},
params: { id: '111'},
timeout: 1000,
}
axios(cfg).then(res => {

View File

@@ -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>

View 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>

View File

@@ -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",

Binary file not shown.

View File

@@ -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};

View File

@@ -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};

Binary file not shown.

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
View 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}

View File

@@ -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

Binary file not shown.

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

Binary file not shown.

File diff suppressed because one or more lines are too long

1
public/dist/assets/Index-36bbde3b.css vendored Normal file
View 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}

File diff suppressed because one or more lines are too long

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

Binary file not shown.

BIN
public/dist/assets/Index-46bae197.js.gz vendored Normal file

Binary file not shown.

View File

@@ -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

Binary file not shown.

BIN
public/dist/assets/Index-5e799834.js.gz vendored Normal file

Binary file not shown.

View File

@@ -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
View 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

Binary file not shown.

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

Binary file not shown.

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
View 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

Binary file not shown.

View File

@@ -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
View 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

Binary file not shown.

1
public/dist/assets/Index-af0c3b59.css vendored Normal file
View 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}

View File

@@ -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
View 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

Binary file not shown.

View File

@@ -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};

View File

@@ -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

Binary file not shown.

View File

@@ -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};

View File

@@ -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
View 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

Binary file not shown.

1
public/dist/assets/Index-e9c7b9bd.js vendored Normal file
View 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

Binary file not shown.

BIN
public/dist/assets/Index-ea03b463.js.gz vendored Normal file

Binary file not shown.

View File

@@ -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};

View File

@@ -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};

View File

@@ -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};

View File

@@ -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

Binary file not shown.

View File

@@ -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
View 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

Binary file not shown.

View File

@@ -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
View 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

Binary file not shown.

1
public/dist/assets/Pic-38ac96b3.js vendored Normal file
View 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};

Binary file not shown.

View File

@@ -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
View 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};

File diff suppressed because one or more lines are too long

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

Binary file not shown.

View File

@@ -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
View File

@@ -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>

Binary file not shown.

28
python/fastapi-demo.py Normal file
View 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
View 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
View File

@@ -0,0 +1,2 @@
Flask==3.0.2
Flask_Cors==4.0.0

BIN
requirements.txt Normal file

Binary file not shown.