fix(admin): unify settings save controls
This commit is contained in:
1 parent
7fe26d3fff
commit
f3dd1ec3b1
8 files changed
+113
-68
No files matched your search
@@ -103,57 +103,76 @@
|
||||
</n-form>
|
||||
</n-card>
|
||||
|
||||
<div class="jio-form-footer">
|
||||
<n-button type="primary" :loading="saving" @click="saveCfg">保存配置</n-button>
|
||||
</div>
|
||||
<JioSaveBar :dirty="dirty" :saving="saving" @save="saveCfg" @reload="loadCfg" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { computed, ref, reactive, onMounted } from 'vue'
|
||||
import { useMessage } from 'naive-ui'
|
||||
import api from '@/api'
|
||||
import JioSaveBar from '@/components/form/JioSaveBar.vue'
|
||||
|
||||
const message = useMessage()
|
||||
|
||||
// ---------- 配置 ----------
|
||||
const cfg = reactive({
|
||||
enabled: true,
|
||||
currency_name: '',
|
||||
register_bonus: 10,
|
||||
daily_signin: { enabled: true, base: 1, streak: { 3: 2, 7: 5, 30: 20 } },
|
||||
comment_reward: { enabled: true, amount: 1, daily_cap: 5, min_length: 10, on_approved: true },
|
||||
referral_reward: {
|
||||
function defaultCfg() {
|
||||
return {
|
||||
enabled: true,
|
||||
promoter_amount: 5,
|
||||
referred_amount: 2,
|
||||
level_points: 0,
|
||||
require_verify: true,
|
||||
ip_daily_cap: 3,
|
||||
},
|
||||
download_default_cost: 0,
|
||||
})
|
||||
currency_name: '',
|
||||
register_bonus: 10,
|
||||
daily_signin: { enabled: true, base: 1, streak: { 3: 2, 7: 5, 30: 20 } },
|
||||
comment_reward: { enabled: true, amount: 1, daily_cap: 5, min_length: 10, on_approved: true },
|
||||
referral_reward: {
|
||||
enabled: true,
|
||||
promoter_amount: 5,
|
||||
referred_amount: 2,
|
||||
level_points: 0,
|
||||
require_verify: true,
|
||||
ip_daily_cap: 3,
|
||||
},
|
||||
download_default_cost: 0,
|
||||
}
|
||||
}
|
||||
const cfg = reactive(defaultCfg())
|
||||
const streakJson = ref('{}')
|
||||
const loading = ref(true)
|
||||
const saving = ref(false)
|
||||
const initial = ref('')
|
||||
const snapshot = computed(() => JSON.stringify({ cfg, streakJson: streakJson.value }))
|
||||
const dirty = computed(() => !loading.value && initial.value !== '' && snapshot.value !== initial.value)
|
||||
|
||||
async function loadCfg() {
|
||||
loading.value = true
|
||||
try {
|
||||
const response = await api.getCreditSettings()
|
||||
const data = response?.data || response || {}
|
||||
Object.assign(cfg, data)
|
||||
Object.assign(cfg, defaultCfg(), data)
|
||||
streakJson.value = JSON.stringify(cfg.daily_signin?.streak || {}, null, 0)
|
||||
initial.value = snapshot.value
|
||||
} catch (e) {
|
||||
message.error(e.message || '加载失败')
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function saveCfg() {
|
||||
let streak
|
||||
try {
|
||||
streak = JSON.parse(streakJson.value || '{}')
|
||||
} catch (error) {
|
||||
message.error('连续奖励 JSON 格式错误')
|
||||
return
|
||||
}
|
||||
if (!streak || typeof streak !== 'object' || Array.isArray(streak)) {
|
||||
message.error('连续奖励必须是 JSON 对象')
|
||||
return
|
||||
}
|
||||
saving.value = true
|
||||
try {
|
||||
let streak = {}
|
||||
try { streak = JSON.parse(streakJson.value || '{}') } catch (_) { /* ignore */ }
|
||||
await api.saveCreditSettings({ ...cfg, daily_signin: { ...cfg.daily_signin, streak } })
|
||||
cfg.daily_signin.streak = streak
|
||||
await api.saveCreditSettings(cfg)
|
||||
initial.value = snapshot.value
|
||||
message.success('已保存')
|
||||
} catch (e) {
|
||||
message.error(e.message || '保存失败')
|
||||
|
||||
Reference in new issue
Block a user