265 lines
6.7 KiB
Vue
265 lines
6.7 KiB
Vue
<script setup lang="ts">
|
|
import { ref, onMounted } from "vue";
|
|
import { ElMessage } from "element-plus";
|
|
import { request, bizApi } from "@/api/utils";
|
|
|
|
defineOptions({
|
|
name: "sysSettings"
|
|
});
|
|
|
|
// 定义配置数据
|
|
const settingsData = ref({
|
|
issuance_bids: {
|
|
max_vadlid_days: 7,
|
|
bidding_num: 3,
|
|
cut_in_num: 5
|
|
},
|
|
subscribe: {
|
|
subscribe_words: 3,
|
|
word_length: 10
|
|
},
|
|
purchases: [
|
|
{ purchase_type: 1, valid_day: 7, need_points: 2000 },
|
|
{ purchase_type: 2, need_points: 3000 },
|
|
{ purchase_type: 3, need_points: 300 },
|
|
{ purchase_type: 4, need_points: 200000 },
|
|
{ purchase_type: 5, need_points: 100 },
|
|
{ purchase_type: 6, need_points: 1000 }
|
|
],
|
|
membership_config: {
|
|
issuance_num_per_month_company: 10,
|
|
issuance_num_per_month_person: 5
|
|
}
|
|
});
|
|
|
|
// 道具类型映射
|
|
const purchaseTypeMap = {
|
|
1: "置顶卡",
|
|
2: "提升卡",
|
|
3: "排他卡",
|
|
4: "直通卡",
|
|
5: "插队卡",
|
|
6: "跳转卡"
|
|
};
|
|
|
|
// 加载设置数据
|
|
const loadSettings = async () => {
|
|
try {
|
|
const res = await request(bizApi("getSysSettings"), {
|
|
method: "POST"
|
|
});
|
|
console.info(res);
|
|
if (res.status === 200) {
|
|
res.data.forEach(item => {
|
|
settingsData.value[item.settingsKey] = JSON.parse(item.settingsContent);
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error("获取系统设置失败:", error);
|
|
ElMessage.error("获取系统设置失败");
|
|
}
|
|
};
|
|
|
|
// 保存设置
|
|
const saveSettings = async (key: string) => {
|
|
try {
|
|
const params = {
|
|
settingsKey: key,
|
|
settingsContent: JSON.stringify(settingsData.value[key])
|
|
};
|
|
const res = await request(bizApi("updateSysSettings"), {
|
|
method: "POST",
|
|
body: JSON.stringify(params)
|
|
});
|
|
if (res.status === 200) {
|
|
ElMessage.success("保存成功");
|
|
} else {
|
|
ElMessage.error(res.msg || "保存失败");
|
|
}
|
|
} catch (error) {
|
|
console.error("保存系统设置失败:", error);
|
|
ElMessage.error("保存系统设置失败");
|
|
}
|
|
};
|
|
|
|
onMounted(() => {
|
|
loadSettings();
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<div class="settings-container">
|
|
<!-- 发标设置 -->
|
|
<el-card class="settings-card">
|
|
<template #header>
|
|
<div class="card-header">
|
|
<span>发标设置</span>
|
|
<el-button type="primary" @click="saveSettings('issuance_bids')"
|
|
>保存</el-button
|
|
>
|
|
</div>
|
|
</template>
|
|
<el-form
|
|
label-width="160px"
|
|
:model="settingsData.issuance_bids"
|
|
class="settings-form"
|
|
>
|
|
<el-form-item label="最大有效天数">
|
|
<el-input-number
|
|
v-model="settingsData.issuance_bids.max_vadlid_days"
|
|
:min="1"
|
|
:max="30"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="投标数量">
|
|
<el-input-number
|
|
v-model="settingsData.issuance_bids.bidding_num"
|
|
:min="1"
|
|
:max="10"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="插队数量">
|
|
<el-input-number
|
|
v-model="settingsData.issuance_bids.cut_in_num"
|
|
:min="1"
|
|
:max="10"
|
|
/>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-card>
|
|
|
|
<!-- 订阅设置 -->
|
|
<el-card class="settings-card">
|
|
<template #header>
|
|
<div class="card-header">
|
|
<span>订阅设置</span>
|
|
<el-button type="primary" @click="saveSettings('subscribe')"
|
|
>保存</el-button
|
|
>
|
|
</div>
|
|
</template>
|
|
<el-form
|
|
label-width="160px"
|
|
:model="settingsData.subscribe"
|
|
class="settings-form"
|
|
>
|
|
<el-form-item label="订阅关键词数量">
|
|
<el-input-number
|
|
v-model="settingsData.subscribe.subscribe_words"
|
|
:min="1"
|
|
:max="10"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="关键词最大长度">
|
|
<el-input-number
|
|
v-model="settingsData.subscribe.word_length"
|
|
:min="1"
|
|
:max="20"
|
|
/>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-card>
|
|
|
|
<!-- 道具设置 -->
|
|
<el-card class="settings-card">
|
|
<template #header>
|
|
<div class="card-header">
|
|
<span>道具设置</span>
|
|
<el-button type="primary" @click="saveSettings('purchases')"
|
|
>保存</el-button
|
|
>
|
|
</div>
|
|
</template>
|
|
<el-table :data="settingsData.purchases" border class="settings-table">
|
|
<el-table-column label="道具类型" align="center">
|
|
<template #default="{ row }">
|
|
{{ purchaseTypeMap[row.purchase_type] }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="有效天数" align="center">
|
|
<template #default="{ row }">
|
|
<el-input-number
|
|
v-if="row.valid_day !== undefined"
|
|
v-model="row.valid_day"
|
|
:min="1"
|
|
:max="30"
|
|
controls-position="right"
|
|
/>
|
|
<span v-else>-</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="所需积分" align="center">
|
|
<template #default="{ row }">
|
|
<el-input-number
|
|
v-model="row.need_points"
|
|
:min="1"
|
|
controls-position="right"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-card>
|
|
|
|
<!-- 会员配置 -->
|
|
<el-card class="settings-card">
|
|
<template #header>
|
|
<div class="card-header">
|
|
<span>会员配置</span>
|
|
<el-button type="primary" @click="saveSettings('membership_config')"
|
|
>保存</el-button
|
|
>
|
|
</div>
|
|
</template>
|
|
<el-form
|
|
label-width="160px"
|
|
:model="settingsData.membership_config"
|
|
class="settings-form"
|
|
>
|
|
<el-form-item label="公司每月发标数量">
|
|
<el-input-number
|
|
v-model="
|
|
settingsData.membership_config.issuance_num_per_month_company
|
|
"
|
|
:min="1"
|
|
:max="100"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="个人每月发标数量">
|
|
<el-input-number
|
|
v-model="
|
|
settingsData.membership_config.issuance_num_per_month_person
|
|
"
|
|
:min="1"
|
|
:max="50"
|
|
/>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-card>
|
|
</div>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
.settings-container {
|
|
padding: 20px;
|
|
|
|
.settings-card {
|
|
margin-bottom: 20px;
|
|
|
|
.card-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.settings-form {
|
|
max-width: 600px;
|
|
}
|
|
|
|
.settings-table {
|
|
width: 100%;
|
|
margin-top: 20px;
|
|
}
|
|
}
|
|
}
|
|
</style>
|