`;
- // 子类别显示
if (cat.subcategories && cat.subcategories.length > 0) {
- const subName = getSubcategoryName(categoryId, item.subcategory_id);
- const subIcon = getSubcategoryIcon(categoryId, item.subcategory_id);
- html += `| ${item.subcategory_id ? `${subName}` : '-'} | `;
+ html += `${item.subcategory_id ? `${getSubcategoryName(categoryId, item.subcategory_id)}` : '-'} | `;
}
- keys.forEach(k => { html += `${item[k] || '-'} | `; });
+ displayFields.forEach(f => {
+ const value = item[f.key];
+ let displayValue = '-';
+ if (value !== null && value !== undefined && value !== '') {
+ if (f.type === 'boolean') {
+ displayValue = value ? '是' : '否';
+ } else if (f.type === 'json') {
+ displayValue = typeof value === 'object' ? JSON.stringify(value).substring(0, 30) + '...' : String(value).substring(0, 30);
+ } else {
+ displayValue = String(value).substring(0, 30);
+ }
+ }
+ html += `${displayValue} | `;
+ });
html += `
- | `;
html += `
@@ -928,6 +893,12 @@
// 加载模型列表
async function loadAdminModels() {
renderSubcategoryFilters('ai-models', 'model-subcategory-filters', 'filterModelsBySubcategory');
+
+ // 获取类别字段配置
+ const cat = categories.find(c => c.id === 'ai-models');
+ const fields = cat ? (cat.fields || []) : [];
+ const subcats = cat ? (cat.subcategories || []) : [];
+
const res = await fetch('/api/models?all=1');
let models = await res.json();
@@ -936,36 +907,80 @@
models = models.filter(m => m.subcategory_id === modelSubcategoryFilter);
}
- if (models.length === 0) { document.getElementById('admin-models-table').innerHTML = ' |
- |
-
-
-
- |
- ${m.name} |
- ${m.organization} |
-
- ${m.subcategory_id ? `${getSubcategoryName('ai-models', m.subcategory_id)}` : '-'}
- |
- ${m.parameters}B |
- ${m.context_length || '-'} |
- ${m.is_open_source ? '开源' : '商业'} |
- ${m.publish_date || '-'} |
- ${m.views || 0} |
-
-
-
-
- ${m.raw_text ? `` : ''}
- |
-
-
-
- |
-
- `).join('');
+ if (models.length === 0) {
+ document.getElementById('admin-models-table').innerHTML = '