This commit is contained in:
2026-07-02 13:03:51 +08:00
8 changed files with 115 additions and 1372 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+34
View File
@@ -1,3 +1,4 @@
<<<<<<< HEAD
<!doctype html> <!doctype html>
<html lang="zh-CN"> <html lang="zh-CN">
<head> <head>
@@ -29,6 +30,39 @@
})(); })();
</script> </script>
<script type="module" crossorigin src="/assets/index-CD-m81KU.js"></script> <script type="module" crossorigin src="/assets/index-CD-m81KU.js"></script>
=======
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&display=swap" rel="stylesheet" />
<title>民众智创</title>
<script>
(function() {
var cached = localStorage.getItem('siteInfo');
if (cached) {
try {
var info = JSON.parse(cached);
if (info.siteName) {
document.title = info.siteName;
}
if (info.siteLogo) {
var link = document.querySelector('link[rel="icon"]');
if (link) {
link.href = info.siteLogo;
link.type = 'image/png';
}
}
} catch (e) {}
}
})();
</script>
<script type="module" crossorigin src="/assets/index-CebEVS-b.js"></script>
>>>>>>> 44aba3516b2577101e2bf90ad9e652009d7fd7d5
<link rel="stylesheet" crossorigin href="/assets/index-Bi8mcSs8.css"> <link rel="stylesheet" crossorigin href="/assets/index-Bi8mcSs8.css">
</head> </head>
<body> <body>
@@ -55,17 +55,14 @@ const PreResultDisplay: React.FC<PreResultDisplayProps> = ({ preResult }) => {
if (!config) return null; if (!config) return null;
const value = parsedData[key as keyof PreResultData]; const value = parsedData[key as keyof PreResultData];
const isYes = value === 'YES'; const isYes = value === 'YES';
const isNo = value === 'NO';
const isUnknown = value === 'UNKNOWN'; const isUnknown = value === 'UNKNOWN';
if (isUnknown) return null;
let displayLabel, displayColor; let displayLabel, displayColor;
// if (isUnknown) {
// displayLabel = config.unknownLabel;
// displayColor = config.unknownColor;
// } else
if (isYes) { if (isYes) {
displayLabel = config.label; displayLabel = config.label;
displayColor = config.yesColor; displayColor = config.yesColor;
} else { } else if (isNo) {
displayLabel = config.noLabel; displayLabel = config.noLabel;
displayColor = config.noColor; displayColor = config.noColor;
} }
@@ -102,15 +99,14 @@ const PreResultDisplay: React.FC<PreResultDisplayProps> = ({ preResult }) => {
{fieldConfig.map(config => { {fieldConfig.map(config => {
const value = parsedData[config.key as keyof PreResultData]; const value = parsedData[config.key as keyof PreResultData];
const isYes = value === 'YES'; const isYes = value === 'YES';
const isNo = value === 'NO';
const isUnknown = value === 'UNKNOWN'; const isUnknown = value === 'UNKNOWN';
if (isUnknown) return null;
let displayLabel, displayColor; let displayLabel, displayColor;
if (isUnknown) { if (isYes) {
displayLabel = config.unknownLabel;
displayColor = config.unknownColor;
} else if (isYes) {
displayLabel = config.label; displayLabel = config.label;
displayColor = config.yesColor; displayColor = config.yesColor;
} else { } else if (isNo) {
displayLabel = config.noLabel; displayLabel = config.noLabel;
displayColor = config.noColor; displayColor = config.noColor;
} }
+66 -26
View File
@@ -171,6 +171,27 @@ const GeneratedRecord: React.FC = () => {
const hasGeneratedResourceId = (item: any): boolean => { const hasGeneratedResourceId = (item: any): boolean => {
return Boolean(item.generatedResourceId); return Boolean(item.generatedResourceId);
}; };
// 检查视频尺寸是否符合480p要求(270×480或480×270
const checkVideoSize = (imagePx: string): boolean => {
if (!imagePx) return true;
const match = imagePx.match(/^(\d+)x(\d+)$/);
if (!match) return true;
const width = parseInt(match[1], 10);
const height = parseInt(match[2], 10);
const aspectRatio = width / height;
const isLandscape = width >= height;
if (isLandscape) {
const isValidWidth = width >= 480 && width <= 2560;
const isValidHeight = height >= 270 && height <= 1440;
const isValidRatio = aspectRatio >= 1.775 && aspectRatio <= 1.784;
return isValidWidth && isValidHeight && isValidRatio;
} else {
const isValidWidth = width >= 270 && width <= 1440;
const isValidHeight = height >= 480 && height <= 2560;
const isValidRatio = aspectRatio >= 0.555 && aspectRatio <= 0.564;
return isValidWidth && isValidHeight && isValidRatio;
}
};
// 多选相关函数 // 多选相关函数
const handleToggleSelect = (itemId: string) => { const handleToggleSelect = (itemId: string) => {
setSelectedItems(prev => { setSelectedItems(prev => {
@@ -654,6 +675,7 @@ const GeneratedRecord: React.FC = () => {
if (item.videoUrl && item.videoUrl.trim()) { if (item.videoUrl && item.videoUrl.trim()) {
const dimensions = await getVideoDimensions(item.videoUrl); const dimensions = await getVideoDimensions(item.videoUrl);
if (dimensions) { if (dimensions) {
console.log(dimensions);
item.imagePx = dimensions; item.imagePx = dimensions;
} }
} }
@@ -1091,33 +1113,51 @@ const GeneratedRecord: React.FC = () => {
)} )}
{isSelectionMode && ( {isSelectionMode && (
<div <>
style={{ <div
position: 'absolute', style={{
top: 8, position: 'absolute',
left: 8, top: 8,
width: 20, left: 8,
height: 20, width: 20,
borderRadius: '50%', height: 20,
backgroundColor: isSelectedItem ? '#10b981' : 'rgba(255,255,255,0.9)', borderRadius: '50%',
border: isSelectedItem ? '2px solid #10b981' : '2px solid #d1d5db', backgroundColor: isSelectedItem ? '#10b981' : 'rgba(255,255,255,0.9)',
display: 'flex', border: isSelectedItem ? '2px solid #10b981' : '2px solid #d1d5db',
alignItems: 'center', display: 'flex',
justifyContent: 'center', alignItems: 'center',
cursor: 'pointer', justifyContent: 'center',
zIndex: 10, cursor: 'pointer',
}} zIndex: 10,
onClick={(e) => { }}
e.stopPropagation(); onClick={(e) => {
handleToggleSelect(getItemResourceId(item)); e.stopPropagation();
}} handleToggleSelect(getItemResourceId(item));
> }}
{isSelectedItem && ( >
<svg width={12} height={12} viewBox="0 0 12 12" fill="none"> {isSelectedItem && (
<path d="M10 3L4.5 8.5L2 6" stroke="white" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" /> <svg width={12} height={12} viewBox="0 0 12 12" fill="none">
</svg> <path d="M10 3L4.5 8.5L2 6" stroke="white" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" />
</svg>
)}
</div>
{isSelectedItem && filterMedia === 'video' && item.imagePx && !checkVideoSize(item.imagePx) && (
<div style={{
position: 'absolute',
top: 36,
left: 8,
right: 8,
padding: '4px 8px',
backgroundColor: 'rgba(239, 68, 68, 0.9)',
color: '#fff',
fontSize: 10,
borderRadius: 4,
zIndex: 10,
}}>
</div>
)} )}
</div> </>
)} )}
{!isSelectionMode && ( {!isSelectionMode && (