no message

This commit is contained in:
kuaifan 2021-07-09 17:35:12 +08:00
parent 83b5140b48
commit 276654a7e3
14 changed files with 28 additions and 237 deletions

2
electron/build.js vendored
View File

@ -146,7 +146,7 @@ if (argv[2] === "--build") {
}); });
} else { } else {
fs.writeFileSync(devloadCachePath, formatUrl("127.0.0.1:" + env.parsed.APP_PORT), 'utf8'); fs.writeFileSync(devloadCachePath, formatUrl("127.0.0.1:" + env.parsed.APP_PORT), 'utf8');
child_process.spawn("mix", ["watch", "--hot"], {stdio: "inherit"}); child_process.spawn("mix", ["watch", "--hot", "--", "--env", "--electron"], {stdio: "inherit"});
child_process.spawn("npm", ["run", "start-quiet"], {stdio: "inherit", cwd: "electron"}); child_process.spawn("npm", ["run", "start-quiet"], {stdio: "inherit", cwd: "electron"});
} }

View File

@ -12,8 +12,6 @@
<title>Dootask</title> <title>Dootask</title>
<link rel="stylesheet" type="text/css" href="./css/app.css"> <link rel="stylesheet" type="text/css" href="./css/app.css">
<link rel="stylesheet" type="text/css" href="./css/iview.css"> <link rel="stylesheet" type="text/css" href="./css/iview.css">
<script src="./js/jquery.min.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/language.all.js"></script> <script src="./js/language.all.js"></script>
<script src="./js/scroll-into-view.min.js"></script> <script src="./js/scroll-into-view.min.js"></script>
<script src="./config.js"></script> <script src="./config.js"></script>

198
electron/index.js vendored
View File

@ -1,198 +0,0 @@
const fs = require('fs');
const path = require('path')
const inquirer = require('inquirer');
const child_process = require('child_process');
const config = require('../package.json')
const argv = process.argv;
// 删除
function deleteFile(path) {
let files = [];
if( fs.existsSync(path) ) {
files = fs.readdirSync(path);
files.forEach(function(file,index){
let curPath = path + "/" + file;
if(fs.statSync(curPath).isDirectory()) {
deleteFile(curPath);
} else {
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
}
// 复制文件
function copyFile(srcPath, tarPath, cb) {
let rs = fs.createReadStream(srcPath)
rs.on('error', function (err) {
if (err) {
console.log('read error', srcPath)
}
cb && cb(err)
})
let ws = fs.createWriteStream(tarPath)
ws.on('error', function (err) {
if (err) {
console.log('write error', tarPath)
}
cb && cb(err)
})
ws.on('close', function (ex) {
cb && cb(ex)
})
rs.pipe(ws)
}
// 复制文件夹所有
function copyDir(srcDir, tarDir, cb) {
if (fs.existsSync(tarDir)) {
fs.readdir(srcDir, function (err, files) {
let count = 0
let checkEnd = function () {
++count == files.length && cb && cb()
}
if (err) {
checkEnd()
return
}
files.forEach(function (file) {
let srcPath = path.join(srcDir, file)
let tarPath = path.join(tarDir, file)
fs.stat(srcPath, function (err, stats) {
if (stats.isDirectory()) {
fs.mkdir(tarPath, function (err) {
if (err) {
return
}
copyDir(srcPath, tarPath, checkEnd)
})
} else {
copyFile(srcPath, tarPath, checkEnd)
}
})
})
//为空时直接回调
files.length === 0 && cb && cb()
})
} else {
fs.mkdir(tarDir, function (err) {
if (err) {
return
}
copyDir(srcDir, tarDir, cb)
})
}
}
// 给地址加上前后
function formatUrl(str) {
let url;
if (str.substring(0, 7) === "http://" ||
str.substring(0, 8) === "https://") {
url = str.trim();
} else {
url = "http://" + str.trim();
}
if (url.substring(url.length - 1) != "/") {
url+= "/"
}
return url;
}
// 运行命令
function exec(command, quiet) {
return new Promise((resolve, reject) => {
try {
let child = child_process.exec(command, {encoding: 'utf8'}, () => {
resolve();
});
if (!quiet) {
child.stdout.pipe(process.stdout);
}
child.stderr.pipe(process.stderr);
} catch (e) {
console.error('execute command failed :', command);
reject(e);
}
})
}
/** ***************************************************************************************************/
/** ***************************************************************************************************/
/** ***************************************************************************************************/
const electronDir = path.resolve(__dirname, "public");
const nativeCachePath = path.resolve(__dirname, ".native");
if (fs.existsSync(electronDir)) {
deleteFile(electronDir);
}
fs.mkdirSync(electronDir);
[
'audio',
'css',
'images',
'js',
].forEach(function (item) {
copyDir(path.resolve(__dirname, "../public", item), electronDir + "/" + item)
})
copyFile(path.resolve(__dirname, "index.html"), electronDir + "/index.html")
const questions = [
{
type: 'input',
name: 'targetUrl',
message: "请输入网站地址",
default: () => {
if (fs.existsSync(nativeCachePath)) {
return fs.readFileSync(nativeCachePath, 'utf8');
}
return undefined;
},
validate: function (value) {
return value !== ''
}
}
];
if (argv[2] == 'build') {
questions.push({
type: 'list',
name: 'platform',
message: "选择操作系统平台",
choices: [{
name: "MacOS Intel",
value: "build-mac-intel"
}, {
name: "MacOS M1",
value: "build-mac-m1"
}, {
name: "Window x86_64",
value: "build-mac-win"
}]
})
}
inquirer.prompt(questions).then(answers => {
let data = `window.systemInformation = {
version: "${config.version}",
origin: "./",
apiUrl: "${formatUrl(answers.targetUrl)}api/"
}`;
fs.writeFileSync(nativeCachePath, formatUrl(answers.targetUrl));
fs.writeFileSync(electronDir + "/config.js", data, 'utf8');
//
let packageFile = path.resolve(__dirname, "package.json");
let packageString = fs.readFileSync(packageFile, 'utf8');
packageString = packageString.replace(/"version":\s*"(.*?)"/, `"version": "${config.version}"`);
packageString = packageString.replace(/"name":\s*"(.*?)"/, `"name": "${config.name}"`);
fs.writeFileSync(packageFile, packageString, 'utf8');
//
let platform = argv[2] == "build" ? answers.platform : "start";
exec("cd electron && npm run " + (platform)).then(r => {})
});

4
electron/main.js vendored
View File

@ -20,7 +20,9 @@ function createWindow(setDockBadge) {
width: 1280, width: 1280,
height: 800, height: 800,
webPreferences: { webPreferences: {
preload: path.join(__dirname, 'preload.js') preload: path.join(__dirname, 'preload.js'),
nodeIntegration: true,
contextIsolation: false
} }
}) })

View File

@ -40,6 +40,7 @@
}, },
"dependencies": { "dependencies": {
"echarts": "^5.1.1", "echarts": "^5.1.1",
"electron": "^13.1.6",
"element-ui": "^2.15.2", "element-ui": "^2.15.2",
"notification-koro1": "^1.1.1", "notification-koro1": "^1.1.1",
"tinymce": "^5.8.1", "tinymce": "^5.8.1",

View File

@ -46,13 +46,17 @@ Vue.component('EDropdown', Dropdown);
Vue.component('EDropdownMenu', DropdownMenu); Vue.component('EDropdownMenu', DropdownMenu);
Vue.component('EDropdownItem', DropdownItem); Vue.component('EDropdownItem', DropdownItem);
if (!!__IS_ELECTRON) {
Vue.prototype.$electron = require('electron')
}
const originalPush = VueRouter.prototype.push const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) { VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err) return originalPush.call(this, location).catch(err => err)
} }
const router = new VueRouter({ const router = new VueRouter({
mode: !__IS_WEB ? 'hash' : 'history', mode: !!__IS_ELECTRON ? 'hash' : 'history',
routes routes
}); });

