oa助手类工具
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

307 lines
13 KiB

const { ipcMain, app, Menu, Tray, BrowserWindow, dialog, Notification } = require('electron')
const path = require('path')
const fs = require('fs');
const webdata = require(path.join(__dirname, 'web/data.js'));
const libdata = require(path.join(__dirname, 'data.js'));
const git = require(path.join(__dirname, 'git.js'));
const mainwin = require(path.join(__dirname, 'main.js'));
let tray = null
ipcMain.on('new-notification', (event, title, body, url) => {
let n = new Notification({
title: title,
body: body,
})
n.on('click', function () {
console.log(url);
if (url) {
mainwin.MainWindow.loadURL(url)
mainwin.MainWindow.show();
}
})
n.show()
});
ipcMain.on('new-task-notification', (event) => {
(new Notification({
title: "可能有新的任务",
body: `当前总任务数${libdata.GetConfig().DaibanCount}`
})).show()
});
ipcMain.on('test', (event, a, b, c) => {
console.log(event, a, b, c)
})
let isUpdate = false;
ipcMain.on('put-in-tray', (event) => {
if (!tray) {
mainwin.MainWindow.isClose = false;
tray = new Tray(path.join(__dirname, '../windows-icon.png'))
tray.on("double-click", function () {
mainwin.MainWindow.show();
})
tray.on("right-click", function () {
let data = webdata.getTask()
let project_map = webdata.getProjectMap();
let ot = JSON.parse(fs.readFileSync(libdata.OpenTypeMapPath));
result = [];
for (var i in data) {
let submenu = [];
for (var k in data[i]) {
submenu.push({
label: data[i][k]["title"],
type: "submenu",
submenu: [
{
label: "查看详情",
click: (function () {
let id = data[i][k]["id"];
return function () {
mainwin.MainWindow.loadURL(`http://oa.ouxuan.net/task.php?a=x&num=work&show=we&mid=${id}`)
mainwin.MainWindow.show();
}
})()
},
{
label: "切换到该任务分支",
click: (function () {
let project_name = i;
let id = data[project_name][k]["id"];
let title = `${id}-${data[project_name][k]["title"]}`;
return function () {
if (!project_map[project_name] || project_map[project_name] == "") {
dialog.showErrorBox(`无法切换分支`, `该项目找不到所在路径(${project_name})`);
return;
}
const workingDirPath = project_map[project_name]
const simpleGit = require('simple-git')(workingDirPath);
git.autoCheckoutLocalBranch(simpleGit, title, function () {
console.log("autoCheckoutLocalBranch")
fs.copyFileSync(path.join(__dirname, '../res/post-commit'), path.join(workingDirPath, ".git//hooks/post-commit"))
if (ot[project_name] && ot[project_name] != "" && project_map[project_name] && project_map[project_name] != "") {
var exec = require('child_process').execFile;
exec("cmd.exe", ["/c", "start", "", ot[project_name], project_map[project_name]], function (err, data) {
if (err) console.log(err)
console.log(data.toString());
});
}
}, function (err) {
dialog.showErrorBox(`无法切换分支`, err);
})
}
})()
},
]
});
}
let project_dir = project_map[i]
if (!project_dir) {
project_dir = ""
} else {
project_dir = `(${project_dir})`
}
let project_opentype = ot[i]
if (!project_opentype) {
project_opentype = "(未设定)"
} else {
project_opentype = `(${project_opentype})`
}
let op = [
{
label: "关联项目路径" + project_dir,
click: (function (i) {
return function (menuItem, browserWindow, event) {
let project_map = JSON.parse(fs.readFileSync(libdata.ProjectMapPath));
let a = dialog.showOpenDialogSync({ properties: ['openDirectory'] })
if (a) {
project_map[i] = a[0]
fs.writeFileSync(libdata.ProjectMapPath, JSON.stringify(project_map))
}
}
})(i)
},
{
label: "关联程序" + project_opentype,
click: (function (i) {
return function (menuItem, browserWindow, event) {
ot = JSON.parse(fs.readFileSync(libdata.OpenTypeMapPath));
let a = dialog.showOpenDialogSync({ properties: ['openFile'] })
if (a) {
ot[i] = a[0]
fs.writeFileSync(libdata.OpenTypeMapPath, JSON.stringify(ot))
}
}
})(i)
},
,
{
label: "打开项目",
click: (function (i) {
return function (menuItem, browserWindow, event) {
let ot = JSON.parse(fs.readFileSync(libdata.OpenTypeMapPath));
let project_map = JSON.parse(fs.readFileSync(libdata.ProjectMapPath));
if (ot[i] && ot[i] != "" && project_map[i] && project_map[i] != "") {
var exec = require('child_process').execFile;
exec("cmd.exe", ["/c", "start", "", ot[i], project_map[i]], function (err, data) {
console.log(err)
console.log(data.toString());
});
}
}
})(i)
},
]
op = [
{
label: "项目操作",
type: "submenu",
submenu: op
},
{
type: "separator"
}
]
let item = {
label: i,
type: "submenu",
submenu: op.concat(submenu)
}
result.push(item);
}
tray.popUpContextMenu(Menu.buildFromTemplate(result.concat({
type: "separator"
},{
label: "添加任务",
click: function (menuItem, browserWindow, event) {
mainwin.MainWindow.loadURL(`http://oa.ouxuan.net/index.php?a=lum&m=input&d=flow&num=work&show=we`)
mainwin.MainWindow.show();
},
}, {
label: "加班申请",
click: function (menuItem, browserWindow, event) {
mainwin.MainWindow.loadURL(`http://oa.ouxuan.net/?a=lum&m=input&d=flow&num=jiaban&show=we`)
mainwin.MainWindow.show();
},
}, {
type: "separator"
}, {
label: "仅查看未完成",
type: "checkbox",
checked: libdata.GetConfig().TaskType == "wwc",
click: function (menuItem, browserWindow, event) {
var config = libdata.GetConfig()
config.TaskType = "my"
if (menuItem.checked) {
config.TaskType = "wwc"
}
libdata.SyncConfig(config)
mainwin.MainWindow.reload()
}
}, {
label: "检查更新",
click: function () {
if (isUpdate) {
dialog.showErrorBox(`正在更新`, "请稍后重试");
return
}
isUpdate = true;
let git_url = "https://git.ouxuan.net/3136352472/ouxuan.oa.git";
let workingDirPath = path.join(__dirname, "../../ouxuan.oa/");
let appDir = path.join(__dirname, "../../app/");
if (!fs.existsSync(workingDirPath)) {
fs.mkdirSync(workingDirPath)
const simpleGit = require('simple-git')(workingDirPath);
simpleGit.clone(git_url, workingDirPath, function (e) {
console.log(e)
require('sync-copydir')("resources/ouxuan.oa/", "resources/app/")
isUpdate = false;
dialog.showMessageBoxSync({
"message": "更新完成"
})
mainwin.MainWindow.isClose = true;
app.quit()
app.relaunch();
})
} else {
const simpleGit = require('simple-git')(workingDirPath);
simpleGit.checkIsRepo(function (err, ok) {
if (ok) {
simpleGit.pull(function (r, d) {
isUpdate = false;
if (d.files.length > 0) {
require('sync-copydir')("resources/ouxuan.oa/", "resources/app/")
dialog.showMessageBoxSync({
"message": "更新完成"
})
mainwin.MainWindow.isClose = true;
app.quit()
app.relaunch();
} else {
dialog.showMessageBoxSync({
"message": "无需更新"
})
}
})
} else {
isUpdate = false;
dialog.showErrorBox(`更新时发生错误`, workingDirPath + err);
}
});
}
}
}, {
label: "退出",
click: function () {
mainwin.MainWindow.isClose = true;
app.quit()
}
})))
})
}
})
// exports.createTrayWindow = function () {
// // Create the browser window.
// const mainWindow = new BrowserWindow({
// width: 300,
// height: 600,
// webPreferences: {
// preload: path.join(__dirname, 'web/tray.js')
// }
// })
// mainWindow.loadFile("res/tray.html")
// mainWindow.hide()
// }