-
- 荣誉证书原件 -
-
🖼️
-
点击查看证书图片
+
+
+ 返回查询 +
+ +
- -
+
+
+
Certificate Preview
+

证书原件预览

+

点击下方预览区域或使用顶部按钮,即可加载对应证书原件图片。

+
+ 证书原件 +
+ + 点击加载证书图片 + 原件图片将从当前证书编号对应的 `img/*.svg` 文件中读取。 +
+
+
-
-

© 2026 BI

+ +
+ + + + +
+

© 2026 BI Intelligent Query Interface

- \ No newline at end of file + diff --git a/certs/index.html b/certs/index.html index 35f8192..1864fc6 100644 --- a/certs/index.html +++ b/certs/index.html @@ -3,335 +3,210 @@ - 荣誉证书查询系统 + 证书查询系统 + + + + - - - - - -
-

证书查询系统

-

说明:可以输入编号或姓名进行查询,也可以点击右侧图标扫码查询;查询范围2024年10月至今

- -
-
-
- -
- -
- -
-
-
-
- - -
-
- - -
- -
-
- -
-
请输入信息或点击右侧图标扫码
-
-
- -
-
-
- -
-
- -
-

© 2026 BI All rights reserved

-
- - - + + - \ No newline at end of file + diff --git a/css/tech-query.css b/css/tech-query.css new file mode 100644 index 0000000..b749c3d --- /dev/null +++ b/css/tech-query.css @@ -0,0 +1,1000 @@ +:root { + --bg-primary: #07111f; + --bg-secondary: #0d1b31; + --panel: rgba(9, 20, 40, 0.78); + --panel-strong: rgba(10, 24, 46, 0.92); + --line: rgba(98, 180, 255, 0.22); + --line-strong: rgba(98, 180, 255, 0.45); + --text-primary: #ecf6ff; + --text-secondary: #93afd1; + --accent: #67d5ff; + --accent-strong: #3ea2ff; + --accent-soft: rgba(103, 213, 255, 0.14); + --success: #2de2a6; + --warning: #ffcc66; + --danger: #ff6b8a; + --shadow: 0 28px 60px rgba(0, 0, 0, 0.35); + --radius-xl: 28px; + --radius-lg: 20px; + --radius-md: 14px; + --radius-sm: 10px; + --content-width: 1180px; + --grid-gap: 18px; + --font-display: "Orbitron", "Segoe UI", sans-serif; + --font-body: "Noto Sans SC", "Segoe UI", sans-serif; +} + +* { + box-sizing: border-box; +} + +html { + color-scheme: dark; +} + +body { + margin: 0; + min-height: 100vh; + color: var(--text-primary); + font-family: var(--font-body); + background: + radial-gradient(circle at top left, rgba(62, 162, 255, 0.18), transparent 28%), + radial-gradient(circle at top right, rgba(45, 226, 166, 0.08), transparent 22%), + linear-gradient(135deg, #040914 0%, #07111f 45%, #0a1730 100%); + position: relative; + overflow-x: hidden; +} + +body::before, +body::after { + content: ""; + position: fixed; + inset: 0; + pointer-events: none; + z-index: -1; +} + +body::before { + background-image: + linear-gradient(rgba(103, 213, 255, 0.06) 1px, transparent 1px), + linear-gradient(90deg, rgba(103, 213, 255, 0.06) 1px, transparent 1px); + background-size: 42px 42px; + mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.65), transparent 92%); +} + +body::after { + background: + radial-gradient(circle at 20% 20%, rgba(103, 213, 255, 0.08), transparent 16%), + radial-gradient(circle at 80% 35%, rgba(103, 213, 255, 0.05), transparent 18%); +} + +a { + color: inherit; +} + +.page-shell { + width: min(calc(100% - 32px), var(--content-width)); + margin: 0 auto; + padding: 36px 0 48px; +} + +.page-header { + display: grid; + gap: 18px; + grid-template-columns: 1.35fr 0.85fr; + align-items: stretch; + margin-bottom: 24px; +} + +.hero-card, +.stat-card, +.panel-card { + position: relative; + overflow: hidden; + background: linear-gradient(180deg, rgba(10, 24, 46, 0.9), rgba(7, 18, 35, 0.82)); + border: 1px solid var(--line); + border-radius: var(--radius-xl); + box-shadow: var(--shadow); + backdrop-filter: blur(18px); +} + +.hero-card { + padding: 32px; +} + +.hero-card::before, +.stat-card::before, +.panel-card::before, +.entry-card::before { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(103, 213, 255, 0.12), transparent 42%, rgba(103, 213, 255, 0.06)); + pointer-events: none; +} + +.eyebrow { + display: inline-flex; + align-items: center; + gap: 10px; + padding: 8px 14px; + border-radius: 999px; + border: 1px solid rgba(103, 213, 255, 0.28); + background: rgba(103, 213, 255, 0.08); + color: var(--accent); + font-size: 12px; + letter-spacing: 0.24em; + text-transform: uppercase; +} + +.hero-card h1, +.landing-hero h1 { + margin: 18px 0 12px; + font-family: var(--font-display); + font-size: clamp(28px, 4.4vw, 48px); + line-height: 1.08; + letter-spacing: 0.06em; +} + +.hero-card p, +.landing-hero p, +.stat-card p, +.panel-subtitle, +.empty-state, +.loading-state, +.error-state { + color: var(--text-secondary); +} + +.hero-meta { + display: flex; + flex-wrap: wrap; + gap: 12px; + margin-top: 22px; +} + +.meta-chip { + padding: 10px 14px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(147, 175, 209, 0.14); + font-size: 13px; + color: var(--text-primary); +} + +.stat-card { + padding: 28px; + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 18px; +} + +.stat-label { + color: var(--text-secondary); + font-size: 13px; + letter-spacing: 0.18em; + text-transform: uppercase; +} + +.stat-value { + font-family: var(--font-display); + font-size: clamp(28px, 4vw, 44px); + color: var(--accent); + text-shadow: 0 0 18px rgba(103, 213, 255, 0.28); +} + +.panel-card { + padding: 24px; +} + +.panel-title-row { + display: flex; + justify-content: space-between; + gap: 16px; + align-items: center; + margin-bottom: 18px; +} + +.panel-title { + margin: 0; + font-size: 20px; + font-weight: 700; + letter-spacing: 0.04em; +} + +.search-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: var(--grid-gap); + align-items: end; +} + +.search-grid.compact { + grid-template-columns: repeat(5, minmax(0, 1fr)); +} + +.form-group { + display: flex; + flex-direction: column; + gap: 8px; +} + +.form-label { + color: var(--text-secondary); + font-size: 13px; + letter-spacing: 0.06em; +} + +.tech-input, +.tech-button, +.tech-link-button { + border-radius: var(--radius-md); + border: 1px solid var(--line); + min-height: 48px; + font: inherit; +} + +.tech-input { + width: 100%; + padding: 0 16px; + background: rgba(6, 14, 28, 0.8); + color: var(--text-primary); + outline: none; + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02); +} + +.tech-input::placeholder { + color: rgba(147, 175, 209, 0.68); +} + +.tech-input:focus { + border-color: var(--line-strong); + box-shadow: 0 0 0 4px rgba(62, 162, 255, 0.14); +} + +.input-with-action { + position: relative; +} + +.input-with-action .tech-input { + padding-right: 56px; +} + +.icon-action { + position: absolute; + right: 8px; + top: 50%; + transform: translateY(-50%); + width: 40px; + height: 40px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 12px; + border: 1px solid transparent; + background: transparent; + color: var(--accent); + cursor: pointer; + transition: transform 0.18s ease, background 0.18s ease, border-color 0.18s ease; +} + +.icon-action:hover { + transform: translateY(-50%) scale(1.04); + background: rgba(103, 213, 255, 0.1); + border-color: rgba(103, 213, 255, 0.18); +} + +.tech-button, +.tech-link-button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 10px; + padding: 0 20px; + background: linear-gradient(135deg, rgba(103, 213, 255, 0.24), rgba(62, 162, 255, 0.44)); + color: #f7fbff; + font-weight: 700; + letter-spacing: 0.03em; + text-decoration: none; + cursor: pointer; + transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease; +} + +.tech-button:hover, +.tech-link-button:hover { + transform: translateY(-1px); + border-color: rgba(103, 213, 255, 0.4); + box-shadow: 0 12px 30px rgba(62, 162, 255, 0.2); +} + +.tech-button.secondary, +.tech-link-button.secondary { + background: rgba(255, 255, 255, 0.04); + color: var(--text-primary); +} + +.results-card { + min-height: 260px; +} + +.results-shell { + border-radius: var(--radius-lg); + border: 1px solid rgba(103, 213, 255, 0.16); + overflow: hidden; + background: rgba(3, 8, 18, 0.46); +} + +.table-wrapper { + overflow-x: auto; +} + +.result-table { + width: 100%; + min-width: 720px; + border-collapse: collapse; +} + +.result-table th, +.result-table td { + padding: 16px 18px; + border-bottom: 1px solid rgba(103, 213, 255, 0.08); + text-align: left; +} + +.result-table th { + background: rgba(103, 213, 255, 0.08); + color: var(--text-secondary); + font-size: 13px; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.result-table td { + color: var(--text-primary); + background: rgba(255, 255, 255, 0.01); +} + +.result-table tbody tr:hover td { + background: rgba(103, 213, 255, 0.04); +} + +.table-highlight { + color: var(--accent); + font-weight: 700; +} + +.text-truncate { + display: inline-block; + max-width: 220px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: bottom; +} + +.status-pill { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + border-radius: 999px; + font-size: 13px; + font-weight: 700; + line-height: 1; + border: 1px solid transparent; +} + +.status-pill.done { + color: #081a14; + background: rgba(45, 226, 166, 0.9); +} + +.status-pill.pending { + color: #251400; + background: rgba(255, 204, 102, 0.92); +} + +.loading-state, +.empty-state, +.error-state { + min-height: 220px; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + padding: 36px 24px; + font-size: 15px; +} + +.error-state { + color: #ffd7df; +} + +.page-footer { + width: min(calc(100% - 32px), var(--content-width)); + margin: 0 auto 24px; + color: rgba(147, 175, 209, 0.74); + font-size: 13px; + text-align: center; +} + +.scanner-overlay { + display: none; + position: fixed; + inset: 0; + z-index: 9999; + background: rgba(2, 7, 16, 0.92); + backdrop-filter: blur(14px); + align-items: center; + justify-content: center; + flex-direction: column; + gap: 18px; + padding: 24px; +} + +.scanner-frame { + position: relative; + width: min(88vw, 360px); + height: min(88vw, 360px); + border-radius: 28px; + overflow: hidden; + border: 1px solid rgba(103, 213, 255, 0.28); + box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35); + background: #000; +} + +.scanner-frame::before, +.scanner-frame::after { + content: ""; + position: absolute; + inset: 16px; + border: 1px solid rgba(103, 213, 255, 0.25); + border-radius: 18px; + pointer-events: none; +} + +.scanner-line { + position: absolute; + left: 8%; + width: 84%; + height: 2px; + background: linear-gradient(90deg, transparent, var(--accent), transparent); + box-shadow: 0 0 18px rgba(103, 213, 255, 0.7); + animation: scanner-sweep 2.2s linear infinite; + z-index: 2; +} + +@keyframes scanner-sweep { + 0% { + top: 16%; + } + + 100% { + top: 84%; + } +} + +#reader { + width: 100% !important; + height: 100% !important; +} + +.scanner-text { + color: var(--text-secondary); + font-size: 14px; + letter-spacing: 0.04em; +} + +.landing-shell { + width: min(calc(100% - 32px), 1240px); + margin: 0 auto; + padding: 36px 0 48px; +} + +.landing-hero { + position: relative; + padding: 38px; + border-radius: 34px; + overflow: hidden; + background: + linear-gradient(135deg, rgba(10, 24, 46, 0.95), rgba(7, 18, 35, 0.86)), + linear-gradient(90deg, rgba(103, 213, 255, 0.18), transparent); + border: 1px solid var(--line); + box-shadow: var(--shadow); +} + +.landing-grid { + margin-top: 24px; + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 18px; +} + +.entry-card { + position: relative; + overflow: hidden; + display: grid; + gap: 18px; + padding: 24px; + border-radius: 24px; + text-decoration: none; + background: linear-gradient(180deg, rgba(9, 20, 40, 0.88), rgba(7, 18, 35, 0.86)); + border: 1px solid var(--line); + box-shadow: var(--shadow); + transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; +} + +.entry-card:hover { + transform: translateY(-4px); + border-color: rgba(103, 213, 255, 0.4); + box-shadow: 0 24px 48px rgba(0, 0, 0, 0.38); +} + +.entry-kicker { + color: var(--accent); + font-size: 12px; + letter-spacing: 0.22em; + text-transform: uppercase; +} + +.entry-card h2 { + margin: 0; + font-size: 24px; +} + +.entry-card p { + margin: 0; + color: var(--text-secondary); + line-height: 1.7; +} + +.entry-meta { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + color: var(--text-primary); + font-size: 14px; +} + +.entry-arrow { + width: 42px; + height: 42px; + border-radius: 999px; + display: inline-flex; + align-items: center; + justify-content: center; + background: rgba(103, 213, 255, 0.12); + color: var(--accent); +} + +.detail-shell { + width: min(calc(100% - 32px), 1120px); + margin: 0 auto; + padding: 28px 0 48px; +} + +.top-actions { + display: flex; + justify-content: space-between; + align-items: center; + gap: 14px; + margin-bottom: 18px; +} + +.top-actions-group { + display: flex; + flex-wrap: wrap; + gap: 12px; +} + +.detail-grid { + display: grid; + grid-template-columns: 1.1fr 0.9fr; + gap: 18px; +} + +.preview-panel, +.summary-panel, +.detail-panel { + position: relative; + overflow: hidden; + border-radius: var(--radius-xl); + border: 1px solid var(--line); + background: linear-gradient(180deg, rgba(10, 24, 46, 0.92), rgba(7, 18, 35, 0.84)); + box-shadow: var(--shadow); +} + +.preview-panel, +.summary-panel, +.detail-panel { + padding: 24px; +} + +.preview-panel::before, +.summary-panel::before, +.detail-panel::before { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(103, 213, 255, 0.08), transparent 45%, rgba(103, 213, 255, 0.05)); + pointer-events: none; +} + +.section-kicker { + color: var(--accent); + font-size: 12px; + letter-spacing: 0.22em; + text-transform: uppercase; +} + +.section-heading { + margin: 12px 0 10px; + font-size: 26px; + line-height: 1.2; +} + +.section-copy { + margin: 0; + color: var(--text-secondary); + line-height: 1.75; +} + +.summary-stack { + display: grid; + gap: 14px; + margin-top: 20px; +} + +.summary-tile { + padding: 16px 18px; + border-radius: 18px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(103, 213, 255, 0.12); +} + +.summary-label { + display: block; + margin-bottom: 8px; + color: var(--text-secondary); + font-size: 12px; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.summary-value { + font-size: 18px; + font-weight: 700; + color: var(--text-primary); + word-break: break-word; +} + +.summary-value.emphasis { + color: var(--accent); +} + +.certificate-stage { + position: relative; + min-height: 520px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 24px; + border: 1px solid rgba(103, 213, 255, 0.14); + background: #ffffff; + overflow: hidden; + cursor: pointer; +} + +.certificate-stage img { + width: 100%; + height: auto; + display: none; + position: relative; + z-index: 1; +} + +.certificate-hint { + position: absolute; + inset: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 12px; + text-align: center; + color: #64748b; + padding: 24px; +} + +.certificate-hint strong { + color: #0f172a; + font-size: 18px; +} + +.hint-orb { + width: 72px; + height: 72px; + border-radius: 999px; + display: inline-flex; + align-items: center; + justify-content: center; + background: rgba(103, 213, 255, 0.1); + border: 1px solid rgba(103, 213, 255, 0.18); + color: var(--accent); + font-size: 30px; + box-shadow: 0 0 24px rgba(103, 213, 255, 0.12); +} + +.info-table-shell { + overflow: hidden; + border-radius: 20px; + border: 1px solid rgba(103, 213, 255, 0.14); + background: rgba(3, 8, 18, 0.4); +} + +.info-table { + width: 100%; + border-collapse: collapse; +} + +.info-table th, +.info-table td { + padding: 16px 18px; + border-bottom: 1px solid rgba(103, 213, 255, 0.08); + text-align: left; + vertical-align: top; +} + +.info-table th { + width: 28%; + color: var(--text-secondary); + font-size: 13px; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + background: rgba(103, 213, 255, 0.06); +} + +.info-table td { + color: var(--text-primary); + line-height: 1.7; +} + +.ticket-header { + display: flex; + justify-content: space-between; + gap: 16px; + align-items: flex-start; + margin-bottom: 20px; +} + +.ticket-title { + margin: 10px 0 6px; + font-size: clamp(26px, 4vw, 36px); + line-height: 1.16; +} + +.ticket-subtitle { + margin: 0; + color: var(--text-secondary); +} + +.ticket-detail-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 14px; +} + +.detail-item { + padding: 16px 18px; + border-radius: 18px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(103, 213, 255, 0.12); +} + +.detail-item.wide { + grid-column: 1 / -1; +} + +.detail-label { + display: block; + margin-bottom: 8px; + color: var(--text-secondary); + font-size: 12px; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.detail-value { + color: var(--text-primary); + font-size: 16px; + line-height: 1.65; + word-break: break-word; +} + +.detail-value.money { + color: var(--accent); + font-weight: 700; +} + +.feedback-card { + min-height: 220px; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + color: var(--text-secondary); + font-size: 15px; +} + +@media (max-width: 1040px) { + .page-header, + .landing-grid, + .detail-grid { + grid-template-columns: 1fr; + } + + .search-grid, + .search-grid.compact { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (max-width: 720px) { + .page-shell, + .landing-shell, + .detail-shell { + width: min(calc(100% - 20px), var(--content-width)); + padding-top: 20px; + } + + .hero-card, + .stat-card, + .panel-card, + .landing-hero, + .entry-card, + .preview-panel, + .summary-panel, + .detail-panel { + border-radius: 22px; + } + + .hero-card, + .landing-hero, + .panel-card, + .entry-card, + .preview-panel, + .summary-panel, + .detail-panel { + padding: 20px; + } + + .search-grid, + .search-grid.compact { + grid-template-columns: 1fr; + } + + .result-table { + min-width: 620px; + } + + .ticket-header, + .top-actions { + flex-direction: column; + align-items: stretch; + } + + .ticket-detail-grid { + grid-template-columns: 1fr; + } + + .certificate-stage { + min-height: 360px; + } +} + +@media print { + body { + background: #ffffff; + color: #111827; + } + + body::before, + body::after, + .page-footer, + .top-actions { + display: none !important; + } + + .detail-shell, + .page-shell { + width: 100%; + max-width: none; + padding: 0; + } + + .detail-grid { + display: block; + } + + .preview-panel, + .summary-panel, + .detail-panel, + .panel-card, + .hero-card, + .stat-card { + background: #ffffff !important; + color: #111827 !important; + box-shadow: none !important; + border: 1px solid #d1d5db !important; + } + + .preview-panel::before, + .summary-panel::before, + .detail-panel::before, + .panel-card::before, + .hero-card::before, + .stat-card::before { + display: none !important; + } + + .section-kicker, + .summary-label, + .detail-label, + .info-table th, + .ticket-subtitle, + .section-copy, + .summary-value, + .detail-value, + .top-actions-group, + .status-pill, + .page-shell * { + color: inherit !important; + } + + .certificate-stage { + min-height: 0; + border: none !important; + background: #ffffff !important; + page-break-after: always; + break-after: page; + } + + .preview-panel { + padding: 0 !important; + border: none !important; + background: #ffffff !important; + } + + .preview-panel > .section-kicker, + .preview-panel > .section-heading, + .preview-panel > .section-copy, + .summary-panel { + display: none !important; + } + + .certificate-hint { + display: none !important; + } + + .certificate-stage img { + display: block !important; + } + + .info-table-shell { + border: 1px solid #d1d5db !important; + background: #ffffff !important; + } + + .detail-panel { + break-before: page; + } + + @page { + size: A4 portrait; + margin: 10mm; + } +} diff --git a/index.html b/index.html index 1aced0d..8611146 100644 --- a/index.html +++ b/index.html @@ -3,33 +3,60 @@ - 多彩场景信函样例 - - + 查询入口总览 + + + + +
+
+ Unified Gateway +

智能查询入口矩阵

+

统一接入证书、单据与信函三类查询页面,整体切换为一致的科技感视觉风格,方便在同一入口快速跳转。

+
+ 统一样式系统 + 快速入口导航 + 兼容桌面与移动端 +
+
-
- -

亲爱的[朋友/同学姓名]:

+
+ +
Module 01
+

证书查询

+

按编号、姓名或扫码方式检索证书记录,进入详情页查看核验信息与证书原件。

+ +
-
-

好久不见!最近过得怎么样?

-

转眼间夏天就要到了,还记得那时候我们一起在操场上挥洒汗水、在教室里畅谈未来的日子吗?那段时光,真的就像昨天刚发生一样。

-

这次致信,是想告诉你一个好消息。下周六我要举办一个久违的聚会,希望你一定要来!哪怕只是聊聊天,喝杯茶,也是极好的。时光易逝,友情常驻。愿你每天都充满活力,事事顺心!

-
+ +
Module 02
+

单据查询

+

查看单据金额、处理状态与明细信息,保留扫码能力与原有详情跳转。

+ +
-
-

此致

-

敬礼!

-
- - - -
+ +
Module 03
+

信函查询

+

按收件人、关键字和寄送时间查询信函流转记录,集中展示路径与摘要。

+ +
+ +
+
+

© 2026 BI Intelligent Query Interface

+
- \ No newline at end of file + diff --git a/ticket/detail.html b/ticket/detail.html index ae874b6..82f4744 100644 --- a/ticket/detail.html +++ b/ticket/detail.html @@ -4,239 +4,133 @@ 单据详情 - + + + + - - - +
+
+ 返回查询页 +
+ + +
+
-
- ← 返回查询页面 + +
-
-
正在加载详情...
-
-
+
+

© 2026 BI Intelligent Query Interface

+
- - + document.addEventListener('DOMContentLoaded', loadTicketDetail); + + - \ No newline at end of file + diff --git a/ticket/index.html b/ticket/index.html index 0c1a269..10df9ca 100644 --- a/ticket/index.html +++ b/ticket/index.html @@ -4,234 +4,206 @@ 单据查询系统 + + + + - - -
-

单据查询

-

请输入查询条件,可查询 2024 年至今的单据

- -
-
- -
- -
- +
+ + +
+
+
+

检索条件

+
支持文本检索与扫码录入
+
+
+ +
+
+ +
+ + +
+
+
+ + +
+
+ + +
+ +
+
+ +
+
+
+

查询结果

+
金额、状态与详情一屏展示
+
+
+
+
输入查询条件后开始检索,或使用扫码功能快速定位单据。
+
+
+
+ +
+
+
+
-
- - -
-
- - -
- +
请将二维码保持在扫描框内
+
-
-
+
+

© 2026 BI Intelligent Query Interface

+
-
-
-
-
-
-
请将二维码置于框内
- -
+ + document.getElementById('stopScanBtn').addEventListener('click', closeScanner); + + async function handleSearch() { + const searchTerm = document.getElementById('searchTerm').value.trim(); + const dateFrom = document.getElementById('dateFrom').value; + const dateTo = document.getElementById('dateTo').value; + const resultsDiv = document.getElementById('searchResults'); + + resultsDiv.innerHTML = '
正在连接单据数据库并执行检索...
'; + + try { + let query = sbClient.from('tickets').select('*'); + if (searchTerm) { + query = query.or(`ticket_number.ilike.%${searchTerm}%,customer_name.ilike.%${searchTerm}%`); + } + if (dateFrom) query = query.gte('created_at', dateFrom); + if (dateTo) query = query.lte('created_at', dateTo); + + const { data, error } = await query.order('created_at', { ascending: false }); + if (error) throw error; + + displayResults(data); + } catch (error) { + resultsDiv.innerHTML = `
查询失败:${error.message}
`; + } + } + + function displayResults(tickets) { + const resultsDiv = document.getElementById('searchResults'); + if (!tickets || tickets.length === 0) { + resultsDiv.innerHTML = '
未找到符合条件的单据记录。
'; + return; + } + + let html = ` +
+ + + + + + + + + + + + + + `; + + tickets.forEach(ticket => { + const amount = (ticket.amount || 0).toLocaleString('zh-CN', { style: 'currency', currency: 'CNY' }); + const reason = ticket.reason || ''; + const displayReason = reason.length > 18 + ? `${reason}` + : reason; + + html += ` + + + + + + + + + + `; + }); + + html += '
编号姓名事由金额日期状态操作
${ticket.ticket_number || ''}${ticket.customer_name || ''}${displayReason}${amount}${ticket.created_at ? new Date(ticket.created_at).toLocaleDateString('zh-CN') : '-'} + + ${ticket.processed ? '已处理' : '未处理'} + +
'; + resultsDiv.innerHTML = html; + } + + document.getElementById('searchBtn').addEventListener('click', handleSearch); + - \ No newline at end of file + diff --git a/xinhan/index.html b/xinhan/index.html index d537ff2..acaa59f 100644 --- a/xinhan/index.html +++ b/xinhan/index.html @@ -1,99 +1,156 @@ - - - 信函查询 - - + + + 信函查询系统 + + + + + -
-
-

信函查询

-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
- -
-
-
+
+ - +