Javascript 过滤vuetable时操作列按钮未更改
我有一个vuestic数据表,有7列 前6列是来自数据库中存储的表的表字段 最后一列是vuetable操作列,它是“详细信息”和“删除”两个按钮的组合 根据数据库中来自表的数据,某些行有删除按钮,而其他行没有 此外,我还在vuetable的前6列上使用排序。但我的问题是,当我用一列对vuetable进行排序时,例如“Lines Read”,所有其他列也会进行排序,但action列(最后一列)根本不会更改,并以相同的顺序显示按钮 我希望按钮也随着行数据在排序时的更改而更改。我该怎么做 TransactionImports.vueJavascript 过滤vuetable时操作列按钮未更改,javascript,vue.js,vuejs2,datatables,vue-tables-2,Javascript,Vue.js,Vuejs2,Datatables,Vue Tables 2,我有一个vuestic数据表,有7列 前6列是来自数据库中存储的表的表字段 最后一列是vuetable操作列,它是“详细信息”和“删除”两个按钮的组合 根据数据库中来自表的数据,某些行有删除按钮,而其他行没有 此外,我还在vuetable的前6列上使用排序。但我的问题是,当我用一列对vuetable进行排序时,例如“Lines Read”,所有其他列也会进行排序,但action列(最后一列)根本不会更改,并以相同的顺序显示按钮 我希望按钮也随着行数据在排序时的更改而更改。我该怎么做 Transa
从“Vue”导入Vue
从“时刻”导入时刻
从“../comps/FilterBar”导入FilterBar
从“epic微调器”导入{SpringSpinner}
从“/ActionColumn”导入ActionColumn
从“../../services/api”导入{getAllTransactionImports}
Vue.组件('action-column',ActionColumn)
导出默认值{
名称:“事务导入”,
组成部分:{
过滤器,
弹簧纺纱机
},
道具:{
可过滤字段:{
类型:数组,
默认值:()=>[
“收藏”,
“linesRead”,
“outputFilename”,
“全部插入”
//“帐号”
]
}
},
数据(){
返回{
加载:false,
搜索文本:“”,
进口:[],
表格字段:[
{
名称:“importedOn”,
标题:'导入日期',
sortField:“importedOn”,
宽度:“10%”,
回调:this.formatDate
},
{
名称:'集合',
标题:"收藏",,
索特菲尔德:“收藏”,
宽度:“20%”
},
{
名称:'linesRead',
标题:“行已读”,
sortField:“linesRead”,
宽度:“10%”
},
{
名称:“totalInserts”,
标题:“全部插入”,
sortField:“totalInserts”,
宽度:“10%”
},
{
名称:'rowsParsed',
标题:“已分析的行”,
sortField:“rowsParsed”,
宽度:“10%”
},
{
名称:“outputFilename”,
标题:“输出”,
sortField:'outputFilename',
宽度:“25%”
},
{
名称:'\u组件:操作列',
标题:“”,
宽度:“15%”
}
],
默认每页:30,
查询参数:{
排序:“排序”,
第页:'第页',
每页:'每页'
},
分页路径:“”,
排序功能:{
“achIncrements”:this.sortFunc,
“集合”:this.sortFunc,
“importedOn”:this.sortFunc,
“linesRead”:this.sortFunc,
“outputFilename”:this.sortFunc,
“rowsParsed”:this.sortFunc,
“totalInserts”:this.sortFunc,
}
}
},
创建(){
这个文件名为loadTransImport()
},
计算:{
表格数据:{
得到(){
const txt=new RegExp(this.searchText'i')
let list=this.imports.slice()
列表=列表.过滤器(项=>{
返回此.filterablefields.some(字段=>{
常量值=项[字段]+“”
返回val.search(txt)>=0
})
})
list={data:list}
返回列表
},
集合(){}
},
},
方法:{
loadTransImport(){
让self=这个
自加载=真
getAllTransactionImports()。然后(res=>{
self.$log.debug(res.data)
self.imports=res.data.sort((item1,item2)=>item1.importedOn>=item2.importedOn?-1:1)
self.tableData=self.imports
Vue.nextTick(()=>self.$refs.vuestictable.$refs.vuetable.refresh())
自加载=错误
}).catch(e=>{
self.$log.error(e)
自加载=错误
})
},
//列表筛选和分页
onFilterSet(){
const txt=new RegExp(this.searchText'i')
this.tableData=this.imports.slice()
this.tableData=this.imports.filter(项=>{
返回此.filterablefields.some(字段=>{
常量值=项[字段]+“”
console.log(val.search(txt)>=0)
返回val.search(txt)>=0
})
})
Vue.nextTick(()=>this.$refs.vuestictable.$refs.vuetable.refresh())
},
sortFunc(项目1、项目2){
返回项1>=项2?1:-1
},
格式化日期(值){
返回时刻(值)。格式('MM/DD/YYYY HH:MM')
}
}
}
ActionColumn.vue
细节
删除导入
这件事无法挽回
从“../../services/api”导入{deleteTransactionImport}
导出默认值{
名称:“操作列”,
道具:{
行数据:{
类型:对象,
必填项:true
},
行索引:{
类型:编号
}
},
创建(){
这个文件名为loadProfile()
},
方法:{
加载配置文件(){
console.log(this.rowData)
this.locked=this.rowData.isLocked
this.profile=this.$store.getters.getProfile
},
进口详情(){
this.$router.push({name:'transaction list',params:{importDate:this.rowData.importedOn})
},
openDeleteModal(){
这是。$refs.deleteModal.open()
},
删除导入(){
//太危险了,不敢尝试
让importID=this.rowData.collection
deleteTransactionImport(导入)。然后(res=>{
此.$log.info('已删除')
})
}
}
}
/*.圆圈{
宽度:.75rem;
高度:.75雷姆;
边界半径:50%;
显示:内联块
} */
这是桌面截图
免责声明:我不知道v
<template>
<div class="va-row">
<div class="flex md12 xs12">
<vuestic-widget headerText="Transaction Imports">
<div style="float: right; margin-right: 20px;">
<filter-bar
@input="onFilterSet"
label="Search"
v-model="searchText"
/>
</div>
<div v-show="loading" class="data-table-loading">
<slot name="loading">
<spring-spinner
slot="loading"
:animation-duration="2500"
:size="70"
color="#007755"
/>
</slot>
</div>
<vuestic-data-table
ref="vuestictable"
v-show="!loading"
:apiMode="false"
:tableData="tableData"
:tableFields="tableFields"
:defaultPerPage="defaultPerPage"
:sortFunctions="sortFunctions"
:paginationPath="paginationPath"
:queryParams="queryParams"
/>
</vuestic-widget>
</div>
</div>
</template>
<script>
import Vue from 'vue'
import moment from 'moment'
import FilterBar from '../comps/FilterBar'
import { SpringSpinner } from 'epic-spinners'
import ActionColumn from './ActionColumn'
import { getAllTransactionImports } from '../../services/api'
Vue.component('action-column', ActionColumn)
export default {
name: 'transaction-imports',
components: {
FilterBar,
SpringSpinner
},
props: {
filterablefields: {
type: Array,
default: () => [
'collection',
'linesRead',
'outputFilename',
'totalInserts'
// 'accountNumbers'
]
}
},
data () {
return {
loading: false,
searchText: '',
imports: [],
tableFields: [
{
name: 'importedOn',
title: 'Imported On',
sortField: 'importedOn',
width: '10%',
callback: this.formatDate
},
{
name: 'collection',
title: 'Collection',
sortField: 'collection',
width: '20%'
},
{
name: 'linesRead',
title: 'Lines Read',
sortField: 'linesRead',
width: '10%'
},
{
name: 'totalInserts',
title: 'Total Inserts',
sortField: 'totalInserts',
width: '10%'
},
{
name: 'rowsParsed',
title: 'Rows Parsed',
sortField: 'rowsParsed',
width: '10%'
},
{
name: 'outputFilename',
title: 'Output',
sortField: 'outputFilename',
width: '25%'
},
{
name: '__component:action-column',
title: '',
width: '15%'
}
],
defaultPerPage: 30,
queryParams: {
sort: 'sort',
page: 'page',
perPage: 'per_page'
},
paginationPath: '',
sortFunctions: {
'achIncrements': this.sortFunc,
'collection': this.sortFunc,
'importedOn': this.sortFunc,
'linesRead': this.sortFunc,
'outputFilename': this.sortFunc,
'rowsParsed': this.sortFunc,
'totalInserts': this.sortFunc,
}
}
},
created() {
this.loadTransImport()
},
computed: {
tableData: {
get () {
const txt = new RegExp(this.searchText, 'i')
let list = this.imports.slice()
list = list.filter(item => {
return this.filterablefields.some(field => {
const val = item[field] + ''
return val.search(txt) >= 0
})
})
list = {data: list}
return list
},
set () {}
},
},
methods: {
loadTransImport () {
let self = this
self.loading = true
getAllTransactionImports().then(res => {
self.$log.debug(res.data)
self.imports = res.data.sort((item1, item2) => item1.importedOn >= item2.importedOn ? -1 : 1)
self.tableData = self.imports
Vue.nextTick(() => self.$refs.vuestictable.$refs.vuetable.refresh())
self.loading = false
}).catch(e => {
self.$log.error(e)
self.loading = false
})
},
// list filter and pagination
onFilterSet () {
const txt = new RegExp(this.searchText, 'i')
this.tableData = this.imports.slice()
this.tableData = this.imports.filter(item => {
return this.filterablefields.some(field => {
const val = item[field] + ''
console.log(val.search(txt) >= 0)
return val.search(txt) >= 0
})
})
Vue.nextTick(() => this.$refs.vuestictable.$refs.vuetable.refresh())
},
sortFunc (item1, item2) {
return item1 >= item2 ? 1 : -1
},
formatDate (value) {
return moment(value).format('MM/DD/YYYY HH:mm')
}
}
}
</script>
<template>
<div style="height: 100%">
<button
class="btn btn-primary btn-micro"
@click="importDetails"
>
Details
</button>
<span v-if="profile.role === 'clerk'" style="margin-left:80px;"></span>
<button v-if="locked && profile.role === 'admin' || profile.role === 'manager'"
class="btn btn-danger btn-micro"
@click="openDeleteModal"
>
<span class="fa fa-trash-o"></span>
</button>
<vuestic-modal
ref="deleteModal"
okText="Delete"
okClass="btn btn-danger btn-micro"
cancelClass="btn btn-pale btn-micro"
@ok="deleteImport"
>
<p slot="title">Delete the Import</p>
<p>This can't be undone</p>
</vuestic-modal>
</div>
</template>
<script>
import { deleteTransactionImport } from '../../services/api'
export default {
name: 'action-column',
props: {
rowData: {
type: Object,
required: true
},
rowIndex: {
type: Number
}
},
created () {
this.loadProfile()
},
methods: {
loadProfile () {
console.log(this.rowData)
this.locked = this.rowData.isLocked
this.profile = this.$store.getters.getProfile
},
importDetails () {
this.$router.push({name: 'transaction-list', params: {importDate: this.rowData.importedOn}})
},
openDeleteModal () {
this.$refs.deleteModal.open()
},
deleteImport () {
// too dangerous to try
let importID = this.rowData.collection
deleteTransactionImport(importID).then(res => {
this.$log.info('deleted')
})
}
}
}
</script>
<style scoped>
/* .circle {
width: .75rem;
height: .75rem;
border-radius: 50%;
display: inline-block
} */
</style>