Appearance
表格组件行数据操作
- 操作表格行数据之后,直接修改当前行数据,此类操作不需要重新获取表格数据。(一般适用于当前页面不需要获取新数据)
- 操作表格行数据之后,需要重新获取表格数据。(一般适用于当前页面需要获取新数据)
代码示例:
修改行数据状态:
vue
<!--表格操作列操作后需要刷新页面或操作对应数据-->
<template>
<!-- 容器 -->
<div class="bgwh p10 mt5">
<!-- 表格区域 -->
<vxe-table class="mt5" border :height="tableHeight" :data="tableData" show-overflow :header-cell-style="TABLE_HEADER_CELL_STYLE" :cell-style="TABLE_CELL_STYLE">
<vxe-table-column field="mofDivCode" title="地区编码" header-align="center" align="left"></vxe-table-column>
<vxe-table-column field="mofDivName" title="地区名称" header-align="center" align="left"></vxe-table-column>
<vxe-table-column field="auditState" title="审核状态" header-align="center" align="center">
<template v-slot="scope">
<span class="bs-color-green" v-if="scope.row.auditState === AUDIT_STATE.AUDITED">已审核</span>
<span class="bs-color-red" v-if="scope.row.auditState === AUDIT_STATE.RETURNED">已退回</span>
<span class="bs-color-yellow" v-else>未审核</span>
</template>
</vxe-table-column>
<vxe-table-column title="操作" header-align="center" align="center">
<template slot-scope="scope">
<span class="bs-color-primary poi" @click="handleAudit(scope.row)" v-if="scope.row.auditState === AUDIT_STATE.UNAUDIT">审核</span>
</template>
</vxe-table-column>
</vxe-table>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { GET_LOGIN_INFO } from '@/store/login';
import { hasView } from '@/mixin/system';
import {
innerHeight,
TABLE_HEADER_CELL_STYLE,
TABLE_CELL_STYLE,
} from '@/mixin/page';
import fetch from '@/config/fetch';
/**
* 审核状态
*/
const AUDIT_STATE = {
UNAUDIT: 1, //未审核
AUDITED: 2, //已审核
RETURNED: 3, //已退回
};
export default {
mixins: [innerHeight],
data() {
return {
tableData: [], //表格数据
TABLE_CELL_STYLE,
TABLE_HEADER_CELL_STYLE,
AUDIT_STATE,
};
},
computed: {
...mapGetters([GET_LOGIN_INFO]),
/**
* 表格高度
*/
tableHeight() {
return this.innerHeight - 160;
},
},
methods: {
/**
* 初始化页面
*/
initPage() {
this.tableData = [];
this.getTableData();
},
/**
* 获取表格数据
*/
getTableData() {
this.$loading();
fetch
.post('/gfr/v1/cb/sync/query/sync/check', {
setYear: this.GET_LOGIN_INFO.fiscalYear,
})
.then(({ data }) => {
this.tableData = data;
this.$loadingClose();
})
.catch((err) => {
this.$loadingClose();
console.error(err);
this.$message({
type: 'error',
message: err.msg,
});
});
},
/**
* 获取审核参数
*/
getAuditParam(row) {
let params = {
setYear: this.GET_LOGIN_INFO.fiscalYear,
mofDivCode: row.mofDivCode,
};
return params;
},
/**
* 处理审核
* 1、获取审核参数
* 2、调用审核接口进行审核
* 3、更改当前单位审核状态
*/
async handleAudit(row) {
try {
this.$loading();
let params = this.getAuditParam(row);
await this.audit(params);
// TODO:操作表格行数据之后,直接修改当前行数据,此类操作不需要重新获取表格数据。(一般适用于当前页面不需要获取新数据)
this.$set(row, 'auditState', AUDIT_STATE.AUDITED);
this.$message({
type: 'success',
message: '审核成功!',
});
} catch (err) {
this.$loadingClose();
console.error(err);
this.$message({
type: 'error',
message: err.msg,
});
} finally {
this.$loadingClose();
}
},
/**
* 审核接口调用
*/
audit(params) {
return Promise((resolve, reject) => {
fetch
.post('/gfr/v1/cb/sync/query/sync/audit', params)
.then(() => {
return resolve();
})
.catch((err) => {
return reject(err);
});
});
},
},
beforeRouteEnter(to, from, next) {
let isOpenView = hasView(to.path);
next((vm) => {
vm.initPage(isOpenView);
});
},
};
</script>
刷新表格数据:
vue
<!--表格操作列操作后需要刷新页面或操作对应数据-->
<template>
<!-- 容器 -->
<div class="bgwh p10 mt5">
<!-- 表格区域 -->
<vxe-table class="mt5" border :height="tableHeight" :data="tableData" show-overflow :header-cell-style="TABLE_HEADER_CELL_STYLE" :cell-style="TABLE_CELL_STYLE">
<vxe-table-column field="mofDivCode" title="地区编码" header-align="center" align="left"></vxe-table-column>
<vxe-table-column field="mofDivName" title="地区名称" header-align="center" align="left"></vxe-table-column>
<vxe-table-column field="auditState" title="审核状态" header-align="center" align="center">
<template v-slot="scope">
<span class="bs-color-green" v-if="scope.row.auditState === AUDIT_STATE.AUDITED">已审核</span>
<span class="bs-color-red" v-if="scope.row.auditState === AUDIT_STATE.RETURNED">已退回</span>
<span class="bs-color-yellow" v-else>未审核</span>
</template>
</vxe-table-column>
<vxe-table-column title="操作" header-align="center" align="center">
<template slot-scope="scope">
<span class="bs-color-primary poi" @click="handleDelete(scope.row)">删除</span>
</template>
</vxe-table-column>
</vxe-table>
<el-pagination class="r" @size-change="handleSizeChange" @current-change="handleCurrentPageChange" :current-page="page.currentPage" :page-sizes="page.sizes" :page-size="page.pageSize" layout="total, sizes, prev, pager ,next,jumper" :total="page.total">
</el-pagination>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { GET_LOGIN_INFO } from '@/store/login';
import { hasView } from '@/mixin/system';
import { pagination } from '@/mixin/page';
import {
innerHeight,
TABLE_HEADER_CELL_STYLE,
TABLE_CELL_STYLE,
} from '@/mixin/page';
import fetch from '@/config/fetch';
/**
* 审核状态
*/
const AUDIT_STATE = {
UNAUDIT: 1, //未审核
AUDITED: 2, //已审核
RETURNED: 3, //已退回
};
export default {
mixins: [pagination, innerHeight],
data() {
return {
TABLE_CELL_STYLE,
TABLE_HEADER_CELL_STYLE,
AUDIT_STATE,
};
},
computed: {
...mapGetters([GET_LOGIN_INFO]),
/**
* 表格高度
*/
tableHeight() {
return this.innerHeight - 160;
},
},
methods: {
/**
* 初始化页面
*/
initPage() {
this.page.currentPage = 1;
this.pageData = [];
this.getTableData();
},
/**
* 获取表格数据
*/
getTableData() {
this.$loading();
fetch
.post('/gfr/v1/cb/sync/query/sync/check', {
setYear: this.GET_LOGIN_INFO.fiscalYear,
})
.then(({ data }) => {
this.$loadingClose();
this.page.total = data.total;
this.pageData = data.result;
})
.catch((err) => {
this.$loadingClose();
console.error(err);
this.$message({
type: 'error',
message: err.msg,
});
});
},
/**
* 获取删除参数
*/
getDeleteParam(row) {
let params = {
setYear: this.GET_LOGIN_INFO.fiscalYear,
mofDivCode: row.mofDivCode,
};
return params;
},
/**
* 处理删除
* 1、获取删除接口参数
* 2、调用删除接口进行删除
* 3、刷新表格数据
*/
async handleDelete(row) {
try {
this.$loading();
let params = this.getDeleteParam(row);
await this.delete(params);
this.$message({
type: 'success',
message: '删除成功!',
});
// TODO:操作表格行数据之后,需要重新获取表格数据。(一般适用于当前页面需要获取新数据)
this.pageData = [];
this.getTableData();
} catch (err) {
this.$loadingClose();
console.error(err);
this.$message({
type: 'error',
message: err.msg,
});
} finally {
this.$loadingClose();
}
},
/**
* 删除接口调用
*/
delete(params) {
return Promise((resolve, reject) => {
fetch
.post('/gfr/v1/cb/sync/query/sync/audit', params)
.then(() => {
return resolve();
})
.catch((err) => {
return reject(err);
});
});
},
},
beforeRouteEnter(to, from, next) {
let isOpenView = hasView(to.path);
next((vm) => {
vm.initPage(isOpenView);
});
},
};
</script>