feat(P4): precompute移植+app.js sources双向回填+回归1003/1003+验收体积/文件/data.json
Deploy to GitHub Pages / deploy (push) Failing after 16s
Regression / regression (push) Failing after 15m2s

This commit is contained in:
aurora-admin
2026-09-12 14:18:41 +08:00
parent 16f365a045
commit c65a69c34e
401 changed files with 22932 additions and 140 deletions
+49
View File
@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Aurora Admin · ShortcutPanel</title>
<link rel="stylesheet" href="../.design_library/aurora-admin/colors_and_type.css" />
<link rel="stylesheet" href="./ShortcutPanel.css" />
</head>
<body>
<div class="aa-page">
<h2 class="aa-h2">ShortcutPanel 快捷键面板</h2>
<p class="aa-desc">展示全部快捷键,支持搜索过滤。</p>
<div class="aa-demo">
<div class="aa-shortcut" role="region">
<input class="aa-shortcut-search" role="region" id="search" placeholder="搜索快捷键…" />
<div class="aa-shortcut-list" role="region" id="list"></div>
</div>
</div>
</div>
<script>
var items = [
{ name: '保存', key: 'Ctrl + S' },
{ name: '搜索', key: 'Ctrl + K' },
{ name: '新建', key: 'Ctrl + N' },
{ name: '刷新', key: 'F5' },
{ name: '关闭页签', key: 'Ctrl + W' },
{ name: '全屏', key: 'F11' },
{ name: '帮助', key: '?' },
{ name: '命令面板', key: 'Ctrl + P' }
];
var list = document.getElementById('list');
var search = document.getElementById('search');
function render() {
var q = search.value.trim().toLowerCase();
var filtered = items.filter(function (it) { return !q || it.name.toLowerCase().indexOf(q) >= 0 || it.key.toLowerCase().indexOf(q) >= 0; });
if (!filtered.length) { list.innerHTML = '<div class="aa-shortcut-empty" role="region">无匹配快捷键</div>'; return; }
list.innerHTML = filtered.map(function (it) {
return '<div class="aa-shortcut-item" role="region"><span>' + it.name + '</span><span class="aa-shortcut-key" role="region">' + it.key + '</span></div>';
}).join('');
}
search.addEventListener('input', render);
render();
</script>
</body>
</html>
+37
View File
@@ -0,0 +1,37 @@
import React, { useState, useMemo } from 'react';
import './ShortcutPanel.css';
const DEFAULT_ITEMS = [
{ name: '保存', key: 'Ctrl + S' },
{ name: '搜索', key: 'Ctrl + K' },
{ name: '新建', key: 'Ctrl + N' },
{ name: '刷新', key: 'F5' },
{ name: '关闭页签', key: 'Ctrl + W' },
{ name: '全屏', key: 'F11' },
{ name: '帮助', key: '?' },
{ name: '命令面板', key: 'Ctrl + P' }
];
export default function ShortcutPanel({ items = DEFAULT_ITEMS }) {
const [q, setQ] = useState('');
const filtered = useMemo(() => {
const s = q.trim().toLowerCase();
if (!s) return items;
return items.filter((it) => it.name.toLowerCase().indexOf(s) >= 0 || it.key.toLowerCase().indexOf(s) >= 0);
}, [q, items]);
return (
<div className="aa-shortcut">
<input className="aa-shortcut-search" value={q} placeholder="搜索快捷键…" onChange={(e) => setQ(e.target.value)} />
<div className="aa-shortcut-list">
{!filtered.length && <div className="aa-shortcut-empty">无匹配快捷键</div>}
{filtered.map((it, i) => (
<div key={i} className="aa-shortcut-item">
<span>{it.name}</span>
<span className="aa-shortcut-key">{it.key}</span>
</div>
))}
</div>
</div>
);
}
+44
View File
@@ -0,0 +1,44 @@
<template>
<div class="aa-shortcut">
<input class="aa-shortcut-search" v-model="q" placeholder="搜索快捷键…" />
<div class="aa-shortcut-list">
<div v-if="!filtered.length" class="aa-shortcut-empty">无匹配快捷键</div>
<div v-for="(it, i) in filtered" :key="i" class="aa-shortcut-item">
<span>{{ it.name }}</span><span class="aa-shortcut-key">{{ it.key }}</span>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'AaShortcutPanel',
props: {
items: {
type: Array,
default: () => [
{ name: '保存', key: 'Ctrl + S' },
{ name: '搜索', key: 'Ctrl + K' },
{ name: '新建', key: 'Ctrl + N' },
{ name: '刷新', key: 'F5' },
{ name: '关闭页签', key: 'Ctrl + W' },
{ name: '全屏', key: 'F11' },
{ name: '帮助', key: '?' },
{ name: '命令面板', key: 'Ctrl + P' }
]
}
},
data() {
return { q: '' };
},
computed: {
filtered() {
var q = this.q.trim().toLowerCase();
if (!q) return this.items;
return this.items.filter(function (it) { return it.name.toLowerCase().indexOf(q) >= 0 || it.key.toLowerCase().indexOf(q) >= 0; });
}
}
};
</script>
<style src="./ShortcutPanel.css"></style>
+39
View File
@@ -0,0 +1,39 @@
<template>
<div class="aa-shortcut">
<input class="aa-shortcut-search" v-model="q" placeholder="搜索快捷键…" />
<div class="aa-shortcut-list">
<div v-if="!filtered.length" class="aa-shortcut-empty">无匹配快捷键</div>
<div v-for="(it, i) in filtered" :key="i" class="aa-shortcut-item">
<span>{{ it.name }}</span><span class="aa-shortcut-key">{{ it.key }}</span>
</div>
</div>
</div>
</template>
<script setup>
import { ref, computed } from 'vue';
const props = defineProps({
items: {
type: Array,
default: () => [
{ name: '保存', key: 'Ctrl + S' },
{ name: '搜索', key: 'Ctrl + K' },
{ name: '新建', key: 'Ctrl + N' },
{ name: '刷新', key: 'F5' },
{ name: '关闭页签', key: 'Ctrl + W' },
{ name: '全屏', key: 'F11' },
{ name: '帮助', key: '?' },
{ name: '命令面板', key: 'Ctrl + P' }
]
}
});
const q = ref('');
const filtered = computed(() => {
const s = q.value.trim().toLowerCase();
if (!s) return props.items;
return props.items.filter((it) => it.name.toLowerCase().indexOf(s) >= 0 || it.key.toLowerCase().indexOf(s) >= 0);
});
</script>
<style src="./ShortcutPanel.css"></style>