微信小程序实用的页面数据处理工具函数

angrybird2332024-11-06Frontend微信小程序
/**
 *  获取父页面
 * @param {*} deep  1=当前 2=父页 3=父父页
 */
export function getPrevPage(deep = 2) {
  let pages = getCurrentPages()
  let prevPage = pages[pages.length - deep] //上一个页面
  return prevPage
}

/**
 * 修改当前/父页面的某个列表节点
 * @param {*} id 主键
 * @param {*} valName 被修改的字段名
 * @param {*} val  被修改的值
 * @param {*} list   数据集
 * @param {*} idName 主键名
 */
export function modifyListNode(id, list, valName, val, idName = 'id') {
  if (!list || !Array.isArray(list)) return false
  let pos = list.findIndex(item => item[idName] === id)
  if (pos > -1) {
    list[pos][valName] = val
    return true
  }
  return false
}

/**
 * 修改当前/父页面的某个列表节点(单个值)
 * @param {*} id 主键
 * @param {*} valName 被修改的字段名
 * @param {*} val  被修改的值
 * @param {*} deep  1=当前 2=父页 3=父父页
 * @param {*} listName   数据集名
 * @param {*} idName 主键名
 */
export function modifyPrevPageListNode(id, valName, val, deep = 2, listName = 'dataList', idName = 'id') {
  let prevPage = getPrevPage(deep)
  if (!prevPage) return

  let dataList = prevPage.data[listName]
  if (!dataList) return

  let list = dataList['list']
  if (modifyListNode(id, list, valName, val, idName)) {
    prevPage.setData({
      [listName + '.list']: list,
    })
  }
}

/**
 * 修改当前/父页面的某个列表节点(一组值)
 * @param {*} id 主键
 * @param {*} valName 被修改的字段名
 * @param {*} val  被修改的值
 * @param {*} deep  1=当前 2=父页 3=父父页
 * @param {*} listName   数据集名
 * @param {*} idName 主键名
 */
export function modifyPrevPageListNodeObject(id, vals, deep = 2, listName = 'dataList', idName = 'id') {
  let prevPage = getPrevPage(deep)
  if (!prevPage) return

  let dataList = prevPage.data[listName]
  if (!dataList) return

  let list = dataList['list']

  for (let key in vals) {
    modifyListNode(id, list, key, vals[key], idName)
  }

  prevPage.setData({
    [listName + '.list']: list,
  })
}

/**
 * 从记录数组里删除某个节点
 * @param {*} id
 * @param {*} list
 * @param {*} idName
 */
export function delListNode(id, list, idName = 'id') {
  if (!list || !Array.isArray(list)) return false
  let pos = list.findIndex(item => item[idName] === id)
  if (pos > -1) {
    list.splice(pos, 1)
    return true
  }
  return false
}

/**
 * 删除当前/父页面的某个列表节点
 * @param {*} id 主键
 * @param {*} deep 1=当前 2=父页 3=父父页
 * @param {*} listName  数据集名
 * @param {*} idName  主键名
 */
export function delPrevPageListNode(id, deep = 2, listName = 'dataList', idName = 'id') {
  let prevPage = getPrevPage(deep)
  let dataList = prevPage.data[listName]
  if (!dataList) return

  let list = dataList['list']
  let total = dataList['total'] - 1
  if (delListNode(id, list, idName)) {
    prevPage.setData({
      [listName + '.list']: list,
      [listName + '.total']: total,
    })
  }
}

/**
 * 刷新当前/父页面的某个列表节点
 * @param {*} deep  1=当前 2=父页 3=父父页
 * @param {*} listName  数据集名
 * @param {*} listFunc  翻页函数名
 */
export async function refreshPrevListNode(deep = 2, listName = 'dataList', listFunc = 'getList') {
  let prevPage = getPrevPage(deep)
  let dataList = prevPage.data[listName]
  if (!dataList) return
  await prevPage[listFunc]()
}

最后更新时间 1/7/2025, 6:24:06 AM