feat(frontend): replace article system with Zibll 9.0

This commit is contained in:
kate522 committed 2026-08-18 16:06:47 +08:00
1 parent 2881c69e9c
commit 0f2ac6c34a
69 files changed
+2603 -4163

No files matched your search

+33 -1
View File
@@ -359,6 +359,17 @@
</div>
</div>
<!-- Fieldset (single nested object) -->
<div v-else-if="schema.type === 'fieldset'" class="aksrt-field__fieldset">
<AksField
v-for="field in (schema.fields || [])"
:key="field.key"
:schema="field"
:model-value="fieldsetValue(field)"
@update:model-value="updateFieldsetValue(field.key, $event)"
/>
</div>
<!-- Repeater (array of objects) — inline expand (default) -->
<div v-else-if="schema.type === 'repeater' && schema.ui !== 'list-modal'" class="aksrt-field__repeater">
<div
@@ -529,7 +540,7 @@
* AksField — renders a single form field based on its schema definition.
*
* Supported types: switch, input/text, textarea, number, select, radio,
* checkbox, color, icon, media, slider, code, alert, repeater (inline|list-modal), custom (slot).
* checkbox, color, icon, media, slider, code, alert, fieldset, repeater (inline|list-modal), custom (slot).
*/
import { computed, ref, onMounted, watch } from 'vue'
import FaIcon from './FaIcon.vue'
@@ -553,6 +564,20 @@ const props = defineProps({
const emit = defineEmits(['update:modelValue'])
function fieldsetValue(field) {
const current = props.modelValue && typeof props.modelValue === 'object' && !Array.isArray(props.modelValue)
? props.modelValue
: {}
return Object.prototype.hasOwnProperty.call(current, field.key) ? current[field.key] : field.default
}
function updateFieldsetValue(key, value) {
const current = props.modelValue && typeof props.modelValue === 'object' && !Array.isArray(props.modelValue)
? props.modelValue
: {}
emit('update:modelValue', { ...current, [key]: value })
}
/** Normalize options: support both string[] and {label, value}[] */
const normalizedOptions = computed(() => {
const opts = props.schema.options || []
@@ -974,6 +999,13 @@ function confirmRepeaterModal() {
}
/* Repeater */
.aksrt-field__fieldset {
padding: 14px;
border: 1px solid #eef1f6;
border-radius: 8px;
background: #fafbfc;
}
.aksrt-field__repeater {
display: flex;
flex-direction: column;