保存进度!

This commit is contained in:
Kane Wang 2023-09-12 18:12:27 +08:00
parent be5e426cee
commit 31d5e1622c
4 changed files with 201 additions and 22 deletions

View File

@ -112,6 +112,7 @@ module.exports = {
"vue/html-indent": ["error", 4,], "vue/html-indent": ["error", 4,],
// typescript // typescript
"@typescript-eslint/indent": ["warn", 4,], "@typescript-eslint/indent": ["warn", 4,],
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-extra-semi": "off", "@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off", "@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-unused-vars": "warn", "@typescript-eslint/no-unused-vars": "warn",

View File

@ -8,42 +8,96 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div class="wrapper"> <div
v-if="ui.showUI"
class="wrapper"
>
<div class="reward-wrapper"> <div class="reward-wrapper">
<div class="reward-gainer-wrapper"> <div class="reward-gainer-wrapper">
<el-divider content-position="left"> <el-divider content-position="left">
90俱乐部 90俱乐部
</el-divider> </el-divider>
<div class="toolbutton-wrapper"> <div class="toolbutton-wrapper">
<el-button type="primary"> <el-button
type="primary"
icon="documentAdd"
>
新增 新增
</el-button> </el-button>
<el-button type="danger"> <el-button
type="danger"
icon="delete"
>
删除 删除
</el-button> </el-button>
<el-button
type="warning"
icon="Refresh"
@click="refresh"
>
刷新
</el-button>
</div> </div>
<el-table <el-table
border border
stripe stripe
style="width:100%;" style="width:100%;"
:height="tableHeight" :height="tableHeight"
:data="rewardGainerData"
> >
<el-table-column type="selection" /> <el-table-column type="selection" />
<el-table-column <el-table-column
label="坐席名称" label="坐席名称"
align="center" align="center"
/> >
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer(rewardGainer.row.callerName, rewardGainer.row.rewardProjectName)"
>{{ rewardGainer.row.callerName }}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="奖项名称" label="奖项名称"
align="center" align="center"
/> >
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer(rewardGainer.row.callerName, rewardGainer.row.rewardProjectName)"
>{{ rewardGainer.row.rewardProjectName }}</span>
</template>
</el-table-column>
</el-table> </el-table>
<div class="pagination-wrapper">
<el-pagination
v-model="ui.tablePageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="ui.rewardGainerList.length"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
</div> </div>
</div> </div>
<div class="dialog-wrapper">
<el-dialog
title="编辑获奖人员"
v-model="ui.showEditRewardGainerDialog"
width="400px"
>
<RewardGainerDialog />
</el-dialog>
</div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive, computed } from "vue"; import { reactive, computed, onBeforeMount } from "vue";
import { import {
type RewardProject, type RewardProject,
type RewardGainer, type RewardGainer,
@ -52,36 +106,110 @@ import {
requestRewardPorjectsList, requestRewardPorjectsList,
requestRewardGainers requestRewardGainers
} from "@/utils/reward.js"; } from "@/utils/reward.js";
import { ElMessageBox } from "element-plus";
import RewardGainerDialog from "@/views/reward/RewardGainer.vue";
interface UI interface UI
{ {
showUI: boolean;
showEditRewardGainerDialog: boolean;
rewardGainerList: RewardGainer[]; rewardGainerList: RewardGainer[];
tablePageIndex: number;
tablePageSize: number;
} }
export default { export default {
name: "DataManagement", name: "DataManagement",
components: { RewardGainerDialog, },
setup() setup()
{ {
const ui: UI = reactive({ const ui: UI = reactive({
showUI: true,
showEditRewardGainerDialog: false,
rewardGainerList: [], rewardGainerList: [],
tablePageIndex: 1,
tablePageSize: 10,
}); });
/** 请求数据相关 ***************************/
const applyGainerList = ( response: RewardGainerResponse, error: any ): void =>
{
if ( !response.success )
{
console.log( error );
ElMessageBox({
message: "请求获奖人列表失败,请查看日志!",
type: "error",
center: true,
})
.then((): void => {})
.catch((): void => {});
return;
}
ui.rewardGainerList = response.gainerList;
console.log( "请求获奖人员列表", ui.rewardGainerList );
};
/** 表格相关 ***************************/
const tableHeight = computed((): number => const tableHeight = computed((): number =>
{ {
return 5 * 50 + 40; return ( ui.tablePageSize + 1 ) * 40;
}); });
const applyGainerList = ( response: RewardGainerResponse ): void => const rewardGainerData = computed((): RewardGainer[] =>
{ {
if ( response.success ) const startIndex = ui.tablePageSize * ( ui.tablePageIndex - 1 );
{ const endIndex = startIndex + ui.tablePageSize;
ui.rewardGainerList = response.gainerList; const data = ui.rewardGainerList.slice( startIndex, endIndex );
} console.log( ui.tablePageSize, ui.tablePageIndex );
console.log( "表格数据:", data );
return data;
});
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.tablePageIndex = pageIndex;
}; };
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
//
const onEditRewardGainer = ( callerName: string, rewardProjectName: string ): void =>
{
console.log( "编辑获奖清单", callerName, rewardProjectName );
ui.showEditRewardGainerDialog = true;
};
/**
* 用于刷新页面
*/
const refresh = (): void =>
{
requestRewardGainers( applyGainerList );
};
onBeforeMount((): void =>
{
refresh();
});
return { return {
ui, ui,
tableHeight, tableHeight,
rewardGainerData,
onCurrentPageIndexChange,
onTablePageSizeChange,
onEditRewardGainer,
refresh,
}; };
}, },
}; };
@ -145,4 +273,17 @@ export default {
margin-left: 15px; margin-left: 15px;
} }
} }
.pagination-wrapper {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
.reward-gainer-td {
cursor: pointer;
display: block;
}
</style> </style>

View File

@ -188,4 +188,5 @@ export default {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
} }
</style> </style>