View File

@ -1558,4 +1558,4 @@
}); });
window.$A = $; window.$A = $;
})(window, window.jQuery); })(window, require('jquery'));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -13,8 +13,6 @@
<link rel="shortcut icon" href="{{ asset_main('favicon.ico') }}"> <link rel="shortcut icon" href="{{ asset_main('favicon.ico') }}">
<link rel="stylesheet" type="text/css" href="{{ mix('css/app.css') }}"> <link rel="stylesheet" type="text/css" href="{{ mix('css/app.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset_main('css/iview.css') }}"> <link rel="stylesheet" type="text/css" href="{{ asset_main('css/iview.css') }}">
<script src="{{ asset_main('js/jquery.min.js') }}"></script>
<script src="{{ asset_main('js/bootstrap.min.js') }}"></script>
<script src="{{ asset_main('js/language.all.js') }}"></script> <script src="{{ asset_main('js/language.all.js') }}"></script>
<script src="{{ asset_main('js/scroll-into-view.min.js') }}"></script> <script src="{{ asset_main('js/scroll-into-view.min.js') }}"></script>
<script> <script>

35
webpack.mix.js vendored
View File

@ -12,21 +12,9 @@ let mixBuildName = function (str) {
return str.replace(/_/g, '/'); return str.replace(/_/g, '/');
} }
let output = { let isHot = argv.includes('--hot');
chunkFilename: function ({chunk}) { let isElectron = argv.includes('--electron');
return `js/build/${mixBuildName(chunk.id)}.js` let publicPath = (!isHot && isElectron) ? 'electron/public' : 'public';
}
};
if (!['--watch', '--hot'].includes(argv[3])) {
output.publicPath = './';
}
let is_web = true;
let publicPath = 'public'
if (argv[4] === '--electron') {
is_web = false
publicPath = 'electron/public';
}
mix mix
.copy('resources/assets/statics/public', publicPath) .copy('resources/assets/statics/public', publicPath)
@ -34,14 +22,25 @@ mix
.sass('resources/assets/sass/app.scss', 'css') .sass('resources/assets/sass/app.scss', 'css')
.setPublicPath(publicPath) .setPublicPath(publicPath)
.webpackConfig(webpack => { .webpackConfig(webpack => {
return { let config = {
output, output: {
chunkFilename: ({chunk}) => {
return `js/build/${mixBuildName(chunk.id)}.js`
}
},
plugins: [ plugins: [
new webpack.DefinePlugin({ new webpack.DefinePlugin({
'__IS_WEB': is_web, '__IS_ELECTRON': isElectron,
}) })
] ]
};
if (isElectron) {
config.target = 'electron-renderer'
} }
if (!isHot) {
config.output.publicPath = './'
}
return config
}) })
.options({ .options({
processCssUrls: false, processCssUrls: false,