2024-12-22 14:00:46 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<fs-page class="page-sys-settings page-sys-settings-suite">
|
|
|
|
|
|
<template #header>
|
|
|
|
|
|
<div class="title">
|
|
|
|
|
|
套餐设置
|
2024-12-24 01:12:12 +08:00
|
|
|
|
<span class="sub"> 需要<router-link :to="{ path: '/sys/settings', query: { tab: 'payment' } }">开启至少一种支付方式</router-link></span>
|
2024-12-22 14:00:46 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="form-content">
|
|
|
|
|
|
<a-form ref="formRef" :model="formState" :label-col="{ style: { width: '150px' } }" :wrapper-col="{ span: 20 }" autocomplete="off">
|
|
|
|
|
|
<a-form-item label="开启套餐功能" name="enabled" required>
|
|
|
|
|
|
<a-switch v-model:checked="formState.enabled" />
|
|
|
|
|
|
</a-form-item>
|
|
|
|
|
|
<template v-if="formState.enabled">
|
|
|
|
|
|
<a-form-item label="套餐列表" name="enabled">
|
|
|
|
|
|
<div style="height: 400px">
|
|
|
|
|
|
<ProductManager @refreshed="onTableRefresh"></ProductManager>
|
|
|
|
|
|
</div>
|
2024-12-25 23:20:07 +08:00
|
|
|
|
<div class="helper">不建议设置免费套餐,可以在下方配置注册赠送套餐,或者在用户套餐管理中手动赠送套餐</div>
|
2024-12-22 14:00:46 +08:00
|
|
|
|
</a-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
<a-form-item label="注册赠送套餐" name="registerGift">
|
|
|
|
|
|
<suite-duration-selector ref="suiteDurationSelectedRef" v-model="formState.registerGift"></suite-duration-selector>
|
|
|
|
|
|
<div class="helper">添加套餐后再选择</div>
|
|
|
|
|
|
</a-form-item>
|
|
|
|
|
|
<a-form-item label="套餐说明" name="intro">
|
|
|
|
|
|
<a-textarea v-model:value="formState.intro" :rows="3"></a-textarea>
|
|
|
|
|
|
<div class="helper">将显示在套餐购买页面</div>
|
|
|
|
|
|
</a-form-item>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<a-form-item label=" " :colon="false">
|
|
|
|
|
|
<loading-button type="primary" html-type="button" :click="onClick">保存</loading-button>
|
2024-12-24 01:12:12 +08:00
|
|
|
|
<div class="helper">需要 <router-link :to="{ path: '/sys/settings', query: { tab: 'payment' } }">开启至少一种支付方式</router-link></div>
|
2024-12-22 14:00:46 +08:00
|
|
|
|
</a-form-item>
|
|
|
|
|
|
</a-form>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</fs-page>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
|
|
|
import { reactive, ref } from "vue";
|
|
|
|
|
|
import { merge } from "lodash-es";
|
|
|
|
|
|
import { notification } from "ant-design-vue";
|
|
|
|
|
|
import { request } from "/@/api/service";
|
|
|
|
|
|
import SuiteDurationSelector from "/@/views/sys/suite/setting/suite-duration-selector.vue";
|
|
|
|
|
|
import ProductManager from "/@/views/sys/suite/product/index.vue";
|
2025-04-12 23:59:03 +08:00
|
|
|
|
import { useSettingStore } from "/@/store/settings";
|
2024-12-22 14:00:46 +08:00
|
|
|
|
|
|
|
|
|
|
defineOptions({
|
2025-06-29 14:09:09 +08:00
|
|
|
|
name: "SettingsSuite",
|
2024-12-22 14:00:46 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const api = {
|
|
|
|
|
|
async SuiteSettingGet() {
|
|
|
|
|
|
return await request({
|
|
|
|
|
|
url: "/sys/settings/suite/get",
|
2025-06-29 14:09:09 +08:00
|
|
|
|
method: "post",
|
2024-12-22 14:00:46 +08:00
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
async SuiteSettingSave(data: any) {
|
|
|
|
|
|
return await request({
|
|
|
|
|
|
url: "/sys/settings/suite/save",
|
|
|
|
|
|
method: "post",
|
2025-06-29 14:09:09 +08:00
|
|
|
|
data,
|
2024-12-22 14:00:46 +08:00
|
|
|
|
});
|
2025-06-29 14:09:09 +08:00
|
|
|
|
},
|
2024-12-22 14:00:46 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const formRef = ref<any>(null);
|
|
|
|
|
|
const formState = reactive<
|
|
|
|
|
|
Partial<{
|
|
|
|
|
|
enabled: boolean;
|
|
|
|
|
|
registerGift?: {
|
|
|
|
|
|
productId?: number;
|
|
|
|
|
|
duration?: number;
|
|
|
|
|
|
};
|
|
|
|
|
|
intro?: string;
|
|
|
|
|
|
}>
|
|
|
|
|
|
>({ enabled: false });
|
|
|
|
|
|
|
|
|
|
|
|
async function loadSettings() {
|
|
|
|
|
|
const data: any = await api.SuiteSettingGet();
|
|
|
|
|
|
merge(formState, data);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-12-25 00:52:39 +08:00
|
|
|
|
const settingsStore = useSettingStore();
|
2024-12-22 14:00:46 +08:00
|
|
|
|
loadSettings();
|
|
|
|
|
|
const onClick = async () => {
|
|
|
|
|
|
const form = await formRef.value.validateFields();
|
|
|
|
|
|
await api.SuiteSettingSave(form);
|
|
|
|
|
|
await loadSettings();
|
2024-12-25 00:52:39 +08:00
|
|
|
|
await settingsStore.loadSysSettings();
|
2024-12-22 14:00:46 +08:00
|
|
|
|
notification.success({
|
2025-06-29 14:09:09 +08:00
|
|
|
|
message: "保存成功",
|
2024-12-22 14:00:46 +08:00
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const suiteDurationSelectedRef = ref();
|
|
|
|
|
|
function onTableRefresh() {
|
|
|
|
|
|
suiteDurationSelectedRef.value?.refresh();
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="less">
|
|
|
|
|
|
.page-sys-settings-suite {
|
|
|
|
|
|
.form-content {
|
|
|
|
|
|
padding: 20px;
|
|
|
|
|
|
.ant-table-body {
|
|
|
|
|
|
height: 400px !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|