首次提交:上传本地文件夹

This commit is contained in:
ruxia
2025-04-03 17:16:43 +08:00
commit 6874096d40
19 changed files with 565 additions and 0 deletions
+95
View File
@@ -0,0 +1,95 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>页面切换示例</title>
<style>
/* 隐藏按钮的样式 */
.hidden-buttons {
padding-left: 4px;
position: absolute;
z-index: 999999;
}
/* 显示按钮的样式 */
.show-buttons {
display: block;
}
/* 页面内容的样式 */
.page {
display: none;
}
.active {
display: block;
}
.hidden-buttons button {
cursor: pointer;
width: 52px;
height: 29px;
opacity: 0.01;
}
</style>
</head>
<body>
<!-- 隐藏的按钮组 -->
<div id="buttonGroup" class="hidden-buttons">
<button onclick="showPage(0)">页面0</button>
<button onclick="showPage(1)">页面1</button>
<button onclick="showPage(2)" style=" width: 72px;">页面2</button>
<button onclick="showPage(3)" style=" width: 72px;">页面3</button>
<button onclick="showPage(4)" style=" width: 66px;">页面4</button>
<button onclick="showPage(5)" style=" width: 62px;">页面5</button>
<button onclick="showPage(6)" style=" width: 70px;">页面6</button>
<button onclick="showPage(7)" style=" width: 76px;">页面7</button>
<button onclick="showPage(8)" style=" width: 77px;">页面8</button>
</div>
<!-- 页面内容 -->
<div id="page1" class="page active">
<img src="主页.PNG" alt="页面1">
</div>
<div id="page2" class="page">
<img src="工程信息.PNG" alt="页面2">
</div>
<div id="page3" class="page">
<img src="取费设置.PNG" alt="页面3">
</div>
<div id="page4" class="page">
<img src="组合件.PNG" alt="页面4">
</div>
<div id="page5" class="page">
<img src="工程量.PNG" alt="页面5">
</div>
<div id="page6" class="page">
<img src="材机分析.PNG" alt="页面6">
</div>
<div id="page7" class="page">
<img src="工程费用.PNG" alt="页面7">
</div>
<div id="page8" class="page">
<img src="报表输出.PNG" alt="页面8">
</div>
<script>
// 显示页面的函数
function showPage(pageNumber) {
// 隐藏所有页面
var pages = document.querySelectorAll('.page');
pages.forEach(function(page) {
page.classList.remove('active');
});
// 显示指定页面
var pageToShow = document.getElementById('page' + pageNumber);
pageToShow.classList.add('active');
}
// 页面加载时显示第一个页面
window.onload = function() {
showPage(1);
};
</script>
</body>
</html>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

