UNPKG

@pluginarch/create-parch

Version:

this is way to create a ui project

1,506 lines (1,410 loc) 60 kB
let attrsKey = null function scriptFormat(id, attrs, scriptStr = '') { scriptStr = removeComment(scriptStr).replace(/\n/gm, '') const funName = `gen${attrs.tag}Script` let script = scriptStr let events = '' // 如果组件有内置事件,优先处理内置事件函数 if (window[funName]) { attrsKey = attrs.attrMap const eventsResult = window[funName].call(window, id, scriptStr, attrsKey) script = eventsResult.script events = eventsResult.events } const attrResult = transformAttrChangedScript(id, script, events) script = attrResult.script events = attrResult.events const animResult = transformAnimScript(id, script, events) script = animResult.script events = animResult.events script = qml2js(id, script, attrs.attrMap) if (script) { script = removeFun(script) } // 将最后面的逗号删掉在,再拼上前后的一对花括号 events = `{${events.trim().slice(0, -1)}}` return { script, events } } /* 处理属性改变事件名 */ function combinedEvents(id, propsname, script, events) { for (let k = 0; k < propsname.length; k++) { let firstUpCasepropName = propsname[k].replace(/^\S/, (s) => s.toUpperCase() ) if (script.includes(`on${firstUpCasepropName}Changed`)) { script = script.replace( `on${firstUpCasepropName}Changed:`, `function ${id}_${firstUpCasepropName}ChangedHandler()` ) events += `'on` + firstUpCasepropName.replace(/([A-Z])/g, '-$1').toLowerCase() + `-changed': _vm.${id}_${firstUpCasepropName}ChangedHandler,` } } if (script.includes('onMouseLeftOneClickAction')) { script = script.replace( 'onMouseLeftOneClickAction:', `function ${id}_MouseLeftOneClickActionHandler()` ) events += `'on-mouse-left-one-click-action': _vm.${id}_MouseLeftOneClickActionHandler,` } if (script.includes('onMouseLeftDoubleClickAciton')) { script = script.replace( 'onMouseLeftDoubleClickAciton:', `function ${id}_MouseLeftDoubleClickAcitonHandler()` ) events += `'on-mouse-left-double-click-aciton': _vm.${id}_MouseLeftDoubleClickAcitonHandler,` } if (script.includes('onMouseRightDoubleClickAction')) { script = script.replace( 'onMouseRightDoubleClickAction:', `function ${id}_MouseRightDoubleClickActionHandler()` ) events += `'on-mouse-right-double-click-action': _vm.${id}_MouseRightDoubleClickActionHandler,` } return { script, events } } /** * 监听动画结束的事件,目前尚无实现方案 * @param {String} id * @param {String} script * @param {String} events */ function transformAnimScript(id, script, events) { if (script.includes('onAnimStop')) { script = script.replace('onAnimStop:', `function ${id}_AnimStopHandler()`) events += `onAnimStop: _vm.${id}_AnimStopHandler,` } return { script, events } } /** * 统一处理「除事件触发之外]的属性变化事件 * @param {String} id * @param {String} script * @param {String} events */ function transformAttrChangedScript(id, script, events) { script = script.replace(/on[A-Z][a-z]+Changed:/g, (attrChangeName) => { const attr = attrChangeName .replace('on', '') .replace('Changed:', '') .replace(/^\S/, (s) => s.toLowerCase()) // 首字母小写 events += `${attrChangeName} _vm.${id}_${attr}ChangedHandler,` return `function ${id}_${attr}ChangedHandler(${attr})` }) return { script, events } } /** * 将qml中[全局变量执行的脚本]转化为js脚本 * 借助第三方的ast解析器实现 * @param {String} id 组件id * @param {String} code 脚本字符串 */ function qml2js(id, code, attrMap) { const keys = Object.keys(attrMap), refPicture = attrMap['refPicture'] let map = {} if (id === refPicture && attrMap.subGraphIdMap) { map = attrMap.subGraphIdMap } else if ( refPicture && window[refPicture] && window[refPicture]['subGraphIdMap'] ) { map = window[refPicture]['subGraphIdMap'] } const ast = esprima.parseScript(code) estraverse.traverse(ast, { enter(node, parent) { if (node.type === 'UnaryExpression') { if ( refPicture && node.argument && node.argument.name && map[node.argument.name] ) { //合并图元取反变量的处理 !recv_parm node.argument.name = map[node.argument.name] } } if (node.type === 'ForInStatement' && node.right && node.right.name) { if (refPicture && map[node.right.name]) { //for 循环变量替换 node.right.name = map[node.right.name] } } // TODO 后需考虑对以下判断逻辑重构 /** * 同时满足以下三个条件时对赋值语句进行修改,形如 text="111111" * 1. 类型为赋值语句 * 2. left.name存在,即直接给变量赋值,而不是给对象的属性赋值 * 3. 该变量为当前组件的某一属性名称 */ if (node.type === 'AssignmentExpression' && node.left && node.left.name) { if (keys.includes(node.left.name)) { node.left = transformAst(node, 'left', id) } else if (refPicture && map[node.left.name]) { //子图中变量名替换 node.left.name = map[node.left.name] } } /** * 同时满足以下三个条件时对赋值语句进行修改,形如 aaa=text * 1. 类型为赋值语句 * 2. left.name存在,即直接给变量赋值,而不是给对象的属性赋值 * 3. 该变量为当前组件的某一属性名称 */ if ( node.type === 'AssignmentExpression' && node.right && node.right.name ) { if (keys.includes(node.right.name)) { node.right = transformAst(node, 'right', id) } else if (refPicture && map[node.right.name]) { //子图中变量名替换 node.right.name = map[node.right.name] } } /**满足下述条件: * 1.类型是return语句 * 2.返回的该变量是当前组件的某一属性名称 * 例如:return enabled; * */ if(node.type === 'ReturnStatement' && node.argument && node.argument.name) { if (keys.includes(node.argument.name)) { node.argument = transformAst(node, 'argument', id) } } /** * 同时满足以下三个条件时对赋值语句进行修改,形如 text == '666' * 1. 类型为判断语句 * 2. left.name存在,即直接给变量赋值,而不是给对象的属性赋值 * 3. 该变量为当前组件的某一属性名称 */ if (node.type === 'BinaryExpression' && node.left && node.left.name) { if (keys.includes(node.left.name)) { node.left = transformAst(node, 'left', id) } else if (refPicture && map[node.left.name]) { //子图中变量名替换 node.left.name = map[node.left.name] } } /** * 同时满足以下三个条件时对赋值语句进行修改,形如 '666' == text * 1. 类型为判断语句 * 2. right.name存在,即直接给变量赋值,而不是给对象的属性赋值 * 3. 该变量为当前组件的某一属性名称 */ if (node.type === 'BinaryExpression' && node.right && node.right.name) { if (keys.includes(node.right.name)) { node.right = transformAst(node, 'right', id) } else if (refPicture && map[node.right.name]) { //子图中变量名替换 node.right.name = map[node.right.name] } } /** * 同时满足以下三个条件时对函数调用语句进行修改, 形如test('88888') * 1. 类型为调用表语句 * 2. callee.name存在,即使直接调用全局函数,而不是调用对象函数 * 3. 该函数非全局函数 */ if (node.type === 'CallExpression' && node.callee && node.callee.name) { if (!window[node.callee.name]) { node.callee = transformAst(node, 'callee', id) } else { node.arguments.forEach((arg) => { if (arg.type === 'Identifier' && refPicture && map[arg.name]) { //子图方法调用参数判断 arg.name = map[arg.name] } }) } } /** * 上述CallExpression表达式不满足要求,故此补充 * 当例如:function a(){const json={}; json.sort(up)}; * function up(x,y){return x.vol_id - y.vol_id;} * up 没括号,不在满足上述要求,则不会自动补充this */ if ( node.type === 'CallExpression' && node.callee && node.arguments && node.arguments.length && node.callee.property && node.callee.property.name && node.callee.property.name === 'sort' ) { for (let argsNo = 0; argsNo < node.arguments.length; argsNo++) { if ( node.arguments[argsNo].type === 'Identifier' && !window[node.arguments[argsNo].name] ) { node.arguments[argsNo] = transformAstArgument( node, `arguments`, id, argsNo ) } } } /** * 同时满足以下三个条件时对赋值语句进行修改,形如 var aaa = text * 1. 类型为声明语句 * 2. init.name存在,即直接给变量赋值,而不是给对象的属性赋值 * 3. 该变量为当前组件的某一属性名称 */ if (node.type === 'VariableDeclarator' && node.init) { if (keys.includes(node.init.name) && node.init.name) { node.init = transformAst(node, 'init', id) } else if (refPicture && map[node.init.name]) { //子图中变量名替换 node.init.name = map[node.init.name] } /** * 处理 右边是情景new对象的情景,例如: * var date_start = new Date(cur_start); * 合并图形没有将cur_start进行替换 */ if (refPicture && node.init.type === 'NewExpression') { if ( node.init.arguments && node.init.arguments[0] && node.init.arguments[0].name && map[node.init.arguments[0].name] ) { node.init.arguments[0].name = map[node.init.arguments[0].name] } } /** * 变量申明右侧是数组,数组内包含需要替换的变量 */ if (refPicture && node.init.type === 'ArrayExpression') { const ele = node.init.elements ele.forEach((r) => { if (r.type === 'Identifier' && map[r.name]) { r.name = map[r.name] } }) } } if (node.type === 'MemberExpression' && node.object) { if (node.object.name) { if (map[node.object.name]) { node.object.name = map[node.object.name] } if ( node.property && node.property.type === 'Identifier' && refPicture ) { if ( map[node.property.name] && map.hasOwnProperty(node.property.name) ) { node.property.name = map[node.property.name] } else if ( window[refPicture].ispicturecombine && node.object.name === 'GLOBAL' && node.property.name === 'picture' ) { node.property.name = refPicture } } } if (node.object.object && node.object.object.name) { if (map[node.object.object.name]) { node.object.object.name = map[node.object.object.name] } if ( node.property && node.property.type === 'Identifier' && refPicture ) { if (map[node.property.name]) { node.property.name = map[node.property.name] } else if ( window[refPicture].ispicturecombine && node.object.object.name === 'GLOBAL' && node.property.name === 'picture' ) { node.property.name = refPicture } } } } if ( node.type === 'CallExpression' && node.callee && node.callee.object && node.callee.object.name ) { if (map[node.callee.object.name]) { node.callee.object.name = map[node.callee.object.name] } node.arguments.forEach((arg) => { if (arg.type === 'Identifier' && refPicture && map[arg.name]) { //子图方法调用参数判断 arg.name = map[arg.name] } }) if ( (node.callee.object.name === 'GLOBAL' || node.callee.object.name === 'VIEW') && refPicture && node.arguments ) { //子图全局方法调用判断 const arg0 = node.arguments[0] if (arg0) { if (arg0.value && map[arg0.value]) { arg0.value = map[arg0.value] } else if ( ((node.callee.object.name === 'GLOBAL' && node.callee.property.name === 'setPropertyValue') || node.callee.object.name === 'VIEW') && arg0.type === 'Identifier' ) { arg0.name = `"${refPicture}_"+` + arg0.name } } } } if ( node.type === 'Property' && node.value.type === 'Identifier' && refPicture ) { if (map[node.value.name]) { node.value.name = map[node.value.name] } } if (node.type === 'FunctionDeclaration' && refPicture) { for (let i = 0; i < node.params.length; i++) { if ( node.params[i].type === 'Identifier' && map[node.params[i].name] ) { node.params[i].name = map[node.params[i].name] } } } } }) return escodegen.generate(ast) } /** * 对ast进行转换以适配js语法 * @param {Object} node * @param {String} key * @param {String} id */ function transformAst(node, key, id) { return { computed: false, object: { name: id, type: 'Identifier' }, property: { name: node[key].name, type: node[key].type }, type: 'MemberExpression' } } /** * 对ast进行转换以适配js语法 * @param {Object} node * @param {String} key * @param {String} id */ function transformAstArgument(node, key, id, argNo) { return { computed: false, object: { name: id, type: 'Identifier' }, property: { name: node[key][argNo].name, type: node[key][argNo].type }, type: 'MemberExpression' } } /** * 删除注释,不然会对后面的字符串处理造成影响 * @param {String} code */ function removeComment(code) { // 将'://'全部替换为特殊字符,删除注释代码后再将其恢复回来 const tmp1 = '://' const regTmp1 = /:\/\//g const tmp2 = '@:@/@/@' const regTmp2 = /@:@\/@\/@/g code = code.replace(regTmp1, tmp2) const reg = /(\/\/.*)|(\/\*[\s\S]*?\*\/)/g code = code.replace(reg, '') result = code.replace(regTmp2, tmp1) return result } /** * 匹配并替换掉所有的function保留字以适配vue中的render函数的拼接 * @param {String} scriptStr */ function removeFun(scriptStr) { // FIXME 处理回调函数报错的临时办法 scriptStr = scriptStr.replace(/function \(/g, 'function(') return scriptStr.replace(/function /g, ',').substring(1) } function genButtonScript(id, script, attrsKey) { let events = '' /** * 统一南瑞与科东的两套事件触发标准规范 * 南瑞标准中事件是直接写在script中的,比如下方button的click事件 * 科东标准类似于原生dom的事件写法,是在标签中声明事件类型(onMouseLeftOneClickAction)并调用具名函数来触发 * 考虑到科东标准更加接近于前端的事实标准,因此统一为科东标准,在组件库中通过模拟自定义事件来处理,事件的参数列表参照南瑞标准 * * !!!<---注意--->!!! * 后期为了将这些组件迁移到qt环境中需要将每个组件写到一个html文件中, * 而html目前推荐使用中划线事件名称命名,因此这些修改将事件名改成了中划线命名法 * !!!<---注意--->!!! */ if (attrsKey['onClickedAction'] && attrsKey['onClickedAction'] != '') { let clickAction = attrsKey['onClickedAction'] if (clickAction.includes('(')) { clickAction = clickAction.split('(')[0] } events += `'on-mouse-left-one-click-action': _vm.${clickAction},` } else if (script.includes('onClicked')) { script = script.replace( 'onClicked:', // 南瑞规范 `function ${id}_ClickHandler(text)` ) events += `'on-mouse-left-one-click-action': _vm.${id}_ClickHandler,` } if ( attrsKey['onDoubleClickedAction'] && attrsKey['onDoubleClickedAction'] != '' ) { let doubleClickedAction = attrsKey['onDoubleClickedAction'] if (doubleClickedAction.includes('(')) { doubleClickedAction = doubleClickedAction.split('(')[0] } events += `'on-mouse-left-double-click-aciton': _vm.${doubleClickedAction},` } else if (script.includes('onDoubleClicked')) { script = script.replace( 'onDoubleClicked:', // 南瑞规范 `function ${id}_DoubleClickHandler(text)` ) events += `'on-mouse-left-double-click-aciton': _vm.${id}_DoubleClickHandler,` } if ( attrsKey['onRightClickedAction'] && attrsKey['onRightClickedAction'] != '' ) { let rightClickedAction = attrsKey['onRightClickedAction'] if (rightClickedAction.includes('(')) { rightClickedAction = rightClickedAction.split('(')[0] } events += `'on-right-clicked': _vm.${rightClickedAction},` } else if (script.includes('onRightClicked')) { script = script.replace( 'onRightClicked:', // 南瑞规范 `function ${id}_RightClickHandler(text)` ) events += `'on-right-clicked': _vm.${id}_RightClickHandler,` } if (attrsKey['onPressedAction'] && attrsKey['onPressedAction'] != '') { let pressedAction = attrsKey['onPressedAction'] if (pressedAction.includes('(')) { pressedAction = pressedAction.split('(')[0] } events += `'on-pressed': _vm.${pressedAction},` } else if (script.includes('onPressed')) { script = script.replace( 'onPressed:', // 南瑞规范 `function ${id}_PressedHandler(text)` ) events += `'on-pressed': _vm.${id}_PressedHandler,` } if (attrsKey['onReleasedAction'] && attrsKey['onReleasedAction'] != '') { let releasedAction = attrsKey['onReleasedAction'] if (releasedAction.includes('(')) { releasedAction = releasedAction.split('(')[0] } events += `'on-released': _vm.${releasedAction},` } else if (script.includes('onReleased')) { script = script.replace( 'onReleased:', // 南瑞规范 `function ${id}_ReleasedHandler(text)` ) events += `'on-released': _vm.${id}_ReleasedHandler,` } if (script.includes('onHoveredChanged')) { script = script.replace( 'onHoveredChanged:', `function ${id}_HoveredChangedHandler(text)` ) events += `'on-hovered-changed': _vm.${id}_HoveredChangedHandler,` } if (script.includes('onEntered')) { script = script.replace( 'onEntered:', `function ${id}_EnteredHandler(text)` ) events += `'on-entered': _vm.${id}_EnteredHandler,` } if (script.includes('onExited')) { script = script.replace( 'onExited:', `function ${id}_ExitedHandler(text)` ) events += `'on-exited': _vm.${id}_ExitedHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genTextAreaScript(id, script) { let events = '' if (attrsKey['onTextChangeAction'] && attrsKey['onTextChangeAction'] != '') { let textChangeAction = attrsKey['onTextChangeAction'] if (textChangeAction.includes('(')) { textChangeAction = textChangeAction.split('(')[0] } events += `'on-text-change-aciton': _vm.${textChangeAction},` } else if (script.includes('onTextChangeAction')) { script = script.replace( 'onTextChangeAction:', `function ${id}_TextChangeHandler(text)` ) events += `'on-text-change-action': _vm.${id}_TextChangeHandler,` } if ( attrsKey['onLengthChangeAction'] && attrsKey['onLengthChangeAction'] != '' ) { let lengthChangeAction = attrsKey['onLengthChangeAction'] if (lengthChangeAction.includes('(')) { lengthChangeAction = lengthChangeAction.split('(')[0] } events += `'on-length-change-action': _vm.${lengthChangeAction},` } else if (script.includes('onLengthChangeAction')) { script = script.replace( 'onLengthChangeAction:', `function ${id}_LengthChangeHandler(length)` ) events += `'on-length-change-action': _vm.${id}_LengthChangeHandler,` } if ( attrsKey['onSelectedTextChangeAction'] && attrsKey['onSelectedTextChangeAction'] != '' ) { let selectedTextChangeAction = attrsKey['onSelectedTextChangeAction'] if (selectedTextChangeAction.includes('(')) { selectedTextChangeAction = selectedTextChangeAction.split('(')[0] } events += `'on-selected-text-change-action': _vm.${selectedTextChangeAction},` } else if (script.includes('onSelectionChangeAction')) { script = script.replace( 'onSelectionChangeAction:', `function ${id}_SelectionChangeHandler(cursorPosition)` ) events += `'on-selection-change-action': _vm.${id}_SelectionChangeHandler,` } if (script.includes('onSelectedTextChangeAction')) { script = script.replace( 'onSelectedTextChangeAction:', `function ${id}_SelectedTextChangeHandler(text)` ) events += `'on-selected-text-change-action': _vm.${id}_SelectedTextChangeHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genPasswordFieldScript(id, scriptstr) { // 包含genTextAreaScript的所有事件且参数相同 let { script, events } = genTextAreaScript(id, scriptstr) if (script.includes('onEditingFinished')) { script = script.replace( 'onEditingFinished:', `function ${id}_EditingFinishedHandler()` ) events += `'on-editing-finished': _vm.${id}_EditingFinishedHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genTextFieldScript(id, scriptstr) { // 包含genPasswordFieldScript的所有事件且参数相同 let { script, events } = genTextAreaScript(id, scriptstr) if ( attrsKey['onEnterPressedAction'] && attrsKey['onEnterPressedAction'] != '' ) { let enterPressedAction = attrsKey['onEnterPressedAction'] if (enterPressedAction.includes('(')) { enterPressedAction = enterPressedAction.split('(')[0] } events += `'on-enter-pressed-aciton': _vm.${enterPressedAction},` } else if (script.includes('onEnterPressed')) { script = script.replace( 'onEnterPressed:', `function ${id}_EnterPressedHandler(text)` ) events += `'on-enter-pressed': _vm.${id}_EnterPressedHandler,` } if (script.includes('onEditingFinished')) { script = script.replace( 'onEditingFinished:', `function ${id}_EditingFinishedHandler(text)` ) events += `'on-editing-finished': _vm.${id}_EditingFinishedHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genFPictureScript(id, script) { let events = '' if (script.includes('onClicked')) { script = script.replace('onClicked:', `function ${id}_ClickedHandler(name)`) events += `onClicked: _vm.${id}_ClickedHandler,` } if (script.includes('onMouseLeftDoubleClickAciton')) { script = script.replace( 'onMouseLeftDoubleClickAciton:', `function ${id}_MouseLeftDoubleClickAcitonHandler(name)` ) events += `onMouseLeftDoubleClickAciton: _vm.${id}_MouseLeftDoubleClickAcitonHandler,` } if (script.includes('onMouseLeftOneClickAction')) { script = script.replace( 'onMouseLeftOneClickAction:', `function ${id}_MouseLeftOneClickActionHandler(name)` ) events += `onMouseLeftOneClickAction: _vm.${id}_MouseLeftOneClickActionHandler,` } if (script.includes('onMouseRightOneClickAction')) { script = script.replace( 'onMouseRightOneClickAction:', `function ${id}_MouseRightOneClickActionHandler(name)` ) events += `onMouseRightOneClickAction: _vm.${id}_MouseRightOneClickActionHandler,` } if (script.includes('onMouseRightDoubleClickAction')) { script = script.replace( 'onMouseRightDoubleClickAction:', `function ${id}_MouseRightDoubleClickActionHandler(name)` ) events += `onMouseRightDoubleClickAction: _vm.${id}_MouseRightDoubleClickActionHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genToggleGroupScript(id, script, attrsKey) { let events = '' if (attrsKey['onClickedAction'] && attrsKey['onClickedAction'] != '') { let clickAction = attrsKey['onClickedAction'] if (clickAction.includes('(')) { clickAction = clickAction.split('(')[0] } events += `'on-clicked': _vm.${clickAction},` } else if (script.includes('onClicked')) { script = script.replace('onClicked:', `function ${id}_ClickHandler(name)`) events += `'on-clicked': _vm.${id}_ClickHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genRGTodoListScript(id, script) { let events = '' if (script.includes('onDoubleClicked')) { script = script.replace( 'onDoubleClicked:', `function ${id}_DoubleClickHandler(index,message)` ) events += `onDoubleClicked: _vm.${id}_DoubleClickHandler,` } return { script, events } } function genCheckBoxScript(id, script) { let events = '' if ( attrsKey['onSelectedChangeAction'] && attrsKey['onSelectedChangeAction'] != '' ) { let selectedChangeAction = attrsKey['onSelectedChangeAction'] if (selectedChangeAction.includes('(')) { selectedChangeAction = selectedChangeAction.split('(')[0] } events += `'on-selection-change-action': _vm.${selectedChangeAction},` } else if (script.includes('onSelectedChangeAction')) { script = script.replace( 'onSelectedChangeAction:', `function ${id}_SelectedChangeHandler(checked)` ) events += `'on-selected-change-action': _vm.${id}_SelectedChangeHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genToggleButtonScript(id, script) { let events = '' if ( attrsKey['onSelectedChangeAction'] && attrsKey['onSelectedChangeAction'] != '' ) { let selectedChangeAction = attrsKey['onSelectedChangeAction'] if (selectedChangeAction.includes('(')) { selectedChangeAction = selectedChangeAction.split('(')[0] } events += `'on-selection-change-action': _vm.${selectedChangeAction},` } else if (script.includes('onSelectedChangeAction')) { script = script.replace( 'onSelectedChangeAction:', `function ${id}_SelectedChangeHandler(selected)` ) events += `onSelectedChangeAction: _vm.${id}_SelectedChangeHandler,` } if (script.includes('onClicked')) { script = script.replace( 'onClicked:', // 南瑞规范 `function ${id}_ClickHandler(text)` ) events += `onMouseLeftOneClickAction: _vm.${id}_ClickHandler,` } if (script.includes('onDoubleClicked')) { script = script.replace( 'onDoubleClicked:', // 南瑞规范 `function ${id}_DoubleClickHandler()` ) events += `onMouseLeftDoubleClickAciton: _vm.${id}_DoubleClickHandler,` } // TODO 以下三个事件尚未实现 if (script.includes('onPressAndHold')) { script = script.replace( 'onPressAndHold:', // 南瑞规范 `function ${id}_PressAndHoldHandler()` ) events += `onPressAndHold: _vm.${id}_PressAndHoldHandler,` } if (script.includes('onPressed')) { script = script.replace( 'onPressed:', // 南瑞规范 `function ${id}_PressedHandler()` ) events += `onPressed: _vm.${id}_PressedHandler,` } if (script.includes('onReleased')) { script = script.replace( 'onReleased:', // 南瑞规范 `function ${id}_ReleasedHandler()` ) events += `onReleased: _vm.${id}_ReleasedHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genChoiceBoxScript(id, script) { let events = '' if ( attrsKey['onValueChangeAction'] && attrsKey['onValueChangeAction'] != '' ) { let valueChangeAction = attrsKey['onValueChangeAction'] if (valueChangeAction.includes('(')) { valueChangeAction = valueChangeAction.split('(')[0] } events += `'on-value-change-action': _vm.${valueChangeAction},` } else if (script.includes('onValueChangeAction')) { script = script.replace( 'onValueChangeAction:', `function ${id}_valueChangeHandler(text)` ) events += `'on-value-change-action': _vm.${id}_valueChangeHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genComboBoxScript(id, scriptstr) { // 复用genSpinnerScript的部分逻辑 let { script, events } = genSpinnerScript(id, scriptstr) if (script.includes('onClicked')) { script = script.replace('onClicked:', `function ${id}_clickHandler(value)`) events += `'on-clicked': _vm.${id}_clickHandler,` } if ( attrsKey['onValueChangeAction'] && attrsKey['onValueChangeAction'] != '' ) { let valueChangeAction = attrsKey['onValueChangeAction'] if (valueChangeAction.includes('(')) { valueChangeAction = valueChangeAction.split('(')[0] } events += `'on-value-change-action': _vm.${valueChangeAction},` } else if (script.includes('onValueChangeAction')) { script = script.replace( 'onValueChangeAction:', `function ${id}_valueChangeHandler(text)` ) events += `'on-value-change-action': _vm.${id}_valueChangeHandler,` } // TODO 以下2个事件尚未实现 if (script.includes('onHighlighted')) { script = script.replace( 'onHighlighted:', `function ${id}_HighlightHandler(index)` ) events += `onHighlighted: _vm.${id}_HighlightHandler,` } if (script.includes('onActivated')) { script = script.replace( 'onActivated:', `function ${id}_ActivatedHandler(index)` ) events += `onActivated: _vm.${id}_ActivatedHandler,` } if (script.includes('onPressedChanged')) { script = script.replace( 'onPressedChanged:', `function ${id}_PressedHandler(value)` ) events += `onPressedChanged: _vm.${id}_PressedHandler,` } if (script.includes('onCurrentTextChanged')) { script = script.replace( 'onCurrentTextChanged:', `function ${id}_CurrentTextHandler(value)` ) events += `onCurrentTextChanged: _vm.${id}_CurrentTextHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genRadioButtonScript(id, script) { return genCheckBoxScript(id, script) } function genCommandButtonScript(id, script) { let events = '' if (script.includes('onClicked')) { script = script.replace( 'onClicked:', // 南瑞规范 `function ${id}_ClickHandler()` ) /** * 2022/04/13 修复点击失败 */ events += `'on-clicked': _vm.${id}_ClickHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genSliderScript(id, script) { let events = '' if ( attrsKey['onSelectedChangeAction'] && attrsKey['onSelectedChangeAction'] != '' ) { let selectedChangeAction = attrsKey['onSelectedChangeAction'] if (selectedChangeAction.includes('(')) { selectedChangeAction = selectedChangeAction.split('(')[0] } events += `'on-selection-change-action': _vm.${selectedChangeAction},` } else if (script.includes('onSelectedChangeAction')) { script = script.replace( 'onSelectedChangeAction:', `function ${id}_SelectedChangeHandler(checked)` ) events += `'on-selected-change-action': _vm.${id}_SelectedChangeHandler,` } if ( attrsKey['onValueChangeAction'] && attrsKey['onValueChangeAction'] != '' ) { let valueChangeAction = attrsKey['onValueChangeAction'] if (valueChangeAction.includes('(')) { valueChangeAction = valueChangeAction.split('(')[0] } events += `'on-value-change-action': _vm.${onValueChangeAction},` } else if (script.includes('onValueChangeAction')) { script = script.replace( 'onValueChangeAction:', `function ${id}_ValueChangeHandler(checked)` ) events += `'on-value-change-action': _vm.${id}_ValueChangeHandler,` } // const propsName = ['min', 'max', 'blockIncrement', 'value', 'minorTickCount', 'majorTickUnit', 'lineColor', 'sliderColor', 'showLabel', 'showTickMarks', 'showTickLabels','orientation','w','h','x','y'] return combinedEvents(id, Object.keys(attrsKey), script, events) } function genDLabelScript(id, script) { let events = '' if (script.includes('onClicked')) { script = script.replace( 'onClicked:', // 南瑞规范 `function ${id}_ClickHandler()` ) // events += `onMouseLeftOneClickAction: _vm.${id}_ClickHandler,` events += `'on-clicked': _vm.${id}_ClickHandler,` } if (script.includes('onDoubleClicked')) { script = script.replace( 'onDoubleClicked:', // 南瑞规范 `function ${id}_DoubleClickHandler()` ) events += `'on-double-clicked': _vm.${id}_DoubleClickHandler,` // events += `onMouseLeftDoubleClickAciton: _vm.${id}_DoubleClickHandler,` } // 关联的dataSourse数据返回时触发 if (script.includes('onDataReturn')) { script = script.replace( 'onDataReturn:', // 南瑞规范 `function ${id}_DataReturnHandler()` ) events += `'on-data-return': _vm.${id}_DataReturnHandler,` // events += `onDataReturn: _vm.${id}_DataReturnHandler,` } // const propsName = ['visible', 'clip', 'text', 'textFont', 'color', 'decimalNum', 'textAlign', 'playAnimation','w','h','x','y','enable','rollSpeed'] return combinedEvents(id, Object.keys(attrsKey), script, events) // return { script, events } } function genProgressBarScript(id, script) { let events = '' if ( attrsKey['onProgressChangeAction'] && attrsKey['onProgressChangeAction'] != '' ) { let progressChangeAction = attrsKey['onProgressChangeAction'] if (progressChangeAction.includes('(')) { progressChangeAction = progressChangeAction.split('(')[0] } events += `'on-progress-change-action': _vm.${progressChangeAction},` } else if (script.includes('onProgressChangeAction')) { script = script.replace( 'onProgressChangeAction:', `function ${id}_ProgressChangeHandler(progress)` ) events += `'on-progress-change-action': _vm.${id}_ProgressChangeHandler,` } // return { script, events } // const propsName = ['visible', 'clip', 'maximumValue', 'minimumValue', 'progress', 'indeterminate', 'orientation', 'showLabel', 'backColor', 'progressColor', 'labelColor','x','y','w','h','enable','opacity','aliasType'] return combinedEvents(id, Object.keys(attrsKey), script, events) } function genHyperlinkScript(id, script) { let events = '' if (script.includes('onClicked')) { script = script.replace( 'onClicked:', `function ${id}_ClickHandler(checked)` ) events += `'on-mouse-left-one-click-action': _vm.${id}_ClickHandler,` } // TODO 未实现 if (script.includes('onAction')) { script = script.replace('onAction:', `function ${id}_ActionHandler()`) events += `'on-action': _vm.${id}_ActionHandler,` } return { script, events } } function genTimerScript(id, script) { let events = '' if (script.includes('onTriggered')) { script = script.replace('onTriggered:', `function ${id}_TriggeredHandler()`) events += `onTriggered: _vm.${id}_TriggeredHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genDatePickerScript(id, script) { let events = '' if ( attrsKey['onValueChangeAction'] && attrsKey['onValueChangeAction'] != '' ) { let valueChangeAction = attrsKey['onValueChangeAction'] if (valueChangeAction.includes('(')) { valueChangeAction = valueChangeAction.split('(')[0] } events += `'on-value-change-action': _vm.${valueChangeAction},` } else if (script.includes('onValueChangeAction')) { script = script.replace( 'onValueChangeAction:', `function ${id}_valueChangeHandler(date)` ) events += `'on-value-change-action': _vm.${id}_valueChangeHandler,` } // TODO 未实现 if (script.includes('onNewClicked')) { script = script.replace( 'onNewClicked:', `function ${id}_NewClickHandler(date)` ) events += `onNewClicked: _vm.${id}_NewClickHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genNStateImageScript(id, script) { let events = '' if (script.includes('onClicked')) { script = script.replace( 'onClicked:', `function ${id}_ClickedHandler(state)` ) events += `onClicked: _vm.${id}_ClickedHandler,` } if (script.includes('onRightButtonClicked')) { script = script.replace( 'onRightButtonClicked:', `function ${id}_RightButtonClickedHandler(state)` ) events += `onRightButtonClicked: _vm.${id}_RightButtonClickedHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genMediaViewScript(id, script) { let events = '' if (script.includes('onClicked')) { script = script.replace('onClicked:', `function ${id}_ClickHandler()`) // events += `onClicked: _vm.${id}_ClickHandler,` events += `'on-clicked': _vm.${id}_ClickHandler,` } if (script.includes('onRightButtonClicked')) { script = script.replace( 'onRightButtonClicked:', `function ${id}_RightClickHandler()` ) // events += `onRightButtonClicked: _vm.${id}_RightClickHandler,` events += `'on-right-button-clicked': _vm.${id}_RightClickHandler,` } if (script.includes('onErrorAction')) { script = script.replace( 'onErrorAction:', `function ${id}_ErrorHandler(event)` ) // events += `onErrorAction: _vm.${id}_ErrorHandler,` events += `'on-error-action': _vm.${id}_ErrorHandler,` } // return { script, events } // const propsName = ['source', 'cycleCount', 'autoPlay', 'preserveRatio', 'borderColor','w','h'] return combinedEvents(id, Object.keys(attrsKey), script, events) } function genDataSourceScript(id, script, attrsKey) { let events = '' if (attrsKey['onValueChanged'] && attrsKey['onValueChanged'] != '') { let action = attrsKey['onValueChanged'] if (action.includes('(')) { action = action.split('(')[0] } events += `'on-value-changed': _vm.${action},` } else if (script.includes('onValueChanged')) { script = script.replace( 'onValueChanged:', `function ${id}_ValueChangedHandler(value)` ) events += `onValueChanged: _vm.${id}_ValueChangedHandler,` } // const propsName = ['dataSource', 'extraInfo', 'interval', 'name', 'timer'] return combinedEvents(id, Object.keys(attrsKey), script, events) // return { script, events } } function genWebViewScript(id, script) { let events = '' // 网页回调时触发 if (script.includes('onJsCallBack')) { script = script.replace( 'onJsCallBack:', `function ${id}_JsCallBackHandler(value)` ) events += `onJsCallBack: _vm.${id}_JsCallBackHandler,` } // const propsName = ['url','w','h','x','y'] return combinedEvents(id, Object.keys(attrsKey), script, events) // return { script, events } } function genSwitchButtonScript(id, script) { let events = '' if (script.includes('onToggleLeft')) { script = script.replace( 'onToggleLeft:', `function ${id}_onToggleLeftHandler()` ) events += `onToggleLeft: _vm.${id}_onToggleLeftHandler,` } if (script.includes('onToggleRight')) { script = script.replace( 'onToggleRight:', `function ${id}_onToggleRightHandler()` ) events += `onToggleRight: _vm.${id}_onToggleRightHandler,` } // const propsName = ['radius', 'backCheckedColor', 'backColor','w','h','x','y'] return combinedEvents(id, Object.keys(attrsKey), script, events) // return { script, events } } function genSpinnerScript(id, script) { let events = '' if ( attrsKey['onValueChangeAction'] && attrsKey['onValueChangeAction'] != '' ) { let valueChangeAction = attrsKey['onValueChangeAction'] if (valueChangeAction.includes('(')) { valueChangeAction = valueChangeAction.split('(')[0] } events += `'on-value-change-action': _vm.${valueChangeAction},` } else if (script.includes('onValueChangeAction')) { script = script.replace( 'onValueChangeAction:', `function ${id}_valueChangeHandler(value)` ) // events += `onValueChangeAction: _vm.${id}_valueChangeHandler,` events += `'on-value-change-action': _vm.${id}_valueChangeHandler,` } const propsName = [ 'min', 'max', 'editable', 'value', 'precision', 'amountToStepBy', 'w', 'h', 'x', 'y' ] return combinedEvents(id, Object.keys(attrsKey), script, events) // return { script, events } } function genComposeCheckBoxScript(id,script,attrsKey) { let events = '' if (script.includes('onClosed')) { script = script.replace( 'onClosed:', `function ${id}_ClosedHandler(text)` ) events += `'on-closed': _vm.${id}_ClosedHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genComposeComboBoxScript(id, script, attrsKey) { let events = '' if (script.includes('onValueChanged')) { script = script.replace( 'onValueChanged:', `function ${id}_ValueChangedHandler(value)` ) events += `'on-value-changed': _vm.${id}_ValueChangedHandler,` } if (attrsKey['onIndexChanged'] && attrsKey['onIndexChanged'] != '') { let changeAction = attrsKey['onIndexChanged'] if (changeAction.includes('(')) { changeAction = changeAction.split('(')[0] } events += `'on-index-changed': _vm.${changeAction},` } else if (script.includes('onIndexChanged')) { script = script.replace( 'onIndexChanged:', `function ${id}_IndexChangedHandler()` ) events += `'on-index-changed': _vm.${id}_IndexChangedHandler,` } // const propsName = ['id', 'visible', 'clip', 'currentValue', 'radiusW', 'backBeginColor', 'backEndColor', 'textFont', 'w', 'h', 'x', 'y', 'dataSource', 'opacity'] return combinedEvents(id, Object.keys(attrsKey), script, events) // return { script, events } } function genTableViewScript(id, script) { return genTableItemScript(id, script) } function genETableViewScript(id, script) { return genTableItemScript(id, script) } function genTableItemScript(id, script) { let events = '' if (script.includes('onValueFinished')) { script = script.replace( 'onValueFinished:', `function ${id}_ValueFinishedHandler()` ) events += `'on-value-finished': _vm.${id}_ValueFinishedHandler,` } if (attrsKey['onRowClickedAction'] && attrsKey['onRowClickedAction'] != '') { let rowClickedAction = attrsKey['onRowClickedAction'] if (rowClickedAction.includes('(')) { rowClickedAction = rowClickedAction.split('(')[0] } events += `'on-row-clicked': _vm.${rowClickedAction},` } else if (script.includes('onRowClicked')) { script = script.replace( 'onRowClicked:', `function ${id}_RowClickedHandler(value,row,column,jsonobject)` ) events += `'on-row-clicked': _vm.${id}_RowClickedHandler,` } if ( attrsKey['onRowDoubleClickedAction'] && attrsKey['onRowDoubleClickedAction'] != '' ) { let rowDoubleClickedAction = attrsKey['onRowDoubleClickedAction'] if (rowDoubleClickedAction.includes('(')) { rowDoubleClickedAction = rowDoubleClickedAction.split('(')[0] } events += `'on-row-double-clicked': _vm.${rowDoubleClickedAction},` } else if (script.includes('onRowDoubleClicked')) { script = script.replace( 'onRowDoubleClicked:', `function ${id}_RowDoubleClickedHandler(value,row,column,jsonobject)` ) events += `'on-row-double-clicked': _vm.${id}_RowDoubleClickedHandler,` } if (script.includes('onRightMouseClicked')) { script = script.replace( 'onRightMouseClicked:', `function ${id}_RightMouseClickedHandler(value,row,column,jsonobject)` ) events += `'on-right-mouse-clicked': _vm.${id}_RightMouseClickedHandler,` } if (script.includes('onLeftMouseClicked')) { script = script.replace( 'onLeftMouseClicked:', `function ${id}_LeftMouseClickedHandler(value,row,column,jsonobject)` ) events += `'on-left-mouse-clicked': _vm.${id}_LeftMouseClickedHandler,` } if (script.includes('onLeftMouseDoubleClicked')) { script = script.replace( 'onLeftMouseDoubleClicked:', `function ${id}_LeftMouseDoubleClickedHandler(value,row,column,jsonobject)` ) events += `'on-left-mouse-double-clicked': _vm.${id}_LeftMouseDoubleClickedHandler,` } if ( attrsKey['onRowRightClickedAction'] && attrsKey['onRowRightClickedAction'] != '' ) { let rowRightClickedAction = attrsKey['onRowRightClickedAction'] if (rowRightClickedAction.includes('(')) { rowRightClickedAction = rowRightClickedAction.split('(')[0] } events += `'on-row-right-clicked': _vm.${rowRightClickedAction},` } else if (script.includes('onRowRightClicked')) { script = script.replace( 'onRowRightClicked:', `function ${id}_RowRightClickedHandler(value,row,column,jsonobject)` ) events += `'on-row-right-clicked': _vm.${id}_RowRightClickedHandler,` } if ( attrsKey['onItemClickedAction'] && attrsKey['onItemClickedAction'] != '' ) { let itemClickedAction = attrsKey['onItemClickedAction'] if (itemClickedAction.includes('(')) { itemClickedAction = itemClickedAction.split('(')[0] } events += `'on-item-clicked': _vm.${itemClickedAction},` } else if (script.includes('onItemClicked')) { script = script.replace( 'onItemClicked:', `function ${id}_ItemClickedHandler(value,row,column,jsonobject)` ) events += `'on-item-clicked': _vm.${id}_ItemClickedHandler,` } if ( attrsKey['onItemDoubleClickedAction'] && attrsKey['onItemDoubleClickedAction'] != '' ) { let itemDoubleClickedAction = attrsKey['onItemDoubleClickedAction'] if (itemDoubleClickedAction.includes('(')) { itemDoubleClickedAction = itemDoubleClickedAction.split('(')[0] } events += `'on-item-double-clicked': _vm.${itemDoubleClickedAction},` } else if (script.includes('onItemDoubleClicked')) { script = script.replace( 'onItemDoubleClicked:', `function ${id}_ItemDoubleClickedHandler(value,row,column,jsonobject)` ) events += `'on-item-double-clicked': _vm.${id}_ItemDoubleClickedHandler,` } if ( attrsKey['onItemRightClickedAction'] && attrsKey['onItemRightClickedAction'] != '' ) { let itemRightClickedAction = attrsKey['onItemRightClickedAction'] if (itemRightClickedAction.includes('(')) { itemRightClickedAction = itemRightClickedAction.split('(')[0] } events += `'on-item-right-clicked': _vm.${itemRightClickedAction},` } else if (script.includes('onItemRightClicked')) { script = script.replace( 'onItemRightClicked:', `function ${id}_ItemRightClickedHandler(value,row,column,jsonobject)` ) events += `'on-item-right-clicked': _vm.${id}_ItemRightClickedHandler,` } if ( attrsKey['onCheckedChangedAction'] && attrsKey['onCheckedChangedAction'] != '' ) { let checkedChangedAction = attrsKey['onCheckedChangedAction'] if (checkedChangedAction.includes('(')) { checkedChangedAction = checkedChangedAction.split('(')[0] } events += `'on-checked-changed': _vm.${checkedChangedAction},` } else if (script.includes('onCheckedChanged')) { script = script.replace( 'onCheckedChanged:', `function ${id}_CheckedChangedHandler(value,row,column,checked,jsonobject)` ) events += `'on-checked-changed': _vm.${id}_CheckedChangedHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genVerticalTableItemScript(id, script) { let events = '' if (script.includes('onSelected')) { script = script.replace( 'onSelected:', `function ${id}_SelectedHandler(select)` ) events += `onSelected: _vm.${id}_SelectedHandler,` } if (script.includes('onValueChanged')) { script = script.replace( 'onValueChanged:', `function ${id}_ValueChangedHandler(value,column,row,,columnValue,rowValue)` ) events += `onValueChanged: _vm.${id}_ValueChangedHandler,` } if (script.includes('onRowClicked')) { script = script.replace( 'onRowClicked:', `function ${id}_RowClickedHandler(row, value)` ) events += `onRowClicked: _vm.${id}_RowClickedHandler,` } return combinedEvents(id, Object.keys(attrsKey), script, events) } function genListViewScript(id, script) { let events = '' if ( attrsKey['onSelectedChangeAction'] && attrsKey['onSelectedChangeAction'] != '' ) { let selectedChangeAction = attrsKey['onSelectedChangeAction'] if (selectedChangeAction.includes('(')) { selectedChangeAction = selectedChangeAction.split('(')[0] } events += `'on-selection-change-action': _vm.${selectedChangeAction},` } else if (script.includes('onSelectedChangeAction')) { script = script.replace( 'onSelectedChangeAction:', `function ${id}_SelectedChangeActionHandler(index,value)` ) events += `onSelectedChangeAction: _vm.${id}_SelectedChangeActionHandler,` } if (attrsKey['onEditStartAction'] && attrsKey['onEditStartAction'] != '') { let editStartAction = attrsKey['onEditStartAction'] if (editStartAction.includes('(')) { editStartAction = editStartAction.split('(')[0] } events += `'on-edit-start-action': _vm.${editStartAction},` } else if (script.includes('onEditStartAction')) { script = script.replace( 'onEditStartAction:', `function ${id}_EditStartActionHandler(index,value)` ) events += `onEditStartAction: _vm.${id}_EditStartAction