这是使用PyQT5作为UI的首次提交,将后端和UI合并到1个工程中,统一使用了Python,没有使用JS和HTML

This commit is contained in:
2025-12-14 12:13:19 +08:00
commit 872b181703
122 changed files with 70944 additions and 0 deletions

1
web/2.15.14_lib_index.js Normal file

File diff suppressed because one or more lines are too long

86
web/DTM_entry.html Normal file
View File

@@ -0,0 +1,86 @@
<!DOCTYPE html>
<html charset="utf-8">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>HYSZ DTM DEMO--1</title>
<!-- 引入样式 -->
<!--
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
-->
<link rel="stylesheet" href="element-ui@2.15.12\lib\theme-chalk\index.css">
<script src="vue.min.js"></script>
<!--
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
-->
<script src="element-ui@2.15.12\lib\index.js"></script>
<script src="DtmSysNavi.umd.js"></script>
<script src="axios.min.js"></script>
<script src="socket.io.js"></script>
<link rel="stylesheet" href="../src/asserts/extendicon/iconfont.css">
<script src="https://cdn.jsdelivr.net/npm/dayjs"></script>
<script src="eel.js"></script>
</head>
<body style="font-family:Roboto, Arial, sans-serif;'overflow-y':'hidden';padding:0;margin: 0">
<div id="element-App" :style="{'overflow-y':'hidden'}">
<dtm-sys-navi></dtm-sys-navi>
</div>
<script>
var serverUrl = 'http://127.0.0.1:5050';
var wsUrl = "ws://127.0.0.1:5080/ws";
console.log("serverUrl=",serverUrl)
function adjustEleInViewPort(){
console.log('window resize in vue.edit.html')
}
//window.addEventListener( "resize",adjustEleInViewPort,false);
// create instance
const VueVM = (window.app = new Vue({
components: {
'dtm-sys-navi':DtmSysNavi,
},
data: {
destroy: false,
projectResource:{},
project:{name:"CB-IHU12"},
edittingTask:null,
fullTaskEditorVisible:false
},
methods:{
},
mounted() {
const baseURL='http://localhost:2990/jira/rest/api/2';
return ;//cyx
}
}));
// mount gantt to DOM
VueVM.$mount('#element-App');
function destroy() {
VueVM.destroy = true;
}
</script>
<style scoped >
/*
.el-dialog__body{
padding: 2px 2px 2px 2px;
margin: 2px 2px 2px 2px;
}
.el-dialog__header {
background: lightblue;
font-size: 28px;
padding: 2px 2px;
height: 40px;
}*/
.el-divider--horizontal{
margin: 4px 2px 4px 2px;
}
</style>
</body>
</html>

43153
web/DtmSysNavi.umd.js Normal file

File diff suppressed because one or more lines are too long

2
web/axios.min.js vendored Normal file

File diff suppressed because one or more lines are too long

173
web/eel.js Normal file
View File

@@ -0,0 +1,173 @@
eel = {
_host: window.location.origin,
set_host: function (hostname) {
eel._host = hostname
},
expose: function(f, name) {
if(name === undefined){
name = f.toString();
let i = 'function '.length, j = name.indexOf('(');
name = name.substring(i, j).trim();
}
eel._exposed_functions[name] = f;
},
guid: function() {
return eel._guid;
},
// These get dynamically added by library when file is served
/** _py_functions **/
/** _start_geometry **/
_guid: ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
),
_exposed_functions: {},
_mock_queue: [],
_mock_py_functions: function() {
for(let i = 0; i < eel._py_functions.length; i++) {
let name = eel._py_functions[i];
eel[name] = function() {
let call_object = eel._call_object(name, arguments);
eel._mock_queue.push(call_object);
return eel._call_return(call_object);
}
}
},
_import_py_function: function(name) {
let func_name = name;
eel[name] = function() {
let call_object = eel._call_object(func_name, arguments);
eel._websocket.send(eel._toJSON(call_object));
return eel._call_return(call_object);
}
},
_call_number: 0,
_call_return_callbacks: {},
_call_object: function(name, args) {
let arg_array = [];
for(let i = 0; i < args.length; i++){
arg_array.push(args[i]);
}
let call_id = (eel._call_number += 1) + Math.random();
return {'call': call_id, 'name': name, 'args': arg_array};
},
_sleep: function(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
},
_toJSON: function(obj) {
return JSON.stringify(obj, (k, v) => v === undefined ? null : v);
},
_call_return: function(call) {
return function(callback = null) {
if(callback != null) {
eel._call_return_callbacks[call.call] = {resolve: callback};
} else {
return new Promise(function(resolve, reject) {
eel._call_return_callbacks[call.call] = {resolve: resolve, reject: reject};
});
}
}
},
_position_window: function(page) {
let size = eel._start_geometry['default'].size;
let position = eel._start_geometry['default'].position;
if(page in eel._start_geometry.pages) {
size = eel._start_geometry.pages[page].size;
position = eel._start_geometry.pages[page].position;
}
if(size != null){
window.resizeTo(size[0], size[1]);
}
if(position != null){
window.moveTo(position[0], position[1]);
}
},
_init: function() {
eel._mock_py_functions();
document.addEventListener("DOMContentLoaded", function(event) {
let page = window.location.pathname.substring(1);
eel._position_window(page);
let websocket_addr = (eel._host + '/eel').replace('http', 'ws');
websocket_addr += ('?page=' + page);
eel._websocket = new WebSocket(websocket_addr);
eel._websocket.onopen = function() {
for(let i = 0; i < eel._py_functions.length; i++){
let py_function = eel._py_functions[i];
eel._import_py_function(py_function);
}
while(eel._mock_queue.length > 0) {
let call = eel._mock_queue.shift();
eel._websocket.send(eel._toJSON(call));
}
};
eel._websocket.onmessage = function (e) {
let message = JSON.parse(e.data);
if(message.hasOwnProperty('call') ) {
// Python making a function call into us
if(message.name in eel._exposed_functions) {
try {
let return_val = eel._exposed_functions[message.name](...message.args);
eel._websocket.send(eel._toJSON({'return': message.call, 'status':'ok', 'value': return_val}));
} catch(err) {
debugger
eel._websocket.send(eel._toJSON(
{'return': message.call,
'status':'error',
'error': err.message,
'stack': err.stack}));
}
}
} else if(message.hasOwnProperty('return')) {
// Python returning a value to us
if(message['return'] in eel._call_return_callbacks) {
if(message['status']==='ok'){
eel._call_return_callbacks[message['return']].resolve(message.value);
}
else if(message['status']==='error' && eel._call_return_callbacks[message['return']].reject) {
eel._call_return_callbacks[message['return']].reject(message['error']);
}
}
} else {
throw 'Invalid message ' + message;
}
};
});
}
};
eel._init();
if(typeof require !== 'undefined'){
// Avoid name collisions when using Electron, so jQuery etc work normally
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

6161
web/socket.io.js Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

11
web/vue.min.js vendored Normal file

File diff suppressed because one or more lines are too long