+155
View File
@@ -0,0 +1,155 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>页面切换示例</title>
<script>
window.difyChatbotConfig = {
token: 'lijvRv14EYBUUllM',
baseUrl: 'https://172.20.0.145'
}
</script>
<script
src="https://172.20.0.145/embed.min.js"
id="lijvRv14EYBUUllM"
defer>
</script>
<style>
#dify-chatbot-bubble-button {
background-color: #1C64F2 !important;
}
#dify-chatbot-bubble-window {
width: 580px !important;
height: 40rem !important;
}
/* 隐藏按钮的样式 */
.hidden-buttons {
padding-left: 4px;
position: absolute;
z-index: 999999;
}
/* 显示按钮的样式 */
.show-buttons {
display: block;
}
/* 页面内容的样式 */
.page {
display: none;
}
.active {
display: block;
}
.hidden-buttons button {
cursor: pointer;
width: 52px;
height: 29px;
opacity: 0.01;
}
</style>
</head>
<body>
<!-- 隐藏的按钮组 -->
<div id="buttonGroup" class="hidden-buttons">
<button onclick="showPage(0)">页面0</button>
<button onclick="showPage(1)">页面1</button>
<button onclick="showPage(2)" style=" width: 72px;">页面2</button>
<button onclick="showPage(3)" style=" width: 72px;">页面3</button>
<button onclick="showPage(4)" style=" width: 66px;">页面4</button>
<button onclick="showPage(5)" style=" width: 62px;">页面5</button>
<button onclick="showPage(6)" style=" width: 70px;">页面6</button>
<button onclick="showPage(7)" style=" width: 76px;">页面7</button>
<button onclick="showPage(8)" style=" width: 77px;">页面8</button>
</div>
<!-- 页面内容 -->
<div id="page1" class="page active">
<img src="/static/主页.png" alt="页面1">
</div>
<div id="page2" class="page">
<img src="/static/工程信息.png" alt="页面2">
</div>
<div id="page3" class="page">
<img src="/static/取费设置.png" alt="页面3">
</div>
<div id="page4" class="page">
<img src="/static/组合件.png" alt="页面4">
</div>
<div id="page5" class="page">
<img src="/static/工程量.png" alt="页面5">
</div>
<div id="page6" class="page">
<img src="/static/材机分析.png" alt="页面6">
</div>
<div id="page7" class="page">
<img src="/static/工程费用.png" alt="页面7">
</div>
<div id="page8" class="page">
<img src="/static/报表输出.png" alt="页面8">
</div>
<script>
// 显示页面的函数
function showPage(pageNumber) {
// 处理清空JSON的特殊情况
if (pageNumber === 0) {
// 清空JSON但不改变当前页面显示
fetch('/clear_json')
.then(response => response.json())
.then(data => {
console.log('JSON已清空');
})
.catch(error => {
console.error('清空JSON失败:', error);
});
return; // 直接返回,不执行后续代码
}
// 隐藏所有页面
var pages = document.querySelectorAll('.page');
pages.forEach(function(page) {
page.classList.remove('active');
});
// 显示指定页面
var pageToShow = document.getElementById('page' + pageNumber);
pageToShow.classList.add('active');
// 获取页面标题并更新当前界面
var pageTitle = '';
switch(pageNumber) {
case 1: pageTitle = '主页'; break;
case 2: pageTitle = '工程信息'; break;
case 3: pageTitle = '取费设置'; break;
case 4: pageTitle = '组合件'; break;
case 5: pageTitle = '工程量'; break;
case 6: pageTitle = '材机分析'; break;
case 7: pageTitle = '工程费用'; break;
case 8: pageTitle = '报表输出'; break;
}
// 调用接口更新当前界面
if(pageTitle) {
fetch('/get_current_page?title=' + encodeURIComponent(pageTitle))
.then(response => response.json())
.then(data => {
console.log('软件信息:', JSON.stringify(data, null, 2));
console.log('当前界面:', data['当前界面']);
})
.catch(error => {
console.error('获取界面名称失败:', error);
});
}
}
// 页面加载时显示第一个页面
window.onload = function() {
showPage(1);
};
</script>
</body>
</html>
+315
View File
@@ -0,0 +1,315 @@
import os
import json
from flask import Flask, render_template, request, jsonify
from PIL import Image
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False # 确保JSON响应中的中文字符正确显示
# 添加全局变量来存储当前界面
current_page = "主页"
# 确保templates和static文件夹存在
templates_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')
static_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static')
if not os.path.exists(templates_dir):
os.makedirs(templates_dir)
if not os.path.exists(static_dir):
os.makedirs(static_dir)
# 图片路径
image_paths = {
"主页": "E:/文件/LLM_model/RAG/图片/D3/主页.PNG",
"工程信息": "E:/文件/LLM_model/RAG/图片/D3/工程信息.PNG",
"取费设置": "E:/文件/LLM_model/RAG/图片/D3/取费设置.PNG",
"组合件": "E:/文件/LLM_model/RAG/图片/D3/组合件.PNG",
"工程量": "E:/文件/LLM_model/RAG/图片/D3/工程量.PNG",
"材机分析": "E:/文件/LLM_model/RAG/图片/D3/材机分析.PNG",
"工程费用": "E:/文件/LLM_model/RAG/图片/D3/工程费用.PNG",
"报表输出": "E:/文件/LLM_model/RAG/图片/D3/报表输出.PNG"
}
# 创建HTML模板
with open(os.path.join(templates_dir, 'index.html'), 'w', encoding='utf-8') as f:
f.write('''
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>页面切换示例</title>
<script>
window.difyChatbotConfig = {
token: 'lijvRv14EYBUUllM',
baseUrl: 'https://172.20.0.145'
}
</script>
<script
src="https://172.20.0.145/embed.min.js"
id="lijvRv14EYBUUllM"
defer>
</script>
<style>
#dify-chatbot-bubble-button {
background-color: #1C64F2 !important;
}
#dify-chatbot-bubble-window {
width: 580px !important;
height: 40rem !important;
}
/* 隐藏按钮的样式 */
.hidden-buttons {
padding-left: 4px;
position: absolute;
z-index: 999999;
}
/* 显示按钮的样式 */
.show-buttons {
display: block;
}
/* 页面内容的样式 */
.page {
display: none;
}
.active {
display: block;
}
.hidden-buttons button {
cursor: pointer;
width: 52px;
height: 29px;
opacity: 0.01;
}
</style>
</head>
<body>
<!-- 隐藏的按钮组 -->
<div id="buttonGroup" class="hidden-buttons">
<button onclick="showPage(0)">页面0</button>
<button onclick="showPage(1)">页面1</button>
<button onclick="showPage(2)" style=" width: 72px;">页面2</button>
<button onclick="showPage(3)" style=" width: 72px;">页面3</button>
<button onclick="showPage(4)" style=" width: 66px;">页面4</button>
<button onclick="showPage(5)" style=" width: 62px;">页面5</button>
<button onclick="showPage(6)" style=" width: 70px;">页面6</button>
<button onclick="showPage(7)" style=" width: 76px;">页面7</button>
<button onclick="showPage(8)" style=" width: 77px;">页面8</button>
</div>
<!-- 页面内容 -->
<div id="page1" class="page active">
<img src="/static/主页.png" alt="页面1">
</div>
<div id="page2" class="page">
<img src="/static/工程信息.png" alt="页面2">
</div>
<div id="page3" class="page">
<img src="/static/取费设置.png" alt="页面3">
</div>
<div id="page4" class="page">
<img src="/static/组合件.png" alt="页面4">
</div>
<div id="page5" class="page">
<img src="/static/工程量.png" alt="页面5">
</div>
<div id="page6" class="page">
<img src="/static/材机分析.png" alt="页面6">
</div>
<div id="page7" class="page">
<img src="/static/工程费用.png" alt="页面7">
</div>
<div id="page8" class="page">
<img src="/static/报表输出.png" alt="页面8">
</div>
<script>
// 显示页面的函数
function showPage(pageNumber) {
// 处理清空JSON的特殊情况
if (pageNumber === 0) {
// 清空JSON但不改变当前页面显示
fetch('/clear_json')
.then(response => response.json())
.then(data => {
console.log('JSON已清空');
})
.catch(error => {
console.error('清空JSON失败:', error);
});
return; // 直接返回,不执行后续代码
}
// 隐藏所有页面
var pages = document.querySelectorAll('.page');
pages.forEach(function(page) {
page.classList.remove('active');
});
// 显示指定页面
var pageToShow = document.getElementById('page' + pageNumber);
pageToShow.classList.add('active');
// 获取页面标题并更新当前界面
var pageTitle = '';
switch(pageNumber) {
case 1: pageTitle = '主页'; break;
case 2: pageTitle = '工程信息'; break;
case 3: pageTitle = '取费设置'; break;
case 4: pageTitle = '组合件'; break;
case 5: pageTitle = '工程量'; break;
case 6: pageTitle = '材机分析'; break;
case 7: pageTitle = '工程费用'; break;
case 8: pageTitle = '报表输出'; break;
}
// 调用接口更新当前界面
if(pageTitle) {
fetch('/get_current_page?title=' + encodeURIComponent(pageTitle))
.then(response => response.json())
.then(data => {
console.log('软件信息:', JSON.stringify(data, null, 2));
console.log('当前界面:', data['当前界面']);
})
.catch(error => {
console.error('获取界面名称失败:', error);
});
}
}
// 页面加载时显示第一个页面
window.onload = function() {
showPage(1);
};
</script>
</body>
</html>
''')
# 将图片复制到static文件夹
def copy_image_to_static(source_path, target_name):
try:
img = Image.open(source_path)
target_path = os.path.join(static_dir, f"{target_name}.png")
img.save(target_path)
return True
except Exception as e:
print(f"复制图片失败: {e}")
@app.route('/')
def index():
# 在第一次请求时设置图片
setup_images()
return render_template('index.html')
@app.route('/get_image')
def get_image():
title = request.args.get('title', '主页')
if title in image_paths:
image_url = f"/static/{title}.png"
resp = jsonify({'image_url': image_url})
resp.headers['Content-Type'] = 'application/json; charset=utf-8'
return resp
resp = jsonify({'error': '图片不存在'})
resp.headers['Content-Type'] = 'application/json; charset=utf-8'
return resp
# 设置图片
def setup_images():
# 检查是否已经设置过图片
if not hasattr(setup_images, 'done'):
# 复制内容图片
for title, path in image_paths.items():
copy_image_to_static(path, title)
# 标记为已完成
setup_images.done = True
# 添加处理聊天消息的路由
@app.route('/ask', methods=['POST'])
def ask():
data = request.json
message = data.get('message', '')
# 这里可以添加调用Dify API的逻辑
resp = jsonify({
'answer': f'您好,我收到了您的问题:"{message}"。由于当前无法连接到Dify服务器,我只能提供有限的回复。'
})
resp.headers['Content-Type'] = 'application/json; charset=utf-8'
return resp
# 添加获取当前界面名称的接口
@app.route('/get_current_page', methods=['GET'])
def get_current_page():
global current_page
title = request.args.get('title')
# 如果请求中包含title参数,则更新当前界面
if title:
current_page = title
print(f"更新当前界面为: {current_page}")
response = {
'software_name': '博微配网工程计价通D3软件',#博微配网工程计价通D3软件
'engineering_type': '单工程',
'software_version': '3.2.4.23',
'project_name': '525252.BDD3',
'current_page': current_page
}
# 检查是否是浏览器直接访问
if request.headers.get('Accept', '').find('text/html') != -1:
# 返回一个HTML页面,显示JSON数据
html = f'''
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>当前界面信息</title>
<style>
body {{ font-family: Arial, sans-serif; padding: 20px; }}
.json-container {{ background-color: #f5f5f5; padding: 15px; border-radius: 5px; }}
.json-key {{ color: #0066cc; font-weight: bold; }}
.json-value {{ color: #006600; }}
.refresh-btn {{ background-color: #4CAF50; color: white; padding: 10px 15px;
border: none; border-radius: 4px; cursor: pointer; margin-top: 15px; }}
.refresh-btn:hover {{ background-color: #45a049; }}
</style>
</head>
<body>
<h2>当前界面信息</h2>
<div class="json-container">
<p><span class="json-key">software_name:</span> <span class="json-value">{response['software_name']}</span></p>
<p><span class="json-key">engineering_type:</span> <span class="json-value">{response['engineering_type']}</span></p>
<p><span class="json-key">software_version:</span> <span class="json-value">{response['software_version']}</span></p>
<p><span class="json-key">project_name:</span> <span class="json-value">{response['project_name']}</span></p>
<p><span class="json-key">current_page:</span> <span class="json-value">{response['current_page']}</span></p>
</div>
<p>原始JSON:</p>
<pre>{json.dumps(response, ensure_ascii=False, indent=2)}</pre>
<button class="refresh-btn" onclick="location.reload()">刷新信息</button>
</body>
</html>
'''
return html
# API调用返回JSON
return json.dumps(response, ensure_ascii=False)
# 添加清空JSON的路由
@app.route('/clear_json')
def clear_json():
global current_page
# 重置当前页面
current_page = ""
# 返回空JSON,添加编码设置
resp = jsonify({})
resp.headers['Content-Type'] = 'application/json; charset=utf-8'
return resp
if __name__ == "__main__":
app.run(host='0.0.0.0', port=1234, debug=True)
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB