Page.uts 3.7 KB
Newer Older
DCloud-WZF's avatar
DCloud-WZF 已提交
1
// @ts-ignore
DCloud-WZF's avatar
DCloud-WZF 已提交
2
import type { Callback } from '../index.uts'
DCloud-WZF's avatar
DCloud-WZF 已提交
3
// @ts-ignore
DCloud-WZF's avatar
DCloud-WZF 已提交
4
import { pageGetData, pageSetData, getPageVm, getValidComponentsOrNodes } from './util.uts'
DCloud-WZF's avatar
DCloud-WZF 已提交
5

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

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

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

export type GetElementParams = {
DCloud-WZF's avatar
DCloud-WZF 已提交
54
  pageId: string
DCloud-WZF's avatar
DCloud-WZF 已提交
55 56 57
  selector: string
}

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

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

export type GetWindowPropertiesParams = {
DCloud-WZF's avatar
DCloud-WZF 已提交
97
  pageId: string,
DCloud-WZF's avatar
DCloud-WZF 已提交
98
  names: string[]
DCloud-WZF's avatar
DCloud-WZF 已提交
99
}
DCloud-WZF's avatar
DCloud-WZF 已提交
100
export const getWindowProperties = (params: GetWindowPropertiesParams, callback: Callback): void => {
DCloud-WZF's avatar
DCloud-WZF 已提交
101
  const page = getPageVm(params.pageId)
DCloud-WZF's avatar
DCloud-WZF 已提交
102
  if (page == null) {
DCloud-WZF's avatar
DCloud-WZF 已提交
103 104 105
    callback(null, { errMsg: 'Page.getData:fail, Page not found.' })
    return
  }
DCloud-WZF's avatar
DCloud-WZF 已提交
106 107 108 109
  const properties = params.names.map((name): any | null => {
    switch (name) {
      case 'document.documentElement.scrollTop':
        const document = page.$appPage!.document
DCloud-WZF's avatar
DCloud-WZF 已提交
110 111
        // TODO: 确认根节点
        const scrollViews = document.getElementsByTagName('SCROLL-VIEW')
DCloud-WZF's avatar
DCloud-WZF 已提交
112
        const scrollView = scrollViews.size > 0 ? scrollViews[0] : null
DCloud-WZF's avatar
DCloud-WZF 已提交
113 114
        const scrollTop: any | null = scrollView != null ? scrollView.getAttribute('scrollTop') : 0
        return scrollTop == null ? 0 : scrollTop
DCloud-WZF's avatar
DCloud-WZF 已提交
115 116 117 118 119
    }
    return null
  })

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