• Composition API


    import { reactive, ref } from 'vue'
    // 一个用于重置对象字段为原始值的函数
    import { resetObjToPrimitiveType } from '@/utils/tool'
    
    /**
     * @description usePage 接收一个 opts 参数,返回列表所需数据
     * @param {Object} opts.searchForm - 默认查询参数
     * @param {Function} opts.getListApi  - 获取列表数据的接口
     * @param {Function} opts.customQueryParameters  - 自定义查询参数
     * @param {Function} opts.getListFunc  - 执行完 getList 成功后执行的逻辑 有一个opts参数
     * @param {Function} opts.resetFunc  - 执行完 reset 后执行的逻辑
     * @param {Function} opts.sizeChangeFunc  - 执行完 sizeChange 后执行的逻辑
     * @param {Function} opts.currentChangeFunc  - 执行完 currentChange 后执行的逻辑
     */
    export const usePage = (opts) => {
      // searchForm 由外部传入,内部传入导出的数据无法推导类型即无法知道对象里有什么也会失去代码提示
      const {
        searchForm = {},
        getListApi,
        customQueryParameters = () => {},
        getListFunc = (opts) => {},
        resetFunc = () => {},
        sizeChangeFunc = () => {},
        currentChangeFunc = () => {}
      } = opts
    
      const reset = () => {
        Object.assign(searchForm, resetObjToPrimitiveType(searchForm))
        resetFunc()
        handleCurrentChange(1)
      }
    
      const page = reactive({
        pageSize: 10,
        pageNo: 1,
        total: 0
      })
    
      const tableData = ref([])
      const getList = () => {
        const opts = {
          ...page,
          ...searchForm,
          ...customQueryParameters()
        }
    
        getListApi(opts).then((res) => {
          if (res.code === 0) {
            tableData.value = res.data?.rows || []
            page.total = res.data?.total || 0
    
            getListFunc(opts)
          }
        })
      }
    
      const handleSizeChange = (size) => {
        page.pageSize = size
        sizeChangeFunc()
        getList()
      }
    
      const handleCurrentChange = (cur) => {
        page.pageNo = cur
        currentChangeFunc()
        getList()
      }
    
      return {
        searchForm,
        reset,
        page,
        tableData,
        handleSizeChange,
        handleCurrentChange
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    组件内使用
    
    import { reactive, ref, computed } from 'vue'
    import { usePage } from '@/composables/usePage'
    import testModel from '@/model/test'
    
    // 查询参数
    const searchForm = reactive({
      createEndTime: '',
      createStartTime: ''
    })
    
    // 接收 查询参数、获取列表的接口 返回 列表所需要的数据、分页参数、分页函数等
    const { reset, page, tableData, handleSizeChange, handleCurrentChange } = usePage({
      searchForm,
      getListApi: testModel.getList
    })
    
    // 首次获取数据使用 reset方式即可 tableData 的数据自动更新
    reset()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    store
    
    import {useStore} from 'vuex'
    import {computed} from 'vue'
    
    export const useTest = () => {
        // 获取store
      const store = useStore()
      
      const getOrgById = (id) => {
          // 使用
        const orgObj = computed(() => store.state.orgObj)
        return orgObj.value[id]
      }
    
      return {
        getOrgById
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    leetcode:802. 找到最终的安全状态【反图 + 入度统计 + deque + 找出图中非环的节点】
    ELK:开源搜索与分析技术栈(2)
    git的理解与使用
    Linux驱动之INPUT设备驱动
    OpenHarmony 4.0 实战开发——分布式软总线解析:设备发现与传输
    一键使用Mybatis-X生成逆向工程
    sqli第24关二次注入
    python 就是随便玩玩,生成gif图,生成汉字图片,超级简单
    大型电商网站详情页是如何支撑亿级流量访问的?
    优思学院|精益六西格玛中的8大浪费是什么?
  • 原文地址:https://blog.csdn.net/u013165804/article/details/128144400