Page.uts 3.7 KB
Newer Older
DCloud-WZF's avatar
DCloud-WZF 已提交
1
import { pageGetData, pageSetData, getPageVm, getValidComponentsOrNodes } from './util.uts'
DCloud-WZF's avatar
DCloud-WZF 已提交
2

3
export type GetDataParams = {
DCloud-WZF's avatar
DCloud-WZF 已提交
4 5
  pageId: number
  path: string
DCloud-WZF's avatar
DCloud-WZF 已提交
6
  callback: (result: any | null, error: any | null) => void
DCloud-WZF's avatar
DCloud-WZF 已提交
7
}
DCloud-WZF's avatar
DCloud-WZF 已提交
8
export const getData = (params: GetDataParams): void => {
DCloud-WZF's avatar
DCloud-WZF 已提交
9
  const callback = params.callback
DCloud-WZF's avatar
DCloud-WZF 已提交
10
  const page = getPageVm(params.pageId)
DCloud-WZF's avatar
DCloud-WZF 已提交
11
  if (page == null) {
DCloud-WZF's avatar
DCloud-WZF 已提交
12
    callback(null, { errMsg: 'Page.getData:fail, Page not found.' })
DCloud-WZF's avatar
DCloud-WZF 已提交
13 14
    return
  }
DCloud-WZF's avatar
DCloud-WZF 已提交
15
  const data = pageGetData(page, params.path)
DCloud-WZF's avatar
DCloud-WZF 已提交
16
  callback({ data }, null)
DCloud-WZF's avatar
DCloud-WZF 已提交
17 18
}

19
export type SetDataParams = {
DCloud-WZF's avatar
DCloud-WZF 已提交
20
  pageId: number
DCloud-WZF's avatar
DCloud-WZF 已提交
21
  data: UTSJSONObject
DCloud-WZF's avatar
DCloud-WZF 已提交
22
  callback: (result: any | null, error: any | null) => void
DCloud-WZF's avatar
DCloud-WZF 已提交
23
}
DCloud-WZF's avatar
DCloud-WZF 已提交
24
export const setData = (params: SetDataParams): void => {
DCloud-WZF's avatar
DCloud-WZF 已提交
25 26 27
  const pageId = params.pageId
  const callback = params.callback
  const page = getPageVm(pageId)
DCloud-WZF's avatar
DCloud-WZF 已提交
28
  if (page != null) {
DCloud-WZF's avatar
DCloud-WZF 已提交
29
    pageSetData(page, params.data)
DCloud-WZF's avatar
DCloud-WZF 已提交
30
    callback({ result: { errMsg: 'Page.setData: ok.' } }, null)
DCloud-WZF's avatar
DCloud-WZF 已提交
31
  } else {
DCloud-WZF's avatar
DCloud-WZF 已提交
32
    callback(null, { errMsg: `Page.setData:fail, Page:${pageId} is not found.` })
DCloud-WZF's avatar
DCloud-WZF 已提交
33 34
  }
}
DCloud-WZF's avatar
DCloud-WZF 已提交
35 36 37 38
export type CallMethodParams = {
  pageId: number
  method: string
  args: any[]
DCloud-WZF's avatar
DCloud-WZF 已提交
39
  callback: (result: any | null, error: any | null) => void
DCloud-WZF's avatar
DCloud-WZF 已提交
40 41 42 43
}

export const callMethod = (params: CallMethodParams): void => {
  const page = getPageVm(params.pageId)
DCloud-WZF's avatar
DCloud-WZF 已提交
44
  if (page == null) {
DCloud-WZF's avatar
DCloud-WZF 已提交
45
    params.callback(null, { errMsg: `Page[${params.pageId}] not exists` })
DCloud-WZF's avatar
DCloud-WZF 已提交
46
  } else if (findVueMethod(page.$.type, params.method, page) == null) {
DCloud-WZF's avatar
DCloud-WZF 已提交
47
    params.callback(null, { errMsg: `Page.${params.method} not exists` })
DCloud-WZF's avatar
DCloud-WZF 已提交
48 49
  } else {
		const result = params.args.length > 0 ? page.$callMethod(params.method, params.args[0]) : page.$callMethod(params.method)
DCloud-WZF's avatar
DCloud-WZF 已提交
50
    params.callback({ result }, null)
DCloud-WZF's avatar
DCloud-WZF 已提交
51 52
  }
}
DCloud-WZF's avatar
DCloud-WZF 已提交
53 54 55 56

