diff --git a/assets/admin/src/components/form/AksField.vue b/assets/admin/src/components/form/AksField.vue index 148c0858..44328092 100644 --- a/assets/admin/src/components/form/AksField.vue +++ b/assets/admin/src/components/form/AksField.vue @@ -507,7 +507,7 @@
@@ -548,9 +548,9 @@
-
+
@@ -565,7 +565,7 @@ Array.isArray(props.modelValue) ? props.modelValue.length : 0) +/** 数组安全视图:非数组(如旧版字符串值)一律按空列表渲染,避免逐字符假条目。 */ +const repeaterItems = computed(() => Array.isArray(props.modelValue) ? props.modelValue : []) const reachedRepeaterMinimum = computed(() => repeaterLength.value <= Number(props.schema.min || 0)) const reachedRepeaterMaximum = computed(() => Number(props.schema.max || 0) > 0 && repeaterLength.value >= Number(props.schema.max)) @@ -1083,7 +1085,7 @@ function openRepeaterModal(index) { if (index < 0 && reachedRepeaterMaximum.value) return if (props.schema.disabled) return if (index >= 0) { - const item = (props.modelValue || [])[index] || {} + const item = (Array.isArray(props.modelValue) ? props.modelValue : [])[index] || {} repeaterDraft.value = { ...createRepeaterItem(), ...item } repeaterEditingIndex.value = index } else { diff --git a/assets/admin/src/schema/sections/payment/recharge.js b/assets/admin/src/schema/sections/payment/recharge.js index ef4e1678..3f3035dc 100644 --- a/assets/admin/src/schema/sections/payment/recharge.js +++ b/assets/admin/src/schema/sections/payment/recharge.js @@ -18,7 +18,6 @@ export const rechargeSchema = { { price: 50, pay_price: 0, tag: '', tag_class: '' }, { price: 100, pay_price: 98, tag: '', tag_class: '' }, { price: 200, pay_price: 188, tag: '推荐', tag_class: 'jb-cyan' }, - { price: 500, pay_price: 468, tag: '特惠', tag_class: 'jb-pink' }, ], pay_balance_product_custom_s: true, pay_balance_product_custom_limit: 9999, @@ -94,7 +93,6 @@ export const rechargeSchema = { { price: 50, pay_price: 0, tag: '', tag_class: '' }, { price: 100, pay_price: 98, tag: '', tag_class: '' }, { price: 200, pay_price: 188, tag: '推荐', tag_class: 'jb-cyan' }, - { price: 500, pay_price: 468, tag: '特惠', tag_class: 'jb-pink' }, ], help: '用户充值时候,可快速选择的充值金额,同时支持设置折扣', fields: [ diff --git a/src/Admin/Schema/SchemaPayment.php b/src/Admin/Schema/SchemaPayment.php index 63cbe9da..1e788ff7 100644 --- a/src/Admin/Schema/SchemaPayment.php +++ b/src/Admin/Schema/SchemaPayment.php @@ -145,7 +145,6 @@ class SchemaPayment { ['price' => 50, 'pay_price' => 0, 'tag' => '', 'tag_class' => ''], ['price' => 100, 'pay_price' => 98, 'tag' => '', 'tag_class' => ''], ['price' => 200, 'pay_price' => 188, 'tag' => '推荐', 'tag_class' => 'jb-cyan'], - ['price' => 500, 'pay_price' => 468, 'tag' => '特惠', 'tag_class' => 'jb-pink'], ], 'help' => '用户充值时候,可快速选择的充值金额,同时支持设置折扣', 'fields' => [ ['key' => 'price', 'label' => '充值金额', 'type' => 'number', 'default' => 100, 'min' => 0, 'suffix' => '元'], ['key' => 'pay_price', 'label' => '销售金额', 'type' => 'number', 'default' => 0, 'min' => 0, 'suffix' => '元', 'help' => '选填,设置不同的销售金额实现充值折扣的功能,设置为0则与充值金额一致'], diff --git a/src/Admin/SchemaProvider.php b/src/Admin/SchemaProvider.php index a761fb74..a58d8085 100644 --- a/src/Admin/SchemaProvider.php +++ b/src/Admin/SchemaProvider.php @@ -535,7 +535,14 @@ class SchemaProvider { $data = $this->collect_defaults($schema); foreach ($this->get_all_fields($schema) as $field) { - if (array_key_exists($field['key'], $stored)) { + $field_type = (string) ($field['type'] ?? 'text'); + $has_stored = array_key_exists($field['key'], $stored); + // group/repeater 只接受数组;旧标量值(如 textarea 时代的字符串) + // 直接忽略并回退默认,避免前端把字符串按字符渲染成大量假条目。 + if ($has_stored && in_array($field_type, ['group', 'repeater'], true) && !is_array($stored[$field['key']])) { + $has_stored = false; + } + if ($has_stored) { $data[$field['key']] = $stored[$field['key']]; } if (($field['sanitize_type'] ?? '') === 'money_decimal' && array_key_exists($field['key'], $data)) { @@ -545,7 +552,7 @@ class SchemaProvider { } } - $stored_value = array_key_exists($field['key'], $stored) ? $stored[$field['key']] : ($data[$field['key']] ?? ''); + $stored_value = $has_stored ? $stored[$field['key']] : ($data[$field['key']] ?? ''); if (!empty($field['secret'])) { $data[$field['key']] = trim((string) $stored_value) !== '' ? '***' : '';