tapi/z_ele/src/views/system/config-set/index.vue
u2nyakim 674ba45152 up.
2025-08-25 17:43:39 +08:00

148 lines
4.0 KiB
Vue

<template>
<ele-page>
<el-card>
<el-button
class="ele-btn-icon"
:icon="Refresh"
@click="reload()"
:loading="configLoading"
>
刷新
</el-button>
<el-button
type="danger"
class="ele-btn-icon"
:icon="Refresh"
>
同步配置
</el-button>
</el-card>
<ele-card :body-style="{ paddingTop: '8px' }" v-loading="configLoading">
<template #header>
<ele-tabs
type="tag"
v-model="configGroup"
:items="groupItems"
@tabChange="reload()"
/>
</template>
<el-form
ref="formRef"
:model="form"
label-position="top"
@submit.prevent=""
>
<config-form-list :config-list="configList" v-if="configList.length > 0" />
</el-form>
</ele-card>
</ele-page>
</template>
<script lang="ts" setup>
import {onMounted, ref} from 'vue';
import {Refresh} from "@element-plus/icons-vue"
import {listConfig} from "@/api/system/config";
import {getSysConfig, strToBind, strToOption} from "@/utils/sys-config";
import {useFormData} from "@/utils/use-form-data";
import type {Config} from "@/api/system/config/model";
import ConfigFormList from "./components/config-form-list.vue";
defineOptions({name: 'SystemConfigSet'});
/** 表单数据 */
const [form, resetFields, assignFields] = useFormData<Config>({});
const configList = ref([]);
const configLoading = ref(false);
/** 搜索 */
const reload = () => {
configLoading.value = true;
listConfig({group: configGroup.value, limit: 999}).then((data) => {
const configs = data.filter(d => d.type !== 'hidden');
configList.value = configs.map(d=>{
// 解析vBind属性到item
d.bind = strToBind(d.type, d.itemBind);
d.option = strToOption(d.type, d.option);
if(d.type =='card' || d.type == 'collapse'){
d.children = [
{
"id": 6,
"pid": 0,
"name": "test_password",
"title": "系统密码",
"group": "base",
"type": "password",
"value": "123456",
"options": "",
"tips": "",
"sort": 100,
"status": 1,
"vBind": null,
"createTime": "2025-08-22 16:50:23",
"updateTime": "2025-08-22 16:50:23",
"deleteTime": null
},
{
"id": 4,
"pid": 0,
"name": "test_textarea",
"title": "测试配置",
"group": "base",
"type": "textarea",
"value": "测试配置",
"options": "",
"tips": "",
"sort": 100,
"status": 1,
"vBind": null,
"createTime": "2025-08-22 15:40:19",
"updateTime": "2025-08-22 16:40:31",
"deleteTime": null
},
{
"id": 3,
"pid": 0,
"name": "test_text",
"title": "站点名称",
"group": "base",
"type": "text",
"value": "Ele Admin Plus",
"options": "",
"tips": "站点名称显示在<header>的title上",
"sort": 100,
"status": 1,
"vBind": null,
"createTime": "2025-08-22 14:11:22",
"updateTime": "2025-08-22 16:50:32",
"deleteTime": null
}
];
for(let a in d.children){
d.children[a].bind = strToBind(d.children[a].type, d.children[a].itemBind);
d.children[a].option = strToOption(d.children[a].type, d.children[a].option);
}
}
return d;
});
configLoading.value = false;
});
};
const groupItems = ref([]);
const configGroup = ref("");
onMounted(async () => {
// 配置分组
const group = [];
const {valueData} = await getSysConfig("config_group");
for (const name in valueData) {
group.push({name: name, label: valueData[name]})
}
groupItems.value = group
if (group.length > 0) {
configGroup.value = group[0].name
}
reload();
})
</script>