View File

@ -9,11 +9,11 @@
--> -->
<template> <template>
<div class="reward-gainer-wrapper"> <div class="reward-gainer-wrapper">
<el-row> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="8">
<span>奖励类型</span> <span>奖励类型</span>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="16">
<el-select v-model="ui.selectedRewardProject"> <el-select v-model="ui.selectedRewardProject">
<el-option <el-option
v-for="item in ui.rewardProjectList" v-for="item in ui.rewardProjectList"
@ -24,18 +24,18 @@
</el-select> </el-select>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="8">
<span>坐席名称</span> <span>坐席名称</span>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="16">
<el-input v-model.trim.lazy="ui.rewardCallerName" /> <el-input v-model.trim.lazy="ui.rewardCallerName" />
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive } from "vue"; import { reactive, onBeforeMount } from "vue";
import import
{ {
type RewardProject, type RewardProject,
@ -45,11 +45,13 @@ import
requestRewardPorjectsList, requestRewardPorjectsList,
requestRewardGainers requestRewardGainers
} from "@/utils/reward.js"; } from "@/utils/reward.js";
import { ElMessageBox } from "element-plus";
interface RewardGainerUI interface RewardGainerUI
{ {
rewardProjectList: RewardProject[]; showEditRewardGainerDialog: boolean;
selectedRewardProject: number; rewardProjectList: RewardProject[] | null;
selectedRewardProject: number | undefined;
rewardCallerName: string; rewardCallerName: string;
} }
@ -58,17 +60,51 @@ export default {
setup() setup()
{ {
const ui: RewardGainerUI = reactive({ const ui: RewardGainerUI = reactive({
showEditRewardGainerDialog: false,
rewardProjectList: [], rewardProjectList: [],
selectedRewardProject: 0, selectedRewardProject: undefined,
rewardCallerName: "", rewardCallerName: "",
}); });
const applyRewardProjectsData = ( response: RewardProjectResponse, error: any ): void =>
{
if ( !response.success )
{
ElMessageBox({
message: "请求奖励项目失败,请查看日志!",
type: "error",
})
.then((): void => {})
.catch((): void => {});
console.log( "请求奖励项目失败:", error );
return;
}
ui.rewardProjectList = response.rewardList;
};
const refresh = (): void =>
{
requestRewardPorjectsList( applyRewardProjectsData );
};
onBeforeMount((): void =>
{
refresh();
});
return { ui, }; return { ui, };
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.reward-gainer-wrapper { .reward-gainer-wrapper {
width: 300px; width: 300px;
@include query-box-wrap;
} }
</style> </style>