桃源记客服系统前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

974 lines
40 KiB

<template>
<div class="system-edit-post-container">
<el-form ref="formRef" :model="model" :rules="rules" size="default" label-width="80px">
<el-card shadow="hover" :header="ModelTypeName[modelType]+'摊位配置'">
<template #header>
{{ModelTypeName[modelType] +'摊位配置'}}
<el-button v-show="item.show == false" @click="item.show = true" class="button-caret" type="text">
<el-icon>
<ele-CaretBottom/>
</el-icon>
</el-button>
<el-button v-show="item.show == true" @click="item.show = false" class="button-caret" type="text">
<el-icon>
<ele-CaretTop/>
</el-icon>
</el-button>
</template>
<div v-show="item.show">
<div class="flex-warp">
<el-form-item label="摊位ID:" prop="stallId">
<el-input v-model="model.stallId" placeholder="请输入摊位ID"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</el-form-item>
<span v-show="check&&!model.stallId" style="color: red">*</span>
<el-form-item label="NPCID:" prop="NPCId">
<el-select v-model="model.NPCId" placeholder="请选择">
<el-option v-for="item in NPC" :key="item.Id" :label="item.Id+' '+item.Name" :value="item.Id">
</el-option>
</el-select>
<!-- <el-input v-model="model.NPCId" placeholder="请输入NPCID"-->
<!-- onkeyup="this.value=this.value.replace(/\D/g,'');"-->
<!-- onafterpaste="this.value=this.value.replace(/\D/g,'')"/>-->
</el-form-item>
<span v-show="check&&!model.NPCId" style="color: red">*</span>
<el-form-item label="规模:" prop="scale">
<el-select v-model="model.scale" filterable placeholder="请输入规模">
<el-option :key="-1" label="无" :value="-1"/>
<el-option
v-for="item in Scale"
:key="item.Id"
:label="item.Id +' '+ item.ScaleName"
:value="item.Id">
</el-option>
</el-select>
</el-form-item>
<span v-show="check&&!model.scale" style="color: red">*</span>
<el-form-item label="村落条件:" prop="village">
<el-select v-model="model.village" filterable placeholder="请输入村落条件">
<el-option :key="-1" label="无" :value="-1"/>
<el-option
v-for="item in Region"
:key="item.Id"
:label="item.Id +' '+ item.Region"
:value="item.Id">
</el-option>
</el-select>
</el-form-item>
<span v-show="check&&!model.village" style="color: red">*</span>
<el-form-item prop="renown" style="margin-left: -80px;width: 200px">
<el-input v-model="model.renown" placeholder="请输入声望值"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</el-form-item>
<span v-show="check&&!model.renown" style="color: red">*</span>
<el-form-item label="建筑条件:" prop="structure">
<el-select v-model="model.structure" filterable placeholder="请输入建筑条件">
<el-option :key="-1" label="无" :value="-1"/>
<el-option
v-for="item in Structure"
:key="item.Id"
:label="item.Id +' '+ item.Name +' '+ item.LvMark+'级 '"
:value="item.Id">
</el-option>
</el-select>
</el-form-item>
<span v-show="check&&!model.structure" style="color: red">*</span>
<el-form-item label="种类数量:" prop="num">
<el-input v-model="model.num" placeholder="请输入内容"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</el-form-item>
<span v-show="check&&!model.num" style="color: red">*</span>
</div>
<el-table :data="model.items" :cell-style="{padding:'0'}" :row-style="{height:'40px'}">
<el-table-column width="30">
<template #default="scope">
<div class="flex-warp">
<el-button size="small" type="text" @click="delModelItem(scope.$index)">
<el-icon>
<ele-Minus/>
</el-icon>
</el-button>
</div>
</template>
</el-table-column>
<el-table-column label="物品名称" width="150">
<template #default="scope">
<div class="flex-warp">
<el-select v-model="scope.row.id" filterable placeholder="请选择物品" style="width: 80%">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.DetailsPageName"
:value="item.Id"/>
</el-select>
<span v-show="check&&!scope.row.id" style="color: red">*</span>
</div>
</template>
</el-table-column>
<el-table-column label="物品数量区间(min;max)" width="250">
<template #default="scope">
<div class="flex-warp" prop="numRange">
<el-input v-model="scope.row.numRangeMin" placeholder="请输入数量" style="width: 40%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
<span v-show="check&&!scope.row.numRangeMin" style="color: red">*</span>
;
<el-input v-model="scope.row.numRangeMax" placeholder="请输入数量" style="width: 40%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
<span v-show="check&&!Number(scope.row.numRangeMax)" style="color: red">*</span>
</div>
</template>
</el-table-column>
<el-table-column label="货币类型" width="200">
<template #default="scope">
<div class="flex-warp">
<el-select v-model="scope.row.currencyType" filterable placeholder="请选择货币类型" style="width: 80%">
<el-option v-for="item in currencyType" :key="item.Id" :label="item.Name" :value="item.Id"/>
</el-select>
<span v-show="check&&!Number(scope.row.currencyType)" style="color: red">*</span>
</div>
</template>
</el-table-column>
<el-table-column label="权重" width="200">
<template #default="scope">
<div class="flex-warp" prop="weight">
<el-input v-model="scope.row.weight" placeholder="请输入权重" style="width: 90%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
<span v-show="check&&!Number(scope.row.weight)" style="color: red">*</span>
</div>
</template>
</el-table-column>
<el-table-column label="价格">
<template #default="scope">
<div class="flex-warp" prop="price">
<el-input v-model="scope.row.price" placeholder="请输入价格" style="width: 90%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
<span v-show="check&&!Number(scope.row.price)" style="color: red">*</span>
</div>
</template>
</el-table-column>
<el-table-column label="折扣">
<template #default="scope">
<div class="flex-warp" prop="discount">
<el-input v-model="scope.row.discount" placeholder="请输入折扣" style="width: 80%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
%<span v-show="check&&!scope.row.discount" style="color: red">*</span>
</div>
</template>
</el-table-column>
<el-table-column label="折扣概率">
<template #default="scope">
<div class="flex-warp" prop="discountProb">
<el-input v-model="scope.row.discountProb" placeholder="请输入折扣概率" style="width: 80%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
%<span v-show="check&&!scope.row.discountProb" style="color: red">*</span>
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template #header>
<div class="flex-warp-item" style="float: right;">
<div class="flex-warp-item-box">
<el-button size="default" type="primary" @click="onQuickFillingModelItem()" v-waves>
快速复制
</el-button>
</div>
<span style="font-size: 8px">*全部使用第一行数据</span>
</div>
</template>
<template #default="scope">
<el-button size="small" type="text" @click="onCopyModelItem(scope.row)">复制</el-button>
<el-button size="small" type="text" @click="onPasteModelItem(scope.$index)">粘贴</el-button>
</template>
</el-table-column>
</el-table>
<div style="margin: 10px 0">
<el-button size="default" type="primary" @click="addModelItem()">
<el-icon>
<ele-Plus/>
</el-icon>
添加
</el-button>
</div>
<el-form label-width="90px">
<el-form-item label="摊位介绍:" prop="introduce">
<el-input v-model="model.introduce" type="textarea" placeholder="请输入摊位介绍" style="width: 90%"/>
<span v-show="check&&!model.introduce" style="color: red">*</span>
</el-form-item>
<el-form-item label="摊位名称:" prop="remark">
<el-input v-model="model.remark" type="textarea" placeholder="请输入摊位名称" style="width: 90%"/>
<span v-show="check&&!model.remark" style="color: red">*</span>
</el-form-item>
</el-form>
<div style="justify-content: center">
<el-button size="default" type="primary" class="ml10" @click="saveModel">
<el-icon>
<ele-RefreshRight/>
</el-icon>
保存配置
</el-button>
</div>
</div>
</el-card>
<el-card shadow="hover" :header="ModelTypeName[modelType]+'配置记录'">
<template #header>
{{ModelTypeName[modelType]+'配置记录'}}
<el-button v-show="item.listShow == false" @click="item.listShow = true" class="button-caret" type="text">
<el-icon size="20">
<ele-CaretBottom/>
</el-icon>
</el-button>
<el-button v-show="item.listShow == true" @click="item.listShow = false" class="button-caret" type="text">
<el-icon>
<ele-CaretTop/>
</el-icon>
</el-button>
</template>
<div v-show="item.listShow">
<el-form class="flex-warp" style="margin: 2px 0;">
<el-form-item label="摊位ID:" prop="name">
<el-input v-model="modelId" placeholder="请输入摊位ID" style="width: 100px"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
<el-button size="small" type="primary" @click="getModel" style="margin: 2px">查找</el-button>
</el-form-item>
</el-form>
<div v-show="stalls.length == 0">暂无摊位配置</div>
<div v-for="model in stalls">
<el-form class="flex-warp">
<el-divider style="margin: 4px 0;"></el-divider>
<el-form-item prop="name" style="padding: 1px">
摊位ID: {{model.StallId}},NPCID:
{{model.NPCId?(NPC.find(r=>r.Id==model.NPCId)?NPC.find(r=>r.Id==model.NPCId).Name:model.NPCId):"无"}},规模条件:{{Scale.find(r=>r.Id==model.ScaleId)?
(model.ScaleId+ " " + Scale.find(r=>r.Id==model.ScaleId).ScaleName): (model.ScaleId==-1?"无":"")}},
村落条件:{{Region.find(r=>r.Id==model.VillageId)?
(model.VillageId+ " " + Region.find(r=>r.Id==model.VillageId).Region): (model.VillageId==-1?"无":"")}}
{{model.Renown}},建筑条件:
{{Structure.find(r=>r.Id==model.StructureId)?
(model.StructureId+" "+Structure.find(r=>r.Id==model.StructureId).Name):
(model.StructureId==-1?"无":"")}},种类数量:{{model.Num}}
</el-form-item>
<el-table style="margin-top:-30px;" :data="model.Items" :row-style="{height:1+'px'}"
:cell-style="{padding:1+'px'}">
<el-table-column label="物品名称">
<template #default="scope">
{{ItemConfig.find(r=>r.Id==scope.row.ItemId)?ItemConfig.find(r=>r.Id==scope.row.ItemId).Id+
' '+ItemConfig.find(r=>r.Id==scope.row.ItemId).Name:''}}
</template>
</el-table-column>
<el-table-column label="物品数量区间(min;max)" width="200">
<template #default="scope">
{{scope.row.ItemNums[0]}};{{scope.row.ItemNums[1]}}
</template>
</el-table-column>
<el-table-column label="货币类型">
<template #default="scope">
{{currencyType.find(r=>r.Id==scope.row.CurrencyType)?currencyType.find(r=>r.Id==scope.row.CurrencyType).Name:""}}
</template>
</el-table-column>
<el-table-column label="权重">
<template #default="scope">
{{scope.row.Weight}}
</template>
</el-table-column>
<el-table-column label="价格">
<template #default="scope">
{{scope.row.Price}}
</template>
</el-table-column>
<el-table-column label="折扣">
<template #default="scope">
{{scope.row.Discount}}%
</template>
</el-table-column>
<el-table-column label="折扣概率">
<template #default="scope">
{{scope.row.DiscountProb}}%
</template>
</el-table-column>
</el-table>
<div style="width: 9000px;margin: 10px 0;">
摊位介绍: {{model.Introduce}}
摊位名称:{{model.Remark}}
<el-form-item style="float: right">
<el-button size="small" type="primary" @click="makeStall(model.Type, model.StringId)">修改</el-button>
<el-button size="small" type="danger" @click="delModel(model.StringId, model.StallId)">删除</el-button>
</el-form-item>
</div>
</el-form>
</div>
<el-row justify="space-evenly">
<el-pagination :hide-on-single-page="true" v-model:page-size="pageSize" v-model:current-page="page"
:pager-count="5" @current-change="handleCurrentChange" layout="total, prev, pager, next"
:total="stallTotal"/>
</el-row>
</div>
</el-card>
<el-dialog v-model="editModelVisible" width="90%" :show-close="false"
:header="ModelTypeName[modelType]+'摊位配置'"
:body-style="{backgroundColor: '#fff' }" style=" background-color: #009999;" @close="destroyEditData">
<template #header>
{{ModelTypeName[modelType]+'摊位配置'}}
<el-button v-show="item.show == false" @click="item.show = true"
style="float: right;min-width: 20px;height: 17px;line-height: 17px;color: white" type="text">
<el-icon size="20">
<ele-CaretBottom/>
</el-icon>
</el-button>
<el-button v-show="item.show == true" @click="item.show = false"
style="float: right;min-width: 20px;height: 17px;line-height: 17px;color: white" type="text">
<el-icon>
<ele-CaretTop/>
</el-icon>
</el-button>
</template>
<div v-show="item.show">
<div class="flex-warp">
<el-form-item label="摊位ID:" prop="stallId">
<el-input v-model="model.stallId" placeholder="请输入摊位ID" disabled
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</el-form-item>
<el-form-item label="NPCID:" prop="NPCId">
<el-select v-model="model.NPCId" placeholder="请选择">
<el-option v-for="item in NPC" :key="item.Id" :label="item.Id+' '+item.Name" :value="item.Id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="规模条件:" prop="scale">
<el-select v-model="model.scale" filterable placeholder="请输入村落条件">
<el-option
v-for="item in Scale"
:key="item.Id"
:label="item.Id +' '+ item.ScaleName"
:value="item.Id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="村落条件:" prop="village">
<el-select v-model="model.village" filterable placeholder="请输入村落条件">
<el-option
v-for="item in Region"
:key="item.Id"
:label="item.Id +' '+ item.Region"
:value="item.Id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="renown" style="margin-left: -80px;width: 200px">
<el-input v-model="model.renown" placeholder="请输入声望值"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</el-form-item>
<el-form-item label="建筑条件:" prop="structure">
<el-select v-model="model.structure" filterable placeholder="请输入建筑条件">
<el-option
v-for="item in Structure"
:key="item.Id"
:label="item.Id +' '+ item.Name+' ' + item.LvMark+'级 '"
:value="item.Id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="种类数量:" prop="num">
<el-input v-model="model.num" placeholder="请输入内容"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</el-form-item>
</div>
<div class="flex-warp">
<el-table :data="model.items" :inline="true" :cell-style="{padding:'0'}" :row-style="{height:'40px'}">
<el-table-column width="30">
<template #default="scope">
<el-button size="small" type="text" @click="delModelItem(scope.$index)">
<el-icon>
<ele-Minus/>
</el-icon>
</el-button>
</template>
</el-table-column>
<el-table-column label="物品名称" width="150">
<template #default="scope">
<el-select v-model="scope.row.id" filterable placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.Name"
:value="item.Id"/>
</el-select>
</template>
</el-table-column>
<el-table-column label="物品数量区间(min;max)" width="250">
<template #default="scope">
<el-input v-model="scope.row.numRangeMin" placeholder="请输入数量" style="width: 40%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
;
<el-input v-model="scope.row.numRangeMax" placeholder="请输入数量" style="width: 40%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</template>
</el-table-column>
<el-table-column label="货币类型">
<template #default="scope">
<el-select v-model="scope.row.currencyType" filterable placeholder="请选择货币类型">
<el-option v-for="item in currencyType" :key="item.Id" :label="item.Name" :value="item.Id"/>
</el-select>
</template>
</el-table-column>
<el-table-column label="权重">
<template #default="scope">
<el-input v-model="scope.row.weight" placeholder="请输入权重"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</template>
</el-table-column>
<el-table-column label="价格">
<template #default="scope">
<el-input v-model="scope.row.price" placeholder="请输入价格"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
</template>
</el-table-column>
<el-table-column label="折扣">
<template #default="scope">
<el-input v-model="scope.row.discount" placeholder="请输入折扣" style="width: 80%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
<span style="margin: 10px 0">%</span>
</template>
</el-table-column>
<el-table-column label="折扣概率">
<template #default="scope">
<el-input v-model="scope.row.discountProb" placeholder="请输入折扣概率" style="width: 80%"
onkeyup="this.value=this.value.replace(/\D/g,'');"
onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
<span style="margin:10px 0">%</span>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template #header>
<div class="flex-warp-item" style="float: right;">
<div class="flex-warp-item-box">
<el-button size="default" type="primary" @click="onQuickFillingModelItem()" v-waves>
快速复制
</el-button>
</div>
<span style="font-size: 8px">*全部使用第一行数据</span>
</div>
</template>
<template #default="scope">
<el-button size="small" type="text" @click="onCopyModelItem(scope.row)">复制</el-button>
<el-button size="small" type="text" @click="onPasteModelItem(scope.$index)">粘贴</el-button>
</template>
</el-table-column>
</el-table>
<div style="margin: 10px 0">
<el-button size="default" type="primary" @click="addModelItem()">
<el-icon>
<ele-Plus/>
</el-icon>
添加
</el-button>
</div>
</div>
<el-form label-width="90px">
<el-form-item label="摊位介绍:" prop="introduce">
<el-input v-model="model.introduce" type="textarea" placeholder="请输入摊位介绍"/>
</el-form-item>
<el-form-item label="摊位名称:" prop="remark">
<el-input v-model="model.remark" type="textarea" placeholder="请输入摊位名称"/>
</el-form-item>
</el-form>
<div style="width: 100%;display: flex;justify-content: space-between;padding: 0 50px;">
<el-button size="default" type="success" @click="destroyEditData">
<el-icon>
<ele-Close/>
</el-icon>
取消保存
</el-button>
<el-button size="default" type="primary" @click="saveModel">
<el-icon>
<ele-RefreshRight/>
</el-icon>
保存配置
</el-button>
</div>
</div>
</el-dialog>
</el-form>
</div>
</template>
<script lang="ts">
import {reactive, toRefs, defineComponent, ref, unref, onMounted} from 'vue';
import {
gameGMDelModel,
gameGMUpdateModel,
gameGMInsertModel,
gameGMGetModel
} from '/@/api/game';
import AllItemConfigCategory from "/@/api/config/AllItemConfigCategory.json";
import StructureConfigCategory from "/@/api/config/StructureConfigCategory.json";
import RegionConfigCategory from "/@/api/config/RegionConfigCategory.json";
import NpcConfigCategory from "/@/api/config/NpcConfigCategory.json";
import ScaleConfigCategory from "/@/api/config/ScaleConfigCategory.json";
import {ElLoading, ElMessage, ElMessageBox} from "element-plus";
import type {Action} from 'element-plus'
import {MODEL_TYPE, MODEL_TYPE_NAME} from "/@/api/common/consts";
interface TableDataState{
model: object;
Scale: object[];
Region: object[];
Structure: object[];
ItemConfig: object;
currencyType: object;
rules: object;
dbs: object[];
stallDbs: object[];
stalls: object[];
modelItem: object;
listModelVisible: boolean;
editModelVisible: boolean;
modelType: number;
stallTotal: number;
modelId: number;
page: number;
pageSize: number;
item: object;
NPC: object;
}
export default defineComponent({
name: 'systemGameMarketBuyModel',
setup: function(){
const formRef = ref<HTMLElement|null>(null);
const menuRef = ref();
const state = reactive<TableDataState>({
check: false,
ModelType: MODEL_TYPE,
ModelTypeName: MODEL_TYPE_NAME,
model: {
stallId: 1,
scale: -1,
village: -1,
structure: -1,
},
item: {show: true, listShow: true},
Scale: ScaleConfigCategory,
Region: RegionConfigCategory,
Structure: StructureConfigCategory,
listModelVisible: false,
editModelVisible: false,
modelType: 0,
stallTotal: 0,
stallDbs: [{type: 1}, {type: 2}],
stalls: [],
dbs: [],
ItemConfig: AllItemConfigCategory,
currencyType: [{Id: 1, Name: "铜币"}, {Id: 2, Name: "桃花石"}],
rules: {},
modelItem: {},
modelId: "",
page: 0,
pageSize: 5,
NPC: NpcConfigCategory.filter((r: {Type: number;}) => r.Type == 4),
});
onMounted(() => {
getDBModel();
});
var getDBModel = () => {
gameGMGetModel({mType: 0}).then((res) => {
console.log("gameGMGetModel: ", res);
state.stallDbs = res.data.model;
listStall(MODEL_TYPE.buy);
}).finally(() => {
});
};
var listStall = (type: number) => {
if(state.stallDbs){
state.stallDbs.sort((a, b) => {
return a.StallId < b.StallId ? -1:1;
});
}
if(!type){
return
}
state.listModelVisible = true;
state.modelType = type;
if(state.stallDbs){
state.stalls = state.stallDbs.filter(r => r.Type == type);
state.stallTotal = state.stalls.length;
state.stalls = state.stalls.slice(state.page * state.pageSize, (state.page + 1) * state.pageSize);
let id = 0;
for(let i in state.stallDbs){
if(state.stallDbs[i].StallId > id){
id = state.stallDbs[i].StallId;
}
}
state.model.stallId = id + 1;
}
console.log(state.stalls, state.page, (state.page + 1) * state.pageSize);
};
var makeStall = (type: number, id: string) => {
state.editModelVisible = true;
state.modelType = type;
state.model = {
stallId: 1,
scale: -1,
village: -1,
structure: -1,
};
if(!id){
return;
}
let model = state.stallDbs.find(r => r.StringId == id);
if(model){
describeModel(model);
}
};
var getModel = () => {
if(state.modelId){
state.stalls = state.stallDbs.filter(r => r.StallId == state.modelId && r.Type == state.modelType);
state.stallTotal = state.stalls.length;
return;
}
state.stalls = state.stallDbs.filter(r => r.Type == state.modelType);
state.stallTotal = state.stalls.length;
};
var delModel = (id: number, stallId: number) => {
ElMessageBox.alert('是否确认删除该配置?', '提示', {
confirmButtonText: 'OK',
cancelButtonText: 'Cancel',
callback: (action: Action) => {
if (action == "confirm"){
gameGMDelModel({id: id, stallId: stallId}).then(() => {
gameGMGetModel({mType: 0}).then((res) => {
console.log("gameGMGetModel: ", res);
state.stallDbs = res.data.model;
listStall(state.modelType);
}).finally(() => {
});
ElMessage({
type: 'success',
message: `删除成功`,
})
}).finally(() => {
});
}
}
})
};
var saveModel = () => {
const loading = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
});
state.check = true;
let model = dbModel();
if(!model.Items || !model.Introduce || !model.Num || !model.Remark || (!model.Renown && model.Renown != 0)
|| !model.StallId || !model.ScaleId || !model.StructureId || !model.VillageId || !model.Type){
ElMessage.error("保存失败,请检查表单是否填写完整");
loading.close();
return;
}
for(let i in model.Items){
let item = model.Items[i];
if(!item.CurrencyType || (!item.Discount && item.Discount != 0) || (!item.DiscountProb && item.DiscountProb != 0)
|| !item.ItemId || !item.ItemNums || !item.Price || !item.Weight || !item.Weight || item.ItemNums.length < 2){
ElMessage.error("保存失败,请检查表单是否填写完整");
loading.close();
return;
}
}
state.editModelVisible = false;
if(state.model._id){
gameGMUpdateModel({model: model}).then(() => {
let index = state.stallDbs.findIndex(r => r._id == model._id);
state.stallDbs.splice(index, 1, model);
model.StringId = state.model._id;
console.log(model, index);
state.check = false;
state.model = {
stallId: 1,
scale: -1,
village: -1,
structure: -1,
};
listStall(state.modelType);
ElMessage({
type: 'success',
message: `更新成功`,
});
}).finally(() => {
loading.close();
})
}else{
gameGMInsertModel({model: model}).then(() => {
gameGMGetModel({mType: 0}).then((res) => {
console.log("gameGMGetModel: ", res);
state.stallDbs = res.data.model;
state.check = false;
state.model = {
stallId: 1,
scale: -1,
village: -1,
structure: -1,
};
listStall(state.modelType);
ElMessage({
type: 'success',
message: `添加成功`,
});
})
}).finally(() => {
loading.close();
});
}
};
var dbModel = () => {
let items = [];
for(let i in state.model.items){
let item = state.model.items[i];
if(item){
items.push({
ItemId: Number(item.id),
ItemNums: [Number(item.numRangeMin), Number(item.numRangeMax)],
CurrencyType: Number(item.currencyType),
Weight: Number(item.weight),
Price: Number(item.price),
Discount: Number(item.discount),
DiscountProb: Number(item.discountProb)
})
}
}
let model = {
_id: state.model._id,
StallId: Number(state.model.stallId),
NPCId: Number(state.model.NPCId),
VillageId: Number(state.model.village),
Renown: Number(state.model.renown),
StructureId: Number(state.model.structure),
ScaleId: Number(state.model.scale),
Num: Number(state.model.num),
Items: items,
Introduce: state.model.introduce,
Remark: state.model.remark,
Type: state.modelType
};
return model
};
var describeModel = (stall: any) => {
state.modelType = stall.Type;
state.model = {
_id: stall.StringId,
items: [],
stallId: stall.StallId,
NPCId: stall.NPCId,
scale: stall.ScaleId || -1,
village: stall.VillageId || -1,
structure: stall.StructureId || -1,
renown: stall.Renown,
num: stall.Num,
introduce: stall.Introduce,
remark: stall.Remark,
mType: stall.Type
};
for(let i in stall.Items){
let item = stall.Items[i];
if(item){
state.model.items.push({
id: item.ItemId,
numRangeMin: item.ItemNums[0],
numRangeMax: item.ItemNums[1],
currencyType: item.CurrencyType,
weight: item.Weight,
price: item.Price,
discount: item.Discount,
discountProb: item.DiscountProb
})
}
}
};
var delModelItem = (index: number) => {
state.model.items.splice(index, 1);
};
var onQuickFillingModelItem = () => {
for(let i = 1; i < state.model.items.length; i++){
state.model.items[i].id = state.model.items[0].id;
state.model.items[i].currencyType = state.model.items[0].currencyType;
state.model.items[i].numRangeMin = state.model.items[0].numRangeMin;
state.model.items[i].numRangeMax = state.model.items[0].numRangeMax;
state.model.items[i].weight = state.model.items[0].weight;
state.model.items[i].price = state.model.items[0].price;
state.model.items[i].discount = state.model.items[0].discount;
state.model.items[i].discountProb = state.model.items[0].discountProb;
}
};
var onCopyModelItem = (modelItem: any) => {
state.modelItem = modelItem;
console.log("onCopyModelItem", state.modelItem);
};
var onPasteModelItem = (index: number) => {
if(!state.modelItem){
console.log("onPasteModelItem", state.modelItem);
return;
}
state.model.items[index].id = state.modelItem.id;
state.model.items[index].currencyType = state.modelItem.currencyType;
state.model.items[index].numRangeMin = state.modelItem.numRangeMin;
state.model.items[index].numRangeMax = state.modelItem.numRangeMax;
state.model.items[index].weight = state.modelItem.weight;
state.model.items[index].price = state.modelItem.price;
state.model.items[index].discount = state.modelItem.discount;
state.model.items[index].discountProb = state.modelItem.discountProb;
};
var addModelItem = () => {
if(!state.model.items){
state.model.items = [];
}
state.model.items.push({});
};
const handleCurrentChange = () => {
console.log(`current page: ${state.page}`);
state.page = state.page - 1;
listStall(state.modelType);
};
const destroyListData = () => {
state.page = 0;
state.modelType = 0;
state.modelId = "";
state.stalls = [];
state.stallTotal = 0;
};
const destroyEditData = () => {
state.model = {};
state.editModelVisible = false;
};
const onTableRowClassName = ({row, rowIndex}) => {
console.log("onTableRowClassName", row, rowIndex);
if(row.Day % 2 == 0 || row.day % 2 == 0){
return 'warning-row';
}else{
return '';
}
};
return {
menuRef,
formRef,
listStall,
getModel,
makeStall,
saveModel,
delModelItem,
onQuickFillingModelItem,
onCopyModelItem,
onPasteModelItem,
addModelItem,
delModel,
getDBModel,
handleCurrentChange,
destroyListData,
destroyEditData,
onTableRowClassName,
...toRefs(state),
};
},
});
</script>
<style scoped lang="scss">
.el-table {
--el-table-border-color: var(--el-border-color-lighter);
--el-table-border: 0px solid var(--el-table-border-color);
}
.el-table .el-table__cell {
padding: 1px 0;
min-width: 0;
box-sizing: border-box;
text-overflow: ellipsis;
vertical-align: middle;
position: relative;
text-align: left;
z-index: 1;
}
.el-input .el-input__inner {
height: 25px;
line-height: 25px;
padding: 0;
}
.system-edit-post-container {
.menu-data-tree {
border: var(--el-input-border, var(--el-border-base));
border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
padding: 5px;
}
}
.editable-cell__input {
display: inline;
width: 10%;
.el-input__inner {
padding: 0 8px;
font-size: 12px;
}
}
.left-block {
margin-left: -20px;
}
.table-num-left {
margin-left: -80px;
}
.num-left {
margin-left: -30px;
}
.table-item {
margin-top: 10px;
margin-bottom: -10px;
}
.title-label-block {
margin-left: -20px;
}
.label-block {
padding-left: 10px;
}
.box-card .el-card__header {
background-color: #409EFF;
color: #fff;
}
.change-icon {
font-size: 20px;
}
::v-deep .warning-row {
background: #ffffd5;
}
::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td {
background: #ffffd5;
}
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: inherit;
}
</style>