orgManager/src/views/operations/gameManage/popular/index.vue

213 lines
6.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<table-search-card :model="queryParams" @getList="getList" @handleQuery="handleQuery" @resetQuery="resetQuery">
<template #left>
<el-form-item prop="currencyCode">
<currency-select v-model="queryParams.currencyCode" @change="handleQuery"></currency-select>
</el-form-item>
<el-form-item prop="platformType">
<dict-select v-model="queryParams.platformType" dictKey="ff_game_type" :empty-values="[null, undefined]"
:clearable="false" :addOptions="{ label: t('全部类型'), value: '' }"></dict-select>
</el-form-item>
<el-form-item prop="popularCategory">
<el-select v-model="queryParams.popularCategory" :empty-values="[null, undefined]">
<el-option v-for="item in popularCategoryList" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item prop="name">
<el-input v-model="queryParams.name" :placeholder="t('请输入平台/子游戏名称')" @keyup.enter="handleQuery" />
</el-form-item>
</template>
<template #right>
{{ t('是否启用') }}
<el-switch
v-model="IsEnabledOne"
v-if="popularType == 1"
active-value="2" inactive-value="1"
class="ml-2"
@click="handleUp(1)"
style="--el-switch-on-color: #13ce66; margin-left: 4px;"
/>
<el-switch
v-model="IsEnabledTow"
v-if="popularType == 2"
active-value="2" inactive-value="1"
class="ml-2"
@click="handleUp(2)"
style="--el-switch-on-color: #13ce66; margin-left: 4px;"
/>
</template>
</table-search-card>
<el-table v-loading="loading" :data="gameList" @selection-change="handleSelectionChange" class="c-table-main" stripe
ref="dragTable" row-key="id" border>
<el-table-column type="selection" width="55" align="center" />
<table-drag-sort v-model:tableList="gameList" @dragEnd="dragEnd"></table-drag-sort>
<el-table-column :label="t('游戏类型')" align="center" prop="platformType">
<template #default="{ row }">
<dict-tag :options="ff_game_type" :value="row.platformType" />
</template>
</el-table-column>
<el-table-column :label="t('热门类别')" align="center" prop="popularCategory">
<template #default="{ row }">
{{ row.popularCategory === 1 ? t('平台') : t('子游戏') }}
</template>
</el-table-column>
<el-table-column :label="t('平台名称')" align="center" prop="platformName" />
<el-table-column :label="t('热门名称')" align="center" prop="gameName" />
<el-table-column :label="t('币种')" align="center" prop="currencyDisplay" />
<el-table-column :label="t('操作')" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleDelete(scope.row)"
v-hasPermi="['game:game:edit']">{{ t('移除') }}</el-button>
</template>
</el-table-column>
<table-operation></table-operation>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</template>
<script setup name="Popular">
import * as game from "@/api/game/game";
import useInitDataStore from "@/store/modules/initData";
import TableDragSort from '@/components/TableDragSort';
const useInitData = useInitDataStore();
const { proxy } = getCurrentInstance();
const { ff_game_type } = proxy.useDict('ff_game_type')
const emits = defineEmits(['updateGames']); // 定义自定义事件
const props = defineProps({
// 热门类型
// 1:热门管理1 2:热门管理2
popularType: {
type: Number,
default: 1,
required: true
},
hotOne: {
type: String,
default: '1',
},
hotTwo: {
type: String,
default: '1',
}
})
const gameList = ref([]); //表格数据
const loading = ref(true);//加载中
const ids = ref([]);//多选框选中数据
const single = ref(true);//是否单选
const IsEnabledOne = ref('1');//是否启用
const IsEnabledTow = ref('1');//是否启用
const multiple = ref(true); //是否多选
const total = ref(0); //总数
const data = reactive({
form: {},
queryParams: { // 查询参数
pageNum: 1,
pageSize: 20,
orderByColumn: 'sort_no',
isAsc: 'asc',
currencyCode: useInitData.dictInitData.currencyCode||useInitData.currencyCode,
platformType: '',
popularCategory: '',
name: null,
popularType: null
},
rules: {
},
popularCategoryList: [
{
label: proxy.t('热门类别'),
value: ''
},
{
label: proxy.t('平台'),
value: '1'
},
{
label: proxy.t('子游戏'),
value: '2'
}
]
});
const { queryParams, form, rules, popularCategoryList } = toRefs(data);
/** 查询热门管理列表 */
function getList() {
loading.value = true;
queryParams.value.popularType = props.popularType
game.listPopular(queryParams.value).then(response => {
gameList.value = response.rows;
total.value = response.total;
loading.value = false;
});
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
useInitData.setStateData('currencyCode', String(queryParams.value.currencyCode));
}
const handleUp = (type)=>{
emits('updateGames', type);
}
// 同时监听两个值props.hotOne,props.hotTwo的变化来确定是true 还是false,1就是false 2就是true
watch(() => [props.hotOne, props.hotTwo], ([hotOne, hotTwo]) => {
nextTick(() => {
IsEnabledOne.value = hotOne;
IsEnabledTow.value = hotTwo;
});
},{ immediate: true })
/** 重置按钮操作 */
function resetQuery() {
queryParams.value.pageNum = 1;
getList();
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 移除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value;
proxy.$modal.confirm(proxy.t('是否确认移除"') + row.gameName + '"').then(function () {
return game.delPopular(_ids);
}).then(() => {
getList();
proxy.$modal.msgSuccess(proxy.t('移除成功'));
}).catch(() => { });
}
// 拖拽结束事件
const dragEnd = (row) => {
game.popularSort(row).then(() => {
if (row.isTop) {
proxy.$modal.msgSuccess(proxy.t('置顶成功'));
}
getList();
})
}
// 监听 popularType 的变化
watch(() => props.popularType, (newVal, oldVal) => {
// 你可以在这里添加更多的逻辑
resetQuery();
});
getList();
</script>
<style scoped lang="scss"></style>