ssts-hospital-web-master项目实战记录十六:项目迁移-基础模块实现(page-info-generator)

记录时间:2024-02-25

二、page-info模块实现

framework/utils/page-info-generator.ts

//javascript用来遍历指定对象所有的属性名称和值
//obj 需要遍历的对象
const allProps = function (obj: any, props: string = ''): string {
  // 使用 Object.keys() 获取对象自身的所有属性键
  const keys = Object.keys(obj)

  // 遍历这些属性键
  for (const key of keys) {
    const value = obj[key]

    // 如果是函数,则调用它
    if (typeof value === 'function') {
      value()
    } else {
      // 如果是对象,则递归调用
      if (typeof value === 'object' && value !== null) {
        props = allProps(value, props)
      } else {
        // 添加属性名和值到 props 字符串
        props += `${key}=${value}\r\n`
      }
    }
  }

  // 返回包含所有属性名和值的字符串
  return props
}

//生成快照文件名
/*文件命名规则
1.允许文件或者文件夹名称不得超过255个字符。
2.文件名除了开头之外任何地方都可以使用空格。
3.文件名中不能有下列符号:\/:*?"<>|。
4.Windows 98文件名不区分大小写,但在显示时可以保留大小写格式。
5.文件名中可以包含多个间隔符,如“我的文件。我的图片。001”。
*/
const CreateSnapshotFileName = function (s: string) {
  const pattern = new RegExp('[/:*?"<>|]')
  let rs = ''
  for (let i = 0; i < s.length; i++) {
    rs = rs + s.substring(i, i + 1).replace(pattern, '')
  }

  return rs
}

//获取页面信息
const GetPageInfo = function (
  state: string,
  businessTrace: string | null
): string {
  console.log('GetPageInfo:', state)
  // 获取Url路径并解码
  const href = decodeURIComponent(window.location.href)

  // 构建页面信息
  let pageInfo = `【${businessTrace}】${state}-【${href}】\r\n`

  // 获取控件信息并追加到页面信息中
  pageInfo += GetControlsInfo()

  return pageInfo
}

//获取控件
//格式:[text]-id=(value)
const GetControlsInfo = function () {
  let ret = ''

  const div = document.getElementById('business')
  // 获取ID为"business"的div里的所有input元素
  const inputs = div ? div.getElementsByTagName('input') : []

  // 遍历 input 元素
  for (const input of inputs) {
    // 只处理 type 为 'text' 且 id 不为空的 input 元素
    if (input.type === 'text' && input.id) {
      ret += `[${input.type}]-${input.id}-(${input.value})\r\n`
    }
  }

  // 获取ID为"business"的div里的所有span元素
  const spans = div ? div.getElementsByTagName('span') : []

  // 遍历 span 元素
  for (const span of spans) {
    // 只处理 id 不为空的 span 元素
    if (span.id) {
      ret += `[span]-${span.id}-(${span.innerText})\r\n`
    }
  }

  return ret
}

export { allProps, CreateSnapshotFileName, GetPageInfo, GetControlsInfo }
 

二、调用示例

test-framework-page-info-generator.vue

<script setup lang="ts">
import { onMounted } from 'vue'
import {
  allProps,
  CreateSnapshotFileName,
  GetPageInfo,
  GetControlsInfo
} from '@/framework/utils/page-info-generator'

const PageInfoGenerator = function () {
  console.log('PageInfoGenerator begin')

  const objTest = { TerminalIp: '192.168.1.100', TerminalName: 'test' }
  console.log('objTest:', objTest)

  const strProps = allProps(objTest)
  console.log('strProps:', strProps)

  const businessTrace = null
  const info = {
    errorMessage: 'test',
    lineNumber: 1,
    href: `http://localhost:19004/WebAdapter_AdapterTest.html`
  }

  const snapshotInfoInline = `${info.href}-【${info.errorMessage}】-【行号:${info.lineNumber}】`
  console.log('snapshotInfoInline:', snapshotInfoInline)
  const snapshotFileName = CreateSnapshotFileName(snapshotInfoInline)
  console.log('snapshotFileName:', snapshotFileName)

  const pageInfo = GetPageInfo('【错误】', businessTrace)
  console.log('pageInfo:', pageInfo)

  const controlsInfo = GetControlsInfo()
  console.log('controlsInfo:', controlsInfo)

  console.log('PageInfoGenerator end')
}

onMounted(() => {
  console.log('test-framework.vue', 'mounted')

  PageInfoGenerator()
})
</script>

<template>
  <div>
    <title>测试框架</title>
    <input id="inputTest" type="text" value="this is a test input." />
    <span id="spanTest">this is a test span.</span>
  </div>
</template>

<style scoped></style>
 

三、运行测试

 

 

 

posted @ 2024-02-25 23:08  lizhigang  阅读(2)  评论(0编辑  收藏  举报