|
|
@@ -2129,6 +2129,242 @@
|
|
|
</el-tooltip>
|
|
|
</el-form-item>
|
|
|
|
|
|
+ <!-- 游戏列表区域 -->
|
|
|
+ <el-form-item label="游戏列表" class="game-list-item">
|
|
|
+ <div class="game-list-header">
|
|
|
+ <el-button type="primary" size="small" @click="addGameConfig" icon="el-icon-plus">
|
|
|
+ 新增游戏
|
|
|
+ </el-button>
|
|
|
+ <span class="game-list-tip">最多可添加10个游戏</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 游戏列表表格 -->
|
|
|
+ <el-table
|
|
|
+ :data="form25.gameList"
|
|
|
+ border
|
|
|
+ style="width: 100%; margin-top: 15px;"
|
|
|
+ v-loading="gameListLoading"
|
|
|
+ >
|
|
|
+ <el-table-column label="序号" width="60" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.$index + 1 }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="游戏图片" width="200" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div v-if="scope.row.editing">
|
|
|
+ <ImageUpload
|
|
|
+ v-model="scope.row.image"
|
|
|
+ :limit="1"
|
|
|
+ :file-type='["png", "jpg", "jpeg"]'
|
|
|
+ :width="30"
|
|
|
+ :height="30"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div v-else class="game-image-preview">
|
|
|
+ <el-image
|
|
|
+ v-if="scope.row.image"
|
|
|
+ :src="scope.row.image"
|
|
|
+ :preview-src-list="[scope.row.image]"
|
|
|
+ style="width: 50px; height: 50px; border-radius: 4px;"
|
|
|
+ >
|
|
|
+ <div slot="error" class="image-slot">
|
|
|
+ <i class="el-icon-picture-outline"></i>
|
|
|
+ </div>
|
|
|
+ </el-image>
|
|
|
+ <span v-else class="no-image">暂无图片</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="游戏名称" min-width="150">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input
|
|
|
+ v-if="scope.row.editing"
|
|
|
+ v-model="scope.row.name"
|
|
|
+ placeholder="请输入游戏名称"
|
|
|
+ size="small"
|
|
|
+ ></el-input>
|
|
|
+ <span v-else>{{ scope.row.name || '-' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="游戏链接" min-width="200">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input
|
|
|
+ v-if="scope.row.editing"
|
|
|
+ v-model="scope.row.url"
|
|
|
+ placeholder="请输入游戏链接"
|
|
|
+ size="small"
|
|
|
+ ></el-input>
|
|
|
+ <span v-else class="game-link">{{ scope.row.url || '-' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="排序" width="100" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-input-number
|
|
|
+ v-if="scope.row.editing"
|
|
|
+ v-model="scope.row.sort"
|
|
|
+ :min="0"
|
|
|
+ :max="999"
|
|
|
+ size="small"
|
|
|
+ controls-position="right"
|
|
|
+ style="width: 80px;"
|
|
|
+ ></el-input-number>
|
|
|
+ <span v-else>{{ scope.row.sort || 0 }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="状态" width="80" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-switch
|
|
|
+ v-if="scope.row.editing"
|
|
|
+ v-model="scope.row.status"
|
|
|
+ :active-value="1"
|
|
|
+ :inactive-value="0"
|
|
|
+ active-color="#13ce66"
|
|
|
+ inactive-color="#ff4949"
|
|
|
+ ></el-switch>
|
|
|
+ <el-tag v-else :type="scope.row.status === 1 ? 'success' : 'info'" size="small">
|
|
|
+ {{ scope.row.status === 1 ? '启用' : '禁用' }}
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="操作" width="150" fixed="right" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button
|
|
|
+ v-if="!scope.row.editing"
|
|
|
+ type="text"
|
|
|
+ size="small"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ @click="editGame(scope.$index)"
|
|
|
+ >编辑</el-button>
|
|
|
+ <el-button
|
|
|
+ v-if="scope.row.editing"
|
|
|
+ type="text"
|
|
|
+ size="small"
|
|
|
+ icon="el-icon-check"
|
|
|
+ @click="saveGame(scope.$index)"
|
|
|
+ >保存</el-button>
|
|
|
+ <el-button
|
|
|
+ v-if="!scope.row.editing"
|
|
|
+ type="text"
|
|
|
+ size="small"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ class="delete-btn"
|
|
|
+ @click="deleteGame(scope.$index)"
|
|
|
+ >删除</el-button>
|
|
|
+ <el-button
|
|
|
+ v-if="scope.row.editing"
|
|
|
+ type="text"
|
|
|
+ size="small"
|
|
|
+ icon="el-icon-close"
|
|
|
+ @click="cancelEdit(scope.$index)"
|
|
|
+ >取消</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-form-item>
|
|
|
+ </el-card>
|
|
|
+ <el-card class="config-card" shadow="hover">
|
|
|
+ <div class="section-title">
|
|
|
+ <div class="title-icon icon-promotion">
|
|
|
+ <i class="el-icon-bank-card"></i>
|
|
|
+ </div>
|
|
|
+ <div class="title-text">
|
|
|
+ <h3>提现配置</h3>
|
|
|
+ <p class="subtitle">配置APP商家转账配置</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-divider></el-divider>
|
|
|
+ <el-form-item label="一次最大提现金额(元)" prop="maxApplicationAmount">
|
|
|
+ <el-input-number
|
|
|
+ v-model="form25.maxApplicationAmount"
|
|
|
+ :min="0.10"
|
|
|
+ :max="999999.99"
|
|
|
+ :precision="2"
|
|
|
+ :step="0.01"
|
|
|
+ placeholder="最大提现金额"
|
|
|
+ controls-position="right"
|
|
|
+
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="一天允提现次数(次)" prop="withdrawNum">
|
|
|
+ <el-input-number
|
|
|
+ v-model="form25.withdrawNum"
|
|
|
+ :min="0"
|
|
|
+ :max="99"
|
|
|
+ :precision="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="提现次数"
|
|
|
+ controls-position="right"
|
|
|
+
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="连续提现封控(天)" prop="limitDayNum">
|
|
|
+ <el-input-number
|
|
|
+ v-model="form25.limitDayNum"
|
|
|
+ :min="1"
|
|
|
+ :max="99"
|
|
|
+ :precision="0"
|
|
|
+ :step="1"
|
|
|
+ placeholder="连续提现几天封控"
|
|
|
+ controls-position="right"
|
|
|
+
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="连续提现累计金额封控(元)" prop="limitAmount">
|
|
|
+ <el-input-number
|
|
|
+ v-model="form25.limitAmount"
|
|
|
+ :min="0.10"
|
|
|
+ :max="999999.99"
|
|
|
+ :precision="2"
|
|
|
+ :step="0.01"
|
|
|
+ placeholder="连续提现累计金额封控"
|
|
|
+ controls-position="right"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="红包接口类型" prop="isNew">
|
|
|
+ <el-radio-group v-model="form25.isNew" >
|
|
|
+ <el-radio label="0">商家转账到零钱(旧)</el-radio>
|
|
|
+ <el-radio label="1">商家转账到零钱(新)</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商户号" prop="mchId">
|
|
|
+ <el-input v-model="form25.mchId" placeholder="请输入商户号"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商户密钥" prop="mchKey">
|
|
|
+ <el-input v-model="form25.mchKey" placeholder="请输入商户密钥" show-password></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="p12证书路径" prop="keyPath">
|
|
|
+ <el-input v-model="form25.keyPath" placeholder="请输入p12证书路径"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="apiV3密钥" prop="apiV3Key">
|
|
|
+ <el-input v-model="form25.apiV3Key" placeholder="请输入apiV3密钥" show-password></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="公钥ID" prop="publicKeyId">
|
|
|
+ <el-input v-model="form25.publicKeyId" placeholder="请输入公钥ID"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="公钥证书路径" prop="publicKeyPath">
|
|
|
+ <el-input v-model="form25.publicKeyPath" placeholder="请输入公钥证书路径"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="私钥路径" prop="privateKeyPath">
|
|
|
+ <el-input v-model="form25.privateKeyPath" placeholder="请输入私钥路径"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="证书路径" prop="privateCertPath">
|
|
|
+ <el-input v-model="form25.privateCertPath" placeholder="请输入证书路径"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="看课奖励回调地址" prop="notifyUrl">
|
|
|
+ <el-input v-model="form25.notifyUrl" placeholder="请输入回调地址"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="提现回调地址" prop="withdrawalNotifyUrl">
|
|
|
+ <el-input v-model="form25.withdrawalNotifyUrl" placeholder="请输入回调地址"></el-input>
|
|
|
+ </el-form-item>
|
|
|
</el-card>
|
|
|
|
|
|
<!-- 操作按钮 -->
|
|
|
@@ -2726,6 +2962,185 @@
|
|
|
</div>
|
|
|
</el-tab-pane>
|
|
|
|
|
|
+
|
|
|
+ <el-tab-pane label="app页面配置" name="app.pageConfig">
|
|
|
+ <el-form
|
|
|
+ ref="form35"
|
|
|
+ :model="form35"
|
|
|
+ label-width="160px"
|
|
|
+ >
|
|
|
+
|
|
|
+ <!-- 主页面 -->
|
|
|
+ <el-divider content-position="left">主页面</el-divider>
|
|
|
+ <el-form-item label="健康页面" prop="mainPage.health">
|
|
|
+ <el-radio v-model="form35.mainPage.health" label="1">显示</el-radio>
|
|
|
+ <el-radio v-model="form35.mainPage.health" label="0">隐藏</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="精选页面" prop="mainPage.featured">
|
|
|
+ <el-radio v-model="form35.mainPage.featured" label="1">显示</el-radio>
|
|
|
+ <el-radio v-model="form35.mainPage.featured" label="0">隐藏</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="优选页面" prop="mainPage.preferred">
|
|
|
+ <el-radio v-model="form35.mainPage.preferred" label="1">显示</el-radio>
|
|
|
+ <el-radio v-model="form35.mainPage.preferred" label="0">隐藏</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 消息子页面 -->
|
|
|
+ <!-- <el-divider content-position="left">消息 - 子页面</el-divider>-->
|
|
|
+
|
|
|
+ <!-- <el-form-item label="消息列表" prop="subPage.message.message">-->
|
|
|
+ <!-- <el-radio v-model="form35.subPage.message.message" label="1">显示</el-radio>-->
|
|
|
+ <!-- <el-radio v-model="form35.subPage.message.message" label="0">隐藏</el-radio>-->
|
|
|
+ <!-- </el-form-item>-->
|
|
|
+
|
|
|
+ <!-- <el-form-item label="通讯录" prop="subPage.message.contacts">-->
|
|
|
+ <!-- <el-radio v-model="form35.subPage.message.contacts" label="1">显示</el-radio>-->
|
|
|
+ <!-- <el-radio v-model="form35.subPage.message.contacts" label="0">隐藏</el-radio>-->
|
|
|
+ <!-- </el-form-item>-->
|
|
|
+
|
|
|
+ <!-- <el-form-item label="搜索" prop="subPage.message.search">-->
|
|
|
+ <!-- <el-radio v-model="form35.subPage.message.search" label="1">显示</el-radio>-->
|
|
|
+ <!-- <el-radio v-model="form35.subPage.message.search" label="0">隐藏</el-radio>-->
|
|
|
+ <!-- </el-form-item>-->
|
|
|
+
|
|
|
+ <!-- 健康子页面 -->
|
|
|
+ <el-divider content-position="left">健康 - 子页面</el-divider>
|
|
|
+
|
|
|
+ <el-form-item label="医疗服务" prop="subPage.health.medicalService">
|
|
|
+ <el-radio v-model="form35.subPage.health.medicalService" label="1">显示</el-radio>
|
|
|
+ <el-radio v-model="form35.subPage.health.medicalService" label="0">隐藏</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="健康管理" prop="subPage.health.healthManagement">
|
|
|
+ <el-radio v-model="form35.subPage.health.healthManagement" label="1">显示</el-radio>
|
|
|
+ <el-radio v-model="form35.subPage.health.healthManagement" label="0">隐藏</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="名家讲堂" prop="subPage.health.famousLecture">
|
|
|
+ <el-radio v-model="form35.subPage.health.famousLecture" label="1">显示</el-radio>
|
|
|
+ <el-radio v-model="form35.subPage.health.famousLecture" label="0">隐藏</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="学习中心" prop="subPage.health.learningCenter">
|
|
|
+ <el-radio v-model="form35.subPage.health.learningCenter" label="1">显示</el-radio>
|
|
|
+ <el-radio v-model="form35.subPage.health.learningCenter" label="0">隐藏</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 精选子页面 -->
|
|
|
+ <!-- 精选 - 子页面 -->
|
|
|
+ <el-divider content-position="left">精选 - 子页面</el-divider>
|
|
|
+
|
|
|
+ <!-- 短视频 -->
|
|
|
+ <el-form-item label="短视频">
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.shortVideo"
|
|
|
+ label="1"
|
|
|
+ >显示</el-radio>
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.shortVideo"
|
|
|
+ label="0"
|
|
|
+ >隐藏</el-radio>
|
|
|
+
|
|
|
+ <el-input
|
|
|
+ v-model="form35.subPage.featured.shortVideoH5Url"
|
|
|
+ placeholder="请输入短视频 H5 链接"
|
|
|
+ clearable
|
|
|
+ style="margin-top: 8px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <!-- 直播 -->
|
|
|
+ <el-form-item label="直播">
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.live"
|
|
|
+ label="1"
|
|
|
+ >显示</el-radio>
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.live"
|
|
|
+ label="0"
|
|
|
+ >隐藏</el-radio>
|
|
|
+
|
|
|
+ <el-input
|
|
|
+ v-model="form35.subPage.featured.liveH5Url"
|
|
|
+ placeholder="请输入直播 H5 链接"
|
|
|
+ clearable
|
|
|
+ style="margin-top: 8px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <!-- 短剧 -->
|
|
|
+ <el-form-item label="短剧">
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.shortDrama"
|
|
|
+ label="1"
|
|
|
+ >显示</el-radio>
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.shortDrama"
|
|
|
+ label="0"
|
|
|
+ >隐藏</el-radio>
|
|
|
+
|
|
|
+ <el-input
|
|
|
+ v-model="form35.subPage.featured.shortDramaH5Url"
|
|
|
+ placeholder="请输入短剧 H5 链接"
|
|
|
+ clearable
|
|
|
+ style="margin-top: 8px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 游戏 -->
|
|
|
+ <el-form-item label="游戏">
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.game"
|
|
|
+ label="1"
|
|
|
+ >显示</el-radio>
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.game"
|
|
|
+ label="0"
|
|
|
+ >隐藏</el-radio>
|
|
|
+
|
|
|
+ <el-input
|
|
|
+ v-model="form35.subPage.featured.gameH5Url"
|
|
|
+ placeholder="请输入游戏 H5 链接"
|
|
|
+ clearable
|
|
|
+ style="margin-top: 8px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 任务广场 -->
|
|
|
+ <el-form-item label="任务广场">
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.taskSquare"
|
|
|
+ label="1"
|
|
|
+ >显示</el-radio>
|
|
|
+ <el-radio
|
|
|
+ v-model="form35.subPage.featured.taskSquare"
|
|
|
+ label="0"
|
|
|
+ >隐藏</el-radio>
|
|
|
+
|
|
|
+ <el-input
|
|
|
+ v-model="form35.subPage.featured.taskSquareH5Url"
|
|
|
+ placeholder="请输入任务广场 H5 链接"
|
|
|
+ clearable
|
|
|
+ style="margin-top: 8px"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 优选子页面 -->
|
|
|
+ <el-divider content-position="left">优选 - 子页面</el-divider>
|
|
|
+
|
|
|
+ <el-form-item label="现金 + 积分购买" prop="subPage.preferred.cashAndPointsPurchase">
|
|
|
+ <el-radio v-model="form35.subPage.preferred.cashAndPointsPurchase" label="1">显示</el-radio>
|
|
|
+ <el-radio v-model="form35.subPage.preferred.cashAndPointsPurchase" label="0">隐藏</el-radio>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 提交 -->
|
|
|
+ <div class="footer">
|
|
|
+ <el-button type="primary" @click="submitForm35">提 交</el-button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </el-form>
|
|
|
+ </el-tab-pane>
|
|
|
+
|
|
|
</el-tabs>
|
|
|
|
|
|
|
|
|
@@ -2839,6 +3254,7 @@ export default {
|
|
|
form23: {},
|
|
|
form24: {},
|
|
|
form25: {},
|
|
|
+ gameListLoading: false,
|
|
|
form26: {
|
|
|
bloodGlucose: {
|
|
|
fasting: { normal: '' },
|
|
|
@@ -2926,6 +3342,36 @@ export default {
|
|
|
},
|
|
|
form32:{},
|
|
|
form34:{},
|
|
|
+ form35: {
|
|
|
+ mainPage: {
|
|
|
+ health: "1",
|
|
|
+ featured: "1",
|
|
|
+ preferred: "1"
|
|
|
+ },
|
|
|
+ subPage: {
|
|
|
+ message: {
|
|
|
+ message: "1",
|
|
|
+ contacts: "1",
|
|
|
+ search: "1"
|
|
|
+ },
|
|
|
+ health: {
|
|
|
+ medicalService: "1",
|
|
|
+ healthManagement: "1",
|
|
|
+ famousLecture: "1",
|
|
|
+ learningCenter: "1"
|
|
|
+ },
|
|
|
+ featured: {
|
|
|
+ shortVideo: "1",
|
|
|
+ live: "1",
|
|
|
+ shortDrama: "1",
|
|
|
+ game: "1",
|
|
|
+ taskSquare: "1"
|
|
|
+ },
|
|
|
+ preferred: {
|
|
|
+ cashAndPointsPurchase: "1"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
storeProductScrmColumns:[],
|
|
|
storeScrmColumns: [],
|
|
|
photoArr: [],
|
|
|
@@ -3037,6 +3483,119 @@ export default {
|
|
|
},
|
|
|
},
|
|
|
methods: {
|
|
|
+ /**
|
|
|
+ * 新增游戏配置
|
|
|
+ */
|
|
|
+ addGameConfig() {
|
|
|
+ if (!this.form25.gameList) {
|
|
|
+ this.$set(this.form25, 'gameList', [])
|
|
|
+ }
|
|
|
+
|
|
|
+ // 限制最多10个游戏
|
|
|
+ if (this.form25.gameList.length >= 10) {
|
|
|
+ this.$message.warning('最多只能添加10个游戏')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加新游戏配置
|
|
|
+ this.form25.gameList.push({
|
|
|
+ id: Date.now() + Math.random(), // 临时ID
|
|
|
+ image: '',
|
|
|
+ name: '',
|
|
|
+ url: '',
|
|
|
+ sort: this.form25.gameList.length,
|
|
|
+ status: 1, // 默认启用
|
|
|
+ editing: true // 新增时直接进入编辑状态
|
|
|
+ })
|
|
|
+
|
|
|
+ this.$forceUpdate()
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 编辑游戏
|
|
|
+ */
|
|
|
+ editGame(index) {
|
|
|
+ // 如果已经有其他行在编辑,先保存或取消
|
|
|
+ const editingIndex = this.form25.gameList.findIndex(item => item.editing)
|
|
|
+ if (editingIndex !== -1 && editingIndex !== index) {
|
|
|
+ this.$confirm('当前有其他游戏正在编辑,是否继续?', '提示', {
|
|
|
+ confirmButtonText: '继续',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ // 取消其他行的编辑状态
|
|
|
+ this.form25.gameList[editingIndex].editing = false
|
|
|
+ // 设置当前行为编辑状态
|
|
|
+ this.$set(this.form25.gameList[index], 'editing', true)
|
|
|
+ }).catch(() => {})
|
|
|
+ } else {
|
|
|
+ this.$set(this.form25.gameList[index], 'editing', true)
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存游戏
|
|
|
+ */
|
|
|
+ saveGame(index) {
|
|
|
+ const game = this.form25.gameList[index]
|
|
|
+
|
|
|
+ // 验证必填项
|
|
|
+ if (!game.name) {
|
|
|
+ this.$message.error('请输入游戏名称')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!game.url) {
|
|
|
+ this.$message.error('请输入游戏链接')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!game.image) {
|
|
|
+ this.$message.error('请上传游戏图片')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证URL格式
|
|
|
+ const urlPattern = /^(http|https):\/\/[^\s]+$/
|
|
|
+ if (!urlPattern.test(game.url)) {
|
|
|
+ this.$message.error('请输入正确的游戏链接(以http://或https://开头)')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存成功,退出编辑状态
|
|
|
+ this.$set(this.form25.gameList[index], 'editing', false)
|
|
|
+ this.$message.success('保存成功')
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取消编辑
|
|
|
+ */
|
|
|
+ cancelEdit(index) {
|
|
|
+ const game = this.form25.gameList[index]
|
|
|
+
|
|
|
+ // 如果是新增但未保存(没有id),直接删除
|
|
|
+ if (!game.id || game.id.toString().includes('.')) {
|
|
|
+ this.form25.gameList.splice(index, 1)
|
|
|
+ } else {
|
|
|
+ this.$set(this.form25.gameList[index], 'editing', false)
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除游戏
|
|
|
+ */
|
|
|
+ deleteGame(index) {
|
|
|
+ this.$confirm('确定要删除这个游戏吗?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ this.form25.gameList.splice(index, 1)
|
|
|
+ // 重新排序
|
|
|
+ this.form25.gameList.forEach((item, idx) => {
|
|
|
+ item.sort = idx
|
|
|
+ })
|
|
|
+ this.$message.success('删除成功')
|
|
|
+ }).catch(() => {})
|
|
|
+ },
|
|
|
|
|
|
// 处理开关配置
|
|
|
handleSwitchConfig(row) {
|
|
|
@@ -3193,7 +3752,7 @@ export default {
|
|
|
this.configId = null;
|
|
|
this.configKey = key;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 如果 response.data 为空,后续逻辑直接返回,避免报错
|
|
|
if (!response.data || !response.data.configValue) {
|
|
|
return;
|
|
|
@@ -3361,6 +3920,38 @@ export default {
|
|
|
this.configKey = response.data.configKey
|
|
|
this.form34 =JSON.parse(response.data.configValue);
|
|
|
}
|
|
|
+ if(key=="app.pageConfig"){
|
|
|
+ const defaultForm = this.form35
|
|
|
+ const parsed = response.data && response.data.configValue ? JSON.parse(response.data.configValue) : {}
|
|
|
+ this.form35 = {
|
|
|
+ ...defaultForm,
|
|
|
+ ...parsed,
|
|
|
+ mainPage: {
|
|
|
+ ...defaultForm.mainPage,
|
|
|
+ ...(parsed.mainPage || {})
|
|
|
+ },
|
|
|
+ subPage: {
|
|
|
+ ...defaultForm.subPage,
|
|
|
+ ...(parsed.subPage || {}),
|
|
|
+ message: {
|
|
|
+ ...defaultForm.subPage.message,
|
|
|
+ ...(((parsed.subPage || {}).message) || {})
|
|
|
+ },
|
|
|
+ health: {
|
|
|
+ ...defaultForm.subPage.health,
|
|
|
+ ...(((parsed.subPage || {}).health) || {})
|
|
|
+ },
|
|
|
+ featured: {
|
|
|
+ ...defaultForm.subPage.featured,
|
|
|
+ ...(((parsed.subPage || {}).featured) || {})
|
|
|
+ },
|
|
|
+ preferred: {
|
|
|
+ ...defaultForm.subPage.preferred,
|
|
|
+ ...(((parsed.subPage || {}).preferred) || {})
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|
|
|
},
|
|
|
/** 提交按钮 */
|
|
|
@@ -3659,6 +4250,14 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
+ submitForm35(){
|
|
|
+ var param={configId:this.configId,configValue:JSON.stringify(this.form35)}
|
|
|
+ updateConfigByKey(param).then(response => {
|
|
|
+ if (response.code === 200) {
|
|
|
+ this.msgSuccess("修改成功");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
submitForm31(){
|
|
|
var param={configId:this.configId,configKey: this.configKey,configValue:JSON.stringify(this.form34)}
|
|
|
updateConfigByKey(param).then(response => {
|
|
|
@@ -4127,4 +4726,80 @@ export default {
|
|
|
padding: 16px;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+/* 游戏列表样式 */
|
|
|
+.game-list-item {
|
|
|
+ margin-top: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.game-list-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.game-list-tip {
|
|
|
+ font-size: 12px;
|
|
|
+ color: #909399;
|
|
|
+}
|
|
|
+
|
|
|
+.game-image-preview {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ min-height: 50px;
|
|
|
+}
|
|
|
+
|
|
|
+.no-image {
|
|
|
+ font-size: 12px;
|
|
|
+ color: #909399;
|
|
|
+}
|
|
|
+
|
|
|
+.game-link {
|
|
|
+ display: inline-block;
|
|
|
+ max-width: 200px;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ white-space: nowrap;
|
|
|
+ color: #409EFF;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
+
|
|
|
+.delete-btn {
|
|
|
+ color: #f56c6c !important;
|
|
|
+}
|
|
|
+
|
|
|
+.delete-btn:hover {
|
|
|
+ color: #f78989 !important;
|
|
|
+}
|
|
|
+
|
|
|
+/* 表格样式优化 */
|
|
|
+::v-deep .el-table .cell {
|
|
|
+ padding-left: 8px;
|
|
|
+ padding-right: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .el-table th {
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ color: #606266;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .el-table--border {
|
|
|
+ border-radius: 8px;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+/* 图片上传组件样式调整 */
|
|
|
+::v-deep .image-upload {
|
|
|
+ width: 60px;
|
|
|
+ height: 60px;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .image-upload .el-upload--picture-card {
|
|
|
+ width: 60px;
|
|
|
+ height: 60px;
|
|
|
+ line-height: 64px;
|
|
|
+}
|
|
|
</style>
|