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
+35
View File
@@ -0,0 +1,35 @@
<!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 · EmptyPro(普通 H5)</title>
<link rel="stylesheet" href="../.design_library/aurora-admin/colors_and_type.css" />
<link rel="stylesheet" href="EmptyPro.css" />
<style>body{margin:0;padding:24px;background: var(--au-color-page-bg);display:flex;gap:16px;flex-wrap:wrap;}
.aa-card{background: var(--au-color-card-bg);border: 1px solid var(--au-color-border);border-radius:8px;width:320px;}</style>
</head>
<body>
<div class="aa-card"><div class="aa-empty" role="status" data-type="empty"></div></div>
<div class="aa-card"><div class="aa-empty" role="status" data-type="permission"></div></div>
<div class="aa-card"><div class="aa-empty" role="status" data-type="search"></div></div>
<div class="aa-card"><div class="aa-empty" role="status" data-type="error"></div></div>
<script>
var PRESET = {
empty: { icon: '📭', title: '暂无数据', desc: '当前列表为空,试试新增一条记录。' },
permission: { icon: '🔒', title: '无访问权限', desc: '你没有查看该内容的权限。' },
search: { icon: '🔍', title: '未找到结果', desc: '换个关键词或筛选条件再试。' },
error: { icon: '⚠️', title: '加载失败', desc: '网络异常,请稍后重试。' }
};
document.querySelectorAll('.aa-empty').forEach(function (el) {
var p = PRESET[el.dataset.type] || PRESET.empty;
el.innerHTML = '<div class="aa-empty-icon">' + p.icon + '</div>' +
'<div class="aa-empty-title">' + p.title + '</div>' +
'<div class="aa-empty-desc">' + p.desc + '</div>' +
'<div class="aa-empty-actions" role="status"><button class="aa-empty-btn primary" role="status">主要操作</button>' +
'<button class="aa-empty-btn" role="status">次要操作</button></div>';
});
</script>
</body>
</html>
+31
View File
@@ -0,0 +1,31 @@
import React from 'react';
import './EmptyPro.css';
const PRESET = {
empty: { icon: '📭', title: '暂无数据', desc: '当前列表为空,试试新增一条记录。' },
permission: { icon: '🔒', title: '无访问权限', desc: '你没有查看该内容的权限。' },
search: { icon: '🔍', title: '未找到结果', desc: '换个关键词或筛选条件再试。' },
error: { icon: '⚠️', title: '加载失败', desc: '网络异常,请稍后重试。' }
};
export default function EmptyPro({ type = 'empty', icon, title, desc, actionText, secondaryText, onAction, onSecondary }) {
const p = PRESET[type] || {};
const resolved = {
icon: icon || p.icon || '📭',
title: title || p.title || '暂无数据',
desc: desc || p.desc || ''
};
return (
<div className="aa-empty">
<div className="aa-empty-icon">{resolved.icon}</div>
<div className="aa-empty-title">{resolved.title}</div>
{resolved.desc ? <div className="aa-empty-desc">{resolved.desc}</div> : null}
{(actionText || secondaryText) ? (
<div className="aa-empty-actions">
{actionText ? <button className="aa-empty-btn primary" onClick={onAction}>{actionText}</button> : null}
{secondaryText ? <button className="aa-empty-btn" onClick={onSecondary}>{secondaryText}</button> : null}
</div>
) : null}
</div>
);
}
+42
View File
@@ -0,0 +1,42 @@
<template>
<div class="aa-empty">
<div class="aa-empty-icon">{{ resolved.icon }}</div>
<div class="aa-empty-title">{{ resolved.title }}</div>
<div class="aa-empty-desc" v-if="resolved.desc">{{ resolved.desc }}</div>
<div class="aa-empty-actions" v-if="actionText || secondaryText">
<button v-if="actionText" class="aa-empty-btn primary" @click="$emit('action')">{{ actionText }}</button>
<button v-if="secondaryText" class="aa-empty-btn" @click="$emit('secondary')">{{ secondaryText }}</button>
</div>
</div>
</template>
<script>
export default {
name: 'AaEmptyPro',
props: {
type: { type: String, default: 'empty' },
icon: { type: String, default: '' },
title: { type: String, default: '' },
desc: { type: String, default: '' },
actionText: { type: String, default: '' },
secondaryText: { type: String, default: '' }
},
computed: {
resolved: function () {
var p = {
empty: { icon: '📭', title: '暂无数据', desc: '当前列表为空,试试新增一条记录。' },
permission: { icon: '🔒', title: '无访问权限', desc: '你没有查看该内容的权限。' },
search: { icon: '🔍', title: '未找到结果', desc: '换个关键词或筛选条件再试。' },
error: { icon: '⚠️', title: '加载失败', desc: '网络异常,请稍后重试。' }
}[this.type] || {};
return {
icon: this.icon || p.icon || '📭',
title: this.title || p.title || '暂无数据',
desc: this.desc || p.desc || ''
};
}
}
};
</script>
<style src="./EmptyPro.css"></style>
+40
View File
@@ -0,0 +1,40 @@
<template>
<div class="aa-empty">
<div class="aa-empty-icon">{{ resolved.icon }}</div>
<div class="aa-empty-title">{{ resolved.title }}</div>
<div class="aa-empty-desc" v-if="resolved.desc">{{ resolved.desc }}</div>
<div class="aa-empty-actions" v-if="actionText || secondaryText">
<button v-if="actionText" class="aa-empty-btn primary" @click="emit('action')">{{ actionText }}</button>
<button v-if="secondaryText" class="aa-empty-btn" @click="emit('secondary')">{{ secondaryText }}</button>
</div>
</div>
</template>
<script setup>
import { computed } from 'vue';
const props = defineProps({
type: { type: String, default: 'empty' },
icon: { type: String, default: '' },
title: { type: String, default: '' },
desc: { type: String, default: '' },
actionText: { type: String, default: '' },
secondaryText: { type: String, default: '' }
});
const emit = defineEmits(['action', 'secondary']);
const resolved = computed(() => {
const p = {
empty: { icon: '📭', title: '暂无数据', desc: '当前列表为空,试试新增一条记录。' },
permission: { icon: '🔒', title: '无访问权限', desc: '你没有查看该内容的权限。' },
search: { icon: '🔍', title: '未找到结果', desc: '换个关键词或筛选条件再试。' },
error: { icon: '⚠️', title: '加载失败', desc: '网络异常,请稍后重试。' }
}[props.type] || {};
return {
icon: props.icon || p.icon || '📭',
title: props.title || p.title || '暂无数据',
desc: props.desc || p.desc || ''
};
});
</script>
<style src="./EmptyPro.css"></style>