| @ -0,0 +1,209 @@ | |||||
| <template> | |||||
| <div class="app-container"> | |||||
| <el-card class="box-card"> | |||||
| <div slot="header" class="clearfix"> | |||||
| <span>首页配置管理</span> | |||||
| <el-button style="float: right; padding: 3px 0" type="text" @click="handleSave">保存配置</el-button> | |||||
| </div> | |||||
| <el-form ref="homeForm" :model="homeConfig" :rules="rules" label-width="120px"> | |||||
| <!-- 历史记录统计配置 --> | |||||
| <el-divider content-position="left">历史记录统计配置</el-divider> | |||||
| <!-- 历史记录列表配置 --> | |||||
| <el-card class="box-card" style="margin-bottom: 20px;"> | |||||
| <div slot="header"> | |||||
| <span>历史记录统计列表</span> | |||||
| <el-button style="float: right; padding: 3px 0" type="text" @click="addHistoryRecord">添加记录</el-button> | |||||
| </div> | |||||
| <el-table :data="homeConfig.historyRecords" style="width: 100%"> | |||||
| <!-- <el-table-column label="类型" width="120"> | |||||
| <template slot-scope="scope"> | |||||
| <el-select v-model="scope.row.type" placeholder="选择类型"> | |||||
| <el-option label="狗狗" value="dog"></el-option> | |||||
| <el-option label="猫咪" value="cat"></el-option> | |||||
| <el-option label="服务次数" value="service"></el-option> | |||||
| </el-select> | |||||
| </template> | |||||
| </el-table-column> --> | |||||
| <el-table-column label="数量/次数" width="220"> | |||||
| <template slot-scope="scope"> | |||||
| <el-input v-model="scope.row.count" size="mini" placeholder="请输入数量/次数"></el-input> | |||||
| </template> | |||||
| </el-table-column> | |||||
| <el-table-column label="时间" width="220"> | |||||
| <template slot-scope="scope"> | |||||
| <el-input v-model="scope.row.time" size="mini" placeholder="请输入时间"></el-input> | |||||
| </template> | |||||
| </el-table-column> | |||||
| <el-table-column label="图片"> | |||||
| <template slot-scope="scope"> | |||||
| <oss-image-upload v-model="scope.row.image" :limit="1"></oss-image-upload> | |||||
| </template> | |||||
| </el-table-column> | |||||
| <!-- <el-table-column label="描述"> | |||||
| <template slot-scope="scope"> | |||||
| <el-input v-model="scope.row.description" size="mini" placeholder="请输入描述"></el-input> | |||||
| </template> | |||||
| </el-table-column> --> | |||||
| <el-table-column label="操作" width="100"> | |||||
| <template slot-scope="scope"> | |||||
| <el-button type="danger" size="mini" @click="removeHistoryRecord(scope.$index)">删除</el-button> | |||||
| </template> | |||||
| </el-table-column> | |||||
| </el-table> | |||||
| </el-card> | |||||
| </el-form> | |||||
| <div style="text-align: center; margin-top: 20px;"> | |||||
| <el-button type="primary" @click="handleSave" :loading="saveLoading">保存配置</el-button> | |||||
| <el-button @click="handleReset">重置</el-button> | |||||
| </div> | |||||
| </el-card> | |||||
| </div> | |||||
| </template> | |||||
| <script> | |||||
| import { listAppletConfig, getAppletConfig, addAppletConfig, updateAppletConfig } from "@/api/model/AppletConfig"; | |||||
| export default { | |||||
| name: "HomeConfig", | |||||
| data() { | |||||
| return { | |||||
| saveLoading: false, | |||||
| // 首页配置数据 | |||||
| homeConfig: { | |||||
| // 历史记录统计列表 | |||||
| historyRecords: [ | |||||
| { | |||||
| count: '', | |||||
| time: '', | |||||
| image: '', | |||||
| }, | |||||
| { | |||||
| count: '', | |||||
| time: '', | |||||
| image: '', | |||||
| }, | |||||
| { | |||||
| count: '', | |||||
| time: '', | |||||
| image: '', | |||||
| } | |||||
| ] | |||||
| }, | |||||
| // 表单校验规则 | |||||
| rules: {} | |||||
| }; | |||||
| }, | |||||
| created() { | |||||
| this.getHomeConfig(); | |||||
| }, | |||||
| methods: { | |||||
| // 获取首页配置 | |||||
| async getHomeConfig() { | |||||
| try { | |||||
| // 查询首页配置参数 | |||||
| const response = await listAppletConfig({ paramCode: 'home_config' }); | |||||
| if (response.rows && response.rows.length > 0) { | |||||
| const config = response.rows[0]; | |||||
| if (config.paramValueText) { | |||||
| this.homeConfig = JSON.parse(config.paramValueText); | |||||
| } | |||||
| } | |||||
| } catch (error) { | |||||
| console.error('获取首页配置失败:', error); | |||||
| this.$message.error('获取首页配置失败'); | |||||
| } | |||||
| }, | |||||
| // 保存配置 | |||||
| async handleSave() { | |||||
| try { | |||||
| this.$refs.homeForm.validate(async (valid) => { | |||||
| if (valid) { | |||||
| this.saveLoading = true; | |||||
| // 准备保存的数据 | |||||
| const saveData = { | |||||
| paramCode: 'home_config', | |||||
| paramValue: '首页配置', | |||||
| paramValueText: JSON.stringify(this.homeConfig, null, 2) | |||||
| }; | |||||
| // 查询是否已存在配置 | |||||
| const response = await listAppletConfig({ paramCode: 'home_config' }); | |||||
| if (response.rows && response.rows.length > 0) { | |||||
| // 更新现有配置 | |||||
| saveData.id = response.rows[0].id; | |||||
| await updateAppletConfig(saveData); | |||||
| } else { | |||||
| // 新增配置 | |||||
| await addAppletConfig(saveData); | |||||
| } | |||||
| this.$message.success('首页配置保存成功'); | |||||
| this.saveLoading = false; | |||||
| } | |||||
| }); | |||||
| } catch (error) { | |||||
| console.error('保存首页配置失败:', error); | |||||
| this.$message.error('保存首页配置失败'); | |||||
| this.saveLoading = false; | |||||
| } | |||||
| }, | |||||
| // 重置配置 | |||||
| handleReset() { | |||||
| this.$confirm('确定要重置所有配置吗?', '提示', { | |||||
| confirmButtonText: '确定', | |||||
| cancelButtonText: '取消', | |||||
| type: 'warning' | |||||
| }).then(() => { | |||||
| this.getHomeConfig(); | |||||
| this.$message.success('配置已重置'); | |||||
| }); | |||||
| }, | |||||
| // 添加历史记录 | |||||
| addHistoryRecord() { | |||||
| this.homeConfig.historyRecords.push({ | |||||
| type: 'dog', | |||||
| count: 0, | |||||
| time: '', | |||||
| image: '', | |||||
| description: '' | |||||
| }); | |||||
| }, | |||||
| // 删除历史记录 | |||||
| removeHistoryRecord(index) { | |||||
| this.homeConfig.historyRecords.splice(index, 1); | |||||
| } | |||||
| } | |||||
| }; | |||||
| </script> | |||||
| <style scoped> | |||||
| .box-card { | |||||
| margin-bottom: 20px; | |||||
| } | |||||
| .el-divider { | |||||
| margin: 20px 0; | |||||
| } | |||||
| .el-form-item { | |||||
| margin-bottom: 18px; | |||||
| } | |||||
| .small-img { | |||||
| width: 50px; | |||||
| height: 50px; | |||||
| } | |||||
| .circle-img { | |||||
| border-radius: 50%; | |||||
| } | |||||
| </style> | |||||