es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrar/Ocultar columna de tabla y guardar en localstorage en Vue

Me gustaría mostrar y ocultar dinámicamente una columna de una tabla con una casilla de verificación y guardar la opción en el almacenamiento local en Vue 2. Encontré una versión en jQuery, pero cuando intenté usarla, no funcionó.
Soy principiante en Vue.
Gracias por tu ayuda.

Mi tabla de Vue:

export default {
  extends: axiosGetPost,
  props: ['id','tab_name', 'route_name'],
  data() {
    return {
      hidePreLoader: true,
      price: '',
      purchase_price: '',
      selling_price: '',
      products: {},
      tableOptions: {
        tableName: 'products',
        columnSelect: true,
        columns: [
          {
            title: 'lang.item_image',
            key: 'image',
            type: 'images',
            source: '/uploads/products',
            imagefield: 'imageURL',
            sortable: false
          },
          {title: 'lang.sku', key: 'sku', type: 'text', sortable: true},
          {title: 'lang.sku_2', key: 'sku_2', type: 'text', sortable: true},
          {title: 'lang.sku_3', key: 'sku_3', type: 'text', sortable: true},
          {title: 'lang.sku_4', key: 'sku_4', type: 'text', sortable: true},
          {title: 'lang.attribute_values', key: 'attribute_values', type: 'text', sortable: true},
          {title: 'lang.quantity', key: 'test', type: 'text', sortable: true},
          {title: 'lang.selling_price', key: 'selling_price', type: 'text', sortable: true},
          {title: 'lang.receiving_price', key: 'purchase_price', type: 'text', sortable: true},
        ],
        formatting: ['selling_price','purchase_price'],
        source: '/products/variantDetails/' + this.id,
      },
    }
  },
}

Se me agotaron las ideas.
Gracias por tu ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar y ocultar columnas de una tabla de forma dinámica con una casilla de verificación y guardar la opción en el almacenamiento local en Vue 2, puedes utilizar la función de selección de columnas incorporada de Vue Tables 2 y utilizar el almacenamiento local de Vue para guardar las columnas seleccionadas. Así es como puedes implementarlo:

    1. Agrega una columna personalizada de casilla de verificación a la matriz tableOptions.columns:
    {
      title: 'Mostrar/Ocultar',
      name: '__checkbox:selected_columns',
      titleClass: 'centrado',
      dataClass: 'centrado',
      checked: true,
      disabled: true,
    }
    

    Esto agregará una columna de casilla de verificación a la izquierda de tu tabla, con el título ‘Mostrar/Ocultar’. Las columnas que deseas mostrar/ocultar tendrán su propiedad selected_columns establecida en true en los datos de la tabla.

    1. Agrega una propiedad computada para mapear los nombres de columna de los datos de la tabla a su estado de visibilidad:
    computed: {
      selectedColumns() {
        const seleccionadas = localStorage.getItem('selected_columns')
        return seleccionadas ? JSON.parse(seleccionadas) : {}
      },
    },
    

    Esto leerá el valor de selected_columns del almacenamiento local y lo parseará en un objeto. Si no se encuentra una selección previa, se devolverá un objeto vacío.

    1. Agrega un método para alternar la visibilidad de las columnas seleccionadas y guardar la selección en el almacenamiento local:
    methods: {
      toggleColumn(name) {
        const seleccionadas = this.selectedColumns
        if (seleccionadas[name]) {
          this.$refs.vuetable.showColumn(name)
          delete seleccionadas[name]
        } else {
          this.$refs.vuetable.hideColumn(name)
          seleccionadas[name] = true
        }
        localStorage.setItem('selected_columns', JSON.stringify(seleccionadas))
      },
    },
    

    Este método se llamará cuando se haga clic en la casilla de verificación en la columna ‘Mostrar/Ocultar’. Actualizará el objeto selectedColumns y llamará a showColumn o hideColumn en la referencia del componente vuetable para alternar la visibilidad de la columna seleccionada. Finalmente, guardará el objeto selectedColumns actualizado en el almacenamiento local.

    1. Modifica tu objeto tableOptions para incluir un responseAdapter y agregar la propiedad selected_columns a cada fila de datos:
    tableOptions: {
      ...
      responseAdapter(resp) {
        resp.data.forEach((fila) => {
          fila.selected_columns = true
        })
        return resp
      },
    },
    

    Esto asegurará que cada fila de datos tenga una propiedad selected_columns establecida en true de forma predeterminada.

    1. Vincula el método toggleColumn a la casilla de verificación en la columna ‘Mostrar/Ocultar’:
    {
      title: 'Mostrar/Ocultar',
      name: '__checkbox:selected_columns',
      titleClass: 'centrado',
      dataClass: 'centrado',
      checked: (name) => this.selectedColumns[name] || false,
      callback: (name) => this.toggleColumn(name),
    }
    

    Esto establecerá la casilla de verificación como marcada si la columna está actualmente visible y llamará al método toggleColumn con el nombre de la columna cuando se haga clic en la casilla de verificación.

    Con estos cambios, deberías poder mostrar y ocultar las columnas de tu tabla de forma dinámica, y cuando se recargue la página, la selección anterior se restaurará desde el almacenamiento local.

Comments are closed.