vue3后台管理系统封装增删改查操作 欢迎大家提意见(vue3也是边用边学)

在view里面调用

import { defineComponent, ref, reactive } from 'vue'
import Table from '@/components/table/index.vue'
import Layer from './layer.vue'
import {base} from "@/utils/base";
import { Plus, Search, Delete } from '@element-plus/icons'
export default defineComponent({
    name: 'crudTable',
    components: {
        Table,
        Layer
    },
    setup() {
        const baseData = base('user')
        const page = baseData.page
        const layer = baseData.layer
        const query = baseData.query
        const loading = baseData.loading
        const chooseData = baseData.chooseData
        const tableData = baseData.tableData
        const handleSelectionChange = baseData.handleSelectionChange
  const getTableData = baseData.getTableData
  const handleDel = baseData.handleDel
  const handleAdd = baseData.handleAdd
  const handleEdit = baseData.handleEdit
  return{
            Plus,
            Search,
            Delete,
            query,
            layer,
            page,
            loading,
            tableData,
            chooseData,
            handleSelectionChange,
            getTableData,
            handleDel,
            handleAdd,
            handleEdit
        }
    }
})

封装的base.js

import {ref, reactive } from 'vue'
import http from '../utils/http.js'
import {radioData, selectData} from "../views/pages/crudTable/enum";
import {ElMessage} from "element-plus";

export const base = (siteName,pageData = []) =>{
    const site = siteName
    const query = reactive({
        input: ''
    })
    // 弹窗控制器
    const layer = reactive({
        show: false,
        title: '新增',
        showButton: true
    })

    const page = reactive({
        index: pageData.index?pageData.index:1,
        size: pageData.size?pageData.size:10,
        total: 0
    })
    const loading = ref(true)
    const tableData = ref([])
    const chooseData = ref([])
    const handleSelectionChange = (val) => {
        chooseData.value = val
    }
    const getTableData = (init) => {
        loading.value = true
        if (init) {
            page.index = 1
        }
        let params = {
            page: page.index,
            limit: page.size,
            ...query
        }
        let uri = typeof(url) === 'string' && url !== '' ? url : site;
        http.get(uri,params).then(res => {
            let data = res.data.list
            if (Array.isArray(data)) {
                data.forEach(d => {
                    const select = selectData.find(select => select.value === d.choose)
                    select ? d.chooseName = select.label : d.chooseName = d.choose
                    const radio = radioData.find(select => select.value === d.radio)
                    radio ? d.radioName = radio.label : d.radio
                })
            }
            tableData.value = res.data.list
            page.total = Number(res.data.total)
        }).catch(error => {
            tableData.value = []
            page.index = 1
            page.total = 0
        }).finally(() => {
            loading.value = false
        })
    }
    // 删除功能
    const handleDel = (data) => {
        let params = {
            ids: data.map((e)=> {
                return e.id
            }).join(',')
        }
        let uri = typeof(url) === 'string' && url !== '' ? url : site;
        http.post(uri+'/batch',params).then(res => {
            if(res.code === 200){
                ElMessage({
                    type: 'success',
                    message: '删除成功'
                })
                getTableData(tableData.value.length === 1 ? true : false)
            }
        })
    }
    // 新增弹窗功能
    const handleAdd = () => {
        layer.title = '新增数据'
        layer.show = true
        delete layer.row
    }
    // 编辑弹窗功能
    const handleEdit = (row) => {
        layer.title = '编辑数据'
        layer.row = row
        layer.show = true
    }
    getTableData(false)
    return{
        site,
        layer,
        query,
        page,
        loading,
        tableData,
        chooseData,
        handleSelectionChange,
        getTableData,
        handleDel,
        handleAdd,
        handleEdit
    }
}


本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!