export type GetElementParams = {
  pageId: number
  selector: string
DCloud-WZF's avatar
DCloud-WZF 已提交
57
  callback: (result: any | null, error: any | null) => void
DCloud-WZF's avatar
DCloud-WZF 已提交
58 59 60 61
}

export const getElement = (params: GetElementParams): void => {
  const page = getPageVm(params.pageId)
DCloud-WZF's avatar
DCloud-WZF 已提交
62
  if (page == null) {
DCloud-WZF's avatar
DCloud-WZF 已提交
63
    params.callback(null, { errMsg: `Page[${params.pageId}] not exists` })
DCloud-WZF's avatar
DCloud-WZF 已提交
64
  } else {
DCloud-WZF's avatar
DCloud-WZF 已提交
65 66 67
    let selector = params.selector
    if (selector.startsWith('uni-')) {
      selector = selector.replace('uni-', '')
DCloud-WZF's avatar
DCloud-WZF 已提交
68
    }
DCloud-WZF's avatar
DCloud-WZF 已提交
69 70 71
    const list: UTSJSONObject[] = []
    getValidComponentsOrNodes(page.$.subTree, selector, list)
    const result = list.length > 0 ? list[0] : null
DCloud-WZF's avatar
DCloud-WZF 已提交
72
    params.callback(result, null)
DCloud-WZF's avatar
DCloud-WZF 已提交
73 74 75 76 77
  }
}

export const getElements = (params: GetElementParams): void => {
  const page = getPageVm(params.pageId)
DCloud-WZF's avatar
DCloud-WZF 已提交
78
  if (page == null) {
DCloud-WZF's avatar
DCloud-WZF 已提交
79
    params.callback(null, { errMsg: `Page[${params.pageId}] not exists` })
DCloud-WZF's avatar
DCloud-WZF 已提交
80 81 82 83 84 85 86 87 88
  } else {
    const elements = page.$querySelectorAll(params.selector)
    const result = [] as UTSJSONObject[]
    elements?.forEach(element => {
      result.push({
        elementId: element.id,
        tagName: element.tagName
      })
    })
DCloud-WZF's avatar
DCloud-WZF 已提交
89
    params.callback({ elements: result }, null)
DCloud-WZF's avatar
DCloud-WZF 已提交
90 91
  }
}
DCloud-WZF's avatar
DCloud-WZF 已提交
92 93 94 95 96 97 98 99 100

export type GetWindowPropertiesParams = {
  pageId: number,
  names: string[],
  callback: (result: any | null, error: any | null) => void
}
export const getWindowProperties = (params: GetWindowPropertiesParams): void => {
  const callback = params.callback
  const page = getPageVm(params.pageId)
DCloud-WZF's avatar
DCloud-WZF 已提交
101
  if (page == null) {
DCloud-WZF's avatar
DCloud-WZF 已提交
102 103 104
    callback(null, { errMsg: 'Page.getData:fail, Page not found.' })
    return
  }
DCloud-WZF's avatar
DCloud-WZF 已提交
105 106 107 108 109 110
  const properties = params.names.map((name): any | null => {
    switch (name) {
      case 'document.documentElement.scrollTop':
        const document = page.$appPage!.document
        const scrollViews = document.getElementsByTagName('scroll-view')
        const scrollView = scrollViews.size > 0 ? scrollViews[0] : null
DCloud-WZF's avatar
DCloud-WZF 已提交
111 112
        const scrollTop: any | null = scrollView != null ? scrollView.getAttribute('scrollTop') : 0
        return scrollTop == null ? 0 : scrollTop
DCloud-WZF's avatar
DCloud-WZF 已提交
113 114 115 116 117
    }
    return null
  })

  callback({ properties }, null)
DCloud-WZF's avatar
DCloud-WZF 已提交
118
}