feat: update assessment portal
This commit is contained in:
+139
-241
@@ -1,252 +1,150 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<title></title>
|
||||
{% set active_page = "home" %}
|
||||
{% block title %}主页 | 供水管道健康评估系统{% endblock %}
|
||||
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Manrope:wght@700;800&display=swap" rel="stylesheet" />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet" />
|
||||
<script>
|
||||
tailwind.config = {
|
||||
darkMode: 'class',
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
primary: '#005EB8',
|
||||
primaryDeep: '#0c4188',
|
||||
page: '#f3f5f8',
|
||||
card: '#ffffff',
|
||||
line: '#e5e7eb',
|
||||
textMain: '#0f172a',
|
||||
textSub: '#64748b',
|
||||
blueSoft: '#eaf3ff',
|
||||
bluePanel: '#1d4f9a',
|
||||
outline: '#c7ced8',
|
||||
successSoft: '#e9f8ee',
|
||||
successText: '#16a34a',
|
||||
warnSoft: '#fff4e8',
|
||||
warnText: '#c2410c',
|
||||
dangerSoft: '#fff0f0',
|
||||
dangerText: '#dc2626',
|
||||
lowCard: '#f8fafc'
|
||||
},
|
||||
fontFamily: {
|
||||
headline: ['Manrope', 'Inter', 'sans-serif'],
|
||||
body: ['Inter', 'sans-serif']
|
||||
},
|
||||
boxShadow: {
|
||||
soft: '0 24px 24px -12px rgba(24,28,30,.06)',
|
||||
card: '0 10px 25px rgba(15, 23, 42, .06)'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.material-symbols-outlined {
|
||||
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
|
||||
vertical-align: middle;
|
||||
}
|
||||
body { font-family: 'Inter', sans-serif; }
|
||||
h1, h2, h3, h4 { font-family: 'Manrope', 'Inter', sans-serif; }
|
||||
.dot-grid {
|
||||
background-image: radial-gradient(circle at 1px 1px, rgba(148,163,184,.30) 1.2px, transparent 0);
|
||||
background-size: 42px 42px;
|
||||
}
|
||||
.panel-frame {
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.gradient-board {
|
||||
background: linear-gradient(180deg, #2455a3 0%, #123e7d 100%);
|
||||
}
|
||||
.spinner {
|
||||
width: 18px; height: 18px; border-radius: 9999px;
|
||||
border: 2px solid rgba(255,255,255,.35); border-top-color: #fff;
|
||||
animation: spin .75s linear infinite;
|
||||
}
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
</style>
|
||||
{% block content %}
|
||||
<div class="mb-6 flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between">
|
||||
<div>
|
||||
<h1 class="text-3xl font-extrabold tracking-tight sm:text-4xl">管道健康状态与剩余寿命评估</h1>
|
||||
<p class="mt-2 max-w-3xl text-sm leading-6 text-textSub">上传标准数据文件,系统将生成生存概率曲线、健康等级摘要、剩余寿命判断和电子表格预测报告。</p>
|
||||
</div>
|
||||
<a href="{{ url_for('main.download_template') }}" class="ui-btn ui-btn-secondary text-primary">
|
||||
<span class="material-symbols-outlined text-lg">download</span>
|
||||
下载数据模板
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</head>
|
||||
<body class="bg-page min-h-screen text-textMain">
|
||||
<header class="sticky top-0 z-30 bg-white border-b border-line">
|
||||
<div class="px-6 lg:px-10">
|
||||
<div class="h-16 flex items-center justify-between gap-4">
|
||||
<div class="flex items-center gap-10">
|
||||
<div class="flex items-center gap-2 text-[18px] font-extrabold tracking-tight">
|
||||
<span class="material-symbols-outlined text-primary">water_drop</span>
|
||||
<span>供水管道健康评估系统</span>
|
||||
</div>
|
||||
<nav class="hidden md:flex items-center gap-7 text-[13px] font-semibold self-stretch">
|
||||
<a href="{{ url_for('main.home') }}" class="flex items-center text-primary border-b-2 border-primary">主页</a>
|
||||
<a href="{{ url_for('main.result_page') }}" class="flex items-center text-slate-500 hover:text-primary border-b-2 border-transparent">结果</a>
|
||||
<a href="{{ url_for('main.history_page') }}" class="flex items-center text-slate-500 hover:text-primary border-b-2 border-transparent">历史</a>
|
||||
{% if current_user.is_admin %}
|
||||
<a href="{{ url_for('main.admin_dashboard') }}" class="flex items-center text-slate-500 hover:text-primary border-b-2 border-transparent">管理</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
<div id="mainGrid" class="grid gap-6 lg:grid-cols-[minmax(0,1fr)_360px]">
|
||||
<section id="uploadPanel" class="order-1 flex h-[460px] flex-col rounded-lg border border-line bg-white p-5 shadow-panel sm:p-6 lg:col-start-1 lg:row-start-1">
|
||||
<div class="mb-5 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div>
|
||||
<h2 class="text-xl font-extrabold">上传分析文件</h2>
|
||||
<p class="mt-1 text-sm text-textSub">支持电子表格(.xlsx/.xls)和逗号分隔值文件(.csv),字段名需与模板一致。</p>
|
||||
</div>
|
||||
<div class="flex items-center gap-4 text-slate-600">
|
||||
<span class="material-symbols-outlined">notifications</span>
|
||||
<span class="material-symbols-outlined">help</span>
|
||||
<div class="h-8 w-px bg-slate-200"></div>
|
||||
<div class="flex items-center gap-3 text-sm font-semibold">
|
||||
<div class="w-8 h-8 rounded-full bg-primary flex items-center justify-center text-white text-xs">{{ current_user.username[:1]|upper }}</div>
|
||||
<form method="post" action="{{ url_for('main.logout') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||
<button class="text-textMain" type="submit">退出登录</button>
|
||||
</form>
|
||||
<span class="inline-flex w-fit items-center gap-2 rounded-full bg-blueSoft px-3 py-1 text-xs font-bold text-primary">
|
||||
<span class="material-symbols-outlined text-base">verified</span>
|
||||
标准化输入
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<form id="predictForm" action="{{ url_for('main.predict') }}" method="post" enctype="multipart/form-data" novalidate class="flex flex-1 flex-col gap-5">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||
<label id="dropZone" class="flex min-h-0 flex-1 cursor-pointer flex-col justify-center rounded-lg border-2 border-dashed border-outline bg-slate-50 px-5 py-8 text-center transition hover:border-primary hover:bg-blue-50/50">
|
||||
<input id="fileInput" name="file" type="file" accept=".csv,.xls,.xlsx" class="absolute h-px w-px opacity-0">
|
||||
<span class="mx-auto flex h-14 w-14 items-center justify-center rounded-full bg-white text-primary shadow-panel">
|
||||
<span class="material-symbols-outlined text-3xl">cloud_upload</span>
|
||||
</span>
|
||||
<span class="mt-4 block text-lg font-extrabold">拖放文件到此处,或点击选择</span>
|
||||
<span class="mt-1 block text-sm text-textSub">单次上传一个数据文件</span>
|
||||
<span id="selectedFileName" class="hidden mt-3 text-sm font-bold text-primary"></span>
|
||||
</label>
|
||||
|
||||
<div class="flex shrink-0 flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
||||
<p class="text-xs text-textSub">预测结果会在本页生成摘要,并可进入结果页查看完整报告。</p>
|
||||
<button id="submitBtn" class="ui-btn ui-btn-primary min-w-[150px]" type="submit">
|
||||
<span id="submitText">分析并预测</span>
|
||||
<span id="submitIcon" class="material-symbols-outlined text-lg">analytics</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<section id="inlineResult" class="order-3 h-[520px] overflow-hidden rounded-lg border border-line bg-white p-5 shadow-panel sm:p-6 lg:col-start-1 lg:row-start-2">
|
||||
<div id="resultPlaceholder" class="flex h-full min-h-0 flex-col">
|
||||
<div>
|
||||
<h2 class="text-xl font-extrabold">最新预测结果</h2>
|
||||
<p class="mt-1 text-sm text-textSub">上传并分析文件后,这里会显示预测图表与报告入口。</p>
|
||||
</div>
|
||||
<div class="mt-5 flex min-h-0 flex-1 flex-col items-center justify-center rounded-md border border-dashed border-outline bg-slate-50 px-5 text-center">
|
||||
<span class="material-symbols-outlined text-4xl text-primary">monitoring</span>
|
||||
<div class="mt-3 text-sm font-bold text-textMain">暂无预测结果</div>
|
||||
<div class="mt-1 text-xs leading-5 text-textSub">完成一次分析后,将生成生存概率阶梯图、摘要和电子表格报告。</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="resultContent" class="hidden h-full min-h-0 flex-col">
|
||||
<div class="mb-5 flex shrink-0 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between">
|
||||
<div>
|
||||
<h2 class="text-xl font-extrabold">最新预测结果</h2>
|
||||
<p class="mt-1 text-sm text-textSub">已生成图表与电子表格结果文件。</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<a id="resultPageBtn" href="{{ url_for('main.result_page') }}" class="ui-btn ui-btn-sm ui-btn-secondary">
|
||||
<span class="material-symbols-outlined text-lg">monitoring</span>
|
||||
查看结果页
|
||||
</a>
|
||||
<a id="excelBtn" href="#" class="ui-btn ui-btn-sm ui-btn-primary">
|
||||
<span class="material-symbols-outlined text-lg">download</span>
|
||||
下载结果表
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="min-h-0 flex-1 overflow-y-auto pr-1">
|
||||
<div class="grid gap-4">
|
||||
<div class="rounded-md border border-line bg-slate-50 p-3">
|
||||
<div class="mb-2 text-xs font-bold text-textSub">生存概率阶梯图</div>
|
||||
<img id="resultImage" src="" alt="预测图" class="h-auto w-full rounded bg-white object-contain">
|
||||
</div>
|
||||
<div id="resultImportanceWrap" class="hidden rounded-md border border-line bg-slate-50 p-3">
|
||||
<div class="mb-2 text-xs font-bold text-textSub">输入因素重要性</div>
|
||||
<img id="resultImportanceImage" src="" alt="重要性排序图" class="h-auto w-full rounded bg-white object-contain">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</section>
|
||||
|
||||
<main class="px-6 lg:px-10 py-8">
|
||||
<section class="mb-8">
|
||||
<h1 class="text-[40px] font-extrabold tracking-tight leading-tight">供水管道健康状态与剩余寿命评估技术导则</h1>
|
||||
<p class="mt-2 text-textSub text-[15px]">上传您的数据以生成预测结果供参考。</p>
|
||||
</section>
|
||||
|
||||
{% with messages = get_flashed_messages(with_categories=true) %}
|
||||
{% if messages %}
|
||||
<div class="space-y-3 mb-6">
|
||||
{% for category, message in messages %}
|
||||
<div class="rounded-xl px-4 py-3 text-sm border {{ 'bg-dangerSoft text-dangerText border-red-200' if category == 'error' else 'bg-blueSoft text-primary border-blue-200' }}">{{ message }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
<div id="alertBox" class="hidden mb-6 rounded-xl px-4 py-3 text-sm border"></div>
|
||||
|
||||
<div id="mainGrid" class="grid grid-cols-1 xl:grid-cols-[1.45fr_1fr] gap-6 items-start">
|
||||
<div>
|
||||
<section class="bg-[#fafafa] rounded-[18px] border border-slate-200 p-7 shadow-soft">
|
||||
<div class="flex items-center justify-between gap-4 mb-5">
|
||||
<h2 class="text-[22px] font-bold flex items-center gap-2">
|
||||
<span class="material-symbols-outlined text-primary">upload_file</span>
|
||||
文件上传
|
||||
</h2>
|
||||
<a href="{{ url_for('main.download_template') }}" class="text-primary font-semibold text-sm flex items-center gap-1">
|
||||
<span class="material-symbols-outlined text-sm">download</span>
|
||||
下载模板
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<form id="predictForm" action="{{ url_for('main.predict') }}" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||
<label id="dropZone" class="block relative rounded-[14px] border-2 border-dashed border-outline p-12 bg-white hover:border-primary hover:bg-blue-50/40 transition-all cursor-pointer text-center">
|
||||
<input id="fileInput" name="file" type="file" accept=".csv,.xls,.xlsx" class="absolute inset-0 opacity-0 cursor-pointer" required>
|
||||
<div class="flex flex-col items-center gap-4 pointer-events-none">
|
||||
<div class="w-16 h-16 rounded-full bg-blueSoft text-primary flex items-center justify-center">
|
||||
<span class="material-symbols-outlined text-3xl">cloud_upload</span>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-[28px] font-bold">将您的数据文件拖放到此处</p>
|
||||
<p class="text-[15px] text-textSub mt-1">支持 Excel (.xlsx) 和 CSV 文件</p>
|
||||
<p id="selectedFileName" class="hidden mt-3 text-sm text-primary font-semibold"></p>
|
||||
</div>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<div class="mt-8 flex justify-end">
|
||||
<button id="submitBtn" class="bg-primary hover:bg-primaryDeep text-white px-8 py-4 rounded-[8px] font-bold flex items-center gap-3 shadow-lg shadow-blue-200 min-w-[170px] justify-center" type="submit">
|
||||
<span id="submitText">分析并预测</span>
|
||||
<span id="submitIcon" class="material-symbols-outlined">analytics</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<div class="mt-5">
|
||||
<a href="{{ url_for('main.result_page') }}" class="bg-[#fafafa] rounded-[14px] border border-slate-200 p-6 flex items-center justify-between hover:bg-slate-50 hover:border-primary transition-colors">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="w-12 h-12 rounded-xl bg-blueSoft border border-blue-100 flex items-center justify-center text-primary">
|
||||
<span class="material-symbols-outlined">monitoring</span>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="font-bold text-[18px]">进入结果页</h3>
|
||||
<p class="text-sm text-textSub">查看完整的健康评估与重要性分析</p>
|
||||
</div>
|
||||
</div>
|
||||
<span class="material-symbols-outlined text-slate-400">chevron_right</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside>
|
||||
<section class="bg-[#fafafa] rounded-[18px] border border-slate-200 p-7 shadow-soft">
|
||||
<h2 class="text-[22px] font-bold flex items-center gap-2 mb-4">
|
||||
<span class="material-symbols-outlined text-[#b45309]">info</span>
|
||||
数据要求
|
||||
</h2>
|
||||
<p class="text-[14px] text-textSub leading-7 mb-6">为确保准确的生存分析,您上传的文件必须包含以下字段。请确保数据类型严格遵循模板。</p>
|
||||
<div class="space-y-3">
|
||||
<div class="bg-white rounded-xl border-l-4 border-primary p-4 border border-slate-200">
|
||||
<div class="text-[11px] font-extrabold uppercase tracking-[0.18em] text-primary mb-1">必填基础信息</div>
|
||||
<div class="font-semibold">管道编号、管龄、状态、管材、管径</div>
|
||||
</div>
|
||||
<div class="bg-white rounded-xl border-l-4 border-slate-500 p-4 border border-slate-200">
|
||||
<div class="text-[11px] font-extrabold uppercase tracking-[0.18em] text-slate-500 mb-1">选填历史信息</div>
|
||||
<div class="font-semibold">流速、压力、温度、降雨量、位置</div>
|
||||
</div>
|
||||
<div class="bg-white rounded-xl border-l-4 border-[#ea580c] p-4 border border-slate-200">
|
||||
<div class="text-[11px] font-extrabold uppercase tracking-[0.18em] text-[#ea580c] mb-1">选填内壁特征</div>
|
||||
<div class="font-semibold">结构缺陷、功能缺陷</div>
|
||||
</div>
|
||||
<div class="bg-white rounded-xl border-l-4 border-red-500 p-4 border border-slate-200">
|
||||
<div class="text-[11px] font-extrabold uppercase tracking-[0.18em] text-red-500 mb-1">选填运行环境</div>
|
||||
<div class="font-semibold">字段名需与模板完全一致</div>
|
||||
</div>
|
||||
<div class="bg-blueSoft rounded-xl p-4 border border-blue-100 text-sm text-primary flex items-start gap-3">
|
||||
<span class="material-symbols-outlined mt-0.5">tips_and_updates</span>
|
||||
<span>上传数据类型请参考《供水管道健康状态与剩余寿命评估技术导则》附录内容</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</aside>
|
||||
|
||||
<section id="inlineResult" class="hidden bg-[#fafafa] rounded-[18px] border border-slate-200 p-6 shadow-soft self-stretch">
|
||||
<div class="mb-4">
|
||||
<h2 class="text-[24px] font-extrabold">最新预测结果</h2>
|
||||
<p class="text-textSub text-sm mt-1">已生成预测图和 Excel 结果文件。</p>
|
||||
</div>
|
||||
<div class="bg-white rounded-xl border border-slate-200 p-4 mb-4">
|
||||
<div class="text-xs font-semibold text-slate-500 mb-2">生存概率阶梯图</div>
|
||||
<img id="resultImage" src="" alt="预测图" class="w-full h-auto object-contain">
|
||||
</div>
|
||||
<div id="resultImportanceWrap" class="hidden bg-white rounded-xl border border-slate-200 p-4 mb-4">
|
||||
<div class="text-xs font-semibold text-slate-500 mb-2">模型输入因素重要性排序</div>
|
||||
<img id="resultImportanceImage" src="" alt="重要性排序图" class="w-full h-auto object-contain">
|
||||
</div>
|
||||
<div class="bg-white rounded-xl border border-slate-200 p-5 mb-4">
|
||||
<div class="text-xs uppercase tracking-[0.18em] text-slate-500 mb-3">结果摘要</div>
|
||||
<div class="space-y-3 text-sm">
|
||||
<div class="flex items-center justify-between gap-4"><span class="text-textSub">上传文件</span><span id="summaryFilename" class="font-semibold break-all text-right"></span></div>
|
||||
<div class="flex items-center justify-between gap-4"><span class="text-textSub">预测样本数</span><span id="summaryCount" class="font-semibold">-</span></div>
|
||||
<div class="flex items-center justify-between gap-4"><span class="text-textSub">模型</span><span class="font-semibold text-right break-all">my_survival_forest_model_quxi-10-0331</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col gap-3">
|
||||
<a id="resultPageBtn" href="{{ url_for('main.result_page') }}" class="px-5 py-3 rounded-xl border border-slate-200 bg-white font-semibold text-center">进入结果页</a>
|
||||
<a id="excelBtn" href="#" class="px-5 py-3 rounded-xl bg-primary text-white font-semibold text-center">下载预测报告</a>
|
||||
</div>
|
||||
</section>
|
||||
<section id="requirementsPanel" class="order-2 h-[460px] rounded-lg border border-line bg-white p-5 shadow-panel lg:col-start-2 lg:row-start-1">
|
||||
<h2 class="flex items-center gap-2 text-lg font-extrabold">
|
||||
<span class="material-symbols-outlined text-primary">rule</span>
|
||||
数据要求
|
||||
</h2>
|
||||
<p class="mt-2 text-sm leading-6 text-textSub">为确保准确的生存分析,请确保数据类型严格遵循模板。</p>
|
||||
<div class="mt-5 space-y-3 text-sm">
|
||||
<div class="rounded-md border border-line bg-slate-50 p-3">
|
||||
<div class="text-xs font-bold text-primary">必填基础信息</div>
|
||||
<div class="mt-1 font-semibold">管道编号、管龄、状态、管材、管径</div>
|
||||
</div>
|
||||
</main>
|
||||
<div class="rounded-md border border-line bg-slate-50 p-3">
|
||||
<div class="text-xs font-bold text-slate-500">选填历史信息</div>
|
||||
<div class="mt-1 font-semibold">流速、压力、温度、降雨量、位置</div>
|
||||
</div>
|
||||
<div class="rounded-md border border-line bg-slate-50 p-3">
|
||||
<div class="text-xs font-bold text-slate-500">选填内壁特征</div>
|
||||
<div class="mt-1 font-semibold">结构缺陷、功能缺陷</div>
|
||||
</div>
|
||||
<div class="rounded-md border border-line bg-slate-50 p-3">
|
||||
<div class="text-xs font-bold text-slate-500">字段格式</div>
|
||||
<div class="mt-1 font-semibold">字段名需与模板完全一致</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="px-6 lg:px-10 py-6 border-t border-line text-[12px] text-slate-500 flex items-center justify-between">
|
||||
<span>预测结果仅供参考</span>
|
||||
<div class="flex gap-6">
|
||||
<span></span><span></span><span></span><span>文档</span>
|
||||
</div>
|
||||
</footer>
|
||||
<section class="order-4 h-[520px] rounded-lg border border-line bg-white p-5 shadow-panel lg:col-start-2 lg:row-start-2">
|
||||
<h2 class="flex items-center gap-2 text-lg font-extrabold">
|
||||
<span class="material-symbols-outlined text-primary">quick_reference</span>
|
||||
快速入口
|
||||
</h2>
|
||||
<div class="mt-4 grid gap-3">
|
||||
<a href="{{ url_for('main.result_page') }}" class="ui-action-row">
|
||||
<span class="flex items-center gap-2"><span class="material-symbols-outlined text-lg">monitoring</span>结果页</span>
|
||||
<span class="material-symbols-outlined text-lg">chevron_right</span>
|
||||
</a>
|
||||
<a href="{{ url_for('main.history_page') }}" class="ui-action-row">
|
||||
<span class="flex items-center gap-2"><span class="material-symbols-outlined text-lg">history</span>预测历史</span>
|
||||
<span class="material-symbols-outlined text-lg">chevron_right</span>
|
||||
</a>
|
||||
<a href="{{ url_for('main.reference_page') }}" class="ui-action-row">
|
||||
<span class="flex items-center gap-2"><span class="material-symbols-outlined text-lg">picture_as_pdf</span>技术导则</span>
|
||||
<span class="material-symbols-outlined text-lg">chevron_right</span>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
<script src="{{ url_for('static', filename='js/dashboard.js') }}"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
{% block scripts %}
|
||||
<script src="{{ url_for('static', filename='js/dashboard.js') }}?v=20260706-alert"></script>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user