From af7b4fe31f14c12165a88e18d98a0750677a71aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Wed, 12 Jan 2022 11:02:07 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 15 + .eslintrc copy.json | 45 + .eslintrc.json | 24 + .prettierrc.js | 14 + .vscode/extensions.json | 7 + .vscode/launch.json | 34 + .vscode/settings.json | 11 + .vscode/tasks.json | 20 + .vscodeignore | 10 + CHANGELOG.md | 9 + README.md | 70 + package.json | 61 + pnpm-lock.yaml | 2173 ++++++++++++++++++++++++++++++ src/extension.ts | 8 + src/model-completion-item.ts | 23 + src/model-completion-provider.ts | 67 + src/test.js | 4 + tsconfig.json | 21 + vsc-extension-quickstart.md | 42 + 19 files changed, 2658 insertions(+) create mode 100644 .editorconfig create mode 100644 .eslintrc copy.json create mode 100644 .eslintrc.json create mode 100644 .prettierrc.js create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 .vscodeignore create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/extension.ts create mode 100644 src/model-completion-item.ts create mode 100644 src/model-completion-provider.ts create mode 100644 src/test.js create mode 100644 tsconfig.json create mode 100644 vsc-extension-quickstart.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f1cc3ad --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.eslintrc copy.json b/.eslintrc copy.json new file mode 100644 index 0000000..203a65b --- /dev/null +++ b/.eslintrc copy.json @@ -0,0 +1,45 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "extends": [ + "prettier", + "plugin:@typescript-eslint/recommended" + ], + "env": { + "browser": false, + "node": true + }, + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-unused-vars": [ + 0, + { + "varsIgnorePattern": "_" + } + ], + "prefer-rest-params": "off", + "no-var": "off" + }, + "ignorePatterns": [ + "out", + "dist", + "**/*.d.ts" + ] +} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..f9b22b7 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,24 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": [ + "out", + "dist", + "**/*.d.ts" + ] +} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..9a09ed7 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,14 @@ +module.exports = { + printWidth: 180, + semi: true, + singleQuote: true, + trailingComma: 'all', + bracketSpacing: true, + jsxBracketSameLine: false, + jsxSingleQuote: true, + quoteProps: 'as-needed', + arrowParens: 'avoid', + tabWidth: 2, + useTabs: false, + endOfLine: 'lf', +}; diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..3ac9aeb --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "dbaeumer.vscode-eslint" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..670d6e6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,34 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..30bf8c2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..3b17e53 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/.vscodeignore b/.vscodeignore new file mode 100644 index 0000000..3899967 --- /dev/null +++ b/.vscodeignore @@ -0,0 +1,10 @@ +.vscode/** +.vscode-test/** +src/** +.gitignore +.yarnrc +vsc-extension-quickstart.md +**/tsconfig.json +**/.eslintrc.json +**/*.map +**/*.ts diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..b77e206 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +All notable changes to the "ibizmodelcompletion" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] + +- Initial release \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..de1a32b --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# ibizmodelcompletion README + +This is the README for your extension "ibizmodelcompletion". After writing up a brief description, we recommend including the following sections. + +## Features + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: enable/disable this extension +* `myExtension.thing`: set to `blah` to do something + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +----------------------------------------------------------------------------------------------------------- +## Following extension guidelines + +Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension. + +* [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines) + +## Working with Markdown + +**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) +* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) +* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets + +### For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** diff --git a/package.json b/package.json new file mode 100644 index 0000000..1f96cf1 --- /dev/null +++ b/package.json @@ -0,0 +1,61 @@ +{ + "name": "ibiz-model-completion", + "displayName": "IBizModelCompletion", + "description": "iBizSys 模板模型自动补全", + "publisher": "ibizlab", + "version": "0.0.1", + "engines": { + "vscode": "^1.63.0" + }, + "categories": [ + "Programming Languages" + ], + "activationEvents": [ + "onLanguage:handlebars" + ], + "main": "./out/extension.js", + "contributes": { + "languages": [ + { + "id": "handlebars", + "aliases": [ + "Handlebars", + "handlebars" + ], + "extensions": [ + ".handlebars", + ".hbr", + ".hbs", + ".tpl" + ], + "configuration": "./handlebars.configuration.json" + } + ] + }, + "scripts": { + "package": "vsce package", + "vscode:prepublish": "npm run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./", + "pretest": "npm run compile && npm run lint", + "lint": "eslint src --ext ts", + "test": "node ./out/test/runTest.js" + }, + "devDependencies": { + "@types/glob": "^7.2.0", + "@types/mocha": "^9.0.0", + "@types/node": "17.x", + "@types/vscode": "^1.63.1", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", + "@vscode/test-electron": "^2.0.2", + "eslint": "^8.6.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0", + "glob": "^7.2.0", + "mocha": "^9.1.3", + "prettier": "^2.5.1", + "typescript": "^4.5.4", + "vsce": "^2.6.3" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..9c856b4 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2173 @@ +lockfileVersion: 5.3 + +specifiers: + '@types/glob': ^7.2.0 + '@types/mocha': ^9.0.0 + '@types/node': 17.x + '@types/vscode': ^1.63.1 + '@typescript-eslint/eslint-plugin': ^5.9.0 + '@typescript-eslint/parser': ^5.9.0 + '@vscode/test-electron': ^2.0.2 + eslint: ^8.6.0 + eslint-config-prettier: ^8.3.0 + eslint-plugin-prettier: ^4.0.0 + glob: ^7.2.0 + mocha: ^9.1.3 + prettier: ^2.5.1 + typescript: ^4.5.4 + vsce: ^2.6.3 + +devDependencies: + '@types/glob': 7.2.0 + '@types/mocha': 9.0.0 + '@types/node': 17.0.8 + '@types/vscode': 1.63.1 + '@typescript-eslint/eslint-plugin': 5.9.0_bd2fd93dbcc607ad2f21b784bccfe0c8 + '@typescript-eslint/parser': 5.9.0_eslint@8.6.0+typescript@4.5.4 + '@vscode/test-electron': 2.0.2 + eslint: 8.6.0 + eslint-config-prettier: 8.3.0_eslint@8.6.0 + eslint-plugin-prettier: 4.0.0_1c588f61426b1faf18812943f1678311 + glob: 7.2.0 + mocha: 9.1.3 + prettier: 2.5.1 + typescript: 4.5.4 + vsce: 2.6.3 + +packages: + + /@eslint/eslintrc/1.0.5: + resolution: {integrity: sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.3 + espree: 9.3.0 + globals: 13.12.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.0.4 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/config-array/0.9.2: + resolution: {integrity: sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.3 + minimatch: 3.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: true + + /@types/glob/7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 3.0.5 + '@types/node': 17.0.8 + dev: true + + /@types/json-schema/7.0.9: + resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} + dev: true + + /@types/minimatch/3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + dev: true + + /@types/mocha/9.0.0: + resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} + dev: true + + /@types/node/17.0.8: + resolution: {integrity: sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==} + dev: true + + /@types/vscode/1.63.1: + resolution: {integrity: sha512-Z+ZqjRcnGfHP86dvx/BtSwWyZPKQ/LBdmAVImY82TphyjOw2KgTKcp7Nx92oNwCTsHzlshwexAG/WiY2JuUm3g==} + dev: true + + /@typescript-eslint/eslint-plugin/5.9.0_bd2fd93dbcc607ad2f21b784bccfe0c8: + resolution: {integrity: sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/experimental-utils': 5.9.0_eslint@8.6.0+typescript@4.5.4 + '@typescript-eslint/parser': 5.9.0_eslint@8.6.0+typescript@4.5.4 + '@typescript-eslint/scope-manager': 5.9.0 + '@typescript-eslint/type-utils': 5.9.0_eslint@8.6.0+typescript@4.5.4 + debug: 4.3.3 + eslint: 8.6.0 + functional-red-black-tree: 1.0.1 + ignore: 5.2.0 + regexpp: 3.2.0 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.5.4 + typescript: 4.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils/5.9.0_eslint@8.6.0+typescript@4.5.4: + resolution: {integrity: sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.9 + '@typescript-eslint/scope-manager': 5.9.0 + '@typescript-eslint/types': 5.9.0 + '@typescript-eslint/typescript-estree': 5.9.0_typescript@4.5.4 + eslint: 8.6.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser/5.9.0_eslint@8.6.0+typescript@4.5.4: + resolution: {integrity: sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.9.0 + '@typescript-eslint/types': 5.9.0 + '@typescript-eslint/typescript-estree': 5.9.0_typescript@4.5.4 + debug: 4.3.3 + eslint: 8.6.0 + typescript: 4.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.9.0: + resolution: {integrity: sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.9.0 + '@typescript-eslint/visitor-keys': 5.9.0 + dev: true + + /@typescript-eslint/type-utils/5.9.0_eslint@8.6.0+typescript@4.5.4: + resolution: {integrity: sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/experimental-utils': 5.9.0_eslint@8.6.0+typescript@4.5.4 + debug: 4.3.3 + eslint: 8.6.0 + tsutils: 3.21.0_typescript@4.5.4 + typescript: 4.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.9.0: + resolution: {integrity: sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.9.0_typescript@4.5.4: + resolution: {integrity: sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.9.0 + '@typescript-eslint/visitor-keys': 5.9.0 + debug: 4.3.3 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.5.4 + typescript: 4.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/visitor-keys/5.9.0: + resolution: {integrity: sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.9.0 + eslint-visitor-keys: 3.1.0 + dev: true + + /@ungap/promise-all-settled/1.1.2: + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + dev: true + + /@vscode/test-electron/2.0.2: + resolution: {integrity: sha512-myng+dso4WzOL0WbFS//JtYrUfqVDGI7U9lNRrC6Wm1oND+Nor3txn9klTaNj/39qrQ9jKv3ijv9ps1+cTOsig==} + engines: {node: '>=8.9.3'} + dependencies: + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + rimraf: 3.0.2 + unzipper: 0.10.11 + transitivePeerDependencies: + - supports-color + dev: true + + /acorn-jsx/5.3.2_acorn@8.7.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.7.0 + dev: true + + /acorn/8.7.0: + resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-colors/4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: true + + /ansi-regex/2.1.1: + resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /aproba/1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + dev: true + + /are-we-there-yet/1.1.7: + resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} + dependencies: + delegates: 1.0.0 + readable-stream: 2.3.7 + dev: true + + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /azure-devops-node-api/11.1.0: + resolution: {integrity: sha512-6/2YZuf+lJzJLrjXNYEA5RXAkMCb8j/4VcHD0qJQRsgG/KsRMYo0HgDh0by1FGHyZkQWY5LmQyJqCwRVUB3Y7Q==} + dependencies: + tunnel: 0.0.6 + typed-rest-client: 1.8.6 + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /big-integer/1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /binary/0.3.0: + resolution: {integrity: sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=} + dependencies: + buffers: 0.1.1 + chainsaw: 0.1.0 + dev: true + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + + /bluebird/3.4.7: + resolution: {integrity: sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=} + dev: true + + /boolbase/1.0.0: + resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browser-stdout/1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: true + + /buffer-crc32/0.2.13: + resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} + dev: true + + /buffer-indexof-polyfill/1.0.2: + resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==} + engines: {node: '>=0.10'} + dev: true + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /buffers/0.1.1: + resolution: {integrity: sha1-skV5w77U1tOWru5tmorn9Ugqt7s=} + engines: {node: '>=0.2.0'} + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /chainsaw/0.1.0: + resolution: {integrity: sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=} + dependencies: + traverse: 0.3.9 + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /cheerio-select/1.5.0: + resolution: {integrity: sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==} + dependencies: + css-select: 4.2.1 + css-what: 5.1.0 + domelementtype: 2.2.0 + domhandler: 4.3.0 + domutils: 2.8.0 + dev: true + + /cheerio/1.0.0-rc.10: + resolution: {integrity: sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==} + engines: {node: '>= 6'} + dependencies: + cheerio-select: 1.5.0 + dom-serializer: 1.3.2 + domhandler: 4.3.0 + htmlparser2: 6.1.0 + parse5: 6.0.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + tslib: 2.3.1 + dev: true + + /chokidar/3.5.2: + resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /code-point-at/1.1.0: + resolution: {integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=} + engines: {node: '>=0.10.0'} + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /commander/6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /console-control-strings/1.1.0: + resolution: {integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=} + dev: true + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /css-select/4.2.1: + resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==} + dependencies: + boolbase: 1.0.0 + css-what: 5.1.0 + domhandler: 4.3.0 + domutils: 2.8.0 + nth-check: 2.0.1 + dev: true + + /css-what/5.1.0: + resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} + engines: {node: '>= 6'} + dev: true + + /debug/4.3.2_supports-color@8.1.1: + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + dev: true + + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /decamelize/4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: true + + /decompress-response/4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + dependencies: + mimic-response: 2.1.0 + dev: true + + /deep-extend/0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /delegates/1.0.0: + resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=} + dev: true + + /detect-libc/1.0.3: + resolution: {integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /diff/5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-serializer/1.3.2: + resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} + dependencies: + domelementtype: 2.2.0 + domhandler: 4.3.0 + entities: 2.2.0 + dev: true + + /domelementtype/2.2.0: + resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} + dev: true + + /domhandler/4.3.0: + resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.2.0 + dev: true + + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.3.2 + domelementtype: 2.2.0 + domhandler: 4.3.0 + dev: true + + /duplexer2/0.1.4: + resolution: {integrity: sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=} + dependencies: + readable-stream: 2.3.7 + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /enquirer/2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.1 + dev: true + + /entities/2.0.3: + resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} + dev: true + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-prettier/8.3.0_eslint@8.6.0: + resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.6.0 + dev: true + + /eslint-plugin-prettier/4.0.0_1c588f61426b1faf18812943f1678311: + resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} + engines: {node: '>=6.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.6.0 + eslint-config-prettier: 8.3.0_eslint@8.6.0 + prettier: 2.5.1 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/7.1.0: + resolution: {integrity: sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils/3.0.0_eslint@8.6.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.6.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys/3.1.0: + resolution: {integrity: sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.6.0: + resolution: {integrity: sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.0.5 + '@humanwhocodes/config-array': 0.9.2 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.3 + doctrine: 3.0.0 + enquirer: 2.3.6 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.0 + eslint-utils: 3.0.0_eslint@8.6.0 + eslint-visitor-keys: 3.1.0 + espree: 9.3.0 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.12.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.0.4 + natural-compare: 1.4.0 + optionator: 0.9.1 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.3.5 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.3.0: + resolution: {integrity: sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.7.0 + acorn-jsx: 5.3.2_acorn@8.7.0 + eslint-visitor-keys: 3.1.0 + dev: true + + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /expand-template/2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff/1.2.0: + resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + dev: true + + /fast-glob/3.2.10: + resolution: {integrity: sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.4 + dev: true + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fd-slicer/1.1.0: + resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=} + dependencies: + pend: 1.2.0 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.4 + rimraf: 3.0.2 + dev: true + + /flat/5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /flatted/3.2.4: + resolution: {integrity: sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==} + dev: true + + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /fstream/1.0.12: + resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==} + engines: {node: '>=0.6'} + dependencies: + graceful-fs: 4.2.9 + inherits: 2.0.4 + mkdirp: 0.5.5 + rimraf: 2.7.1 + dev: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /functional-red-black-tree/1.0.1: + resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} + dev: true + + /gauge/2.7.4: + resolution: {integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=} + dependencies: + aproba: 1.2.0 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.6 + string-width: 1.0.2 + strip-ansi: 3.0.1 + wide-align: 1.1.5 + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-intrinsic/1.1.1: + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + dev: true + + /github-from-package/0.0.0: + resolution: {integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=} + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals/13.12.0: + resolution: {integrity: sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.10 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graceful-fs/4.2.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} + dev: true + + /growl/1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-symbols/1.0.2: + resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + engines: {node: '>= 0.4'} + dev: true + + /has-unicode/2.0.1: + resolution: {integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=} + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /hosted-git-info/4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: true + + /htmlparser2/6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.2.0 + domhandler: 4.3.0 + domutils: 2.8.0 + entities: 2.2.0 + dev: true + + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent/5.0.0: + resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore/4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + dev: true + + /ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + dev: true + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + engines: {node: '>=0.8.19'} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point/1.0.0: + resolution: {integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-obj/2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /isarray/1.0.0: + resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + dev: true + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} + dev: true + + /keytar/7.7.0: + resolution: {integrity: sha512-YEY9HWqThQc5q5xbXbRwsZTh2PJ36OSYRjSv3NN2xf5s5dpLTjEZnC2YikR29OaVybf9nQ0dJ/80i40RS97t/A==} + requiresBuild: true + dependencies: + node-addon-api: 3.2.1 + prebuild-install: 6.1.4 + dev: true + + /leven/3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /linkify-it/2.2.0: + resolution: {integrity: sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==} + dependencies: + uc.micro: 1.0.6 + dev: true + + /listenercount/1.0.1: + resolution: {integrity: sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=} + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /log-symbols/4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /markdown-it/10.0.0: + resolution: {integrity: sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==} + hasBin: true + dependencies: + argparse: 1.0.10 + entities: 2.0.3 + linkify-it: 2.2.0 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: true + + /mdurl/1.0.1: + resolution: {integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch/4.0.4: + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /mimic-response/2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + dev: true + + /minimatch/3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist/1.2.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + dev: true + + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + + /mkdirp/0.5.5: + resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /mocha/9.1.3: + resolution: {integrity: sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==} + engines: {node: '>= 12.0.0'} + hasBin: true + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.2 + debug: 4.3.2_supports-color@8.1.1 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.1.7 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 3.0.4 + ms: 2.1.3 + nanoid: 3.1.25 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.1.5 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /mute-stream/0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + + /nanoid/3.1.25: + resolution: {integrity: sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /napi-build-utils/1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} + dev: true + + /node-abi/2.30.1: + resolution: {integrity: sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==} + dependencies: + semver: 5.7.1 + dev: true + + /node-addon-api/3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /npmlog/4.1.2: + resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} + dependencies: + are-we-there-yet: 1.1.7 + console-control-strings: 1.1.0 + gauge: 2.7.4 + set-blocking: 2.0.0 + dev: true + + /nth-check/2.0.1: + resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} + dependencies: + boolbase: 1.0.0 + dev: true + + /number-is-nan/1.0.1: + resolution: {integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} + engines: {node: '>=0.10.0'} + dev: true + + /object-inspect/1.12.0: + resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} + dev: true + + /once/1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + dependencies: + wrappy: 1.0.2 + dev: true + + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-semver/1.1.1: + resolution: {integrity: sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=} + dependencies: + semver: 5.7.1 + dev: true + + /parse5-htmlparser2-tree-adapter/6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + dependencies: + parse5: 6.0.1 + dev: true + + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} + dev: true + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pend/1.2.0: + resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /prebuild-install/6.1.4: + resolution: {integrity: sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + detect-libc: 1.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.5 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 2.30.1 + npmlog: 4.1.2 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 3.1.0 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: true + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers/1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.2.0 + dev: true + + /prettier/2.5.1: + resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /progress/2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: true + + /qs/6.10.2: + resolution: {integrity: sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /rc/1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.5 + strip-json-comments: 2.0.1 + dev: true + + /read/1.0.7: + resolution: {integrity: sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=} + engines: {node: '>=0.8'} + dependencies: + mute-stream: 0.0.8 + dev: true + + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.0 + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.0 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: true + + /semver/7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /serialize-javascript/6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true + + /set-blocking/2.0.0: + resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} + dev: true + + /setimmediate/1.0.5: + resolution: {integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=} + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.12.0 + dev: true + + /signal-exit/3.0.6: + resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==} + dev: true + + /simple-concat/1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: true + + /simple-get/3.1.0: + resolution: {integrity: sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==} + dependencies: + decompress-response: 4.2.1 + once: 1.4.0 + simple-concat: 1.0.1 + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /sprintf-js/1.0.3: + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + dev: true + + /string-width/1.0.2: + resolution: {integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /strip-ansi/3.0.1: + resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-json-comments/2.0.1: + resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} + engines: {node: '>=0.10.0'} + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} + dev: true + + /tmp/0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /traverse/0.3.9: + resolution: {integrity: sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=} + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: true + + /tsutils/3.21.0_typescript@4.5.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.5.4 + dev: true + + /tunnel-agent/0.6.0: + resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /tunnel/0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + dev: true + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /typed-rest-client/1.8.6: + resolution: {integrity: sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==} + dependencies: + qs: 6.10.2 + tunnel: 0.0.6 + underscore: 1.13.2 + dev: true + + /typescript/4.5.4: + resolution: {integrity: sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /uc.micro/1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: true + + /underscore/1.13.2: + resolution: {integrity: sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==} + dev: true + + /unzipper/0.10.11: + resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==} + dependencies: + big-integer: 1.6.51 + binary: 0.3.0 + bluebird: 3.4.7 + buffer-indexof-polyfill: 1.0.2 + duplexer2: 0.1.4 + fstream: 1.0.12 + graceful-fs: 4.2.9 + listenercount: 1.0.1 + readable-stream: 2.3.7 + setimmediate: 1.0.5 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: true + + /url-join/4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + dev: true + + /v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + dev: true + + /vsce/2.6.3: + resolution: {integrity: sha512-PKfvAtG9rLT1evHiKOJpBHND1hUHOOf4lL7chZFp0KGu+Bpgcx3g3T5eq0d8Hmzd08zd3KJunsaA3iaNSmTU/A==} + engines: {node: '>= 14'} + hasBin: true + dependencies: + azure-devops-node-api: 11.1.0 + chalk: 2.4.2 + cheerio: 1.0.0-rc.10 + commander: 6.2.1 + glob: 7.2.0 + hosted-git-info: 4.1.0 + keytar: 7.7.0 + leven: 3.1.0 + markdown-it: 10.0.0 + mime: 1.6.0 + minimatch: 3.0.4 + parse-semver: 1.1.1 + read: 1.0.7 + semver: 5.7.1 + tmp: 0.2.1 + typed-rest-client: 1.8.6 + url-join: 4.0.1 + xml2js: 0.4.23 + yauzl: 2.10.0 + yazl: 2.5.1 + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wide-align/1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /workerpool/6.1.5: + resolution: {integrity: sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==} + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + dev: true + + /xml2js/0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.2.4 + xmlbuilder: 11.0.1 + dev: true + + /xmlbuilder/11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yargs-parser/20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: true + + /yargs-unparser/2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: true + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + dev: true + + /yauzl/2.10.0: + resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + + /yazl/2.5.1: + resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==} + dependencies: + buffer-crc32: 0.2.13 + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/src/extension.ts b/src/extension.ts new file mode 100644 index 0000000..80a6226 --- /dev/null +++ b/src/extension.ts @@ -0,0 +1,8 @@ +import * as vscode from 'vscode'; +import { ModelCompletionProvider } from './model-completion-provider'; + +export function activate(context: vscode.ExtensionContext) { + new ModelCompletionProvider(context); +} + +export function deactivate() {} diff --git a/src/model-completion-item.ts b/src/model-completion-item.ts new file mode 100644 index 0000000..a23bf2c --- /dev/null +++ b/src/model-completion-item.ts @@ -0,0 +1,23 @@ +import { Command, CompletionItem, CompletionItemKind, CompletionItemLabel, CompletionItemTag, MarkdownString, Range, SnippetString, TextEdit } from 'vscode'; + +/** + * 适应项 + * + * @author chitanda + * @date 2022-01-10 18:01:07 + * @export + * @class ModelCompletionItem + * @implements {CompletionItem} + */ +export class ModelCompletionItem extends CompletionItem { + /** + * Creates an instance of ModelCompletionItem. + * + * @author chitanda + * @date 2022-01-10 18:01:26 + * @param {string} text 属性名称 + */ + constructor(text: string) { + super(text, CompletionItemKind.Field); + } +} diff --git a/src/model-completion-provider.ts b/src/model-completion-provider.ts new file mode 100644 index 0000000..cf735c1 --- /dev/null +++ b/src/model-completion-provider.ts @@ -0,0 +1,67 @@ +import { + CancellationToken, + CompletionContext, + CompletionItem, + CompletionItemKind, + CompletionItemProvider, + CompletionList, + ExtensionContext, + languages, + Position, + ProviderResult, + TextDocument, +} from 'vscode'; + +/** + * 模板模型自动填充 + * + * @author chitanda + * @date 2022-01-10 18:01:54 + * @export + * @class ModelCompletionProvider + * @implements {CompletionItemProvider} + */ +export class ModelCompletionProvider implements CompletionItemProvider { + /** + * 值文本内容匹配 + * + * @author chitanda + * @date 2022-01-10 18:01:53 + * @protected + */ + protected reg = /^[\w\.@]+/g; + + constructor(protected context: ExtensionContext) { + context.subscriptions.push(languages.registerCompletionItemProvider('handlebars', this)); + } + + provideCompletionItems( + document: TextDocument, + position: Position, + _token: CancellationToken, + _context: CompletionContext, + ): ProviderResult> { + const contexts = this.calcContext(document, position); + return contexts.map(str => new CompletionItem(str, CompletionItemKind.Field)); + } + + protected calcContext(document: TextDocument, position: Position): string[] { + const text = document.getText(); + const lineText = document.lineAt(position.line).text; + if (lineText.indexOf('{{') !== -1) { + } + return ['ibizsys']; + } + + protected getParent(text: string, document: TextDocument, position: Position) { + const lineText = document.lineAt(position.line).text; + const index = lineText.indexOf('{{'); + const start = lineText.substring(0, index); + const end = lineText.substring(index); + const match = this.reg.exec(start); + if (match) { + return match[0]; + } + return ''; + } +} diff --git a/src/test.js b/src/test.js new file mode 100644 index 0000000..427dc82 --- /dev/null +++ b/src/test.js @@ -0,0 +1,4 @@ +const str = ` --- {{page.name}} {{page.codeName}}`; +const index = str.lastIndexOf('{{'); +const content = str.substring(0, index).trim(); +console.log(`content: ${content}`); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..8427a50 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "outDir": "out", + "lib": [ + "ES2020" + ], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + }, + "exclude": [ + "node_modules", + ".vscode-test" + ] +} diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md new file mode 100644 index 0000000..b510bff --- /dev/null +++ b/vsc-extension-quickstart.md @@ -0,0 +1,42 @@ +# Welcome to your VS Code Extension + +## What's in the folder + +* This folder contains all of the files necessary for your extension. +* `package.json` - this is the manifest file in which you declare your extension and command. + * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. +* `src/extension.ts` - this is the main file where you will provide the implementation of your command. + * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. + * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. + +## Get up and running straight away + +* Press `F5` to open a new window with your extension loaded. +* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. +* Set breakpoints in your code inside `src/extension.ts` to debug your extension. +* Find output from your extension in the debug console. + +## Make changes + +* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. +* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. + + +## Explore the API + +* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. + +## Run tests + +* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. +* Press `F5` to run the tests in a new window with your extension loaded. +* See the output of the test result in the debug console. +* Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. + * The provided test runner will only consider files matching the name pattern `**.test.ts`. + * You can create folders inside the `test` folder to structure your tests any way you want. + +## Go further + + * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). + * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. + * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). -- Gitee From 36c142a3cd2ac0f6c997e5aa027b23517d413727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Thu, 13 Jan 2022 15:48:15 +0800 Subject: [PATCH 02/10] =?UTF-8?q?add:=20=E5=88=9D=E7=89=88=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=A1=AB=E5=85=85=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 123 +------------- package.json | 6 + pnpm-lock.yaml | 47 +++++- resources/model/app.json | 5 + resources/model/appEntities.json | 3 + resources/model/appEntity.json | 5 + resources/model/apps.json | 3 + resources/model/global.json | 4 + resources/model/page.json | 4 + resources/model/pages.json | 3 + resources/model/system.json | 5 + src/context/context-item/context-item.ts | 101 +++++++++++ src/context/context-model/context-model.ts | 51 ++++++ src/context/context-tag/context-tag.ts | 87 ++++++++++ src/context/index.ts | 3 + src/extension.ts | 2 + src/model-completion-provider.ts | 185 ++++++++++++++++++--- src/model/index.ts | 100 +++++++++++ src/reg-exp/index.ts | 24 +++ src/test.js | 4 - src/types/index.d.ts | 7 + 21 files changed, 626 insertions(+), 146 deletions(-) create mode 100644 resources/model/app.json create mode 100644 resources/model/appEntities.json create mode 100644 resources/model/appEntity.json create mode 100644 resources/model/apps.json create mode 100644 resources/model/global.json create mode 100644 resources/model/page.json create mode 100644 resources/model/pages.json create mode 100644 resources/model/system.json create mode 100644 src/context/context-item/context-item.ts create mode 100644 src/context/context-model/context-model.ts create mode 100644 src/context/context-tag/context-tag.ts create mode 100644 src/context/index.ts create mode 100644 src/model/index.ts create mode 100644 src/reg-exp/index.ts delete mode 100644 src/test.js create mode 100644 src/types/index.d.ts diff --git a/.gitignore b/.gitignore index 1f22b9c..d6f9b9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,116 +1,9 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories +// 本地文件历史记录 +.history +// node 安装包 node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* +// 编译目录 +dist/ +out/ +// 打包文件 +*.vsix diff --git a/package.json b/package.json index 1f96cf1..c153d90 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,14 @@ "lint": "eslint src --ext ts", "test": "node ./out/test/runTest.js" }, + "dependencies": { + "fs-extra": "^10.0.0", + "lodash": "^4.17.21" + }, "devDependencies": { + "@types/fs-extra": "^9.0.13", "@types/glob": "^7.2.0", + "@types/lodash": "^4.14.178", "@types/mocha": "^9.0.0", "@types/node": "17.x", "@types/vscode": "^1.63.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c856b4..6a0e7da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,7 +1,9 @@ lockfileVersion: 5.3 specifiers: + '@types/fs-extra': ^9.0.13 '@types/glob': ^7.2.0 + '@types/lodash': ^4.14.178 '@types/mocha': ^9.0.0 '@types/node': 17.x '@types/vscode': ^1.63.1 @@ -11,14 +13,22 @@ specifiers: eslint: ^8.6.0 eslint-config-prettier: ^8.3.0 eslint-plugin-prettier: ^4.0.0 + fs-extra: ^10.0.0 glob: ^7.2.0 + lodash: ^4.17.21 mocha: ^9.1.3 prettier: ^2.5.1 typescript: ^4.5.4 vsce: ^2.6.3 +dependencies: + fs-extra: 10.0.0 + lodash: 4.17.21 + devDependencies: + '@types/fs-extra': 9.0.13 '@types/glob': 7.2.0 + '@types/lodash': 4.14.178 '@types/mocha': 9.0.0 '@types/node': 17.0.8 '@types/vscode': 1.63.1 @@ -94,6 +104,12 @@ packages: engines: {node: '>= 6'} dev: true + /@types/fs-extra/9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 17.0.8 + dev: true + /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -105,6 +121,10 @@ packages: resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} dev: true + /@types/lodash/4.14.178: + resolution: {integrity: sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==} + dev: true + /@types/minimatch/3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true @@ -984,6 +1004,15 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true + /fs-extra/10.0.0: + resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.9 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + /fs.realpath/1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true @@ -1101,7 +1130,6 @@ packages: /graceful-fs/4.2.9: resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} - dev: true /growl/1.10.5: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} @@ -1287,6 +1315,14 @@ packages: resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} dev: true + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.9 + dev: false + /keytar/7.7.0: resolution: {integrity: sha512-YEY9HWqThQc5q5xbXbRwsZTh2PJ36OSYRjSv3NN2xf5s5dpLTjEZnC2YikR29OaVybf9nQ0dJ/80i40RS97t/A==} requiresBuild: true @@ -1329,6 +1365,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + /log-symbols/4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -2008,6 +2048,11 @@ packages: resolution: {integrity: sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==} dev: true + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: false + /unzipper/0.10.11: resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==} dependencies: diff --git a/resources/model/app.json b/resources/model/app.json new file mode 100644 index 0000000..a2e0f33 --- /dev/null +++ b/resources/model/app.json @@ -0,0 +1,5 @@ +{ + "name": "某某某应用", + "codeName": "xxx Application", + "appEntities": "./appEntities.json" +} diff --git a/resources/model/appEntities.json b/resources/model/appEntities.json new file mode 100644 index 0000000..0be44cd --- /dev/null +++ b/resources/model/appEntities.json @@ -0,0 +1,3 @@ +{ + "extends": "./appEntity.json" +} diff --git a/resources/model/appEntity.json b/resources/model/appEntity.json new file mode 100644 index 0000000..7222631 --- /dev/null +++ b/resources/model/appEntity.json @@ -0,0 +1,5 @@ +{ + "name": "应用实体", + "codeName": "appEntity", + "pages": "./pages.json" +} diff --git a/resources/model/apps.json b/resources/model/apps.json new file mode 100644 index 0000000..91e6351 --- /dev/null +++ b/resources/model/apps.json @@ -0,0 +1,3 @@ +{ + "extends": "./app.json" +} diff --git a/resources/model/global.json b/resources/model/global.json new file mode 100644 index 0000000..4201c31 --- /dev/null +++ b/resources/model/global.json @@ -0,0 +1,4 @@ +{ + "system": "./system.json", + "apps": "./apps.json" +} diff --git a/resources/model/page.json b/resources/model/page.json new file mode 100644 index 0000000..78f5844 --- /dev/null +++ b/resources/model/page.json @@ -0,0 +1,4 @@ +{ + "name": "视图", + "codeName": "view" +} diff --git a/resources/model/pages.json b/resources/model/pages.json new file mode 100644 index 0000000..2c05155 --- /dev/null +++ b/resources/model/pages.json @@ -0,0 +1,3 @@ +{ + "extends": "./page.json" +} diff --git a/resources/model/system.json b/resources/model/system.json new file mode 100644 index 0000000..1d808cd --- /dev/null +++ b/resources/model/system.json @@ -0,0 +1,5 @@ +{ + "name": "name", + "codeName": "codeName", + "apps": "./apps.json" +} diff --git a/src/context/context-item/context-item.ts b/src/context/context-item/context-item.ts new file mode 100644 index 0000000..c946c75 --- /dev/null +++ b/src/context/context-item/context-item.ts @@ -0,0 +1,101 @@ +import { ContextTag } from '../context-tag/context-tag'; + +/** + * 模板上下文项 + * + * @author chitanda + * @date 2022-01-13 10:01:02 + * @export + * @class ContextItem + */ +export class ContextItem { + /** + * 子项 + * + * @author chitanda + * @date 2022-01-13 10:01:38 + * @type {ContextItem[]} + */ + children: ContextItem[] = []; + /** + * 开始节点 + * + * @author chitanda + * @date 2022-01-13 10:01:58 + * @type {ContextTag} + */ + start!: ContextTag; + /** + * 结束节点 + * + * @author chitanda + * @date 2022-01-13 10:01:04 + * @type {ContextTag} + */ + end!: ContextTag; + + /** + * 设置启动节点 + * + * @author chitanda + * @date 2022-01-13 10:01:42 + * @param {ContextTag} tag + */ + setStart(tag: ContextTag) { + this.start = tag; + } + + /** + * 设置结束节点 + * + * @author chitanda + * @date 2022-01-13 10:01:48 + * @param {ContextTag} tag + */ + setEnd(tag: ContextTag) { + this.end = tag; + } + + /** + * 添加子项 + * + * @author chitanda + * @date 2022-01-13 10:01:27 + * @param {ContextItem} child + */ + addChildren(child: ContextItem) { + this.children.push(child); + } + + /** + * 计算上下文变量 + * + * @author chitanda + * @date 2022-01-13 11:01:58 + * @param {number} offset + * @return {*} {string[]} + */ + calcCompletionDomain(offset: number): ContextTag[] { + const vars: ContextTag[] = [this.start]; + const child = this.children.find(item => item.isCurrentDomain(offset)); + if (child) { + vars.push(...child.calcCompletionDomain(offset)); + } + return vars; + } + + /** + * 是否为当前域下内容 + * + * @author chitanda + * @date 2022-01-13 11:01:44 + * @param {number} offset + * @return {*} {boolean} + */ + isCurrentDomain(offset: number): boolean { + if (this.start.index < offset && this.end.index > offset) { + return true; + } + return false; + } +} diff --git a/src/context/context-model/context-model.ts b/src/context/context-model/context-model.ts new file mode 100644 index 0000000..9c39b07 --- /dev/null +++ b/src/context/context-model/context-model.ts @@ -0,0 +1,51 @@ +import { Model } from '../../model'; + +/** + * 当前次提示计算的模型上下文 + * + * @author chitanda + * @date 2022-01-13 14:01:45 + * @export + * @class ContextModel + */ +export class ContextModel { + protected model: Model = Model.getInstance(); + + /** + * 按照域次序排序的模型上下文 + * + * @author chitanda + * @date 2022-01-13 14:01:31 + * @type {IModel[]} + */ + readonly models: IModel[] = []; + + add(model: IModel): void { + this.models.push(model); + } + + getModel(key: string): IModel | string | null { + for (let i = this.models.length - 1; i >= 0; i--) { + const model = this.models[i]; + const val = model[key]; + if (val) { + return val; + } + } + return null; + } + + /** + * 获取全局模型 + * + * @author chitanda + * @date 2022-01-13 15:01:40 + * @return {*} {IModel} + */ + getGlobalModel(): IModel { + if (this.models.length > 0) { + return this.models[0]; + } + return {}; + } +} diff --git a/src/context/context-tag/context-tag.ts b/src/context/context-tag/context-tag.ts new file mode 100644 index 0000000..e61e48b --- /dev/null +++ b/src/context/context-tag/context-tag.ts @@ -0,0 +1,87 @@ +import { tagAliasReg, tagVariableReg } from '../../reg-exp'; + +/** + * 上下文标签项 + * + * @author chitanda + * @date 2022-01-13 09:01:05 + * @export + * @class ContextTag + */ +export class ContextTag { + /** + * each or with 变量名称 + * + * @author chitanda + * @date 2022-01-13 09:01:01 + * @type {string} + */ + variable: string = ''; + /** + * each or with 别名变量名称 + * + * @author chitanda + * @date 2022-01-13 09:01:12 + * @type {string} + */ + alias: string = ''; + /** + * 起始标签 + * + * @author chitanda + * @date 2022-01-13 10:01:03 + * @type {boolean} + */ + start: boolean = false; + /** + * 结束标签 + * + * @author chitanda + * @date 2022-01-13 10:01:14 + * @type {boolean} + */ + end: boolean = false; + /** + * 文本所在位置 + * + * @author chitanda + * @date 2022-01-13 11:01:34 + * @readonly + * @type {number} + */ + get index(): number { + return this.exec.index; + } + /** + * Creates an instance of ContextTag. + * + * @author chitanda + * @date 2022-01-13 09:01:26 + * @param {('each' | 'with')} type 标签类型 + * @param {RegExpExecArray} exec 正则匹配结果 + */ + constructor(public type: 'each' | 'with' | 'eachEnd' | 'withEnd', public exec: RegExpExecArray) { + if (type === 'each' || type === 'with') { + this.variable = exec[1]; + const result = tagAliasReg.exec(this.variable); + if (result && result.length > 0) { + this.alias = result[1]; + this.variable = tagVariableReg.exec(this.variable)![1]; + } + this.start = true; + } else { + this.end = true; + } + } + + /** + * 是否使用了别名 + * + * @author chitanda + * @date 2022-01-13 15:01:56 + * @return {*} {boolean} + */ + isAlias(): boolean { + return !!(this.alias && this.alias !== ''); + } +} diff --git a/src/context/index.ts b/src/context/index.ts new file mode 100644 index 0000000..37a1ba8 --- /dev/null +++ b/src/context/index.ts @@ -0,0 +1,3 @@ +export { ContextItem } from './context-item/context-item'; +export { ContextModel } from './context-model/context-model'; +export { ContextTag } from './context-tag/context-tag'; diff --git a/src/extension.ts b/src/extension.ts index 80a6226..97c722c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,7 +1,9 @@ import * as vscode from 'vscode'; +import { Model } from './model'; import { ModelCompletionProvider } from './model-completion-provider'; export function activate(context: vscode.ExtensionContext) { + Model.getInstance().setContext(context); new ModelCompletionProvider(context); } diff --git a/src/model-completion-provider.ts b/src/model-completion-provider.ts index cf735c1..2894ab7 100644 --- a/src/model-completion-provider.ts +++ b/src/model-completion-provider.ts @@ -11,6 +11,9 @@ import { ProviderResult, TextDocument, } from 'vscode'; +import { last, nth } from 'lodash'; +import { ContextTag, ContextItem, ContextModel } from './context'; +import { Model } from './model'; /** * 模板模型自动填充 @@ -22,14 +25,17 @@ import { * @implements {CompletionItemProvider} */ export class ModelCompletionProvider implements CompletionItemProvider { - /** - * 值文本内容匹配 - * - * @author chitanda - * @date 2022-01-10 18:01:53 - * @protected - */ - protected reg = /^[\w\.@]+/g; + protected model = Model.getInstance(); + + protected each = /{{#each\s(.*?)}}/g; + + protected eachEnd = /{{\/each}}/g; + + protected with = /{{#with\s(.*?)}}/g; + + protected withEnd = /{{\/with}}/g; + + protected contexts: ContextItem[] = []; constructor(protected context: ExtensionContext) { context.subscriptions.push(languages.registerCompletionItemProvider('handlebars', this)); @@ -41,27 +47,154 @@ export class ModelCompletionProvider implements CompletionItemProvider { _token: CancellationToken, _context: CompletionContext, ): ProviderResult> { - const contexts = this.calcContext(document, position); - return contexts.map(str => new CompletionItem(str, CompletionItemKind.Field)); - } - - protected calcContext(document: TextDocument, position: Position): string[] { - const text = document.getText(); - const lineText = document.lineAt(position.line).text; - if (lineText.indexOf('{{') !== -1) { + const result: CompletionItem[] = []; + // 当前光标所在位置的行 + const line = document.lineAt(position); + // 行内容 + const lineText = line.text; + // 行内光标前的内容 + const lineTextBeforeCursor = lineText.substring(0, position.character); + // 内容中是否包含开始标签 + if (lineTextBeforeCursor.indexOf('{{') !== -1) { + // 截取最后一个开始标签后的内容 + const variable = lineTextBeforeCursor.substring(lineTextBeforeCursor.lastIndexOf('{{'), lineTextBeforeCursor.length); + // 最后一个开始标签后的内容没有闭合 + if (variable.indexOf('}}') === -1) { + this.calcContexts(document.getText()); + const offset = document.offsetAt(position); + const ctx = this.contexts.find(ctx => ctx.isCurrentDomain(offset)); + const ctxModel = new ContextModel(); + // 加载全局模型 + const globalModel = this.model.getModel('global.json'); + ctxModel.add(globalModel); + if (ctx) { + const tags = ctx.calcCompletionDomain(offset); + for (let i = 0; i < tags.length; i++) { + const tag = tags[i]; + const keys = tag.variable.split('.'); + for (let j = 0; j < keys.length; j++) { + const key = keys[j]; + const val = ctxModel.getModel(key); + if (!val) { + // return ctxModel.getGlobalModel(); + return result; + } + if (typeof val === 'string' && val.endsWith('.json')) { + const model = this.model.getModel(val); + ctxModel.add(model); + } + } + if (keys.length > 0 && tag.isAlias()) { + const model = nth(ctxModel.models, -1)!; + const parentModel = nth(ctxModel.models, -2)!; + parentModel[tag.alias] = model; + } + } + let model: IModel = ctxModel.getGlobalModel(); + // 当前需要提示的区域变量 + const text = variable.substring(2, variable.length); + const keys = text.split('.'); + for (let i = 0; i < keys.length - 1; i++) { + const key = keys[i]; + const val = ctxModel.getModel(key); + if (val) { + if (typeof val === 'string') { + if (val.endsWith('.json')) { + const model = this.model.getModel(val); + ctxModel.add(model); + } + } else { + model = val; + } + } + } + if (keys.length > 0) { + const key = last(keys)!; + const modelKeys = Object.keys(model); + modelKeys.forEach(modelKey => { + if (key !== '' && modelKey.indexOf(key) === -1) { + return; + } + result.push(new CompletionItem(modelKey, CompletionItemKind.Field)); + }); + if (keys.length === 1) { + tags.forEach(tag => { + if (tag.isAlias()) { + result.push(new CompletionItem(tag.alias, CompletionItemKind.Field)); + } + }); + } + return result; + } + } + } } - return ['ibizsys']; + return []; } - protected getParent(text: string, document: TextDocument, position: Position) { - const lineText = document.lineAt(position.line).text; - const index = lineText.indexOf('{{'); - const start = lineText.substring(0, index); - const end = lineText.substring(index); - const match = this.reg.exec(start); - if (match) { - return match[0]; + /** + * 计算文本中的闭合标签域 + * + * @author chitanda + * @date 2022-01-13 10:01:37 + * @protected + * @param {string} text + * @return {*} {ContextTag[]} + */ + protected calcContexts(text: string): ContextTag[] { + const arr: ContextTag[] = []; + let item: RegExpExecArray | null; + // 匹配所有 each 开始 + while ((item = this.each.exec(text))) { + arr.push(new ContextTag('each', item)); + } + // 匹配所有 each 结束 + while ((item = this.eachEnd.exec(text))) { + arr.push(new ContextTag('eachEnd', item)); + } + // 匹配所有 with 开始 + while ((item = this.with.exec(text))) { + arr.push(new ContextTag('with', item)); + } + // 匹配所有 with 结束 + while ((item = this.withEnd.exec(text))) { + arr.push(new ContextTag('withEnd', item)); + } + // 按位置进行排序 + arr.sort((a, b) => a.exec.index - b.exec.index); + // 当前未闭合标签的个数 + let num = 0; + // 一组标签域后置空 + const ctxs: ContextItem[] = []; + // 计算每一个闭合的标签域 + for (let i = 0; i < arr.length; i++) { + const item = arr[i]; + if (item.start) { + // 没开始一个标签,新建并推送进堆栈 + num++; + const ctx = new ContextItem(); + ctx.setStart(item); + ctxs.push(ctx); + } else if (item.end) { + // 结束一个标签,从堆栈中取出设置结束标签并指给父级 + num--; + // 获取最后一个未闭合的标签 + const lastCtx = last(ctxs)!; + lastCtx.setEnd(item); + if (ctxs.length >= 2) { + // 从堆栈中移出已闭合的标签 + ctxs.pop(); + // 获取已闭合标签的父并添加到子 + const parentCtx = last(ctxs)!; + parentCtx.addChildren(lastCtx); + } + } + // 无未闭合标签,保存并清空堆栈 + if (num === 0 && ctxs.length > 0) { + this.contexts.push(ctxs[0]); + ctxs.splice(0, ctxs.length); + } } - return ''; + return arr; } } diff --git a/src/model/index.ts b/src/model/index.ts new file mode 100644 index 0000000..4f10b4e --- /dev/null +++ b/src/model/index.ts @@ -0,0 +1,100 @@ +import { readFileSync } from 'fs-extra'; +import { merge } from 'lodash'; +import { join } from 'path'; +import { ExtensionContext } from 'vscode'; + +/** + * 模型对象加载帮助 + * + * @author chitanda + * @date 2022-01-13 13:01:34 + * @export + * @class Model + */ +export class Model { + private static readonly instance: Model = new Model(); + + /** + * 文件内容缓存 + * + * @author chitanda + * @date 2022-01-13 14:01:16 + * @protected + * @type {Map} + */ + protected jsonCache: Map = new Map(); + + protected context!: ExtensionContext; + + setContext(context: ExtensionContext) { + this.context = context; + } + + /** + * 获取指定路径模型内容 + * + * @author chitanda + * @date 2022-01-13 14:01:05 + * @param {string} jsonPath + * @return {*} {IModel} + */ + getModel(jsonPath: string): IModel { + return this.getJson(jsonPath); + } + + /** + * 获取模型 json 文件内容 + * + * @author chitanda + * @date 2022-01-13 14:01:03 + * @protected + * @param {string} jsonPath + * @return {*} {IModel} + */ + protected getJson(jsonPath: string): IModel { + const path = join(this.context.extensionPath, 'resources/model', jsonPath); + if (this.jsonCache.has(path)) { + return this.jsonCache.get(path)!; + } + const jsonStr = readFileSync(path, 'utf-8'); + let data = JSON.parse(jsonStr); + data = this.fillExtends(data); + if (data) { + this.jsonCache.set(path, data); + } + return data; + } + + /** + * 填充继承内容 + * + * @author chitanda + * @date 2022-01-13 14:01:50 + * @protected + * @param {IModel} data + * @return {*} {IModel} + */ + protected fillExtends(data: IModel): IModel { + if (data.extends && data.extends.length > 0) { + const extendPath = join(this.context.extensionPath, 'resources/model', data.extends); + const extendStr = readFileSync(extendPath, 'utf-8'); + let extendData = JSON.parse(extendStr); + delete data.extends; + extendData = this.fillExtends(extendData); + data = merge(data, extendData); + } + return data; + } + + /** + * 实例 + * + * @author chitanda + * @date 2022-01-13 14:01:35 + * @static + * @return {*} {Model} + */ + static getInstance(): Model { + return this.instance; + } +} diff --git a/src/reg-exp/index.ts b/src/reg-exp/index.ts new file mode 100644 index 0000000..7696f5f --- /dev/null +++ b/src/reg-exp/index.ts @@ -0,0 +1,24 @@ +/** + * 匹配 each or with 变量区内容 + * + * @author chitanda + * @date 2022-01-12 13:01:28 + * @protected + */ +export const matchTagReg = /(?<={{#(each|with)\s)(.*?)(?=}})/; +/** + * 匹配在 each or with 写了 as 下所使用的变量名称 + * + * @author chitanda + * @date 2022-01-12 15:01:21 + * @protected + */ +export const tagVariableReg = /(.*?)(?=\sas\s)/; +/** + * 匹配 each or with 别名变量名称 + * + * @author chitanda + * @date 2022-01-12 15:01:39 + * @protected + */ +export const tagAliasReg = /(?<=\sas\s\|)(.*?)(?=\|)/; diff --git a/src/test.js b/src/test.js deleted file mode 100644 index 427dc82..0000000 --- a/src/test.js +++ /dev/null @@ -1,4 +0,0 @@ -const str = ` --- {{page.name}} {{page.codeName}}`; -const index = str.lastIndexOf('{{'); -const content = str.substring(0, index).trim(); -console.log(`content: ${content}`); diff --git a/src/types/index.d.ts b/src/types/index.d.ts new file mode 100644 index 0000000..587f3c5 --- /dev/null +++ b/src/types/index.d.ts @@ -0,0 +1,7 @@ +export {}; + +declare global { + interface IModel { + [key: string]: any; + } +} -- Gitee From 6ad98f728c1e7754154a3b55d3193f8ed85fd94e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Thu, 13 Jan 2022 16:02:19 +0800 Subject: [PATCH 03/10] =?UTF-8?q?update:=20=E8=A1=A5=E5=85=85=E7=BB=86?= =?UTF-8?q?=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/model/page.json | 3 ++- src/context/context-model/context-model.ts | 14 ++++++++++++++ src/model-completion-provider.ts | 15 +++++++++------ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/resources/model/page.json b/resources/model/page.json index 78f5844..c4fb6c2 100644 --- a/resources/model/page.json +++ b/resources/model/page.json @@ -1,4 +1,5 @@ { "name": "视图", - "codeName": "view" + "codeName": "view", + "pageName": "" } diff --git a/src/context/context-model/context-model.ts b/src/context/context-model/context-model.ts index 9c39b07..5c9e420 100644 --- a/src/context/context-model/context-model.ts +++ b/src/context/context-model/context-model.ts @@ -35,6 +35,20 @@ export class ContextModel { return null; } + /** + * 获取最后的模型 + * + * @author chitanda + * @date 2022-01-13 15:01:22 + * @return {*} {IModel} + */ + getLastModel(): IModel { + if (this.models.length > 0) { + return this.models[this.models.length - 1]; + } + return {}; + } + /** * 获取全局模型 * diff --git a/src/model-completion-provider.ts b/src/model-completion-provider.ts index 2894ab7..83b0754 100644 --- a/src/model-completion-provider.ts +++ b/src/model-completion-provider.ts @@ -47,7 +47,7 @@ export class ModelCompletionProvider implements CompletionItemProvider { _token: CancellationToken, _context: CompletionContext, ): ProviderResult> { - const result: CompletionItem[] = []; + const result: Set = new Set(); // 当前光标所在位置的行 const line = document.lineAt(position); // 行内容 @@ -76,8 +76,7 @@ export class ModelCompletionProvider implements CompletionItemProvider { const key = keys[j]; const val = ctxModel.getModel(key); if (!val) { - // return ctxModel.getGlobalModel(); - return result; + break; } if (typeof val === 'string' && val.endsWith('.json')) { const model = this.model.getModel(val); @@ -115,16 +114,20 @@ export class ModelCompletionProvider implements CompletionItemProvider { if (key !== '' && modelKey.indexOf(key) === -1) { return; } - result.push(new CompletionItem(modelKey, CompletionItemKind.Field)); + result.add(modelKey); }); if (keys.length === 1) { + const lastModel = ctxModel.getLastModel(); + Object.keys(lastModel).forEach(key => { + result.add(key); + }); tags.forEach(tag => { if (tag.isAlias()) { - result.push(new CompletionItem(tag.alias, CompletionItemKind.Field)); + result.add(tag.alias); } }); } - return result; + return Array.from(result.values()).map(str => new CompletionItem(str, CompletionItemKind.Field)); } } } -- Gitee From 217c95c98b13858332a6550d80d3dfeb45bf8322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Thu, 13 Jan 2022 17:10:10 +0800 Subject: [PATCH 04/10] =?UTF-8?q?add:=20=E6=94=AF=E6=8C=81=E5=9C=A8?= =?UTF-8?q?=E5=8A=A9=E6=89=8B=E4=B8=AD=E7=9A=84=E5=8F=98=E9=87=8F=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model-completion-provider.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/model-completion-provider.ts b/src/model-completion-provider.ts index 83b0754..da4b8ce 100644 --- a/src/model-completion-provider.ts +++ b/src/model-completion-provider.ts @@ -38,7 +38,7 @@ export class ModelCompletionProvider implements CompletionItemProvider { protected contexts: ContextItem[] = []; constructor(protected context: ExtensionContext) { - context.subscriptions.push(languages.registerCompletionItemProvider('handlebars', this)); + context.subscriptions.push(languages.registerCompletionItemProvider('handlebars', this, '.')); } provideCompletionItems( @@ -54,16 +54,21 @@ export class ModelCompletionProvider implements CompletionItemProvider { const lineText = line.text; // 行内光标前的内容 const lineTextBeforeCursor = lineText.substring(0, position.character); + // 当是助手中时,获取助手中的第一组变量 + const reg = /(?<={{#(if|unless|each|with)\s)(.*?)([^\s]*)/.exec(lineTextBeforeCursor); // 内容中是否包含开始标签 if (lineTextBeforeCursor.indexOf('{{') !== -1) { + if (lineTextBeforeCursor.indexOf('{{/') !== -1 || (lineTextBeforeCursor.indexOf('{{#') !== -1 && !reg)) { + return []; + } // 截取最后一个开始标签后的内容 const variable = lineTextBeforeCursor.substring(lineTextBeforeCursor.lastIndexOf('{{'), lineTextBeforeCursor.length); // 最后一个开始标签后的内容没有闭合 if (variable.indexOf('}}') === -1) { this.calcContexts(document.getText()); + const ctxModel = new ContextModel(); const offset = document.offsetAt(position); const ctx = this.contexts.find(ctx => ctx.isCurrentDomain(offset)); - const ctxModel = new ContextModel(); // 加载全局模型 const globalModel = this.model.getModel('global.json'); ctxModel.add(globalModel); @@ -91,7 +96,10 @@ export class ModelCompletionProvider implements CompletionItemProvider { } let model: IModel = ctxModel.getGlobalModel(); // 当前需要提示的区域变量 - const text = variable.substring(2, variable.length); + let text = variable.substring(2, variable.length); + if (reg) { + text = reg[0]; + } const keys = text.split('.'); for (let i = 0; i < keys.length - 1; i++) { const key = keys[i]; -- Gitee From ed3dd3d305104b7f011c0049d6963de90026f611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Thu, 13 Jan 2022 17:56:38 +0800 Subject: [PATCH 05/10] =?UTF-8?q?add:=20=E6=94=AF=E6=8C=81=E5=9C=A8?= =?UTF-8?q?=E5=8A=A9=E6=89=8B=E4=BD=9C=E7=94=A8=E5=9F=9F=E4=B8=8B=E7=9A=84?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/context/context-item/context-item.ts | 2 +- src/context/context-tag/context-tag.ts | 11 ++ src/model-completion-provider.ts | 125 ++++++++++++++--------- src/reg-exp/index.ts | 32 +++--- 4 files changed, 109 insertions(+), 61 deletions(-) diff --git a/src/context/context-item/context-item.ts b/src/context/context-item/context-item.ts index c946c75..85a78e3 100644 --- a/src/context/context-item/context-item.ts +++ b/src/context/context-item/context-item.ts @@ -93,7 +93,7 @@ export class ContextItem { * @return {*} {boolean} */ isCurrentDomain(offset: number): boolean { - if (this.start.index < offset && this.end.index > offset) { + if (this.start.index + this.start.length < offset && this.end.index > offset) { return true; } return false; diff --git a/src/context/context-tag/context-tag.ts b/src/context/context-tag/context-tag.ts index e61e48b..b872390 100644 --- a/src/context/context-tag/context-tag.ts +++ b/src/context/context-tag/context-tag.ts @@ -52,6 +52,17 @@ export class ContextTag { get index(): number { return this.exec.index; } + /** + * 文本的长度 + * + * @author chitanda + * @date 2022-01-13 17:01:18 + * @readonly + * @type {number} + */ + get length(): number { + return this.exec[0].length; + } /** * Creates an instance of ContextTag. * diff --git a/src/model-completion-provider.ts b/src/model-completion-provider.ts index da4b8ce..506e480 100644 --- a/src/model-completion-provider.ts +++ b/src/model-completion-provider.ts @@ -14,6 +14,7 @@ import { import { last, nth } from 'lodash'; import { ContextTag, ContextItem, ContextModel } from './context'; import { Model } from './model'; +import { eachEndTag, eachTag, helperVariableReg, withEndTag, withTag } from './reg-exp'; /** * 模板模型自动填充 @@ -25,16 +26,22 @@ import { Model } from './model'; * @implements {CompletionItemProvider} */ export class ModelCompletionProvider implements CompletionItemProvider { + /** + * 模型处理程序 + * + * @author chitanda + * @date 2022-01-13 17:01:59 + * @protected + */ protected model = Model.getInstance(); - - protected each = /{{#each\s(.*?)}}/g; - - protected eachEnd = /{{\/each}}/g; - - protected with = /{{#with\s(.*?)}}/g; - - protected withEnd = /{{\/with}}/g; - + /** + * 当次计算下的所有顶级标签域 + * + * @author chitanda + * @date 2022-01-13 17:01:26 + * @protected + * @type {ContextItem[]} + */ protected contexts: ContextItem[] = []; constructor(protected context: ExtensionContext) { @@ -47,6 +54,7 @@ export class ModelCompletionProvider implements CompletionItemProvider { _token: CancellationToken, _context: CompletionContext, ): ProviderResult> { + this.contexts = []; const result: Set = new Set(); // 当前光标所在位置的行 const line = document.lineAt(position); @@ -55,92 +63,113 @@ export class ModelCompletionProvider implements CompletionItemProvider { // 行内光标前的内容 const lineTextBeforeCursor = lineText.substring(0, position.character); // 当是助手中时,获取助手中的第一组变量 - const reg = /(?<={{#(if|unless|each|with)\s)(.*?)([^\s]*)/.exec(lineTextBeforeCursor); + const reg = helperVariableReg.exec(lineTextBeforeCursor); // 内容中是否包含开始标签 if (lineTextBeforeCursor.indexOf('{{') !== -1) { - if (lineTextBeforeCursor.indexOf('{{/') !== -1 || (lineTextBeforeCursor.indexOf('{{#') !== -1 && !reg)) { + // 当为结束标签 或者 助手的前半部分时忽略 + if (lineTextBeforeCursor.lastIndexOf('{{/') !== -1 || (lineTextBeforeCursor.lastIndexOf('{{#') !== -1 && !reg)) { return []; } // 截取最后一个开始标签后的内容 const variable = lineTextBeforeCursor.substring(lineTextBeforeCursor.lastIndexOf('{{'), lineTextBeforeCursor.length); // 最后一个开始标签后的内容没有闭合 if (variable.indexOf('}}') === -1) { + // 计算文本当中所有的标签域 this.calcContexts(document.getText()); - const ctxModel = new ContextModel(); - const offset = document.offsetAt(position); - const ctx = this.contexts.find(ctx => ctx.isCurrentDomain(offset)); + // 当次计算域中的总模型控制器 + const modelController = new ContextModel(); // 加载全局模型 const globalModel = this.model.getModel('global.json'); - ctxModel.add(globalModel); - if (ctx) { - const tags = ctx.calcCompletionDomain(offset); + modelController.add(globalModel); + // 光标的位置 + const offset = document.offsetAt(position); + // 当前激活的标签域 + const active = this.contexts.find(ctx => ctx.isCurrentDomain(offset)); + if (active) { + // 根据便宜计算当前激活标签域下的所有上下文标签 + const tags = active.calcCompletionDomain(offset); for (let i = 0; i < tags.length; i++) { const tag = tags[i]; + // 分割标签内变量 const keys = tag.variable.split('.'); for (let j = 0; j < keys.length; j++) { const key = keys[j]; - const val = ctxModel.getModel(key); + // 在作用域内查找变量的值 + const val = modelController.getModel(key); if (!val) { break; } + // 如果指定的是 json 文件,去加载文件 if (typeof val === 'string' && val.endsWith('.json')) { const model = this.model.getModel(val); - ctxModel.add(model); + modelController.add(model); } } + // 如果有定义别名,在父级域下补充变量指向当前变量 if (keys.length > 0 && tag.isAlias()) { - const model = nth(ctxModel.models, -1)!; - const parentModel = nth(ctxModel.models, -2)!; + const model = nth(modelController.models, -1)!; + const parentModel = nth(modelController.models, -2)!; parentModel[tag.alias] = model; } } - let model: IModel = ctxModel.getGlobalModel(); + // 默认填充全局模型 + let model: IModel = modelController.getGlobalModel(); // 当前需要提示的区域变量 let text = variable.substring(2, variable.length); if (reg) { text = reg[0]; } + // 分割当前准备填充的变量 const keys = text.split('.'); + // 遍历当前变量的所有层级,未加载时。加载到堆栈中 for (let i = 0; i < keys.length - 1; i++) { const key = keys[i]; - const val = ctxModel.getModel(key); + const val = modelController.getModel(key); if (val) { if (typeof val === 'string') { if (val.endsWith('.json')) { const model = this.model.getModel(val); - ctxModel.add(model); + modelController.add(model); } } else { model = val; } } } - if (keys.length > 0) { - const key = last(keys)!; - const modelKeys = Object.keys(model); - modelKeys.forEach(modelKey => { - if (key !== '' && modelKey.indexOf(key) === -1) { - return; + // 当前变量的最后一个层级 + const key = last(keys)!; + // 提取模型中多有的 key 值,并填充到提示列表中 + const modelKeys = Object.keys(model); + modelKeys.forEach(modelKey => { + if (key !== '' && modelKey.indexOf(key) === -1) { + return; + } + result.add(modelKey); + }); + // 当 key 只有一个层级时 + if (keys.length === 1) { + // 将上一个层级的模型添加到提示列表中 + const lastModel = modelController.getLastModel(); + Object.keys(lastModel).forEach(key => { + result.add(key); + }); + // 将别名添加到提示列表中 + tags.forEach(tag => { + if (tag.isAlias()) { + result.add(tag.alias); } - result.add(modelKey); }); - if (keys.length === 1) { - const lastModel = ctxModel.getLastModel(); - Object.keys(lastModel).forEach(key => { - result.add(key); - }); - tags.forEach(tag => { - if (tag.isAlias()) { - result.add(tag.alias); - } - }); - } - return Array.from(result.values()).map(str => new CompletionItem(str, CompletionItemKind.Field)); } + } else { + // 无激活的标签域,则提示全局模型 + const model = modelController.getGlobalModel(); + Object.keys(model).forEach(key => { + result.add(key); + }); } } } - return []; + return Array.from(result.values()).map(str => new CompletionItem(str, CompletionItemKind.Field)); } /** @@ -156,19 +185,19 @@ export class ModelCompletionProvider implements CompletionItemProvider { const arr: ContextTag[] = []; let item: RegExpExecArray | null; // 匹配所有 each 开始 - while ((item = this.each.exec(text))) { + while ((item = eachTag.exec(text))) { arr.push(new ContextTag('each', item)); } // 匹配所有 each 结束 - while ((item = this.eachEnd.exec(text))) { + while ((item = eachEndTag.exec(text))) { arr.push(new ContextTag('eachEnd', item)); } // 匹配所有 with 开始 - while ((item = this.with.exec(text))) { + while ((item = withTag.exec(text))) { arr.push(new ContextTag('with', item)); } // 匹配所有 with 结束 - while ((item = this.withEnd.exec(text))) { + while ((item = withEndTag.exec(text))) { arr.push(new ContextTag('withEnd', item)); } // 按位置进行排序 diff --git a/src/reg-exp/index.ts b/src/reg-exp/index.ts index 7696f5f..bb3d2b0 100644 --- a/src/reg-exp/index.ts +++ b/src/reg-exp/index.ts @@ -1,24 +1,32 @@ /** * 匹配 each or with 变量区内容 - * - * @author chitanda - * @date 2022-01-12 13:01:28 - * @protected */ export const matchTagReg = /(?<={{#(each|with)\s)(.*?)(?=}})/; /** * 匹配在 each or with 写了 as 下所使用的变量名称 - * - * @author chitanda - * @date 2022-01-12 15:01:21 - * @protected */ export const tagVariableReg = /(.*?)(?=\sas\s)/; /** * 匹配 each or with 别名变量名称 - * - * @author chitanda - * @date 2022-01-12 15:01:39 - * @protected */ export const tagAliasReg = /(?<=\sas\s\|)(.*?)(?=\|)/; +/** + * 匹配 each 标签 + */ +export const eachTag = /{{#each\s(.*?)}}/g; +/** + * 匹配 each 结束标签 + */ +export const eachEndTag = /{{\/each}}/g; +/** + * 匹配 with 标签 + */ +export const withTag = /{{#with\s(.*?)}}/g; +/** + * 匹配 with 结束标签 + */ +export const withEndTag = /{{\/with}}/g; +/** + * 匹配助手内的变量 + */ +export const helperVariableReg = /(?<={{#(if|unless|each|with)\s)(.*?)([^\s]*)/g; -- Gitee From 02619ac80f22c2bf444ddc776b8a473ffc2ab931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Thu, 13 Jan 2022 18:43:48 +0800 Subject: [PATCH 06/10] =?UTF-8?q?add:=20=E8=A1=A5=E5=85=85=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=9B=B8=E5=85=B3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + package.json | 6 +-- pnpm-lock.yaml | 80 ++++++++++++++++---------------- src/test/runTest.ts | 23 +++++++++ src/test/suite/extension.test.ts | 15 ++++++ src/test/suite/index.ts | 38 +++++++++++++++ test-workspace/test.hbs | 48 +++++++++++++++++++ tsconfig.json | 39 ++++++++-------- 8 files changed, 189 insertions(+), 62 deletions(-) create mode 100644 src/test/runTest.ts create mode 100644 src/test/suite/extension.test.ts create mode 100644 src/test/suite/index.ts create mode 100644 test-workspace/test.hbs diff --git a/.gitignore b/.gitignore index d6f9b9c..cb2646f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ // 本地文件历史记录 .history +// 测试包 +.vscode-test // node 安装包 node_modules/ // 编译目录 diff --git a/package.json b/package.json index c153d90..6c8c43e 100644 --- a/package.json +++ b/package.json @@ -52,9 +52,9 @@ "@types/mocha": "^9.0.0", "@types/node": "17.x", "@types/vscode": "^1.63.1", - "@typescript-eslint/eslint-plugin": "^5.9.0", - "@typescript-eslint/parser": "^5.9.0", - "@vscode/test-electron": "^2.0.2", + "@typescript-eslint/eslint-plugin": "^5.9.1", + "@typescript-eslint/parser": "^5.9.1", + "@vscode/test-electron": "^2.0.3", "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a0e7da..144ac1b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,9 +7,9 @@ specifiers: '@types/mocha': ^9.0.0 '@types/node': 17.x '@types/vscode': ^1.63.1 - '@typescript-eslint/eslint-plugin': ^5.9.0 - '@typescript-eslint/parser': ^5.9.0 - '@vscode/test-electron': ^2.0.2 + '@typescript-eslint/eslint-plugin': ^5.9.1 + '@typescript-eslint/parser': ^5.9.1 + '@vscode/test-electron': ^2.0.3 eslint: ^8.6.0 eslint-config-prettier: ^8.3.0 eslint-plugin-prettier: ^4.0.0 @@ -32,9 +32,9 @@ devDependencies: '@types/mocha': 9.0.0 '@types/node': 17.0.8 '@types/vscode': 1.63.1 - '@typescript-eslint/eslint-plugin': 5.9.0_bd2fd93dbcc607ad2f21b784bccfe0c8 - '@typescript-eslint/parser': 5.9.0_eslint@8.6.0+typescript@4.5.4 - '@vscode/test-electron': 2.0.2 + '@typescript-eslint/eslint-plugin': 5.9.1_b7b2e42b32ee097737cd3e626b10847b + '@typescript-eslint/parser': 5.9.1_eslint@8.6.0+typescript@4.5.4 + '@vscode/test-electron': 2.0.3 eslint: 8.6.0 eslint-config-prettier: 8.3.0_eslint@8.6.0 eslint-plugin-prettier: 4.0.0_1c588f61426b1faf18812943f1678311 @@ -141,8 +141,8 @@ packages: resolution: {integrity: sha512-Z+ZqjRcnGfHP86dvx/BtSwWyZPKQ/LBdmAVImY82TphyjOw2KgTKcp7Nx92oNwCTsHzlshwexAG/WiY2JuUm3g==} dev: true - /@typescript-eslint/eslint-plugin/5.9.0_bd2fd93dbcc607ad2f21b784bccfe0c8: - resolution: {integrity: sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==} + /@typescript-eslint/eslint-plugin/5.9.1_b7b2e42b32ee097737cd3e626b10847b: + resolution: {integrity: sha512-Xv9tkFlyD4MQGpJgTo6wqDqGvHIRmRgah/2Sjz1PUnJTawjHWIwBivUE9x0QtU2WVii9baYgavo/bHjrZJkqTw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -152,10 +152,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 5.9.0_eslint@8.6.0+typescript@4.5.4 - '@typescript-eslint/parser': 5.9.0_eslint@8.6.0+typescript@4.5.4 - '@typescript-eslint/scope-manager': 5.9.0 - '@typescript-eslint/type-utils': 5.9.0_eslint@8.6.0+typescript@4.5.4 + '@typescript-eslint/experimental-utils': 5.9.1_eslint@8.6.0+typescript@4.5.4 + '@typescript-eslint/parser': 5.9.1_eslint@8.6.0+typescript@4.5.4 + '@typescript-eslint/scope-manager': 5.9.1 + '@typescript-eslint/type-utils': 5.9.1_eslint@8.6.0+typescript@4.5.4 debug: 4.3.3 eslint: 8.6.0 functional-red-black-tree: 1.0.1 @@ -168,16 +168,16 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.9.0_eslint@8.6.0+typescript@4.5.4: - resolution: {integrity: sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==} + /@typescript-eslint/experimental-utils/5.9.1_eslint@8.6.0+typescript@4.5.4: + resolution: {integrity: sha512-cb1Njyss0mLL9kLXgS/eEY53SZQ9sT519wpX3i+U457l2UXRDuo87hgKfgRazmu9/tQb0x2sr3Y0yrU+Zz0y+w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.9 - '@typescript-eslint/scope-manager': 5.9.0 - '@typescript-eslint/types': 5.9.0 - '@typescript-eslint/typescript-estree': 5.9.0_typescript@4.5.4 + '@typescript-eslint/scope-manager': 5.9.1 + '@typescript-eslint/types': 5.9.1 + '@typescript-eslint/typescript-estree': 5.9.1_typescript@4.5.4 eslint: 8.6.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.6.0 @@ -186,8 +186,8 @@ packages: - typescript dev: true - /@typescript-eslint/parser/5.9.0_eslint@8.6.0+typescript@4.5.4: - resolution: {integrity: sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==} + /@typescript-eslint/parser/5.9.1_eslint@8.6.0+typescript@4.5.4: + resolution: {integrity: sha512-PLYO0AmwD6s6n0ZQB5kqPgfvh73p0+VqopQQLuNfi7Lm0EpfKyDalchpVwkE+81k5HeiRrTV/9w1aNHzjD7C4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -196,9 +196,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.9.0 - '@typescript-eslint/types': 5.9.0 - '@typescript-eslint/typescript-estree': 5.9.0_typescript@4.5.4 + '@typescript-eslint/scope-manager': 5.9.1 + '@typescript-eslint/types': 5.9.1 + '@typescript-eslint/typescript-estree': 5.9.1_typescript@4.5.4 debug: 4.3.3 eslint: 8.6.0 typescript: 4.5.4 @@ -206,16 +206,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager/5.9.0: - resolution: {integrity: sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==} + /@typescript-eslint/scope-manager/5.9.1: + resolution: {integrity: sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.9.0 - '@typescript-eslint/visitor-keys': 5.9.0 + '@typescript-eslint/types': 5.9.1 + '@typescript-eslint/visitor-keys': 5.9.1 dev: true - /@typescript-eslint/type-utils/5.9.0_eslint@8.6.0+typescript@4.5.4: - resolution: {integrity: sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==} + /@typescript-eslint/type-utils/5.9.1_eslint@8.6.0+typescript@4.5.4: + resolution: {integrity: sha512-tRSpdBnPRssjlUh35rE9ug5HrUvaB9ntREy7gPXXKwmIx61TNN7+l5YKgi1hMKxo5NvqZCfYhA5FvyuJG6X6vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -224,7 +224,7 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 5.9.0_eslint@8.6.0+typescript@4.5.4 + '@typescript-eslint/experimental-utils': 5.9.1_eslint@8.6.0+typescript@4.5.4 debug: 4.3.3 eslint: 8.6.0 tsutils: 3.21.0_typescript@4.5.4 @@ -233,13 +233,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types/5.9.0: - resolution: {integrity: sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==} + /@typescript-eslint/types/5.9.1: + resolution: {integrity: sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.9.0_typescript@4.5.4: - resolution: {integrity: sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==} + /@typescript-eslint/typescript-estree/5.9.1_typescript@4.5.4: + resolution: {integrity: sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -247,8 +247,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.9.0 - '@typescript-eslint/visitor-keys': 5.9.0 + '@typescript-eslint/types': 5.9.1 + '@typescript-eslint/visitor-keys': 5.9.1 debug: 4.3.3 globby: 11.1.0 is-glob: 4.0.3 @@ -259,11 +259,11 @@ packages: - supports-color dev: true - /@typescript-eslint/visitor-keys/5.9.0: - resolution: {integrity: sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==} + /@typescript-eslint/visitor-keys/5.9.1: + resolution: {integrity: sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.9.0 + '@typescript-eslint/types': 5.9.1 eslint-visitor-keys: 3.1.0 dev: true @@ -271,8 +271,8 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true - /@vscode/test-electron/2.0.2: - resolution: {integrity: sha512-myng+dso4WzOL0WbFS//JtYrUfqVDGI7U9lNRrC6Wm1oND+Nor3txn9klTaNj/39qrQ9jKv3ijv9ps1+cTOsig==} + /@vscode/test-electron/2.0.3: + resolution: {integrity: sha512-1QXF3hW2saWk01XRqh5CMtzdKZAfM27UO7eYnnx6gaqxwD1+TP4T5s8ACDgK5e9qvzOdMBMy75IVpJudBrDz4w==} engines: {node: '>=8.9.3'} dependencies: http-proxy-agent: 4.0.1 diff --git a/src/test/runTest.ts b/src/test/runTest.ts new file mode 100644 index 0000000..014c3a2 --- /dev/null +++ b/src/test/runTest.ts @@ -0,0 +1,23 @@ +import * as path from 'path'; + +import { runTests } from '@vscode/test-electron'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../'); + + // The path to test runner + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './suite/index'); + + // Download VS Code, unzip it and run the integration test + await runTests({ extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/src/test/suite/extension.test.ts b/src/test/suite/extension.test.ts new file mode 100644 index 0000000..64cd559 --- /dev/null +++ b/src/test/suite/extension.test.ts @@ -0,0 +1,15 @@ +import * as assert from 'assert'; + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +import * as vscode from 'vscode'; +// import * as myExtension from '../extension'; + +suite('Extension Test Suite 1', () => { + vscode.window.showInformationMessage('Start all tests.'); + + test('Sample test', () => { + assert.equal(-1, [1, 2, 3].indexOf(5)); + assert.equal(-1, [1, 2, 3].indexOf(0)); + }); +}); diff --git a/src/test/suite/index.ts b/src/test/suite/index.ts new file mode 100644 index 0000000..7029e38 --- /dev/null +++ b/src/test/suite/index.ts @@ -0,0 +1,38 @@ +import * as path from 'path'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + color: true + }); + + const testsRoot = path.resolve(__dirname, '..'); + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + console.error(err); + e(err); + } + }); + }); +} diff --git a/test-workspace/test.hbs b/test-workspace/test.hbs new file mode 100644 index 0000000..060f0a0 --- /dev/null +++ b/test-workspace/test.hbs @@ -0,0 +1,48 @@ +{{#if page}} + pageName: {{page.name}} +{{/if}} + +{{> @macro/code/test.hbs}} + +{{> @macro/name/test}} + +{{name}} + +{{#each page.ctrls}} + {{ctrl.codeName}} +{{/each}} + +{{#each apps as |app|}} + {{app.codeName}} + {{#each app.appEntities}} + {{codeName}} + {{#each ctrls as |ctrl|}} + {{ctrl.codeName}} + {{/each}} + {{#each pages as |page|}} + {{page.codeName}} + {{/each}} + {{/each}} +{{/each}} +{{#with system as |sys|}} + {{#each apps as |app|}} + {{app.codeName}} + {{app.appEntities}} + {{#each app.appEntities}} + {{app.codeName}} + {{codeName}} + {{#each pages as |page|}} + {{#each app.appEntities}}{{codeName}}{{/each}} + {{#each app.appEntities}}{{codeName}}{{/each}}{{#each app.appEntities}}{{codeName}}{{/each}}{{page.name}}{{page.codeName}} + {{page.codeName}} + {{system}} + {{#if page.codeName}} + {{/if}} + {{page.pageName}} + {{/each}} + {{#each pages as |page|}} + {{system}} + {{/each}} + {{/each}} + {{/each}} +{{/with}} diff --git a/tsconfig.json b/tsconfig.json index 8427a50..f35f570 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,22 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "ES2020", - "outDir": "out", - "lib": [ - "ES2020" - ], - "sourceMap": true, - "rootDir": "src", - "strict": true /* enable all strict type-checking options */ - /* Additional Checks */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - }, - "exclude": [ - "node_modules", - ".vscode-test" - ] + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "rootDir": "src", + "outDir": "out", + "lib": [ + "ES2020" + ], + "sourceMap": true, + "skipLibCheck": true, + "strict": true + }, + "include": [ + "src", + "test" + ], + "exclude": [ + "node_modules", + ".vscode-test" + ] } -- Gitee From 8dde03993d3059462ddeeb6d289b7f51d0674e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Fri, 14 Jan 2022 11:12:01 +0800 Subject: [PATCH 07/10] =?UTF-8?q?add:=20=E8=A1=A5=E5=85=85=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 57 ++++++++++++++++---------------- src/extension.ts | 3 +- src/model-completion-provider.ts | 10 +++--- src/test/runTest.ts | 4 ++- src/test/suite/extension.test.ts | 51 +++++++++++++++++++++------- test-workspace/test.hbs | 2 +- 6 files changed, 79 insertions(+), 48 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 670d6e6..d60c9af 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,32 +3,33 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" - ], - "outFiles": [ - "${workspaceFolder}/out/test/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index", + "${workspaceFolder}/test-workspace" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] } diff --git a/src/extension.ts b/src/extension.ts index 97c722c..1536fe5 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -2,9 +2,10 @@ import * as vscode from 'vscode'; import { Model } from './model'; import { ModelCompletionProvider } from './model-completion-provider'; -export function activate(context: vscode.ExtensionContext) { +export function activate(context: vscode.ExtensionContext): vscode.ExtensionContext { Model.getInstance().setContext(context); new ModelCompletionProvider(context); + return context; } export function deactivate() {} diff --git a/src/model-completion-provider.ts b/src/model-completion-provider.ts index 506e480..55d656a 100644 --- a/src/model-completion-provider.ts +++ b/src/model-completion-provider.ts @@ -45,7 +45,7 @@ export class ModelCompletionProvider implements CompletionItemProvider { protected contexts: ContextItem[] = []; constructor(protected context: ExtensionContext) { - context.subscriptions.push(languages.registerCompletionItemProvider('handlebars', this, '.')); + context.subscriptions.push(languages.registerCompletionItemProvider('handlebars', this, '.', 'editor.action.triggerSuggest')); } provideCompletionItems( @@ -62,16 +62,16 @@ export class ModelCompletionProvider implements CompletionItemProvider { const lineText = line.text; // 行内光标前的内容 const lineTextBeforeCursor = lineText.substring(0, position.character); + const variable = lineTextBeforeCursor.substring(lineTextBeforeCursor.lastIndexOf('{{'), lineTextBeforeCursor.length); // 当是助手中时,获取助手中的第一组变量 - const reg = helperVariableReg.exec(lineTextBeforeCursor); + const reg = helperVariableReg.exec(variable); // 内容中是否包含开始标签 - if (lineTextBeforeCursor.indexOf('{{') !== -1) { + if (variable.indexOf('{{') !== -1) { // 当为结束标签 或者 助手的前半部分时忽略 - if (lineTextBeforeCursor.lastIndexOf('{{/') !== -1 || (lineTextBeforeCursor.lastIndexOf('{{#') !== -1 && !reg)) { + if (variable.lastIndexOf('{{/') !== -1 || (variable.lastIndexOf('{{#') !== -1 && !reg)) { return []; } // 截取最后一个开始标签后的内容 - const variable = lineTextBeforeCursor.substring(lineTextBeforeCursor.lastIndexOf('{{'), lineTextBeforeCursor.length); // 最后一个开始标签后的内容没有闭合 if (variable.indexOf('}}') === -1) { // 计算文本当中所有的标签域 diff --git a/src/test/runTest.ts b/src/test/runTest.ts index 014c3a2..5bdd1bc 100644 --- a/src/test/runTest.ts +++ b/src/test/runTest.ts @@ -12,8 +12,10 @@ async function main() { // Passed to --extensionTestsPath const extensionTestsPath = path.resolve(__dirname, './suite/index'); + const workspacePath = path.resolve(__dirname, '../../../test-workspace'); + // Download VS Code, unzip it and run the integration test - await runTests({ extensionDevelopmentPath, extensionTestsPath }); + await runTests({ extensionDevelopmentPath, extensionTestsPath, launchArgs: [workspacePath] }); } catch (err) { console.error('Failed to run tests'); process.exit(1); diff --git a/src/test/suite/extension.test.ts b/src/test/suite/extension.test.ts index 64cd559..aceab62 100644 --- a/src/test/suite/extension.test.ts +++ b/src/test/suite/extension.test.ts @@ -1,15 +1,42 @@ -import * as assert from 'assert'; - -// You can import and use all API from the 'vscode' module -// as well as import your extension to test it import * as vscode from 'vscode'; -// import * as myExtension from '../extension'; - -suite('Extension Test Suite 1', () => { - vscode.window.showInformationMessage('Start all tests.'); +import * as assert from 'assert'; +import { ModelCompletionProvider } from '../../model-completion-provider'; - test('Sample test', () => { - assert.equal(-1, [1, 2, 3].indexOf(5)); - assert.equal(-1, [1, 2, 3].indexOf(0)); - }); +suite('自动填充测试', () => { + test('多层嵌套下的正确性', async () => { + const { workspace, Uri, commands, extensions } = vscode; + if (workspace.workspaceFolders && workspace.workspaceFolders.length > 0) { + // 当前打开的工作区文件夹 + const folder = workspace.workspaceFolders[0]; + // 需要测试的文件路径 + const uri = Uri.joinPath(folder.uri, 'test.hbs'); + commands.executeCommand('vscode.open', uri); + const document = await workspace.openTextDocument(uri); + const ex = extensions.getExtension('ibizlab.ibiz-model-completion'); + if (ex && ex.isActive) { + const context = await ex.activate(); + const provider = new ModelCompletionProvider(context); + { + // 触发 测试文件中 第 36 行 最后一组 {{page.}} 的自动填充 + const items = (await provider.provideCompletionItems(document, new vscode.Position(35, 120), new vscode.CancellationTokenSource().token, { + triggerKind: vscode.CompletionTriggerKind.TriggerCharacter, + triggerCharacter: '.', + })) as vscode.CompletionItem[]; + const str = items.map(item => item.label).join(':'); + assert.equal(str, 'name:codeName:pageName'); + } + { + // 触发 测试文件中 第 30 行 {{#each app.appEntities}} 中已经启用别名的 app. 的自动填充触发 + const items = (await provider.provideCompletionItems(document, new vscode.Position(30, 16), new vscode.CancellationTokenSource().token, { + triggerKind: vscode.CompletionTriggerKind.TriggerCharacter, + triggerCharacter: '.', + })) as vscode.CompletionItem[]; + const str = items.map(item => item.label).join(':'); + assert.equal(str, 'name:codeName:appEntities'); + } + } else { + throw new Error('插件初始化异常,无法获取插件上下文'); + } + } + }); }); diff --git a/test-workspace/test.hbs b/test-workspace/test.hbs index 060f0a0..97dcadf 100644 --- a/test-workspace/test.hbs +++ b/test-workspace/test.hbs @@ -33,7 +33,7 @@ {{codeName}} {{#each pages as |page|}} {{#each app.appEntities}}{{codeName}}{{/each}} - {{#each app.appEntities}}{{codeName}}{{/each}}{{#each app.appEntities}}{{codeName}}{{/each}}{{page.name}}{{page.codeName}} + {{#each app.appEntities}}{{codeName}}{{/each}}{{#each app.appEntities}}{{codeName}}{{/each}}{{page.name}}{{page.}} {{page.codeName}} {{system}} {{#if page.codeName}} -- Gitee From bdc65800842f8252ea9d6d8cfba3e823995720c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Fri, 14 Jan 2022 11:16:35 +0800 Subject: [PATCH 08/10] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/suite/extension.test.ts | 14 ++++++++++++++ test-workspace/test.hbs | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/test/suite/extension.test.ts b/src/test/suite/extension.test.ts index aceab62..af8a29a 100644 --- a/src/test/suite/extension.test.ts +++ b/src/test/suite/extension.test.ts @@ -10,11 +10,16 @@ suite('自动填充测试', () => { const folder = workspace.workspaceFolders[0]; // 需要测试的文件路径 const uri = Uri.joinPath(folder.uri, 'test.hbs'); + // 打开测试文件 commands.executeCommand('vscode.open', uri); + // 获取测试文件 document 对象 const document = await workspace.openTextDocument(uri); + // 找到插件 const ex = extensions.getExtension('ibizlab.ibiz-model-completion'); if (ex && ex.isActive) { + // 获取插件上下文 const context = await ex.activate(); + // 初始化自动填充适配器 const provider = new ModelCompletionProvider(context); { // 触发 测试文件中 第 36 行 最后一组 {{page.}} 的自动填充 @@ -34,6 +39,15 @@ suite('自动填充测试', () => { const str = items.map(item => item.label).join(':'); assert.equal(str, 'name:codeName:appEntities'); } + { + // 触发 测试文件中 第 44 行在多层嵌套下顶级别名 {{sys.}} 的自动填充触发 + const items = (await provider.provideCompletionItems(document, new vscode.Position(43, 14), new vscode.CancellationTokenSource().token, { + triggerKind: vscode.CompletionTriggerKind.TriggerCharacter, + triggerCharacter: '.', + })) as vscode.CompletionItem[]; + const str = items.map(item => item.label).join(':'); + assert.equal(str, 'name:codeName:apps:app'); + } } else { throw new Error('插件初始化异常,无法获取插件上下文'); } diff --git a/test-workspace/test.hbs b/test-workspace/test.hbs index 97dcadf..5d4dbfe 100644 --- a/test-workspace/test.hbs +++ b/test-workspace/test.hbs @@ -41,7 +41,7 @@ {{page.pageName}} {{/each}} {{#each pages as |page|}} - {{system}} + {{sys.}} {{/each}} {{/each}} {{/each}} -- Gitee From 7244f9c19b7b326d102b59ed6da11177696a353e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Wed, 19 Jan 2022 20:07:15 +0800 Subject: [PATCH 09/10] =?UTF-8?q?add:=20=E8=A1=A5=E5=85=85=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E9=80=82=E9=85=8D=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +- resources/model/IPSModelData.json | 9 + resources/model/IPSModelObject.json | 1 + resources/model/IPSModelSortable.json | 1 + resources/model/IPSObject.json | 1 + resources/model/IPSSystem.json | 50 ++++ resources/model/app.json | 6 +- resources/model/app/IPSAppLan.json | 1 + resources/model/app/IPSAppModule.json | 1 + resources/model/app/IPSAppPDTView.json | 1 + resources/model/app/IPSAppPkg.json | 1 + resources/model/app/IPSAppResource.json | 1 + resources/model/app/IPSAppUIStyle.json | 1 + resources/model/app/IPSAppUtilPage.json | 1 + resources/model/app/IPSApplication.json | 1 + resources/model/app/IPSApplicationLogic.json | 1 + resources/model/app/IPSApplicationObject.json | 1 + resources/model/app/IPSApplicationUI.json | 1 + .../model/app/appmenu/IPSAppMenuModel.json | 1 + .../model/app/codelist/IPSAppCodeList.json | 1 + .../model/app/control/IPSAppCounter.json | 1 + .../model/app/control/IPSAppCounterRef.json | 1 + .../model/app/control/IPSAppPortlet.json | 1 + .../model/app/control/IPSAppPortletCat.json | 1 + .../app/control/IPSAppViewQuickGroup.json | 1 + .../app/control/IPSAppViewQuickGroupItem.json | 1 + .../model/app/dataentity/IPSAppDEACMode.json | 1 + .../dataentity/IPSAppDEACModeDataItem.json | 1 + .../model/app/dataentity/IPSAppDEAction.json | 1 + .../app/dataentity/IPSAppDEActionInput.json | 1 + .../dataentity/IPSAppDEActionInputParam.json | 1 + .../app/dataentity/IPSAppDEActionLogic.json | 1 + .../model/app/dataentity/IPSAppDEDRGroup.json | 1 + .../model/app/dataentity/IPSAppDEDRItem.json | 1 + .../app/dataentity/IPSAppDEDataExport.json | 1 + .../dataentity/IPSAppDEDataExportItem.json | 1 + .../app/dataentity/IPSAppDEDataImport.json | 1 + .../dataentity/IPSAppDEDataImportItem.json | 1 + .../model/app/dataentity/IPSAppDEDataSet.json | 1 + .../model/app/dataentity/IPSAppDEFLogic.json | 1 + .../model/app/dataentity/IPSAppDEFUIItem.json | 1 + .../model/app/dataentity/IPSAppDEFUIMode.json | 1 + .../app/dataentity/IPSAppDEFValueRule.json | 1 + .../model/app/dataentity/IPSAppDEField.json | 1 + .../model/app/dataentity/IPSAppDELogic.json | 1 + .../app/dataentity/IPSAppDELogicLink.json | 1 + .../app/dataentity/IPSAppDELogicLinkCond.json | 1 + .../app/dataentity/IPSAppDELogicNode.json | 1 + .../dataentity/IPSAppDELogicNodeParam.json | 1 + .../app/dataentity/IPSAppDELogicParam.json | 1 + .../model/app/dataentity/IPSAppDEMethod.json | 1 + .../app/dataentity/IPSAppDEMethodDTO.json | 1 + .../dataentity/IPSAppDEMethodDTOField.json | 1 + .../app/dataentity/IPSAppDEMethodInput.json | 1 + .../app/dataentity/IPSAppDEMethodLogic.json | 1 + .../app/dataentity/IPSAppDEMethodReturn.json | 1 + .../model/app/dataentity/IPSAppDERS.json | 1 + .../app/dataentity/IPSAppDEUIAction.json | 1 + .../app/dataentity/IPSAppDEUIActionGroup.json | 1 + .../IPSAppDEUIActionGroupDetail.json | 1 + .../model/app/dataentity/IPSAppDEUILogic.json | 1 + .../app/dataentity/IPSAppDEUILogicGroup.json | 1 + .../IPSAppDEUILogicGroupDetail.json | 1 + .../app/dataentity/IPSAppDEUILogicLink.json | 1 + .../dataentity/IPSAppDEUILogicLinkCond.json | 1 + .../app/dataentity/IPSAppDEUILogicNode.json | 1 + .../dataentity/IPSAppDEUILogicNodeParam.json | 1 + .../app/dataentity/IPSAppDEUILogicParam.json | 1 + .../app/dataentity/IPSAppDataEntity.json | 1 + .../dataentity/IPSAppDataEntityObject.json | 1 + resources/model/app/func/IPSAppFunc.json | 1 + resources/model/app/logic/IPSAppUILogic.json | 1 + .../model/app/logic/IPSAppUILogicRefView.json | 1 + .../app/logic/IPSAppUILogicRefViewBase.json | 1 + .../model/app/logic/IPSAppUINewDataLogic.json | 1 + .../app/logic/IPSAppUIOpenDataLogic.json | 1 + resources/model/app/mob/IPSAppLocalDE.json | 1 + resources/model/app/mob/IPSMobAppIcon.json | 1 + .../model/app/mob/IPSMobAppStartPage.json | 1 + resources/model/app/msg/IPSAppMsgTempl.json | 1 + resources/model/app/pub/IPSAppViewCode.json | 1 + resources/model/app/res/IPSAppCss.json | 1 + .../model/app/res/IPSAppEditorStyleRef.json | 1 + resources/model/app/res/IPSAppImage.json | 1 + .../model/app/res/IPSAppPFPluginRef.json | 1 + .../model/app/res/IPSAppSubViewTypeRef.json | 1 + resources/model/app/theme/IPSAppUITheme.json | 1 + .../model/app/usermode/IPSAppUserMode.json | 1 + .../app/util/IPSAppDraftStorageUtil.json | 1 + .../app/util/IPSAppDynaDashboardUtil.json | 1 + .../model/app/util/IPSAppDynaUtilBase.json | 1 + .../app/util/IPSAppFilterStorageUtil.json | 1 + resources/model/app/util/IPSAppUtil.json | 1 + .../model/app/valuerule/IPSAppValueRule.json | 1 + .../view/IPSAppDECalendarExplorerView.json | 1 + .../model/app/view/IPSAppDECalendarView.json | 1 + .../app/view/IPSAppDEChartExplorerView.json | 1 + .../model/app/view/IPSAppDEChartView.json | 1 + .../model/app/view/IPSAppDECustomView.json | 1 + .../model/app/view/IPSAppDEDashboardView.json | 1 + .../app/view/IPSAppDEDataSetViewMsg.json | 1 + .../model/app/view/IPSAppDEDataView.json | 1 + .../view/IPSAppDEDataViewExplorerView.json | 1 + .../model/app/view/IPSAppDEEditView.json | 6 + .../model/app/view/IPSAppDEExplorerView.json | 1 + .../app/view/IPSAppDEGanttExplorerView.json | 1 + .../model/app/view/IPSAppDEGanttView.json | 1 + .../app/view/IPSAppDEGridExplorerView.json | 1 + .../model/app/view/IPSAppDEGridView.json | 6 + .../model/app/view/IPSAppDEGridView8.json | 1 + .../model/app/view/IPSAppDEHtmlView.json | 1 + .../model/app/view/IPSAppDEIndexView.json | 1 + .../model/app/view/IPSAppDEKanbanView.json | 1 + .../app/view/IPSAppDEListExplorerView.json | 1 + .../model/app/view/IPSAppDEListView.json | 1 + .../model/app/view/IPSAppDEMEditView.json | 1 + .../app/view/IPSAppDEMapExplorerView.json | 1 + resources/model/app/view/IPSAppDEMapView.json | 1 + .../view/IPSAppDEMobCalendarExplorerView.json | 1 + .../app/view/IPSAppDEMobCalendarView.json | 1 + .../view/IPSAppDEMobChartExplorerView.json | 1 + .../model/app/view/IPSAppDEMobChartView.json | 1 + .../model/app/view/IPSAppDEMobCustomView.json | 1 + .../app/view/IPSAppDEMobDashboardView.json | 1 + .../model/app/view/IPSAppDEMobDataView.json | 1 + .../view/IPSAppDEMobDataViewExplorerView.json | 1 + .../model/app/view/IPSAppDEMobEditView.json | 1 + .../view/IPSAppDEMobGanttExplorerView.json | 1 + .../model/app/view/IPSAppDEMobGanttView.json | 1 + .../model/app/view/IPSAppDEMobHtmlView.json | 1 + .../app/view/IPSAppDEMobListExplorerView.json | 1 + .../model/app/view/IPSAppDEMobListView.json | 1 + .../model/app/view/IPSAppDEMobMDView.json | 1 + .../model/app/view/IPSAppDEMobMEditView.json | 1 + .../app/view/IPSAppDEMobMapExplorerView.json | 1 + .../model/app/view/IPSAppDEMobMapView.json | 1 + .../model/app/view/IPSAppDEMobPanelView.json | 1 + .../model/app/view/IPSAppDEMobPickupView.json | 1 + .../app/view/IPSAppDEMobRedirectView.json | 1 + .../model/app/view/IPSAppDEMobReportView.json | 1 + .../app/view/IPSAppDEMobTabExplorerView.json | 1 + .../app/view/IPSAppDEMobTabSearchView.json | 1 + .../app/view/IPSAppDEMobTreeExplorerView.json | 1 + .../model/app/view/IPSAppDEMobTreeView.json | 1 + resources/model/app/view/IPSAppDEMobView.json | 1 + .../app/view/IPSAppDEMobWFActionView.json | 1 + .../view/IPSAppDEMobWFDataRedirectView.json | 1 + .../app/view/IPSAppDEMobWFDynaActionView.json | 1 + .../app/view/IPSAppDEMobWFDynaEditView.json | 1 + .../app/view/IPSAppDEMobWFDynaExpMDView.json | 1 + .../app/view/IPSAppDEMobWFDynaStartView.json | 1 + .../model/app/view/IPSAppDEMobWFEditView.json | 1 + .../model/app/view/IPSAppDEMobWFMDView.json | 1 + .../view/IPSAppDEMobWFProxyResultView.json | 1 + .../app/view/IPSAppDEMobWFProxyStartView.json | 1 + .../model/app/view/IPSAppDEMobWFView.json | 1 + .../model/app/view/IPSAppDEMobWizardView.json | 1 + .../model/app/view/IPSAppDEMultiDataView.json | 1 + .../app/view/IPSAppDEMultiDataView2.json | 1 + .../model/app/view/IPSAppDEPanelView.json | 1 + .../model/app/view/IPSAppDEPickupView.json | 1 + .../model/app/view/IPSAppDERedirectView.json | 1 + .../model/app/view/IPSAppDEReportView.json | 1 + .../model/app/view/IPSAppDESearchView.json | 1 + .../model/app/view/IPSAppDESearchView2.json | 1 + .../app/view/IPSAppDESideBarExplorerView.json | 1 + .../app/view/IPSAppDETabExplorerView.json | 1 + .../model/app/view/IPSAppDETabFormView.json | 1 + .../model/app/view/IPSAppDETabSearchView.json | 1 + .../app/view/IPSAppDETreeExplorerView.json | 1 + .../app/view/IPSAppDETreeGridExView.json | 1 + .../model/app/view/IPSAppDETreeGridView.json | 1 + .../model/app/view/IPSAppDETreeView.json | 1 + resources/model/app/view/IPSAppDEView.json | 4 + .../model/app/view/IPSAppDEViewBase.json | 1 + .../model/app/view/IPSAppDEViewLogic.json | 1 + .../model/app/view/IPSAppDEWFActionView.json | 1 + .../app/view/IPSAppDEWFDataRedirectView.json | 1 + .../app/view/IPSAppDEWFDynaActionView.json | 1 + .../app/view/IPSAppDEWFDynaEditView.json | 1 + .../app/view/IPSAppDEWFDynaExpGridView.json | 1 + .../app/view/IPSAppDEWFDynaStartView.json | 1 + .../app/view/IPSAppDEWFEditProxyDataView.json | 1 + .../model/app/view/IPSAppDEWFEditView.json | 1 + .../app/view/IPSAppDEWFExplorerView.json | 1 + .../model/app/view/IPSAppDEWFGridView.json | 1 + .../view/IPSAppDEWFProxyDataRedirectView.json | 1 + .../app/view/IPSAppDEWFProxyDataView.json | 1 + .../app/view/IPSAppDEWFProxyResultView.json | 1 + .../app/view/IPSAppDEWFProxyStartView.json | 1 + resources/model/app/view/IPSAppDEWFView.json | 1 + .../model/app/view/IPSAppDEWizardView.json | 1 + .../model/app/view/IPSAppDEXDataView.json | 1 + .../app/view/IPSAppDataRelationView.json | 1 + resources/model/app/view/IPSAppErrorView.json | 1 + .../model/app/view/IPSAppExplorerView.json | 1 + .../model/app/view/IPSAppFuncPickupView.json | 1 + resources/model/app/view/IPSAppIndexView.json | 1 + resources/model/app/view/IPSAppMobView.json | 1 + resources/model/app/view/IPSAppPanelView.json | 1 + .../model/app/view/IPSAppPortalView.json | 1 + .../model/app/view/IPSAppRedirectView.json | 1 + resources/model/app/view/IPSAppUIAction.json | 1 + resources/model/app/view/IPSAppUtilView.json | 1 + resources/model/app/view/IPSAppView.json | 255 ++++++++++++++++++ resources/model/app/view/IPSAppViewBase.json | 1 + .../model/app/view/IPSAppViewEngine.json | 1 + .../model/app/view/IPSAppViewEngineParam.json | 1 + resources/model/app/view/IPSAppViewLogic.json | 1 + resources/model/app/view/IPSAppViewMsg.json | 1 + .../model/app/view/IPSAppViewMsgGroup.json | 1 + .../app/view/IPSAppViewMsgGroupDetail.json | 1 + .../model/app/view/IPSAppViewNavContext.json | 1 + .../model/app/view/IPSAppViewNavParam.json | 1 + resources/model/app/view/IPSAppViewParam.json | 1 + resources/model/app/view/IPSAppViewRef.json | 1 + .../model/app/view/IPSAppViewUIAction.json | 1 + .../model/app/view/IPSDEUIActionItem.json | 1 + resources/model/app/view/IPSUIActionItem.json | 1 + .../model/app/view/IPSWFUIActionItem.json | 1 + resources/model/app/wf/IPSAppWF.json | 1 + resources/model/app/wf/IPSAppWFUIAction.json | 1 + .../model/app/wf/IPSAppWFUIActionGroup.json | 1 + .../app/wf/IPSAppWFUIActionGroupDetail.json | 1 + .../model/app/wf/IPSAppWFUtilUIAction.json | 1 + resources/model/app/wf/IPSAppWFVer.json | 1 + resources/model/appEntities.json | 2 +- resources/model/appEntity.json | 6 +- resources/model/apps.json | 2 +- .../model/backservice/IPSSysBackService.json | 1 + resources/model/bi/IPSBIAggColumn.json | 1 + resources/model/bi/IPSBIAggTable.json | 1 + resources/model/bi/IPSBIAggTableObject.json | 1 + resources/model/bi/IPSBICube.json | 1 + resources/model/bi/IPSBICubeDimension.json | 1 + .../model/bi/IPSBICubeDimensionObject.json | 1 + resources/model/bi/IPSBICubeLevel.json | 1 + resources/model/bi/IPSBICubeMeasure.json | 1 + resources/model/bi/IPSBICubeObject.json | 1 + resources/model/bi/IPSBIDimension.json | 1 + resources/model/bi/IPSBIDimensionObject.json | 1 + resources/model/bi/IPSBIHierarchy.json | 1 + resources/model/bi/IPSBIHierarchyObject.json | 1 + resources/model/bi/IPSBILevel.json | 1 + resources/model/bi/IPSBIReport.json | 1 + resources/model/bi/IPSBIReportDimension.json | 1 + resources/model/bi/IPSBIReportItem.json | 1 + resources/model/bi/IPSBIReportMeasure.json | 1 + resources/model/bi/IPSBIReportObject.json | 1 + resources/model/bi/IPSBIScheme.json | 1 + resources/model/bi/IPSBISchemeObject.json | 1 + resources/model/bi/IPSSysBIAggColumn.json | 1 + resources/model/bi/IPSSysBIAggTable.json | 1 + .../model/bi/IPSSysBIAggTableObject.json | 1 + resources/model/bi/IPSSysBICube.json | 1 + resources/model/bi/IPSSysBICubeDimension.json | 1 + .../model/bi/IPSSysBICubeDimensionObject.json | 1 + resources/model/bi/IPSSysBICubeLevel.json | 1 + resources/model/bi/IPSSysBICubeMeasure.json | 1 + resources/model/bi/IPSSysBICubeObject.json | 1 + resources/model/bi/IPSSysBIDimension.json | 1 + .../model/bi/IPSSysBIDimensionObject.json | 1 + resources/model/bi/IPSSysBIHierarchy.json | 1 + .../model/bi/IPSSysBIHierarchyObject.json | 1 + resources/model/bi/IPSSysBILevel.json | 1 + resources/model/bi/IPSSysBIReport.json | 1 + .../model/bi/IPSSysBIReportDimension.json | 1 + resources/model/bi/IPSSysBIReportItem.json | 1 + resources/model/bi/IPSSysBIReportMeasure.json | 1 + resources/model/bi/IPSSysBIReportObject.json | 1 + resources/model/bi/IPSSysBIScheme.json | 1 + resources/model/bi/IPSSysBISchemeObject.json | 1 + resources/model/codelist/IPSCodeItem.json | 1 + resources/model/codelist/IPSCodeList.json | 1 + resources/model/codelist/IPSThreshold.json | 1 + .../model/codelist/IPSThresholdGroup.json | 1 + resources/model/control/IPSAjaxControl.json | 1 + .../model/control/IPSAjaxControlParam.json | 1 + resources/model/control/IPSAjaxEditor.json | 1 + resources/model/control/IPSControl.json | 1 + resources/model/control/IPSControlAction.json | 1 + .../model/control/IPSControlContainer.json | 1 + .../model/control/IPSControlHandler.json | 1 + .../control/IPSControlHandlerAction.json | 1 + resources/model/control/IPSControlLogic.json | 1 + .../model/control/IPSControlMDObject.json | 1 + .../control/IPSControlMDataContainer.json | 1 + .../model/control/IPSControlNavContext.json | 1 + .../model/control/IPSControlNavParam.json | 1 + .../model/control/IPSControlNavigatable.json | 1 + .../control/IPSControlObjectNavigatable.json | 1 + resources/model/control/IPSControlParam.json | 1 + .../control/IPSControlXDataContainer.json | 1 + resources/model/control/IPSEditor.json | 1 + .../model/control/IPSEditorContainer.json | 1 + resources/model/control/IPSMDAjaxControl.json | 1 + .../model/control/IPSMDAjaxControlParam.json | 1 + resources/model/control/IPSMDControl.json | 1 + resources/model/control/IPSMDControl2.json | 1 + resources/model/control/IPSNavigatable.json | 1 + .../model/control/IPSNavigateContext.json | 1 + resources/model/control/IPSNavigateParam.json | 1 + .../control/IPSNavigateParamContainer.json | 1 + resources/model/control/IPSRawItem.json | 1 + resources/model/control/IPSSDAjaxControl.json | 1 + .../model/control/IPSSDAjaxControlParam.json | 1 + resources/model/control/IPSSDControl.json | 1 + resources/model/control/IPSUserControl.json | 1 + .../control/ajax/IPSAjaxControlHandler.json | 1 + .../ajax/IPSAjaxControlHandlerAction.json | 1 + .../model/control/ajax/IPSAjaxHandler.json | 1 + .../control/ajax/IPSAjaxHandlerAction.json | 1 + .../control/ajax/IPSMDAjaxControlHandler.json | 1 + .../control/ajax/IPSSDAjaxControlHandler.json | 1 + resources/model/control/button/IPSButton.json | 1 + .../control/button/IPSButtonContainer.json | 1 + .../model/control/calendar/IPSCalendar.json | 1 + .../control/calendar/IPSCalendarItem.json | 1 + .../control/calendar/IPSCalendarParam.json | 1 + .../model/control/calendar/IPSDECalendar.json | 1 + .../control/calendar/IPSDECalendarItem.json | 1 + .../control/calendar/IPSSysCalendar.json | 1 + .../control/calendar/IPSSysCalendarItem.json | 1 + .../calendar/IPSSysCalendarItemRV.json | 1 + .../control/calendar/IPSSysCalendarParam.json | 1 + .../control/captionbar/IPSCaptionBar.json | 1 + .../captionbar/IPSCaptionBarParam.json | 1 + resources/model/control/chart/IPSChart.json | 1 + .../control/chart/IPSChartAngleAxis.json | 1 + .../model/control/chart/IPSChartAxes.json | 1 + .../model/control/chart/IPSChartAxis.json | 1 + .../model/control/chart/IPSChartCalendar.json | 1 + .../chart/IPSChartCoordinateSystem.json | 1 + .../IPSChartCoordinateSystemCalendar.json | 1 + .../IPSChartCoordinateSystemCartesian2D.json | 1 + .../IPSChartCoordinateSystemControl.json | 1 + .../chart/IPSChartCoordinateSystemGeo.json | 1 + .../chart/IPSChartCoordinateSystemNone.json | 1 + .../IPSChartCoordinateSystemParallel.json | 1 + .../chart/IPSChartCoordinateSystemPolar.json | 1 + .../chart/IPSChartCoordinateSystemRadar.json | 1 + .../chart/IPSChartCoordinateSystemSingle.json | 1 + .../model/control/chart/IPSChartDataItem.json | 1 + .../model/control/chart/IPSChartDataSet.json | 1 + .../control/chart/IPSChartDataSetField.json | 1 + .../control/chart/IPSChartDataSetGroup.json | 1 + .../model/control/chart/IPSChartGeo.json | 1 + .../model/control/chart/IPSChartGrid.json | 1 + .../model/control/chart/IPSChartGridAxis.json | 1 + .../control/chart/IPSChartGridXAxis.json | 1 + .../control/chart/IPSChartGridYAxis.json | 1 + .../model/control/chart/IPSChartLegend.json | 1 + .../model/control/chart/IPSChartObject.json | 1 + .../model/control/chart/IPSChartParallel.json | 1 + .../control/chart/IPSChartParallelAxis.json | 1 + .../model/control/chart/IPSChartPolar.json | 1 + .../control/chart/IPSChartPolarAngleAxis.json | 1 + .../control/chart/IPSChartPolarAxis.json | 1 + .../chart/IPSChartPolarRadiusAxis.json | 1 + .../model/control/chart/IPSChartPosition.json | 1 + .../model/control/chart/IPSChartRadar.json | 1 + .../control/chart/IPSChartRadiusAxis.json | 1 + .../model/control/chart/IPSChartSeries.json | 1 + .../control/chart/IPSChartSeriesBar.json | 1 + .../control/chart/IPSChartSeriesBoxplot.json | 1 + .../IPSChartSeriesCSCartesian2DEncode.json | 1 + .../chart/IPSChartSeriesCSGeoEncode.json | 1 + .../control/chart/IPSChartSeriesCSNone.json | 1 + .../chart/IPSChartSeriesCSNoneEncode.json | 1 + .../chart/IPSChartSeriesCSPolarEncode.json | 1 + .../chart/IPSChartSeriesCSSingleEncode.json | 1 + .../chart/IPSChartSeriesCandlestick.json | 1 + .../control/chart/IPSChartSeriesCustom.json | 1 + .../control/chart/IPSChartSeriesEncode.json | 1 + .../control/chart/IPSChartSeriesFunnel.json | 1 + .../control/chart/IPSChartSeriesGauge.json | 1 + .../control/chart/IPSChartSeriesGraph.json | 1 + .../control/chart/IPSChartSeriesHeatmap.json | 1 + .../control/chart/IPSChartSeriesLine.json | 1 + .../control/chart/IPSChartSeriesLines.json | 1 + .../control/chart/IPSChartSeriesMap.json | 1 + .../control/chart/IPSChartSeriesParallel.json | 1 + .../chart/IPSChartSeriesPictorialBar.json | 1 + .../control/chart/IPSChartSeriesPie.json | 1 + .../control/chart/IPSChartSeriesRadar.json | 1 + .../control/chart/IPSChartSeriesSankey.json | 1 + .../control/chart/IPSChartSeriesScatter.json | 1 + .../control/chart/IPSChartSeriesSunburst.json | 1 + .../chart/IPSChartSeriesThemeRiver.json | 1 + .../control/chart/IPSChartSeriesTree.json | 1 + .../control/chart/IPSChartSeriesTreemap.json | 1 + .../model/control/chart/IPSChartSingle.json | 1 + .../control/chart/IPSChartSingleAxis.json | 1 + .../model/control/chart/IPSChartTimeline.json | 1 + .../model/control/chart/IPSChartTitle.json | 1 + .../control/chart/IPSChartVisualMap.json | 1 + .../model/control/chart/IPSChartXAxis.json | 1 + .../model/control/chart/IPSChartYAxis.json | 1 + resources/model/control/chart/IPSDEChart.json | 1 + .../model/control/chart/IPSDEChartAxes.json | 1 + .../control/chart/IPSDEChartCalendar.json | 1 + .../chart/IPSDEChartCoordinateSystem.json | 1 + .../control/chart/IPSDEChartDataSet.json | 1 + .../control/chart/IPSDEChartDataSetField.json | 1 + .../control/chart/IPSDEChartDataSetGroup.json | 1 + .../model/control/chart/IPSDEChartGeo.json | 1 + .../model/control/chart/IPSDEChartGrid.json | 1 + .../control/chart/IPSDEChartHandler.json | 1 + .../model/control/chart/IPSDEChartLegend.json | 1 + .../model/control/chart/IPSDEChartObject.json | 1 + .../control/chart/IPSDEChartParallel.json | 1 + .../model/control/chart/IPSDEChartParam.json | 1 + .../model/control/chart/IPSDEChartPolar.json | 1 + .../model/control/chart/IPSDEChartRadar.json | 1 + .../model/control/chart/IPSDEChartSeries.json | 1 + .../control/chart/IPSDEChartSeriesEncode.json | 1 + .../model/control/chart/IPSDEChartSingle.json | 1 + .../model/control/chart/IPSDEChartTitle.json | 1 + .../control/chart/IPSDEChartVisualMap.json | 1 + resources/model/control/chart/IPSECharts.json | 1 + .../model/control/chart/IPSEChartsObject.json | 1 + .../model/control/counter/IPSCounter.json | 1 + .../model/control/counter/IPSCounterType.json | 1 + .../model/control/counter/IPSDEDRCounter.json | 1 + .../model/control/counter/IPSSysCounter.json | 1 + .../control/counter/IPSSysCounterItem.json | 1 + .../control/counter/IPSSysCounterRef.json | 1 + .../control/custom/IPSCustomControl.json | 1 + .../custom/IPSCustomControlHandler.json | 1 + .../control/custom/IPSCustomControlParam.json | 1 + .../dashboard/IPSDBAppMenuPortletPart.json | 1 + .../IPSDBAppMenuPortletPartParam.json | 1 + .../dashboard/IPSDBAppViewPortletPart.json | 1 + .../IPSDBAppViewPortletPartParam.json | 1 + .../control/dashboard/IPSDBChartPortlet.json | 1 + .../dashboard/IPSDBContainerPortletPart.json | 1 + .../IPSDBContainerPortletPartParam.json | 1 + .../dashboard/IPSDBCustomPortletPart.json | 1 + .../dashboard/IPSDBHtmlPortletPart.json | 1 + .../dashboard/IPSDBListPortletPart.json | 1 + .../dashboard/IPSDBMenuPortletPart.json | 1 + .../control/dashboard/IPSDBPortletPart.json | 1 + .../dashboard/IPSDBPortletPartParam.json | 1 + .../dashboard/IPSDBRawItemPortletPart.json | 1 + .../IPSDBRawItemPortletPartParam.json | 1 + .../dashboard/IPSDBSysPortletPart.json | 1 + .../dashboard/IPSDBSysPortletPartParam.json | 1 + .../dashboard/IPSDBToolbarPortlet.json | 1 + .../dashboard/IPSDBViewPortletPart.json | 1 + .../control/dashboard/IPSDEDashboard.json | 1 + .../model/control/dashboard/IPSDashboard.json | 1 + .../dashboard/IPSDashboardContainer.json | 1 + .../control/dashboard/IPSDashboardParam.json | 1 + .../control/dashboard/IPSSysDashboard.json | 1 + .../dashboard/IPSSysDashboardParam.json | 1 + .../control/datainfobar/IPSDataInfoBar.json | 1 + .../datainfobar/IPSDataInfoBarParam.json | 1 + .../model/control/dataview/IPSDEDataView.json | 1 + .../dataview/IPSDEDataViewDataItem.json | 1 + .../dataview/IPSDEDataViewHandler.json | 1 + .../control/dataview/IPSDEDataViewItem.json | 1 + .../control/dataview/IPSDEDataViewParam.json | 1 + .../model/control/dataview/IPSDEKanban.json | 1 + .../control/dataview/IPSDEKanbanHandler.json | 1 + .../control/dataview/IPSDEKanbanParam.json | 1 + .../model/control/drctrl/IPSDEDRBar.json | 1 + .../model/control/drctrl/IPSDEDRBarGroup.json | 1 + .../model/control/drctrl/IPSDEDRBarItem.json | 1 + .../model/control/drctrl/IPSDEDRBarParam.json | 1 + .../model/control/drctrl/IPSDEDRCtrl.json | 1 + .../model/control/drctrl/IPSDEDRCtrlItem.json | 1 + .../control/drctrl/IPSDEDRCtrlParam.json | 1 + .../model/control/drctrl/IPSDEDRTab.json | 1 + .../model/control/drctrl/IPSDEDRTabPage.json | 1 + .../model/control/drctrl/IPSDEDRTabParam.json | 1 + resources/model/control/drctrl/IPSDRBar.json | 1 + resources/model/control/drctrl/IPSDRCtrl.json | 1 + resources/model/control/drctrl/IPSDRTab.json | 1 + .../model/control/editor/IPSAutoComplete.json | 1 + .../control/editor/IPSBarCode2DReader.json | 1 + .../control/editor/IPSBarCodeReader.json | 1 + .../model/control/editor/IPSCheckBox.json | 1 + .../model/control/editor/IPSCheckBoxList.json | 1 + resources/model/control/editor/IPSCode.json | 1 + .../control/editor/IPSCodeListEditor.json | 1 + .../model/control/editor/IPSDatePicker.json | 1 + .../model/control/editor/IPSDateRange.json | 1 + .../model/control/editor/IPSDropDownList.json | 1 + .../model/control/editor/IPSFileUploader.json | 1 + resources/model/control/editor/IPSHidden.json | 1 + resources/model/control/editor/IPSHtml.json | 1 + .../model/control/editor/IPSIPAddress.json | 1 + .../model/control/editor/IPSListBox.json | 1 + .../control/editor/IPSListBoxPicker.json | 1 + .../control/editor/IPSMDropDownList.json | 1 + .../model/control/editor/IPSMPicker.json | 1 + .../model/control/editor/IPSMailAddress.json | 1 + .../model/control/editor/IPSMarkdown.json | 1 + .../model/control/editor/IPSNumberEditor.json | 1 + .../model/control/editor/IPSNumberRange.json | 1 + resources/model/control/editor/IPSOffice.json | 1 + .../model/control/editor/IPSOffice2.json | 1 + .../model/control/editor/IPSPassword.json | 1 + resources/model/control/editor/IPSPicker.json | 1 + .../model/control/editor/IPSPickerEditor.json | 1 + .../model/control/editor/IPSPickupView.json | 1 + .../model/control/editor/IPSPicture.json | 1 + .../control/editor/IPSRadioButtonList.json | 1 + resources/model/control/editor/IPSRating.json | 1 + resources/model/control/editor/IPSRaw.json | 1 + resources/model/control/editor/IPSSlider.json | 1 + resources/model/control/editor/IPSSpan.json | 1 + .../model/control/editor/IPSStepper.json | 1 + .../model/control/editor/IPSTextArea.json | 1 + .../model/control/editor/IPSTextBox.json | 1 + .../model/control/editor/IPSTextEditor.json | 1 + .../control/editor/IPSValueItemEditor.json | 1 + .../control/expbar/IPSCalendarExpBar.json | 1 + .../expbar/IPSCalendarExpBarParam.json | 1 + .../model/control/expbar/IPSChartExpBar.json | 1 + .../control/expbar/IPSChartExpBarParam.json | 1 + .../control/expbar/IPSDataViewExpBar.json | 1 + .../expbar/IPSDataViewExpBarParam.json | 1 + resources/model/control/expbar/IPSExpBar.json | 1 + .../model/control/expbar/IPSExpBarParam.json | 1 + .../model/control/expbar/IPSGanttExpBar.json | 1 + .../control/expbar/IPSGanttExpBarParam.json | 1 + .../model/control/expbar/IPSGridExpBar.json | 1 + .../control/expbar/IPSGridExpBarParam.json | 1 + .../model/control/expbar/IPSListExpBar.json | 1 + .../control/expbar/IPSListExpBarParam.json | 1 + .../model/control/expbar/IPSMapExpBar.json | 1 + .../control/expbar/IPSMapExpBarParam.json | 1 + .../model/control/expbar/IPSTabExpPage.json | 1 + .../model/control/expbar/IPSTabExpPanel.json | 1 + .../control/expbar/IPSTabExpPanelParam.json | 1 + .../model/control/expbar/IPSTreeExpBar.json | 1 + .../control/expbar/IPSTreeExpBarParam.json | 1 + .../model/control/expbar/IPSWFExpBar.json | 1 + .../control/expbar/IPSWFExpBarParam.json | 1 + .../model/control/form/IPSDEEditForm.json | 1 + .../control/form/IPSDEEditFormHandler.json | 1 + .../model/control/form/IPSDEEditFormItem.json | 1 + .../control/form/IPSDEEditFormParam.json | 1 + .../control/form/IPSDEFDCatGroupLogic.json | 1 + .../model/control/form/IPSDEFDGroupLogic.json | 1 + .../model/control/form/IPSDEFDLogic.json | 1 + .../control/form/IPSDEFDSingleLogic.json | 1 + .../model/control/form/IPSDEFFormItem.json | 1 + .../control/form/IPSDEFIUpdateDetail.json | 1 + .../control/form/IPSDEFSearchFormItem.json | 1 + resources/model/control/form/IPSDEForm.json | 1 + .../model/control/form/IPSDEFormButton.json | 1 + .../model/control/form/IPSDEFormDRUIPart.json | 1 + .../model/control/form/IPSDEFormDataItem.json | 1 + .../model/control/form/IPSDEFormDetail.json | 1 + .../model/control/form/IPSDEFormFormPart.json | 1 + .../control/form/IPSDEFormGroupBase.json | 1 + .../control/form/IPSDEFormGroupPanel.json | 1 + .../model/control/form/IPSDEFormIFrame.json | 1 + .../model/control/form/IPSDEFormItem.json | 1 + .../model/control/form/IPSDEFormItemEx.json | 1 + .../control/form/IPSDEFormItemUpdate.json | 1 + .../model/control/form/IPSDEFormItemVR.json | 1 + .../model/control/form/IPSDEFormMDCtrl.json | 1 + .../model/control/form/IPSDEFormPage.json | 1 + .../model/control/form/IPSDEFormParam.json | 1 + .../model/control/form/IPSDEFormRawItem.json | 1 + .../model/control/form/IPSDEFormTabPage.json | 1 + .../model/control/form/IPSDEFormTabPanel.json | 1 + .../control/form/IPSDEFormUserControl.json | 1 + .../model/control/form/IPSDESearchForm.json | 1 + .../control/form/IPSDESearchFormHandler.json | 1 + .../control/form/IPSDESearchFormItem.json | 1 + .../control/form/IPSDESearchFormParam.json | 1 + .../control/form/IPSDEWizardEditForm.json | 1 + .../form/IPSDEWizardEditFormParam.json | 1 + .../model/control/form/IPSFIDEFValueRule.json | 1 + .../model/control/form/IPSWFEditForm.json | 1 + .../model/control/grid/IPSDEFGridColumn.json | 1 + .../control/grid/IPSDEGEIUpdateDetail.json | 1 + resources/model/control/grid/IPSDEGrid.json | 1 + .../model/control/grid/IPSDEGridColumn.json | 1 + .../model/control/grid/IPSDEGridDataItem.json | 1 + .../model/control/grid/IPSDEGridEditItem.json | 1 + .../control/grid/IPSDEGridEditItemUpdate.json | 1 + .../control/grid/IPSDEGridEditItemVR.json | 1 + .../control/grid/IPSDEGridFieldColumn.json | 1 + .../control/grid/IPSDEGridGroupColumn.json | 1 + .../model/control/grid/IPSDEGridHandler.json | 1 + .../model/control/grid/IPSDEGridParam.json | 1 + .../model/control/grid/IPSDEGridUAColumn.json | 1 + .../control/grid/IPSDEMultiEditViewPanel.json | 1 + .../grid/IPSDEMultiEditViewPanelParam.json | 1 + .../model/control/grid/IPSDETreeGrid.json | 1 + .../grid/IPSDETreeGridFieldColumn.json | 1 + .../control/grid/IPSDETreeGridParam.json | 1 + .../control/grid/IPSGEIDEFValueRule.json | 1 + .../control/layout/IPSAbsoluteLayout.json | 1 + .../control/layout/IPSAbsoluteLayoutPos.json | 1 + .../model/control/layout/IPSBorderLayout.json | 1 + .../control/layout/IPSBorderLayoutPos.json | 1 + .../model/control/layout/IPSFlexLayout.json | 1 + .../control/layout/IPSFlexLayoutPos.json | 1 + .../model/control/layout/IPSGridLayout.json | 1 + .../control/layout/IPSGridLayoutPos.json | 1 + resources/model/control/layout/IPSLayout.json | 1 + .../control/layout/IPSLayoutContainer.json | 1 + .../model/control/layout/IPSLayoutItem.json | 1 + .../model/control/layout/IPSLayoutPos.json | 1 + .../model/control/layout/IPSTableLayout.json | 1 + .../control/layout/IPSTableLayoutPos.json | 1 + resources/model/control/list/IPSDEList.json | 1 + .../model/control/list/IPSDEListDataItem.json | 1 + .../model/control/list/IPSDEListHandler.json | 1 + .../model/control/list/IPSDEListItem.json | 1 + .../model/control/list/IPSDEListParam.json | 1 + .../model/control/list/IPSDEMobMDCtrl.json | 1 + .../control/list/IPSDEMobMDCtrlParam.json | 1 + resources/model/control/list/IPSList.json | 1 + .../model/control/list/IPSListDataItem.json | 1 + resources/model/control/list/IPSListItem.json | 1 + resources/model/control/map/IPSMap.json | 1 + resources/model/control/map/IPSMapItem.json | 1 + resources/model/control/map/IPSMapParam.json | 1 + resources/model/control/map/IPSSysMap.json | 1 + .../model/control/map/IPSSysMapItem.json | 1 + .../model/control/map/IPSSysMapParam.json | 1 + resources/model/control/menu/IPSAppMenu.json | 1 + .../model/control/menu/IPSAppMenuItem.json | 1 + .../model/control/menu/IPSAppMenuParam.json | 1 + .../model/control/menu/IPSAppMenuRawItem.json | 1 + .../model/control/menu/IPSContextMenu.json | 1 + .../control/menu/IPSContextMenuParam.json | 1 + resources/model/control/menu/IPSMenu.json | 1 + resources/model/control/menu/IPSMenuItem.json | 1 + .../model/control/panel/IPSLayoutPanel.json | 1 + resources/model/control/panel/IPSPanel.json | 1 + .../model/control/panel/IPSPanelButton.json | 1 + .../control/panel/IPSPanelContainer.json | 1 + .../model/control/panel/IPSPanelControl.json | 1 + .../model/control/panel/IPSPanelCtrlPos.json | 1 + .../model/control/panel/IPSPanelEngine.json | 1 + .../model/control/panel/IPSPanelField.json | 1 + .../model/control/panel/IPSPanelHandler.json | 1 + .../model/control/panel/IPSPanelItem.json | 1 + .../panel/IPSPanelItemCatGroupLogic.json | 1 + .../panel/IPSPanelItemCustomLogic.json | 1 + .../control/panel/IPSPanelItemGroupLogic.json | 1 + .../control/panel/IPSPanelItemLogic.json | 1 + .../panel/IPSPanelItemSingleLogic.json | 1 + .../model/control/panel/IPSPanelLogic.json | 1 + .../model/control/panel/IPSPanelModel.json | 1 + .../model/control/panel/IPSPanelObject.json | 1 + .../model/control/panel/IPSPanelParam.json | 1 + .../model/control/panel/IPSPanelRawItem.json | 1 + .../model/control/panel/IPSPanelTabPage.json | 1 + .../model/control/panel/IPSPanelTabPanel.json | 1 + .../control/panel/IPSPanelUserControl.json | 1 + .../control/panel/IPSSysLayoutPanel.json | 1 + .../model/control/panel/IPSSysPanel.json | 1 + .../control/panel/IPSSysPanelButton.json | 1 + .../control/panel/IPSSysPanelContainer.json | 1 + .../control/panel/IPSSysPanelControl.json | 1 + .../control/panel/IPSSysPanelCtrlPos.json | 1 + .../control/panel/IPSSysPanelDataItem.json | 1 + .../model/control/panel/IPSSysPanelField.json | 1 + .../control/panel/IPSSysPanelHandler.json | 1 + .../model/control/panel/IPSSysPanelItem.json | 1 + .../model/control/panel/IPSSysPanelLogic.json | 1 + .../model/control/panel/IPSSysPanelModel.json | 1 + .../model/control/panel/IPSSysPanelParam.json | 1 + .../control/panel/IPSSysPanelRawItem.json | 1 + .../control/panel/IPSSysPanelTabPage.json | 1 + .../control/panel/IPSSysPanelTabPanel.json | 1 + .../control/panel/IPSSysPanelUserControl.json | 1 + .../control/panel/IPSSysViewLayoutPanel.json | 1 + .../panel/IPSSysViewLayoutPanelParam.json | 1 + .../control/panel/IPSViewLayoutPanel.json | 1 + .../control/reportpanel/IPSDEReportPanel.json | 1 + .../reportpanel/IPSDEReportPanelParam.json | 1 + .../model/control/searchbar/IPSSearchBar.json | 1 + .../control/searchbar/IPSSearchBarFilter.json | 1 + .../control/searchbar/IPSSearchBarGroup.json | 1 + .../control/searchbar/IPSSearchBarItem.json | 1 + .../control/searchbar/IPSSearchBarObject.json | 1 + .../control/searchbar/IPSSearchBarParam.json | 1 + .../searchbar/IPSSearchBarQuickSearch.json | 1 + .../control/searchbar/IPSSysSearchBar.json | 1 + .../searchbar/IPSSysSearchBarItem.json | 1 + .../searchbar/IPSSysSearchBarObject.json | 1 + .../searchbar/IPSSysSearchBarParam.json | 1 + .../control/titlebar/IPSAppTitleBar.json | 1 + .../control/titlebar/IPSSysTitleBar.json | 1 + .../model/control/titlebar/IPSTitleBar.json | 1 + .../control/titlebar/IPSTitleBarParam.json | 1 + .../control/toolbar/IPSDECMGroupItem.json | 1 + .../model/control/toolbar/IPSDECMRawItem.json | 1 + .../control/toolbar/IPSDECMSeperatorItem.json | 1 + .../control/toolbar/IPSDECMUIActionItem.json | 1 + .../control/toolbar/IPSDEContextMenu.json | 1 + .../control/toolbar/IPSDEContextMenuItem.json | 1 + .../toolbar/IPSDEContextMenuParam.json | 1 + .../control/toolbar/IPSDETBGroupItem.json | 1 + .../model/control/toolbar/IPSDETBRawItem.json | 1 + .../control/toolbar/IPSDETBSeperatorItem.json | 1 + .../control/toolbar/IPSDETBUIActionItem.json | 1 + .../model/control/toolbar/IPSDEToolbar.json | 1 + .../control/toolbar/IPSDEToolbarItem.json | 1 + .../control/toolbar/IPSDEToolbarParam.json | 1 + resources/model/control/tree/IPSDEGantt.json | 1 + .../model/control/tree/IPSDEGanttParam.json | 1 + resources/model/control/tree/IPSDETree.json | 1 + .../control/tree/IPSDETreeCodeListNode.json | 1 + .../model/control/tree/IPSDETreeColumn.json | 1 + .../control/tree/IPSDETreeDEFColumn.json | 1 + .../control/tree/IPSDETreeDataSetNode.json | 1 + .../model/control/tree/IPSDETreeGridEx.json | 1 + .../control/tree/IPSDETreeGridExParam.json | 1 + .../model/control/tree/IPSDETreeHandler.json | 1 + .../model/control/tree/IPSDETreeNode.json | 1 + .../control/tree/IPSDETreeNodeDataItem.json | 1 + .../model/control/tree/IPSDETreeNodeRS.json | 1 + .../tree/IPSDETreeNodeRSNavContext.json | 1 + .../control/tree/IPSDETreeNodeRSNavParam.json | 1 + .../control/tree/IPSDETreeNodeRSParam.json | 1 + .../model/control/tree/IPSDETreeNodeRV.json | 1 + .../model/control/tree/IPSDETreeParam.json | 1 + .../control/tree/IPSDETreeStaticNode.json | 1 + .../model/control/tree/IPSDETreeUAColumn.json | 1 + .../viewpanel/IPSDEPickupViewPanel.json | 1 + .../control/viewpanel/IPSDETabViewPanel.json | 1 + .../viewpanel/IPSDETabViewPanelParam.json | 1 + .../control/viewpanel/IPSDEViewPanel.json | 1 + .../viewpanel/IPSDEViewPanelParam.json | 1 + .../wizardpanel/IPSDEStateWizardPanel.json | 1 + .../IPSDEStateWizardPanelParam.json | 1 + .../control/wizardpanel/IPSDEWizardPanel.json | 1 + .../wizardpanel/IPSDEWizardPanelParam.json | 1 + .../control/wizardpanel/IPSWizardPanel.json | 1 + .../wizardpanel/IPSWizardPanelParam.json | 1 + resources/model/ctrl.json | 3 + resources/model/ctrls.json | 3 + resources/model/data/IPSDataItem.json | 1 + resources/model/data/IPSDataItemParam.json | 1 + resources/model/data/IPSValueOP.json | 1 + resources/model/database/IPSDEDBConfig.json | 1 + resources/model/database/IPSDEDBTable.json | 1 + resources/model/database/IPSDEFDTColumn.json | 1 + resources/model/database/IPSSysDBColumn.json | 1 + resources/model/database/IPSSysDBScheme.json | 1 + resources/model/database/IPSSysDBTable.json | 1 + .../model/database/IPSSysDBValueFunc.json | 1 + .../model/database/IPSSystemDBConfig.json | 1 + resources/model/dataentity/IPSDEGroup.json | 1 + .../model/dataentity/IPSDEGroupDetail.json | 1 + resources/model/dataentity/IPSDataEntity.json | 1 + .../model/dataentity/IPSDataEntityObject.json | 1 + resources/model/dataentity/IPSSysDEGroup.json | 1 + .../model/dataentity/ac/IPSDEACMode.json | 1 + .../dataentity/ac/IPSDEACModeDataItem.json | 1 + .../model/dataentity/action/IPSDEAction.json | 1 + .../dataentity/action/IPSDEActionGroup.json | 1 + .../action/IPSDEActionGroupDetail.json | 1 + .../dataentity/action/IPSDEActionInput.json | 1 + .../action/IPSDEActionInputDTO.json | 1 + .../action/IPSDEActionInputDTOField.json | 1 + .../dataentity/action/IPSDEActionLogic.json | 1 + .../dataentity/action/IPSDEActionParam.json | 1 + .../dataentity/action/IPSDEActionReturn.json | 1 + .../dataentity/action/IPSDEActionTempl.json | 1 + .../dataentity/action/IPSDEActionVR.json | 1 + .../dataentity/action/IPSDELogicAction.json | 1 + .../dataentity/action/IPSDERemoteAction.json | 1 + .../dataentity/action/IPSDEScriptAction.json | 1 + .../dataentity/action/IPSDESelectAction.json | 1 + .../action/IPSDESelectActionParam.json | 1 + .../action/IPSDESelectByKeyAction.json | 1 + .../action/IPSDEUserCreateAction.json | 1 + .../action/IPSDEUserSysUpdateAction.json | 1 + .../action/IPSDEUserUpdateAction.json | 1 + .../dataexport/IPSDEDataExport.json | 1 + .../dataexport/IPSDEDataExportItem.json | 1 + .../dataimport/IPSDEDataImport.json | 1 + .../dataimport/IPSDEDataImportItem.json | 1 + .../model/dataentity/datamap/IPSDEMap.json | 1 + .../dataentity/datamap/IPSDEMapAction.json | 1 + .../dataentity/datamap/IPSDEMapDataQuery.json | 1 + .../dataentity/datamap/IPSDEMapDataSet.json | 1 + .../dataentity/datamap/IPSDEMapField.json | 1 + .../dataentity/datamap/IPSDEMapObject.json | 1 + .../dataentity/datasync/IPSDEDataSync.json | 1 + .../model/dataentity/defield/IPSDEFGroup.json | 1 + .../dataentity/defield/IPSDEFGroupDetail.json | 1 + .../dataentity/defield/IPSDEFInputTip.json | 1 + .../dataentity/defield/IPSDEFSearchMode.json | 1 + .../dataentity/defield/IPSDEFUIItem.json | 1 + .../dataentity/defield/IPSDEFUIMode.json | 1 + .../model/dataentity/defield/IPSDEField.json | 1 + .../dataentity/defield/IPSDEFieldBase.json | 1 + .../dataentity/defield/IPSDEFieldObject.json | 1 + .../dataentity/defield/IPSDEFieldType.json | 1 + .../dataentity/defield/IPSFormulaDEField.json | 1 + .../dataentity/defield/IPSInheritDEField.json | 1 + .../dataentity/defield/IPSLinkDEField.json | 1 + .../defield/IPSOne2ManyDataDEField.json | 1 + .../defield/IPSOne2OneDataDEField.json | 1 + .../dataentity/defield/IPSPickupDEField.json | 1 + .../defield/IPSPickupDataDEField.json | 1 + .../defield/IPSPickupObjectDEField.json | 1 + .../defield/IPSPickupTextDEField.json | 1 + .../dataentity/defield/IPSSysDEFType.json | 1 + .../defield/search/IPSDEFSearch.json | 1 + .../valuerule/IPSDEFDataRangeRule.json | 1 + .../defield/valuerule/IPSDEFVRCondition.json | 1 + .../valuerule/IPSDEFVRGroupCondition.json | 1 + .../IPSDEFVRQueryCountCondition.json | 1 + .../valuerule/IPSDEFVRRegExCondition.json | 1 + .../valuerule/IPSDEFVRSimpleCondition.json | 1 + .../valuerule/IPSDEFVRSingleCondition.json | 1 + .../IPSDEFVRStringLengthCondition.json | 1 + .../IPSDEFVRSysValueRuleCondition.json | 1 + .../IPSDEFVRValueRange2Condition.json | 1 + .../IPSDEFVRValueRange3Condition.json | 1 + .../IPSDEFVRValueRangeCondition.json | 1 + .../IPSDEFVRValueRecursionCondition.json | 1 + .../defield/valuerule/IPSDEFValueRule.json | 1 + resources/model/dataentity/der/IPSDER11.json | 1 + resources/model/dataentity/der/IPSDER1N.json | 1 + .../dataentity/der/IPSDER1NDEFieldMap.json | 1 + .../dataentity/der/IPSDER1NSelectAction.json | 1 + .../model/dataentity/der/IPSDERAggData.json | 1 + .../der/IPSDERAggDataDEFieldMap.json | 1 + .../model/dataentity/der/IPSDERBase.json | 1 + .../model/dataentity/der/IPSDERCustom.json | 1 + .../dataentity/der/IPSDERDEFieldMap.json | 1 + .../model/dataentity/der/IPSDERGroup.json | 1 + .../dataentity/der/IPSDERGroupDetail.json | 1 + .../model/dataentity/der/IPSDERIndex.json | 1 + .../dataentity/der/IPSDERIndexDEFieldMap.json | 1 + .../model/dataentity/der/IPSDERInherit.json | 1 + .../dataentity/der/IPSDERMultiInherit.json | 1 + resources/model/dataentity/der/IPSDERNN.json | 1 + .../model/dataentity/der/IPSSysDERGroup.json | 1 + .../dataentity/dr/IPSDEDRCustomItem.json | 1 + .../model/dataentity/dr/IPSDEDRDER11Item.json | 1 + .../model/dataentity/dr/IPSDEDRDER1NItem.json | 1 + .../model/dataentity/dr/IPSDEDRDetail.json | 1 + .../model/dataentity/dr/IPSDEDRGroup.json | 1 + .../model/dataentity/dr/IPSDEDRItem.json | 1 + .../dataentity/dr/IPSDEDRSysDER11Item.json | 1 + .../dataentity/dr/IPSDEDRSysDER1NItem.json | 1 + .../dataentity/dr/IPSDEDataRelation.json | 1 + .../model/dataentity/ds/IPSDEDQCondition.json | 1 + .../dataentity/ds/IPSDEDQCustomCondition.json | 1 + .../dataentity/ds/IPSDEDQFieldCondition.json | 1 + .../dataentity/ds/IPSDEDQGroupCondition.json | 1 + .../model/dataentity/ds/IPSDEDQJoin.json | 1 + .../model/dataentity/ds/IPSDEDQMain.json | 1 + .../dataentity/ds/IPSDEDQPDCondition.json | 1 + .../model/dataentity/ds/IPSDEDataQuery.json | 1 + .../dataentity/ds/IPSDEDataQueryCode.json | 1 + .../dataentity/ds/IPSDEDataQueryCodeCond.json | 1 + .../dataentity/ds/IPSDEDataQueryCodeExp.json | 1 + .../dataentity/ds/IPSDEDataQueryInput.json | 1 + .../dataentity/ds/IPSDEDataQueryReturn.json | 1 + .../model/dataentity/ds/IPSDEDataSet.json | 1 + .../model/dataentity/ds/IPSDEDataSetCode.json | 1 + .../dataentity/ds/IPSDEDataSetGroupParam.json | 1 + .../dataentity/ds/IPSDEDataSetInput.json | 1 + .../dataentity/ds/IPSDEDataSetReturn.json | 1 + .../model/dataentity/ds/IPSDEFilterDTO.json | 1 + .../dataentity/ds/IPSDEFilterDTOField.json | 1 + .../model/dataentity/dts/IPSDEDTSQueue.json | 1 + .../model/dataentity/jit/IPSDESampleData.json | 1 + .../dataentity/logic/IPSDEDEActionLogic.json | 1 + .../model/dataentity/logic/IPSDEFLogic.json | 1 + .../model/dataentity/logic/IPSDELogic.json | 1 + .../dataentity/logic/IPSDELogicBase.json | 1 + .../dataentity/logic/IPSDELogicLink.json | 1 + .../dataentity/logic/IPSDELogicLinkBase.json | 1 + .../dataentity/logic/IPSDELogicLinkCond.json | 1 + .../logic/IPSDELogicLinkCondBase.json | 1 + .../logic/IPSDELogicLinkGroupCond.json | 1 + .../logic/IPSDELogicLinkGroupCondBase.json | 1 + .../logic/IPSDELogicLinkSingleCond.json | 1 + .../logic/IPSDELogicLinkSingleCondBase.json | 1 + .../dataentity/logic/IPSDELogicNode.json | 1 + .../dataentity/logic/IPSDELogicNodeBase.json | 1 + .../dataentity/logic/IPSDELogicNodeParam.json | 1 + .../logic/IPSDELogicNodeParamBase.json | 1 + .../dataentity/logic/IPSDELogicParam.json | 1 + .../dataentity/logic/IPSDELogicParamBase.json | 1 + .../model/dataentity/logic/IPSDEMSLogic.json | 1 + .../dataentity/logic/IPSDEMSLogicLink.json | 1 + .../logic/IPSDEMSLogicLinkCond.json | 1 + .../logic/IPSDEMSLogicLinkGroupCond.json | 1 + .../logic/IPSDEMSLogicLinkSingleCond.json | 1 + .../dataentity/logic/IPSDEMSLogicNode.json | 1 + .../dataentity/logic/IPSDEMSLogicParam.json | 1 + .../dataentity/logic/IPSDERawCodeLogic.json | 1 + .../logic/IPSDERawSqlAndLoopCallLogic.json | 1 + .../logic/IPSDERawSqlCallLogic.json | 1 + .../dataentity/logic/IPSDESFPluginLogic.json | 1 + .../dataentity/logic/IPSDEStartWFLogic.json | 1 + .../dataentity/logic/IPSDESysLogicLogic.json | 1 + .../logic/IPSDEThrowExceptionLogic.json | 1 + .../dataentity/logic/IPSDEUIActionLogic.json | 1 + .../logic/IPSDEUICtrlFireEventLogic.json | 1 + .../logic/IPSDEUICtrlInvokeLogic.json | 1 + .../logic/IPSDEUIDEActionLogic.json | 1 + .../model/dataentity/logic/IPSDEUILogic.json | 1 + .../dataentity/logic/IPSDEUILogicGroup.json | 1 + .../logic/IPSDEUILogicGroupDetail.json | 1 + .../dataentity/logic/IPSDEUILogicLink.json | 1 + .../logic/IPSDEUILogicLinkCond.json | 1 + .../logic/IPSDEUILogicLinkGroupCond.json | 1 + .../logic/IPSDEUILogicLinkSingleCond.json | 1 + .../dataentity/logic/IPSDEUILogicNode.json | 1 + .../logic/IPSDEUILogicNodeParam.json | 1 + .../dataentity/logic/IPSDEUILogicParam.json | 1 + .../dataentity/logic/IPSDEUIMsgBoxLogic.json | 1 + .../logic/IPSDEUIPFPluginLogic.json | 1 + .../dataentity/logic/IPSDEUIRawCodeLogic.json | 1 + .../logic/IPSDEUIThrowExceptionLogic.json | 1 + .../dataentity/logic/IPSDEViewLogic.json | 1 + .../dataentity/mainstate/IPSDEMainState.json | 1 + .../mainstate/IPSDEMainStateAction.json | 1 + .../mainstate/IPSDEMainStateField.json | 1 + .../mainstate/IPSDEMainStateOPPriv.json | 1 + .../mainstate/IPSDEMainStateRS.json | 1 + .../model/dataentity/notify/IPSDENotify.json | 1 + .../dataentity/notify/IPSDENotifyTarget.json | 1 + .../model/dataentity/print/IPSDEPrint.json | 1 + .../model/dataentity/priv/IPSDEOPPriv.json | 1 + .../dataentity/priv/IPSDEOPPrivRole.json | 1 + .../model/dataentity/priv/IPSDEUserRole.json | 1 + .../dataentity/priv/IPSDEUserRoleOPPriv.json | 1 + .../model/dataentity/priv/IPSSysDEOPPriv.json | 1 + .../model/dataentity/report/IPSDEReport.json | 1 + .../dataentity/report/IPSDEReportItem.json | 1 + .../dataentity/service/IPSDEMethodDTO.json | 1 + .../service/IPSDEMethodDTOField.json | 1 + .../dataentity/service/IPSDEMethodInput.json | 1 + .../dataentity/service/IPSDEMethodReturn.json | 1 + .../dataentity/service/IPSDEServiceAPI.json | 1 + .../service/IPSDEServiceAPIField.json | 1 + .../service/IPSDEServiceAPIMethod.json | 1 + .../service/IPSDEServiceAPIMethodInput.json | 1 + .../service/IPSDEServiceAPIMethodReturn.json | 1 + .../dataentity/service/IPSDEServiceAPIRS.json | 1 + .../dataentity/service/IPSDEServiceAPIVR.json | 1 + .../dataentity/uiaction/IPSDEUIAction.json | 1 + .../uiaction/IPSDEUIActionGroup.json | 1 + .../uiaction/IPSDEUIActionGroupDetail.json | 1 + .../dataentity/unistate/IPSDEUniState.json | 1 + .../dataentity/util/IPSDEDataAuditUtil.json | 1 + .../model/dataentity/util/IPSDEUtil.json | 1 + resources/model/dataentity/wf/IPSDEWF.json | 1 + .../dataentity/wizard/IPSDEActionWizard.json | 1 + .../wizard/IPSDEActionWizardGroup.json | 1 + .../wizard/IPSDEActionWizardGroupDetail.json | 1 + .../wizard/IPSDEActionWizardItem.json | 1 + .../dataentity/wizard/IPSDEDataSetDEAW.json | 1 + .../model/dataentity/wizard/IPSDEWizard.json | 1 + .../dataentity/wizard/IPSDEWizardForm.json | 1 + .../dataentity/wizard/IPSDEWizardStep.json | 1 + .../wizard/IPSDEWizardStepGroupLogic.json | 1 + .../wizard/IPSDEWizardStepLogic.json | 1 + .../wizard/IPSDEWizardStepSingleLogic.json | 1 + resources/model/dts/IPSSysDTSQueue.json | 1 + resources/model/dynamodel/IPSDynaModel.json | 1 + .../model/dynamodel/IPSDynaModelAttr.json | 1 + .../model/dynamodel/IPSJsonArraySchema.json | 1 + .../model/dynamodel/IPSJsonBooleanSchema.json | 1 + resources/model/dynamodel/IPSJsonDefs.json | 1 + resources/model/dynamodel/IPSJsonNode.json | 1 + .../model/dynamodel/IPSJsonNodeOwner.json | 1 + .../model/dynamodel/IPSJsonNodeSchema.json | 1 + .../model/dynamodel/IPSJsonNodeSchemas.json | 1 + resources/model/dynamodel/IPSJsonNodes.json | 1 + .../model/dynamodel/IPSJsonNullSchema.json | 1 + .../model/dynamodel/IPSJsonNumberSchema.json | 1 + .../model/dynamodel/IPSJsonObjectSchema.json | 1 + .../model/dynamodel/IPSJsonProperties.json | 1 + .../model/dynamodel/IPSJsonProperty.json | 1 + resources/model/dynamodel/IPSJsonSchema.json | 1 + .../model/dynamodel/IPSJsonSimpleSchema.json | 1 + .../model/dynamodel/IPSJsonStringSchema.json | 1 + .../model/dynamodel/IPSSysDynaModel.json | 1 + .../model/dynamodel/IPSSysDynaModelAttr.json | 1 + resources/model/dynamodel/IPSXmlElement.json | 1 + resources/model/dynamodel/IPSXmlNode.json | 1 + .../model/dynamodel/IPSXmlNodeOwner.json | 1 + resources/model/dynamodel/IPSXmlNodes.json | 1 + resources/model/eai/IPSEAIDE.json | 1 + resources/model/eai/IPSEAIDEField.json | 1 + resources/model/eai/IPSEAIDEObject.json | 1 + resources/model/eai/IPSEAIDER.json | 1 + resources/model/eai/IPSEAIDataType.json | 1 + resources/model/eai/IPSEAIDataTypeItem.json | 1 + resources/model/eai/IPSEAIDataTypeObject.json | 1 + resources/model/eai/IPSEAIElement.json | 1 + resources/model/eai/IPSEAIElementAttr.json | 1 + resources/model/eai/IPSEAIElementObject.json | 1 + resources/model/eai/IPSEAIElementRE.json | 1 + resources/model/eai/IPSEAIScheme.json | 1 + resources/model/eai/IPSEAISchemeObject.json | 1 + resources/model/eai/IPSSysEAIDE.json | 1 + resources/model/eai/IPSSysEAIDEField.json | 1 + resources/model/eai/IPSSysEAIDEObject.json | 1 + resources/model/eai/IPSSysEAIDER.json | 1 + resources/model/eai/IPSSysEAIDataType.json | 1 + .../model/eai/IPSSysEAIDataTypeItem.json | 1 + .../model/eai/IPSSysEAIDataTypeObject.json | 1 + resources/model/eai/IPSSysEAIElement.json | 1 + resources/model/eai/IPSSysEAIElementAttr.json | 1 + .../model/eai/IPSSysEAIElementObject.json | 1 + resources/model/eai/IPSSysEAIElementRE.json | 1 + resources/model/eai/IPSSysEAIScheme.json | 1 + .../model/eai/IPSSysEAISchemeObject.json | 1 + resources/model/global.json | 11 +- resources/model/msg/IPSSysMsgQueue.json | 1 + resources/model/msg/IPSSysMsgTarget.json | 1 + resources/model/msg/IPSSysMsgTempl.json | 1 + resources/model/page.json | 5 +- resources/model/pages.json | 2 +- resources/model/pub/IPSSysSFPub.json | 1 + resources/model/pub/IPSSysSFPubPkg.json | 1 + resources/model/res/IPSCtrlMsg.json | 1 + resources/model/res/IPSDEFInputTipSet.json | 1 + resources/model/res/IPSLanguageItem.json | 1 + resources/model/res/IPSLanguageRes.json | 1 + resources/model/res/IPSPortletType.json | 1 + resources/model/res/IPSSubViewType.json | 1 + resources/model/res/IPSSysChartTheme.json | 1 + resources/model/res/IPSSysContent.json | 1 + resources/model/res/IPSSysContentCat.json | 1 + resources/model/res/IPSSysCss.json | 1 + resources/model/res/IPSSysCustomPortlet.json | 1 + resources/model/res/IPSSysDEChartPortlet.json | 1 + .../model/res/IPSSysDEEditFormPortlet.json | 1 + resources/model/res/IPSSysDEFInputTip.json | 1 + resources/model/res/IPSSysDEListPortlet.json | 1 + .../model/res/IPSSysDESearchFormPortlet.json | 1 + .../model/res/IPSSysDEToolbarPortlet.json | 1 + resources/model/res/IPSSysDEViewPortlet.json | 1 + resources/model/res/IPSSysDataSyncAgent.json | 1 + resources/model/res/IPSSysDictCat.json | 1 + resources/model/res/IPSSysEditorStyle.json | 1 + resources/model/res/IPSSysHtmlPortlet.json | 1 + resources/model/res/IPSSysImage.json | 1 + resources/model/res/IPSSysLan.json | 1 + resources/model/res/IPSSysLogic.json | 1 + resources/model/res/IPSSysPDTView.json | 1 + resources/model/res/IPSSysPFPlugin.json | 1 + resources/model/res/IPSSysPortlet.json | 1 + resources/model/res/IPSSysPortletCat.json | 1 + resources/model/res/IPSSysResource.json | 1 + resources/model/res/IPSSysSFPlugin.json | 1 + resources/model/res/IPSSysSampleValue.json | 1 + resources/model/res/IPSSysSequence.json | 1 + resources/model/res/IPSSysTranslator.json | 1 + resources/model/res/IPSSysUniState.json | 1 + resources/model/res/IPSSysUnit.json | 1 + resources/model/res/IPSSysUtil.json | 1 + resources/model/res/IPSSysViewLogic.json | 1 + resources/model/res/IPSSysViewLogicParam.json | 1 + resources/model/security/IPSSysUniRes.json | 1 + resources/model/security/IPSSysUserDR.json | 1 + resources/model/security/IPSSysUserMode.json | 1 + resources/model/security/IPSSysUserRole.json | 1 + .../model/security/IPSSysUserRoleData.json | 1 + .../model/security/IPSSysUserRoleRes.json | 1 + resources/model/service/IPSServiceAPIDTO.json | 1 + .../model/service/IPSServiceAPIDTOField.json | 1 + .../model/service/IPSSubSysServiceAPI.json | 1 + .../model/service/IPSSubSysServiceAPIDE.json | 1 + .../service/IPSSubSysServiceAPIDEField.json | 1 + .../service/IPSSubSysServiceAPIDEMethod.json | 1 + .../service/IPSSubSysServiceAPIDERS.json | 1 + .../model/service/IPSSubSysServiceAPIDTO.json | 1 + .../service/IPSSubSysServiceAPIDTOField.json | 1 + .../service/IPSSubSysServiceAPIMethod.json | 1 + .../IPSSubSysServiceAPIMethodInput.json | 1 + .../IPSSubSysServiceAPIMethodReturn.json | 1 + resources/model/service/IPSSysServiceAPI.json | 1 + .../model/service/IPSSysServiceAPIDTO.json | 1 + .../service/IPSSysServiceAPIDTOField.json | 1 + .../service/openapi/IPSOpenAPI3Callback.json | 1 + .../service/openapi/IPSOpenAPI3Callbacks.json | 1 + .../openapi/IPSOpenAPI3Components.json | 1 + .../service/openapi/IPSOpenAPI3Contact.json | 1 + .../service/openapi/IPSOpenAPI3Example.json | 1 + .../service/openapi/IPSOpenAPI3Examples.json | 1 + .../service/openapi/IPSOpenAPI3Header.json | 1 + .../service/openapi/IPSOpenAPI3Headers.json | 1 + .../service/openapi/IPSOpenAPI3Info.json | 1 + .../openapi/IPSOpenAPI3JsonNodeSchemas.json | 1 + .../service/openapi/IPSOpenAPI3License.json | 1 + .../service/openapi/IPSOpenAPI3Link.json | 1 + .../service/openapi/IPSOpenAPI3Links.json | 1 + .../service/openapi/IPSOpenAPI3MediaType.json | 1 + .../openapi/IPSOpenAPI3MediaTypes.json | 1 + .../service/openapi/IPSOpenAPI3Object.json | 1 + .../service/openapi/IPSOpenAPI3Operation.json | 1 + .../service/openapi/IPSOpenAPI3Parameter.json | 1 + .../openapi/IPSOpenAPI3Parameters.json | 1 + .../service/openapi/IPSOpenAPI3Path.json | 1 + .../service/openapi/IPSOpenAPI3Paths.json | 1 + .../openapi/IPSOpenAPI3RequestBodies.json | 1 + .../openapi/IPSOpenAPI3RequestBody.json | 1 + .../service/openapi/IPSOpenAPI3Response.json | 1 + .../service/openapi/IPSOpenAPI3Responses.json | 1 + .../service/openapi/IPSOpenAPI3Schema.json | 1 + .../openapi/IPSOpenAPI3SecurityScheme.json | 1 + .../openapi/IPSOpenAPI3SecuritySchemes.json | 1 + resources/model/system.json | 5 +- resources/model/system/IPSSysModelGroup.json | 1 + resources/model/system/IPSSysRef.json | 1 + resources/model/system/IPSSystemModule.json | 1 + .../model/testing/IPSAppViewTestCase.json | 1 + .../model/testing/IPSDEActionTestCase.json | 1 + resources/model/testing/IPSDEFVRTestCase.json | 1 + .../model/testing/IPSDESAMethodTestCase.json | 1 + resources/model/testing/IPSSysTestCase.json | 1 + resources/model/testing/IPSSysTestCase2.json | 1 + .../model/testing/IPSSysTestCaseAssert.json | 1 + .../model/testing/IPSSysTestCaseInput.json | 1 + resources/model/testing/IPSSysTestData.json | 1 + .../model/testing/IPSSysTestDataItem.json | 1 + resources/model/testing/IPSSysTestModule.json | 1 + resources/model/testing/IPSSysTestPrj.json | 1 + .../model/valuerule/IPSSysValueRule.json | 1 + resources/model/view/IPSDEDataSetViewMsg.json | 1 + resources/model/view/IPSUIAction.json | 1 + resources/model/view/IPSUIActionGroup.json | 1 + .../model/view/IPSUIActionGroupDetail.json | 1 + resources/model/view/IPSUIEngine.json | 1 + resources/model/view/IPSUIEngineParam.json | 1 + resources/model/view/IPSViewLogic.json | 1 + resources/model/view/IPSViewLogicParam.json | 1 + resources/model/view/IPSViewMsg.json | 1 + resources/model/view/IPSViewMsgGroup.json | 1 + .../model/view/IPSViewMsgGroupDetail.json | 1 + resources/model/wf/IPSSysWFSetting.json | 1 + .../model/wf/IPSWFCallActivityProcess.json | 1 + .../model/wf/IPSWFCallOrgActivityProcess.json | 1 + resources/model/wf/IPSWFDE.json | 1 + resources/model/wf/IPSWFDEActionProcess.json | 1 + resources/model/wf/IPSWFDEDataSetRole.json | 1 + resources/model/wf/IPSWFEmbedWFProcess.json | 1 + .../model/wf/IPSWFEmbedWFProcessBase.json | 1 + .../model/wf/IPSWFEmbedWFReturnLink.json | 1 + resources/model/wf/IPSWFEndProcess.json | 1 + .../wf/IPSWFExclusiveGatewayProcess.json | 1 + .../model/wf/IPSWFGatewayProcessBase.json | 1 + .../wf/IPSWFInclusiveGatewayProcess.json | 1 + resources/model/wf/IPSWFInteractiveLink.json | 1 + .../model/wf/IPSWFInteractiveProcess.json | 1 + resources/model/wf/IPSWFLink.json | 1 + resources/model/wf/IPSWFLinkCond.json | 1 + resources/model/wf/IPSWFLinkCustomCond.json | 1 + resources/model/wf/IPSWFLinkGroupCond.json | 1 + resources/model/wf/IPSWFLinkRole.json | 1 + resources/model/wf/IPSWFLinkSingleCond.json | 1 + .../model/wf/IPSWFParallelGatewayProcess.json | 1 + .../model/wf/IPSWFParallelSubWFProcess.json | 1 + resources/model/wf/IPSWFProcess.json | 1 + resources/model/wf/IPSWFProcessParam.json | 1 + resources/model/wf/IPSWFProcessRole.json | 1 + resources/model/wf/IPSWFProcessSubWF.json | 1 + resources/model/wf/IPSWFRole.json | 1 + resources/model/wf/IPSWFRouteLink.json | 1 + resources/model/wf/IPSWFStartProcess.json | 1 + resources/model/wf/IPSWFTimeoutLink.json | 1 + .../model/wf/IPSWFTimerEventProcess.json | 1 + resources/model/wf/IPSWFUtilUIAction.json | 1 + resources/model/wf/IPSWFVersion.json | 1 + resources/model/wf/IPSWFWorkTime.json | 1 + resources/model/wf/IPSWorkflow.json | 1 + resources/model/wf/IPSWorkflowObject.json | 1 + .../model/wf/uiaction/IPSWFUIAction.json | 1 + .../model/wf/uiaction/IPSWFUIActionGroup.json | 1 + .../wf/uiaction/IPSWFUIActionGroupDetail.json | 1 + resources/model/wx/IPSWXAccount.json | 1 + resources/model/wx/IPSWXAccountObject.json | 1 + resources/model/wx/IPSWXEntApp.json | 1 + resources/model/wx/IPSWXLogic.json | 1 + resources/model/wx/IPSWXMenu.json | 1 + resources/model/wx/IPSWXMenuFunc.json | 1 + resources/model/wx/IPSWXMenuItem.json | 1 + src/interface/index.ts | 1 + src/interface/model-item/model-item.ts | 42 +++ src/model-completion-item.ts | 17 +- src/model-completion-provider.ts | 104 ++++--- src/model/index.ts | 71 +++-- 1197 files changed, 1704 insertions(+), 84 deletions(-) create mode 100644 resources/model/IPSModelData.json create mode 100644 resources/model/IPSModelObject.json create mode 100644 resources/model/IPSModelSortable.json create mode 100644 resources/model/IPSObject.json create mode 100644 resources/model/IPSSystem.json create mode 100644 resources/model/app/IPSAppLan.json create mode 100644 resources/model/app/IPSAppModule.json create mode 100644 resources/model/app/IPSAppPDTView.json create mode 100644 resources/model/app/IPSAppPkg.json create mode 100644 resources/model/app/IPSAppResource.json create mode 100644 resources/model/app/IPSAppUIStyle.json create mode 100644 resources/model/app/IPSAppUtilPage.json create mode 100644 resources/model/app/IPSApplication.json create mode 100644 resources/model/app/IPSApplicationLogic.json create mode 100644 resources/model/app/IPSApplicationObject.json create mode 100644 resources/model/app/IPSApplicationUI.json create mode 100644 resources/model/app/appmenu/IPSAppMenuModel.json create mode 100644 resources/model/app/codelist/IPSAppCodeList.json create mode 100644 resources/model/app/control/IPSAppCounter.json create mode 100644 resources/model/app/control/IPSAppCounterRef.json create mode 100644 resources/model/app/control/IPSAppPortlet.json create mode 100644 resources/model/app/control/IPSAppPortletCat.json create mode 100644 resources/model/app/control/IPSAppViewQuickGroup.json create mode 100644 resources/model/app/control/IPSAppViewQuickGroupItem.json create mode 100644 resources/model/app/dataentity/IPSAppDEACMode.json create mode 100644 resources/model/app/dataentity/IPSAppDEACModeDataItem.json create mode 100644 resources/model/app/dataentity/IPSAppDEAction.json create mode 100644 resources/model/app/dataentity/IPSAppDEActionInput.json create mode 100644 resources/model/app/dataentity/IPSAppDEActionInputParam.json create mode 100644 resources/model/app/dataentity/IPSAppDEActionLogic.json create mode 100644 resources/model/app/dataentity/IPSAppDEDRGroup.json create mode 100644 resources/model/app/dataentity/IPSAppDEDRItem.json create mode 100644 resources/model/app/dataentity/IPSAppDEDataExport.json create mode 100644 resources/model/app/dataentity/IPSAppDEDataExportItem.json create mode 100644 resources/model/app/dataentity/IPSAppDEDataImport.json create mode 100644 resources/model/app/dataentity/IPSAppDEDataImportItem.json create mode 100644 resources/model/app/dataentity/IPSAppDEDataSet.json create mode 100644 resources/model/app/dataentity/IPSAppDEFLogic.json create mode 100644 resources/model/app/dataentity/IPSAppDEFUIItem.json create mode 100644 resources/model/app/dataentity/IPSAppDEFUIMode.json create mode 100644 resources/model/app/dataentity/IPSAppDEFValueRule.json create mode 100644 resources/model/app/dataentity/IPSAppDEField.json create mode 100644 resources/model/app/dataentity/IPSAppDELogic.json create mode 100644 resources/model/app/dataentity/IPSAppDELogicLink.json create mode 100644 resources/model/app/dataentity/IPSAppDELogicLinkCond.json create mode 100644 resources/model/app/dataentity/IPSAppDELogicNode.json create mode 100644 resources/model/app/dataentity/IPSAppDELogicNodeParam.json create mode 100644 resources/model/app/dataentity/IPSAppDELogicParam.json create mode 100644 resources/model/app/dataentity/IPSAppDEMethod.json create mode 100644 resources/model/app/dataentity/IPSAppDEMethodDTO.json create mode 100644 resources/model/app/dataentity/IPSAppDEMethodDTOField.json create mode 100644 resources/model/app/dataentity/IPSAppDEMethodInput.json create mode 100644 resources/model/app/dataentity/IPSAppDEMethodLogic.json create mode 100644 resources/model/app/dataentity/IPSAppDEMethodReturn.json create mode 100644 resources/model/app/dataentity/IPSAppDERS.json create mode 100644 resources/model/app/dataentity/IPSAppDEUIAction.json create mode 100644 resources/model/app/dataentity/IPSAppDEUIActionGroup.json create mode 100644 resources/model/app/dataentity/IPSAppDEUIActionGroupDetail.json create mode 100644 resources/model/app/dataentity/IPSAppDEUILogic.json create mode 100644 resources/model/app/dataentity/IPSAppDEUILogicGroup.json create mode 100644 resources/model/app/dataentity/IPSAppDEUILogicGroupDetail.json create mode 100644 resources/model/app/dataentity/IPSAppDEUILogicLink.json create mode 100644 resources/model/app/dataentity/IPSAppDEUILogicLinkCond.json create mode 100644 resources/model/app/dataentity/IPSAppDEUILogicNode.json create mode 100644 resources/model/app/dataentity/IPSAppDEUILogicNodeParam.json create mode 100644 resources/model/app/dataentity/IPSAppDEUILogicParam.json create mode 100644 resources/model/app/dataentity/IPSAppDataEntity.json create mode 100644 resources/model/app/dataentity/IPSAppDataEntityObject.json create mode 100644 resources/model/app/func/IPSAppFunc.json create mode 100644 resources/model/app/logic/IPSAppUILogic.json create mode 100644 resources/model/app/logic/IPSAppUILogicRefView.json create mode 100644 resources/model/app/logic/IPSAppUILogicRefViewBase.json create mode 100644 resources/model/app/logic/IPSAppUINewDataLogic.json create mode 100644 resources/model/app/logic/IPSAppUIOpenDataLogic.json create mode 100644 resources/model/app/mob/IPSAppLocalDE.json create mode 100644 resources/model/app/mob/IPSMobAppIcon.json create mode 100644 resources/model/app/mob/IPSMobAppStartPage.json create mode 100644 resources/model/app/msg/IPSAppMsgTempl.json create mode 100644 resources/model/app/pub/IPSAppViewCode.json create mode 100644 resources/model/app/res/IPSAppCss.json create mode 100644 resources/model/app/res/IPSAppEditorStyleRef.json create mode 100644 resources/model/app/res/IPSAppImage.json create mode 100644 resources/model/app/res/IPSAppPFPluginRef.json create mode 100644 resources/model/app/res/IPSAppSubViewTypeRef.json create mode 100644 resources/model/app/theme/IPSAppUITheme.json create mode 100644 resources/model/app/usermode/IPSAppUserMode.json create mode 100644 resources/model/app/util/IPSAppDraftStorageUtil.json create mode 100644 resources/model/app/util/IPSAppDynaDashboardUtil.json create mode 100644 resources/model/app/util/IPSAppDynaUtilBase.json create mode 100644 resources/model/app/util/IPSAppFilterStorageUtil.json create mode 100644 resources/model/app/util/IPSAppUtil.json create mode 100644 resources/model/app/valuerule/IPSAppValueRule.json create mode 100644 resources/model/app/view/IPSAppDECalendarExplorerView.json create mode 100644 resources/model/app/view/IPSAppDECalendarView.json create mode 100644 resources/model/app/view/IPSAppDEChartExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEChartView.json create mode 100644 resources/model/app/view/IPSAppDECustomView.json create mode 100644 resources/model/app/view/IPSAppDEDashboardView.json create mode 100644 resources/model/app/view/IPSAppDEDataSetViewMsg.json create mode 100644 resources/model/app/view/IPSAppDEDataView.json create mode 100644 resources/model/app/view/IPSAppDEDataViewExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEEditView.json create mode 100644 resources/model/app/view/IPSAppDEExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEGanttExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEGanttView.json create mode 100644 resources/model/app/view/IPSAppDEGridExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEGridView.json create mode 100644 resources/model/app/view/IPSAppDEGridView8.json create mode 100644 resources/model/app/view/IPSAppDEHtmlView.json create mode 100644 resources/model/app/view/IPSAppDEIndexView.json create mode 100644 resources/model/app/view/IPSAppDEKanbanView.json create mode 100644 resources/model/app/view/IPSAppDEListExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEListView.json create mode 100644 resources/model/app/view/IPSAppDEMEditView.json create mode 100644 resources/model/app/view/IPSAppDEMapExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMapView.json create mode 100644 resources/model/app/view/IPSAppDEMobCalendarExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMobCalendarView.json create mode 100644 resources/model/app/view/IPSAppDEMobChartExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMobChartView.json create mode 100644 resources/model/app/view/IPSAppDEMobCustomView.json create mode 100644 resources/model/app/view/IPSAppDEMobDashboardView.json create mode 100644 resources/model/app/view/IPSAppDEMobDataView.json create mode 100644 resources/model/app/view/IPSAppDEMobDataViewExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMobEditView.json create mode 100644 resources/model/app/view/IPSAppDEMobGanttExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMobGanttView.json create mode 100644 resources/model/app/view/IPSAppDEMobHtmlView.json create mode 100644 resources/model/app/view/IPSAppDEMobListExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMobListView.json create mode 100644 resources/model/app/view/IPSAppDEMobMDView.json create mode 100644 resources/model/app/view/IPSAppDEMobMEditView.json create mode 100644 resources/model/app/view/IPSAppDEMobMapExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMobMapView.json create mode 100644 resources/model/app/view/IPSAppDEMobPanelView.json create mode 100644 resources/model/app/view/IPSAppDEMobPickupView.json create mode 100644 resources/model/app/view/IPSAppDEMobRedirectView.json create mode 100644 resources/model/app/view/IPSAppDEMobReportView.json create mode 100644 resources/model/app/view/IPSAppDEMobTabExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMobTabSearchView.json create mode 100644 resources/model/app/view/IPSAppDEMobTreeExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEMobTreeView.json create mode 100644 resources/model/app/view/IPSAppDEMobView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFActionView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFDataRedirectView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFDynaActionView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFDynaEditView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFDynaExpMDView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFDynaStartView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFEditView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFMDView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFProxyResultView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFProxyStartView.json create mode 100644 resources/model/app/view/IPSAppDEMobWFView.json create mode 100644 resources/model/app/view/IPSAppDEMobWizardView.json create mode 100644 resources/model/app/view/IPSAppDEMultiDataView.json create mode 100644 resources/model/app/view/IPSAppDEMultiDataView2.json create mode 100644 resources/model/app/view/IPSAppDEPanelView.json create mode 100644 resources/model/app/view/IPSAppDEPickupView.json create mode 100644 resources/model/app/view/IPSAppDERedirectView.json create mode 100644 resources/model/app/view/IPSAppDEReportView.json create mode 100644 resources/model/app/view/IPSAppDESearchView.json create mode 100644 resources/model/app/view/IPSAppDESearchView2.json create mode 100644 resources/model/app/view/IPSAppDESideBarExplorerView.json create mode 100644 resources/model/app/view/IPSAppDETabExplorerView.json create mode 100644 resources/model/app/view/IPSAppDETabFormView.json create mode 100644 resources/model/app/view/IPSAppDETabSearchView.json create mode 100644 resources/model/app/view/IPSAppDETreeExplorerView.json create mode 100644 resources/model/app/view/IPSAppDETreeGridExView.json create mode 100644 resources/model/app/view/IPSAppDETreeGridView.json create mode 100644 resources/model/app/view/IPSAppDETreeView.json create mode 100644 resources/model/app/view/IPSAppDEView.json create mode 100644 resources/model/app/view/IPSAppDEViewBase.json create mode 100644 resources/model/app/view/IPSAppDEViewLogic.json create mode 100644 resources/model/app/view/IPSAppDEWFActionView.json create mode 100644 resources/model/app/view/IPSAppDEWFDataRedirectView.json create mode 100644 resources/model/app/view/IPSAppDEWFDynaActionView.json create mode 100644 resources/model/app/view/IPSAppDEWFDynaEditView.json create mode 100644 resources/model/app/view/IPSAppDEWFDynaExpGridView.json create mode 100644 resources/model/app/view/IPSAppDEWFDynaStartView.json create mode 100644 resources/model/app/view/IPSAppDEWFEditProxyDataView.json create mode 100644 resources/model/app/view/IPSAppDEWFEditView.json create mode 100644 resources/model/app/view/IPSAppDEWFExplorerView.json create mode 100644 resources/model/app/view/IPSAppDEWFGridView.json create mode 100644 resources/model/app/view/IPSAppDEWFProxyDataRedirectView.json create mode 100644 resources/model/app/view/IPSAppDEWFProxyDataView.json create mode 100644 resources/model/app/view/IPSAppDEWFProxyResultView.json create mode 100644 resources/model/app/view/IPSAppDEWFProxyStartView.json create mode 100644 resources/model/app/view/IPSAppDEWFView.json create mode 100644 resources/model/app/view/IPSAppDEWizardView.json create mode 100644 resources/model/app/view/IPSAppDEXDataView.json create mode 100644 resources/model/app/view/IPSAppDataRelationView.json create mode 100644 resources/model/app/view/IPSAppErrorView.json create mode 100644 resources/model/app/view/IPSAppExplorerView.json create mode 100644 resources/model/app/view/IPSAppFuncPickupView.json create mode 100644 resources/model/app/view/IPSAppIndexView.json create mode 100644 resources/model/app/view/IPSAppMobView.json create mode 100644 resources/model/app/view/IPSAppPanelView.json create mode 100644 resources/model/app/view/IPSAppPortalView.json create mode 100644 resources/model/app/view/IPSAppRedirectView.json create mode 100644 resources/model/app/view/IPSAppUIAction.json create mode 100644 resources/model/app/view/IPSAppUtilView.json create mode 100644 resources/model/app/view/IPSAppView.json create mode 100644 resources/model/app/view/IPSAppViewBase.json create mode 100644 resources/model/app/view/IPSAppViewEngine.json create mode 100644 resources/model/app/view/IPSAppViewEngineParam.json create mode 100644 resources/model/app/view/IPSAppViewLogic.json create mode 100644 resources/model/app/view/IPSAppViewMsg.json create mode 100644 resources/model/app/view/IPSAppViewMsgGroup.json create mode 100644 resources/model/app/view/IPSAppViewMsgGroupDetail.json create mode 100644 resources/model/app/view/IPSAppViewNavContext.json create mode 100644 resources/model/app/view/IPSAppViewNavParam.json create mode 100644 resources/model/app/view/IPSAppViewParam.json create mode 100644 resources/model/app/view/IPSAppViewRef.json create mode 100644 resources/model/app/view/IPSAppViewUIAction.json create mode 100644 resources/model/app/view/IPSDEUIActionItem.json create mode 100644 resources/model/app/view/IPSUIActionItem.json create mode 100644 resources/model/app/view/IPSWFUIActionItem.json create mode 100644 resources/model/app/wf/IPSAppWF.json create mode 100644 resources/model/app/wf/IPSAppWFUIAction.json create mode 100644 resources/model/app/wf/IPSAppWFUIActionGroup.json create mode 100644 resources/model/app/wf/IPSAppWFUIActionGroupDetail.json create mode 100644 resources/model/app/wf/IPSAppWFUtilUIAction.json create mode 100644 resources/model/app/wf/IPSAppWFVer.json create mode 100644 resources/model/backservice/IPSSysBackService.json create mode 100644 resources/model/bi/IPSBIAggColumn.json create mode 100644 resources/model/bi/IPSBIAggTable.json create mode 100644 resources/model/bi/IPSBIAggTableObject.json create mode 100644 resources/model/bi/IPSBICube.json create mode 100644 resources/model/bi/IPSBICubeDimension.json create mode 100644 resources/model/bi/IPSBICubeDimensionObject.json create mode 100644 resources/model/bi/IPSBICubeLevel.json create mode 100644 resources/model/bi/IPSBICubeMeasure.json create mode 100644 resources/model/bi/IPSBICubeObject.json create mode 100644 resources/model/bi/IPSBIDimension.json create mode 100644 resources/model/bi/IPSBIDimensionObject.json create mode 100644 resources/model/bi/IPSBIHierarchy.json create mode 100644 resources/model/bi/IPSBIHierarchyObject.json create mode 100644 resources/model/bi/IPSBILevel.json create mode 100644 resources/model/bi/IPSBIReport.json create mode 100644 resources/model/bi/IPSBIReportDimension.json create mode 100644 resources/model/bi/IPSBIReportItem.json create mode 100644 resources/model/bi/IPSBIReportMeasure.json create mode 100644 resources/model/bi/IPSBIReportObject.json create mode 100644 resources/model/bi/IPSBIScheme.json create mode 100644 resources/model/bi/IPSBISchemeObject.json create mode 100644 resources/model/bi/IPSSysBIAggColumn.json create mode 100644 resources/model/bi/IPSSysBIAggTable.json create mode 100644 resources/model/bi/IPSSysBIAggTableObject.json create mode 100644 resources/model/bi/IPSSysBICube.json create mode 100644 resources/model/bi/IPSSysBICubeDimension.json create mode 100644 resources/model/bi/IPSSysBICubeDimensionObject.json create mode 100644 resources/model/bi/IPSSysBICubeLevel.json create mode 100644 resources/model/bi/IPSSysBICubeMeasure.json create mode 100644 resources/model/bi/IPSSysBICubeObject.json create mode 100644 resources/model/bi/IPSSysBIDimension.json create mode 100644 resources/model/bi/IPSSysBIDimensionObject.json create mode 100644 resources/model/bi/IPSSysBIHierarchy.json create mode 100644 resources/model/bi/IPSSysBIHierarchyObject.json create mode 100644 resources/model/bi/IPSSysBILevel.json create mode 100644 resources/model/bi/IPSSysBIReport.json create mode 100644 resources/model/bi/IPSSysBIReportDimension.json create mode 100644 resources/model/bi/IPSSysBIReportItem.json create mode 100644 resources/model/bi/IPSSysBIReportMeasure.json create mode 100644 resources/model/bi/IPSSysBIReportObject.json create mode 100644 resources/model/bi/IPSSysBIScheme.json create mode 100644 resources/model/bi/IPSSysBISchemeObject.json create mode 100644 resources/model/codelist/IPSCodeItem.json create mode 100644 resources/model/codelist/IPSCodeList.json create mode 100644 resources/model/codelist/IPSThreshold.json create mode 100644 resources/model/codelist/IPSThresholdGroup.json create mode 100644 resources/model/control/IPSAjaxControl.json create mode 100644 resources/model/control/IPSAjaxControlParam.json create mode 100644 resources/model/control/IPSAjaxEditor.json create mode 100644 resources/model/control/IPSControl.json create mode 100644 resources/model/control/IPSControlAction.json create mode 100644 resources/model/control/IPSControlContainer.json create mode 100644 resources/model/control/IPSControlHandler.json create mode 100644 resources/model/control/IPSControlHandlerAction.json create mode 100644 resources/model/control/IPSControlLogic.json create mode 100644 resources/model/control/IPSControlMDObject.json create mode 100644 resources/model/control/IPSControlMDataContainer.json create mode 100644 resources/model/control/IPSControlNavContext.json create mode 100644 resources/model/control/IPSControlNavParam.json create mode 100644 resources/model/control/IPSControlNavigatable.json create mode 100644 resources/model/control/IPSControlObjectNavigatable.json create mode 100644 resources/model/control/IPSControlParam.json create mode 100644 resources/model/control/IPSControlXDataContainer.json create mode 100644 resources/model/control/IPSEditor.json create mode 100644 resources/model/control/IPSEditorContainer.json create mode 100644 resources/model/control/IPSMDAjaxControl.json create mode 100644 resources/model/control/IPSMDAjaxControlParam.json create mode 100644 resources/model/control/IPSMDControl.json create mode 100644 resources/model/control/IPSMDControl2.json create mode 100644 resources/model/control/IPSNavigatable.json create mode 100644 resources/model/control/IPSNavigateContext.json create mode 100644 resources/model/control/IPSNavigateParam.json create mode 100644 resources/model/control/IPSNavigateParamContainer.json create mode 100644 resources/model/control/IPSRawItem.json create mode 100644 resources/model/control/IPSSDAjaxControl.json create mode 100644 resources/model/control/IPSSDAjaxControlParam.json create mode 100644 resources/model/control/IPSSDControl.json create mode 100644 resources/model/control/IPSUserControl.json create mode 100644 resources/model/control/ajax/IPSAjaxControlHandler.json create mode 100644 resources/model/control/ajax/IPSAjaxControlHandlerAction.json create mode 100644 resources/model/control/ajax/IPSAjaxHandler.json create mode 100644 resources/model/control/ajax/IPSAjaxHandlerAction.json create mode 100644 resources/model/control/ajax/IPSMDAjaxControlHandler.json create mode 100644 resources/model/control/ajax/IPSSDAjaxControlHandler.json create mode 100644 resources/model/control/button/IPSButton.json create mode 100644 resources/model/control/button/IPSButtonContainer.json create mode 100644 resources/model/control/calendar/IPSCalendar.json create mode 100644 resources/model/control/calendar/IPSCalendarItem.json create mode 100644 resources/model/control/calendar/IPSCalendarParam.json create mode 100644 resources/model/control/calendar/IPSDECalendar.json create mode 100644 resources/model/control/calendar/IPSDECalendarItem.json create mode 100644 resources/model/control/calendar/IPSSysCalendar.json create mode 100644 resources/model/control/calendar/IPSSysCalendarItem.json create mode 100644 resources/model/control/calendar/IPSSysCalendarItemRV.json create mode 100644 resources/model/control/calendar/IPSSysCalendarParam.json create mode 100644 resources/model/control/captionbar/IPSCaptionBar.json create mode 100644 resources/model/control/captionbar/IPSCaptionBarParam.json create mode 100644 resources/model/control/chart/IPSChart.json create mode 100644 resources/model/control/chart/IPSChartAngleAxis.json create mode 100644 resources/model/control/chart/IPSChartAxes.json create mode 100644 resources/model/control/chart/IPSChartAxis.json create mode 100644 resources/model/control/chart/IPSChartCalendar.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystem.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemCalendar.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemCartesian2D.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemControl.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemGeo.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemNone.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemParallel.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemPolar.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemRadar.json create mode 100644 resources/model/control/chart/IPSChartCoordinateSystemSingle.json create mode 100644 resources/model/control/chart/IPSChartDataItem.json create mode 100644 resources/model/control/chart/IPSChartDataSet.json create mode 100644 resources/model/control/chart/IPSChartDataSetField.json create mode 100644 resources/model/control/chart/IPSChartDataSetGroup.json create mode 100644 resources/model/control/chart/IPSChartGeo.json create mode 100644 resources/model/control/chart/IPSChartGrid.json create mode 100644 resources/model/control/chart/IPSChartGridAxis.json create mode 100644 resources/model/control/chart/IPSChartGridXAxis.json create mode 100644 resources/model/control/chart/IPSChartGridYAxis.json create mode 100644 resources/model/control/chart/IPSChartLegend.json create mode 100644 resources/model/control/chart/IPSChartObject.json create mode 100644 resources/model/control/chart/IPSChartParallel.json create mode 100644 resources/model/control/chart/IPSChartParallelAxis.json create mode 100644 resources/model/control/chart/IPSChartPolar.json create mode 100644 resources/model/control/chart/IPSChartPolarAngleAxis.json create mode 100644 resources/model/control/chart/IPSChartPolarAxis.json create mode 100644 resources/model/control/chart/IPSChartPolarRadiusAxis.json create mode 100644 resources/model/control/chart/IPSChartPosition.json create mode 100644 resources/model/control/chart/IPSChartRadar.json create mode 100644 resources/model/control/chart/IPSChartRadiusAxis.json create mode 100644 resources/model/control/chart/IPSChartSeries.json create mode 100644 resources/model/control/chart/IPSChartSeriesBar.json create mode 100644 resources/model/control/chart/IPSChartSeriesBoxplot.json create mode 100644 resources/model/control/chart/IPSChartSeriesCSCartesian2DEncode.json create mode 100644 resources/model/control/chart/IPSChartSeriesCSGeoEncode.json create mode 100644 resources/model/control/chart/IPSChartSeriesCSNone.json create mode 100644 resources/model/control/chart/IPSChartSeriesCSNoneEncode.json create mode 100644 resources/model/control/chart/IPSChartSeriesCSPolarEncode.json create mode 100644 resources/model/control/chart/IPSChartSeriesCSSingleEncode.json create mode 100644 resources/model/control/chart/IPSChartSeriesCandlestick.json create mode 100644 resources/model/control/chart/IPSChartSeriesCustom.json create mode 100644 resources/model/control/chart/IPSChartSeriesEncode.json create mode 100644 resources/model/control/chart/IPSChartSeriesFunnel.json create mode 100644 resources/model/control/chart/IPSChartSeriesGauge.json create mode 100644 resources/model/control/chart/IPSChartSeriesGraph.json create mode 100644 resources/model/control/chart/IPSChartSeriesHeatmap.json create mode 100644 resources/model/control/chart/IPSChartSeriesLine.json create mode 100644 resources/model/control/chart/IPSChartSeriesLines.json create mode 100644 resources/model/control/chart/IPSChartSeriesMap.json create mode 100644 resources/model/control/chart/IPSChartSeriesParallel.json create mode 100644 resources/model/control/chart/IPSChartSeriesPictorialBar.json create mode 100644 resources/model/control/chart/IPSChartSeriesPie.json create mode 100644 resources/model/control/chart/IPSChartSeriesRadar.json create mode 100644 resources/model/control/chart/IPSChartSeriesSankey.json create mode 100644 resources/model/control/chart/IPSChartSeriesScatter.json create mode 100644 resources/model/control/chart/IPSChartSeriesSunburst.json create mode 100644 resources/model/control/chart/IPSChartSeriesThemeRiver.json create mode 100644 resources/model/control/chart/IPSChartSeriesTree.json create mode 100644 resources/model/control/chart/IPSChartSeriesTreemap.json create mode 100644 resources/model/control/chart/IPSChartSingle.json create mode 100644 resources/model/control/chart/IPSChartSingleAxis.json create mode 100644 resources/model/control/chart/IPSChartTimeline.json create mode 100644 resources/model/control/chart/IPSChartTitle.json create mode 100644 resources/model/control/chart/IPSChartVisualMap.json create mode 100644 resources/model/control/chart/IPSChartXAxis.json create mode 100644 resources/model/control/chart/IPSChartYAxis.json create mode 100644 resources/model/control/chart/IPSDEChart.json create mode 100644 resources/model/control/chart/IPSDEChartAxes.json create mode 100644 resources/model/control/chart/IPSDEChartCalendar.json create mode 100644 resources/model/control/chart/IPSDEChartCoordinateSystem.json create mode 100644 resources/model/control/chart/IPSDEChartDataSet.json create mode 100644 resources/model/control/chart/IPSDEChartDataSetField.json create mode 100644 resources/model/control/chart/IPSDEChartDataSetGroup.json create mode 100644 resources/model/control/chart/IPSDEChartGeo.json create mode 100644 resources/model/control/chart/IPSDEChartGrid.json create mode 100644 resources/model/control/chart/IPSDEChartHandler.json create mode 100644 resources/model/control/chart/IPSDEChartLegend.json create mode 100644 resources/model/control/chart/IPSDEChartObject.json create mode 100644 resources/model/control/chart/IPSDEChartParallel.json create mode 100644 resources/model/control/chart/IPSDEChartParam.json create mode 100644 resources/model/control/chart/IPSDEChartPolar.json create mode 100644 resources/model/control/chart/IPSDEChartRadar.json create mode 100644 resources/model/control/chart/IPSDEChartSeries.json create mode 100644 resources/model/control/chart/IPSDEChartSeriesEncode.json create mode 100644 resources/model/control/chart/IPSDEChartSingle.json create mode 100644 resources/model/control/chart/IPSDEChartTitle.json create mode 100644 resources/model/control/chart/IPSDEChartVisualMap.json create mode 100644 resources/model/control/chart/IPSECharts.json create mode 100644 resources/model/control/chart/IPSEChartsObject.json create mode 100644 resources/model/control/counter/IPSCounter.json create mode 100644 resources/model/control/counter/IPSCounterType.json create mode 100644 resources/model/control/counter/IPSDEDRCounter.json create mode 100644 resources/model/control/counter/IPSSysCounter.json create mode 100644 resources/model/control/counter/IPSSysCounterItem.json create mode 100644 resources/model/control/counter/IPSSysCounterRef.json create mode 100644 resources/model/control/custom/IPSCustomControl.json create mode 100644 resources/model/control/custom/IPSCustomControlHandler.json create mode 100644 resources/model/control/custom/IPSCustomControlParam.json create mode 100644 resources/model/control/dashboard/IPSDBAppMenuPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBAppMenuPortletPartParam.json create mode 100644 resources/model/control/dashboard/IPSDBAppViewPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBAppViewPortletPartParam.json create mode 100644 resources/model/control/dashboard/IPSDBChartPortlet.json create mode 100644 resources/model/control/dashboard/IPSDBContainerPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBContainerPortletPartParam.json create mode 100644 resources/model/control/dashboard/IPSDBCustomPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBHtmlPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBListPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBMenuPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBPortletPartParam.json create mode 100644 resources/model/control/dashboard/IPSDBRawItemPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBRawItemPortletPartParam.json create mode 100644 resources/model/control/dashboard/IPSDBSysPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDBSysPortletPartParam.json create mode 100644 resources/model/control/dashboard/IPSDBToolbarPortlet.json create mode 100644 resources/model/control/dashboard/IPSDBViewPortletPart.json create mode 100644 resources/model/control/dashboard/IPSDEDashboard.json create mode 100644 resources/model/control/dashboard/IPSDashboard.json create mode 100644 resources/model/control/dashboard/IPSDashboardContainer.json create mode 100644 resources/model/control/dashboard/IPSDashboardParam.json create mode 100644 resources/model/control/dashboard/IPSSysDashboard.json create mode 100644 resources/model/control/dashboard/IPSSysDashboardParam.json create mode 100644 resources/model/control/datainfobar/IPSDataInfoBar.json create mode 100644 resources/model/control/datainfobar/IPSDataInfoBarParam.json create mode 100644 resources/model/control/dataview/IPSDEDataView.json create mode 100644 resources/model/control/dataview/IPSDEDataViewDataItem.json create mode 100644 resources/model/control/dataview/IPSDEDataViewHandler.json create mode 100644 resources/model/control/dataview/IPSDEDataViewItem.json create mode 100644 resources/model/control/dataview/IPSDEDataViewParam.json create mode 100644 resources/model/control/dataview/IPSDEKanban.json create mode 100644 resources/model/control/dataview/IPSDEKanbanHandler.json create mode 100644 resources/model/control/dataview/IPSDEKanbanParam.json create mode 100644 resources/model/control/drctrl/IPSDEDRBar.json create mode 100644 resources/model/control/drctrl/IPSDEDRBarGroup.json create mode 100644 resources/model/control/drctrl/IPSDEDRBarItem.json create mode 100644 resources/model/control/drctrl/IPSDEDRBarParam.json create mode 100644 resources/model/control/drctrl/IPSDEDRCtrl.json create mode 100644 resources/model/control/drctrl/IPSDEDRCtrlItem.json create mode 100644 resources/model/control/drctrl/IPSDEDRCtrlParam.json create mode 100644 resources/model/control/drctrl/IPSDEDRTab.json create mode 100644 resources/model/control/drctrl/IPSDEDRTabPage.json create mode 100644 resources/model/control/drctrl/IPSDEDRTabParam.json create mode 100644 resources/model/control/drctrl/IPSDRBar.json create mode 100644 resources/model/control/drctrl/IPSDRCtrl.json create mode 100644 resources/model/control/drctrl/IPSDRTab.json create mode 100644 resources/model/control/editor/IPSAutoComplete.json create mode 100644 resources/model/control/editor/IPSBarCode2DReader.json create mode 100644 resources/model/control/editor/IPSBarCodeReader.json create mode 100644 resources/model/control/editor/IPSCheckBox.json create mode 100644 resources/model/control/editor/IPSCheckBoxList.json create mode 100644 resources/model/control/editor/IPSCode.json create mode 100644 resources/model/control/editor/IPSCodeListEditor.json create mode 100644 resources/model/control/editor/IPSDatePicker.json create mode 100644 resources/model/control/editor/IPSDateRange.json create mode 100644 resources/model/control/editor/IPSDropDownList.json create mode 100644 resources/model/control/editor/IPSFileUploader.json create mode 100644 resources/model/control/editor/IPSHidden.json create mode 100644 resources/model/control/editor/IPSHtml.json create mode 100644 resources/model/control/editor/IPSIPAddress.json create mode 100644 resources/model/control/editor/IPSListBox.json create mode 100644 resources/model/control/editor/IPSListBoxPicker.json create mode 100644 resources/model/control/editor/IPSMDropDownList.json create mode 100644 resources/model/control/editor/IPSMPicker.json create mode 100644 resources/model/control/editor/IPSMailAddress.json create mode 100644 resources/model/control/editor/IPSMarkdown.json create mode 100644 resources/model/control/editor/IPSNumberEditor.json create mode 100644 resources/model/control/editor/IPSNumberRange.json create mode 100644 resources/model/control/editor/IPSOffice.json create mode 100644 resources/model/control/editor/IPSOffice2.json create mode 100644 resources/model/control/editor/IPSPassword.json create mode 100644 resources/model/control/editor/IPSPicker.json create mode 100644 resources/model/control/editor/IPSPickerEditor.json create mode 100644 resources/model/control/editor/IPSPickupView.json create mode 100644 resources/model/control/editor/IPSPicture.json create mode 100644 resources/model/control/editor/IPSRadioButtonList.json create mode 100644 resources/model/control/editor/IPSRating.json create mode 100644 resources/model/control/editor/IPSRaw.json create mode 100644 resources/model/control/editor/IPSSlider.json create mode 100644 resources/model/control/editor/IPSSpan.json create mode 100644 resources/model/control/editor/IPSStepper.json create mode 100644 resources/model/control/editor/IPSTextArea.json create mode 100644 resources/model/control/editor/IPSTextBox.json create mode 100644 resources/model/control/editor/IPSTextEditor.json create mode 100644 resources/model/control/editor/IPSValueItemEditor.json create mode 100644 resources/model/control/expbar/IPSCalendarExpBar.json create mode 100644 resources/model/control/expbar/IPSCalendarExpBarParam.json create mode 100644 resources/model/control/expbar/IPSChartExpBar.json create mode 100644 resources/model/control/expbar/IPSChartExpBarParam.json create mode 100644 resources/model/control/expbar/IPSDataViewExpBar.json create mode 100644 resources/model/control/expbar/IPSDataViewExpBarParam.json create mode 100644 resources/model/control/expbar/IPSExpBar.json create mode 100644 resources/model/control/expbar/IPSExpBarParam.json create mode 100644 resources/model/control/expbar/IPSGanttExpBar.json create mode 100644 resources/model/control/expbar/IPSGanttExpBarParam.json create mode 100644 resources/model/control/expbar/IPSGridExpBar.json create mode 100644 resources/model/control/expbar/IPSGridExpBarParam.json create mode 100644 resources/model/control/expbar/IPSListExpBar.json create mode 100644 resources/model/control/expbar/IPSListExpBarParam.json create mode 100644 resources/model/control/expbar/IPSMapExpBar.json create mode 100644 resources/model/control/expbar/IPSMapExpBarParam.json create mode 100644 resources/model/control/expbar/IPSTabExpPage.json create mode 100644 resources/model/control/expbar/IPSTabExpPanel.json create mode 100644 resources/model/control/expbar/IPSTabExpPanelParam.json create mode 100644 resources/model/control/expbar/IPSTreeExpBar.json create mode 100644 resources/model/control/expbar/IPSTreeExpBarParam.json create mode 100644 resources/model/control/expbar/IPSWFExpBar.json create mode 100644 resources/model/control/expbar/IPSWFExpBarParam.json create mode 100644 resources/model/control/form/IPSDEEditForm.json create mode 100644 resources/model/control/form/IPSDEEditFormHandler.json create mode 100644 resources/model/control/form/IPSDEEditFormItem.json create mode 100644 resources/model/control/form/IPSDEEditFormParam.json create mode 100644 resources/model/control/form/IPSDEFDCatGroupLogic.json create mode 100644 resources/model/control/form/IPSDEFDGroupLogic.json create mode 100644 resources/model/control/form/IPSDEFDLogic.json create mode 100644 resources/model/control/form/IPSDEFDSingleLogic.json create mode 100644 resources/model/control/form/IPSDEFFormItem.json create mode 100644 resources/model/control/form/IPSDEFIUpdateDetail.json create mode 100644 resources/model/control/form/IPSDEFSearchFormItem.json create mode 100644 resources/model/control/form/IPSDEForm.json create mode 100644 resources/model/control/form/IPSDEFormButton.json create mode 100644 resources/model/control/form/IPSDEFormDRUIPart.json create mode 100644 resources/model/control/form/IPSDEFormDataItem.json create mode 100644 resources/model/control/form/IPSDEFormDetail.json create mode 100644 resources/model/control/form/IPSDEFormFormPart.json create mode 100644 resources/model/control/form/IPSDEFormGroupBase.json create mode 100644 resources/model/control/form/IPSDEFormGroupPanel.json create mode 100644 resources/model/control/form/IPSDEFormIFrame.json create mode 100644 resources/model/control/form/IPSDEFormItem.json create mode 100644 resources/model/control/form/IPSDEFormItemEx.json create mode 100644 resources/model/control/form/IPSDEFormItemUpdate.json create mode 100644 resources/model/control/form/IPSDEFormItemVR.json create mode 100644 resources/model/control/form/IPSDEFormMDCtrl.json create mode 100644 resources/model/control/form/IPSDEFormPage.json create mode 100644 resources/model/control/form/IPSDEFormParam.json create mode 100644 resources/model/control/form/IPSDEFormRawItem.json create mode 100644 resources/model/control/form/IPSDEFormTabPage.json create mode 100644 resources/model/control/form/IPSDEFormTabPanel.json create mode 100644 resources/model/control/form/IPSDEFormUserControl.json create mode 100644 resources/model/control/form/IPSDESearchForm.json create mode 100644 resources/model/control/form/IPSDESearchFormHandler.json create mode 100644 resources/model/control/form/IPSDESearchFormItem.json create mode 100644 resources/model/control/form/IPSDESearchFormParam.json create mode 100644 resources/model/control/form/IPSDEWizardEditForm.json create mode 100644 resources/model/control/form/IPSDEWizardEditFormParam.json create mode 100644 resources/model/control/form/IPSFIDEFValueRule.json create mode 100644 resources/model/control/form/IPSWFEditForm.json create mode 100644 resources/model/control/grid/IPSDEFGridColumn.json create mode 100644 resources/model/control/grid/IPSDEGEIUpdateDetail.json create mode 100644 resources/model/control/grid/IPSDEGrid.json create mode 100644 resources/model/control/grid/IPSDEGridColumn.json create mode 100644 resources/model/control/grid/IPSDEGridDataItem.json create mode 100644 resources/model/control/grid/IPSDEGridEditItem.json create mode 100644 resources/model/control/grid/IPSDEGridEditItemUpdate.json create mode 100644 resources/model/control/grid/IPSDEGridEditItemVR.json create mode 100644 resources/model/control/grid/IPSDEGridFieldColumn.json create mode 100644 resources/model/control/grid/IPSDEGridGroupColumn.json create mode 100644 resources/model/control/grid/IPSDEGridHandler.json create mode 100644 resources/model/control/grid/IPSDEGridParam.json create mode 100644 resources/model/control/grid/IPSDEGridUAColumn.json create mode 100644 resources/model/control/grid/IPSDEMultiEditViewPanel.json create mode 100644 resources/model/control/grid/IPSDEMultiEditViewPanelParam.json create mode 100644 resources/model/control/grid/IPSDETreeGrid.json create mode 100644 resources/model/control/grid/IPSDETreeGridFieldColumn.json create mode 100644 resources/model/control/grid/IPSDETreeGridParam.json create mode 100644 resources/model/control/grid/IPSGEIDEFValueRule.json create mode 100644 resources/model/control/layout/IPSAbsoluteLayout.json create mode 100644 resources/model/control/layout/IPSAbsoluteLayoutPos.json create mode 100644 resources/model/control/layout/IPSBorderLayout.json create mode 100644 resources/model/control/layout/IPSBorderLayoutPos.json create mode 100644 resources/model/control/layout/IPSFlexLayout.json create mode 100644 resources/model/control/layout/IPSFlexLayoutPos.json create mode 100644 resources/model/control/layout/IPSGridLayout.json create mode 100644 resources/model/control/layout/IPSGridLayoutPos.json create mode 100644 resources/model/control/layout/IPSLayout.json create mode 100644 resources/model/control/layout/IPSLayoutContainer.json create mode 100644 resources/model/control/layout/IPSLayoutItem.json create mode 100644 resources/model/control/layout/IPSLayoutPos.json create mode 100644 resources/model/control/layout/IPSTableLayout.json create mode 100644 resources/model/control/layout/IPSTableLayoutPos.json create mode 100644 resources/model/control/list/IPSDEList.json create mode 100644 resources/model/control/list/IPSDEListDataItem.json create mode 100644 resources/model/control/list/IPSDEListHandler.json create mode 100644 resources/model/control/list/IPSDEListItem.json create mode 100644 resources/model/control/list/IPSDEListParam.json create mode 100644 resources/model/control/list/IPSDEMobMDCtrl.json create mode 100644 resources/model/control/list/IPSDEMobMDCtrlParam.json create mode 100644 resources/model/control/list/IPSList.json create mode 100644 resources/model/control/list/IPSListDataItem.json create mode 100644 resources/model/control/list/IPSListItem.json create mode 100644 resources/model/control/map/IPSMap.json create mode 100644 resources/model/control/map/IPSMapItem.json create mode 100644 resources/model/control/map/IPSMapParam.json create mode 100644 resources/model/control/map/IPSSysMap.json create mode 100644 resources/model/control/map/IPSSysMapItem.json create mode 100644 resources/model/control/map/IPSSysMapParam.json create mode 100644 resources/model/control/menu/IPSAppMenu.json create mode 100644 resources/model/control/menu/IPSAppMenuItem.json create mode 100644 resources/model/control/menu/IPSAppMenuParam.json create mode 100644 resources/model/control/menu/IPSAppMenuRawItem.json create mode 100644 resources/model/control/menu/IPSContextMenu.json create mode 100644 resources/model/control/menu/IPSContextMenuParam.json create mode 100644 resources/model/control/menu/IPSMenu.json create mode 100644 resources/model/control/menu/IPSMenuItem.json create mode 100644 resources/model/control/panel/IPSLayoutPanel.json create mode 100644 resources/model/control/panel/IPSPanel.json create mode 100644 resources/model/control/panel/IPSPanelButton.json create mode 100644 resources/model/control/panel/IPSPanelContainer.json create mode 100644 resources/model/control/panel/IPSPanelControl.json create mode 100644 resources/model/control/panel/IPSPanelCtrlPos.json create mode 100644 resources/model/control/panel/IPSPanelEngine.json create mode 100644 resources/model/control/panel/IPSPanelField.json create mode 100644 resources/model/control/panel/IPSPanelHandler.json create mode 100644 resources/model/control/panel/IPSPanelItem.json create mode 100644 resources/model/control/panel/IPSPanelItemCatGroupLogic.json create mode 100644 resources/model/control/panel/IPSPanelItemCustomLogic.json create mode 100644 resources/model/control/panel/IPSPanelItemGroupLogic.json create mode 100644 resources/model/control/panel/IPSPanelItemLogic.json create mode 100644 resources/model/control/panel/IPSPanelItemSingleLogic.json create mode 100644 resources/model/control/panel/IPSPanelLogic.json create mode 100644 resources/model/control/panel/IPSPanelModel.json create mode 100644 resources/model/control/panel/IPSPanelObject.json create mode 100644 resources/model/control/panel/IPSPanelParam.json create mode 100644 resources/model/control/panel/IPSPanelRawItem.json create mode 100644 resources/model/control/panel/IPSPanelTabPage.json create mode 100644 resources/model/control/panel/IPSPanelTabPanel.json create mode 100644 resources/model/control/panel/IPSPanelUserControl.json create mode 100644 resources/model/control/panel/IPSSysLayoutPanel.json create mode 100644 resources/model/control/panel/IPSSysPanel.json create mode 100644 resources/model/control/panel/IPSSysPanelButton.json create mode 100644 resources/model/control/panel/IPSSysPanelContainer.json create mode 100644 resources/model/control/panel/IPSSysPanelControl.json create mode 100644 resources/model/control/panel/IPSSysPanelCtrlPos.json create mode 100644 resources/model/control/panel/IPSSysPanelDataItem.json create mode 100644 resources/model/control/panel/IPSSysPanelField.json create mode 100644 resources/model/control/panel/IPSSysPanelHandler.json create mode 100644 resources/model/control/panel/IPSSysPanelItem.json create mode 100644 resources/model/control/panel/IPSSysPanelLogic.json create mode 100644 resources/model/control/panel/IPSSysPanelModel.json create mode 100644 resources/model/control/panel/IPSSysPanelParam.json create mode 100644 resources/model/control/panel/IPSSysPanelRawItem.json create mode 100644 resources/model/control/panel/IPSSysPanelTabPage.json create mode 100644 resources/model/control/panel/IPSSysPanelTabPanel.json create mode 100644 resources/model/control/panel/IPSSysPanelUserControl.json create mode 100644 resources/model/control/panel/IPSSysViewLayoutPanel.json create mode 100644 resources/model/control/panel/IPSSysViewLayoutPanelParam.json create mode 100644 resources/model/control/panel/IPSViewLayoutPanel.json create mode 100644 resources/model/control/reportpanel/IPSDEReportPanel.json create mode 100644 resources/model/control/reportpanel/IPSDEReportPanelParam.json create mode 100644 resources/model/control/searchbar/IPSSearchBar.json create mode 100644 resources/model/control/searchbar/IPSSearchBarFilter.json create mode 100644 resources/model/control/searchbar/IPSSearchBarGroup.json create mode 100644 resources/model/control/searchbar/IPSSearchBarItem.json create mode 100644 resources/model/control/searchbar/IPSSearchBarObject.json create mode 100644 resources/model/control/searchbar/IPSSearchBarParam.json create mode 100644 resources/model/control/searchbar/IPSSearchBarQuickSearch.json create mode 100644 resources/model/control/searchbar/IPSSysSearchBar.json create mode 100644 resources/model/control/searchbar/IPSSysSearchBarItem.json create mode 100644 resources/model/control/searchbar/IPSSysSearchBarObject.json create mode 100644 resources/model/control/searchbar/IPSSysSearchBarParam.json create mode 100644 resources/model/control/titlebar/IPSAppTitleBar.json create mode 100644 resources/model/control/titlebar/IPSSysTitleBar.json create mode 100644 resources/model/control/titlebar/IPSTitleBar.json create mode 100644 resources/model/control/titlebar/IPSTitleBarParam.json create mode 100644 resources/model/control/toolbar/IPSDECMGroupItem.json create mode 100644 resources/model/control/toolbar/IPSDECMRawItem.json create mode 100644 resources/model/control/toolbar/IPSDECMSeperatorItem.json create mode 100644 resources/model/control/toolbar/IPSDECMUIActionItem.json create mode 100644 resources/model/control/toolbar/IPSDEContextMenu.json create mode 100644 resources/model/control/toolbar/IPSDEContextMenuItem.json create mode 100644 resources/model/control/toolbar/IPSDEContextMenuParam.json create mode 100644 resources/model/control/toolbar/IPSDETBGroupItem.json create mode 100644 resources/model/control/toolbar/IPSDETBRawItem.json create mode 100644 resources/model/control/toolbar/IPSDETBSeperatorItem.json create mode 100644 resources/model/control/toolbar/IPSDETBUIActionItem.json create mode 100644 resources/model/control/toolbar/IPSDEToolbar.json create mode 100644 resources/model/control/toolbar/IPSDEToolbarItem.json create mode 100644 resources/model/control/toolbar/IPSDEToolbarParam.json create mode 100644 resources/model/control/tree/IPSDEGantt.json create mode 100644 resources/model/control/tree/IPSDEGanttParam.json create mode 100644 resources/model/control/tree/IPSDETree.json create mode 100644 resources/model/control/tree/IPSDETreeCodeListNode.json create mode 100644 resources/model/control/tree/IPSDETreeColumn.json create mode 100644 resources/model/control/tree/IPSDETreeDEFColumn.json create mode 100644 resources/model/control/tree/IPSDETreeDataSetNode.json create mode 100644 resources/model/control/tree/IPSDETreeGridEx.json create mode 100644 resources/model/control/tree/IPSDETreeGridExParam.json create mode 100644 resources/model/control/tree/IPSDETreeHandler.json create mode 100644 resources/model/control/tree/IPSDETreeNode.json create mode 100644 resources/model/control/tree/IPSDETreeNodeDataItem.json create mode 100644 resources/model/control/tree/IPSDETreeNodeRS.json create mode 100644 resources/model/control/tree/IPSDETreeNodeRSNavContext.json create mode 100644 resources/model/control/tree/IPSDETreeNodeRSNavParam.json create mode 100644 resources/model/control/tree/IPSDETreeNodeRSParam.json create mode 100644 resources/model/control/tree/IPSDETreeNodeRV.json create mode 100644 resources/model/control/tree/IPSDETreeParam.json create mode 100644 resources/model/control/tree/IPSDETreeStaticNode.json create mode 100644 resources/model/control/tree/IPSDETreeUAColumn.json create mode 100644 resources/model/control/viewpanel/IPSDEPickupViewPanel.json create mode 100644 resources/model/control/viewpanel/IPSDETabViewPanel.json create mode 100644 resources/model/control/viewpanel/IPSDETabViewPanelParam.json create mode 100644 resources/model/control/viewpanel/IPSDEViewPanel.json create mode 100644 resources/model/control/viewpanel/IPSDEViewPanelParam.json create mode 100644 resources/model/control/wizardpanel/IPSDEStateWizardPanel.json create mode 100644 resources/model/control/wizardpanel/IPSDEStateWizardPanelParam.json create mode 100644 resources/model/control/wizardpanel/IPSDEWizardPanel.json create mode 100644 resources/model/control/wizardpanel/IPSDEWizardPanelParam.json create mode 100644 resources/model/control/wizardpanel/IPSWizardPanel.json create mode 100644 resources/model/control/wizardpanel/IPSWizardPanelParam.json create mode 100644 resources/model/ctrl.json create mode 100644 resources/model/ctrls.json create mode 100644 resources/model/data/IPSDataItem.json create mode 100644 resources/model/data/IPSDataItemParam.json create mode 100644 resources/model/data/IPSValueOP.json create mode 100644 resources/model/database/IPSDEDBConfig.json create mode 100644 resources/model/database/IPSDEDBTable.json create mode 100644 resources/model/database/IPSDEFDTColumn.json create mode 100644 resources/model/database/IPSSysDBColumn.json create mode 100644 resources/model/database/IPSSysDBScheme.json create mode 100644 resources/model/database/IPSSysDBTable.json create mode 100644 resources/model/database/IPSSysDBValueFunc.json create mode 100644 resources/model/database/IPSSystemDBConfig.json create mode 100644 resources/model/dataentity/IPSDEGroup.json create mode 100644 resources/model/dataentity/IPSDEGroupDetail.json create mode 100644 resources/model/dataentity/IPSDataEntity.json create mode 100644 resources/model/dataentity/IPSDataEntityObject.json create mode 100644 resources/model/dataentity/IPSSysDEGroup.json create mode 100644 resources/model/dataentity/ac/IPSDEACMode.json create mode 100644 resources/model/dataentity/ac/IPSDEACModeDataItem.json create mode 100644 resources/model/dataentity/action/IPSDEAction.json create mode 100644 resources/model/dataentity/action/IPSDEActionGroup.json create mode 100644 resources/model/dataentity/action/IPSDEActionGroupDetail.json create mode 100644 resources/model/dataentity/action/IPSDEActionInput.json create mode 100644 resources/model/dataentity/action/IPSDEActionInputDTO.json create mode 100644 resources/model/dataentity/action/IPSDEActionInputDTOField.json create mode 100644 resources/model/dataentity/action/IPSDEActionLogic.json create mode 100644 resources/model/dataentity/action/IPSDEActionParam.json create mode 100644 resources/model/dataentity/action/IPSDEActionReturn.json create mode 100644 resources/model/dataentity/action/IPSDEActionTempl.json create mode 100644 resources/model/dataentity/action/IPSDEActionVR.json create mode 100644 resources/model/dataentity/action/IPSDELogicAction.json create mode 100644 resources/model/dataentity/action/IPSDERemoteAction.json create mode 100644 resources/model/dataentity/action/IPSDEScriptAction.json create mode 100644 resources/model/dataentity/action/IPSDESelectAction.json create mode 100644 resources/model/dataentity/action/IPSDESelectActionParam.json create mode 100644 resources/model/dataentity/action/IPSDESelectByKeyAction.json create mode 100644 resources/model/dataentity/action/IPSDEUserCreateAction.json create mode 100644 resources/model/dataentity/action/IPSDEUserSysUpdateAction.json create mode 100644 resources/model/dataentity/action/IPSDEUserUpdateAction.json create mode 100644 resources/model/dataentity/dataexport/IPSDEDataExport.json create mode 100644 resources/model/dataentity/dataexport/IPSDEDataExportItem.json create mode 100644 resources/model/dataentity/dataimport/IPSDEDataImport.json create mode 100644 resources/model/dataentity/dataimport/IPSDEDataImportItem.json create mode 100644 resources/model/dataentity/datamap/IPSDEMap.json create mode 100644 resources/model/dataentity/datamap/IPSDEMapAction.json create mode 100644 resources/model/dataentity/datamap/IPSDEMapDataQuery.json create mode 100644 resources/model/dataentity/datamap/IPSDEMapDataSet.json create mode 100644 resources/model/dataentity/datamap/IPSDEMapField.json create mode 100644 resources/model/dataentity/datamap/IPSDEMapObject.json create mode 100644 resources/model/dataentity/datasync/IPSDEDataSync.json create mode 100644 resources/model/dataentity/defield/IPSDEFGroup.json create mode 100644 resources/model/dataentity/defield/IPSDEFGroupDetail.json create mode 100644 resources/model/dataentity/defield/IPSDEFInputTip.json create mode 100644 resources/model/dataentity/defield/IPSDEFSearchMode.json create mode 100644 resources/model/dataentity/defield/IPSDEFUIItem.json create mode 100644 resources/model/dataentity/defield/IPSDEFUIMode.json create mode 100644 resources/model/dataentity/defield/IPSDEField.json create mode 100644 resources/model/dataentity/defield/IPSDEFieldBase.json create mode 100644 resources/model/dataentity/defield/IPSDEFieldObject.json create mode 100644 resources/model/dataentity/defield/IPSDEFieldType.json create mode 100644 resources/model/dataentity/defield/IPSFormulaDEField.json create mode 100644 resources/model/dataentity/defield/IPSInheritDEField.json create mode 100644 resources/model/dataentity/defield/IPSLinkDEField.json create mode 100644 resources/model/dataentity/defield/IPSOne2ManyDataDEField.json create mode 100644 resources/model/dataentity/defield/IPSOne2OneDataDEField.json create mode 100644 resources/model/dataentity/defield/IPSPickupDEField.json create mode 100644 resources/model/dataentity/defield/IPSPickupDataDEField.json create mode 100644 resources/model/dataentity/defield/IPSPickupObjectDEField.json create mode 100644 resources/model/dataentity/defield/IPSPickupTextDEField.json create mode 100644 resources/model/dataentity/defield/IPSSysDEFType.json create mode 100644 resources/model/dataentity/defield/search/IPSDEFSearch.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFDataRangeRule.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRGroupCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRQueryCountCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRRegExCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRSimpleCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRSingleCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRStringLengthCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRSysValueRuleCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRValueRange2Condition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRValueRange3Condition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRValueRangeCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFVRValueRecursionCondition.json create mode 100644 resources/model/dataentity/defield/valuerule/IPSDEFValueRule.json create mode 100644 resources/model/dataentity/der/IPSDER11.json create mode 100644 resources/model/dataentity/der/IPSDER1N.json create mode 100644 resources/model/dataentity/der/IPSDER1NDEFieldMap.json create mode 100644 resources/model/dataentity/der/IPSDER1NSelectAction.json create mode 100644 resources/model/dataentity/der/IPSDERAggData.json create mode 100644 resources/model/dataentity/der/IPSDERAggDataDEFieldMap.json create mode 100644 resources/model/dataentity/der/IPSDERBase.json create mode 100644 resources/model/dataentity/der/IPSDERCustom.json create mode 100644 resources/model/dataentity/der/IPSDERDEFieldMap.json create mode 100644 resources/model/dataentity/der/IPSDERGroup.json create mode 100644 resources/model/dataentity/der/IPSDERGroupDetail.json create mode 100644 resources/model/dataentity/der/IPSDERIndex.json create mode 100644 resources/model/dataentity/der/IPSDERIndexDEFieldMap.json create mode 100644 resources/model/dataentity/der/IPSDERInherit.json create mode 100644 resources/model/dataentity/der/IPSDERMultiInherit.json create mode 100644 resources/model/dataentity/der/IPSDERNN.json create mode 100644 resources/model/dataentity/der/IPSSysDERGroup.json create mode 100644 resources/model/dataentity/dr/IPSDEDRCustomItem.json create mode 100644 resources/model/dataentity/dr/IPSDEDRDER11Item.json create mode 100644 resources/model/dataentity/dr/IPSDEDRDER1NItem.json create mode 100644 resources/model/dataentity/dr/IPSDEDRDetail.json create mode 100644 resources/model/dataentity/dr/IPSDEDRGroup.json create mode 100644 resources/model/dataentity/dr/IPSDEDRItem.json create mode 100644 resources/model/dataentity/dr/IPSDEDRSysDER11Item.json create mode 100644 resources/model/dataentity/dr/IPSDEDRSysDER1NItem.json create mode 100644 resources/model/dataentity/dr/IPSDEDataRelation.json create mode 100644 resources/model/dataentity/ds/IPSDEDQCondition.json create mode 100644 resources/model/dataentity/ds/IPSDEDQCustomCondition.json create mode 100644 resources/model/dataentity/ds/IPSDEDQFieldCondition.json create mode 100644 resources/model/dataentity/ds/IPSDEDQGroupCondition.json create mode 100644 resources/model/dataentity/ds/IPSDEDQJoin.json create mode 100644 resources/model/dataentity/ds/IPSDEDQMain.json create mode 100644 resources/model/dataentity/ds/IPSDEDQPDCondition.json create mode 100644 resources/model/dataentity/ds/IPSDEDataQuery.json create mode 100644 resources/model/dataentity/ds/IPSDEDataQueryCode.json create mode 100644 resources/model/dataentity/ds/IPSDEDataQueryCodeCond.json create mode 100644 resources/model/dataentity/ds/IPSDEDataQueryCodeExp.json create mode 100644 resources/model/dataentity/ds/IPSDEDataQueryInput.json create mode 100644 resources/model/dataentity/ds/IPSDEDataQueryReturn.json create mode 100644 resources/model/dataentity/ds/IPSDEDataSet.json create mode 100644 resources/model/dataentity/ds/IPSDEDataSetCode.json create mode 100644 resources/model/dataentity/ds/IPSDEDataSetGroupParam.json create mode 100644 resources/model/dataentity/ds/IPSDEDataSetInput.json create mode 100644 resources/model/dataentity/ds/IPSDEDataSetReturn.json create mode 100644 resources/model/dataentity/ds/IPSDEFilterDTO.json create mode 100644 resources/model/dataentity/ds/IPSDEFilterDTOField.json create mode 100644 resources/model/dataentity/dts/IPSDEDTSQueue.json create mode 100644 resources/model/dataentity/jit/IPSDESampleData.json create mode 100644 resources/model/dataentity/logic/IPSDEDEActionLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEFLogic.json create mode 100644 resources/model/dataentity/logic/IPSDELogic.json create mode 100644 resources/model/dataentity/logic/IPSDELogicBase.json create mode 100644 resources/model/dataentity/logic/IPSDELogicLink.json create mode 100644 resources/model/dataentity/logic/IPSDELogicLinkBase.json create mode 100644 resources/model/dataentity/logic/IPSDELogicLinkCond.json create mode 100644 resources/model/dataentity/logic/IPSDELogicLinkCondBase.json create mode 100644 resources/model/dataentity/logic/IPSDELogicLinkGroupCond.json create mode 100644 resources/model/dataentity/logic/IPSDELogicLinkGroupCondBase.json create mode 100644 resources/model/dataentity/logic/IPSDELogicLinkSingleCond.json create mode 100644 resources/model/dataentity/logic/IPSDELogicLinkSingleCondBase.json create mode 100644 resources/model/dataentity/logic/IPSDELogicNode.json create mode 100644 resources/model/dataentity/logic/IPSDELogicNodeBase.json create mode 100644 resources/model/dataentity/logic/IPSDELogicNodeParam.json create mode 100644 resources/model/dataentity/logic/IPSDELogicNodeParamBase.json create mode 100644 resources/model/dataentity/logic/IPSDELogicParam.json create mode 100644 resources/model/dataentity/logic/IPSDELogicParamBase.json create mode 100644 resources/model/dataentity/logic/IPSDEMSLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEMSLogicLink.json create mode 100644 resources/model/dataentity/logic/IPSDEMSLogicLinkCond.json create mode 100644 resources/model/dataentity/logic/IPSDEMSLogicLinkGroupCond.json create mode 100644 resources/model/dataentity/logic/IPSDEMSLogicLinkSingleCond.json create mode 100644 resources/model/dataentity/logic/IPSDEMSLogicNode.json create mode 100644 resources/model/dataentity/logic/IPSDEMSLogicParam.json create mode 100644 resources/model/dataentity/logic/IPSDERawCodeLogic.json create mode 100644 resources/model/dataentity/logic/IPSDERawSqlAndLoopCallLogic.json create mode 100644 resources/model/dataentity/logic/IPSDERawSqlCallLogic.json create mode 100644 resources/model/dataentity/logic/IPSDESFPluginLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEStartWFLogic.json create mode 100644 resources/model/dataentity/logic/IPSDESysLogicLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEThrowExceptionLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUIActionLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUICtrlFireEventLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUICtrlInvokeLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUIDEActionLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicGroup.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicGroupDetail.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicLink.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicLinkCond.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicLinkGroupCond.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicLinkSingleCond.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicNode.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicNodeParam.json create mode 100644 resources/model/dataentity/logic/IPSDEUILogicParam.json create mode 100644 resources/model/dataentity/logic/IPSDEUIMsgBoxLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUIPFPluginLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUIRawCodeLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEUIThrowExceptionLogic.json create mode 100644 resources/model/dataentity/logic/IPSDEViewLogic.json create mode 100644 resources/model/dataentity/mainstate/IPSDEMainState.json create mode 100644 resources/model/dataentity/mainstate/IPSDEMainStateAction.json create mode 100644 resources/model/dataentity/mainstate/IPSDEMainStateField.json create mode 100644 resources/model/dataentity/mainstate/IPSDEMainStateOPPriv.json create mode 100644 resources/model/dataentity/mainstate/IPSDEMainStateRS.json create mode 100644 resources/model/dataentity/notify/IPSDENotify.json create mode 100644 resources/model/dataentity/notify/IPSDENotifyTarget.json create mode 100644 resources/model/dataentity/print/IPSDEPrint.json create mode 100644 resources/model/dataentity/priv/IPSDEOPPriv.json create mode 100644 resources/model/dataentity/priv/IPSDEOPPrivRole.json create mode 100644 resources/model/dataentity/priv/IPSDEUserRole.json create mode 100644 resources/model/dataentity/priv/IPSDEUserRoleOPPriv.json create mode 100644 resources/model/dataentity/priv/IPSSysDEOPPriv.json create mode 100644 resources/model/dataentity/report/IPSDEReport.json create mode 100644 resources/model/dataentity/report/IPSDEReportItem.json create mode 100644 resources/model/dataentity/service/IPSDEMethodDTO.json create mode 100644 resources/model/dataentity/service/IPSDEMethodDTOField.json create mode 100644 resources/model/dataentity/service/IPSDEMethodInput.json create mode 100644 resources/model/dataentity/service/IPSDEMethodReturn.json create mode 100644 resources/model/dataentity/service/IPSDEServiceAPI.json create mode 100644 resources/model/dataentity/service/IPSDEServiceAPIField.json create mode 100644 resources/model/dataentity/service/IPSDEServiceAPIMethod.json create mode 100644 resources/model/dataentity/service/IPSDEServiceAPIMethodInput.json create mode 100644 resources/model/dataentity/service/IPSDEServiceAPIMethodReturn.json create mode 100644 resources/model/dataentity/service/IPSDEServiceAPIRS.json create mode 100644 resources/model/dataentity/service/IPSDEServiceAPIVR.json create mode 100644 resources/model/dataentity/uiaction/IPSDEUIAction.json create mode 100644 resources/model/dataentity/uiaction/IPSDEUIActionGroup.json create mode 100644 resources/model/dataentity/uiaction/IPSDEUIActionGroupDetail.json create mode 100644 resources/model/dataentity/unistate/IPSDEUniState.json create mode 100644 resources/model/dataentity/util/IPSDEDataAuditUtil.json create mode 100644 resources/model/dataentity/util/IPSDEUtil.json create mode 100644 resources/model/dataentity/wf/IPSDEWF.json create mode 100644 resources/model/dataentity/wizard/IPSDEActionWizard.json create mode 100644 resources/model/dataentity/wizard/IPSDEActionWizardGroup.json create mode 100644 resources/model/dataentity/wizard/IPSDEActionWizardGroupDetail.json create mode 100644 resources/model/dataentity/wizard/IPSDEActionWizardItem.json create mode 100644 resources/model/dataentity/wizard/IPSDEDataSetDEAW.json create mode 100644 resources/model/dataentity/wizard/IPSDEWizard.json create mode 100644 resources/model/dataentity/wizard/IPSDEWizardForm.json create mode 100644 resources/model/dataentity/wizard/IPSDEWizardStep.json create mode 100644 resources/model/dataentity/wizard/IPSDEWizardStepGroupLogic.json create mode 100644 resources/model/dataentity/wizard/IPSDEWizardStepLogic.json create mode 100644 resources/model/dataentity/wizard/IPSDEWizardStepSingleLogic.json create mode 100644 resources/model/dts/IPSSysDTSQueue.json create mode 100644 resources/model/dynamodel/IPSDynaModel.json create mode 100644 resources/model/dynamodel/IPSDynaModelAttr.json create mode 100644 resources/model/dynamodel/IPSJsonArraySchema.json create mode 100644 resources/model/dynamodel/IPSJsonBooleanSchema.json create mode 100644 resources/model/dynamodel/IPSJsonDefs.json create mode 100644 resources/model/dynamodel/IPSJsonNode.json create mode 100644 resources/model/dynamodel/IPSJsonNodeOwner.json create mode 100644 resources/model/dynamodel/IPSJsonNodeSchema.json create mode 100644 resources/model/dynamodel/IPSJsonNodeSchemas.json create mode 100644 resources/model/dynamodel/IPSJsonNodes.json create mode 100644 resources/model/dynamodel/IPSJsonNullSchema.json create mode 100644 resources/model/dynamodel/IPSJsonNumberSchema.json create mode 100644 resources/model/dynamodel/IPSJsonObjectSchema.json create mode 100644 resources/model/dynamodel/IPSJsonProperties.json create mode 100644 resources/model/dynamodel/IPSJsonProperty.json create mode 100644 resources/model/dynamodel/IPSJsonSchema.json create mode 100644 resources/model/dynamodel/IPSJsonSimpleSchema.json create mode 100644 resources/model/dynamodel/IPSJsonStringSchema.json create mode 100644 resources/model/dynamodel/IPSSysDynaModel.json create mode 100644 resources/model/dynamodel/IPSSysDynaModelAttr.json create mode 100644 resources/model/dynamodel/IPSXmlElement.json create mode 100644 resources/model/dynamodel/IPSXmlNode.json create mode 100644 resources/model/dynamodel/IPSXmlNodeOwner.json create mode 100644 resources/model/dynamodel/IPSXmlNodes.json create mode 100644 resources/model/eai/IPSEAIDE.json create mode 100644 resources/model/eai/IPSEAIDEField.json create mode 100644 resources/model/eai/IPSEAIDEObject.json create mode 100644 resources/model/eai/IPSEAIDER.json create mode 100644 resources/model/eai/IPSEAIDataType.json create mode 100644 resources/model/eai/IPSEAIDataTypeItem.json create mode 100644 resources/model/eai/IPSEAIDataTypeObject.json create mode 100644 resources/model/eai/IPSEAIElement.json create mode 100644 resources/model/eai/IPSEAIElementAttr.json create mode 100644 resources/model/eai/IPSEAIElementObject.json create mode 100644 resources/model/eai/IPSEAIElementRE.json create mode 100644 resources/model/eai/IPSEAIScheme.json create mode 100644 resources/model/eai/IPSEAISchemeObject.json create mode 100644 resources/model/eai/IPSSysEAIDE.json create mode 100644 resources/model/eai/IPSSysEAIDEField.json create mode 100644 resources/model/eai/IPSSysEAIDEObject.json create mode 100644 resources/model/eai/IPSSysEAIDER.json create mode 100644 resources/model/eai/IPSSysEAIDataType.json create mode 100644 resources/model/eai/IPSSysEAIDataTypeItem.json create mode 100644 resources/model/eai/IPSSysEAIDataTypeObject.json create mode 100644 resources/model/eai/IPSSysEAIElement.json create mode 100644 resources/model/eai/IPSSysEAIElementAttr.json create mode 100644 resources/model/eai/IPSSysEAIElementObject.json create mode 100644 resources/model/eai/IPSSysEAIElementRE.json create mode 100644 resources/model/eai/IPSSysEAIScheme.json create mode 100644 resources/model/eai/IPSSysEAISchemeObject.json create mode 100644 resources/model/msg/IPSSysMsgQueue.json create mode 100644 resources/model/msg/IPSSysMsgTarget.json create mode 100644 resources/model/msg/IPSSysMsgTempl.json create mode 100644 resources/model/pub/IPSSysSFPub.json create mode 100644 resources/model/pub/IPSSysSFPubPkg.json create mode 100644 resources/model/res/IPSCtrlMsg.json create mode 100644 resources/model/res/IPSDEFInputTipSet.json create mode 100644 resources/model/res/IPSLanguageItem.json create mode 100644 resources/model/res/IPSLanguageRes.json create mode 100644 resources/model/res/IPSPortletType.json create mode 100644 resources/model/res/IPSSubViewType.json create mode 100644 resources/model/res/IPSSysChartTheme.json create mode 100644 resources/model/res/IPSSysContent.json create mode 100644 resources/model/res/IPSSysContentCat.json create mode 100644 resources/model/res/IPSSysCss.json create mode 100644 resources/model/res/IPSSysCustomPortlet.json create mode 100644 resources/model/res/IPSSysDEChartPortlet.json create mode 100644 resources/model/res/IPSSysDEEditFormPortlet.json create mode 100644 resources/model/res/IPSSysDEFInputTip.json create mode 100644 resources/model/res/IPSSysDEListPortlet.json create mode 100644 resources/model/res/IPSSysDESearchFormPortlet.json create mode 100644 resources/model/res/IPSSysDEToolbarPortlet.json create mode 100644 resources/model/res/IPSSysDEViewPortlet.json create mode 100644 resources/model/res/IPSSysDataSyncAgent.json create mode 100644 resources/model/res/IPSSysDictCat.json create mode 100644 resources/model/res/IPSSysEditorStyle.json create mode 100644 resources/model/res/IPSSysHtmlPortlet.json create mode 100644 resources/model/res/IPSSysImage.json create mode 100644 resources/model/res/IPSSysLan.json create mode 100644 resources/model/res/IPSSysLogic.json create mode 100644 resources/model/res/IPSSysPDTView.json create mode 100644 resources/model/res/IPSSysPFPlugin.json create mode 100644 resources/model/res/IPSSysPortlet.json create mode 100644 resources/model/res/IPSSysPortletCat.json create mode 100644 resources/model/res/IPSSysResource.json create mode 100644 resources/model/res/IPSSysSFPlugin.json create mode 100644 resources/model/res/IPSSysSampleValue.json create mode 100644 resources/model/res/IPSSysSequence.json create mode 100644 resources/model/res/IPSSysTranslator.json create mode 100644 resources/model/res/IPSSysUniState.json create mode 100644 resources/model/res/IPSSysUnit.json create mode 100644 resources/model/res/IPSSysUtil.json create mode 100644 resources/model/res/IPSSysViewLogic.json create mode 100644 resources/model/res/IPSSysViewLogicParam.json create mode 100644 resources/model/security/IPSSysUniRes.json create mode 100644 resources/model/security/IPSSysUserDR.json create mode 100644 resources/model/security/IPSSysUserMode.json create mode 100644 resources/model/security/IPSSysUserRole.json create mode 100644 resources/model/security/IPSSysUserRoleData.json create mode 100644 resources/model/security/IPSSysUserRoleRes.json create mode 100644 resources/model/service/IPSServiceAPIDTO.json create mode 100644 resources/model/service/IPSServiceAPIDTOField.json create mode 100644 resources/model/service/IPSSubSysServiceAPI.json create mode 100644 resources/model/service/IPSSubSysServiceAPIDE.json create mode 100644 resources/model/service/IPSSubSysServiceAPIDEField.json create mode 100644 resources/model/service/IPSSubSysServiceAPIDEMethod.json create mode 100644 resources/model/service/IPSSubSysServiceAPIDERS.json create mode 100644 resources/model/service/IPSSubSysServiceAPIDTO.json create mode 100644 resources/model/service/IPSSubSysServiceAPIDTOField.json create mode 100644 resources/model/service/IPSSubSysServiceAPIMethod.json create mode 100644 resources/model/service/IPSSubSysServiceAPIMethodInput.json create mode 100644 resources/model/service/IPSSubSysServiceAPIMethodReturn.json create mode 100644 resources/model/service/IPSSysServiceAPI.json create mode 100644 resources/model/service/IPSSysServiceAPIDTO.json create mode 100644 resources/model/service/IPSSysServiceAPIDTOField.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Callback.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Callbacks.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Components.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Contact.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Example.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Examples.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Header.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Headers.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Info.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3JsonNodeSchemas.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3License.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Link.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Links.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3MediaType.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3MediaTypes.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Object.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Operation.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Parameter.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Parameters.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Path.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Paths.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3RequestBodies.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3RequestBody.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Response.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Responses.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3Schema.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3SecurityScheme.json create mode 100644 resources/model/service/openapi/IPSOpenAPI3SecuritySchemes.json create mode 100644 resources/model/system/IPSSysModelGroup.json create mode 100644 resources/model/system/IPSSysRef.json create mode 100644 resources/model/system/IPSSystemModule.json create mode 100644 resources/model/testing/IPSAppViewTestCase.json create mode 100644 resources/model/testing/IPSDEActionTestCase.json create mode 100644 resources/model/testing/IPSDEFVRTestCase.json create mode 100644 resources/model/testing/IPSDESAMethodTestCase.json create mode 100644 resources/model/testing/IPSSysTestCase.json create mode 100644 resources/model/testing/IPSSysTestCase2.json create mode 100644 resources/model/testing/IPSSysTestCaseAssert.json create mode 100644 resources/model/testing/IPSSysTestCaseInput.json create mode 100644 resources/model/testing/IPSSysTestData.json create mode 100644 resources/model/testing/IPSSysTestDataItem.json create mode 100644 resources/model/testing/IPSSysTestModule.json create mode 100644 resources/model/testing/IPSSysTestPrj.json create mode 100644 resources/model/valuerule/IPSSysValueRule.json create mode 100644 resources/model/view/IPSDEDataSetViewMsg.json create mode 100644 resources/model/view/IPSUIAction.json create mode 100644 resources/model/view/IPSUIActionGroup.json create mode 100644 resources/model/view/IPSUIActionGroupDetail.json create mode 100644 resources/model/view/IPSUIEngine.json create mode 100644 resources/model/view/IPSUIEngineParam.json create mode 100644 resources/model/view/IPSViewLogic.json create mode 100644 resources/model/view/IPSViewLogicParam.json create mode 100644 resources/model/view/IPSViewMsg.json create mode 100644 resources/model/view/IPSViewMsgGroup.json create mode 100644 resources/model/view/IPSViewMsgGroupDetail.json create mode 100644 resources/model/wf/IPSSysWFSetting.json create mode 100644 resources/model/wf/IPSWFCallActivityProcess.json create mode 100644 resources/model/wf/IPSWFCallOrgActivityProcess.json create mode 100644 resources/model/wf/IPSWFDE.json create mode 100644 resources/model/wf/IPSWFDEActionProcess.json create mode 100644 resources/model/wf/IPSWFDEDataSetRole.json create mode 100644 resources/model/wf/IPSWFEmbedWFProcess.json create mode 100644 resources/model/wf/IPSWFEmbedWFProcessBase.json create mode 100644 resources/model/wf/IPSWFEmbedWFReturnLink.json create mode 100644 resources/model/wf/IPSWFEndProcess.json create mode 100644 resources/model/wf/IPSWFExclusiveGatewayProcess.json create mode 100644 resources/model/wf/IPSWFGatewayProcessBase.json create mode 100644 resources/model/wf/IPSWFInclusiveGatewayProcess.json create mode 100644 resources/model/wf/IPSWFInteractiveLink.json create mode 100644 resources/model/wf/IPSWFInteractiveProcess.json create mode 100644 resources/model/wf/IPSWFLink.json create mode 100644 resources/model/wf/IPSWFLinkCond.json create mode 100644 resources/model/wf/IPSWFLinkCustomCond.json create mode 100644 resources/model/wf/IPSWFLinkGroupCond.json create mode 100644 resources/model/wf/IPSWFLinkRole.json create mode 100644 resources/model/wf/IPSWFLinkSingleCond.json create mode 100644 resources/model/wf/IPSWFParallelGatewayProcess.json create mode 100644 resources/model/wf/IPSWFParallelSubWFProcess.json create mode 100644 resources/model/wf/IPSWFProcess.json create mode 100644 resources/model/wf/IPSWFProcessParam.json create mode 100644 resources/model/wf/IPSWFProcessRole.json create mode 100644 resources/model/wf/IPSWFProcessSubWF.json create mode 100644 resources/model/wf/IPSWFRole.json create mode 100644 resources/model/wf/IPSWFRouteLink.json create mode 100644 resources/model/wf/IPSWFStartProcess.json create mode 100644 resources/model/wf/IPSWFTimeoutLink.json create mode 100644 resources/model/wf/IPSWFTimerEventProcess.json create mode 100644 resources/model/wf/IPSWFUtilUIAction.json create mode 100644 resources/model/wf/IPSWFVersion.json create mode 100644 resources/model/wf/IPSWFWorkTime.json create mode 100644 resources/model/wf/IPSWorkflow.json create mode 100644 resources/model/wf/IPSWorkflowObject.json create mode 100644 resources/model/wf/uiaction/IPSWFUIAction.json create mode 100644 resources/model/wf/uiaction/IPSWFUIActionGroup.json create mode 100644 resources/model/wf/uiaction/IPSWFUIActionGroupDetail.json create mode 100644 resources/model/wx/IPSWXAccount.json create mode 100644 resources/model/wx/IPSWXAccountObject.json create mode 100644 resources/model/wx/IPSWXEntApp.json create mode 100644 resources/model/wx/IPSWXLogic.json create mode 100644 resources/model/wx/IPSWXMenu.json create mode 100644 resources/model/wx/IPSWXMenuFunc.json create mode 100644 resources/model/wx/IPSWXMenuItem.json create mode 100644 src/interface/index.ts create mode 100644 src/interface/model-item/model-item.ts diff --git a/package.json b/package.json index 6c8c43e..95f565c 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,7 @@ ".hbr", ".hbs", ".tpl" - ], - "configuration": "./handlebars.configuration.json" + ] } ] }, diff --git a/resources/model/IPSModelData.json b/resources/model/IPSModelData.json new file mode 100644 index 0000000..820ed29 --- /dev/null +++ b/resources/model/IPSModelData.json @@ -0,0 +1,9 @@ +{ + "extends": ["/IPSModelObject"], + "content": { "desc": "模型内容", "type": "string" }, + "logicName": { "desc": "模型逻辑名称", "type": "string" }, + "modelTag": { "desc": "模型标记", "type": "string" }, + "modelTag2": { "desc": "模型标记2", "type": "string" }, + "realModelSubType": { "desc": "实际模型子类型", "type": "string" }, + "realModelType": { "desc": "实际模型类型", "type": "string" } +} diff --git a/resources/model/IPSModelObject.json b/resources/model/IPSModelObject.json new file mode 100644 index 0000000..96e2686 --- /dev/null +++ b/resources/model/IPSModelObject.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"],"codeName":{"desc":"代码标识","type":"string"},"dynaModelFilePath":{"desc":"动态模型文件路径","type":"string"},"mOSFilePath":{"desc":"MOS文件路径","type":"string"},"rTMOSFilePath":{"desc":"运行时MOS文件路径","type":"string"},"userCat":{"desc":"用户模型分类","type":"string"},"userTag":{"desc":"用户标记","type":"string"},"userTag2":{"desc":"用户标记2","type":"string"},"userTag3":{"desc":"用户标记3","type":"string"},"userTag4":{"desc":"用户标记4","type":"string"}} \ No newline at end of file diff --git a/resources/model/IPSModelSortable.json b/resources/model/IPSModelSortable.json new file mode 100644 index 0000000..ecb84d8 --- /dev/null +++ b/resources/model/IPSModelSortable.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"name":{"desc":"参数名称","type":"string"},"orderValue":{"desc":"排序值","type":"number"}} \ No newline at end of file diff --git a/resources/model/IPSObject.json b/resources/model/IPSObject.json new file mode 100644 index 0000000..42ae2d5 --- /dev/null +++ b/resources/model/IPSObject.json @@ -0,0 +1 @@ +{"name":{"desc":"名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/IPSSystem.json b/resources/model/IPSSystem.json new file mode 100644 index 0000000..eef9baf --- /dev/null +++ b/resources/model/IPSSystem.json @@ -0,0 +1,50 @@ +{ + "extends": ["/IPSModelObject"], + "allPSApps": { "desc": "前端应用集合", "type": "array", "schema": "/app/IPSApplication" }, + "allPSCodeLists": { "desc": "代码表集合", "type": "array", "schema": "/codelist/IPSCodeList" }, + "allPSDEOPPrivs": { "desc": "全局实体操作标识集合", "type": "array", "schema": "/dataentity/priv/IPSSysDEOPPriv" }, + "allPSDataEntities": { "desc": "实体集合", "type": "array", "schema": "/dataentity/IPSDataEntity" }, + "allPSSubSysServiceAPIs": { "desc": "外部接口集合", "type": "array", "schema": "/service/IPSSubSysServiceAPI" }, + "allPSSysBackServices": { "desc": "后台作业集合", "type": "array", "schema": "/backservice/IPSSysBackService" }, + "allPSSysDBSchemes": { "desc": "数据库架构集合", "type": "array", "schema": "/database/IPSSysDBScheme" }, + "allPSSysDBValueFuncs": { "desc": "值函数集合", "type": "array", "schema": "/database/IPSSysDBValueFunc" }, + "allPSSysDEGroups": { "desc": "实体组集合", "type": "array", "schema": "/dataentity/IPSSysDEGroup" }, + "allPSSysDERGroups": { "desc": "实体关系组集合", "type": "array", "schema": "/dataentity/der/IPSSysDERGroup" }, + "allPSSysDTSQueues": { "desc": "分布式事务队列集合", "type": "array", "schema": "/dts/IPSSysDTSQueue" }, + "allPSSysDataSyncAgents": { "desc": "数据同步代理集合", "type": "array", "schema": "/res/IPSSysDataSyncAgent" }, + "allPSSysDynaModels": { "desc": "动态模型集合", "type": "array", "schema": "/dynamodel/IPSSysDynaModel" }, + "allPSSysEditorStyles": { "desc": "编辑器样式集合", "type": "array", "schema": "/res/IPSSysEditorStyle" }, + "allPSSysLogics": { "desc": "逻辑组件集合", "type": "array", "schema": "/res/IPSSysLogic" }, + "allPSSysModelGroups": { "desc": "系统模型组集合", "type": "array", "schema": "/system/IPSSysModelGroup" }, + "allPSSysMsgQueues": { "desc": "消息队列集合", "type": "array", "schema": "/msg/IPSSysMsgQueue" }, + "allPSSysMsgTargets": { "desc": "消息目标集合", "type": "array", "schema": "/msg/IPSSysMsgTarget" }, + "allPSSysMsgTempls": { "desc": "消息模板集合", "type": "array", "schema": "/msg/IPSSysMsgTempl" }, + "allPSSysPDTViews": { "desc": "预定义视图集合", "type": "array", "schema": "/res/IPSSysPDTView" }, + "allPSSysRefs": { "desc": "子系统引用集合", "type": "array", "schema": "/system/IPSSysRef" }, + "allPSSysSFPlugins": { "desc": "后台模板插件集合", "type": "array", "schema": "/res/IPSSysSFPlugin" }, + "allPSSysSFPubs": { "desc": "后台发布集合", "type": "array", "schema": "/pub/IPSSysSFPub" }, + "allPSSysSampleValues": { "desc": "示例值集合", "type": "array", "schema": "/res/IPSSysSampleValue" }, + "allPSSysSequences": { "desc": "值序列集合", "type": "array", "schema": "/res/IPSSysSequence" }, + "allPSSysServiceAPIs": { "desc": "服务接口集合", "type": "array", "schema": "/service/IPSSysServiceAPI" }, + "allPSSysTestDatas": { "desc": "测试数据集合", "type": "array", "schema": "/testing/IPSSysTestData" }, + "allPSSysTestPrjs": { "desc": "测试项目集合", "type": "array", "schema": "/testing/IPSSysTestPrj" }, + "allPSSysTranslators": { "desc": "值转换器集合", "type": "array", "schema": "/res/IPSSysTranslator" }, + "allPSSysUniReses": { "desc": "统一资源集合", "type": "array", "schema": "/security/IPSSysUniRes" }, + "allPSSysUniStates": { "desc": "统一状态集合", "type": "array", "schema": "/res/IPSSysUniState" }, + "allPSSysUserDRs": { "desc": "自定义数据范围集合", "type": "array", "schema": "/security/IPSSysUserDR" }, + "allPSSysUserModes": { "desc": "用户模式集合", "type": "array", "schema": "/security/IPSSysUserMode" }, + "allPSSysUserRoles": { "desc": "用户角色集合", "type": "array", "schema": "/security/IPSSysUserRole" }, + "allPSSysUtils": { "desc": "功能组件集合", "type": "array", "schema": "/res/IPSSysUtil" }, + "allPSSysValueRules": { "desc": "值规则集合", "type": "array", "schema": "/valuerule/IPSSysValueRule" }, + "allPSSystemModules": { "desc": "系统模块集合", "type": "array", "schema": "/system/IPSSystemModule" }, + "allPSWFRoles": { "desc": "工作流角色集合", "type": "array", "schema": "/wf/IPSWFRole" }, + "allPSWFWorkTimes": { "desc": "工作流工作时间集合", "type": "array", "schema": "/wf/IPSWFWorkTime" }, + "allPSWorkflows": { "desc": "工作流集合", "type": "array", "schema": "/wf/IPSWorkflow" }, + "codeName": { "desc": "代码标识", "type": "string" }, + "defaultLanguage": { "desc": "默认语言", "type": "string" }, + "initPSSysContents": { "desc": "初始化内容集合", "type": "array", "schema": "/res/IPSSysContent" }, + "logicName": { "desc": "逻辑名称", "type": "string" }, + "samplePSSysContents": { "desc": "示例内容集合", "type": "array", "schema": "/res/IPSSysContent" }, + "testPSSysContents": { "desc": "测试内容集合", "type": "array", "schema": "/res/IPSSysContent" }, + "vCName": { "desc": "版本名称", "type": "string" } +} diff --git a/resources/model/app.json b/resources/model/app.json index a2e0f33..097eb2c 100644 --- a/resources/model/app.json +++ b/resources/model/app.json @@ -1,5 +1,5 @@ { - "name": "某某某应用", - "codeName": "xxx Application", - "appEntities": "./appEntities.json" + "extends": ["/app/IPSApplication"], + "appEntities": { "desc": "应用实体", "type": "object", "schema": "/appEntities" }, + "pages": { "desc": "应用实体视图", "type": "object", "schema": "/pages" } } diff --git a/resources/model/app/IPSAppLan.json b/resources/model/app/IPSAppLan.json new file mode 100644 index 0000000..29b7b31 --- /dev/null +++ b/resources/model/app/IPSAppLan.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"allPSLanguageItems":{"desc":"语言资源项集合","type":"array","schema":"/res/IPSLanguageItem"},"language":{"desc":"语言","type":"string"}} \ No newline at end of file diff --git a/resources/model/app/IPSAppModule.json b/resources/model/app/IPSAppModule.json new file mode 100644 index 0000000..74b1b98 --- /dev/null +++ b/resources/model/app/IPSAppModule.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"codeName":{"desc":"代码标识","type":"string"},"defaultModule":{"desc":"默认模块","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/IPSAppPDTView.json b/resources/model/app/IPSAppPDTView.json new file mode 100644 index 0000000..3814c03 --- /dev/null +++ b/resources/model/app/IPSAppPDTView.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"psAppView":{"desc":"目标应用视图","type":"object","schema":"/app/view/IPSAppView"},"psSysPDTView":{"desc":"系统预置视图","type":"object","schema":"/res/IPSSysPDTView"}} \ No newline at end of file diff --git a/resources/model/app/IPSAppPkg.json b/resources/model/app/IPSAppPkg.json new file mode 100644 index 0000000..4d02b2f --- /dev/null +++ b/resources/model/app/IPSAppPkg.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"verParam":{"desc":"版本参数","type":"string"},"verParam2":{"desc":"版本参数2","type":"string"},"verParam3":{"desc":"版本参数3","type":"string"},"verParam4":{"desc":"版本参数4","type":"string"},"verTag":{"desc":"版本标记","type":"string"},"verTag2":{"desc":"版本标记2","type":"string"}} \ No newline at end of file diff --git a/resources/model/app/IPSAppResource.json b/resources/model/app/IPSAppResource.json new file mode 100644 index 0000000..d2c3af5 --- /dev/null +++ b/resources/model/app/IPSAppResource.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"content":{"desc":"资源内容","type":"string"},"resTag":{"desc":"资源标记","type":"string"},"resourceType":{"desc":"资源类型","type":"string","enum":{"IMAGE":"图片","STRING":"字符串","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4","USER5":"用户自定义5","USER6":"用户自定义6","USER7":"用户自定义7","USER8":"用户自定义8","USER9":"用户自定义9"}}} \ No newline at end of file diff --git a/resources/model/app/IPSAppUIStyle.json b/resources/model/app/IPSAppUIStyle.json new file mode 100644 index 0000000..35222ec --- /dev/null +++ b/resources/model/app/IPSAppUIStyle.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject","/app/IPSApplicationUI"],"appFolder":{"desc":"应用目录名称","type":"string"},"styleCode":{"desc":"模式代码","type":"string"},"uIStyle":{"desc":"应用界面模式","type":"string","enum":{"DEFAULT":"默认","STYLE2":"样式2","STYLE3":"样式3","STYLE4":"样式4","STYLE5":"样式5","STYLE6":"样式6","STYLE7":"样式7","STYLE8":"样式8","STYLE9":"样式9","STYLE10":"样式10"}}} \ No newline at end of file diff --git a/resources/model/app/IPSAppUtilPage.json b/resources/model/app/IPSAppUtilPage.json new file mode 100644 index 0000000..c8370e6 --- /dev/null +++ b/resources/model/app/IPSAppUtilPage.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"pageUrl":{"desc":"页面路径","type":"string"},"targetType":{"desc":"目标类型","type":"string","enum":{"PAGEURL":"页面路径","APPVIEW":"应用视图"}}} \ No newline at end of file diff --git a/resources/model/app/IPSApplication.json b/resources/model/app/IPSApplication.json new file mode 100644 index 0000000..720bba1 --- /dev/null +++ b/resources/model/app/IPSApplication.json @@ -0,0 +1 @@ +{"getAllAccessKeys":{"desc":"应用访问标识集合","type":"array","schema":"string"},"allPSAppCodeLists":{"desc":"应用代码表集合","type":"array","schema":"/app/codelist/IPSAppCodeList"},"allPSAppCounters":{"desc":"应用计数器集合","type":"array","schema":"/app/control/IPSAppCounter"},"allPSAppDEUIActions":{"desc":"应用界面行为集合","type":"array","schema":"/app/dataentity/IPSAppDEUIAction"},"allPSAppDataEntities":{"desc":"应用实体集合","type":"array","schema":"/app/dataentity/IPSAppDataEntity"},"allPSAppEditorStyleRefs":{"desc":"应用编辑器样式引用集合","type":"array","schema":"/app/res/IPSAppEditorStyleRef"},"allPSAppFuncs":{"desc":"应用功能集合","type":"array","schema":"/app/func/IPSAppFunc"},"allPSAppMenuModels":{"desc":"应用菜单模型集合","type":"array","schema":"/app/appmenu/IPSAppMenuModel"},"allPSAppModules":{"desc":"应用模块集合","type":"array","schema":"/app/IPSAppModule"},"allPSAppMsgTempls":{"desc":"应用消息模板集合","type":"array","schema":"/app/msg/IPSAppMsgTempl"},"allPSAppPFPluginRefs":{"desc":"应用前端模板插件引用集合","type":"array","schema":"/app/res/IPSAppPFPluginRef"},"allPSAppPkgs":{"desc":"应用组件包集合","type":"array","schema":"/app/IPSAppPkg"},"allPSAppPortletCats":{"desc":"应用门户部件分类集合","type":"array","schema":"/app/control/IPSAppPortletCat"},"allPSAppPortlets":{"desc":"应用门户部件集合","type":"array","schema":"/app/control/IPSAppPortlet"},"allPSAppSubViewTypeRefs":{"desc":"应用视图子类型引用集合","type":"array","schema":"/app/res/IPSAppSubViewTypeRef"},"allPSAppUILogics":{"desc":"应用预置界面逻辑集合","type":"array","schema":"/app/logic/IPSAppUILogic"},"allPSAppUIStyles":{"desc":"应用界面模式集合","type":"array","schema":"/app/IPSAppUIStyle"},"allPSAppUIThemes":{"desc":"应用界面主题集合","type":"array","schema":"/app/theme/IPSAppUITheme"},"allPSAppUserModes":{"desc":"应用用户模式集合","type":"array","schema":"/app/usermode/IPSAppUserMode"},"allPSAppUtilPages":{"desc":"应用功能页面集合","type":"array","schema":"/app/IPSAppUtilPage"},"allPSAppUtils":{"desc":"应用功能组件集合","type":"array","schema":"/app/util/IPSAppUtil"},"allPSAppViewMsgGroups":{"desc":"应用视图消息组集合","type":"array","schema":"/app/view/IPSAppViewMsgGroup"},"allPSAppViewMsgs":{"desc":"应用视图消息集合","type":"array","schema":"/app/view/IPSAppViewMsg"},"allPSAppViews":{"desc":"应用视图集合","type":"array","schema":"/app/view/IPSAppView"},"allPSAppWFs":{"desc":"应用工作流集合","type":"array","schema":"/app/wf/IPSAppWF"},"allPSSysTestPrjs":{"desc":"测试项目集合","type":"array","schema":"/testing/IPSSysTestPrj"},"appFolder":{"desc":"应用目录名称","type":"string"},"appMode":{"desc":"应用模式","type":"string","enum":{"DEFAULT":"默认应用","WFAPP":"工作流应用"}},"appVersion":{"desc":"应用版本","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"defaultFlag":{"desc":"默认应用","type":"boolean"},"defaultPSAppIndexView":{"desc":"启动首页视图","type":"object","schema":"/app/view/IPSAppIndexView"},"pFStyle":{"desc":"前端模板样式","type":"string"},"pFType":{"desc":"前端模板","type":"string"},"pKGCodeName":{"desc":"代码包名称","type":"string"},"psApplicationLogics":{"desc":"应用预载逻辑集合","type":"array","schema":"/app/IPSApplicationLogic"},"serviceCodeName":{"desc":"服务代码名称","type":"string"},"enableServiceAPIDTO":{"desc":"启用服务接口DTO","type":"boolean"},"enableUACLogin":{"desc":"启用统一认证登录","type":"boolean"},"mobileApp":{"desc":"移动端应用","type":"boolean"},"useServiceApi":{"desc":"使用服务接口","type":"boolean"},"wFAppMode":{"desc":"流程应用模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/IPSApplicationLogic.json b/resources/model/app/IPSApplicationLogic.json new file mode 100644 index 0000000..74ad191 --- /dev/null +++ b/resources/model/app/IPSApplicationLogic.json @@ -0,0 +1 @@ +{"eventArg":{"desc":"事件参数","type":"string"},"eventArg2":{"desc":"事件参数2","type":"string"},"eventNames":{"desc":"事件名称","type":"string"},"logicTag":{"desc":"逻辑标记","type":"string"},"logicType":{"desc":"触发逻辑类型","type":"string"},"name":{"desc":"逻辑名称","type":"string"},"psAppDataEntity":{"desc":"触发逻辑所在应用实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppUILogic":{"desc":"触发应用预置界面逻辑","type":"object","schema":"/app/logic/IPSAppUILogic"},"scriptCode":{"desc":"脚本代码","type":"string"},"timer":{"desc":"定时间隔(ms)","type":"number"},"triggerType":{"desc":"触发器类型","type":"string","enum":{"TIMER":"定时器触发","CTRLEVENT":"部件事件触发","VIEWEVENT":"视图事件触发","APPEVENT":"应用事件触发","CUSTOM":"只挂接(外部调用)"}}} \ No newline at end of file diff --git a/resources/model/app/IPSApplicationObject.json b/resources/model/app/IPSApplicationObject.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/app/IPSApplicationObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/app/IPSApplicationUI.json b/resources/model/app/IPSApplicationUI.json new file mode 100644 index 0000000..4db8fea --- /dev/null +++ b/resources/model/app/IPSApplicationUI.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"aCMinChars":{"desc":"自动填充最小触发字符数","type":"number"},"buttonNoPrivDisplayMode":{"desc":"无权限按钮显示模式","type":"number","enum":{"1":"禁用","2":"隐藏","6":"隐藏且默认隐藏"}},"defaultAppViewPSSysCss":{"desc":"默认应用视图界面样式","type":"object","schema":"/res/IPSSysCss"},"defaultControlStyle":{"desc":"默认控件样式","type":"string"},"formItemEmptyText":{"desc":"表单项无值显示内容","type":"string"},"formItemNoPrivDisplayMode":{"desc":"表单项无权限显示模式","type":"number","enum":{"1":"显示空或*内容","2":"隐藏"}},"gridColumnEnableLink":{"desc":"表格列启用链接模式","type":"number","enum":{"0":"不启用","1":"启用","2":"启用(自动判断)"}},"gridColumnNoPrivDisplayMode":{"desc":"表格列无权限显示模式","type":"number","enum":{"1":"显示空或*内容","2":"隐藏"}},"gridRowActiveMode":{"desc":"表格行默认激活模式","type":"number","enum":{"0":"无","1":"单击","2":"双击"}},"mDCtrlEmptyText":{"desc":"多数据部件默认无值显示内容","type":"string"},"mDCtrlEmptyTextPSLanguageRes":{"desc":"多数据部件默认无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"mainMenuAlign":{"desc":"主菜单对齐","type":"string","enum":{"LEFT":"左侧","TOP":"上方","CENTER":"中间","TREEEXP":"树导航","TABEXP_TOP":"分页导航(上方分页)","TABEXP_LEFT":"分页导航(左侧分页)","TABEXP_BOTTOM":"分页导航(下方分页)","TABEXP_RIGHT":"分页导航(右侧分页)","NONE":"不显示"}},"pFStyle":{"desc":"前端模板样式","type":"string"},"pFType":{"desc":"前端模板","type":"string"},"uIStyle":{"desc":"应用界面样式","type":"string","enum":{"DEFAULT":"默认","STYLE2":"样式2","STYLE3":"样式3","STYLE4":"样式4","STYLE5":"样式5","STYLE6":"样式6","STYLE7":"样式7","STYLE8":"样式8","STYLE9":"样式9","STYLE10":"样式10","PREVIEW":"预览样式"}},"enableCol12ToCol24":{"desc":"自动转换12列至24列布局","type":"boolean"},"enableDynaDashboard":{"desc":"支持动态数据看板","type":"boolean"},"enableFilterStorage":{"desc":"支持搜索条件存储","type":"boolean"},"gridEnableCustomized":{"desc":"表格默认支持定制","type":"boolean"},"gridForceFit":{"desc":"表格默认启用全屏","type":"boolean"},"outputFormItemUpdatePrivTag":{"desc":"输出表单项更新权限标记","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/appmenu/IPSAppMenuModel.json b/resources/model/app/appmenu/IPSAppMenuModel.json new file mode 100644 index 0000000..9c13ab5 --- /dev/null +++ b/resources/model/app/appmenu/IPSAppMenuModel.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"codeName":{"desc":"代码标识","type":"string"},"psAppMenuItems":{"desc":"菜单项集合","type":"array","schema":"/control/menu/IPSAppMenuItem"}} \ No newline at end of file diff --git a/resources/model/app/codelist/IPSAppCodeList.json b/resources/model/app/codelist/IPSAppCodeList.json new file mode 100644 index 0000000..1e76bd1 --- /dev/null +++ b/resources/model/app/codelist/IPSAppCodeList.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject","/codelist/IPSCodeList"],"beginValuePSAppDEField":{"desc":"开始值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"dataPSAppDEField":{"desc":"数据应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"disablePSAppDEField":{"desc":"禁用标志应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"endValuePSAppDEField":{"desc":"结束值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"iconClsPSAppDEField":{"desc":"图标样式应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"iconClsXPSAppDEField":{"desc":"图标样式(倍数)应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"iconPathPSAppDEField":{"desc":"图标路径应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"iconPathXPSAppDEField":{"desc":"图标路径(倍数)应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"minorSortPSAppDEField":{"desc":"排序应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psAppDEDataSet":{"desc":"应用实体数据集合","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"psAppDataEntity":{"desc":"应用实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"pValuePSAppDEField":{"desc":"父值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"textPSAppDEField":{"desc":"文本应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"valuePSAppDEField":{"desc":"值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/app/control/IPSAppCounter.json b/resources/model/app/control/IPSAppCounter.json new file mode 100644 index 0000000..d4b0cb3 --- /dev/null +++ b/resources/model/app/control/IPSAppCounter.json @@ -0,0 +1 @@ +{"extends":["/control/counter/IPSSysCounter","/app/IPSApplicationObject"],"getPSAppDEAction":{"desc":"计算应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"getPSAppDEDataSet":{"desc":"计算应用实体数据集","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"}} \ No newline at end of file diff --git a/resources/model/app/control/IPSAppCounterRef.json b/resources/model/app/control/IPSAppCounterRef.json new file mode 100644 index 0000000..e81a6c1 --- /dev/null +++ b/resources/model/app/control/IPSAppCounterRef.json @@ -0,0 +1 @@ +{"extends":["/control/counter/IPSSysCounterRef"],"psAppCounter":{"desc":"应用计数器","type":"object","schema":"/app/control/IPSAppCounter"}} \ No newline at end of file diff --git a/resources/model/app/control/IPSAppPortlet.json b/resources/model/app/control/IPSAppPortlet.json new file mode 100644 index 0000000..a92c71f --- /dev/null +++ b/resources/model/app/control/IPSAppPortlet.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"codeName":{"desc":"代码标识","type":"string"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppPortletCat":{"desc":"应用门户部件分类","type":"object","schema":"/app/control/IPSAppPortletCat"},"psControl":{"desc":"控件对象","type":"object","schema":"/control/IPSControl"},"enableAppDashboard":{"desc":"支持应用全局数据看板","type":"boolean"},"enableDEDashboard":{"desc":"支持实体数据看板","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/control/IPSAppPortletCat.json b/resources/model/app/control/IPSAppPortletCat.json new file mode 100644 index 0000000..1b578f6 --- /dev/null +++ b/resources/model/app/control/IPSAppPortletCat.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortletCat","/app/IPSApplicationObject"],"codeName":{"desc":"代码标识","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psSysCss":{"desc":"系统界面样式","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"系统图片","type":"object","schema":"/res/IPSSysImage"},"ungroup":{"desc":"未分组分类","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/control/IPSAppViewQuickGroup.json b/resources/model/app/control/IPSAppViewQuickGroup.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/app/control/IPSAppViewQuickGroup.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/app/control/IPSAppViewQuickGroupItem.json b/resources/model/app/control/IPSAppViewQuickGroupItem.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/app/control/IPSAppViewQuickGroupItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEACMode.json b/resources/model/app/dataentity/IPSAppDEACMode.json new file mode 100644 index 0000000..0c2d4ed --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEACMode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/ac/IPSDEACMode"],"minorSortPSAppDEField":{"desc":"从排序应用属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"pickupPSAppView":{"desc":"嵌入选择视图","type":"object","schema":"/app/view/IPSAppView"},"textPSAppDEField":{"desc":"文本应用属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"valuePSAppDEField":{"desc":"值应用属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEACModeDataItem.json b/resources/model/app/dataentity/IPSAppDEACModeDataItem.json new file mode 100644 index 0000000..2050855 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEACModeDataItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/ac/IPSDEACModeDataItem"],"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEAction.json b/resources/model/app/dataentity/IPSAppDEAction.json new file mode 100644 index 0000000..816f30b --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEAction.json @@ -0,0 +1 @@ +{"extends":["/app/dataentity/IPSAppDEMethod"],"actionMode":{"desc":"行为模式","type":"string","enum":{"CREATE":"创建数据","READ":"读取数据","UPDATE":"更新数据","DELETE":"删除数据","CUSTOM":"自定义操作","GETDRAFT":"获取草稿","UNKNOWN":"未知操作","MOVEORDER":"移动位置","CHECKKEY":"检查主键","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"actionType":{"desc":"行为类型","type":"string","enum":{"USERCUSTOM":"用户自定义","DELOGIC":"实体处理逻辑","BUILTIN":"内置方法","SELECTBYKEY":"通过键值获取","USERCREATE":"用户扩展建立","USERUPDATE":"用户扩展更新","USERSYSUPDATE":"用户扩展系统更新","SCRIPT":"脚本代码","REMOTE":"远程接口行为"}},"batchActionMode":{"desc":"批操作模式","type":"number","enum":{"0":"不支持","1":"支持","2":"仅支持批操作","5":"支持(事务)","6":"仅支持批操作(事务)"}},"psAppDELogic":{"desc":"实体处理逻辑","type":"object","schema":"/app/dataentity/IPSAppDELogic"},"psDEAction":{"desc":"实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"psDEOPPriv":{"desc":"默认操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"自定义代码","type":"boolean"},"enableBatchAction":{"desc":"批操作行为","type":"boolean"},"enableTestMethod":{"desc":"启用判断执行方法","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEActionInput.json b/resources/model/app/dataentity/IPSAppDEActionInput.json new file mode 100644 index 0000000..0d7fb21 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEActionInput.json @@ -0,0 +1 @@ +{"extends":["/app/dataentity/IPSAppDEMethodInput"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEActionInputParam.json b/resources/model/app/dataentity/IPSAppDEActionInputParam.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEActionInputParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEActionLogic.json b/resources/model/app/dataentity/IPSAppDEActionLogic.json new file mode 100644 index 0000000..5f3cddc --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEActionLogic.json @@ -0,0 +1 @@ +{"extends":["/app/dataentity/IPSAppDEMethodLogic"],"dstPSAppDEAction":{"desc":"触发目标行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"dstPSAppDataEntity":{"desc":"目标行为所属实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppDELogic":{"desc":"应用实体逻辑","type":"object","schema":"/app/dataentity/IPSAppDELogic"},"cloneParam":{"desc":"克隆传入参数","type":"boolean"},"internalLogic":{"desc":"内部逻辑","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEDRGroup.json b/resources/model/app/dataentity/IPSAppDEDRGroup.json new file mode 100644 index 0000000..2f90eb9 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEDRGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dr/IPSDEDRGroup","/app/dataentity/IPSAppDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEDRItem.json b/resources/model/app/dataentity/IPSAppDEDRItem.json new file mode 100644 index 0000000..e5c8d7f --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEDRItem.json @@ -0,0 +1 @@ +{"extends":["/app/dataentity/IPSAppDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEDataExport.json b/resources/model/app/dataentity/IPSAppDEDataExport.json new file mode 100644 index 0000000..b9fbe6a --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEDataExport.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dataexport/IPSDEDataExport","/app/dataentity/IPSAppDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEDataExportItem.json b/resources/model/app/dataentity/IPSAppDEDataExportItem.json new file mode 100644 index 0000000..a48c89e --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEDataExportItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dataexport/IPSDEDataExportItem"],"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEDataImport.json b/resources/model/app/dataentity/IPSAppDEDataImport.json new file mode 100644 index 0000000..6d611e5 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEDataImport.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dataimport/IPSDEDataImport","/app/dataentity/IPSAppDataEntityObject"],"createPSAppDEAction":{"desc":"建立应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"updatePSAppDEAction":{"desc":"更新应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEDataImportItem.json b/resources/model/app/dataentity/IPSAppDEDataImportItem.json new file mode 100644 index 0000000..6d0a801 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEDataImportItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dataimport/IPSDEDataImportItem"],"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEDataSet.json b/resources/model/app/dataentity/IPSAppDEDataSet.json new file mode 100644 index 0000000..dd0828f --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEDataSet.json @@ -0,0 +1 @@ +{"extends":["/app/dataentity/IPSAppDEMethod"],"aDPSDEDQConditions":{"desc":"上下文数据条件","type":"array","schema":"/dataentity/ds/IPSDEDQCondition"},"dataSetType":{"desc":"结果集类型","type":"string","enum":{"DATAQUERY":"数据查询","INDEXDE":"索引实体","MULTIFORM":"多表单","CODELIST":"代码表","SCRIPT":"脚本代码","REMOTE":"远程接口数据集"}},"psAppCodeList":{"desc":"应用代码表","type":"object","schema":"/app/codelist/IPSAppCodeList"},"psDEDataSet":{"desc":"实体数据集合","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"predefinedType":{"desc":"预定义类型","type":"string","enum":{"CODELIST":"代码表","INDEXDE":"索引实体","MULTIFORM":"多表单","SCRIPT":"脚本代码","REMOTE":"远程接口数据集"}},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"自定义代码","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEFLogic.json b/resources/model/app/dataentity/IPSAppDEFLogic.json new file mode 100644 index 0000000..76c27af --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEFLogic.json @@ -0,0 +1 @@ +{"extends":["/app/dataentity/IPSAppDELogic","/dataentity/logic/IPSDEFLogic"],"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEFUIItem.json b/resources/model/app/dataentity/IPSAppDEFUIItem.json new file mode 100644 index 0000000..9cc27df --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEFUIItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFUIItem","/app/dataentity/IPSAppDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEFUIMode.json b/resources/model/app/dataentity/IPSAppDEFUIMode.json new file mode 100644 index 0000000..4a0b595 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEFUIMode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFUIMode","/app/dataentity/IPSAppDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEFValueRule.json b/resources/model/app/dataentity/IPSAppDEFValueRule.json new file mode 100644 index 0000000..5e03a76 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEFValueRule.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFValueRule","/app/dataentity/IPSAppDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEField.json b/resources/model/app/dataentity/IPSAppDEField.json new file mode 100644 index 0000000..cb33192 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEField.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/app/dataentity/IPSAppDataEntityObject","/dataentity/defield/IPSDEFieldBase"],"allPSAppDEFUIModes":{"desc":"属性界面模式集合","type":"array","schema":"/app/dataentity/IPSAppDEFUIMode"},"codeName":{"desc":"代码标识","type":"string"},"computePSAppDEFLogic":{"desc":"值计算逻辑","type":"object","schema":"/app/dataentity/IPSAppDEFLogic"},"defaultValue":{"desc":"默认值","type":"string"},"defaultValuePSAppDEFLogic":{"desc":"默认值逻辑","type":"object","schema":"/app/dataentity/IPSAppDEFLogic"},"defaultValueType":{"desc":"默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据","EXPRESSION":"表达式","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"lNPSLanguageRes":{"desc":"逻辑名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"logicName":{"desc":"逻辑名称","type":"string"},"onChangePSAppDEFLogic":{"desc":"值变更逻辑","type":"object","schema":"/app/dataentity/IPSAppDEFLogic"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"valueFormat":{"desc":"值格式化","type":"string"},"dataTypeField":{"desc":"数据类型属性","type":"boolean"},"enableFrontOnly":{"desc":"仅支持前端","type":"boolean"},"enableQuickSearch":{"desc":"支持快速搜索","type":"boolean"},"keyField":{"desc":"主键属性","type":"boolean"},"majorField":{"desc":"主信息属性","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDELogic.json b/resources/model/app/dataentity/IPSAppDELogic.json new file mode 100644 index 0000000..00a4070 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDELogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogic","/app/dataentity/IPSAppDataEntityObject","/app/IPSApplicationObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDELogicLink.json b/resources/model/app/dataentity/IPSAppDELogicLink.json new file mode 100644 index 0000000..22f3a47 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDELogicLink.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLink"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDELogicLinkCond.json b/resources/model/app/dataentity/IPSAppDELogicLinkCond.json new file mode 100644 index 0000000..4a7ec5b --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDELogicLinkCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkCond"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDELogicNode.json b/resources/model/app/dataentity/IPSAppDELogicNode.json new file mode 100644 index 0000000..fead1c0 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDELogicNode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDELogicNodeParam.json b/resources/model/app/dataentity/IPSAppDELogicNodeParam.json new file mode 100644 index 0000000..7a69ba8 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDELogicNodeParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNodeParam"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDELogicParam.json b/resources/model/app/dataentity/IPSAppDELogicParam.json new file mode 100644 index 0000000..5fe7f05 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDELogicParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicParamBase"],"paramPSAppDataEntity":{"desc":"参数应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEMethod.json b/resources/model/app/dataentity/IPSAppDEMethod.json new file mode 100644 index 0000000..147968b --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEMethod.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/app/dataentity/IPSAppDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"methodType":{"desc":"方法类型","type":"string","enum":{"DEACTION":"实体行为","FETCH":"实体数据集合","SELECT":"实体数据查询(SELECT)","FETCHTEMP":"实体数据集合(临时)","SELECTTEMP":"实体数据查询(SELECT)(临时)","WFACTION":"流程行为","FILTERACTION":"过滤器行为","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"psAppDEMethodInput":{"desc":"方法输入对象","type":"object","schema":"/app/dataentity/IPSAppDEMethodInput"},"psAppDEMethodReturn":{"desc":"方法返回对象","type":"object","schema":"/app/dataentity/IPSAppDEMethodReturn"},"psDEServiceAPIMethod":{"desc":"服务接口方法","type":"object","schema":"/dataentity/service/IPSDEServiceAPIMethod"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"tempDataMode":{"desc":"临时数据模式","type":"number","enum":{"0":"无临时数据模式","1":"主数据模式","2":"从数据模式"}},"builtinMethod":{"desc":"预置方法","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEMethodDTO.json b/resources/model/app/dataentity/IPSAppDEMethodDTO.json new file mode 100644 index 0000000..8e83141 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEMethodDTO.json @@ -0,0 +1 @@ +{"extends":["/app/dataentity/IPSAppDataEntityObject","/app/IPSApplicationObject"],"codeName":{"desc":"代码标识","type":"string"},"psAppDEMethodDTOFields":{"desc":"DTO对象属性集合","type":"array","schema":"/app/dataentity/IPSAppDEMethodDTOField"},"sourceType":{"desc":"实体方法DTO对象来源类型","type":"string","enum":{"DE":"实体","DYNAMODEL":"动态模型","DEACTIONINPUT":"实体行为参数","DEFILTER":"实体过滤器"}},"type":{"desc":"类型","type":"string","enum":{"DEFAULT":"实体默认","DEACTIONINPUT":"实体行为自定义参数","DEFILTER":"实体过滤器"}}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEMethodDTOField.json b/resources/model/app/dataentity/IPSAppDEMethodDTOField.json new file mode 100644 index 0000000..690b6eb --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEMethodDTOField.json @@ -0,0 +1 @@ +{"extends":["/IPSModelSortable","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"logicName":{"desc":"中文名称","type":"string"},"sourceType":{"desc":"DTO属性来源类型","type":"string","enum":{"DEFIELD":"实体属性","DEFGROUPDETAIL":"实体属性组成员","DER":"实体关系","DYNAMODELATTR":"动态模型属性","DEACTIONPARAM":"实体行为参数","DEFSEARCHMODE":"属性搜索模式"}},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"type":{"desc":"应用实体DTO对象属性类型","type":"string","enum":{"SIMPLE":"简单数据类型","SIMPLES":"简单数据类型数组","DTO":"DTO对象","DTOS":"DTO对象数组"}},"allowEmpty":{"desc":"允许空输入","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEMethodInput.json b/resources/model/app/dataentity/IPSAppDEMethodInput.json new file mode 100644 index 0000000..b148c6f --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEMethodInput.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodInput"],"keyPSAppDEField":{"desc":"输入主键属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psAppDEMethodDTO":{"desc":"输入DTO对象","type":"object","schema":"/app/dataentity/IPSAppDEMethodDTO"},"type":{"desc":"输入类型","type":"string","enum":{"NONE":"没有输入","KEYFIELD":"主键属性","KEYFIELDS":"主键属性集合","DTO":"DTO对象","DTOS":"DTO对象集合","FILTER":"搜索过滤对象","UNKNOWN":"未知","USER":"用户自定义","USER2":"用户自定义2"}},"output":{"desc":"同时为结果输出","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEMethodLogic.json b/resources/model/app/dataentity/IPSAppDEMethodLogic.json new file mode 100644 index 0000000..4208708 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEMethodLogic.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/app/dataentity/IPSAppDataEntityObject"],"actionLogicType":{"desc":"行为逻辑类型","type":"number","enum":{"1":"内部逻辑","0":"外部逻辑","2":"脚本代码","3":"实体通知"}},"attachMode":{"desc":"附加模式","type":"string","enum":{"PREPARE":"准备","CHECK":"检查","BEFORE":"执行之前","AFTER":"执行之后"}},"scriptCode":{"desc":"脚本代码","type":"string"},"ignoreException":{"desc":"忽略异常","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEMethodReturn.json b/resources/model/app/dataentity/IPSAppDEMethodReturn.json new file mode 100644 index 0000000..a343e36 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEMethodReturn.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodReturn"],"psAppDEMethodDTO":{"desc":"返回DTO对象","type":"object","schema":"/app/dataentity/IPSAppDEMethodDTO"},"stdDataType":{"desc":"简单值类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"type":{"desc":"返回类型","type":"string","enum":{"VOID":"没有返回","SIMPLE":"简单值","SIMPLES":"简单值数组","DTO":"DTO对象","DTOS":"DTO对象集合","PAGE":"搜索分页","UNKNOWN":"未知","USER":"用户自定义","USER2":"用户自定义2"}}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDERS.json b/resources/model/app/dataentity/IPSAppDERS.json new file mode 100644 index 0000000..eaecc47 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDERS.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"actionRSMode":{"desc":"行为关系模式","type":"number","enum":{"0":"无行为","1":"继承行为","2":"指定行为"}},"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"dataRSMode":{"desc":"数据关系模式","type":"number","enum":{"1":"新建","2":"更新","4":"获取","8":"查询"}},"majorPSAppDataEntity":{"desc":"主应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"minorPSAppDataEntity":{"desc":"从应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"parentFilter":{"desc":"关系项","type":"string"},"parentPSAppDEField":{"desc":"父关系连接属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"rSMode":{"desc":"关系模式","type":"number","enum":{"1":"应用自建","2":"实体服务接口关系"}},"tempDataOrder":{"desc":"临时数据次序","type":"number"},"array":{"desc":"数组模式","type":"boolean"},"enableCreateDataRS":{"desc":"数据建立关联输出","type":"boolean"},"enableGetDataRS":{"desc":"数据获取关联输出","type":"boolean"},"enableSelectDataRS":{"desc":"数据查询关联输出","type":"boolean"},"enableUpdateDataRS":{"desc":"数据更新关联输出","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUIAction.json b/resources/model/app/dataentity/IPSAppDEUIAction.json new file mode 100644 index 0000000..cb4eed8 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUIAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/uiaction/IPSDEUIAction","/app/view/IPSAppUIAction"],"noPrivDisplayMode":{"desc":"无权限显示模式","type":"number"},"frontPSAppView":{"desc":"前端应用视图","type":"object","schema":"/app/view/IPSAppView"},"psAppDEMethod":{"desc":"应用实体方法","type":"object","schema":"/app/dataentity/IPSAppDEMethod"},"psAppDEUILogic":{"desc":"应用实体界面逻辑","type":"object","schema":"/app/dataentity/IPSAppDEUILogic"},"psAppDataEntity":{"desc":"应用实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppUILogic":{"desc":"应用预置界面逻辑","type":"object","schema":"/app/logic/IPSAppUILogic"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUIActionGroup.json b/resources/model/app/dataentity/IPSAppDEUIActionGroup.json new file mode 100644 index 0000000..912ac63 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUIActionGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/uiaction/IPSDEUIActionGroup"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUIActionGroupDetail.json b/resources/model/app/dataentity/IPSAppDEUIActionGroupDetail.json new file mode 100644 index 0000000..f18a418 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUIActionGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/dataentity/uiaction/IPSDEUIActionGroupDetail"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUILogic.json b/resources/model/app/dataentity/IPSAppDEUILogic.json new file mode 100644 index 0000000..86bcf24 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUILogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogic","/app/dataentity/IPSAppDataEntityObject","/app/IPSApplicationObject"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUILogicGroup.json b/resources/model/app/dataentity/IPSAppDEUILogicGroup.json new file mode 100644 index 0000000..6d13878 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUILogicGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicGroup"],"psAppDEUILogicGroupDetails":{"desc":"逻辑组成员集合","type":"array","schema":"/app/dataentity/IPSAppDEUILogicGroupDetail"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUILogicGroupDetail.json b/resources/model/app/dataentity/IPSAppDEUILogicGroupDetail.json new file mode 100644 index 0000000..bcf9c5d --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUILogicGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicGroupDetail"],"psAppDEUILogic":{"desc":"应用实体界面逻辑对象","type":"object","schema":"/app/dataentity/IPSAppDEUILogic"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppUILogic":{"desc":"应用预置界面逻辑对象","type":"object","schema":"/app/logic/IPSAppUILogic"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUILogicLink.json b/resources/model/app/dataentity/IPSAppDEUILogicLink.json new file mode 100644 index 0000000..3fdf558 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUILogicLink.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicLink"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUILogicLinkCond.json b/resources/model/app/dataentity/IPSAppDEUILogicLinkCond.json new file mode 100644 index 0000000..55d7669 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUILogicLinkCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicLinkCond"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUILogicNode.json b/resources/model/app/dataentity/IPSAppDEUILogicNode.json new file mode 100644 index 0000000..b0506d5 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUILogicNode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"psSysPFPlugin":{"desc":"前端模板插件对象","type":"object","schema":"/res/IPSSysPFPlugin"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUILogicNodeParam.json b/resources/model/app/dataentity/IPSAppDEUILogicNodeParam.json new file mode 100644 index 0000000..d71cafb --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUILogicNodeParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNodeParam"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDEUILogicParam.json b/resources/model/app/dataentity/IPSAppDEUILogicParam.json new file mode 100644 index 0000000..defa55a --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDEUILogicParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicParam"]} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDataEntity.json b/resources/model/app/dataentity/IPSAppDataEntity.json new file mode 100644 index 0000000..be67345 --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDataEntity.json @@ -0,0 +1 @@ +{"extends":["/app/mob/IPSAppLocalDE"],"allPSAppDEACModes":{"desc":"实体自填模式集合","type":"array","schema":"/app/dataentity/IPSAppDEACMode"},"allPSAppDEActions":{"desc":"应用实体行为集合","type":"array","schema":"/app/dataentity/IPSAppDEAction"},"allPSAppDEDataExports":{"desc":"实体数据导出集合","type":"array","schema":"/app/dataentity/IPSAppDEDataExport"},"allPSAppDEDataImports":{"desc":"实体数据导入集合","type":"array","schema":"/app/dataentity/IPSAppDEDataImport"},"allPSAppDEDataSets":{"desc":"应用实体数据集集合","type":"array","schema":"/app/dataentity/IPSAppDEDataSet"},"allPSAppDEFields":{"desc":"应用实体属性集合","type":"array","schema":"/app/dataentity/IPSAppDEField"},"allPSAppDELogics":{"desc":"应用实体逻辑集合","type":"array","schema":"/app/dataentity/IPSAppDELogic"},"allPSAppDEMethodDTOs":{"desc":"应用实体方法DTO对象集合","type":"array","schema":"/app/dataentity/IPSAppDEMethodDTO"},"allPSAppDEMethods":{"desc":"应用实体方法集合","type":"array","schema":"/app/dataentity/IPSAppDEMethod"},"allPSAppDEUIActions":{"desc":"实体界面行为集合","type":"array","schema":"/app/dataentity/IPSAppDEUIAction"},"allPSAppDEUILogics":{"desc":"实体界面逻辑集合","type":"array","schema":"/app/dataentity/IPSAppDEUILogic"},"allPSAppPortletCats":{"desc":"实体门户部件分类集合","type":"array","schema":"/app/control/IPSAppPortletCat"},"allPSAppViews":{"desc":"全部应用视图","type":"array","schema":"/app/view/IPSAppView"},"allPSDEMainStates":{"desc":"实体主状态集合","type":"array","schema":"/dataentity/mainstate/IPSDEMainState"},"allPSDEOPPrivs":{"desc":"实体操作标识集合","type":"array","schema":"/dataentity/priv/IPSDEOPPriv"},"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"dEFGroupMode":{"desc":"属性组使用模式","type":"string","enum":{"REPLACE":"替换实体属性","OVERWRITE":"重定义实体属性","EXCLUDE":"排除属性组属性"}},"dataAccCtrlArch":{"desc":"实体访问控制体系","type":"number","enum":{"1":"运行子系统角色体系(默认)","2":"当前系统角色及实体角色"}},"dataAccCtrlMode":{"desc":"实体数据访问控制方式","type":"number","enum":{"0":"无控制","1":"自控制","2":"附属主实体控制","3":"附属主实体控制(未映射自控)"}},"enableUIActions":{"desc":"实体支持界面行为","type":"number","enum":{"1":"建立","2":"更新","4":"删除"}},"keyPSAppDEField":{"desc":"主键属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"lNPSLanguageRes":{"desc":"逻辑名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"logicName":{"desc":"逻辑名称","type":"string"},"majorPSAppDEField":{"desc":"主信息属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"minorPSAppDERSs":{"desc":"应用实体从关系集合","type":"array","schema":"/app/dataentity/IPSAppDERS"},"psAppModule":{"desc":"应用模块","type":"object","schema":"/app/IPSAppModule"},"getPSDEName":{"desc":"实体名称","type":"string"},"psDER1N":{"desc":"控制实体关系","type":"object","schema":"/dataentity/der/IPSDER1N"},"psDEServiceAPI":{"desc":"实体服务接口","type":"object","schema":"/dataentity/service/IPSDEServiceAPI"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysImage":{"desc":"系统图片资源","type":"object","schema":"/res/IPSSysImage"},"psSysServiceAPI":{"desc":"服务接口","type":"object","schema":"/service/IPSSysServiceAPI"},"quickSearchPSAppDEFields":{"desc":"快速搜索属性集合","type":"array","schema":"/app/dataentity/IPSAppDEField"},"storageMode":{"desc":"本地存储模式","type":"number","enum":{"0":"仅远程存储","1":"仅本地存储","3":"本地及远程存储","4":"DTO成员(无存储)"}},"defaultMode":{"desc":"实体默认","type":"boolean"},"enableFilterActions":{"desc":"提供过滤器相关行为","type":"boolean"},"enableTempData":{"desc":"支持临时数据模式","type":"boolean"},"enableUICreate":{"desc":"支持界面建立","type":"boolean"},"enableUIModify":{"desc":"支持界面修改","type":"boolean"},"enableUIRemove":{"desc":"支持界面删除","type":"boolean"},"enableWFActions":{"desc":"提供工作流相关行为","type":"boolean"},"major":{"desc":"主实体","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/dataentity/IPSAppDataEntityObject.json b/resources/model/app/dataentity/IPSAppDataEntityObject.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/app/dataentity/IPSAppDataEntityObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/app/func/IPSAppFunc.json b/resources/model/app/func/IPSAppFunc.json new file mode 100644 index 0000000..2a583ab --- /dev/null +++ b/resources/model/app/func/IPSAppFunc.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject","/control/IPSNavigateParamContainer"],"appFuncType":{"desc":"应用功能类型","type":"string","enum":{"APPVIEW":"打开应用视图","OPENHTMLPAGE":"打开HTML页面","PDTAPPFUNC":"预置应用功能","JAVASCRIPT":"执行JavaScript","CUSTOM":"自定义"}},"codeName":{"desc":"代码标识","type":"string"},"funcSN":{"desc":"功能编号","type":"string"},"htmlPageUrl":{"desc":"Html地址","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"openMode":{"desc":"功能打开模式","type":"string","enum":{"INDEXVIEWTAB":"应用容器分页","INDEXVIEWPOPUP":"应用容器弹出","INDEXVIEWPOPUPMODAL":"应用容器弹出(模式)","HTMLPOPUP":"独立网页弹出","TOP":"顶级页面"}},"openViewParam":{"desc":"打开视图参数","type":"object"},"psAppView":{"desc":"打开视图","type":"object","schema":"/app/view/IPSAppView"},"tooltip":{"desc":"操作提示信息","type":"string"},"tooltipPSLanguageRes":{"desc":"操作提示语言资源","type":"object","schema":"/res/IPSLanguageRes"},"userData":{"desc":"用户数据","type":"string"},"userData2":{"desc":"用户数据2","type":"string"},"systemReserved":{"desc":"系统保留","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/logic/IPSAppUILogic.json b/resources/model/app/logic/IPSAppUILogic.json new file mode 100644 index 0000000..94a52c0 --- /dev/null +++ b/resources/model/app/logic/IPSAppUILogic.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysViewLogic"],"psAppDEUILogic":{"desc":"应用实体界面逻辑对象","type":"object","schema":"/app/dataentity/IPSAppDEUILogic"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppUILogicRefViews":{"desc":"应用界面逻辑引用视图集合","type":"array","schema":"/app/logic/IPSAppUILogicRefView"},"viewLogicType":{"desc":"界面逻辑类型","type":"string"},"builtinLogic":{"desc":"内建逻辑","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/logic/IPSAppUILogicRefView.json b/resources/model/app/logic/IPSAppUILogicRefView.json new file mode 100644 index 0000000..dc7bbb2 --- /dev/null +++ b/resources/model/app/logic/IPSAppUILogicRefView.json @@ -0,0 +1 @@ +{"extends":["/app/logic/IPSAppUILogicRefViewBase","/app/view/IPSAppViewBase","/app/view/IPSAppDEViewBase"]} \ No newline at end of file diff --git a/resources/model/app/logic/IPSAppUILogicRefViewBase.json b/resources/model/app/logic/IPSAppUILogicRefViewBase.json new file mode 100644 index 0000000..060652f --- /dev/null +++ b/resources/model/app/logic/IPSAppUILogicRefViewBase.json @@ -0,0 +1 @@ +{"extends":["/control/IPSNavigateParamContainer","/IPSModelObject"],"refMode":{"desc":"引用模式","type":"string"},"refPSAppView":{"desc":"实际引用视图","type":"object","schema":"/app/view/IPSAppView"}} \ No newline at end of file diff --git a/resources/model/app/logic/IPSAppUINewDataLogic.json b/resources/model/app/logic/IPSAppUINewDataLogic.json new file mode 100644 index 0000000..cac2134 --- /dev/null +++ b/resources/model/app/logic/IPSAppUINewDataLogic.json @@ -0,0 +1 @@ +{"extends":["/app/logic/IPSAppUILogic"],"actionAfterWizard":{"desc":"向导添加后操作","type":"string"},"batchAddPSAppViews":{"desc":"批添加新建数据视图集合","type":"array","schema":"/app/logic/IPSAppUILogicRefView"},"newDataPSAppView":{"desc":"默认新建数据视图","type":"object","schema":"/app/logic/IPSAppUILogicRefView"},"newDataPSAppViews":{"desc":"多模式新建数据视图集合","type":"array","schema":"/app/logic/IPSAppUILogicRefView"},"wizardPSAppView":{"desc":"新建数据向导视图","type":"object","schema":"/app/logic/IPSAppUILogicRefView"},"batchAddOnly":{"desc":"只支持批添加","type":"boolean"},"enableBatchAdd":{"desc":"支持批添加","type":"boolean"},"enableWizardAdd":{"desc":"支持向导添加","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/logic/IPSAppUIOpenDataLogic.json b/resources/model/app/logic/IPSAppUIOpenDataLogic.json new file mode 100644 index 0000000..c7304e5 --- /dev/null +++ b/resources/model/app/logic/IPSAppUIOpenDataLogic.json @@ -0,0 +1 @@ +{"extends":["/app/logic/IPSAppUILogic"],"openDataPSAppView":{"desc":"默认打开数据视图","type":"object","schema":"/app/logic/IPSAppUILogicRefView"},"openDataPSAppViews":{"desc":"多模式打开数据视图集合","type":"array","schema":"/app/logic/IPSAppUILogicRefView"},"editMode":{"desc":"编辑模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/mob/IPSAppLocalDE.json b/resources/model/app/mob/IPSAppLocalDE.json new file mode 100644 index 0000000..451ba0e --- /dev/null +++ b/resources/model/app/mob/IPSAppLocalDE.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"psDataEntity":{"type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/app/mob/IPSMobAppIcon.json b/resources/model/app/mob/IPSMobAppIcon.json new file mode 100644 index 0000000..cd5695b --- /dev/null +++ b/resources/model/app/mob/IPSMobAppIcon.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"]} \ No newline at end of file diff --git a/resources/model/app/mob/IPSMobAppStartPage.json b/resources/model/app/mob/IPSMobAppStartPage.json new file mode 100644 index 0000000..9dcd02e --- /dev/null +++ b/resources/model/app/mob/IPSMobAppStartPage.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"height":{"desc":"高度","type":"number"},"width":{"desc":"宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/app/msg/IPSAppMsgTempl.json b/resources/model/app/msg/IPSAppMsgTempl.json new file mode 100644 index 0000000..70dadcf --- /dev/null +++ b/resources/model/app/msg/IPSAppMsgTempl.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject","/msg/IPSSysMsgTempl"]} \ No newline at end of file diff --git a/resources/model/app/pub/IPSAppViewCode.json b/resources/model/app/pub/IPSAppViewCode.json new file mode 100644 index 0000000..cd5695b --- /dev/null +++ b/resources/model/app/pub/IPSAppViewCode.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"]} \ No newline at end of file diff --git a/resources/model/app/res/IPSAppCss.json b/resources/model/app/res/IPSAppCss.json new file mode 100644 index 0000000..9c5c7ab --- /dev/null +++ b/resources/model/app/res/IPSAppCss.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject","/res/IPSSysCss"]} \ No newline at end of file diff --git a/resources/model/app/res/IPSAppEditorStyleRef.json b/resources/model/app/res/IPSAppEditorStyleRef.json new file mode 100644 index 0000000..f4b18b0 --- /dev/null +++ b/resources/model/app/res/IPSAppEditorStyleRef.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"containerType":{"desc":"容器类型","type":"string"},"psSysPFPlugin":{"desc":"前端模板插件","type":"object","schema":"/res/IPSSysPFPlugin"},"pluginCode":{"desc":"插件代码","type":"string"},"refTag":{"desc":"引用标记","type":"string"},"extendStyleOnly":{"desc":"仅扩展界面样式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/res/IPSAppImage.json b/resources/model/app/res/IPSAppImage.json new file mode 100644 index 0000000..a988c9e --- /dev/null +++ b/resources/model/app/res/IPSAppImage.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject","/res/IPSSysImage"]} \ No newline at end of file diff --git a/resources/model/app/res/IPSAppPFPluginRef.json b/resources/model/app/res/IPSAppPFPluginRef.json new file mode 100644 index 0000000..6750483 --- /dev/null +++ b/resources/model/app/res/IPSAppPFPluginRef.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"psSysPFPlugin":{"desc":"前端模板插件","type":"object","schema":"/res/IPSSysPFPlugin"},"pluginCode":{"desc":"插件代码","type":"string"},"pluginModel":{"desc":"插件模型","type":"object"},"refMode":{"desc":"引用模式","type":"string"},"refTag":{"desc":"引用标记","type":"string"},"refTag2":{"desc":"引用标记2","type":"string"},"extendStyleOnly":{"desc":"仅扩展界面样式","type":"boolean"},"replaceDefault":{"desc":"全局默认替换","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/res/IPSAppSubViewTypeRef.json b/resources/model/app/res/IPSAppSubViewTypeRef.json new file mode 100644 index 0000000..1e7efcb --- /dev/null +++ b/resources/model/app/res/IPSAppSubViewTypeRef.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"psSysPFPlugin":{"desc":"前端模板插件","type":"object","schema":"/res/IPSSysPFPlugin"},"pluginCode":{"desc":"插件代码","type":"string"},"refTag":{"desc":"引用标记","type":"string"},"viewModel":{"desc":"视图模型","type":"object"},"viewType":{"desc":"标准视图类型","type":"string"},"extendStyleOnly":{"desc":"仅扩展界面样式","type":"boolean"},"replaceDefault":{"desc":"全局默认替换","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/theme/IPSAppUITheme.json b/resources/model/app/theme/IPSAppUITheme.json new file mode 100644 index 0000000..3e9d131 --- /dev/null +++ b/resources/model/app/theme/IPSAppUITheme.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"themeDesc":{"desc":"主题说明","type":"string"},"themeTag":{"desc":"主题标记","type":"string"}} \ No newline at end of file diff --git a/resources/model/app/usermode/IPSAppUserMode.json b/resources/model/app/usermode/IPSAppUserMode.json new file mode 100644 index 0000000..c571603 --- /dev/null +++ b/resources/model/app/usermode/IPSAppUserMode.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"defaultMode":{"desc":"默认用户模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/util/IPSAppDraftStorageUtil.json b/resources/model/app/util/IPSAppDraftStorageUtil.json new file mode 100644 index 0000000..65dad11 --- /dev/null +++ b/resources/model/app/util/IPSAppDraftStorageUtil.json @@ -0,0 +1 @@ +{"extends":["/app/util/IPSAppDynaUtilBase"]} \ No newline at end of file diff --git a/resources/model/app/util/IPSAppDynaDashboardUtil.json b/resources/model/app/util/IPSAppDynaDashboardUtil.json new file mode 100644 index 0000000..65dad11 --- /dev/null +++ b/resources/model/app/util/IPSAppDynaDashboardUtil.json @@ -0,0 +1 @@ +{"extends":["/app/util/IPSAppDynaUtilBase"]} \ No newline at end of file diff --git a/resources/model/app/util/IPSAppDynaUtilBase.json b/resources/model/app/util/IPSAppDynaUtilBase.json new file mode 100644 index 0000000..bc1f286 --- /dev/null +++ b/resources/model/app/util/IPSAppDynaUtilBase.json @@ -0,0 +1 @@ +{"extends":["/app/util/IPSAppUtil"],"appIdPSAppDEField":{"desc":"应用标识存储属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"createPSAppDEAction":{"desc":"建立数据行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"getPSAppDEAction":{"desc":"获取数据行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"modelIdPSAppDEField":{"desc":"模型标识存储属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"modelPSAppDEField":{"desc":"模型存储属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"removePSAppDEAction":{"desc":"删除数据行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"stoagePSAppDataEntity":{"desc":"功能数据存储实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"storagePSAppDataEntity":{"desc":"功能数据存储实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"updatePSAppDEAction":{"desc":"更新数据行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"userIdPSAppDEField":{"desc":"用户标识存储属性","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/app/util/IPSAppFilterStorageUtil.json b/resources/model/app/util/IPSAppFilterStorageUtil.json new file mode 100644 index 0000000..65dad11 --- /dev/null +++ b/resources/model/app/util/IPSAppFilterStorageUtil.json @@ -0,0 +1 @@ +{"extends":["/app/util/IPSAppDynaUtilBase"]} \ No newline at end of file diff --git a/resources/model/app/util/IPSAppUtil.json b/resources/model/app/util/IPSAppUtil.json new file mode 100644 index 0000000..8339c23 --- /dev/null +++ b/resources/model/app/util/IPSAppUtil.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"codeName":{"desc":"代码标识","type":"string"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"utilPSDE10Name":{"desc":"功能实体10名称","type":"string"},"utilPSDE2Name":{"desc":"功能实体2名称","type":"string"},"utilPSDE3Name":{"desc":"功能实体3名称","type":"string"},"utilPSDE4Name":{"desc":"功能实体4名称","type":"string"},"utilPSDE5Name":{"desc":"功能实体5名称","type":"string"},"utilPSDE6Name":{"desc":"功能实体6名称","type":"string"},"utilPSDE7Name":{"desc":"功能实体7名称","type":"string"},"utilPSDE8Name":{"desc":"功能实体8名称","type":"string"},"utilPSDE9Name":{"desc":"功能实体9名称","type":"string"},"utilPSDEName":{"desc":"功能实体名称","type":"string"},"utilTag":{"desc":"功能标记","type":"string"},"utilType":{"desc":"功能类型","type":"string","enum":{"FILTERSTORAGE":"搜索条件存储","DYNADASHBOARD":"动态数据看板","DYNACHART":"动态图表","DYNAREPORT":"动态报表","DRAFTSTORAGE":"表单草稿存储","USER":"用户自定义"}}} \ No newline at end of file diff --git a/resources/model/app/valuerule/IPSAppValueRule.json b/resources/model/app/valuerule/IPSAppValueRule.json new file mode 100644 index 0000000..acbfd7a --- /dev/null +++ b/resources/model/app/valuerule/IPSAppValueRule.json @@ -0,0 +1 @@ +{"extends":["/valuerule/IPSSysValueRule","/app/IPSApplicationObject"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDECalendarExplorerView.json b/resources/model/app/view/IPSAppDECalendarExplorerView.json new file mode 100644 index 0000000..f26b6f3 --- /dev/null +++ b/resources/model/app/view/IPSAppDECalendarExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDESideBarExplorerView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDECalendarView.json b/resources/model/app/view/IPSAppDECalendarView.json new file mode 100644 index 0000000..7a3d509 --- /dev/null +++ b/resources/model/app/view/IPSAppDECalendarView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView2"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEChartExplorerView.json b/resources/model/app/view/IPSAppDEChartExplorerView.json new file mode 100644 index 0000000..f26b6f3 --- /dev/null +++ b/resources/model/app/view/IPSAppDEChartExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDESideBarExplorerView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEChartView.json b/resources/model/app/view/IPSAppDEChartView.json new file mode 100644 index 0000000..e95f61c --- /dev/null +++ b/resources/model/app/view/IPSAppDEChartView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView","/app/view/IPSAppDESearchView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDECustomView.json b/resources/model/app/view/IPSAppDECustomView.json new file mode 100644 index 0000000..d4fc727 --- /dev/null +++ b/resources/model/app/view/IPSAppDECustomView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEDashboardView.json b/resources/model/app/view/IPSAppDEDashboardView.json new file mode 100644 index 0000000..4a390c8 --- /dev/null +++ b/resources/model/app/view/IPSAppDEDashboardView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView","/app/view/IPSAppDESearchView","/app/view/IPSAppDESearchView2"],"showDataInfoBar":{"desc":"显示信息栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEDataSetViewMsg.json b/resources/model/app/view/IPSAppDEDataSetViewMsg.json new file mode 100644 index 0000000..2f86175 --- /dev/null +++ b/resources/model/app/view/IPSAppDEDataSetViewMsg.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppViewMsg","/view/IPSDEDataSetViewMsg"],"cacheScope":{"desc":"缓存范围","type":"string","enum":{"GLOBAL":"全局"}},"cacheTag2PSAppDEField":{"desc":"缓存标记2应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"cacheTagPSAppDEField":{"desc":"缓存标记应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"cacheTimeout":{"desc":"缓存超时","type":"number"},"contentPSAppDEField":{"desc":"消息内容应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"msgPosPSAppDEField":{"desc":"显示位置应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"msgTypePSAppDEField":{"desc":"消息类型标记应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"orderValuePSAppDEField":{"desc":"显示次序应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psAppDEDataSet":{"desc":"应用实体数据集合对象","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"removeFlagPSAppDEField":{"desc":"移除标志应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"titleLanResTagPSAppDEField":{"desc":"抬头语言标记应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"titlePSAppDEField":{"desc":"抬头应用实体属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"enableCache":{"desc":"支持缓存","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEDataView.json b/resources/model/app/view/IPSAppDEDataView.json new file mode 100644 index 0000000..7a3d509 --- /dev/null +++ b/resources/model/app/view/IPSAppDEDataView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView2"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEDataViewExplorerView.json b/resources/model/app/view/IPSAppDEDataViewExplorerView.json new file mode 100644 index 0000000..f26b6f3 --- /dev/null +++ b/resources/model/app/view/IPSAppDEDataViewExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDESideBarExplorerView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEEditView.json b/resources/model/app/view/IPSAppDEEditView.json new file mode 100644 index 0000000..c38031d --- /dev/null +++ b/resources/model/app/view/IPSAppDEEditView.json @@ -0,0 +1,6 @@ +{ + "extends": ["/app/view/IPSAppDEView", "/app/view/IPSAppDataRelationView", "/app/view/IPSAppDEXDataView"], + "multiFormMode": { "desc": "内置多表单模式", "type": "number" }, + "hideEditForm": { "desc": "隐藏编辑表单", "type": "boolean" }, + "showDataInfoBar": { "desc": "显示信息栏", "type": "boolean" } +} diff --git a/resources/model/app/view/IPSAppDEExplorerView.json b/resources/model/app/view/IPSAppDEExplorerView.json new file mode 100644 index 0000000..48614f0 --- /dev/null +++ b/resources/model/app/view/IPSAppDEExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppExplorerView","/app/view/IPSAppDEView"],"loadDefault":{"desc":"默认加载数据","type":"boolean"},"showDataInfoBar":{"desc":"显示信息栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEGanttExplorerView.json b/resources/model/app/view/IPSAppDEGanttExplorerView.json new file mode 100644 index 0000000..f26b6f3 --- /dev/null +++ b/resources/model/app/view/IPSAppDEGanttExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDESideBarExplorerView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEGanttView.json b/resources/model/app/view/IPSAppDEGanttView.json new file mode 100644 index 0000000..7a3d509 --- /dev/null +++ b/resources/model/app/view/IPSAppDEGanttView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView2"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEGridExplorerView.json b/resources/model/app/view/IPSAppDEGridExplorerView.json new file mode 100644 index 0000000..f26b6f3 --- /dev/null +++ b/resources/model/app/view/IPSAppDEGridExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDESideBarExplorerView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEGridView.json b/resources/model/app/view/IPSAppDEGridView.json new file mode 100644 index 0000000..560abc9 --- /dev/null +++ b/resources/model/app/view/IPSAppDEGridView.json @@ -0,0 +1,6 @@ +{ + "extends": ["/app/view/IPSAppDEMultiDataView", "/app/view/IPSAppDEWFView"], + "gridRowActiveMode": { "desc": "表格行激活模式", "type": "number", "enum": { "0": "无", "1": "单击", "2": "双击" } }, + "enableRowEdit": { "desc": "支持行编辑", "type": "boolean" }, + "rowEditDefault": { "desc": "视图默认进入行编辑", "type": "boolean" } +} diff --git a/resources/model/app/view/IPSAppDEGridView8.json b/resources/model/app/view/IPSAppDEGridView8.json new file mode 100644 index 0000000..f79cd0c --- /dev/null +++ b/resources/model/app/view/IPSAppDEGridView8.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEGridView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEHtmlView.json b/resources/model/app/view/IPSAppDEHtmlView.json new file mode 100644 index 0000000..05976cc --- /dev/null +++ b/resources/model/app/view/IPSAppDEHtmlView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView"],"htmlUrl":{"desc":"Html路径","type":"string"},"loadDefault":{"desc":"默认加载数据","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEIndexView.json b/resources/model/app/view/IPSAppDEIndexView.json new file mode 100644 index 0000000..f734163 --- /dev/null +++ b/resources/model/app/view/IPSAppDEIndexView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView","/app/view/IPSAppDataRelationView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEKanbanView.json b/resources/model/app/view/IPSAppDEKanbanView.json new file mode 100644 index 0000000..7a3d509 --- /dev/null +++ b/resources/model/app/view/IPSAppDEKanbanView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView2"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEListExplorerView.json b/resources/model/app/view/IPSAppDEListExplorerView.json new file mode 100644 index 0000000..f26b6f3 --- /dev/null +++ b/resources/model/app/view/IPSAppDEListExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDESideBarExplorerView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEListView.json b/resources/model/app/view/IPSAppDEListView.json new file mode 100644 index 0000000..7a3d509 --- /dev/null +++ b/resources/model/app/view/IPSAppDEListView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView2"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMEditView.json b/resources/model/app/view/IPSAppDEMEditView.json new file mode 100644 index 0000000..ec1b8be --- /dev/null +++ b/resources/model/app/view/IPSAppDEMEditView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMapExplorerView.json b/resources/model/app/view/IPSAppDEMapExplorerView.json new file mode 100644 index 0000000..f26b6f3 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMapExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDESideBarExplorerView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMapView.json b/resources/model/app/view/IPSAppDEMapView.json new file mode 100644 index 0000000..7a3d509 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMapView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView2"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobCalendarExplorerView.json b/resources/model/app/view/IPSAppDEMobCalendarExplorerView.json new file mode 100644 index 0000000..f10f665 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobCalendarExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDECalendarExplorerView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobCalendarView.json b/resources/model/app/view/IPSAppDEMobCalendarView.json new file mode 100644 index 0000000..c592741 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobCalendarView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDECalendarView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobChartExplorerView.json b/resources/model/app/view/IPSAppDEMobChartExplorerView.json new file mode 100644 index 0000000..9833e4d --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobChartExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEChartExplorerView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobChartView.json b/resources/model/app/view/IPSAppDEMobChartView.json new file mode 100644 index 0000000..1dd2891 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobChartView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEChartView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobCustomView.json b/resources/model/app/view/IPSAppDEMobCustomView.json new file mode 100644 index 0000000..7e2343e --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobCustomView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDECustomView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobDashboardView.json b/resources/model/app/view/IPSAppDEMobDashboardView.json new file mode 100644 index 0000000..3b5eff6 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobDashboardView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEDashboardView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobDataView.json b/resources/model/app/view/IPSAppDEMobDataView.json new file mode 100644 index 0000000..aac143e --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobDataView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEDataView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobDataViewExplorerView.json b/resources/model/app/view/IPSAppDEMobDataViewExplorerView.json new file mode 100644 index 0000000..7f80cd6 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobDataViewExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEDataViewExplorerView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobEditView.json b/resources/model/app/view/IPSAppDEMobEditView.json new file mode 100644 index 0000000..c789fa6 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobEditView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEEditView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobGanttExplorerView.json b/resources/model/app/view/IPSAppDEMobGanttExplorerView.json new file mode 100644 index 0000000..571db8d --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobGanttExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEGanttExplorerView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobGanttView.json b/resources/model/app/view/IPSAppDEMobGanttView.json new file mode 100644 index 0000000..4282e59 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobGanttView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEGanttView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobHtmlView.json b/resources/model/app/view/IPSAppDEMobHtmlView.json new file mode 100644 index 0000000..7aa1814 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobHtmlView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEHtmlView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobListExplorerView.json b/resources/model/app/view/IPSAppDEMobListExplorerView.json new file mode 100644 index 0000000..9ba40ad --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobListExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEListExplorerView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobListView.json b/resources/model/app/view/IPSAppDEMobListView.json new file mode 100644 index 0000000..fb7bfb9 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobListView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppMobView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobMDView.json b/resources/model/app/view/IPSAppDEMobMDView.json new file mode 100644 index 0000000..aea5d2e --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobMDView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMobView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobMEditView.json b/resources/model/app/view/IPSAppDEMobMEditView.json new file mode 100644 index 0000000..5efba8a --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobMEditView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMEditView","/app/view/IPSAppDEMobMDView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobMapExplorerView.json b/resources/model/app/view/IPSAppDEMobMapExplorerView.json new file mode 100644 index 0000000..71b58db --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobMapExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMapExplorerView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobMapView.json b/resources/model/app/view/IPSAppDEMobMapView.json new file mode 100644 index 0000000..0e7c4ae --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobMapView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMapView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobPanelView.json b/resources/model/app/view/IPSAppDEMobPanelView.json new file mode 100644 index 0000000..d4911cc --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobPanelView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEPanelView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobPickupView.json b/resources/model/app/view/IPSAppDEMobPickupView.json new file mode 100644 index 0000000..55bfe82 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobPickupView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEPickupView","/app/view/IPSAppDEMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobRedirectView.json b/resources/model/app/view/IPSAppDEMobRedirectView.json new file mode 100644 index 0000000..172d948 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobRedirectView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDERedirectView","/app/view/IPSAppDEMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobReportView.json b/resources/model/app/view/IPSAppDEMobReportView.json new file mode 100644 index 0000000..a5f4dce --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobReportView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEReportView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobTabExplorerView.json b/resources/model/app/view/IPSAppDEMobTabExplorerView.json new file mode 100644 index 0000000..147a3e4 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobTabExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDETabExplorerView","/app/view/IPSAppDEMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobTabSearchView.json b/resources/model/app/view/IPSAppDEMobTabSearchView.json new file mode 100644 index 0000000..ff5f20c --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobTabSearchView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDETabSearchView","/app/view/IPSAppDEMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobTreeExplorerView.json b/resources/model/app/view/IPSAppDEMobTreeExplorerView.json new file mode 100644 index 0000000..8d4a01a --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobTreeExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDETreeExplorerView","/app/view/IPSAppDEMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobTreeView.json b/resources/model/app/view/IPSAppDEMobTreeView.json new file mode 100644 index 0000000..f814625 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobTreeView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDETreeView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobView.json b/resources/model/app/view/IPSAppDEMobView.json new file mode 100644 index 0000000..c897e37 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppMobView","/app/view/IPSAppDEView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFActionView.json b/resources/model/app/view/IPSAppDEMobWFActionView.json new file mode 100644 index 0000000..5cea359 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFActionView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFActionView","/app/view/IPSAppDEMobWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFDataRedirectView.json b/resources/model/app/view/IPSAppDEMobWFDataRedirectView.json new file mode 100644 index 0000000..9f02b43 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFDataRedirectView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMobRedirectView","/app/view/IPSAppDEWFDataRedirectView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFDynaActionView.json b/resources/model/app/view/IPSAppDEMobWFDynaActionView.json new file mode 100644 index 0000000..31fe848 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFDynaActionView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMobWFActionView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFDynaEditView.json b/resources/model/app/view/IPSAppDEMobWFDynaEditView.json new file mode 100644 index 0000000..08d5688 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFDynaEditView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMobWFEditView","/app/view/IPSAppDEMobWFDynaActionView","/app/view/IPSAppDEWFDynaEditView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFDynaExpMDView.json b/resources/model/app/view/IPSAppDEMobWFDynaExpMDView.json new file mode 100644 index 0000000..3efeb88 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFDynaExpMDView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMobWFMDView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFDynaStartView.json b/resources/model/app/view/IPSAppDEMobWFDynaStartView.json new file mode 100644 index 0000000..647b894 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFDynaStartView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMobWFEditView","/app/view/IPSAppDEWFDynaStartView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFEditView.json b/resources/model/app/view/IPSAppDEMobWFEditView.json new file mode 100644 index 0000000..14b0b15 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFEditView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFEditView","/app/view/IPSAppDEMobWFActionView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFMDView.json b/resources/model/app/view/IPSAppDEMobWFMDView.json new file mode 100644 index 0000000..6edb91c --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFMDView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMobMDView","/app/view/IPSAppDEMobWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFProxyResultView.json b/resources/model/app/view/IPSAppDEMobWFProxyResultView.json new file mode 100644 index 0000000..dc7429e --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFProxyResultView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFProxyResultView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFProxyStartView.json b/resources/model/app/view/IPSAppDEMobWFProxyStartView.json new file mode 100644 index 0000000..e2a4b59 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFProxyStartView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFProxyStartView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWFView.json b/resources/model/app/view/IPSAppDEMobWFView.json new file mode 100644 index 0000000..7ebdd42 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWFView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMobWizardView.json b/resources/model/app/view/IPSAppDEMobWizardView.json new file mode 100644 index 0000000..83f9888 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMobWizardView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWizardView","/app/view/IPSAppDEMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMultiDataView.json b/resources/model/app/view/IPSAppDEMultiDataView.json new file mode 100644 index 0000000..3a263cf --- /dev/null +++ b/resources/model/app/view/IPSAppDEMultiDataView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEXDataView","/app/view/IPSAppDESearchView","/control/IPSControlMDataContainer","/app/view/IPSAppDESearchView2"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEMultiDataView2.json b/resources/model/app/view/IPSAppDEMultiDataView2.json new file mode 100644 index 0000000..3853984 --- /dev/null +++ b/resources/model/app/view/IPSAppDEMultiDataView2.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView"],"mDCtrlActiveMode":{"desc":"多数据部件激活模式","type":"number","enum":{"0":"无","1":"单击","2":"双击"}}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEPanelView.json b/resources/model/app/view/IPSAppDEPanelView.json new file mode 100644 index 0000000..d4fc727 --- /dev/null +++ b/resources/model/app/view/IPSAppDEPanelView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEPickupView.json b/resources/model/app/view/IPSAppDEPickupView.json new file mode 100644 index 0000000..d4fc727 --- /dev/null +++ b/resources/model/app/view/IPSAppDEPickupView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDERedirectView.json b/resources/model/app/view/IPSAppDERedirectView.json new file mode 100644 index 0000000..ec93d0d --- /dev/null +++ b/resources/model/app/view/IPSAppDERedirectView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppRedirectView","/app/view/IPSAppDEView"],"getDataPSAppDEAction":{"desc":"获取数据应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"typePSAppDEField":{"desc":"应用实体数据类型识别属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"enableCustomGetDataAction":{"desc":"自定义获取数据行为","type":"boolean"},"enableWorkflow":{"desc":"启用工作流","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEReportView.json b/resources/model/app/view/IPSAppDEReportView.json new file mode 100644 index 0000000..e95f61c --- /dev/null +++ b/resources/model/app/view/IPSAppDEReportView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView","/app/view/IPSAppDESearchView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDESearchView.json b/resources/model/app/view/IPSAppDESearchView.json new file mode 100644 index 0000000..1e65c51 --- /dev/null +++ b/resources/model/app/view/IPSAppDESearchView.json @@ -0,0 +1 @@ +{"enableQuickSearch":{"desc":"支持快速搜索","type":"boolean"},"enableSearch":{"desc":"支持搜索","type":"boolean"},"expandSearchForm":{"desc":"默认展开搜索表单","type":"boolean"},"loadDefault":{"desc":"默认加载数据","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDESearchView2.json b/resources/model/app/view/IPSAppDESearchView2.json new file mode 100644 index 0000000..f0ea345 --- /dev/null +++ b/resources/model/app/view/IPSAppDESearchView2.json @@ -0,0 +1 @@ +{"quickGroupPSCodeList":{"desc":"快速分组代码表","type":"object","schema":"/codelist/IPSCodeList"},"enableQuickGroup":{"desc":"支持快速分组搜索","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDESideBarExplorerView.json b/resources/model/app/view/IPSAppDESideBarExplorerView.json new file mode 100644 index 0000000..e6c7752 --- /dev/null +++ b/resources/model/app/view/IPSAppDESideBarExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEExplorerView"],"sideBarLayout":{"desc":"导航边栏位置","type":"string","enum":{"LEFT":"左侧(默认)","TOP":"上方"}}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDETabExplorerView.json b/resources/model/app/view/IPSAppDETabExplorerView.json new file mode 100644 index 0000000..ecbb022 --- /dev/null +++ b/resources/model/app/view/IPSAppDETabExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEExplorerView"],"tabLayout":{"desc":"分页部件布局模式","type":"string"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDETabFormView.json b/resources/model/app/view/IPSAppDETabFormView.json new file mode 100644 index 0000000..aba779a --- /dev/null +++ b/resources/model/app/view/IPSAppDETabFormView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView","/app/view/IPSAppDEWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDETabSearchView.json b/resources/model/app/view/IPSAppDETabSearchView.json new file mode 100644 index 0000000..87f9a4e --- /dev/null +++ b/resources/model/app/view/IPSAppDETabSearchView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDETabExplorerView","/app/view/IPSAppDESearchView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDETreeExplorerView.json b/resources/model/app/view/IPSAppDETreeExplorerView.json new file mode 100644 index 0000000..6b356cc --- /dev/null +++ b/resources/model/app/view/IPSAppDETreeExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEExplorerView","/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDETreeGridExView.json b/resources/model/app/view/IPSAppDETreeGridExView.json new file mode 100644 index 0000000..ec1b8be --- /dev/null +++ b/resources/model/app/view/IPSAppDETreeGridExView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDETreeGridView.json b/resources/model/app/view/IPSAppDETreeGridView.json new file mode 100644 index 0000000..ec1b8be --- /dev/null +++ b/resources/model/app/view/IPSAppDETreeGridView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDETreeView.json b/resources/model/app/view/IPSAppDETreeView.json new file mode 100644 index 0000000..ec1b8be --- /dev/null +++ b/resources/model/app/view/IPSAppDETreeView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEMultiDataView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEView.json b/resources/model/app/view/IPSAppDEView.json new file mode 100644 index 0000000..3e641e1 --- /dev/null +++ b/resources/model/app/view/IPSAppDEView.json @@ -0,0 +1,4 @@ +{ + "extends": ["/app/view/IPSAppView", "/dataentity/IPSDataEntityObject", "/app/view/IPSAppDEViewBase"], + "psAppDERSPaths": { "desc": "应用实体视图关系集合", "type": "array", "schema": "/app/dataentity/IPSAppDERS" } +} diff --git a/resources/model/app/view/IPSAppDEViewBase.json b/resources/model/app/view/IPSAppDEViewBase.json new file mode 100644 index 0000000..3bf378f --- /dev/null +++ b/resources/model/app/view/IPSAppDEViewBase.json @@ -0,0 +1 @@ +{"funcViewMode":{"desc":"功能视图模式","type":"string","enum":{"PICKUPVIEW":"默认单选视图","EDITVIEW":"默认编辑视图","MAINVIEW":"默认主视图","INDEXDEPICKUPVIEW":"默认索引实体选择视图","FORMPICKUPVIEW":"默认多表单选择视图","MPICKUPVIEW":"默认多选视图","MDATAVIEW":"默认多项视图","WFEDITVIEW":"默认流程编辑视图","WFMDATAVIEW":"默认流程多项视图","WFSTARTVIEW":"默认流程启动视图","WFACTIONVIEW":"默认流程操作视图","WFUTILACTIONVIEW":"默认流程功能操作视图","REDIRECTVIEW":"默认数据重定向视图","MOBPICKUPVIEW":"移动端默认单选视图","MOBEDITVIEW":"移动端默认编辑视图","MOBMAINVIEW":"移动端默认主视图","MOBINDEXDEPICKUPVIEW":"移动端默认索引实体选择视图","MOBFORMPICKUPVIEW":"移动端默认多表单选择视图","MOBMPICKUPVIEW":"移动端默认多选视图","MOBMDATAVIEW":"移动端默认多项视图","MOBWFEDITVIEW":"移动端默认流程编辑视图","MOBWFMDATAVIEW":"移动端默认流程多项视图","MOBWFSTARTVIEW":"移动端默认流程启动视图","MOBWFACTIONVIEW":"移动端默认流程操作视图","MOBWFUTILACTIONVIEW":"移动端默认流程功能操作视图","MOBREDIRECTVIEW":"移动端默认数据重定向视图"}},"funcViewParam":{"desc":"功能视图参数","type":"string"},"psAppCounterRef":{"desc":"应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"},"getPSDEViewCodeName":{"desc":"实体视图代码名称","type":"string"},"getPSDEViewId":{"desc":"实体视图标识","type":"string"},"parentPSAppDataEntity":{"desc":"父应用实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"tempMode":{"desc":"临时数据模式","type":"number","enum":{"0":"无临时数据模式","1":"主数据模式","2":"从数据模式"}},"enableWF":{"desc":"支持工作流","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEViewLogic.json b/resources/model/app/view/IPSAppDEViewLogic.json new file mode 100644 index 0000000..e0846f5 --- /dev/null +++ b/resources/model/app/view/IPSAppDEViewLogic.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppViewLogic"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFActionView.json b/resources/model/app/view/IPSAppDEWFActionView.json new file mode 100644 index 0000000..f36771a --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFActionView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFView"],"wFStepValue":{"desc":"绑定流程步骤值","type":"string"},"wFUtilType":{"desc":"工作流辅助功能类型","type":"string","enum":{"SENDBACK":"回退","SUPPLYINFO":"补充信息","ADDSTEPBEFORE":"前加签","ADDSTEPAFTER":"后加签","TAKEADVICE":"征求意见","SENDCOPY":"抄送","REASSIGN":"转办","USERACTION":"用户自定义","USERACTION2":"用户自定义2","USERACTION3":"用户自定义3","USERACTION4":"用户自定义4","USERACTION5":"用户自定义5","USERACTION6":"用户自定义6"}}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFDataRedirectView.json b/resources/model/app/view/IPSAppDEWFDataRedirectView.json new file mode 100644 index 0000000..66ce835 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFDataRedirectView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDERedirectView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFDynaActionView.json b/resources/model/app/view/IPSAppDEWFDynaActionView.json new file mode 100644 index 0000000..1b19577 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFDynaActionView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFActionView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFDynaEditView.json b/resources/model/app/view/IPSAppDEWFDynaEditView.json new file mode 100644 index 0000000..5e40167 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFDynaEditView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFEditView","/app/view/IPSAppDEWFDynaActionView"],"psUIActionGroups":{"desc":"附加界面行为组集合","type":"array","schema":"/view/IPSUIActionGroup"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFDynaExpGridView.json b/resources/model/app/view/IPSAppDEWFDynaExpGridView.json new file mode 100644 index 0000000..5b86188 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFDynaExpGridView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFGridView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFDynaStartView.json b/resources/model/app/view/IPSAppDEWFDynaStartView.json new file mode 100644 index 0000000..ffbb699 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFDynaStartView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFEditView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFEditProxyDataView.json b/resources/model/app/view/IPSAppDEWFEditProxyDataView.json new file mode 100644 index 0000000..4b71f83 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFEditProxyDataView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFEditView.json b/resources/model/app/view/IPSAppDEWFEditView.json new file mode 100644 index 0000000..e2c5af8 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFEditView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEEditView","/app/view/IPSAppDEWFView","/app/view/IPSAppDEWFActionView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFExplorerView.json b/resources/model/app/view/IPSAppDEWFExplorerView.json new file mode 100644 index 0000000..ef9feb6 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEExplorerView","/app/view/IPSAppDEWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFGridView.json b/resources/model/app/view/IPSAppDEWFGridView.json new file mode 100644 index 0000000..62991fe --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFGridView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEGridView","/app/view/IPSAppDEWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFProxyDataRedirectView.json b/resources/model/app/view/IPSAppDEWFProxyDataRedirectView.json new file mode 100644 index 0000000..66ce835 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFProxyDataRedirectView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDERedirectView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFProxyDataView.json b/resources/model/app/view/IPSAppDEWFProxyDataView.json new file mode 100644 index 0000000..4b71f83 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFProxyDataView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFProxyResultView.json b/resources/model/app/view/IPSAppDEWFProxyResultView.json new file mode 100644 index 0000000..4b71f83 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFProxyResultView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFProxyStartView.json b/resources/model/app/view/IPSAppDEWFProxyStartView.json new file mode 100644 index 0000000..4b71f83 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFProxyStartView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEWFView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWFView.json b/resources/model/app/view/IPSAppDEWFView.json new file mode 100644 index 0000000..07ba7c9 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWFView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView"],"psAppWF":{"desc":"应用工作流","type":"object","schema":"/app/wf/IPSAppWF"},"psAppWFVer":{"desc":"应用工作流版本","type":"object","schema":"/app/wf/IPSAppWFVer"},"psWFVersion":{"desc":"工作流版本对象","type":"object","schema":"/wf/IPSWFVersion"},"psWorkflow":{"desc":"工作流对象","type":"object","schema":"/wf/IPSWorkflow"},"wFIAMode":{"desc":"流程交互模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEWizardView.json b/resources/model/app/view/IPSAppDEWizardView.json new file mode 100644 index 0000000..d4fc727 --- /dev/null +++ b/resources/model/app/view/IPSAppDEWizardView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDEXDataView.json b/resources/model/app/view/IPSAppDEXDataView.json new file mode 100644 index 0000000..97bc726 --- /dev/null +++ b/resources/model/app/view/IPSAppDEXDataView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppDEView","/control/IPSControlXDataContainer"],"xDataControlName":{"desc":"数据能力部件名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppDataRelationView.json b/resources/model/app/view/IPSAppDataRelationView.json new file mode 100644 index 0000000..c36d5d2 --- /dev/null +++ b/resources/model/app/view/IPSAppDataRelationView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppErrorView.json b/resources/model/app/view/IPSAppErrorView.json new file mode 100644 index 0000000..2b82c90 --- /dev/null +++ b/resources/model/app/view/IPSAppErrorView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppUtilView"],"errorCode":{"desc":"获取错误代码","type":"string"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppExplorerView.json b/resources/model/app/view/IPSAppExplorerView.json new file mode 100644 index 0000000..e912c33 --- /dev/null +++ b/resources/model/app/view/IPSAppExplorerView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppView"],"iFrameMode":{"desc":"IFrame模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppFuncPickupView.json b/resources/model/app/view/IPSAppFuncPickupView.json new file mode 100644 index 0000000..7a53a60 --- /dev/null +++ b/resources/model/app/view/IPSAppFuncPickupView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppUtilView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppIndexView.json b/resources/model/app/view/IPSAppIndexView.json new file mode 100644 index 0000000..335f25c --- /dev/null +++ b/resources/model/app/view/IPSAppIndexView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppView"],"appIconPath":{"desc":"图标路径","type":"string"},"appIconPath2":{"desc":"图标路径2","type":"string"},"appSwitchMode":{"desc":"应用选择模式","type":"number","enum":{"0":"无","1":"默认"}},"bottomInfo":{"desc":"下方信息","type":"string"},"defPSAppView":{"desc":"默认内容视图","type":"object","schema":"/app/view/IPSAppView"},"headerInfo":{"desc":"头部信息","type":"string"},"mainMenuAlign":{"desc":"应用菜单方向","type":"string","enum":{"LEFT":"左侧","TOP":"上方","CENTER":"中间","TREEEXP":"树导航","TABEXP_TOP":"分页导航(上方分页)","TABEXP_LEFT":"分页导航(左侧分页)","TABEXP_BOTTOM":"分页导航(下方分页)","TABEXP_RIGHT":"分页导航(右侧分页)","NONE":"不显示"}},"portalPSAppCounterRef":{"desc":"门户应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"},"blankMode":{"desc":"空白视图模式","type":"boolean"},"defaultPage":{"desc":"应用起始视图","type":"boolean"},"enableAppSwitch":{"desc":"支持应用切换","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppMobView.json b/resources/model/app/view/IPSAppMobView.json new file mode 100644 index 0000000..e8c7e62 --- /dev/null +++ b/resources/model/app/view/IPSAppMobView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppView"],"enablePullDownRefresh":{"desc":"支持下拉刷新","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppPanelView.json b/resources/model/app/view/IPSAppPanelView.json new file mode 100644 index 0000000..8e48bb8 --- /dev/null +++ b/resources/model/app/view/IPSAppPanelView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppView","/app/view/IPSAppMobView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppPortalView.json b/resources/model/app/view/IPSAppPortalView.json new file mode 100644 index 0000000..f6f9f19 --- /dev/null +++ b/resources/model/app/view/IPSAppPortalView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppView","/app/view/IPSAppMobView"],"defaultPage":{"desc":"应用起始视图","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppRedirectView.json b/resources/model/app/view/IPSAppRedirectView.json new file mode 100644 index 0000000..d43b898 --- /dev/null +++ b/resources/model/app/view/IPSAppRedirectView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppView"],"redirectPSAppViewRefs":{"desc":"重定向视图引用集合","type":"array","schema":"/app/view/IPSAppViewRef"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppUIAction.json b/resources/model/app/view/IPSAppUIAction.json new file mode 100644 index 0000000..e5aef38 --- /dev/null +++ b/resources/model/app/view/IPSAppUIAction.json @@ -0,0 +1 @@ +{"extends":["/view/IPSUIAction","/app/IPSApplicationObject"],"contextJOString":{"desc":"行为附加上下文Json字符串","type":"string"},"counterId":{"desc":"计数项标识","type":"string"},"psAppCounter":{"desc":"应用计数器","type":"object","schema":"/app/control/IPSAppCounter"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppUtilView.json b/resources/model/app/view/IPSAppUtilView.json new file mode 100644 index 0000000..c36d5d2 --- /dev/null +++ b/resources/model/app/view/IPSAppUtilView.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppView"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppView.json b/resources/model/app/view/IPSAppView.json new file mode 100644 index 0000000..3e9e8f6 --- /dev/null +++ b/resources/model/app/view/IPSAppView.json @@ -0,0 +1,255 @@ +{ + "extends": ["/app/view/IPSAppViewBase", "/control/IPSControlContainer"], + "accUserMode": { "desc": "访问用户模式", "type": "number", "enum": { "0": "未指定", "2": "登录用户", "3": "匿名用户及登录用户", "4": "登录用户且拥有指定资源能力" } }, + "accessKey": { "desc": "访问标识", "type": "string" }, + "capPSLanguageRes": { "desc": "标题语言资源", "type": "object", "schema": "/res/IPSLanguageRes" }, + "caption": { "desc": "视图标题", "type": "string" }, + "codeName": { "desc": "代码标识", "type": "string" }, + "height": { "desc": "视图高度", "type": "number" }, + "mainMenuAlign": { + "desc": "应用菜单方向", + "type": "string", + "enum": { + "LEFT": "左侧", + "TOP": "上方", + "CENTER": "中间", + "TREEEXP": "树导航", + "TABEXP_TOP": "分页导航(上方分页)", + "TABEXP_LEFT": "分页导航(左侧分页)", + "TABEXP_BOTTOM": "分页导航(下方分页)", + "TABEXP_RIGHT": "分页导航(右侧分页)", + "NONE": "不显示" + } + }, + "openMode": { + "desc": "默认打开模式", + "type": "string", + "enum": { + "INDEXVIEWTAB": "顶级容器分页", + "POPUP": "非模式弹出", + "POPUPMODAL": "模式弹出", + "POPUPAPP": "独立程序弹出", + "DRAWER_LEFT": "模态左侧抽屉弹出", + "DRAWER_RIGHT": "模态右侧抽屉弹出", + "DRAWER_TOP": "模态上方抽屉弹出", + "DRAWER_BOTTOM": "模态下发抽屉弹出", + "POPOVER": "气泡卡片", + "USER": "用户自定义", + "USER2": "用户自定义2", + "USER3": "用户自定义3", + "USER4": "用户自定义4" + } + }, + "psAppModule": { "desc": "应用模块", "type": "object", "schema": "/app/IPSAppModule" }, + "psAppViewEngines": { "desc": "视图界面引擎集合", "type": "array", "schema": "/app/view/IPSAppViewEngine" }, + "psAppViewLogics": { "desc": "视图逻辑集合", "type": "array", "schema": "/app/view/IPSAppViewLogic" }, + "psAppViewMsgGroup": { "desc": "应用视图消息组", "type": "object", "schema": "/app/view/IPSAppViewMsgGroup" }, + "psAppViewParams": { "desc": "视图参数集合", "type": "array", "schema": "/app/view/IPSAppViewParam" }, + "psAppViewRefs": { "desc": "视图对象引用", "type": "array", "schema": "/app/view/IPSAppViewRef" }, + "psAppViewUIActions": { "desc": "视图界面行为集合", "type": "array", "schema": "/app/view/IPSAppViewUIAction" }, + "psControls": { "desc": "根部件集合", "type": "array", "schema": "/control/IPSControl" }, + "psSysCss": { "desc": "视图界面样式对象", "type": "object", "schema": "/res/IPSSysCss" }, + "psSysImage": { "desc": "视图图标对象", "type": "object", "schema": "/res/IPSSysImage" }, + "psSysPFPlugin": { "desc": "前端应用插件", "type": "object", "schema": "/res/IPSSysPFPlugin" }, + "psViewLayoutPanel": { "desc": "视图布局面板", "type": "object", "schema": "/control/panel/IPSViewLayoutPanel" }, + "refFlag": { "desc": "视图被引用", "type": "boolean" }, + "subCapPSLanguageRes": { "desc": "子标题语言资源", "type": "object", "schema": "/res/IPSLanguageRes" }, + "subCaption": { "desc": "视图子标题", "type": "string" }, + "title": { "desc": "视图抬头", "type": "string" }, + "titlePSLanguageRes": { "desc": "抬头语言资源", "type": "object", "schema": "/res/IPSLanguageRes" }, + "viewStyle": { + "desc": "视图样式", + "type": "string", + "enum": { + "DEFAULT": "默认", + "STYLE2": "样式2", + "STYLE3": "样式3", + "STYLE4": "样式4", + "STYLE5": "样式5", + "STYLE6": "样式6", + "STYLE7": "样式7", + "STYLE8": "样式8", + "STYLE9": "样式9", + "STYLE10": "样式10", + "PREVIEW": "预览样式" + } + }, + "viewType": { + "desc": "视图类型", + "type": "string", + "enum": { + "APPDATAUPLOADVIEW": "应用数据导入视图", + "APPERRORVIEW": "应用错误显示视图", + "APPFILEUPLOADVIEW": "应用文件上传视图", + "APPFUNCPICKUPVIEW": "应用功能选择视图", + "APPINDEXVIEW": "应用首页视图", + "APPLOGINVIEW": "应用登录视图", + "APPLOGOUTVIEW": "应用注销视图", + "APPPANELVIEW": "应用面板视图", + "APPPICUPLOADVIEW": "应用图片上传视图", + "APPPORTALVIEW": "应用看板视图", + "APPREDIRECTVIEW": "应用全局数据重定向视图", + "APPSTARTVIEW": "应用启动视图", + "APPWELCOMEVIEW": "应用欢迎视图", + "APPWFADDSTEPAFTERVIEW": "应用流程后加签操作视图", + "APPWFADDSTEPBEFOREVIEW": "应用流程前加签操作视图", + "APPWFREDIRECTVIEW": "应用全局流程工作重定向视图", + "APPWFSENDBACKVIEW": "应用流程回退操作视图", + "APPWFSTEPACTORVIEW": "应用流程当前处理人视图", + "APPWFSTEPDATAVIEW": "应用流程处理记录视图", + "APPWFSTEPTRACEVIEW": "应用流程跟踪视图", + "APPWFSUPPLYINFOVIEW": "应用流程补充信息操作视图", + "APPWFTAKEADVICEVIEW": "应用流程征求意见操作视图", + "DECALENDAREXPVIEW": "实体日历导航视图", + "DECALENDARVIEW": "实体日历视图", + "DECALENDARVIEW9": "实体日历视图(部件视图)", + "DECHARTEXPVIEW": "实体图表导航视图", + "DECHARTVIEW": "实体图表视图", + "DECHARTVIEW9": "实体图表视图(部件视图)", + "DECUSTOMVIEW": "实体自定义视图", + "DEDATAVIEW": "实体数据视图", + "DEDATAVIEW9": "实体数据视图(部件视图)", + "DEDATAVIEWEXPVIEW": "实体卡片视图导航视图", + "DEEDITVIEW": "实体编辑视图", + "DEEDITVIEW2": "实体编辑视图(左右关系)", + "DEEDITVIEW3": "实体编辑视图(分页关系)", + "DEEDITVIEW4": "实体编辑视图(上下关系)", + "DEEDITVIEW9": "实体编辑视图(部件视图)", + "DEFORMPICKUPDATAVIEW": "实体表单选择数据视图(部件视图)", + "DEGANTTEXPVIEW": "实体甘特图导航视图", + "DEGANTTVIEW": "实体甘特视图", + "DEGANTTVIEW9": "实体甘特视图(部件视图)", + "DEGRIDEXPVIEW": "实体表格导航视图", + "DEGRIDVIEW": "实体表格视图", + "DEGRIDVIEW2": "实体表格视图(左右关系)", + "DEGRIDVIEW4": "实体表格视图(上下关系)", + "DEGRIDVIEW8": "实体关系数据表格视图(嵌入)", + "DEGRIDVIEW9": "实体表格视图(部件视图)", + "DEHTMLVIEW": "实体HTML视图", + "DEINDEXPICKUPDATAVIEW": "实体索引关系选择数据视图(部件视图)", + "DEINDEXVIEW": "实体首页视图", + "DEKANBANVIEW": "实体看板视图", + "DEKANBANVIEW9": "实体看板视图(部件视图)", + "DELISTEXPVIEW": "实体列表导航视图", + "DELISTVIEW": "实体列表视图", + "DELISTVIEW9": "实体列表视图(部件视图)", + "DEMAPEXPVIEW": "实体地图导航视图", + "DEMAPVIEW": "实体地图视图", + "DEMAPVIEW9": "实体地图视图(部件视图)", + "DEMDCUSTOMVIEW": "实体多数据自定义视图", + "DEMEDITVIEW9": "实体多表单编辑视图(部件视图)", + "DEMOBCALENDAREXPVIEW": "实体移动端日历导航视图", + "DEMOBCALENDARVIEW": "实体移动端日历视图", + "DEMOBCALENDARVIEW9": "实体移动端日历视图(部件视图)", + "DEMOBCHARTEXPVIEW": "实体移动端图表导航视图", + "DEMOBCHARTVIEW": "实体移动端图表视图", + "DEMOBCHARTVIEW9": "实体移动端图表视图(部件视图)", + "DEMOBCUSTOMVIEW": "实体移动端自定义视图", + "DEMOBDATAVIEW": "实体移动端卡片视图", + "DEMOBDATAVIEWEXPVIEW": "实体移动端卡片视图导航视图", + "DEMOBEDITVIEW": "实体移动端编辑视图", + "DEMOBEDITVIEW3": "实体移动端编辑视图(分页关系)", + "DEMOBEDITVIEW9": "实体移动端编辑视图(部件视图)", + "DEMOBFORMPICKUPMDVIEW": "实体移动端表单类型选择多数据视图(部件视图)", + "DEMOBGANTTEXPVIEW": "实体移动端甘特图导航视图", + "DEMOBGANTTVIEW": "实体移动端甘特视图", + "DEMOBGANTTVIEW9": "实体移动端甘特视图(部件视图)", + "DEMOBHTMLVIEW": "实体移动端HTML视图", + "DEMOBINDEXPICKUPMDVIEW": "实体移动端索引类型选择多数据视图(部件视图)", + "DEMOBLISTEXPVIEW": "实体移动端列表导航视图", + "DEMOBLISTVIEW": "实体移动端列表视图", + "DEMOBMAPEXPVIEW": "实体移动端地图导航视图", + "DEMOBMAPVIEW": "实体移动端地图视图", + "DEMOBMAPVIEW9": "实体移动端地图视图(部件视图)", + "DEMOBMDVIEW": "实体移动端多数据视图", + "DEMOBMDVIEW9": "实体移动端多数据视图(部件视图)", + "DEMOBMEDITVIEW9": "实体移动端多表单编辑视图(部件视图)", + "DEMOBMPICKUPVIEW": "实体移动端多数据选择视图", + "DEMOBOPTVIEW": "实体移动端选项操作视图", + "DEMOBPANELVIEW": "实体移动端面板视图", + "DEMOBPANELVIEW9": "实体移动端面板视图(部件视图)", + "DEMOBPICKUPLISTVIEW": "实体移动端选择列表视图(部件视图)", + "DEMOBPICKUPMDVIEW": "实体移动端选择多数据视图(部件视图)", + "DEMOBPICKUPTREEVIEW": "实体移动端选择树视图(部件视图)", + "DEMOBPICKUPVIEW": "实体移动端数据选择视图", + "DEMOBPORTALVIEW": "实体移动端数据看板视图", + "DEMOBPORTALVIEW9": "实体移动端数据看板视图(部件视图)", + "DEMOBREDIRECTVIEW": "实体移动端数据重定向视图", + "DEMOBREPORTVIEW": "实体移动端报表视图", + "DEMOBTABEXPVIEW": "实体移动端分页导航视图", + "DEMOBTABEXPVIEW9": "实体移动端分页导航视图(部件视图)", + "DEMOBTABSEARCHVIEW": "实体移动端分页搜索视图", + "DEMOBTABSEARCHVIEW9": "实体移动端分页搜索视图(部件视图)", + "DEMOBTREEEXPVIEW": "实体移动端树导航视图", + "DEMOBTREEEXPVIEW9": "实体移动端树导航视图(部件视图)", + "DEMOBTREEVIEW": "实体移动端树视图", + "DEMOBWFACTIONVIEW": "实体移动端工作流操作视图", + "DEMOBWFDATAREDIRECTVIEW": "移动端实体全局流程数据重定向视图", + "DEMOBWFDYNAACTIONVIEW": "实体移动端工作流动态操作视图", + "DEMOBWFDYNAEDITVIEW": "实体移动端工作流动态编辑视图", + "DEMOBWFDYNAEDITVIEW3": "实体移动端工作流动态编辑视图(分页关系)", + "DEMOBWFDYNAEXPMDVIEW": "实体移动端工作流动态导航多数据视图", + "DEMOBWFDYNASTARTVIEW": "实体移动端工作流动态启动视图", + "DEMOBWFEDITVIEW": "实体移动端工作流编辑视图", + "DEMOBWFEDITVIEW3": "实体移动端工作流编辑视图(分页关系)", + "DEMOBWFMDVIEW": "实体移动端工作流多数据视图", + "DEMOBWFPROXYRESULTVIEW": "实体移动端工作流代理应用结果视图", + "DEMOBWFPROXYSTARTVIEW": "实体移动端工作流代理应用启动视图", + "DEMOBWFSTARTVIEW": "实体移动端工作流启动视图", + "DEMOBWIZARDVIEW": "实体移动端向导视图", + "DEMPICKUPVIEW": "实体数据多项选择视图", + "DEMPICKUPVIEW2": "实体多项数据选择视图(左右关系)", + "DEOPTVIEW": "实体选项操作视图", + "DEPANELVIEW": "实体面板视图", + "DEPANELVIEW9": "实体面板视图(部件视图)", + "DEPICKUPDATAVIEW": "实体选择数据视图(部件视图)", + "DEPICKUPGRIDVIEW": "实体选择表格视图(部件视图)", + "DEPICKUPTREEVIEW": "实体选择树视图(部件视图)", + "DEPICKUPVIEW": "实体数据选择视图", + "DEPICKUPVIEW2": "实体数据选择视图(左右关系)", + "DEPICKUPVIEW3": "实体数据选择视图(分页关系)", + "DEPORTALVIEW": "实体数据看板视图", + "DEPORTALVIEW9": "实体数据看板视图(部件视图)", + "DEREDIRECTVIEW": "实体数据重定向视图", + "DEREPORTVIEW": "实体报表视图", + "DETABEXPVIEW": "实体分页导航视图", + "DETABEXPVIEW9": "实体分页导航视图(部件视图)", + "DETABSEARCHVIEW": "实体分页搜索视图", + "DETABSEARCHVIEW9": "实体分页搜索视图(部件视图)", + "DETREEEXPVIEW": "实体树导航视图", + "DETREEEXPVIEW2": "实体树导航视图(IFrame)", + "DETREEEXPVIEW3": "实体树导航视图(菜单模式)", + "DETREEGRIDEXVIEW": "实体树表格视图(增强)", + "DETREEGRIDEXVIEW9": "实体树表格视图(增强)(部件视图)", + "DETREEGRIDVIEW": "实体树表格视图", + "DETREEGRIDVIEW9": "实体树表格视图(部件视图)", + "DETREEVIEW": "实体树视图", + "DETREEVIEW9": "实体树视图(部件视图)", + "DEWFACTIONVIEW": "实体工作流操作视图", + "DEWFDATAREDIRECTVIEW": "实体全局流程数据重定向视图", + "DEWFDYNAACTIONVIEW": "实体工作流动态操作视图", + "DEWFDYNAEDITVIEW": "实体工作流动态编辑视图", + "DEWFDYNAEDITVIEW3": "实体工作流动态视图(分页关系)", + "DEWFDYNAEXPGRIDVIEW": "实体工作流动态导航表格视图", + "DEWFDYNASTARTVIEW": "实体工作流动态启动视图", + "DEWFEDITPROXYDATAVIEW": "实体工作流编辑代理数据视图", + "DEWFEDITVIEW": "实体工作流编辑视图", + "DEWFEDITVIEW2": "实体工作流编辑视图(左右关系)", + "DEWFEDITVIEW3": "实体工作流视图(分页关系)", + "DEWFEDITVIEW9": "实体工作流视图(嵌入视图)", + "DEWFEXPVIEW": "实体工作流导航视图", + "DEWFGRIDVIEW": "实体工作流表格视图", + "DEWFPROXYDATAVIEW": "实体工作流代理数据视图", + "DEWFPROXYRESULTVIEW": "实体工作流代理应用结果视图", + "DEWFPROXYSTARTVIEW": "实体工作流代理应用启动视图", + "DEWFSTARTVIEW": "实体工作流启动视图", + "DEWIZARDVIEW": "实体向导视图" + } + }, + "width": { "desc": "视图宽度", "type": "number" }, + "enableDP": { "desc": "启用数据权限", "type": "boolean" }, + "enableWF": { "desc": "支持工作流", "type": "boolean" }, + "pickupMode": { "desc": "数据选择视图", "type": "boolean" }, + "redirectView": { "desc": "重定向视图", "type": "boolean" }, + "showCaptionBar": { "desc": "显示标题栏", "type": "boolean" } +} diff --git a/resources/model/app/view/IPSAppViewBase.json b/resources/model/app/view/IPSAppViewBase.json new file mode 100644 index 0000000..665f659 --- /dev/null +++ b/resources/model/app/view/IPSAppViewBase.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"accUserMode":{"desc":"访问用户模式","type":"number","enum":{"0":"未指定","2":"登录用户","3":"匿名用户及登录用户","4":"登录用户且拥有指定资源能力"}},"accessKey":{"desc":"访问标识","type":"string"},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"视图标题","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"fullCodeName":{"desc":"完整代码标识","type":"string"},"height":{"desc":"视图高度","type":"number"},"mainMenuAlign":{"type":"string"},"openMode":{"desc":"视图打开模式","type":"string"},"psAppDataEntity":{"desc":"视图应用实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppModule":{"type":"object","schema":"/app/IPSAppModule"},"psAppViewLogics":{"type":"array","schema":"/app/view/IPSAppViewLogic"},"psAppViewMsgGroup":{"type":"object","schema":"/app/view/IPSAppViewMsgGroup"},"psAppViewNavContexts":{"desc":"视图导航上下文集合","type":"array","schema":"/app/view/IPSAppViewNavContext"},"psAppViewNavParams":{"desc":"视图导航参数集合","type":"array","schema":"/app/view/IPSAppViewNavParam"},"psAppViewParams":{"type":"array","schema":"/app/view/IPSAppViewParam"},"psAppViewRefs":{"type":"array","schema":"/app/view/IPSAppViewRef"},"psControls":{"type":"array","schema":"/control/IPSControl"},"psSysCss":{"desc":"视图界面样式对象","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"视图图标对象","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"前端应用插件","type":"object","schema":"/res/IPSSysPFPlugin"},"refFlag":{"desc":"视图被引用","type":"boolean"},"refPSAppView":{"desc":"实际引用视图","type":"object","schema":"/app/view/IPSAppView"},"subCapPSLanguageRes":{"desc":"子标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"subCaption":{"desc":"视图子标题","type":"string"},"title":{"desc":"视图抬头","type":"string"},"titlePSLanguageRes":{"desc":"抬头语言资源","type":"object","schema":"/res/IPSLanguageRes"},"viewType":{"desc":"视图类型","type":"string","enum":{}},"width":{"desc":"视图宽度","type":"number"},"enableDP":{"desc":"启用数据权限","type":"boolean"},"enableWF":{"desc":"支持工作流","type":"boolean"},"pickupMode":{"desc":"数据选择视图","type":"boolean"},"redirectView":{"desc":"重定向视图","type":"boolean"},"showCaptionBar":{"desc":"显示标题栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewEngine.json b/resources/model/app/view/IPSAppViewEngine.json new file mode 100644 index 0000000..20bc0a4 --- /dev/null +++ b/resources/model/app/view/IPSAppViewEngine.json @@ -0,0 +1 @@ +{"extends":["/view/IPSUIEngine"],"engineCat":{"desc":"引擎分类","type":"string"},"engineType":{"desc":"引擎类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewEngineParam.json b/resources/model/app/view/IPSAppViewEngineParam.json new file mode 100644 index 0000000..835533d --- /dev/null +++ b/resources/model/app/view/IPSAppViewEngineParam.json @@ -0,0 +1 @@ +{"extends":["/view/IPSUIEngineParam","/IPSModelObject"],"appViewLogicName":{"desc":"视图逻辑名称","type":"string"},"ctrlName":{"desc":"部件名称","type":"string"},"paramType":{"desc":"参数类型","type":"string"},"value":{"desc":"直接值","type":"object"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewLogic.json b/resources/model/app/view/IPSAppViewLogic.json new file mode 100644 index 0000000..33e5fdf --- /dev/null +++ b/resources/model/app/view/IPSAppViewLogic.json @@ -0,0 +1 @@ +{"eventArg":{"desc":"事件参数","type":"string"},"eventArg2":{"desc":"事件参数2","type":"string"},"eventNames":{"desc":"事件名称","type":"string"},"logicTrigger":{"desc":"逻辑触发","type":"string","enum":{"TIMER":"定时器触发","VIEWEVENT":"视图事件触发","CTRLEVENT":"部件事件触发","CUSTOM":"只挂接(外部调用)"}},"logicType":{"desc":"触发逻辑类型","type":"string"},"owner":{"desc":"部件容器","type":"object"},"psAppDEUILogic":{"desc":"应用实体界面逻辑对象","type":"object","schema":"/app/dataentity/IPSAppDEUILogic"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppUILogic":{"desc":"应用预置界面逻辑","type":"object","schema":"/app/logic/IPSAppUILogic"},"psAppViewEngine":{"desc":"视图界面引擎","type":"object","schema":"/app/view/IPSAppViewEngine"},"psAppViewLogic":{"desc":"调用视图逻辑","type":"object","schema":"/app/view/IPSAppViewLogic"},"psAppViewUIAction":{"desc":"视图界面行为","type":"object","schema":"/app/view/IPSAppViewUIAction"},"getPSViewCtrlName":{"desc":"部件名称","type":"string"},"scriptCode":{"desc":"脚本代码","type":"string"},"timer":{"desc":"定时间隔(ms)","type":"number"},"builtinLogic":{"desc":"内建逻辑","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewMsg.json b/resources/model/app/view/IPSAppViewMsg.json new file mode 100644 index 0000000..07494c8 --- /dev/null +++ b/resources/model/app/view/IPSAppViewMsg.json @@ -0,0 +1 @@ +{"extends":["/view/IPSViewMsg","/app/IPSApplicationObject"],"codeName":{"desc":"代码标识","type":"string"},"dynamicMode":{"desc":"动态模式","type":"number","enum":{"1":"是","0":"否"}},"message":{"desc":"显示消息","type":"string"},"messageType":{"desc":"消息类型","type":"string","enum":{"INFO":"常规信息","WARN":"警告信息","ERROR":"错误信息","CUSTOM":"自定义信息"}},"psAppMsgTempl":{"desc":"应用消息模板","type":"object","schema":"/app/msg/IPSAppMsgTempl"},"position":{"desc":"显示位置","type":"string","enum":{"TOP":"视图上方","BOTTOM":"视图下方","BODY":"视图内容区","POPUP":"弹出","CUSTOM":"自定义"}},"removeMode":{"desc":"消息删除模式","type":"number","enum":{"0":"无关闭","1":"默认关闭","2":"本次关闭"}},"title":{"desc":"抬头","type":"string"},"titleLanResTag":{"desc":"抬头语言资源标记","type":"string"},"titlePSLanguageRes":{"desc":"抬头语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"enableRemove":{"desc":"支持关闭","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewMsgGroup.json b/resources/model/app/view/IPSAppViewMsgGroup.json new file mode 100644 index 0000000..cadffd6 --- /dev/null +++ b/resources/model/app/view/IPSAppViewMsgGroup.json @@ -0,0 +1 @@ +{"extends":["/view/IPSViewMsgGroup","/app/IPSApplicationObject"],"bodyStyle":{"desc":"内部消息区样式","type":"string","enum":{"LIST":"列表显示","MARQUEE":"横向滚动显示","MARQUEE2":"纵向滚动显示","USER":"用户自定义","USER2":"用户自定义2"}},"bottomStyle":{"desc":"尾部消息区样式","type":"string","enum":{"LIST":"列表显示","MARQUEE":"横向滚动显示","MARQUEE2":"纵向滚动显示","USER":"用户自定义","USER2":"用户自定义2"}},"codeName":{"desc":"代码标识","type":"string"},"psAppViewMsgGroupDetails":{"desc":"消息组成员集合","type":"array","schema":"/app/view/IPSAppViewMsgGroupDetail"},"topStyle":{"desc":"头部消息区样式","type":"string","enum":{"LIST":"列表显示","MARQUEE":"横向滚动显示","MARQUEE2":"纵向滚动显示","USER":"用户自定义","USER2":"用户自定义2"}}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewMsgGroupDetail.json b/resources/model/app/view/IPSAppViewMsgGroupDetail.json new file mode 100644 index 0000000..aa3d9f5 --- /dev/null +++ b/resources/model/app/view/IPSAppViewMsgGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/view/IPSViewMsgGroupDetail"],"psAppViewMsg":{"desc":"应用视图消息","type":"object","schema":"/app/view/IPSAppViewMsg"},"position":{"desc":"显示位置","type":"string","enum":{"TOP":"视图上方","BOTTOM":"视图下方","BODY":"视图内容区","POPUP":"弹出","CUSTOM":"自定义"}}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewNavContext.json b/resources/model/app/view/IPSAppViewNavContext.json new file mode 100644 index 0000000..b28b14e --- /dev/null +++ b/resources/model/app/view/IPSAppViewNavContext.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppViewParam","/control/IPSNavigateContext"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewNavParam.json b/resources/model/app/view/IPSAppViewNavParam.json new file mode 100644 index 0000000..f05628d --- /dev/null +++ b/resources/model/app/view/IPSAppViewNavParam.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppViewParam","/control/IPSNavigateParam"],"rawValue":{"desc":"直接值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewParam.json b/resources/model/app/view/IPSAppViewParam.json new file mode 100644 index 0000000..94eb6bc --- /dev/null +++ b/resources/model/app/view/IPSAppViewParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"desc":{"desc":"说明","type":"string"},"key":{"desc":"参数","type":"string"},"value":{"desc":"值","type":"string"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewRef.json b/resources/model/app/view/IPSAppViewRef.json new file mode 100644 index 0000000..2ddcdb8 --- /dev/null +++ b/resources/model/app/view/IPSAppViewRef.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSNavigateParamContainer"],"height":{"desc":"引用视图高度","type":"number"},"openMode":{"desc":"打开模式","type":"string"},"owner":{"desc":"引用者","type":"object"},"parentDataJO":{"desc":"视图父数据对象","type":"object"},"realOpenMode":{"desc":"引用视图打开模式","type":"string"},"realTitle":{"desc":"引用视图标题","type":"string"},"realTitlePSLanguageRes":{"desc":"引用视图标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"refPSAppView":{"desc":"引用视图","type":"object","schema":"/app/view/IPSAppView"},"viewParamJO":{"desc":"视图参数JO对象","type":"object"},"width":{"desc":"引用视图宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSAppViewUIAction.json b/resources/model/app/view/IPSAppViewUIAction.json new file mode 100644 index 0000000..d2112e2 --- /dev/null +++ b/resources/model/app/view/IPSAppViewUIAction.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psAppCounterRef":{"desc":"应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"},"psUIAction":{"desc":"界面行为对象","type":"object","schema":"/view/IPSUIAction"},"uIActionParamJO":{"desc":"界面行为参数","type":"object"},"uIActionTarget":{"desc":"界面行为操作目标","type":"string","enum":{"SINGLEDATA":"单项数据","SINGLEKEY":"单项数据(主键)","MULTIDATA":"多项数据","MULTIKEY":"多项数据(主键)","NONE":"无数据"}},"xDataControlName":{"desc":"界面行为数据部件名称","type":"string"},"saveTargetFirst":{"desc":"先保存目标数据","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSDEUIActionItem.json b/resources/model/app/view/IPSDEUIActionItem.json new file mode 100644 index 0000000..573eab6 --- /dev/null +++ b/resources/model/app/view/IPSDEUIActionItem.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSUIActionItem"]} \ No newline at end of file diff --git a/resources/model/app/view/IPSUIActionItem.json b/resources/model/app/view/IPSUIActionItem.json new file mode 100644 index 0000000..7b03da2 --- /dev/null +++ b/resources/model/app/view/IPSUIActionItem.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSAppViewUIAction"],"psAppViewUIAction":{"desc":"应用视图界面行为","type":"object","schema":"/app/view/IPSAppViewUIAction"}} \ No newline at end of file diff --git a/resources/model/app/view/IPSWFUIActionItem.json b/resources/model/app/view/IPSWFUIActionItem.json new file mode 100644 index 0000000..573eab6 --- /dev/null +++ b/resources/model/app/view/IPSWFUIActionItem.json @@ -0,0 +1 @@ +{"extends":["/app/view/IPSUIActionItem"]} \ No newline at end of file diff --git a/resources/model/app/wf/IPSAppWF.json b/resources/model/app/wf/IPSAppWF.json new file mode 100644 index 0000000..b83a816 --- /dev/null +++ b/resources/model/app/wf/IPSAppWF.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"allPSAppWFUIActions":{"desc":"工作流界面行为集合","type":"array","schema":"/app/wf/IPSAppWFUIAction"},"codeName":{"desc":"代码标识","type":"string"},"psAppWFVers":{"desc":"应用工作流版本集合","type":"array","schema":"/app/wf/IPSAppWFVer"},"psWorkflow":{"desc":"工作流","type":"object","schema":"/wf/IPSWorkflow"},"hasPSAppWFVer":{"desc":"有工作流版本","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/app/wf/IPSAppWFUIAction.json b/resources/model/app/wf/IPSAppWFUIAction.json new file mode 100644 index 0000000..72b680c --- /dev/null +++ b/resources/model/app/wf/IPSAppWFUIAction.json @@ -0,0 +1 @@ +{"extends":["/wf/uiaction/IPSWFUIAction","/app/view/IPSAppUIAction"],"psAppDEMethod":{"desc":"应用实体方法","type":"object","schema":"/app/dataentity/IPSAppDEMethod"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppWF":{"desc":"应用工作流","type":"object","schema":"/app/wf/IPSAppWF"},"psAppWFVer":{"desc":"应用工作流版本","type":"object","schema":"/app/wf/IPSAppWFVer"}} \ No newline at end of file diff --git a/resources/model/app/wf/IPSAppWFUIActionGroup.json b/resources/model/app/wf/IPSAppWFUIActionGroup.json new file mode 100644 index 0000000..67be6ce --- /dev/null +++ b/resources/model/app/wf/IPSAppWFUIActionGroup.json @@ -0,0 +1 @@ +{"extends":["/wf/uiaction/IPSWFUIActionGroup"]} \ No newline at end of file diff --git a/resources/model/app/wf/IPSAppWFUIActionGroupDetail.json b/resources/model/app/wf/IPSAppWFUIActionGroupDetail.json new file mode 100644 index 0000000..ba35ac6 --- /dev/null +++ b/resources/model/app/wf/IPSAppWFUIActionGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/wf/uiaction/IPSWFUIActionGroupDetail"]} \ No newline at end of file diff --git a/resources/model/app/wf/IPSAppWFUtilUIAction.json b/resources/model/app/wf/IPSAppWFUtilUIAction.json new file mode 100644 index 0000000..352e4f2 --- /dev/null +++ b/resources/model/app/wf/IPSAppWFUtilUIAction.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFUtilUIAction","/app/IPSApplicationObject"],"psAppUIAction":{"desc":"应用界面行为","type":"object","schema":"/app/view/IPSAppUIAction"}} \ No newline at end of file diff --git a/resources/model/app/wf/IPSAppWFVer.json b/resources/model/app/wf/IPSAppWFVer.json new file mode 100644 index 0000000..402c3e9 --- /dev/null +++ b/resources/model/app/wf/IPSAppWFVer.json @@ -0,0 +1 @@ +{"extends":["/app/IPSApplicationObject"],"allPSAppWFUIActions":{"desc":"工作流界面行为集合","type":"array","schema":"/app/wf/IPSAppWFUIAction"},"codeName":{"desc":"代码标识","type":"string"},"psAppWF":{"desc":"应用工作流","type":"object","schema":"/app/wf/IPSAppWF"},"psWFVersion":{"desc":"工作流版本","type":"object","schema":"/wf/IPSWFVersion"}} \ No newline at end of file diff --git a/resources/model/appEntities.json b/resources/model/appEntities.json index 0be44cd..fb5a005 100644 --- a/resources/model/appEntities.json +++ b/resources/model/appEntities.json @@ -1,3 +1,3 @@ { - "extends": "./appEntity.json" + "extends": ["/appEntity"] } diff --git a/resources/model/appEntity.json b/resources/model/appEntity.json index 7222631..5ce493b 100644 --- a/resources/model/appEntity.json +++ b/resources/model/appEntity.json @@ -1,5 +1,5 @@ { - "name": "应用实体", - "codeName": "appEntity", - "pages": "./pages.json" + "extends": ["/app/dataentity/IPSAppDataEntity"], + "pages": { "desc": "应用实体视图", "type": "object", "schema": "/pages" }, + "ctrls": { "desc": "视图部件", "type": "object", "schema": "/ctrls" } } diff --git a/resources/model/apps.json b/resources/model/apps.json index 91e6351..554b29f 100644 --- a/resources/model/apps.json +++ b/resources/model/apps.json @@ -1,3 +1,3 @@ { - "extends": "./app.json" + "extends": ["/app"] } diff --git a/resources/model/backservice/IPSSysBackService.json b/resources/model/backservice/IPSSysBackService.json new file mode 100644 index 0000000..02a0fee --- /dev/null +++ b/resources/model/backservice/IPSSysBackService.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"containerTag":{"desc":"容器标记","type":"string"},"psDEAction":{"desc":"调用实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"psDEDataSet":{"desc":"目标数据集","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"predefinedType":{"desc":"预定义类型","type":"string","enum":{"DENOTIFY":"实体通知","SYSDATASYNCAGENT":"系统数据同步代理(输入)","WFCALLBACK":"工作流回调","SYSADMIN":"系统管理","USER":"自定义"}},"serviceContainer":{"desc":"服务容器","type":"string","enum":{"SC01":"服务容器01","SC02":"服务容器02","SC03":"服务容器03","SC04":"服务容器04","USER":"自定义容器"}},"serviceHandler":{"desc":"服务处理对象","type":"string"},"serviceOrder":{"desc":"服务次序","type":"number"},"serviceParams":{"desc":"服务参数","type":"string"},"servicePolicy":{"desc":"服务策略","type":"string"},"servicePolicy2":{"desc":"服务策略2","type":"string"},"serviceTag":{"desc":"服务标记","type":"string"},"serviceTag2":{"desc":"服务标记2","type":"string"},"startMode":{"desc":"启动模式","type":"string","enum":{"AUTO":"自动","MANUAL":"手动"}},"taskType":{"desc":"任务类型","type":"string","enum":{"PREDEFINED":"预定义","DEACTION":"触发实体行为","USER":"自定义"}},"timerPolicy":{"desc":"定时触发策略","type":"string"},"timerMode":{"desc":"定时触发模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBIAggColumn.json b/resources/model/bi/IPSBIAggColumn.json new file mode 100644 index 0000000..a059f55 --- /dev/null +++ b/resources/model/bi/IPSBIAggColumn.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIAggTableObject","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"columnTag":{"desc":"聚合数据列标记","type":"string"},"columnTag2":{"desc":"聚合数据列标记2","type":"string"},"columnType":{"desc":"聚合数据类型","type":"string","enum":{"MEASURE":"指标","DIMENSION":"维度","USER":"用户自定义"}},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBIAggTable.json b/resources/model/bi/IPSBIAggTable.json new file mode 100644 index 0000000..2d8ef9d --- /dev/null +++ b/resources/model/bi/IPSBIAggTable.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"psDEDataQuery":{"desc":"数据查询","type":"object","schema":"/dataentity/ds/IPSDEDataQuery"},"psDataEntity":{"desc":"实体","type":"object","schema":"/dataentity/IPSDataEntity"},"tableTag":{"desc":"聚合数据表标记","type":"string"},"tableTag2":{"desc":"聚合数据表标记2","type":"string"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBIAggTableObject.json b/resources/model/bi/IPSBIAggTableObject.json new file mode 100644 index 0000000..72144c6 --- /dev/null +++ b/resources/model/bi/IPSBIAggTableObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBICube.json b/resources/model/bi/IPSBICube.json new file mode 100644 index 0000000..ddf80ca --- /dev/null +++ b/resources/model/bi/IPSBICube.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSSysBISchemeObject"],"codeName":{"desc":"代码标识","type":"string"},"cubeTag":{"desc":"立方体标记","type":"string"},"cubeTag2":{"desc":"立方体标记2","type":"string"},"keyPSDEField":{"desc":"键值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"psDataEntity":{"desc":"实体","type":"object","schema":"/dataentity/IPSDataEntity"},"typePSDEField":{"desc":"类型存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBICubeDimension.json b/resources/model/bi/IPSBICubeDimension.json new file mode 100644 index 0000000..2e56948 --- /dev/null +++ b/resources/model/bi/IPSBICubeDimension.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeObject"],"codeName":{"desc":"代码标识","type":"string"},"dimensionTag":{"desc":"维度标记","type":"string"},"dimensionTag2":{"desc":"维度标记2","type":"string"},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBICubeDimensionObject.json b/resources/model/bi/IPSBICubeDimensionObject.json new file mode 100644 index 0000000..e135d88 --- /dev/null +++ b/resources/model/bi/IPSBICubeDimensionObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBICubeLevel.json b/resources/model/bi/IPSBICubeLevel.json new file mode 100644 index 0000000..e8b2957 --- /dev/null +++ b/resources/model/bi/IPSBICubeLevel.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeDimensionObject"],"levelTag":{"desc":"层级标记","type":"string"},"levelTag2":{"desc":"层级标记2","type":"string"},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBICubeMeasure.json b/resources/model/bi/IPSBICubeMeasure.json new file mode 100644 index 0000000..5d2ca7a --- /dev/null +++ b/resources/model/bi/IPSBICubeMeasure.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeObject"],"codeName":{"desc":"代码标识","type":"string"},"measureFormula":{"desc":"指标公式","type":"string"},"measureTag":{"desc":"指标标记","type":"string"},"measureTag2":{"desc":"指标标记2","type":"string"},"measureType":{"desc":"指标类型","type":"string","enum":{"COMMON":"常规","CALCULATED":"动态计算"}},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"valueFormat":{"desc":"值格式化","type":"string"},"hiddenItem":{"desc":"隐藏指标项","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBICubeObject.json b/resources/model/bi/IPSBICubeObject.json new file mode 100644 index 0000000..72144c6 --- /dev/null +++ b/resources/model/bi/IPSBICubeObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBIDimension.json b/resources/model/bi/IPSBIDimension.json new file mode 100644 index 0000000..ae3786e --- /dev/null +++ b/resources/model/bi/IPSBIDimension.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSSysBISchemeObject"],"codeName":{"desc":"代码标识","type":"string"},"dimensionTag":{"desc":"维度标记","type":"string"},"dimensionTag2":{"desc":"维度标记2","type":"string"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBIDimensionObject.json b/resources/model/bi/IPSBIDimensionObject.json new file mode 100644 index 0000000..72144c6 --- /dev/null +++ b/resources/model/bi/IPSBIDimensionObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBIHierarchy.json b/resources/model/bi/IPSBIHierarchy.json new file mode 100644 index 0000000..228c310 --- /dev/null +++ b/resources/model/bi/IPSBIHierarchy.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIDimensionObject"],"hierarchyTag":{"desc":"维度架构标记","type":"string"},"hierarchyTag2":{"desc":"维度架构标记2","type":"string"},"hierarchyType":{"desc":"维度架构类型","type":"string","enum":{"DE":"实体对象"}},"psDataEntity":{"desc":"实体","type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBIHierarchyObject.json b/resources/model/bi/IPSBIHierarchyObject.json new file mode 100644 index 0000000..e19bc68 --- /dev/null +++ b/resources/model/bi/IPSBIHierarchyObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIDimensionObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBILevel.json b/resources/model/bi/IPSBILevel.json new file mode 100644 index 0000000..aa5eb9f --- /dev/null +++ b/resources/model/bi/IPSBILevel.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"levelTag":{"desc":"层级标记","type":"string"},"levelTag2":{"desc":"层级标记2","type":"string"},"levelType":{"desc":"层级类型","type":"string","enum":{"COMMON":"常规","TIME_YEARS":"时间(年)","TIME_HALFYEARS":"时间(半年)","TIME_QUARTERS":"时间(季度)","TIME_MONTHS":"时间(月份)","TIME_WEEKS":"时间(周)","TIME_DAYS":"时间(天)","TIME_HOURS":"时间(小时)","TIME_MINUTES":"时间(分钟)"}},"textPSDEField":{"desc":"显示文本属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"valuePSDEField":{"desc":"值属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBIReport.json b/resources/model/bi/IPSBIReport.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/bi/IPSBIReport.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBIReportDimension.json b/resources/model/bi/IPSBIReportDimension.json new file mode 100644 index 0000000..77d4e22 --- /dev/null +++ b/resources/model/bi/IPSBIReportDimension.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIReportItem"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBIReportItem.json b/resources/model/bi/IPSBIReportItem.json new file mode 100644 index 0000000..60908d0 --- /dev/null +++ b/resources/model/bi/IPSBIReportItem.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIReportObject","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"itemTag":{"desc":"报表项标记","type":"string"},"itemTag2":{"desc":"报表项标记2","type":"string"},"itemType":{"desc":"报表项类型","type":"string","enum":{"MEASURE":"指标","DIMENSION":"维度","USER":"用户自定义"}}} \ No newline at end of file diff --git a/resources/model/bi/IPSBIReportMeasure.json b/resources/model/bi/IPSBIReportMeasure.json new file mode 100644 index 0000000..77d4e22 --- /dev/null +++ b/resources/model/bi/IPSBIReportMeasure.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIReportItem"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBIReportObject.json b/resources/model/bi/IPSBIReportObject.json new file mode 100644 index 0000000..72144c6 --- /dev/null +++ b/resources/model/bi/IPSBIReportObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSBIScheme.json b/resources/model/bi/IPSBIScheme.json new file mode 100644 index 0000000..fcd8815 --- /dev/null +++ b/resources/model/bi/IPSBIScheme.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"bIEngineType":{"desc":"搜索引擎类型","type":"string","enum":{"KYLIN":"Apache Kylin","OLAP":"OLAP","DB":"DB","USER":"用户自定义","USER2":"用户自定义2"}},"codeName":{"desc":"代码标识","type":"string"},"schemeTag":{"desc":"体系标记","type":"string"},"schemeTag2":{"desc":"体系标记2","type":"string"}} \ No newline at end of file diff --git a/resources/model/bi/IPSBISchemeObject.json b/resources/model/bi/IPSBISchemeObject.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/bi/IPSBISchemeObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIAggColumn.json b/resources/model/bi/IPSSysBIAggColumn.json new file mode 100644 index 0000000..36e5dee --- /dev/null +++ b/resources/model/bi/IPSSysBIAggColumn.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIAggColumn","/bi/IPSSysBIAggTableObject"],"psSysBICubeDimension":{"desc":"立方体维度","type":"object","schema":"/bi/IPSSysBICubeDimension"},"psSysBICubeMeasure":{"desc":"立方体指标","type":"object","schema":"/bi/IPSSysBICubeMeasure"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIAggTable.json b/resources/model/bi/IPSSysBIAggTable.json new file mode 100644 index 0000000..c4ae285 --- /dev/null +++ b/resources/model/bi/IPSSysBIAggTable.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIAggTable","/bi/IPSSysBISchemeObject"],"allPSSysBIAggColumns":{"desc":"聚合数据列集合","type":"array","schema":"/bi/IPSSysBIAggColumn"},"psSysBICube":{"desc":"智能报表立方体","type":"object","schema":"/bi/IPSSysBICube"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIAggTableObject.json b/resources/model/bi/IPSSysBIAggTableObject.json new file mode 100644 index 0000000..76e128c --- /dev/null +++ b/resources/model/bi/IPSSysBIAggTableObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIAggTableObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBICube.json b/resources/model/bi/IPSSysBICube.json new file mode 100644 index 0000000..6622649 --- /dev/null +++ b/resources/model/bi/IPSSysBICube.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSSysBISchemeObject","/bi/IPSBICube"],"allPSSysBICubeDimensions":{"desc":"立方体维度集合","type":"array","schema":"/bi/IPSSysBICubeDimension"},"allPSSysBICubeMeasures":{"desc":"立方体指标集合","type":"array","schema":"/bi/IPSSysBICubeMeasure"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBICubeDimension.json b/resources/model/bi/IPSSysBICubeDimension.json new file mode 100644 index 0000000..4acc825 --- /dev/null +++ b/resources/model/bi/IPSSysBICubeDimension.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeDimension","/bi/IPSSysBICubeObject"],"allPSSysBICubeLevels":{"desc":"立方体维度层级集合","type":"array","schema":"/bi/IPSSysBICubeLevel"},"psSysBIDimension":{"desc":"智能报表维度","type":"object","schema":"/bi/IPSSysBIDimension"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBICubeDimensionObject.json b/resources/model/bi/IPSSysBICubeDimensionObject.json new file mode 100644 index 0000000..f4dbca9 --- /dev/null +++ b/resources/model/bi/IPSSysBICubeDimensionObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeDimensionObject","/bi/IPSSysBICubeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBICubeLevel.json b/resources/model/bi/IPSSysBICubeLevel.json new file mode 100644 index 0000000..da8ff67 --- /dev/null +++ b/resources/model/bi/IPSSysBICubeLevel.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeLevel","/bi/IPSSysBICubeDimensionObject"],"psSysBIHierarchy":{"desc":"智能报表维度架构","type":"object","schema":"/bi/IPSSysBIHierarchy"},"psSysBILevel":{"desc":"智能报表维度层级","type":"object","schema":"/bi/IPSSysBILevel"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBICubeMeasure.json b/resources/model/bi/IPSSysBICubeMeasure.json new file mode 100644 index 0000000..f014e33 --- /dev/null +++ b/resources/model/bi/IPSSysBICubeMeasure.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeMeasure"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBICubeObject.json b/resources/model/bi/IPSSysBICubeObject.json new file mode 100644 index 0000000..fdce17b --- /dev/null +++ b/resources/model/bi/IPSSysBICubeObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBICubeObject","/bi/IPSSysBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIDimension.json b/resources/model/bi/IPSSysBIDimension.json new file mode 100644 index 0000000..78fc58b --- /dev/null +++ b/resources/model/bi/IPSSysBIDimension.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSSysBISchemeObject","/bi/IPSBIDimension"],"allPSSysBIHierarchies":{"desc":"维度架构集合","type":"array","schema":"/bi/IPSSysBIHierarchy"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIDimensionObject.json b/resources/model/bi/IPSSysBIDimensionObject.json new file mode 100644 index 0000000..927ff65 --- /dev/null +++ b/resources/model/bi/IPSSysBIDimensionObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIDimensionObject","/bi/IPSSysBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIHierarchy.json b/resources/model/bi/IPSSysBIHierarchy.json new file mode 100644 index 0000000..5211c88 --- /dev/null +++ b/resources/model/bi/IPSSysBIHierarchy.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIHierarchy","/bi/IPSSysBIDimensionObject"],"allPSSysBILevels":{"desc":"维度架构集合","type":"array","schema":"/bi/IPSSysBILevel"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIHierarchyObject.json b/resources/model/bi/IPSSysBIHierarchyObject.json new file mode 100644 index 0000000..8c64277 --- /dev/null +++ b/resources/model/bi/IPSSysBIHierarchyObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIHierarchyObject","/bi/IPSSysBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBILevel.json b/resources/model/bi/IPSSysBILevel.json new file mode 100644 index 0000000..2cbf130 --- /dev/null +++ b/resources/model/bi/IPSSysBILevel.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBILevel"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIReport.json b/resources/model/bi/IPSSysBIReport.json new file mode 100644 index 0000000..fa5576c --- /dev/null +++ b/resources/model/bi/IPSSysBIReport.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIReport","/bi/IPSSysBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIReportDimension.json b/resources/model/bi/IPSSysBIReportDimension.json new file mode 100644 index 0000000..45a93b1 --- /dev/null +++ b/resources/model/bi/IPSSysBIReportDimension.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIReportDimension","/bi/IPSSysBIReportItem","/bi/IPSSysBIReportObject"],"psSysBICubeDimension":{"desc":"立方体维度","type":"object","schema":"/bi/IPSSysBICubeDimension"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIReportItem.json b/resources/model/bi/IPSSysBIReportItem.json new file mode 100644 index 0000000..5044156 --- /dev/null +++ b/resources/model/bi/IPSSysBIReportItem.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIReportItem","/bi/IPSSysBIReportObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIReportMeasure.json b/resources/model/bi/IPSSysBIReportMeasure.json new file mode 100644 index 0000000..55e1cf4 --- /dev/null +++ b/resources/model/bi/IPSSysBIReportMeasure.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIReportMeasure","/bi/IPSSysBIReportItem","/bi/IPSSysBIReportObject"],"psSysBICubeMeasure":{"desc":"立方体指标","type":"object","schema":"/bi/IPSSysBICubeMeasure"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIReportObject.json b/resources/model/bi/IPSSysBIReportObject.json new file mode 100644 index 0000000..dba6c28 --- /dev/null +++ b/resources/model/bi/IPSSysBIReportObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIReportObject"]} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBIScheme.json b/resources/model/bi/IPSSysBIScheme.json new file mode 100644 index 0000000..4aca82b --- /dev/null +++ b/resources/model/bi/IPSSysBIScheme.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBIScheme"],"allPSSysBIAggTables":{"desc":"智能报表聚合数据表集合","type":"array","schema":"/bi/IPSSysBIAggTable"},"allPSSysBICubes":{"desc":"智能报表立方体集合","type":"array","schema":"/bi/IPSSysBICube"},"allPSSysBIDimensions":{"desc":"智能报表维度集合","type":"array","schema":"/bi/IPSSysBIDimension"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"}} \ No newline at end of file diff --git a/resources/model/bi/IPSSysBISchemeObject.json b/resources/model/bi/IPSSysBISchemeObject.json new file mode 100644 index 0000000..72144c6 --- /dev/null +++ b/resources/model/bi/IPSSysBISchemeObject.json @@ -0,0 +1 @@ +{"extends":["/bi/IPSBISchemeObject"]} \ No newline at end of file diff --git a/resources/model/codelist/IPSCodeItem.json b/resources/model/codelist/IPSCodeItem.json new file mode 100644 index 0000000..24a8179 --- /dev/null +++ b/resources/model/codelist/IPSCodeItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"bKColor":{"desc":"背景颜色","type":"string"},"beginValue":{"desc":"开始值","type":"number"},"codeName":{"desc":"代码标识","type":"string"},"color":{"desc":"文本颜色","type":"string"},"data":{"desc":"数据","type":"string"},"endValue":{"desc":"结束值","type":"number"},"iconCls":{"desc":"图标样式","type":"string"},"iconClsX":{"desc":"图标样式(X)","type":"string"},"iconPath":{"desc":"图标路径","type":"string"},"iconPathX":{"desc":"图标路径(X)","type":"string"},"psCodeItems":{"desc":"代码项集合","type":"array","schema":"/codelist/IPSCodeItem"},"psSysCss":{"desc":"显示样式","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"图标对象","type":"object","schema":"/res/IPSSysImage"},"text":{"desc":"文本","type":"string"},"textCls":{"desc":"文本样式","type":"string"},"textPSLanguageRes":{"desc":"文本语言资源","type":"object","schema":"/res/IPSLanguageRes"},"tooltip":{"desc":"提示信息","type":"string"},"tooltipPSLanguageRes":{"desc":"提示信息语言资源","type":"object","schema":"/res/IPSLanguageRes"},"userData":{"desc":"代码项数据","type":"string"},"userData2":{"desc":"代码项数据2","type":"string"},"value":{"desc":"值","type":"string"},"default":{"desc":"默认代码项","type":"boolean"},"disableSelect":{"desc":"禁止选择","type":"boolean"},"includeBeginValue":{"desc":"包含开始值","type":"boolean"},"includeEndValue":{"desc":"包含结束值","type":"boolean"},"showAsEmtpy":{"desc":"显示为空白","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/codelist/IPSCodeList.json b/resources/model/codelist/IPSCodeList.json new file mode 100644 index 0000000..feeb75e --- /dev/null +++ b/resources/model/codelist/IPSCodeList.json @@ -0,0 +1 @@ +{"beginValuePSDEField":{"desc":"开始值属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"cacheTimeout":{"desc":"缓存超时时长","type":"number"},"codeListTag":{"desc":"代码表标记","type":"string"},"codeListType":{"desc":"代码表类型","type":"string","enum":{"STATIC":"静态","DYNAMIC":"动态","PREDEFINED":"预定义"}},"codeName":{"desc":"代码标识","type":"string"},"customCond":{"desc":"自定义条件","type":"string"},"dataPSDEField":{"desc":"数据属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"disablePSDEField":{"desc":"禁用值属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"dynaInstMode":{"desc":"动态实例模式","type":"number","enum":{"0":"不启用","1":"启用","2":"启用副本"}},"dynaInstTag":{"desc":"动态实例标记","type":"string"},"dynaInstTag2":{"desc":"动态实例标记2","type":"string"},"emptyText":{"desc":"空白显示文本","type":"string"},"emptyTextPSLanguageRes":{"desc":"空白显示文本语言资源","type":"object","schema":"/res/IPSLanguageRes"},"endValuePSDEField":{"desc":"结束值属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"iconClsPSDEField":{"desc":"图标样式属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"iconClsXPSDEField":{"desc":"图标样式(x)属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"iconPathXPSDEField":{"desc":"图标路径(x)属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"incBeginValueMode":{"desc":"包含开始值模式","type":"number","enum":{"0":"不包含","1":"包含","2":"首项包含","3":"尾项包含"}},"incEndValueMode":{"desc":"包含结束值模式","type":"number","enum":{"0":"不包含","1":"包含","2":"首项包含","3":"尾项包含"}},"minorSortDir":{"desc":"默认排序方向","type":"string"},"minorSortPSDEField":{"desc":"默认排序属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"orMode":{"desc":"多项代码表或模式","type":"string","enum":{"NUMBERORMODE":"数字或处理","STRINGORMODE":"文本或模式"}},"psCodeItems":{"desc":"代码项集合","type":"array","schema":"/codelist/IPSCodeItem"},"getPSCodeListTemplId":{"desc":"平台代码表标识","type":"string"},"psDEDataSet":{"desc":"实体数据集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"pValuePSDEField":{"desc":"父值属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"predefinedType":{"desc":"预置代码表类型","type":"string","enum":{"OPERATOR":"系统操作者","RUNTIME":"运行时代码表","MODULEINST":"模块副本","DEMAINSTATE":"实体主状态","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"refFlag":{"desc":"是否被引用","type":"boolean"},"systemTag":{"desc":"所属系统标识","type":"string"},"textPSDEField":{"desc":"显示文本属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"textSeparator":{"desc":"文本分隔符","type":"string"},"valuePSDEField":{"desc":"值属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"valueSeparator":{"desc":"值分隔符","type":"string"},"codeItemValueNumber":{"desc":"代码项值为数值","type":"boolean"},"enableCache":{"desc":"启用缓存","type":"boolean"},"moduleInstCodeList":{"desc":"模块实例代码表","type":"boolean"},"subSysAsCloud":{"desc":"子系统以云服务方式提供","type":"boolean"},"subSysCodeList":{"desc":"子系统代码表","type":"boolean"},"thresholdGroup":{"desc":"阈值组","type":"boolean"},"userScope":{"desc":"用户范围","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/codelist/IPSThreshold.json b/resources/model/codelist/IPSThreshold.json new file mode 100644 index 0000000..42bc346 --- /dev/null +++ b/resources/model/codelist/IPSThreshold.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"bKColor":{"desc":"背景颜色","type":"string"},"beginValue":{"desc":"开始值","type":"number"},"codeName":{"desc":"代码标识","type":"string"},"color":{"desc":"文本颜色","type":"string"},"data":{"desc":"数据","type":"string"},"endValue":{"desc":"结束值","type":"number"},"psSysCss":{"desc":"显示样式","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"图标对象","type":"object","schema":"/res/IPSSysImage"},"text":{"desc":"文本","type":"string"},"textPSLanguageRes":{"desc":"文本语言资源","type":"object","schema":"/res/IPSLanguageRes"},"thresholdTag":{"desc":"阈值项标记","type":"string"},"thresholdTag2":{"desc":"阈值项标记2","type":"string"},"tooltip":{"desc":"提示信息","type":"string"},"tooltipPSLanguageRes":{"desc":"提示信息语言资源","type":"object","schema":"/res/IPSLanguageRes"},"includeBeginValue":{"desc":"包含开始值","type":"boolean"},"includeEndValue":{"desc":"包含结束值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/codelist/IPSThresholdGroup.json b/resources/model/codelist/IPSThresholdGroup.json new file mode 100644 index 0000000..26a748b --- /dev/null +++ b/resources/model/codelist/IPSThresholdGroup.json @@ -0,0 +1 @@ +{"beginValuePSDEField":{"desc":"开始值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"codeName":{"desc":"代码标识","type":"string"},"customCond":{"desc":"自定义条件","type":"string"},"dataPSDEField":{"desc":"阈值数据存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"endValuePSDEField":{"desc":"结束值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"iconClsPSDEField":{"desc":"图标样式值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"psDEDataSet":{"desc":"数据集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psThresholds":{"desc":"阈值项集合","type":"array","schema":"/codelist/IPSThreshold"},"textPSDEField":{"desc":"文本值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"thresholdGroupTag":{"desc":"阈值组标记","type":"string"},"thresholdGroupTag2":{"desc":"阈值组标记2","type":"string"},"thresholdGroupType":{"desc":"阈值组类型","type":"string","enum":{"STATIC":"静态","DYNAMIC":"动态"}}} \ No newline at end of file diff --git a/resources/model/control/IPSAjaxControl.json b/resources/model/control/IPSAjaxControl.json new file mode 100644 index 0000000..ed0d84f --- /dev/null +++ b/resources/model/control/IPSAjaxControl.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"],"autoLoad":{"desc":"默认加载","type":"boolean"},"enableItemPrivilege":{"desc":"启用项权限","type":"boolean"},"showBusyIndicator":{"desc":"显示处理提示","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSAjaxControlParam.json b/resources/model/control/IPSAjaxControlParam.json new file mode 100644 index 0000000..d96873f --- /dev/null +++ b/resources/model/control/IPSAjaxControlParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"],"autoLoad":{"desc":"默认加载","type":"boolean"},"showBusyIndicator":{"desc":"显示处理提示","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSAjaxEditor.json b/resources/model/control/IPSAjaxEditor.json new file mode 100644 index 0000000..e30a0b3 --- /dev/null +++ b/resources/model/control/IPSAjaxEditor.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"],"handlerType":{"desc":"处理器类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/IPSControl.json b/resources/model/control/IPSControl.json new file mode 100644 index 0000000..4d10c1d --- /dev/null +++ b/resources/model/control/IPSControl.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"controlStyle":{"desc":"部件样式","type":"string"},"controlType":{"desc":"部件类型","type":"string","enum":{"TOOLBAR":"工具栏","GRID":"数据表格","FORM":"编辑表单","SEARCHFORM":"搜索表单","DRBAR":"数据关系栏","VIEWPANEL":"单视图面板","PICKUPVIEWPANEL":"选择视图面板","DATAVIEW":"数据视图","TREEGRID":"数据树表格","WFEXPBAR":"流程导航栏","TREEVIEW":"树视图","TREEEXPBAR":"树视图导航栏","TABVIEWPANEL":"分页视图面板","DRTAB":"数据关系分页部件","CHART":"数据图表","REPORTPANEL":"报表面板","LIST":"列表","MOBMDCTRL":"移动端多数据视图","MULTIEDITVIEWPANEL":"多编辑视图面板","WIZARDPANEL":"向导面板","UPDATEPANEL":"更新面板","SEARCHBAR":"搜索栏","DASHBOARD":"数据看板","CALENDAR":"日历部件","PANEL":"面板部件","MAP":"地图部件","GANTT":"甘特部件","TREEGRIDEX":"树表格(增强)","KANBAN":"看板","CALENDAREXPBAR":"日历视图导航栏","CHARTEXPBAR":"图表视图导航栏","DATAVIEWEXPBAR":"卡片视图导航栏","GANTTEXPBAR":"甘特视图导航栏","GRIDEXPBAR":"表格视图导航栏","LISTEXPBAR":"列表视图导航栏","MAPEXPBAR":"地图视图导航栏","STATEWIZARDPANEL":"状态向导面板","APPMENU":"应用菜单","TABEXPPANEL":"分页导航面板","CUSTOM":"自定义部件"}},"height":{"desc":"控件高度","type":"number"},"getHookEventNames":{"desc":"监控事件名称集合","type":"array","schema":"string"},"logicName":{"desc":"部件逻辑名称","type":"string"},"psAppDataEntity":{"desc":"应用实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psControlHandler":{"desc":"部件处理","type":"object","schema":"/control/IPSControlHandler"},"psControlLogics":{"desc":"部件逻辑集合","type":"array","schema":"/control/IPSControlLogic"},"psControlParam":{"desc":"部件参数","type":"object","schema":"/control/IPSControlParam"},"psSysCss":{"desc":"界面样式","type":"object","schema":"/res/IPSSysCss"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"user2PSControlAction":{"desc":"用户自定义行为2","type":"object","schema":"/control/IPSControlAction"},"userPSControlAction":{"desc":"用户自定义行为","type":"object","schema":"/control/IPSControlAction"},"width":{"desc":"控件宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/IPSControlAction.json b/resources/model/control/IPSControlAction.json new file mode 100644 index 0000000..8013c06 --- /dev/null +++ b/resources/model/control/IPSControlAction.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"actionDesc":{"desc":"行为描述","type":"string"},"actionName":{"desc":"目标行为名称","type":"string"},"psAppDEMethod":{"desc":"应用实体方法","type":"object","schema":"/app/dataentity/IPSAppDEMethod"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"timeout":{"desc":"处理超时时长(毫秒)","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/IPSControlContainer.json b/resources/model/control/IPSControlContainer.json new file mode 100644 index 0000000..f8ab77e --- /dev/null +++ b/resources/model/control/IPSControlContainer.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psAppCounterRefs":{"desc":"计数器引用集合","type":"array","schema":"/app/control/IPSAppCounterRef"},"psAppViewEngines":{"desc":"视图界面引擎集合","type":"array","schema":"/app/view/IPSAppViewEngine"},"psAppViewLogics":{"desc":"视图逻辑集合","type":"array","schema":"/app/view/IPSAppViewLogic"},"psAppViewRefs":{"desc":"视图对象引用","type":"array","schema":"/app/view/IPSAppViewRef"},"psAppViewUIActions":{"desc":"视图界面行为集合","type":"array","schema":"/app/view/IPSAppViewUIAction"},"psControls":{"desc":"根部件集合","type":"array","schema":"/control/IPSControl"}} \ No newline at end of file diff --git a/resources/model/control/IPSControlHandler.json b/resources/model/control/IPSControlHandler.json new file mode 100644 index 0000000..c3c65c7 --- /dev/null +++ b/resources/model/control/IPSControlHandler.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psHandlerActions":{"desc":"处理行为集合","type":"array","schema":"/control/IPSControlHandlerAction"}} \ No newline at end of file diff --git a/resources/model/control/IPSControlHandlerAction.json b/resources/model/control/IPSControlHandlerAction.json new file mode 100644 index 0000000..b9cda42 --- /dev/null +++ b/resources/model/control/IPSControlHandlerAction.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlAction"],"actionName":{"desc":"目标行为名称","type":"string"},"actionType":{"desc":"行为类型","type":"string"},"customCond":{"desc":"结果集附加条件","type":"string"},"dataAccessAction":{"desc":"数据访问行为","type":"string"},"psDEOPPriv":{"desc":"实体操作标识对象","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"}} \ No newline at end of file diff --git a/resources/model/control/IPSControlLogic.json b/resources/model/control/IPSControlLogic.json new file mode 100644 index 0000000..c116bd3 --- /dev/null +++ b/resources/model/control/IPSControlLogic.json @@ -0,0 +1 @@ +{"eventArg":{"desc":"事件参数","type":"string"},"eventArg2":{"desc":"事件参数2","type":"string"},"eventNames":{"desc":"事件名称","type":"string"},"logicTag":{"desc":"逻辑标记","type":"string"},"logicType":{"desc":"触发逻辑类型","type":"string"},"name":{"desc":"逻辑名称","type":"string"},"psAppDEUILogic":{"desc":"触发应用实体界面逻辑","type":"object","schema":"/app/dataentity/IPSAppDEUILogic"},"psAppDataEntity":{"desc":"触发逻辑所在应用实体","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psAppUILogic":{"desc":"触发应用预置界面逻辑","type":"object","schema":"/app/logic/IPSAppUILogic"},"psAppViewEngine":{"desc":"触发视图引擎","type":"object","schema":"/app/view/IPSAppViewEngine"},"psAppViewLogic":{"desc":"触发视图逻辑","type":"object","schema":"/app/view/IPSAppViewLogic"},"scriptCode":{"desc":"脚本代码","type":"string"},"timer":{"desc":"定时间隔(ms)","type":"number"},"triggerType":{"desc":"触发器类型","type":"string","enum":{"TIMER":"定时器触发","CTRLEVENT":"部件事件触发","CUSTOM":"只挂接(外部调用)"}}} \ No newline at end of file diff --git a/resources/model/control/IPSControlMDObject.json b/resources/model/control/IPSControlMDObject.json new file mode 100644 index 0000000..9ec082c --- /dev/null +++ b/resources/model/control/IPSControlMDObject.json @@ -0,0 +1 @@ +{"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"}} \ No newline at end of file diff --git a/resources/model/control/IPSControlMDataContainer.json b/resources/model/control/IPSControlMDataContainer.json new file mode 100644 index 0000000..2700166 --- /dev/null +++ b/resources/model/control/IPSControlMDataContainer.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlXDataContainer"],"enableExport":{"desc":"支持数据导出","type":"boolean"},"enableFilter":{"desc":"支持数据过滤","type":"boolean"},"enableImport":{"desc":"支持数据导入","type":"boolean"},"enableQuickCreate":{"desc":"启用快速建立","type":"boolean"},"enableQuickSearch":{"desc":"支持快速搜索","type":"boolean"},"enableSearch":{"desc":"支持搜索","type":"boolean"},"enableViewData":{"desc":"支持查看数据","type":"boolean"},"pickupMode":{"desc":"数据选择视图","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSControlNavContext.json b/resources/model/control/IPSControlNavContext.json new file mode 100644 index 0000000..37160cf --- /dev/null +++ b/resources/model/control/IPSControlNavContext.json @@ -0,0 +1 @@ +{"extends":["/control/IPSNavigateContext"]} \ No newline at end of file diff --git a/resources/model/control/IPSControlNavParam.json b/resources/model/control/IPSControlNavParam.json new file mode 100644 index 0000000..9a03db6 --- /dev/null +++ b/resources/model/control/IPSControlNavParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSNavigateParam"]} \ No newline at end of file diff --git a/resources/model/control/IPSControlNavigatable.json b/resources/model/control/IPSControlNavigatable.json new file mode 100644 index 0000000..0d7809b --- /dev/null +++ b/resources/model/control/IPSControlNavigatable.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl","/control/IPSNavigatable"]} \ No newline at end of file diff --git a/resources/model/control/IPSControlObjectNavigatable.json b/resources/model/control/IPSControlObjectNavigatable.json new file mode 100644 index 0000000..f52f495 --- /dev/null +++ b/resources/model/control/IPSControlObjectNavigatable.json @@ -0,0 +1 @@ +{"extends":["/control/IPSNavigatable"]} \ No newline at end of file diff --git a/resources/model/control/IPSControlParam.json b/resources/model/control/IPSControlParam.json new file mode 100644 index 0000000..3e5f046 --- /dev/null +++ b/resources/model/control/IPSControlParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"ctrlParams":{"desc":"部件参数集合","type":"object"},"height":{"desc":"高度","type":"number"},"width":{"desc":"宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/IPSControlXDataContainer.json b/resources/model/control/IPSControlXDataContainer.json new file mode 100644 index 0000000..b134293 --- /dev/null +++ b/resources/model/control/IPSControlXDataContainer.json @@ -0,0 +1 @@ +{"enableEditData":{"desc":"支持编辑数据","type":"boolean"},"enableNewData":{"desc":"支持新建数据","type":"boolean"},"enableRemoveData":{"desc":"支持删除数据","type":"boolean"},"loadDefault":{"desc":"默认加载数据","type":"boolean"},"readOnly":{"desc":"只读模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSEditor.json b/resources/model/control/IPSEditor.json new file mode 100644 index 0000000..4934432 --- /dev/null +++ b/resources/model/control/IPSEditor.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"editorHeight":{"desc":"编辑器高度","type":"number"},"editorParams":{"desc":"编辑器参数集合","type":"object"},"editorStyle":{"desc":"编辑器样式","type":"string"},"editorType":{"desc":"编辑器类型","type":"string"},"editorWidth":{"desc":"编辑器宽度","type":"number"},"psSysCss":{"desc":"界面样式表","type":"object","schema":"/res/IPSSysCss"},"psSysDictCat":{"desc":"辅助输入词条分类","type":"object","schema":"/res/IPSSysDictCat"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"placeHolder":{"desc":"编辑器输入提示","type":"string"},"editable":{"desc":"支持编辑","type":"boolean"},"readOnly":{"desc":"只读状态[READONLY]","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSEditorContainer.json b/resources/model/control/IPSEditorContainer.json new file mode 100644 index 0000000..46ddfb7 --- /dev/null +++ b/resources/model/control/IPSEditorContainer.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psEditor":{"desc":"编辑器对象","type":"object","schema":"/control/IPSEditor"},"valueItemName":{"desc":"值项名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/IPSMDAjaxControl.json b/resources/model/control/IPSMDAjaxControl.json new file mode 100644 index 0000000..5db56c3 --- /dev/null +++ b/resources/model/control/IPSMDAjaxControl.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl","/control/IPSMDControl"],"hasWFDataItems":{"desc":"输出预置流程数据项","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSMDAjaxControlParam.json b/resources/model/control/IPSMDAjaxControlParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/IPSMDAjaxControlParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/IPSMDControl.json b/resources/model/control/IPSMDControl.json new file mode 100644 index 0000000..7c5218a --- /dev/null +++ b/resources/model/control/IPSMDControl.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"],"createPSControlAction":{"desc":"建立数据行为","type":"object","schema":"/control/IPSControlAction"},"fetchPSControlAction":{"desc":"查询数据行为","type":"object","schema":"/control/IPSControlAction"},"getDraftFromPSControlAction":{"desc":"获取草稿数据行为(拷贝)","type":"object","schema":"/control/IPSControlAction"},"getDraftPSControlAction":{"desc":"获取草稿数据行为","type":"object","schema":"/control/IPSControlAction"},"getPSControlAction":{"desc":"获取数据行为","type":"object","schema":"/control/IPSControlAction"},"psControlNavContexts":{"desc":"部件导航上下文集合","type":"array","schema":"/control/IPSControlNavContext"},"psControlNavParams":{"desc":"部件导航参数集合","type":"array","schema":"/control/IPSControlNavParam"},"psDEDataExport":{"desc":"数据导出对象","type":"object","schema":"/dataentity/dataexport/IPSDEDataExport"},"psDEDataImport":{"desc":"数据导入对象","type":"object","schema":"/dataentity/dataimport/IPSDEDataImport"},"removePSControlAction":{"desc":"删除数据行为","type":"object","schema":"/control/IPSControlAction"},"updatePSControlAction":{"desc":"更新数据行为","type":"object","schema":"/control/IPSControlAction"},"readOnly":{"desc":"只读模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSMDControl2.json b/resources/model/control/IPSMDControl2.json new file mode 100644 index 0000000..9088c88 --- /dev/null +++ b/resources/model/control/IPSMDControl2.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDControl"]} \ No newline at end of file diff --git a/resources/model/control/IPSNavigatable.json b/resources/model/control/IPSNavigatable.json new file mode 100644 index 0000000..425dd8d --- /dev/null +++ b/resources/model/control/IPSNavigatable.json @@ -0,0 +1 @@ +{"extends":["/control/IPSNavigateParamContainer"],"navFilter":{"desc":"导航视图过滤项","type":"string"},"navPSAppView":{"desc":"导航视图对象","type":"object","schema":"/app/view/IPSAppView"},"navPSDER":{"desc":"导航关系","type":"object","schema":"/dataentity/der/IPSDERBase"},"navViewParamJO":{"desc":"导航视图参数","type":"object"}} \ No newline at end of file diff --git a/resources/model/control/IPSNavigateContext.json b/resources/model/control/IPSNavigateContext.json new file mode 100644 index 0000000..9a03db6 --- /dev/null +++ b/resources/model/control/IPSNavigateContext.json @@ -0,0 +1 @@ +{"extends":["/control/IPSNavigateParam"]} \ No newline at end of file diff --git a/resources/model/control/IPSNavigateParam.json b/resources/model/control/IPSNavigateParam.json new file mode 100644 index 0000000..be6e242 --- /dev/null +++ b/resources/model/control/IPSNavigateParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"desc":{"desc":"说明","type":"string"},"key":{"desc":"参数","type":"string"},"value":{"desc":"值","type":"string"},"rawValue":{"desc":"直接值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSNavigateParamContainer.json b/resources/model/control/IPSNavigateParamContainer.json new file mode 100644 index 0000000..6c690cc --- /dev/null +++ b/resources/model/control/IPSNavigateParamContainer.json @@ -0,0 +1 @@ +{"psNavigateContexts":{"desc":"导航上下文集合","type":"array","schema":"/control/IPSNavigateContext"},"psNavigateParams":{"desc":"导航参数集合","type":"array","schema":"/control/IPSNavigateParam"}} \ No newline at end of file diff --git a/resources/model/control/IPSRawItem.json b/resources/model/control/IPSRawItem.json new file mode 100644 index 0000000..e3848be --- /dev/null +++ b/resources/model/control/IPSRawItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"contentType":{"desc":"内容类型","type":"string","enum":{"RAW":"直接内容","HTML":"Html内容","IMAGE":"图片","MARKDOWN":"Markdown"}},"htmlContent":{"desc":"Html内容","type":"string"},"psSysImage":{"desc":"图片内容","type":"object","schema":"/res/IPSSysImage"},"rawContent":{"desc":"直接内容","type":"string"},"rawItemHeight":{"desc":"直接项高度","type":"number"},"rawItemWidth":{"desc":"直接项宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/IPSSDAjaxControl.json b/resources/model/control/IPSSDAjaxControl.json new file mode 100644 index 0000000..4dc8639 --- /dev/null +++ b/resources/model/control/IPSSDAjaxControl.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl","/control/IPSSDControl"]} \ No newline at end of file diff --git a/resources/model/control/IPSSDAjaxControlParam.json b/resources/model/control/IPSSDAjaxControlParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/IPSSDAjaxControlParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/IPSSDControl.json b/resources/model/control/IPSSDControl.json new file mode 100644 index 0000000..5ce82c5 --- /dev/null +++ b/resources/model/control/IPSSDControl.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"],"createPSControlAction":{"desc":"建立数据行为","type":"object","schema":"/control/IPSControlAction"},"getDraftFromPSControlAction":{"desc":"获取草稿数据行为(拷贝)","type":"object","schema":"/control/IPSControlAction"},"getDraftPSControlAction":{"desc":"获取草稿数据行为","type":"object","schema":"/control/IPSControlAction"},"getPSControlAction":{"desc":"获取数据行为","type":"object","schema":"/control/IPSControlAction"},"psControlNavContexts":{"desc":"部件导航上下文集合","type":"array","schema":"/control/IPSControlNavContext"},"psControlNavParams":{"desc":"部件导航参数集合","type":"array","schema":"/control/IPSControlNavParam"},"removePSControlAction":{"desc":"删除数据行为","type":"object","schema":"/control/IPSControlAction"},"updatePSControlAction":{"desc":"更新数据行为","type":"object","schema":"/control/IPSControlAction"},"readOnly":{"desc":"只读模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/IPSUserControl.json b/resources/model/control/IPSUserControl.json new file mode 100644 index 0000000..7631ca7 --- /dev/null +++ b/resources/model/control/IPSUserControl.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlContainer","/control/IPSControl"]} \ No newline at end of file diff --git a/resources/model/control/ajax/IPSAjaxControlHandler.json b/resources/model/control/ajax/IPSAjaxControlHandler.json new file mode 100644 index 0000000..08cfee3 --- /dev/null +++ b/resources/model/control/ajax/IPSAjaxControlHandler.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlHandler","/control/ajax/IPSAjaxHandler"],"cacheScope":{"desc":"缓存范围","type":"number","enum":{"0":"无","1":"系统全局","2":"组织机构全局","3":"用户全局","4":"应用全局"}},"cacheTimeout":{"desc":"缓存超时时长(毫秒)","type":"number"},"uniStateField":{"desc":"统一状态监控属性","type":"string"},"uniStateKeyValue":{"desc":"缓存统一状态主键属性","type":"string"},"enableCache":{"desc":"支持缓存","type":"boolean"},"enableDEFieldPrivilege":{"desc":"支持属性级权限","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/ajax/IPSAjaxControlHandlerAction.json b/resources/model/control/ajax/IPSAjaxControlHandlerAction.json new file mode 100644 index 0000000..348cb4d --- /dev/null +++ b/resources/model/control/ajax/IPSAjaxControlHandlerAction.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlHandlerAction","/control/ajax/IPSAjaxHandlerAction"]} \ No newline at end of file diff --git a/resources/model/control/ajax/IPSAjaxHandler.json b/resources/model/control/ajax/IPSAjaxHandler.json new file mode 100644 index 0000000..0423829 --- /dev/null +++ b/resources/model/control/ajax/IPSAjaxHandler.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"handlerObj":{"desc":"处理对象基类","type":"string"},"handlerTag":{"desc":"处理对象标记","type":"string"},"handlerTag2":{"desc":"处理对象标记2","type":"string"},"psHandlerActions":{"desc":"处理行为集合","type":"array","schema":"/control/IPSControlHandlerAction"}} \ No newline at end of file diff --git a/resources/model/control/ajax/IPSAjaxHandlerAction.json b/resources/model/control/ajax/IPSAjaxHandlerAction.json new file mode 100644 index 0000000..ec83ed1 --- /dev/null +++ b/resources/model/control/ajax/IPSAjaxHandlerAction.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSControlHandlerAction","/control/IPSControlAction"],"actionDesc":{"desc":"行为描述","type":"string"},"actionType":{"desc":"行为类型","type":"string"},"timeout":{"desc":"处理超时时长(毫秒)","type":"number"},"valid":{"desc":"启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/ajax/IPSMDAjaxControlHandler.json b/resources/model/control/ajax/IPSMDAjaxControlHandler.json new file mode 100644 index 0000000..6301a3b --- /dev/null +++ b/resources/model/control/ajax/IPSMDAjaxControlHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSAjaxControlHandler"],"fetchTimeout":{"desc":"获取数据超时(毫秒)","type":"number"},"psSysUserDR":{"desc":"用户数据范围对象","type":"object","schema":"/security/IPSSysUserDR"},"psSysUserDR2":{"desc":"用户数据范围对象2","type":"object","schema":"/security/IPSSysUserDR"}} \ No newline at end of file diff --git a/resources/model/control/ajax/IPSSDAjaxControlHandler.json b/resources/model/control/ajax/IPSSDAjaxControlHandler.json new file mode 100644 index 0000000..0fb0144 --- /dev/null +++ b/resources/model/control/ajax/IPSSDAjaxControlHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/button/IPSButton.json b/resources/model/control/button/IPSButton.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/control/button/IPSButton.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/control/button/IPSButtonContainer.json b/resources/model/control/button/IPSButtonContainer.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/control/button/IPSButtonContainer.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSCalendar.json b/resources/model/control/calendar/IPSCalendar.json new file mode 100644 index 0000000..d85318a --- /dev/null +++ b/resources/model/control/calendar/IPSCalendar.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControl","/control/IPSControlContainer","/control/IPSMDControl2"],"calendarStyle":{"desc":"日历样式","type":"string","enum":{"DAY":"天","WEEK":"周","MONTH":"月","TIMELINE":"时间轴","WEEK_TIMELINE":"周(复合时间轴)","MONTH_TIMELINE":"月(复合时间轴)","USER":"用户自定义","USER2":"用户自定义2"}},"emptyText":{"desc":"无值显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"enableEdit":{"desc":"支持编辑","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSCalendarItem.json b/resources/model/control/calendar/IPSCalendarItem.json new file mode 100644 index 0000000..eaa03f6 --- /dev/null +++ b/resources/model/control/calendar/IPSCalendarItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSControlXDataContainer","/control/IPSControlMDataContainer","/control/IPSControlObjectNavigatable","/IPSModelSortable"],"bKColor":{"desc":"默认背景颜色","type":"string"},"color":{"desc":"默认文本颜色","type":"string"},"itemStyle":{"desc":"项内置样式","type":"string","enum":{"DEFAULT":"默认样式","STYLE2":"样式2","STYLE3":"样式3","STYLE4":"样式4"}},"itemType":{"desc":"项标识","type":"string"},"maxSize":{"desc":"最大加载项数","type":"number"},"modelObj":{"desc":"代码模型对象","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psDEContextMenu":{"desc":"上下文菜单对象","type":"object","schema":"/control/toolbar/IPSDEContextMenu"},"psLayoutPanel":{"desc":"项布局面板","type":"object","schema":"/control/panel/IPSLayoutPanel"},"psSysCss":{"desc":"项界面样式表","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"项图标资源对象","type":"object","schema":"/res/IPSSysImage"},"enableEdit":{"desc":"支持编辑","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSCalendarParam.json b/resources/model/control/calendar/IPSCalendarParam.json new file mode 100644 index 0000000..cfce46f --- /dev/null +++ b/resources/model/control/calendar/IPSCalendarParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSDECalendar.json b/resources/model/control/calendar/IPSDECalendar.json new file mode 100644 index 0000000..75664e4 --- /dev/null +++ b/resources/model/control/calendar/IPSDECalendar.json @@ -0,0 +1 @@ +{"extends":["/control/calendar/IPSCalendar"],"groupHeight":{"desc":"分组高度","type":"number"},"groupLayout":{"desc":"分组布局","type":"string","enum":{"ROW":"从左往右","COLUMN":"从上往下"}},"groupMode":{"desc":"分组模式","type":"string","enum":{"NONE":"无分组","AUTO":"自动分组","CODELIST":"分组代码表"}},"groupPSAppDEField":{"desc":"分组应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"groupPSCodeList":{"desc":"分组代码表","type":"object","schema":"/codelist/IPSCodeList"},"groupPSSysCss":{"desc":"分组默认界面样式","type":"object","schema":"/res/IPSSysCss"},"groupPSSysPFPlugin":{"desc":"分组绘制插件","type":"object","schema":"/res/IPSSysPFPlugin"},"groupWidth":{"desc":"分组宽度","type":"number"},"legendPos":{"desc":"图例位置","type":"string","enum":{"LEFT":"左边","TOP":"上方","RIGHT":"右边","BOTTOM":"下方","NONE":"不显示"}},"enableGroup":{"desc":"启用分组","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSDECalendarItem.json b/resources/model/control/calendar/IPSDECalendarItem.json new file mode 100644 index 0000000..0828f63 --- /dev/null +++ b/resources/model/control/calendar/IPSDECalendarItem.json @@ -0,0 +1 @@ +{"extends":["/control/calendar/IPSCalendarItem"]} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSSysCalendar.json b/resources/model/control/calendar/IPSSysCalendar.json new file mode 100644 index 0000000..128fdae --- /dev/null +++ b/resources/model/control/calendar/IPSSysCalendar.json @@ -0,0 +1 @@ +{"extends":["/control/calendar/IPSDECalendar"],"psSysCalendarItems":{"desc":"日历项集合","type":"array","schema":"/control/calendar/IPSSysCalendarItem"}} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSSysCalendarItem.json b/resources/model/control/calendar/IPSSysCalendarItem.json new file mode 100644 index 0000000..6f1611c --- /dev/null +++ b/resources/model/control/calendar/IPSSysCalendarItem.json @@ -0,0 +1 @@ +{"extends":["/control/calendar/IPSCalendarItem"],"bKColorPSAppDEField":{"desc":"背景颜色应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"beginTimePSAppDEField":{"desc":"开始时间应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"colorPSAppDEField":{"desc":"文本颜色应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"contentPSAppDEField":{"desc":"内容应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"createPSAppDEAction":{"desc":"建立数据应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"createPSDEOPPriv":{"desc":"建立要求操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"defaultPSUIAction":{"desc":"日历项默认行为","type":"object","schema":"/app/view/IPSAppViewUIAction"},"endTimePSAppDEField":{"desc":"结束时间应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"iconPSAppDEField":{"desc":"项图标值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"idPSAppDEField":{"desc":"项标识值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"levelPSAppDEField":{"desc":"级别应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psAppDEDataSet":{"desc":"应用实体数据集","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"psSysPFPlugin":{"desc":"前端模板插件","type":"object","schema":"/res/IPSSysPFPlugin"},"removePSAppDEAction":{"desc":"删除数据应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"removePSDEOPPriv":{"desc":"删除要求操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"tag2PSAppDEField":{"desc":"标记值2应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"tagPSAppDEField":{"desc":"标记值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"textPSAppDEField":{"desc":"项文本值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"tipsPSAppDEField":{"desc":"提示应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"updatePSAppDEAction":{"desc":"更新数据应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"updatePSDEOPPriv":{"desc":"更新要求操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"}} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSSysCalendarItemRV.json b/resources/model/control/calendar/IPSSysCalendarItemRV.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/control/calendar/IPSSysCalendarItemRV.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/control/calendar/IPSSysCalendarParam.json b/resources/model/control/calendar/IPSSysCalendarParam.json new file mode 100644 index 0000000..f1cc656 --- /dev/null +++ b/resources/model/control/calendar/IPSSysCalendarParam.json @@ -0,0 +1 @@ +{"extends":["/control/calendar/IPSCalendarParam"]} \ No newline at end of file diff --git a/resources/model/control/captionbar/IPSCaptionBar.json b/resources/model/control/captionbar/IPSCaptionBar.json new file mode 100644 index 0000000..47891fa --- /dev/null +++ b/resources/model/control/captionbar/IPSCaptionBar.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"psSysImage":{"desc":"图标对象","type":"object","schema":"/res/IPSSysImage"},"subCapPSLanguageRes":{"desc":"子标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"subCaption":{"desc":"视图子标题","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/captionbar/IPSCaptionBarParam.json b/resources/model/control/captionbar/IPSCaptionBarParam.json new file mode 100644 index 0000000..8694565 --- /dev/null +++ b/resources/model/control/captionbar/IPSCaptionBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChart.json b/resources/model/control/chart/IPSChart.json new file mode 100644 index 0000000..b7649b4 --- /dev/null +++ b/resources/model/control/chart/IPSChart.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControl"],"coordinateSystem":{"desc":"坐标系统类型","type":"string","enum":{"XY":"直角坐标系","POLAR":"极坐标系","RADAR":"雷达坐标系","PARALLEL":"平行坐标系","SINGLE":"单轴坐标系","CALENDAR":"日历坐标系","MAP":"地图坐标系","NONE":"无坐标系"}},"emptyText":{"desc":"无值显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psChartAngleAxises":{"desc":"angleAxis集合","type":"array","schema":"/control/chart/IPSChartAngleAxis"},"psChartCoordinateSystems":{"desc":"图表坐标系集合","type":"array","schema":"/control/chart/IPSChartCoordinateSystem"},"psChartDataSetGroups":{"desc":"数据集分组集合","type":"array","schema":"/control/chart/IPSChartDataSetGroup"},"psChartDataSets":{"desc":"数据集集合","type":"array","schema":"/control/chart/IPSChartDataSet"},"psChartGrids":{"desc":"直角坐标表格集合","type":"array","schema":"/control/chart/IPSChartGrid"},"psChartParallelAxises":{"desc":"paralleAxis集合","type":"array","schema":"/control/chart/IPSChartParallelAxis"},"psChartParallels":{"desc":"平行坐标部件集合","type":"array","schema":"/control/chart/IPSChartParallel"},"psChartPolars":{"desc":"极坐标部件集合","type":"array","schema":"/control/chart/IPSChartPolar"},"psChartRadars":{"desc":"雷达部件集合","type":"array","schema":"/control/chart/IPSChartRadar"},"psChartRadiusAxises":{"desc":"radiusAxis集合","type":"array","schema":"/control/chart/IPSChartRadiusAxis"},"psChartSingleAxises":{"desc":"singleAxis集合","type":"array","schema":"/control/chart/IPSChartSingleAxis"},"psChartSingles":{"desc":"单一坐标部件集合","type":"array","schema":"/control/chart/IPSChartSingle"},"psChartXAxises":{"desc":"xAxis集合","type":"array","schema":"/control/chart/IPSChartXAxis"},"psChartYAxises":{"desc":"yAxis集合","type":"array","schema":"/control/chart/IPSChartYAxis"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartAngleAxis.json b/resources/model/control/chart/IPSChartAngleAxis.json new file mode 100644 index 0000000..58e88f1 --- /dev/null +++ b/resources/model/control/chart/IPSChartAngleAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartAxes.json b/resources/model/control/chart/IPSChartAxes.json new file mode 100644 index 0000000..d4f6b43 --- /dev/null +++ b/resources/model/control/chart/IPSChartAxes.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"axesPos":{"desc":"坐标轴位置","type":"string","enum":{"left":"左侧","bottom":"下方","right":"右侧","top":"上方","radial":"径向轴(Radial)","angular":"角度轴(Angular)"}},"axesType":{"desc":"坐标轴类型","type":"string","enum":{"numeric":"数值","time":"时间","category":"分类","log":"对数轴"}},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"coordinateSystemIndex":{"desc":"坐标系统索引","type":"number"},"dataShowMode":{"desc":"数据显示模式","type":"number","enum":{"0":"未定义","1":"纵","2":"横","3":"斜"}},"maxValue":{"desc":"最大值","type":"number"},"minValue":{"desc":"最小值","type":"number"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartAxis.json b/resources/model/control/chart/IPSChartAxis.json new file mode 100644 index 0000000..f27bdf2 --- /dev/null +++ b/resources/model/control/chart/IPSChartAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"],"baseOptionJOString":{"desc":"基础配置Json内容","type":"string"},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"dataShowMode":{"desc":"数据显示模式","type":"number","enum":{"0":"未定义","1":"纵","2":"横","3":"斜"}},"eChartsPos":{"desc":"ECharts位置","type":"string"},"eChartsType":{"desc":"ECharts类型","type":"string"},"maxValue":{"desc":"最大值","type":"number"},"minValue":{"desc":"最小值","type":"number"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"position":{"desc":"位置","type":"string","enum":{"left":"左侧","bottom":"下方","right":"右侧","top":"上方","radial":"径向轴(Radial)","angular":"角度轴(Angular)"}},"type":{"desc":"类型","type":"string","enum":{"numeric":"数值","time":"时间","category":"分类","log":"对数轴"}}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCalendar.json b/resources/model/control/chart/IPSChartCalendar.json new file mode 100644 index 0000000..5f46a7b --- /dev/null +++ b/resources/model/control/chart/IPSChartCalendar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystemControl","/control/chart/IPSChartPosition"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystem.json b/resources/model/control/chart/IPSChartCoordinateSystem.json new file mode 100644 index 0000000..2182709 --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"eChartsType":{"desc":"ECharts坐标系类型","type":"string"},"index":{"desc":"坐标系索引","type":"number"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"type":{"desc":"坐标系类型","type":"string","enum":{"XY":"直角坐标系","POLAR":"极坐标系","RADAR":"雷达坐标系","PARALLEL":"平行坐标系","SINGLE":"单轴坐标系","CALENDAR":"日历坐标系","MAP":"地图坐标系","NONE":"无坐标系"}}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemCalendar.json b/resources/model/control/chart/IPSChartCoordinateSystemCalendar.json new file mode 100644 index 0000000..b2cc03b --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemCalendar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem"],"psChartCalendar":{"desc":"地理坐标系组件","type":"object","schema":"/control/chart/IPSChartCalendar"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemCartesian2D.json b/resources/model/control/chart/IPSChartCoordinateSystemCartesian2D.json new file mode 100644 index 0000000..ebbd6e1 --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemCartesian2D.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem"],"psChartGrid":{"desc":"直角坐标绘图网格对象","type":"object","schema":"/control/chart/IPSChartGrid"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemControl.json b/resources/model/control/chart/IPSChartCoordinateSystemControl.json new file mode 100644 index 0000000..e76b877 --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemControl.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"],"baseOptionJOString":{"desc":"基础配置Json内容","type":"string"},"psChartCoordinateSystem":{"desc":"图表坐标系统","type":"object","schema":"/control/chart/IPSChartCoordinateSystem"},"type":{"desc":"部件类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemGeo.json b/resources/model/control/chart/IPSChartCoordinateSystemGeo.json new file mode 100644 index 0000000..dd8e968 --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemGeo.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem"],"psChartGeo":{"desc":"地理坐标系组件","type":"object","schema":"/control/chart/IPSChartGeo"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemNone.json b/resources/model/control/chart/IPSChartCoordinateSystemNone.json new file mode 100644 index 0000000..cbcb0fd --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemNone.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemParallel.json b/resources/model/control/chart/IPSChartCoordinateSystemParallel.json new file mode 100644 index 0000000..e903775 --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemParallel.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem"],"psChartParallel":{"desc":"平行坐标系界面对象","type":"object","schema":"/control/chart/IPSChartParallel"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemPolar.json b/resources/model/control/chart/IPSChartCoordinateSystemPolar.json new file mode 100644 index 0000000..cbcb0fd --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemPolar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemRadar.json b/resources/model/control/chart/IPSChartCoordinateSystemRadar.json new file mode 100644 index 0000000..185c4e5 --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemRadar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem"],"psChartRadar":{"desc":"图表雷达部件","type":"object","schema":"/control/chart/IPSChartRadar"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartCoordinateSystemSingle.json b/resources/model/control/chart/IPSChartCoordinateSystemSingle.json new file mode 100644 index 0000000..98f17ad --- /dev/null +++ b/resources/model/control/chart/IPSChartCoordinateSystemSingle.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem"],"psChartSingle":{"desc":"单坐标系界面对象","type":"object","schema":"/control/chart/IPSChartSingle"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartDataItem.json b/resources/model/control/chart/IPSChartDataItem.json new file mode 100644 index 0000000..0965a9a --- /dev/null +++ b/resources/model/control/chart/IPSChartDataItem.json @@ -0,0 +1 @@ +{"extends":["/data/IPSDataItem"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartDataSet.json b/resources/model/control/chart/IPSChartDataSet.json new file mode 100644 index 0000000..5d26616 --- /dev/null +++ b/resources/model/control/chart/IPSChartDataSet.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"],"psChartDataSetFields":{"desc":"图表数据集属性集合","type":"array","schema":"/control/chart/IPSChartDataSetField"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartDataSetField.json b/resources/model/control/chart/IPSChartDataSetField.json new file mode 100644 index 0000000..5cad557 --- /dev/null +++ b/resources/model/control/chart/IPSChartDataSetField.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"],"groupMode":{"desc":"分组模式","type":"string"},"psCodeList":{"desc":"代码表对象","type":"object","schema":"/codelist/IPSCodeList"},"groupField":{"desc":"分组属性","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartDataSetGroup.json b/resources/model/control/chart/IPSChartDataSetGroup.json new file mode 100644 index 0000000..c5ae66f --- /dev/null +++ b/resources/model/control/chart/IPSChartDataSetGroup.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"],"psAppDEDataSet":{"desc":"应用实体数据集","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartGeo.json b/resources/model/control/chart/IPSChartGeo.json new file mode 100644 index 0000000..5f46a7b --- /dev/null +++ b/resources/model/control/chart/IPSChartGeo.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystemControl","/control/chart/IPSChartPosition"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartGrid.json b/resources/model/control/chart/IPSChartGrid.json new file mode 100644 index 0000000..ba8f822 --- /dev/null +++ b/resources/model/control/chart/IPSChartGrid.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystemControl","/control/chart/IPSChartPosition"],"psChartGridXAxis0":{"desc":"绘图表格X轴[0]","type":"object","schema":"/control/chart/IPSChartGridXAxis"},"psChartGridXAxis1":{"desc":"绘图表格X轴[1]","type":"object","schema":"/control/chart/IPSChartGridXAxis"},"psChartGridYAxis0":{"desc":"绘图表格Y轴[0]","type":"object","schema":"/control/chart/IPSChartGridYAxis"},"psChartGridYAxis1":{"desc":"绘图表格Y轴[1]","type":"object","schema":"/control/chart/IPSChartGridYAxis"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartGridAxis.json b/resources/model/control/chart/IPSChartGridAxis.json new file mode 100644 index 0000000..58e88f1 --- /dev/null +++ b/resources/model/control/chart/IPSChartGridAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartGridXAxis.json b/resources/model/control/chart/IPSChartGridXAxis.json new file mode 100644 index 0000000..558315a --- /dev/null +++ b/resources/model/control/chart/IPSChartGridXAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartGridAxis","/control/chart/IPSChartXAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartGridYAxis.json b/resources/model/control/chart/IPSChartGridYAxis.json new file mode 100644 index 0000000..25b3633 --- /dev/null +++ b/resources/model/control/chart/IPSChartGridYAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartGridAxis","/control/chart/IPSChartYAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartLegend.json b/resources/model/control/chart/IPSChartLegend.json new file mode 100644 index 0000000..34c2b41 --- /dev/null +++ b/resources/model/control/chart/IPSChartLegend.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"],"legendPos":{"desc":"图例位置","type":"string"},"showLegend":{"desc":"显示图例","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartObject.json b/resources/model/control/chart/IPSChartObject.json new file mode 100644 index 0000000..889eba3 --- /dev/null +++ b/resources/model/control/chart/IPSChartObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"index":{"desc":"对象索引","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartParallel.json b/resources/model/control/chart/IPSChartParallel.json new file mode 100644 index 0000000..5f46a7b --- /dev/null +++ b/resources/model/control/chart/IPSChartParallel.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystemControl","/control/chart/IPSChartPosition"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartParallelAxis.json b/resources/model/control/chart/IPSChartParallelAxis.json new file mode 100644 index 0000000..58e88f1 --- /dev/null +++ b/resources/model/control/chart/IPSChartParallelAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartPolar.json b/resources/model/control/chart/IPSChartPolar.json new file mode 100644 index 0000000..d062fe0 --- /dev/null +++ b/resources/model/control/chart/IPSChartPolar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystemControl"],"psChartPolarAngleAxis":{"desc":"角度轴","type":"object","schema":"/control/chart/IPSChartPolarAngleAxis"},"psChartPolarRadiusAxis":{"desc":"径向轴","type":"object","schema":"/control/chart/IPSChartPolarRadiusAxis"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartPolarAngleAxis.json b/resources/model/control/chart/IPSChartPolarAngleAxis.json new file mode 100644 index 0000000..f6c62c7 --- /dev/null +++ b/resources/model/control/chart/IPSChartPolarAngleAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartPolarAxis","/control/chart/IPSChartAngleAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartPolarAxis.json b/resources/model/control/chart/IPSChartPolarAxis.json new file mode 100644 index 0000000..58e88f1 --- /dev/null +++ b/resources/model/control/chart/IPSChartPolarAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartPolarRadiusAxis.json b/resources/model/control/chart/IPSChartPolarRadiusAxis.json new file mode 100644 index 0000000..7bf7fea --- /dev/null +++ b/resources/model/control/chart/IPSChartPolarRadiusAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartRadiusAxis","/control/chart/IPSChartPolarAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartPosition.json b/resources/model/control/chart/IPSChartPosition.json new file mode 100644 index 0000000..232153e --- /dev/null +++ b/resources/model/control/chart/IPSChartPosition.json @@ -0,0 +1 @@ +{"bottom":{"desc":"下方间隔","type":"object"},"height":{"desc":"高度","type":"object"},"left":{"desc":"左侧间隔","type":"object"},"right":{"desc":"右侧间隔","type":"object"},"top":{"desc":"上方间隔","type":"object"},"width":{"desc":"宽度","type":"object"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartRadar.json b/resources/model/control/chart/IPSChartRadar.json new file mode 100644 index 0000000..2cbb920 --- /dev/null +++ b/resources/model/control/chart/IPSChartRadar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystemControl"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartRadiusAxis.json b/resources/model/control/chart/IPSChartRadiusAxis.json new file mode 100644 index 0000000..58e88f1 --- /dev/null +++ b/resources/model/control/chart/IPSChartRadiusAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeries.json b/resources/model/control/chart/IPSChartSeries.json new file mode 100644 index 0000000..2385b0d --- /dev/null +++ b/resources/model/control/chart/IPSChartSeries.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSControlObjectNavigatable"],"baseOptionJOString":{"desc":"基础配置Json内容","type":"string"},"capPSLanguageRes":{"desc":"标题语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"catalogField":{"desc":"分类属性","type":"string"},"catalogPSCodeList":{"desc":"分类代码表对象","type":"object","schema":"/codelist/IPSCodeList"},"dataField":{"desc":"值属性","type":"string"},"eChartsType":{"desc":"ECharts序列类型","type":"string","enum":{"area":"区域图(Area)","bar":"条形图(Bar)","bar3d":"条形图3D(旧)(Bar3D)","candlestick":"K线图(Candlestick)","gauge":"仪表盘(Gauge)","line":"折线图(Line)","pie":"饼图(Pie)","pie3d":"饼图3D(旧)(Pie3D)","radar":"雷达图(Radar)","scatter":"散点图(Scatter)","column":"柱状图(Column)","funnel":"漏斗图(Funnel)","map":"地图(Map)","custom":"自定义(Custom)"}},"extValue2Field":{"desc":"扩展值2属性","type":"string"},"extValue3Field":{"desc":"扩展值3属性","type":"string"},"extValue4Field":{"desc":"扩展值4属性","type":"string"},"extValueField":{"desc":"扩展值属性","type":"string"},"groupMode":{"desc":"分组模式","type":"string","enum":{"YEAR":"年","QUARTER":"季度","MONTH":"月份","YEARWEEK":"年周","DAY":"日","CODELIST":"代码表"}},"idField":{"desc":"序列标识属性","type":"string"},"psChartCoordinateSystem":{"desc":"图表坐标系统","type":"object","schema":"/control/chart/IPSChartCoordinateSystem"},"psChartDataSet":{"desc":"图表数据集对象","type":"object","schema":"/control/chart/IPSChartDataSet"},"psChartSeriesEncode":{"desc":"图表序列编码","type":"object","schema":"/control/chart/IPSChartSeriesEncode"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"seriesField":{"desc":"序列名称属性","type":"string"},"seriesLayoutBy":{"desc":"结果集行列模式","type":"string"},"seriesPSCodeList":{"desc":"序列代码表对象","type":"object","schema":"/codelist/IPSCodeList"},"seriesType":{"desc":"图形类型","type":"string","enum":{"area":"区域图(Area)","bar":"条形图(Bar)","bar3d":"条形图3D(旧)(Bar3D)","candlestick":"K线图(Candlestick)","gauge":"仪表盘(Gauge)","line":"折线图(Line)","pie":"饼图(Pie)","pie3d":"饼图3D(旧)(Pie3D)","radar":"雷达图(Radar)","scatter":"散点图(Scatter)","column":"柱状图(Column)","funnel":"漏斗图(Funnel)","map":"地图(Map)","custom":"自定义(Custom)"}},"tagField":{"desc":"标记属性","type":"string"},"valueField":{"desc":"值属性","type":"string"},"enableChartDataSet":{"desc":"支持图表数据集","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesBar.json b/resources/model/control/chart/IPSChartSeriesBar.json new file mode 100644 index 0000000..99bfce7 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesBar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"],"barCategoryGap":{"desc":"同系列柱间距离","type":"object"},"barGap":{"desc":"不同系列柱间距离","type":"object"},"barMaxWidth":{"desc":"柱条最大宽度","type":"object"},"barMinHeight":{"desc":"柱条最小高度","type":"number"},"barMinWidth":{"desc":"柱条最小宽度","type":"object"},"barWidth":{"desc":"柱条宽度","type":"object"},"stack":{"desc":"数据堆叠","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesBoxplot.json b/resources/model/control/chart/IPSChartSeriesBoxplot.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesBoxplot.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesCSCartesian2DEncode.json b/resources/model/control/chart/IPSChartSeriesCSCartesian2DEncode.json new file mode 100644 index 0000000..1619980 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesCSCartesian2DEncode.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeriesEncode"],"psChartXAxis":{"desc":"图表X坐标轴","type":"object","schema":"/control/chart/IPSChartXAxis"},"psChartYAxis":{"desc":"图表Y坐标轴","type":"object","schema":"/control/chart/IPSChartYAxis"},"getX":{"desc":"X轴维度集合","type":"array","schema":"string"},"getY":{"desc":"Y轴维度集合","type":"array","schema":"string"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesCSGeoEncode.json b/resources/model/control/chart/IPSChartSeriesCSGeoEncode.json new file mode 100644 index 0000000..f0bb31f --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesCSGeoEncode.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeriesEncode"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesCSNone.json b/resources/model/control/chart/IPSChartSeriesCSNone.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesCSNone.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesCSNoneEncode.json b/resources/model/control/chart/IPSChartSeriesCSNoneEncode.json new file mode 100644 index 0000000..259228a --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesCSNoneEncode.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeriesEncode"],"category":{"desc":"分类属性","type":"string"},"value":{"desc":"值属性","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesCSPolarEncode.json b/resources/model/control/chart/IPSChartSeriesCSPolarEncode.json new file mode 100644 index 0000000..f0bb31f --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesCSPolarEncode.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeriesEncode"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesCSSingleEncode.json b/resources/model/control/chart/IPSChartSeriesCSSingleEncode.json new file mode 100644 index 0000000..f0bb31f --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesCSSingleEncode.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeriesEncode"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesCandlestick.json b/resources/model/control/chart/IPSChartSeriesCandlestick.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesCandlestick.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesCustom.json b/resources/model/control/chart/IPSChartSeriesCustom.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesCustom.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesEncode.json b/resources/model/control/chart/IPSChartSeriesEncode.json new file mode 100644 index 0000000..a9b7e99 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesEncode.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"],"itemId":{"desc":"序列标识维度","type":"string"},"itemName":{"desc":"序列名称维度","type":"string"},"type":{"desc":"坐标系类型","type":"string","enum":{"XY":"直角坐标系","POLAR":"极坐标系","RADAR":"雷达坐标系","PARALLEL":"平行坐标系","SINGLE":"单轴坐标系","CALENDAR":"日历坐标系","MAP":"地图坐标系","NONE":"无坐标系"}}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesFunnel.json b/resources/model/control/chart/IPSChartSeriesFunnel.json new file mode 100644 index 0000000..220c899 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesFunnel.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeriesCSNone","/control/chart/IPSChartPosition"],"funnelAlign":{"desc":"漏斗图方向","type":"string"},"maxSize":{"desc":"最大面积","type":"object"},"maxValue":{"desc":"最大值","type":"number"},"minSize":{"desc":"最小面积","type":"object"},"minValue":{"desc":"最小值","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesGauge.json b/resources/model/control/chart/IPSChartSeriesGauge.json new file mode 100644 index 0000000..2a7d22f --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesGauge.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"],"endAngle":{"desc":"结束角度","type":"number"},"maxValue":{"desc":"最大值","type":"number"},"minValue":{"desc":"最小值","type":"number"},"radius":{"desc":"半径","type":"object"},"splitNumber":{"desc":"分割段数","type":"number"},"startAngle":{"desc":"起始角度","type":"number"},"clockwise":{"desc":"顺时针","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesGraph.json b/resources/model/control/chart/IPSChartSeriesGraph.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesGraph.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesHeatmap.json b/resources/model/control/chart/IPSChartSeriesHeatmap.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesHeatmap.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesLine.json b/resources/model/control/chart/IPSChartSeriesLine.json new file mode 100644 index 0000000..3f9d4a3 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesLine.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"],"step":{"desc":"阶梯线图","type":"object"},"stack":{"desc":"数据堆叠","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesLines.json b/resources/model/control/chart/IPSChartSeriesLines.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesLines.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesMap.json b/resources/model/control/chart/IPSChartSeriesMap.json new file mode 100644 index 0000000..59936c5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesMap.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"],"mapType":{"desc":"地图类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesParallel.json b/resources/model/control/chart/IPSChartSeriesParallel.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesParallel.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesPictorialBar.json b/resources/model/control/chart/IPSChartSeriesPictorialBar.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesPictorialBar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesPie.json b/resources/model/control/chart/IPSChartSeriesPie.json new file mode 100644 index 0000000..4c283db --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesPie.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeriesCSNone","/control/chart/IPSChartPosition"],"center":{"desc":"圆心","type":"object"},"minAngle":{"desc":"最小扇区角度","type":"number"},"minShowLabelAngle":{"desc":"无标签扇区角度","type":"number"},"radius":{"desc":"半径","type":"object"},"roseType":{"desc":"展示南丁格尔图","type":"object"},"startAngle":{"desc":"起始角度","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesRadar.json b/resources/model/control/chart/IPSChartSeriesRadar.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesRadar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesSankey.json b/resources/model/control/chart/IPSChartSeriesSankey.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesSankey.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesScatter.json b/resources/model/control/chart/IPSChartSeriesScatter.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesScatter.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesSunburst.json b/resources/model/control/chart/IPSChartSeriesSunburst.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesSunburst.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesThemeRiver.json b/resources/model/control/chart/IPSChartSeriesThemeRiver.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesThemeRiver.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesTree.json b/resources/model/control/chart/IPSChartSeriesTree.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesTree.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSeriesTreemap.json b/resources/model/control/chart/IPSChartSeriesTreemap.json new file mode 100644 index 0000000..d20d0d5 --- /dev/null +++ b/resources/model/control/chart/IPSChartSeriesTreemap.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSingle.json b/resources/model/control/chart/IPSChartSingle.json new file mode 100644 index 0000000..2cbb920 --- /dev/null +++ b/resources/model/control/chart/IPSChartSingle.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystemControl"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartSingleAxis.json b/resources/model/control/chart/IPSChartSingleAxis.json new file mode 100644 index 0000000..58e88f1 --- /dev/null +++ b/resources/model/control/chart/IPSChartSingleAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartTimeline.json b/resources/model/control/chart/IPSChartTimeline.json new file mode 100644 index 0000000..8b30149 --- /dev/null +++ b/resources/model/control/chart/IPSChartTimeline.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject","/control/chart/IPSChartPosition"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartTitle.json b/resources/model/control/chart/IPSChartTitle.json new file mode 100644 index 0000000..c193b5e --- /dev/null +++ b/resources/model/control/chart/IPSChartTitle.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"],"subTitle":{"desc":"子标题","type":"string"},"subTitlePSLanguageRes":{"desc":"子标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"title":{"desc":"标题","type":"string"},"titlePSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"titlePos":{"desc":"标题位置","type":"string"},"showTitle":{"desc":"显示标题","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartVisualMap.json b/resources/model/control/chart/IPSChartVisualMap.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/control/chart/IPSChartVisualMap.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartXAxis.json b/resources/model/control/chart/IPSChartXAxis.json new file mode 100644 index 0000000..58e88f1 --- /dev/null +++ b/resources/model/control/chart/IPSChartXAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSChartYAxis.json b/resources/model/control/chart/IPSChartYAxis.json new file mode 100644 index 0000000..58e88f1 --- /dev/null +++ b/resources/model/control/chart/IPSChartYAxis.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxis"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChart.json b/resources/model/control/chart/IPSDEChart.json new file mode 100644 index 0000000..d39a45d --- /dev/null +++ b/resources/model/control/chart/IPSDEChart.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChart","/control/chart/IPSECharts"],"minorSortDir":{"desc":"默认排序方向","type":"string","enum":{"ASC":"升序","DESC":"降序"}},"minorSortPSAppDEField":{"desc":"默认排序应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psDEChartLegend":{"desc":"实体图表图例对象","type":"object","schema":"/control/chart/IPSDEChartLegend"},"psDEChartSerieses":{"desc":"图表数据序列集合","type":"array","schema":"/control/chart/IPSDEChartSeries"},"psDEChartTitle":{"desc":"实体图表标题对象","type":"object","schema":"/control/chart/IPSDEChartTitle"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartAxes.json b/resources/model/control/chart/IPSDEChartAxes.json new file mode 100644 index 0000000..81fb901 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartAxes.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartAxes"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartCalendar.json b/resources/model/control/chart/IPSDEChartCalendar.json new file mode 100644 index 0000000..0b93cfa --- /dev/null +++ b/resources/model/control/chart/IPSDEChartCalendar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCalendar","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartCoordinateSystem.json b/resources/model/control/chart/IPSDEChartCoordinateSystem.json new file mode 100644 index 0000000..45ce2d0 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartCoordinateSystem.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartCoordinateSystem","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartDataSet.json b/resources/model/control/chart/IPSDEChartDataSet.json new file mode 100644 index 0000000..6a20f67 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartDataSet.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartDataSet","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartDataSetField.json b/resources/model/control/chart/IPSDEChartDataSetField.json new file mode 100644 index 0000000..d6782a7 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartDataSetField.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartDataSetField","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartDataSetGroup.json b/resources/model/control/chart/IPSDEChartDataSetGroup.json new file mode 100644 index 0000000..d023057 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartDataSetGroup.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartDataSetGroup","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartGeo.json b/resources/model/control/chart/IPSDEChartGeo.json new file mode 100644 index 0000000..df2c6ac --- /dev/null +++ b/resources/model/control/chart/IPSDEChartGeo.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartGeo","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartGrid.json b/resources/model/control/chart/IPSDEChartGrid.json new file mode 100644 index 0000000..f6cc63d --- /dev/null +++ b/resources/model/control/chart/IPSDEChartGrid.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartGrid","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartHandler.json b/resources/model/control/chart/IPSDEChartHandler.json new file mode 100644 index 0000000..89dddab --- /dev/null +++ b/resources/model/control/chart/IPSDEChartHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSMDAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartLegend.json b/resources/model/control/chart/IPSDEChartLegend.json new file mode 100644 index 0000000..3a9f025 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartLegend.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartLegend","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartObject.json b/resources/model/control/chart/IPSDEChartObject.json new file mode 100644 index 0000000..03e2151 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartObject.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartParallel.json b/resources/model/control/chart/IPSDEChartParallel.json new file mode 100644 index 0000000..c1d49a2 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartParallel.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartParallel","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartParam.json b/resources/model/control/chart/IPSDEChartParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartPolar.json b/resources/model/control/chart/IPSDEChartPolar.json new file mode 100644 index 0000000..60c3714 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartPolar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartPolar","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartRadar.json b/resources/model/control/chart/IPSDEChartRadar.json new file mode 100644 index 0000000..9aa4bd4 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartRadar.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartRadar","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartSeries.json b/resources/model/control/chart/IPSDEChartSeries.json new file mode 100644 index 0000000..b65cf39 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartSeries.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeries"],"sampleData":{"desc":"示例数据","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartSeriesEncode.json b/resources/model/control/chart/IPSDEChartSeriesEncode.json new file mode 100644 index 0000000..9828858 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartSeriesEncode.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSeriesEncode","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartSingle.json b/resources/model/control/chart/IPSDEChartSingle.json new file mode 100644 index 0000000..db70fd2 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartSingle.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartSingle","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartTitle.json b/resources/model/control/chart/IPSDEChartTitle.json new file mode 100644 index 0000000..60d709e --- /dev/null +++ b/resources/model/control/chart/IPSDEChartTitle.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartTitle","/control/chart/IPSDEChartObject"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSDEChartVisualMap.json b/resources/model/control/chart/IPSDEChartVisualMap.json new file mode 100644 index 0000000..8fb17f6 --- /dev/null +++ b/resources/model/control/chart/IPSDEChartVisualMap.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartVisualMap"]} \ No newline at end of file diff --git a/resources/model/control/chart/IPSECharts.json b/resources/model/control/chart/IPSECharts.json new file mode 100644 index 0000000..874efa2 --- /dev/null +++ b/resources/model/control/chart/IPSECharts.json @@ -0,0 +1 @@ +{"baseOptionJOString":{"desc":"基础配置Json内容","type":"string"},"psChartCoordinateSystems":{"desc":"图表坐标系集合","type":"array","schema":"/control/chart/IPSChartCoordinateSystem"}} \ No newline at end of file diff --git a/resources/model/control/chart/IPSEChartsObject.json b/resources/model/control/chart/IPSEChartsObject.json new file mode 100644 index 0000000..03e2151 --- /dev/null +++ b/resources/model/control/chart/IPSEChartsObject.json @@ -0,0 +1 @@ +{"extends":["/control/chart/IPSChartObject"]} \ No newline at end of file diff --git a/resources/model/control/counter/IPSCounter.json b/resources/model/control/counter/IPSCounter.json new file mode 100644 index 0000000..d182b1a --- /dev/null +++ b/resources/model/control/counter/IPSCounter.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"],"codeName":{"desc":"代码标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/counter/IPSCounterType.json b/resources/model/control/counter/IPSCounterType.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/control/counter/IPSCounterType.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/resources/model/control/counter/IPSDEDRCounter.json b/resources/model/control/counter/IPSDEDRCounter.json new file mode 100644 index 0000000..e7723b6 --- /dev/null +++ b/resources/model/control/counter/IPSDEDRCounter.json @@ -0,0 +1 @@ +{"extends":["/control/counter/IPSSysCounter","/dataentity/IPSDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/control/counter/IPSSysCounter.json b/resources/model/control/counter/IPSSysCounter.json new file mode 100644 index 0000000..67aa93f --- /dev/null +++ b/resources/model/control/counter/IPSSysCounter.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"counterData":{"desc":"计数器数据","type":"string"},"counterData2":{"desc":"计数器数据2","type":"string"},"counterType":{"desc":"计数器类型","type":"string","enum":{}},"customCond":{"desc":"自定义查询条件","type":"string"},"getPSCounterId":{"desc":"预置计数器标识","type":"string"},"psSysPFPlugin":{"desc":"前端模板插件对象","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysSFPlugin":{"desc":"后端模板插件对象","type":"object","schema":"/res/IPSSysSFPlugin"},"timer":{"desc":"刷新间隔(ms)","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/counter/IPSSysCounterItem.json b/resources/model/control/counter/IPSSysCounterItem.json new file mode 100644 index 0000000..2e1f656 --- /dev/null +++ b/resources/model/control/counter/IPSSysCounterItem.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"],"logicName":{"desc":"逻辑名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/counter/IPSSysCounterRef.json b/resources/model/control/counter/IPSSysCounterRef.json new file mode 100644 index 0000000..6ac46c2 --- /dev/null +++ b/resources/model/control/counter/IPSSysCounterRef.json @@ -0,0 +1 @@ +{"extends":["/IPSObject","/IPSModelObject"],"refMode":{"desc":"引用模式","type":"object"},"tag":{"desc":"引用标记","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/custom/IPSCustomControl.json b/resources/model/control/custom/IPSCustomControl.json new file mode 100644 index 0000000..1f7a68f --- /dev/null +++ b/resources/model/control/custom/IPSCustomControl.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl"],"customTag":{"desc":"自定义标记","type":"string"},"customTag2":{"desc":"自定义标记2","type":"string"},"psSysPFPlugin":{"desc":"前端应用插件","type":"object","schema":"/res/IPSSysPFPlugin"}} \ No newline at end of file diff --git a/resources/model/control/custom/IPSCustomControlHandler.json b/resources/model/control/custom/IPSCustomControlHandler.json new file mode 100644 index 0000000..0fb0144 --- /dev/null +++ b/resources/model/control/custom/IPSCustomControlHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/custom/IPSCustomControlParam.json b/resources/model/control/custom/IPSCustomControlParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/custom/IPSCustomControlParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBAppMenuPortletPart.json b/resources/model/control/dashboard/IPSDBAppMenuPortletPart.json new file mode 100644 index 0000000..49c1031 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBAppMenuPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPart"],"aMListStyle":{"desc":"应用菜单列表样式","type":"string"},"aMPSSysPFPlugin":{"desc":"应用菜单绘制插件","type":"object","schema":"/res/IPSSysPFPlugin"}} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBAppMenuPortletPartParam.json b/resources/model/control/dashboard/IPSDBAppMenuPortletPartParam.json new file mode 100644 index 0000000..0a90bf6 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBAppMenuPortletPartParam.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPartParam"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBAppViewPortletPart.json b/resources/model/control/dashboard/IPSDBAppViewPortletPart.json new file mode 100644 index 0000000..a14cf0e --- /dev/null +++ b/resources/model/control/dashboard/IPSDBAppViewPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPart"],"portletPSAppView":{"desc":"嵌入视图对象","type":"object","schema":"/app/view/IPSAppView"}} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBAppViewPortletPartParam.json b/resources/model/control/dashboard/IPSDBAppViewPortletPartParam.json new file mode 100644 index 0000000..0a90bf6 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBAppViewPortletPartParam.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPartParam"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBChartPortlet.json b/resources/model/control/dashboard/IPSDBChartPortlet.json new file mode 100644 index 0000000..37abfda --- /dev/null +++ b/resources/model/control/dashboard/IPSDBChartPortlet.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBSysPortletPart"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBContainerPortletPart.json b/resources/model/control/dashboard/IPSDBContainerPortletPart.json new file mode 100644 index 0000000..80519d1 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBContainerPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPart","/control/dashboard/IPSDashboardContainer"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBContainerPortletPartParam.json b/resources/model/control/dashboard/IPSDBContainerPortletPartParam.json new file mode 100644 index 0000000..0a90bf6 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBContainerPortletPartParam.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPartParam"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBCustomPortletPart.json b/resources/model/control/dashboard/IPSDBCustomPortletPart.json new file mode 100644 index 0000000..37abfda --- /dev/null +++ b/resources/model/control/dashboard/IPSDBCustomPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBSysPortletPart"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBHtmlPortletPart.json b/resources/model/control/dashboard/IPSDBHtmlPortletPart.json new file mode 100644 index 0000000..49b29ab --- /dev/null +++ b/resources/model/control/dashboard/IPSDBHtmlPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBSysPortletPart"],"htmlShowMode":{"desc":"内容显示模式","type":"string","enum":{"INNER":"嵌入","IFRAME":"IFrame"}},"pageUrl":{"desc":"网页地址","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBListPortletPart.json b/resources/model/control/dashboard/IPSDBListPortletPart.json new file mode 100644 index 0000000..37abfda --- /dev/null +++ b/resources/model/control/dashboard/IPSDBListPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBSysPortletPart"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBMenuPortletPart.json b/resources/model/control/dashboard/IPSDBMenuPortletPart.json new file mode 100644 index 0000000..209edb9 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBMenuPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPart"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBPortletPart.json b/resources/model/control/dashboard/IPSDBPortletPart.json new file mode 100644 index 0000000..0d31579 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl","/control/IPSAjaxControl","/control/IPSControlContainer","/control/IPSUserControl","/control/layout/IPSLayoutContainer"],"actionGroupExtractMode":{"desc":"界面行为组展开模式","type":"string","enum":{"ITEM":"按项展开(默认)","ITEMS":"按分组展开"}},"contentPSControl":{"desc":"内容部件","type":"object","schema":"/control/IPSControl"},"psLayoutPos":{"desc":"部件位置","type":"object","schema":"/control/layout/IPSLayoutPos"},"psSysImage":{"desc":"系统图片","type":"object","schema":"/res/IPSSysImage"},"psSysUniRes":{"desc":"系统统一资源","type":"object","schema":"/security/IPSSysUniRes"},"psUIActionGroup":{"desc":"界面行为组对象","type":"object","schema":"/view/IPSUIActionGroup"},"portletType":{"desc":"门户部件类型","type":"string","enum":{"LIST":"实体列表","CHART":"实体图表","VIEW":"系统视图","HTML":"网页部件","TOOLBAR":"工具栏","ACTIONBAR":"操作栏","CUSTOM":"自定义","APPMENU":"快捷菜单栏","CONTAINER":"布局容器","RAWITEM":"直接内容"}},"title":{"desc":"抬头","type":"string"},"titleBarCloseMode":{"desc":"标题栏关闭模式","type":"number","enum":{"0":"无关闭","1":"启用关闭(默认打开)","2":"启用关闭(默认关闭)"}},"titlePSLanguageRes":{"desc":"抬头语言资源","type":"object","schema":"/res/IPSLanguageRes"},"showTitleBar":{"desc":"显式标题栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBPortletPartParam.json b/resources/model/control/dashboard/IPSDBPortletPartParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBPortletPartParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBRawItemPortletPart.json b/resources/model/control/dashboard/IPSDBRawItemPortletPart.json new file mode 100644 index 0000000..81cceb3 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBRawItemPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPart","/control/IPSRawItem"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBRawItemPortletPartParam.json b/resources/model/control/dashboard/IPSDBRawItemPortletPartParam.json new file mode 100644 index 0000000..0a90bf6 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBRawItemPortletPartParam.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPartParam"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBSysPortletPart.json b/resources/model/control/dashboard/IPSDBSysPortletPart.json new file mode 100644 index 0000000..846d1fa --- /dev/null +++ b/resources/model/control/dashboard/IPSDBSysPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPart"],"timer":{"desc":"刷新间隔(ms)","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBSysPortletPartParam.json b/resources/model/control/dashboard/IPSDBSysPortletPartParam.json new file mode 100644 index 0000000..0a90bf6 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBSysPortletPartParam.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBPortletPartParam"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBToolbarPortlet.json b/resources/model/control/dashboard/IPSDBToolbarPortlet.json new file mode 100644 index 0000000..37abfda --- /dev/null +++ b/resources/model/control/dashboard/IPSDBToolbarPortlet.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBSysPortletPart"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDBViewPortletPart.json b/resources/model/control/dashboard/IPSDBViewPortletPart.json new file mode 100644 index 0000000..24bc7f0 --- /dev/null +++ b/resources/model/control/dashboard/IPSDBViewPortletPart.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDBSysPortletPart","/control/dashboard/IPSDBAppViewPortletPart"],"portletPSAppView":{"desc":"嵌入视图对象","type":"object","schema":"/app/view/IPSAppView"}} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDEDashboard.json b/resources/model/control/dashboard/IPSDEDashboard.json new file mode 100644 index 0000000..a0ab589 --- /dev/null +++ b/resources/model/control/dashboard/IPSDEDashboard.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDashboard"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDashboard.json b/resources/model/control/dashboard/IPSDashboard.json new file mode 100644 index 0000000..f1ee60f --- /dev/null +++ b/resources/model/control/dashboard/IPSDashboard.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl","/control/IPSControlContainer","/control/dashboard/IPSDashboardContainer","/control/layout/IPSLayoutContainer"],"psAppDynaDashboardUtil":{"desc":"应用动态看板功能","type":"object","schema":"/app/util/IPSAppDynaDashboardUtil"},"enableCustomized":{"desc":"支持看板定制","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDashboardContainer.json b/resources/model/control/dashboard/IPSDashboardContainer.json new file mode 100644 index 0000000..8b89929 --- /dev/null +++ b/resources/model/control/dashboard/IPSDashboardContainer.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayoutContainer"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSDashboardParam.json b/resources/model/control/dashboard/IPSDashboardParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/dashboard/IPSDashboardParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSSysDashboard.json b/resources/model/control/dashboard/IPSSysDashboard.json new file mode 100644 index 0000000..c3a2f00 --- /dev/null +++ b/resources/model/control/dashboard/IPSSysDashboard.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDashboard","/control/dashboard/IPSDEDashboard"]} \ No newline at end of file diff --git a/resources/model/control/dashboard/IPSSysDashboardParam.json b/resources/model/control/dashboard/IPSSysDashboardParam.json new file mode 100644 index 0000000..da0602b --- /dev/null +++ b/resources/model/control/dashboard/IPSSysDashboardParam.json @@ -0,0 +1 @@ +{"extends":["/control/dashboard/IPSDashboardParam"]} \ No newline at end of file diff --git a/resources/model/control/datainfobar/IPSDataInfoBar.json b/resources/model/control/datainfobar/IPSDataInfoBar.json new file mode 100644 index 0000000..269d31b --- /dev/null +++ b/resources/model/control/datainfobar/IPSDataInfoBar.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"]} \ No newline at end of file diff --git a/resources/model/control/datainfobar/IPSDataInfoBarParam.json b/resources/model/control/datainfobar/IPSDataInfoBarParam.json new file mode 100644 index 0000000..8694565 --- /dev/null +++ b/resources/model/control/datainfobar/IPSDataInfoBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"]} \ No newline at end of file diff --git a/resources/model/control/dataview/IPSDEDataView.json b/resources/model/control/dataview/IPSDEDataView.json new file mode 100644 index 0000000..4c9676d --- /dev/null +++ b/resources/model/control/dataview/IPSDEDataView.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControl","/control/IPSControlContainer","/control/IPSControlNavigatable","/control/IPSMDControl2"],"cardColLG":{"desc":"卡片栅格布局大型列宽","type":"number"},"cardColMD":{"desc":"卡片栅格布局中型列宽","type":"number"},"cardColSM":{"desc":"卡片栅格布局小型列宽","type":"number"},"cardColXS":{"desc":"卡片栅格布局超小列宽","type":"number"},"cardHeight":{"desc":"卡片高度","type":"number"},"cardWidth":{"desc":"卡片宽度","type":"number"},"emptyText":{"desc":"无值显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"groupColLG":{"desc":"分组栅格布局大型列宽","type":"number"},"groupColMD":{"desc":"分组栅格布局中型列宽","type":"number"},"groupColSM":{"desc":"分组栅格布局小型列宽","type":"number"},"groupColXS":{"desc":"分组栅格布局超小列宽","type":"number"},"groupHeight":{"desc":"分组高度","type":"number"},"groupLayout":{"desc":"分组布局","type":"string","enum":{"ROW":"从左往右","COLUMN":"从上往下"}},"groupMode":{"desc":"分组模式","type":"string","enum":{"NONE":"无分组","AUTO":"自动分组","CODELIST":"分组代码表"}},"groupPSAppDEField":{"desc":"分组应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"groupPSCodeList":{"desc":"分组代码表","type":"object","schema":"/codelist/IPSCodeList"},"groupPSSysCss":{"desc":"分组默认界面样式","type":"object","schema":"/res/IPSSysCss"},"groupPSSysPFPlugin":{"desc":"分组绘制插件","type":"object","schema":"/res/IPSSysPFPlugin"},"groupPSUIActionGroup":{"desc":"分组界面行为组","type":"object","schema":"/view/IPSUIActionGroup"},"groupWidth":{"desc":"分组宽度","type":"number"},"itemPSLayoutPanel":{"desc":"项布局面板","type":"object","schema":"/control/panel/IPSLayoutPanel"},"itemPSSysCss":{"desc":"项默认界面样式","type":"object","schema":"/res/IPSSysCss"},"itemPSSysPFPlugin":{"desc":"项绘制插件","type":"object","schema":"/res/IPSSysPFPlugin"},"minorSortDir":{"desc":"默认排序方向","type":"string","enum":{"ASC":"升序","DESC":"降序"}},"minorSortPSAppDEField":{"desc":"默认排序应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"orderValuePSAppDEField":{"desc":"排序值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psDEDataViewDataItems":{"desc":"数据项集合","type":"array","schema":"/control/dataview/IPSDEDataViewDataItem"},"psDEDataViewItems":{"desc":"卡片视图项集合","type":"array","schema":"/control/dataview/IPSDEDataViewItem"},"pagingSize":{"desc":"分页大小","type":"number"},"appendDEItems":{"desc":"附加实体默认数据项","type":"boolean"},"enableCardEdit":{"desc":"支持卡片编辑","type":"boolean"},"enableCardEditGroup":{"desc":"支持卡片分组调整","type":"boolean"},"enableCardEditOrder":{"desc":"支持卡片次序调整","type":"boolean"},"enableCardNew":{"desc":"支持卡片新建","type":"boolean"},"enableGroup":{"desc":"启用分组","type":"boolean"},"enablePagingBar":{"desc":"支持分页栏","type":"boolean"},"noSort":{"desc":"默认禁用排序","type":"boolean"},"singleSelect":{"desc":"单项选择","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/dataview/IPSDEDataViewDataItem.json b/resources/model/control/dataview/IPSDEDataViewDataItem.json new file mode 100644 index 0000000..685de2e --- /dev/null +++ b/resources/model/control/dataview/IPSDEDataViewDataItem.json @@ -0,0 +1 @@ +{"extends":["/data/IPSDataItem"],"frontPSCodeList":{"desc":"前端代码表对象","type":"object","schema":"/codelist/IPSCodeList"},"psAppDEField":{"desc":"关联应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"脚本代码模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/dataview/IPSDEDataViewHandler.json b/resources/model/control/dataview/IPSDEDataViewHandler.json new file mode 100644 index 0000000..89dddab --- /dev/null +++ b/resources/model/control/dataview/IPSDEDataViewHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSMDAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/dataview/IPSDEDataViewItem.json b/resources/model/control/dataview/IPSDEDataViewItem.json new file mode 100644 index 0000000..21ed871 --- /dev/null +++ b/resources/model/control/dataview/IPSDEDataViewItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"cLConvertMode":{"desc":"代码表转换模式","type":"string","enum":{"NONE":"直接值","FRONT":"前台","BACKEND":"后台"}},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"dataItemName":{"desc":"数据项名称","type":"string"},"itemType":{"desc":"项类型","type":"string","enum":{"TEXTITEM":"显示内容项","ACTIONITEM":"操作项","DATAITEM":"数据项"}},"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psCodeList":{"desc":"代码表","type":"object","schema":"/codelist/IPSCodeList"},"psDEUIActionGroup":{"desc":"界面行为组","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"},"valueFormat":{"desc":"值格式化","type":"string"},"enableSort":{"desc":"支持排序","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/dataview/IPSDEDataViewParam.json b/resources/model/control/dataview/IPSDEDataViewParam.json new file mode 100644 index 0000000..cfce46f --- /dev/null +++ b/resources/model/control/dataview/IPSDEDataViewParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/dataview/IPSDEKanban.json b/resources/model/control/dataview/IPSDEKanban.json new file mode 100644 index 0000000..4e27ad4 --- /dev/null +++ b/resources/model/control/dataview/IPSDEKanban.json @@ -0,0 +1 @@ +{"extends":["/control/dataview/IPSDEDataView"],"updateGroupPSControlAction":{"desc":"更新分组行为","type":"object","schema":"/control/IPSControlAction"}} \ No newline at end of file diff --git a/resources/model/control/dataview/IPSDEKanbanHandler.json b/resources/model/control/dataview/IPSDEKanbanHandler.json new file mode 100644 index 0000000..a4d6c94 --- /dev/null +++ b/resources/model/control/dataview/IPSDEKanbanHandler.json @@ -0,0 +1 @@ +{"extends":["/control/dataview/IPSDEDataViewHandler"]} \ No newline at end of file diff --git a/resources/model/control/dataview/IPSDEKanbanParam.json b/resources/model/control/dataview/IPSDEKanbanParam.json new file mode 100644 index 0000000..a707e85 --- /dev/null +++ b/resources/model/control/dataview/IPSDEKanbanParam.json @@ -0,0 +1 @@ +{"extends":["/control/dataview/IPSDEDataViewParam"]} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRBar.json b/resources/model/control/drctrl/IPSDEDRBar.json new file mode 100644 index 0000000..38338bc --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRBar.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDRBar","/control/drctrl/IPSDEDRCtrl"],"psDEDRBarGroups":{"desc":"实体数据关系栏分组集合","type":"array","schema":"/control/drctrl/IPSDEDRBarGroup"}} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRBarGroup.json b/resources/model/control/drctrl/IPSDEDRBarGroup.json new file mode 100644 index 0000000..d821577 --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRBarGroup.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"capPSLanguageRes":{"desc":"标题语言系统对象","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"hidden":{"desc":"隐藏分组","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRBarItem.json b/resources/model/control/drctrl/IPSDEDRBarItem.json new file mode 100644 index 0000000..2f5d8a3 --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRBarItem.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDEDRCtrlItem","/IPSModelObject"],"psDEDRBarGroup":{"desc":"关系栏项分组","type":"object","schema":"/control/drctrl/IPSDEDRBarGroup"}} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRBarParam.json b/resources/model/control/drctrl/IPSDEDRBarParam.json new file mode 100644 index 0000000..c78d18e --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDEDRCtrlParam"]} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRCtrl.json b/resources/model/control/drctrl/IPSDEDRCtrl.json new file mode 100644 index 0000000..a9d0aaa --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRCtrl.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDRCtrl"],"editItemCapPSLanguageRes":{"desc":"编辑项标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"editItemCaption":{"desc":"编辑项标题","type":"string"},"editItemPSSysImage":{"desc":"编辑项图标","type":"object","schema":"/res/IPSSysImage"},"formPSAppView":{"desc":"表单视图对象","type":"object","schema":"/app/view/IPSAppView"},"psDEDRCtrlItems":{"desc":"关系项集合","type":"array","schema":"/control/drctrl/IPSDEDRCtrlItem"},"hideEditItem":{"desc":"隐藏编辑项","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRCtrlItem.json b/resources/model/control/drctrl/IPSDEDRCtrlItem.json new file mode 100644 index 0000000..6125291 --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRCtrlItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSNavigateParamContainer"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"counterId":{"desc":"计数器标识","type":"string"},"psAppView":{"desc":"关联视图","type":"object","schema":"/app/view/IPSAppView"}} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRCtrlParam.json b/resources/model/control/drctrl/IPSDEDRCtrlParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRCtrlParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRTab.json b/resources/model/control/drctrl/IPSDEDRTab.json new file mode 100644 index 0000000..a0ee561 --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRTab.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDRTab","/control/drctrl/IPSDEDRCtrl"],"psDEDRTabPages":{"desc":"关系分页集合","type":"array","schema":"/control/drctrl/IPSDEDRTabPage"}} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRTabPage.json b/resources/model/control/drctrl/IPSDEDRTabPage.json new file mode 100644 index 0000000..096a79d --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRTabPage.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDEDRCtrlItem"]} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDEDRTabParam.json b/resources/model/control/drctrl/IPSDEDRTabParam.json new file mode 100644 index 0000000..c78d18e --- /dev/null +++ b/resources/model/control/drctrl/IPSDEDRTabParam.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDEDRCtrlParam"]} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDRBar.json b/resources/model/control/drctrl/IPSDRBar.json new file mode 100644 index 0000000..3ecd66e --- /dev/null +++ b/resources/model/control/drctrl/IPSDRBar.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDRCtrl","/control/IPSControlContainer"],"title":{"desc":"抬头","type":"string"},"titlePSLanguageRes":{"desc":"抬头语言资源","type":"object","schema":"/res/IPSLanguageRes"},"showTitle":{"desc":"显示标题","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDRCtrl.json b/resources/model/control/drctrl/IPSDRCtrl.json new file mode 100644 index 0000000..a0b0897 --- /dev/null +++ b/resources/model/control/drctrl/IPSDRCtrl.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl"],"psAppCounterRef":{"desc":"应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"}} \ No newline at end of file diff --git a/resources/model/control/drctrl/IPSDRTab.json b/resources/model/control/drctrl/IPSDRTab.json new file mode 100644 index 0000000..2de5af6 --- /dev/null +++ b/resources/model/control/drctrl/IPSDRTab.json @@ -0,0 +1 @@ +{"extends":["/control/drctrl/IPSDRCtrl"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSAutoComplete.json b/resources/model/control/editor/IPSAutoComplete.json new file mode 100644 index 0000000..43c9c42 --- /dev/null +++ b/resources/model/control/editor/IPSAutoComplete.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxEditor","/control/IPSNavigateParamContainer"],"aCMinChars":{"desc":"触发自填最小字符数[ACMINCHARS]","type":"number"},"contextJOString":{"desc":"附加上下文Json字符串","type":"string"},"itemParamJO":{"desc":"项参数对象","type":"object"},"psAppDEACMode":{"desc":"应用实体自填模式对象","type":"object","schema":"/app/dataentity/IPSAppDEACMode"},"psAppDEDataSet":{"desc":"应用实体结果集对象","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psUIActionGroup":{"desc":"相关界面行为组","type":"object","schema":"/view/IPSUIActionGroup"},"paramJOString":{"desc":"附加参数Json字符串","type":"string"},"enableAC":{"desc":"支持自动填充","type":"boolean"},"forceSelection":{"desc":"必须为选择数据","type":"boolean"},"showTrigger":{"desc":"显示下拉按钮","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSBarCode2DReader.json b/resources/model/control/editor/IPSBarCode2DReader.json new file mode 100644 index 0000000..e0363b9 --- /dev/null +++ b/resources/model/control/editor/IPSBarCode2DReader.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSBarCodeReader"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSBarCodeReader.json b/resources/model/control/editor/IPSBarCodeReader.json new file mode 100644 index 0000000..62a7b5d --- /dev/null +++ b/resources/model/control/editor/IPSBarCodeReader.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSCheckBox.json b/resources/model/control/editor/IPSCheckBox.json new file mode 100644 index 0000000..62a7b5d --- /dev/null +++ b/resources/model/control/editor/IPSCheckBox.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSCheckBoxList.json b/resources/model/control/editor/IPSCheckBoxList.json new file mode 100644 index 0000000..e8242ec --- /dev/null +++ b/resources/model/control/editor/IPSCheckBoxList.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSCodeListEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSCode.json b/resources/model/control/editor/IPSCode.json new file mode 100644 index 0000000..09f56ec --- /dev/null +++ b/resources/model/control/editor/IPSCode.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSTextEditor"],"codeType":{"desc":"代码类型[CODETYPE]","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSCodeListEditor.json b/resources/model/control/editor/IPSCodeListEditor.json new file mode 100644 index 0000000..123da02 --- /dev/null +++ b/resources/model/control/editor/IPSCodeListEditor.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"],"psAppCodeList":{"desc":"应用代码表对象","type":"object","schema":"/app/codelist/IPSAppCodeList"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSDatePicker.json b/resources/model/control/editor/IPSDatePicker.json new file mode 100644 index 0000000..e7e3a60 --- /dev/null +++ b/resources/model/control/editor/IPSDatePicker.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"],"dateTimeFormat":{"desc":"日期时间格式","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSDateRange.json b/resources/model/control/editor/IPSDateRange.json new file mode 100644 index 0000000..95bc1d6 --- /dev/null +++ b/resources/model/control/editor/IPSDateRange.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSDatePicker"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSDropDownList.json b/resources/model/control/editor/IPSDropDownList.json new file mode 100644 index 0000000..2683bd5 --- /dev/null +++ b/resources/model/control/editor/IPSDropDownList.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSCodeListEditor"],"singleSelect":{"desc":"单项选择模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSFileUploader.json b/resources/model/control/editor/IPSFileUploader.json new file mode 100644 index 0000000..40f3621 --- /dev/null +++ b/resources/model/control/editor/IPSFileUploader.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSValueItemEditor"],"fileExts":{"desc":"文件后缀[FILEEXTS]","type":"string"},"maxFileCount":{"desc":"最大文件数量[MAXFILECNT]","type":"number"},"maxFileSize":{"desc":"最大文件大小[MAXFILESIZE]","type":"number"},"minFileCount":{"desc":"最小文件数量[MINFILECNT]","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSHidden.json b/resources/model/control/editor/IPSHidden.json new file mode 100644 index 0000000..62a7b5d --- /dev/null +++ b/resources/model/control/editor/IPSHidden.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSHtml.json b/resources/model/control/editor/IPSHtml.json new file mode 100644 index 0000000..62a7b5d --- /dev/null +++ b/resources/model/control/editor/IPSHtml.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSIPAddress.json b/resources/model/control/editor/IPSIPAddress.json new file mode 100644 index 0000000..62a7b5d --- /dev/null +++ b/resources/model/control/editor/IPSIPAddress.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSListBox.json b/resources/model/control/editor/IPSListBox.json new file mode 100644 index 0000000..e8242ec --- /dev/null +++ b/resources/model/control/editor/IPSListBox.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSCodeListEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSListBoxPicker.json b/resources/model/control/editor/IPSListBoxPicker.json new file mode 100644 index 0000000..3238fbf --- /dev/null +++ b/resources/model/control/editor/IPSListBoxPicker.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSPickerEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSMDropDownList.json b/resources/model/control/editor/IPSMDropDownList.json new file mode 100644 index 0000000..3d0da6c --- /dev/null +++ b/resources/model/control/editor/IPSMDropDownList.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSDropDownList"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSMPicker.json b/resources/model/control/editor/IPSMPicker.json new file mode 100644 index 0000000..022e781 --- /dev/null +++ b/resources/model/control/editor/IPSMPicker.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSPicker"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSMailAddress.json b/resources/model/control/editor/IPSMailAddress.json new file mode 100644 index 0000000..3238fbf --- /dev/null +++ b/resources/model/control/editor/IPSMailAddress.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSPickerEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSMarkdown.json b/resources/model/control/editor/IPSMarkdown.json new file mode 100644 index 0000000..82f4e4c --- /dev/null +++ b/resources/model/control/editor/IPSMarkdown.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSTextEditor"],"mode":{"desc":"功能模式[MODE]{EDIT|PREVIEW|SUBFIELD|PREVIEWONLY}","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSNumberEditor.json b/resources/model/control/editor/IPSNumberEditor.json new file mode 100644 index 0000000..675e0e2 --- /dev/null +++ b/resources/model/control/editor/IPSNumberEditor.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"],"maxValue":{"desc":"最大值[MAXVALUE]","type":"number"},"minValue":{"desc":"最小值[MINVALUE]","type":"number"},"psSysValueRule":{"desc":"值规则","type":"object","schema":"/valuerule/IPSSysValueRule"},"precision":{"desc":"浮点精度[PRECISION]","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSNumberRange.json b/resources/model/control/editor/IPSNumberRange.json new file mode 100644 index 0000000..d72ebf2 --- /dev/null +++ b/resources/model/control/editor/IPSNumberRange.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSNumberEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSOffice.json b/resources/model/control/editor/IPSOffice.json new file mode 100644 index 0000000..62a7b5d --- /dev/null +++ b/resources/model/control/editor/IPSOffice.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSOffice2.json b/resources/model/control/editor/IPSOffice2.json new file mode 100644 index 0000000..a2f61cd --- /dev/null +++ b/resources/model/control/editor/IPSOffice2.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor","/control/editor/IPSValueItemEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSPassword.json b/resources/model/control/editor/IPSPassword.json new file mode 100644 index 0000000..ca9f446 --- /dev/null +++ b/resources/model/control/editor/IPSPassword.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSTextEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSPicker.json b/resources/model/control/editor/IPSPicker.json new file mode 100644 index 0000000..006a90a --- /dev/null +++ b/resources/model/control/editor/IPSPicker.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSPickerEditor","/control/editor/IPSAutoComplete"],"dropDownViewHeight":{"desc":"下拉视图高度[DROPDOWNVIEWHEIGHT]","type":"number"},"dropDownViewWidth":{"desc":"下拉视图宽度[DROPDOWNVIEWWIDTH]","type":"number"},"linkPSAppView":{"desc":"数据链接视图","type":"object","schema":"/app/view/IPSAppView"},"dropDownView":{"desc":"下拉选择视图","type":"boolean"},"enableLinkView":{"desc":"支持链接视图","type":"boolean"},"enablePickupView":{"desc":"支持选择视图","type":"boolean"},"singleSelect":{"desc":"单项选择","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSPickerEditor.json b/resources/model/control/editor/IPSPickerEditor.json new file mode 100644 index 0000000..6d45b2e --- /dev/null +++ b/resources/model/control/editor/IPSPickerEditor.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor","/control/IPSNavigateParamContainer"],"contextJOString":{"desc":"附加上下文Json字符串","type":"string"},"itemParamJO":{"desc":"项参数对象","type":"object"},"paramJOString":{"desc":"附加参数Json字符串","type":"string"},"pickupPSAppView":{"desc":"选择视图","type":"object","schema":"/app/view/IPSAppView"},"enablePickupView":{"desc":"支持选择视图","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSPickupView.json b/resources/model/control/editor/IPSPickupView.json new file mode 100644 index 0000000..43f149e --- /dev/null +++ b/resources/model/control/editor/IPSPickupView.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSPickerEditor","/control/editor/IPSValueItemEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSPicture.json b/resources/model/control/editor/IPSPicture.json new file mode 100644 index 0000000..1f63bc8 --- /dev/null +++ b/resources/model/control/editor/IPSPicture.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSValueItemEditor"],"rawContent":{"desc":"直接内容存储","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSRadioButtonList.json b/resources/model/control/editor/IPSRadioButtonList.json new file mode 100644 index 0000000..e8242ec --- /dev/null +++ b/resources/model/control/editor/IPSRadioButtonList.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSCodeListEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSRating.json b/resources/model/control/editor/IPSRating.json new file mode 100644 index 0000000..e8b7b66 --- /dev/null +++ b/resources/model/control/editor/IPSRating.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSStepper"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSRaw.json b/resources/model/control/editor/IPSRaw.json new file mode 100644 index 0000000..c422182 --- /dev/null +++ b/resources/model/control/editor/IPSRaw.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"],"contentType":{"desc":"内容类型[CONTENTTYPE]{RAW|HTML|IMAGE|MARKDOWN}","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSSlider.json b/resources/model/control/editor/IPSSlider.json new file mode 100644 index 0000000..e8b7b66 --- /dev/null +++ b/resources/model/control/editor/IPSSlider.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSStepper"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSSpan.json b/resources/model/control/editor/IPSSpan.json new file mode 100644 index 0000000..cdeea2c --- /dev/null +++ b/resources/model/control/editor/IPSSpan.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSCodeListEditor"],"linkPSAppView":{"desc":"数据链接视图","type":"object","schema":"/app/view/IPSAppView"},"precision":{"desc":"浮点精度[PRECISION]","type":"number"},"enableLinkView":{"desc":"支持链接视图","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSStepper.json b/resources/model/control/editor/IPSStepper.json new file mode 100644 index 0000000..f126ff0 --- /dev/null +++ b/resources/model/control/editor/IPSStepper.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSNumberEditor"],"stepValue":{"desc":"步进值[STEPVALUE]","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSTextArea.json b/resources/model/control/editor/IPSTextArea.json new file mode 100644 index 0000000..ca9f446 --- /dev/null +++ b/resources/model/control/editor/IPSTextArea.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSTextEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSTextBox.json b/resources/model/control/editor/IPSTextBox.json new file mode 100644 index 0000000..8542325 --- /dev/null +++ b/resources/model/control/editor/IPSTextBox.json @@ -0,0 +1 @@ +{"extends":["/control/editor/IPSTextEditor","/control/editor/IPSNumberEditor"]} \ No newline at end of file diff --git a/resources/model/control/editor/IPSTextEditor.json b/resources/model/control/editor/IPSTextEditor.json new file mode 100644 index 0000000..f382fc0 --- /dev/null +++ b/resources/model/control/editor/IPSTextEditor.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"],"maxLength":{"desc":"最大长度[MAXLENGTH]","type":"number"},"minLength":{"desc":"最小长度[MINLENGTH]","type":"number"},"psSysValueRule":{"desc":"值规则","type":"object","schema":"/valuerule/IPSSysValueRule"},"showMaxLength":{"desc":"显示最大长度[SHOWMAXLENGTH]","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/editor/IPSValueItemEditor.json b/resources/model/control/editor/IPSValueItemEditor.json new file mode 100644 index 0000000..e6c1305 --- /dev/null +++ b/resources/model/control/editor/IPSValueItemEditor.json @@ -0,0 +1 @@ +{"extends":["/control/IPSEditor"],"valueItemName":{"desc":"值项名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSCalendarExpBar.json b/resources/model/control/expbar/IPSCalendarExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSCalendarExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSCalendarExpBarParam.json b/resources/model/control/expbar/IPSCalendarExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSCalendarExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSChartExpBar.json b/resources/model/control/expbar/IPSChartExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSChartExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSChartExpBarParam.json b/resources/model/control/expbar/IPSChartExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSChartExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSDataViewExpBar.json b/resources/model/control/expbar/IPSDataViewExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSDataViewExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSDataViewExpBarParam.json b/resources/model/control/expbar/IPSDataViewExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSDataViewExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSExpBar.json b/resources/model/control/expbar/IPSExpBar.json new file mode 100644 index 0000000..86a40f5 --- /dev/null +++ b/resources/model/control/expbar/IPSExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl","/control/IPSControlContainer"],"psAppCounterRef":{"desc":"应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"},"title":{"desc":"抬头","type":"string"},"titlePSLanguageRes":{"desc":"抬头语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"xDataControlName":{"desc":"导航栏数据部件名称","type":"string"},"enableCounter":{"desc":"支持计数器","type":"boolean"},"enableSearch":{"desc":"支持搜索","type":"boolean"},"showTitleBar":{"desc":"显示标题栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSExpBarParam.json b/resources/model/control/expbar/IPSExpBarParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/expbar/IPSExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSGanttExpBar.json b/resources/model/control/expbar/IPSGanttExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSGanttExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSGanttExpBarParam.json b/resources/model/control/expbar/IPSGanttExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSGanttExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSGridExpBar.json b/resources/model/control/expbar/IPSGridExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSGridExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSGridExpBarParam.json b/resources/model/control/expbar/IPSGridExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSGridExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSListExpBar.json b/resources/model/control/expbar/IPSListExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSListExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSListExpBarParam.json b/resources/model/control/expbar/IPSListExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSListExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSMapExpBar.json b/resources/model/control/expbar/IPSMapExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSMapExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSMapExpBarParam.json b/resources/model/control/expbar/IPSMapExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSMapExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSTabExpPage.json b/resources/model/control/expbar/IPSTabExpPage.json new file mode 100644 index 0000000..4135c3f --- /dev/null +++ b/resources/model/control/expbar/IPSTabExpPage.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl","/control/IPSNavigateParamContainer"],"counterId":{"type":"string"},"navPSDER":{"type":"object","schema":"/dataentity/der/IPSDERBase"},"psAppCounterRef":{"type":"object","schema":"/app/control/IPSAppCounterRef"},"psSysImage":{"type":"object","schema":"/res/IPSSysImage"},"parentDataJO":{"desc":"视图父数据对象","type":"object"}} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSTabExpPanel.json b/resources/model/control/expbar/IPSTabExpPanel.json new file mode 100644 index 0000000..80e1ca4 --- /dev/null +++ b/resources/model/control/expbar/IPSTabExpPanel.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl","/control/IPSControlContainer"],"psTabExpPages":{"desc":"导航面板分页集合","type":"array","schema":"/control/expbar/IPSTabExpPage"},"tabLayout":{"desc":"导航面板布局","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSTabExpPanelParam.json b/resources/model/control/expbar/IPSTabExpPanelParam.json new file mode 100644 index 0000000..8694565 --- /dev/null +++ b/resources/model/control/expbar/IPSTabExpPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSTreeExpBar.json b/resources/model/control/expbar/IPSTreeExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSTreeExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSTreeExpBarParam.json b/resources/model/control/expbar/IPSTreeExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSTreeExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSWFExpBar.json b/resources/model/control/expbar/IPSWFExpBar.json new file mode 100644 index 0000000..2f34ee6 --- /dev/null +++ b/resources/model/control/expbar/IPSWFExpBar.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBar"]} \ No newline at end of file diff --git a/resources/model/control/expbar/IPSWFExpBarParam.json b/resources/model/control/expbar/IPSWFExpBarParam.json new file mode 100644 index 0000000..45bce37 --- /dev/null +++ b/resources/model/control/expbar/IPSWFExpBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/expbar/IPSExpBarParam"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEEditForm.json b/resources/model/control/form/IPSDEEditForm.json new file mode 100644 index 0000000..f749686 --- /dev/null +++ b/resources/model/control/form/IPSDEEditForm.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEForm","/control/IPSSDAjaxControl"],"createPSControlAction":{"desc":"建立数据行为","type":"object","schema":"/control/IPSControlAction"},"getDraftFromPSControlAction":{"desc":"获取草稿数据行为(拷贝)","type":"object","schema":"/control/IPSControlAction"},"getDraftPSControlAction":{"desc":"获取草稿数据行为","type":"object","schema":"/control/IPSControlAction"},"getPSControlAction":{"desc":"获取数据行为","type":"object","schema":"/control/IPSControlAction"},"removePSControlAction":{"desc":"删除数据行为","type":"object","schema":"/control/IPSControlAction"},"updatePSControlAction":{"desc":"更新数据行为","type":"object","schema":"/control/IPSControlAction"},"enableAutoSave":{"desc":"支持自动保存","type":"boolean"},"infoFormMode":{"desc":"信息表单","type":"boolean"},"showFormNavBar":{"desc":"显示表单导航栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEEditFormHandler.json b/resources/model/control/form/IPSDEEditFormHandler.json new file mode 100644 index 0000000..58759ea --- /dev/null +++ b/resources/model/control/form/IPSDEEditFormHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSSDAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEEditFormItem.json b/resources/model/control/form/IPSDEEditFormItem.json new file mode 100644 index 0000000..672b215 --- /dev/null +++ b/resources/model/control/form/IPSDEEditFormItem.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormItem"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEEditFormParam.json b/resources/model/control/form/IPSDEEditFormParam.json new file mode 100644 index 0000000..57bed7d --- /dev/null +++ b/resources/model/control/form/IPSDEEditFormParam.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormParam","/control/IPSSDAjaxControlParam"],"enableAutoSave":{"desc":"自动保存","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFDCatGroupLogic.json b/resources/model/control/form/IPSDEFDCatGroupLogic.json new file mode 100644 index 0000000..9b524f9 --- /dev/null +++ b/resources/model/control/form/IPSDEFDCatGroupLogic.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFDGroupLogic"],"getRelatedDetailNames":{"desc":"关联成员名称集合","type":"array","schema":"string"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFDGroupLogic.json b/resources/model/control/form/IPSDEFDGroupLogic.json new file mode 100644 index 0000000..f0c1baf --- /dev/null +++ b/resources/model/control/form/IPSDEFDGroupLogic.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFDLogic"],"groupOP":{"desc":"组逻辑","type":"string"},"psDEFDLogics":{"desc":"逻辑项集合","type":"array","schema":"/control/form/IPSDEFDLogic"},"notMode":{"desc":"逻辑取反","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFDLogic.json b/resources/model/control/form/IPSDEFDLogic.json new file mode 100644 index 0000000..4b5ff13 --- /dev/null +++ b/resources/model/control/form/IPSDEFDLogic.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"logicCat":{"desc":"逻辑类别","type":"string","enum":{"PANELVISIBLE":"面板显示","ITEMENABLE":"表单项启用","ITEMBLANK":"表单项空输入"}},"logicType":{"desc":"逻辑类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFDSingleLogic.json b/resources/model/control/form/IPSDEFDSingleLogic.json new file mode 100644 index 0000000..ccb77e7 --- /dev/null +++ b/resources/model/control/form/IPSDEFDSingleLogic.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFDLogic"],"condOP":{"desc":"条件操作","type":"string"},"dEFDName":{"desc":"表单项名称","type":"string"},"value":{"desc":"条件值","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFFormItem.json b/resources/model/control/form/IPSDEFFormItem.json new file mode 100644 index 0000000..ba0b363 --- /dev/null +++ b/resources/model/control/form/IPSDEFFormItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFUIItem"],"editorHeight":{"desc":"编辑器高度","type":"number"},"editorWidth":{"desc":"编辑器宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFIUpdateDetail.json b/resources/model/control/form/IPSDEFIUpdateDetail.json new file mode 100644 index 0000000..51a7ed6 --- /dev/null +++ b/resources/model/control/form/IPSDEFIUpdateDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"name":{"desc":"更新表单项","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFSearchFormItem.json b/resources/model/control/form/IPSDEFSearchFormItem.json new file mode 100644 index 0000000..a4c1dbe --- /dev/null +++ b/resources/model/control/form/IPSDEFSearchFormItem.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFFormItem"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEForm.json b/resources/model/control/form/IPSDEForm.json new file mode 100644 index 0000000..7cf53be --- /dev/null +++ b/resources/model/control/form/IPSDEForm.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl","/control/layout/IPSLayoutContainer","/control/IPSControlContainer"],"defaultLabelWidth":{"desc":"默认标签宽度","type":"number"},"formFuncMode":{"desc":"表单功能模式","type":"string"},"formStyle":{"desc":"表单样式","type":"string"},"formWidth":{"desc":"表单宽度","type":"number"},"psDEFormItemUpdates":{"desc":"表单项更新集合","type":"array","schema":"/control/form/IPSDEFormItemUpdate"},"psDEFormItemVRs":{"desc":"表单项值规则集合","type":"array","schema":"/control/form/IPSDEFormItemVR"},"psDEFormItems":{"desc":"表单项集合","type":"array","schema":"/control/form/IPSDEFormItem"},"psDEFormPages":{"desc":"表单分页集合","type":"array","schema":"/control/form/IPSDEFormPage"},"tabHeaderPos":{"desc":"表单分页头部位置","type":"string","enum":{"LEFT":"左边","TOP":"上方","RIGHT":"右边","BOTTOM":"下方"}},"mobileControl":{"desc":"移动端部件","type":"boolean"},"noTabHeader":{"desc":"隐藏分页头部","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormButton.json b/resources/model/control/form/IPSDEFormButton.json new file mode 100644 index 0000000..13e4912 --- /dev/null +++ b/resources/model/control/form/IPSDEFormButton.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/app/view/IPSUIActionItem","/control/IPSNavigateParamContainer"],"actionType":{"desc":"按钮行为类型","type":"string","enum":{"UIACTION":"界面行为","FIUPDATE":"表单项更新"}},"captionItemName":{"desc":"动态标题绑定值项","type":"string"},"psDEFormItemUpdate":{"desc":"调用表单项更新","type":"object","schema":"/control/form/IPSDEFormItemUpdate"},"psUIAction":{"desc":"调用界面行为","type":"object","schema":"/view/IPSUIAction"},"paramPickupPSAppView":{"desc":"参数选择视图","type":"object","schema":"/app/view/IPSAppView"},"paramViewParamJO":{"desc":"参数选择视图参数","type":"object"},"tooltip":{"desc":"操作提示信息","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormDRUIPart.json b/resources/model/control/form/IPSDEFormDRUIPart.json new file mode 100644 index 0000000..ce3eb67 --- /dev/null +++ b/resources/model/control/form/IPSDEFormDRUIPart.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/control/IPSNavigateParamContainer"],"psAppView":{"desc":"嵌入视图","type":"object","schema":"/app/view/IPSAppView"},"paramItem":{"desc":"界面参数项名称","type":"string"},"parentDataJO":{"desc":"父数据对象","type":"object"},"refreshItems":{"desc":"界面刷新触发表单项","type":"string"},"needSave":{"desc":"需要进行保存","type":"boolean"},"refreshItemsSetParamOnly":{"desc":"附加刷新项只赋值不刷新","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormDataItem.json b/resources/model/control/form/IPSDEFormDataItem.json new file mode 100644 index 0000000..0965a9a --- /dev/null +++ b/resources/model/control/form/IPSDEFormDataItem.json @@ -0,0 +1 @@ +{"extends":["/data/IPSDataItem"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormDetail.json b/resources/model/control/form/IPSDEFormDetail.json new file mode 100644 index 0000000..3931603 --- /dev/null +++ b/resources/model/control/form/IPSDEFormDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"contentHeight":{"desc":"内容高度","type":"number"},"contentWidth":{"desc":"内容宽度","type":"number"},"detailStyle":{"desc":"成员样式","type":"string","enum":{"DEFAULT":"默认样式","STYLE2":"样式2","STYLE3":"样式3","STYLE4":"样式4"}},"detailType":{"desc":"成员类型","type":"string","enum":{"FORMPAGE":"表单分页","TABPANEL":"分页部件","TABPAGE":"分页面板","FORMITEM":"表单项","USERCONTROL":"用户控件","FORMPART":"表单部件","GROUPPANEL":"分组面板","DRUIPART":"数据关系界面","RAWITEM":"直接内容","BUTTON":"表单按钮","IFRAME":"直接页面嵌入","FORMITEMEX":"复合表单项","MDCTRL":"多数据部件"}},"height":{"desc":"高度","type":"number"},"labelPSSysCss":{"desc":"表单成员标签样式对象","type":"object","schema":"/res/IPSSysCss"},"psDEFDGroupLogics":{"desc":"表单成员动态逻辑","type":"array","schema":"/control/form/IPSDEFDCatGroupLogic"},"psLayout":{"desc":"布局设置","type":"object","schema":"/control/layout/IPSLayout"},"psLayoutPos":{"desc":"布局位置","type":"object","schema":"/control/layout/IPSLayoutPos"},"psSysCss":{"desc":"表单成员样式对象","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"表单成员图标对象","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"showMoreMgrPSDEFormDetail":{"desc":"显示更多管理者","type":"object","schema":"/control/form/IPSDEFormDetail"},"showMoreMode":{"desc":"显示更多模式","type":"number","enum":{"0":"无","1":"受控内容","2":"管理容器"}},"width":{"desc":"宽度","type":"number"},"repeatContent":{"desc":"重复输出内容","type":"boolean"},"showCaption":{"desc":"显示标题","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormFormPart.json b/resources/model/control/form/IPSDEFormFormPart.json new file mode 100644 index 0000000..6211582 --- /dev/null +++ b/resources/model/control/form/IPSDEFormFormPart.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormGroupPanel"],"formPartType":{"desc":"表单部件类型","type":"string","enum":{"FORMRF":"表单引用","DYNASYS":"动态系统"}}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormGroupBase.json b/resources/model/control/form/IPSDEFormGroupBase.json new file mode 100644 index 0000000..4896b42 --- /dev/null +++ b/resources/model/control/form/IPSDEFormGroupBase.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail"],"captionItemName":{"desc":"动态标题绑定值项","type":"string"},"itemIgnoreInput":{"desc":"成员项忽略输入模式","type":"number"},"psDEFormDetails":{"desc":"成员集合","type":"array","schema":"/control/form/IPSDEFormDetail"},"titleBarCloseMode":{"desc":"标题栏关闭模式","type":"number","enum":{"0":"无关闭","1":"启用关闭(默认打开)","2":"启用关闭(默认关闭)"}},"enableAnchor":{"desc":"提供锚点","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormGroupPanel.json b/resources/model/control/form/IPSDEFormGroupPanel.json new file mode 100644 index 0000000..65ea6df --- /dev/null +++ b/resources/model/control/form/IPSDEFormGroupPanel.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/control/form/IPSDEFormGroupBase"],"actionGroupExtractMode":{"desc":"界面行为组展开模式","type":"string","enum":{"ITEM":"按项展开(默认)","ITEMS":"按分组展开"}},"buildInActions":{"desc":"内建操作","type":"number"},"psUIActionGroup":{"desc":"界面行为组对象","type":"object","schema":"/view/IPSUIActionGroup"},"infoGroupMode":{"desc":"信息面板模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormIFrame.json b/resources/model/control/form/IPSDEFormIFrame.json new file mode 100644 index 0000000..120462c --- /dev/null +++ b/resources/model/control/form/IPSDEFormIFrame.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail"],"iFrameUrl":{"desc":"嵌入Url路径","type":"string"},"linkPSAppView":{"desc":"链接应用视图","type":"object","schema":"/app/view/IPSAppView"},"refreshItems":{"desc":"界面刷新触发表单项","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormItem.json b/resources/model/control/form/IPSDEFormItem.json new file mode 100644 index 0000000..68ea4a7 --- /dev/null +++ b/resources/model/control/form/IPSDEFormItem.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/control/IPSEditorContainer"],"caption":{"desc":"标题","type":"string"},"captionItemName":{"desc":"动态标题绑定值项","type":"string"},"createDV":{"desc":"建立默认值","type":"string"},"createDVT":{"desc":"建立默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据"}},"dataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"enableCond":{"desc":"启用条件","type":"number","enum":{"0":"无","1":"建立","2":"更新","3":"全部"}},"ignoreInput":{"desc":"忽略输入模式","type":"number"},"inputTip":{"desc":"输入提示信息","type":"string"},"inputTipUrl":{"desc":"输入提示链接","type":"string"},"itemHeight":{"desc":"表单项高度","type":"number"},"itemWidth":{"desc":"表单项宽度","type":"number"},"labelPos":{"desc":"标签位置","type":"string","enum":{"LEFT":"左边","TOP":"上方","RIGHT":"右边","BOTTOM":"下方","NONE":"不显示"}},"labelWidth":{"desc":"标签宽度","type":"number"},"noPrivDisplayMode":{"desc":"无权限显示模式","type":"number","enum":{"1":"显示空或*内容","2":"隐藏"}},"outputCodeListConfigMode":{"desc":"输出代码表配置模式","type":"number","enum":{"0":"无","1":"只输出选择项","2":"输出子项"}},"pHPSLanguageRes":{"desc":"输入提示语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psDEFormItemUpdate":{"desc":"表单项更新","type":"object","schema":"/control/form/IPSDEFormItemUpdate"},"psSysImage":{"desc":"表单项图片对象","type":"object","schema":"/res/IPSSysImage"},"resetItemName":{"desc":"重置项名称","type":"string"},"getResetItemNames":{"desc":"重置项名称集合","type":"array","schema":"string"},"unitName":{"desc":"单位名称","type":"string"},"unitNameWidth":{"desc":"单位宽度","type":"number"},"updateDV":{"desc":"更新默认值","type":"string"},"updateDVT":{"desc":"更新默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据"}},"valueFormat":{"desc":"值格式化","type":"string"},"allowEmpty":{"desc":"允许空值输入","type":"boolean"},"compositeItem":{"desc":"复合表单项","type":"boolean"},"convertToCodeItemText":{"desc":"转换为代码项文本","type":"boolean"},"emptyCaption":{"desc":"是否空白标签","type":"boolean"},"enableAnchor":{"desc":"提供锚点","type":"boolean"},"enableInputTip":{"desc":"支持输入提示","type":"boolean"},"enableItemPriv":{"desc":"启用项权限控制","type":"boolean"},"enableUnitName":{"desc":"支持单位","type":"boolean"},"hidden":{"desc":"隐藏表单项","type":"boolean"},"inputTipClosable":{"desc":"输入提示支持关闭","type":"boolean"},"needCodeListConfig":{"desc":"需要代码表配置","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormItemEx.json b/resources/model/control/form/IPSDEFormItemEx.json new file mode 100644 index 0000000..58c3f04 --- /dev/null +++ b/resources/model/control/form/IPSDEFormItemEx.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/control/form/IPSDEFormItem"],"psDEFormItems":{"desc":"表单项成员集合","type":"array","schema":"/control/form/IPSDEFormItem"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormItemUpdate.json b/resources/model/control/form/IPSDEFormItemUpdate.json new file mode 100644 index 0000000..84c65b2 --- /dev/null +++ b/resources/model/control/form/IPSDEFormItemUpdate.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"psAppDEMethod":{"desc":"处理应用实体方法","type":"object","schema":"/app/dataentity/IPSAppDEMethod"},"psDEFIUpdateDetails":{"desc":"表单项更新成员集合","type":"array","schema":"/control/form/IPSDEFIUpdateDetail"},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"自定义脚本代码","type":"boolean"},"showBusyIndicator":{"desc":"显示处理提示","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormItemVR.json b/resources/model/control/form/IPSDEFormItemVR.json new file mode 100644 index 0000000..43356a7 --- /dev/null +++ b/resources/model/control/form/IPSDEFormItemVR.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"checkMode":{"desc":"检查模式","type":"number","enum":{"1":"前台","2":"后台","3":"前后台"}},"psDEFValueRule":{"desc":"属性值规则 ","type":"object","schema":"/dataentity/defield/valuerule/IPSDEFValueRule"},"getPSDEFormItemName":{"desc":"表单项名称","type":"string"},"psSysValueRule":{"desc":"系统值规则","type":"object","schema":"/valuerule/IPSSysValueRule"},"valueRuleType":{"desc":"值规则类型","type":"string","enum":{"DEFVALUERULE":"实体值规则","SYSVALUERULE":"系统值规则"}}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormMDCtrl.json b/resources/model/control/form/IPSDEFormMDCtrl.json new file mode 100644 index 0000000..8374d1a --- /dev/null +++ b/resources/model/control/form/IPSDEFormMDCtrl.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/control/form/IPSDEFormGroupBase"],"buildInActions":{"desc":"内建操作","type":"number","enum":{"1":"新建","2":"更新","4":"删除"}},"contentType":{"desc":"内容类型","type":"string","enum":{"LIST":"列表","FORM":"表单","REPEATER":"重复器"}},"resetItemName":{"desc":"重置项名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormPage.json b/resources/model/control/form/IPSDEFormPage.json new file mode 100644 index 0000000..5017b3c --- /dev/null +++ b/resources/model/control/form/IPSDEFormPage.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/control/form/IPSDEFormGroupPanel"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormParam.json b/resources/model/control/form/IPSDEFormParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/form/IPSDEFormParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormRawItem.json b/resources/model/control/form/IPSDEFormRawItem.json new file mode 100644 index 0000000..d3dda69 --- /dev/null +++ b/resources/model/control/form/IPSDEFormRawItem.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/control/IPSRawItem"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormTabPage.json b/resources/model/control/form/IPSDEFormTabPage.json new file mode 100644 index 0000000..5017b3c --- /dev/null +++ b/resources/model/control/form/IPSDEFormTabPage.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail","/control/form/IPSDEFormGroupPanel"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormTabPanel.json b/resources/model/control/form/IPSDEFormTabPanel.json new file mode 100644 index 0000000..18e524d --- /dev/null +++ b/resources/model/control/form/IPSDEFormTabPanel.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail"],"psDEFormTabPages":{"desc":"分页集合","type":"array","schema":"/control/form/IPSDEFormTabPage"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEFormUserControl.json b/resources/model/control/form/IPSDEFormUserControl.json new file mode 100644 index 0000000..48b90b0 --- /dev/null +++ b/resources/model/control/form/IPSDEFormUserControl.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormDetail"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDESearchForm.json b/resources/model/control/form/IPSDESearchForm.json new file mode 100644 index 0000000..4575a28 --- /dev/null +++ b/resources/model/control/form/IPSDESearchForm.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEForm"],"searchButtonPos":{"desc":"搜索按钮位置","type":"string","enum":{"RIGHT":"右边","BOTTOM":"下方"}},"searchButtonStyle":{"desc":"搜索按钮样式","type":"string","enum":{"DEFAULT":"默认","NONE":"不显示","SEARCHONLY":"只有搜索","USER":"用户自定义","USER2":"用户自定义2"}},"enableAdvanceSearch":{"desc":"支持高级搜索","type":"boolean"},"enableAutoSearch":{"desc":"支持自动搜索","type":"boolean"},"enableFilterSave":{"desc":"支持条件保存","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDESearchFormHandler.json b/resources/model/control/form/IPSDESearchFormHandler.json new file mode 100644 index 0000000..0fb0144 --- /dev/null +++ b/resources/model/control/form/IPSDESearchFormHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDESearchFormItem.json b/resources/model/control/form/IPSDESearchFormItem.json new file mode 100644 index 0000000..672b215 --- /dev/null +++ b/resources/model/control/form/IPSDESearchFormItem.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormItem"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDESearchFormParam.json b/resources/model/control/form/IPSDESearchFormParam.json new file mode 100644 index 0000000..03cc3ac --- /dev/null +++ b/resources/model/control/form/IPSDESearchFormParam.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEFormParam"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEWizardEditForm.json b/resources/model/control/form/IPSDEWizardEditForm.json new file mode 100644 index 0000000..d53d814 --- /dev/null +++ b/resources/model/control/form/IPSDEWizardEditForm.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEEditForm"],"goBackPSControlAction":{"desc":"回退数据行为","type":"object","schema":"/control/IPSControlAction"},"psDEWizardForm":{"desc":"实体向导表单对象","type":"object","schema":"/dataentity/wizard/IPSDEWizardForm"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSDEWizardEditFormParam.json b/resources/model/control/form/IPSDEWizardEditFormParam.json new file mode 100644 index 0000000..e4bb717 --- /dev/null +++ b/resources/model/control/form/IPSDEWizardEditFormParam.json @@ -0,0 +1 @@ +{"extends":["/control/form/IPSDEEditFormParam"],"psDEWizardForm":{"desc":"向导表单","type":"object","schema":"/dataentity/wizard/IPSDEWizardForm"}} \ No newline at end of file diff --git a/resources/model/control/form/IPSFIDEFValueRule.json b/resources/model/control/form/IPSFIDEFValueRule.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/control/form/IPSFIDEFValueRule.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/resources/model/control/form/IPSWFEditForm.json b/resources/model/control/form/IPSWFEditForm.json new file mode 100644 index 0000000..3917fe5 --- /dev/null +++ b/resources/model/control/form/IPSWFEditForm.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"],"wFStartPSControlAction":{"desc":"流程启动行为","type":"object","schema":"/control/IPSControlAction"},"wFSubmitPSControlAction":{"desc":"流程提交行为","type":"object","schema":"/control/IPSControlAction"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEFGridColumn.json b/resources/model/control/grid/IPSDEFGridColumn.json new file mode 100644 index 0000000..0d7ce5c --- /dev/null +++ b/resources/model/control/grid/IPSDEFGridColumn.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFUIItem"],"cLConvertMode":{"desc":"代码表输出模式","type":"string","enum":{"NONE":"直接值","FRONT":"前台","BACKEND":"后台"}},"columnAlign":{"desc":"表格列对齐","type":"string","enum":{"LEFT":"左对齐","CENTER":"居中","RIGHT":"右对齐"}},"columnWidth":{"desc":"列宽度","type":"number"},"enableCond":{"desc":"启用条件","type":"number","enum":{"0":"无","1":"建立","2":"更新","3":"全部"}},"renderPSSysPFPlugin":{"desc":"列绘制前端模板插件","type":"object","schema":"/res/IPSSysPFPlugin"},"enableSort":{"desc":"支持排序","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGEIUpdateDetail.json b/resources/model/control/grid/IPSDEGEIUpdateDetail.json new file mode 100644 index 0000000..3a8851d --- /dev/null +++ b/resources/model/control/grid/IPSDEGEIUpdateDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"name":{"desc":"更新表格列","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGrid.json b/resources/model/control/grid/IPSDEGrid.json new file mode 100644 index 0000000..1f51340 --- /dev/null +++ b/resources/model/control/grid/IPSDEGrid.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControl","/control/IPSControlContainer","/control/IPSControlNavigatable","/control/IPSMDControl2"],"aggMode":{"desc":"表格聚合模式","type":"string","enum":{"NONE":"无聚合","PAGE":"当前页本地","ALL":"全部远程"}},"aggPSAppDEDataSet":{"desc":"聚合服务应用实体数据集","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"aggPSAppDataEntity":{"desc":"聚合服务应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"aggPSLayoutPanel":{"desc":"聚合数据布局面板","type":"object","schema":"/control/panel/IPSLayoutPanel"},"columnEnableLink":{"desc":"列链接模式","type":"number","enum":{"0":"不启用","1":"启用","2":"启用(自动判断)"}},"createPSControlAction":{"desc":"建立数据行为","type":"object","schema":"/control/IPSControlAction"},"emptyText":{"desc":"无值显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"getDraftFromPSControlAction":{"desc":"获取草稿数据行为(拷贝)","type":"object","schema":"/control/IPSControlAction"},"getDraftPSControlAction":{"desc":"获取草稿数据行为","type":"object","schema":"/control/IPSControlAction"},"getPSControlAction":{"desc":"获取数据行为","type":"object","schema":"/control/IPSControlAction"},"gridStyle":{"desc":"表格样式","type":"string","enum":{"TREEGRID":"树表格","GROUPGRID":"分组表格","LIST":"单列无头表格(列表)","LIST_SORT":"单列无头表格(列表),支持排序","USER":"用户自定义","USER2":"用户自定义2"}},"groupMode":{"desc":"分组模式","type":"string","enum":{"NONE":"无分组","AUTO":"自动分组","CODELIST":"分组代码表"}},"groupPSAppDEField":{"desc":"分组应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"groupPSCodeList":{"desc":"分组代码表","type":"object","schema":"/codelist/IPSCodeList"},"groupPSDEField":{"desc":"分组实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"minorSortDir":{"desc":"附加排序方向","type":"string","enum":{"ASC":"升序","DESC":"降序"}},"minorSortPSAppDEField":{"desc":"附加排序应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"orderValuePSAppDEField":{"desc":"排序值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psDEGridColumns":{"desc":"表格列集合","type":"array","schema":"/control/grid/IPSDEGridColumn"},"psDEGridDataItems":{"desc":"表格数据项集合","type":"array","schema":"/control/grid/IPSDEGridDataItem"},"psDEGridEditItemUpdates":{"desc":"表格编辑项更新集合","type":"array","schema":"/control/grid/IPSDEGridEditItemUpdate"},"psDEGridEditItemVRs":{"desc":"表格编辑项值规则集合","type":"array","schema":"/control/grid/IPSDEGridEditItemVR"},"psDEGridEditItems":{"desc":"表格编辑项集合","type":"array","schema":"/control/grid/IPSDEGridEditItem"},"pagingSize":{"desc":"分页大小","type":"number"},"removePSControlAction":{"desc":"删除数据行为","type":"object","schema":"/control/IPSControlAction"},"sortMode":{"desc":"排序模式","type":"string","enum":{"REMOTE":"远程排序","LOCAL":"本地排序"}},"updatePSControlAction":{"desc":"更新数据行为","type":"object","schema":"/control/IPSControlAction"},"enableColFilter":{"desc":"启用列过滤器","type":"boolean"},"enableCustomized":{"desc":"支持表格定制","type":"boolean"},"enableGroup":{"desc":"启用分组","type":"boolean"},"enablePagingBar":{"desc":"支持分页栏","type":"boolean"},"enableRowEdit":{"desc":"支持行编辑","type":"boolean"},"enableRowEditOrder":{"desc":"支持行次序调整","type":"boolean"},"enableRowNew":{"desc":"支持行新建","type":"boolean"},"forceFit":{"desc":"适应屏幕宽度","type":"boolean"},"hideHeader":{"desc":"隐藏表格头部","type":"boolean"},"noSort":{"desc":"默认禁用排序","type":"boolean"},"singleSelect":{"desc":"单项选择","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridColumn.json b/resources/model/control/grid/IPSDEGridColumn.json new file mode 100644 index 0000000..249ab4f --- /dev/null +++ b/resources/model/control/grid/IPSDEGridColumn.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"aggField":{"desc":"聚合值存储属性","type":"string"},"aggMode":{"desc":"聚合模式","type":"string","enum":{"NONE":"无聚合","SUM":"合计","AVG":"平均","MAX":"最大值","MIN":"最小值","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"aggValueFormat":{"desc":"聚合值格式化","type":"string"},"align":{"desc":"列对齐","type":"string","enum":{"LEFT":"左对齐","CENTER":"居中","RIGHT":"右对齐"}},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"cellPSSysCss":{"desc":"单元格样式对象","type":"object","schema":"/res/IPSSysCss"},"codeName":{"desc":"代码标识","type":"string"},"columnStyle":{"desc":"表格列样式","type":"string"},"columnType":{"desc":"列类型","type":"string","enum":{"DEFGRIDCOLUMN":"属性列","UAGRIDCOLUMN":"操作列","GROUPGRIDCOLUMN":"属性分组列"}},"dataItemName":{"desc":"列数据项名称","type":"string"},"excelCaption":{"desc":"Excel导出标题","type":"string"},"headerPSSysCss":{"desc":"头部样式对象","type":"object","schema":"/res/IPSSysCss"},"noPrivDisplayMode":{"desc":"无权限显示模式","type":"number","enum":{"1":"显示空或*内容","2":"隐藏"}},"psSysImage":{"desc":"头部图片对象","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"列前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"width":{"desc":"列宽","type":"number"},"widthUnit":{"desc":"列宽单位","type":"string","enum":{"PX":"px","STAR":"*"}},"enableRowEdit":{"desc":"支持行编辑","type":"boolean"},"enableSort":{"desc":"支持排序","type":"boolean"},"hiddenDataItem":{"desc":"隐藏数据项","type":"boolean"},"hideDefault":{"desc":"默认隐藏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridDataItem.json b/resources/model/control/grid/IPSDEGridDataItem.json new file mode 100644 index 0000000..7151a67 --- /dev/null +++ b/resources/model/control/grid/IPSDEGridDataItem.json @@ -0,0 +1 @@ +{"extends":["/data/IPSDataItem"],"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"脚本代码模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridEditItem.json b/resources/model/control/grid/IPSDEGridEditItem.json new file mode 100644 index 0000000..78a46ca --- /dev/null +++ b/resources/model/control/grid/IPSDEGridEditItem.json @@ -0,0 +1 @@ +{"extends":["/IPSObject","/IPSModelObject","/control/IPSEditorContainer"],"caption":{"desc":"标题","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"createDV":{"desc":"建立默认值","type":"string"},"createDVT":{"desc":"建立默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据"}},"enableCond":{"desc":"启用条件","type":"number","enum":{"0":"无","1":"建立","2":"更新","3":"全部"}},"ignoreInput":{"desc":"忽略输入模式","type":"number","enum":{"0":"无","1":"建立","2":"更新","3":"全部"}},"outputCodeListConfigMode":{"desc":"输出代码表配置模式","type":"number","enum":{"0":"无","1":"只输出选择项","2":"输出子项"}},"psAppDEField":{"desc":"列应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psDEGridEditItemUpdate":{"desc":"表格编辑项更新对象","type":"object","schema":"/control/grid/IPSDEGridEditItemUpdate"},"resetItemName":{"desc":"重置项名称","type":"string"},"updateDV":{"desc":"更新默认值","type":"string"},"updateDVT":{"desc":"更新默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据"}},"allowEmpty":{"desc":"允许空值输入","type":"boolean"},"convertToCodeItemText":{"desc":"转化为代码项文本","type":"boolean"},"needCodeListConfig":{"desc":"需要代码表配置","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridEditItemUpdate.json b/resources/model/control/grid/IPSDEGridEditItemUpdate.json new file mode 100644 index 0000000..a0c48bb --- /dev/null +++ b/resources/model/control/grid/IPSDEGridEditItemUpdate.json @@ -0,0 +1 @@ +{"extends":["/IPSObject","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"psAppDEMethod":{"desc":"处理应用实体方法","type":"object","schema":"/app/dataentity/IPSAppDEMethod"},"psDEGEIUpdateDetails":{"desc":"表格编辑项更新成员集合","type":"array","schema":"/control/grid/IPSDEGEIUpdateDetail"},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"自定义脚本代码","type":"boolean"},"showBusyIndicator":{"desc":"显示处理提示","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridEditItemVR.json b/resources/model/control/grid/IPSDEGridEditItemVR.json new file mode 100644 index 0000000..68ba6b5 --- /dev/null +++ b/resources/model/control/grid/IPSDEGridEditItemVR.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"checkMode":{"desc":"检查模式","type":"number","enum":{"1":"前台","2":"后台","3":"前后台"}},"psDEFValueRule":{"desc":"属性值规则 ","type":"object","schema":"/dataentity/defield/valuerule/IPSDEFValueRule"},"getPSDEGridEditItemName":{"desc":"表格编辑项名称","type":"string"},"psSysValueRule":{"desc":"系统值规则","type":"object","schema":"/valuerule/IPSSysValueRule"},"valueRuleType":{"desc":"值规则类型","type":"string","enum":{"DEFVALUERULE":"实体值规则","SYSVALUERULE":"系统值规则"}}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridFieldColumn.json b/resources/model/control/grid/IPSDEGridFieldColumn.json new file mode 100644 index 0000000..9be1506 --- /dev/null +++ b/resources/model/control/grid/IPSDEGridFieldColumn.json @@ -0,0 +1 @@ +{"extends":["/control/grid/IPSDEGridColumn"],"cLConvertMode":{"desc":"代码表输出模式","type":"string","enum":{"NONE":"直接值","FRONT":"前台","BACKEND":"后台"}},"groupItem":{"desc":"数据分组项","type":"string"},"linkPSAppView":{"desc":"链接视图","type":"object","schema":"/app/view/IPSAppView"},"linkValueItem":{"desc":"链接值项","type":"string"},"psAppCodeList":{"desc":"应用代码表","type":"object","schema":"/app/codelist/IPSAppCodeList"},"psAppDEField":{"desc":"列应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psDEUIAction":{"desc":"内置界面行为","type":"object","schema":"/dataentity/uiaction/IPSDEUIAction"},"treeColumnMode":{"desc":"树列模式","type":"number","enum":{"0":"无","1":"文本","2":"值","3":"文本及值","8":"父文本","4":"父值","12":"父文本及父值"}},"valueFormat":{"desc":"值格式化","type":"string"},"enableItemPriv":{"desc":"启用项权限控制","type":"boolean"},"enableLinkView":{"desc":"支持链接视图","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridGroupColumn.json b/resources/model/control/grid/IPSDEGridGroupColumn.json new file mode 100644 index 0000000..d4d19ec --- /dev/null +++ b/resources/model/control/grid/IPSDEGridGroupColumn.json @@ -0,0 +1 @@ +{"extends":["/control/grid/IPSDEGridColumn"],"psDEGridColumns":{"desc":"成员列集合","type":"array","schema":"/control/grid/IPSDEGridColumn"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridHandler.json b/resources/model/control/grid/IPSDEGridHandler.json new file mode 100644 index 0000000..89dddab --- /dev/null +++ b/resources/model/control/grid/IPSDEGridHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSMDAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridParam.json b/resources/model/control/grid/IPSDEGridParam.json new file mode 100644 index 0000000..cfce46f --- /dev/null +++ b/resources/model/control/grid/IPSDEGridParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEGridUAColumn.json b/resources/model/control/grid/IPSDEGridUAColumn.json new file mode 100644 index 0000000..9cc191d --- /dev/null +++ b/resources/model/control/grid/IPSDEGridUAColumn.json @@ -0,0 +1 @@ +{"extends":["/control/grid/IPSDEGridColumn"],"psDEUIActionGroup":{"desc":"界面行为组","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEMultiEditViewPanel.json b/resources/model/control/grid/IPSDEMultiEditViewPanel.json new file mode 100644 index 0000000..578c7b2 --- /dev/null +++ b/resources/model/control/grid/IPSDEMultiEditViewPanel.json @@ -0,0 +1 @@ +{"extends":["/control/grid/IPSDEGrid"],"embeddedPSAppView":{"desc":"嵌入应用视图","type":"object","schema":"/app/view/IPSAppView"},"panelStyle":{"desc":"面板样式","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDEMultiEditViewPanelParam.json b/resources/model/control/grid/IPSDEMultiEditViewPanelParam.json new file mode 100644 index 0000000..f3f2661 --- /dev/null +++ b/resources/model/control/grid/IPSDEMultiEditViewPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/grid/IPSDEGridParam"]} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDETreeGrid.json b/resources/model/control/grid/IPSDETreeGrid.json new file mode 100644 index 0000000..f1be460 --- /dev/null +++ b/resources/model/control/grid/IPSDETreeGrid.json @@ -0,0 +1 @@ +{"extends":["/control/grid/IPSDEGrid"]} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDETreeGridFieldColumn.json b/resources/model/control/grid/IPSDETreeGridFieldColumn.json new file mode 100644 index 0000000..7cc8b94 --- /dev/null +++ b/resources/model/control/grid/IPSDETreeGridFieldColumn.json @@ -0,0 +1 @@ +{"extends":["/control/grid/IPSDEGridFieldColumn"]} \ No newline at end of file diff --git a/resources/model/control/grid/IPSDETreeGridParam.json b/resources/model/control/grid/IPSDETreeGridParam.json new file mode 100644 index 0000000..f3f2661 --- /dev/null +++ b/resources/model/control/grid/IPSDETreeGridParam.json @@ -0,0 +1 @@ +{"extends":["/control/grid/IPSDEGridParam"]} \ No newline at end of file diff --git a/resources/model/control/grid/IPSGEIDEFValueRule.json b/resources/model/control/grid/IPSGEIDEFValueRule.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/control/grid/IPSGEIDEFValueRule.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/resources/model/control/layout/IPSAbsoluteLayout.json b/resources/model/control/layout/IPSAbsoluteLayout.json new file mode 100644 index 0000000..ec41a10 --- /dev/null +++ b/resources/model/control/layout/IPSAbsoluteLayout.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayout"]} \ No newline at end of file diff --git a/resources/model/control/layout/IPSAbsoluteLayoutPos.json b/resources/model/control/layout/IPSAbsoluteLayoutPos.json new file mode 100644 index 0000000..beb4b99 --- /dev/null +++ b/resources/model/control/layout/IPSAbsoluteLayoutPos.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayoutPos"],"bottom":{"desc":"下方位置","type":"number"},"layoutPos":{"desc":"布局占位","type":"string"},"left":{"desc":"左侧位置","type":"number"},"right":{"desc":"右侧位置","type":"number"},"top":{"desc":"上方位置","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSBorderLayout.json b/resources/model/control/layout/IPSBorderLayout.json new file mode 100644 index 0000000..ec41a10 --- /dev/null +++ b/resources/model/control/layout/IPSBorderLayout.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayout"]} \ No newline at end of file diff --git a/resources/model/control/layout/IPSBorderLayoutPos.json b/resources/model/control/layout/IPSBorderLayoutPos.json new file mode 100644 index 0000000..9421c28 --- /dev/null +++ b/resources/model/control/layout/IPSBorderLayoutPos.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayoutPos"]} \ No newline at end of file diff --git a/resources/model/control/layout/IPSFlexLayout.json b/resources/model/control/layout/IPSFlexLayout.json new file mode 100644 index 0000000..4f3ec1d --- /dev/null +++ b/resources/model/control/layout/IPSFlexLayout.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayout"],"align":{"desc":"Flex横轴对齐方向","type":"string","enum":{"flex-start":"左对齐","flex-end":"右对齐","center":"居中","space-between":"space-between","space-around":"space-around"}},"dir":{"desc":"Flex布局方向","type":"string","enum":{"row":"水平居左","row-reverse":"水平居右","column":"垂直从上往下","column-reverse":"垂直从下往上"}},"vAlign":{"desc":"Flex纵轴对齐方向","type":"string","enum":{"flex-start":"上对齐","flex-end":"下对齐","center":"居中","baseline":"baseline","stretch":"stretch"}}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSFlexLayoutPos.json b/resources/model/control/layout/IPSFlexLayoutPos.json new file mode 100644 index 0000000..3b51867 --- /dev/null +++ b/resources/model/control/layout/IPSFlexLayoutPos.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayoutPos"],"grow":{"desc":"Flex延伸","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSGridLayout.json b/resources/model/control/layout/IPSGridLayout.json new file mode 100644 index 0000000..cb4e11d --- /dev/null +++ b/resources/model/control/layout/IPSGridLayout.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayout"],"childColLG":{"desc":"子成员默认列数量(大型)","type":"number"},"childColMD":{"desc":"子成员默认列数量(中型)","type":"number"},"childColSM":{"desc":"子成员默认列数量(小型)","type":"number"},"childColXS":{"desc":"子成员默认列数量(极小)","type":"number"},"columnCount":{"desc":"列数量","type":"number"},"enableCol12ToCol24":{"desc":"启用12列转24列布局","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSGridLayoutPos.json b/resources/model/control/layout/IPSGridLayoutPos.json new file mode 100644 index 0000000..480d5aa --- /dev/null +++ b/resources/model/control/layout/IPSGridLayoutPos.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayoutPos"],"colLG":{"desc":"大型列宽","type":"number"},"colLGOffset":{"desc":"大型偏移","type":"number"},"colMD":{"desc":"中型列宽","type":"number"},"colMDOffset":{"desc":"中型偏移","type":"number"},"colSM":{"desc":"小型列宽","type":"number"},"colSMOffset":{"desc":"小型偏移","type":"number"},"colWidth":{"desc":"固定列宽","type":"number"},"colXS":{"desc":"超小列宽","type":"number"},"colXSOffset":{"desc":"超小偏移","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSLayout.json b/resources/model/control/layout/IPSLayout.json new file mode 100644 index 0000000..68a3566 --- /dev/null +++ b/resources/model/control/layout/IPSLayout.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"layout":{"desc":"布局模式","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSLayoutContainer.json b/resources/model/control/layout/IPSLayoutContainer.json new file mode 100644 index 0000000..57cd9ff --- /dev/null +++ b/resources/model/control/layout/IPSLayoutContainer.json @@ -0,0 +1 @@ +{"psLayout":{"desc":"看板布局","type":"object","schema":"/control/layout/IPSLayout"}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSLayoutItem.json b/resources/model/control/layout/IPSLayoutItem.json new file mode 100644 index 0000000..e20fbd9 --- /dev/null +++ b/resources/model/control/layout/IPSLayoutItem.json @@ -0,0 +1 @@ +{"psLayoutPos":{"desc":"布局位置","type":"object","schema":"/control/layout/IPSLayoutPos"}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSLayoutPos.json b/resources/model/control/layout/IPSLayoutPos.json new file mode 100644 index 0000000..4c90a88 --- /dev/null +++ b/resources/model/control/layout/IPSLayoutPos.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"height":{"desc":"布局高度","type":"number"},"layout":{"desc":"布局模式","type":"string"},"width":{"desc":"布局宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/layout/IPSTableLayout.json b/resources/model/control/layout/IPSTableLayout.json new file mode 100644 index 0000000..ec41a10 --- /dev/null +++ b/resources/model/control/layout/IPSTableLayout.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayout"]} \ No newline at end of file diff --git a/resources/model/control/layout/IPSTableLayoutPos.json b/resources/model/control/layout/IPSTableLayoutPos.json new file mode 100644 index 0000000..9421c28 --- /dev/null +++ b/resources/model/control/layout/IPSTableLayoutPos.json @@ -0,0 +1 @@ +{"extends":["/control/layout/IPSLayoutPos"]} \ No newline at end of file diff --git a/resources/model/control/list/IPSDEList.json b/resources/model/control/list/IPSDEList.json new file mode 100644 index 0000000..147cfac --- /dev/null +++ b/resources/model/control/list/IPSDEList.json @@ -0,0 +1 @@ +{"extends":["/control/list/IPSList","/control/IPSMDControl2"],"groupMode":{"desc":"分组模式","type":"string","enum":{"NONE":"无分组","AUTO":"自动分组","CODELIST":"分组代码表"}},"groupPSAppDEField":{"desc":"分组应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"groupPSCodeList":{"desc":"分组代码表","type":"object","schema":"/codelist/IPSCodeList"},"minorSortDir":{"desc":"默认排序方向","type":"string","enum":{"ASC":"升序","DESC":"降序"}},"minorSortPSAppDEField":{"desc":"默认排序应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"mobListStyle":{"desc":"移动端列表样式","type":"string","enum":{"ICONVIEW":"图标视图","LISTVIEW":"列表视图","SWIPERVIEW":"图片滑动视图","LISTVIEW2":"列表视图(无刷新)","LISTVIEW3":"列表视图(无滑动)","LISTVIEW4":"列表视图(无背景)","EXTVIEW1":"扩展视图1","EXTVIEW2":"扩展视图2","EXTVIEW3":"扩展视图3","EXTVIEW4":"扩展视图4","EXTVIEW5":"扩展视图5"}},"psDEListDataItems":{"desc":"列表数据项集合","type":"array","schema":"/control/list/IPSDEListDataItem"},"psDEListItems":{"desc":"列表项集合","type":"array","schema":"/control/list/IPSDEListItem"},"pagingSize":{"desc":"分页大小","type":"number"},"enableGroup":{"desc":"启用分组","type":"boolean"},"enableRowEdit":{"desc":"支持行编辑","type":"boolean"},"enableRowEditGroup":{"desc":"支持行分组调整","type":"boolean"},"enableRowEditOrder":{"desc":"支持行次序调整","type":"boolean"},"enableRowNew":{"desc":"支持行新建","type":"boolean"},"noSort":{"desc":"默认禁用排序","type":"boolean"},"showHeader":{"desc":"显示头部","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/list/IPSDEListDataItem.json b/resources/model/control/list/IPSDEListDataItem.json new file mode 100644 index 0000000..82c92b8 --- /dev/null +++ b/resources/model/control/list/IPSDEListDataItem.json @@ -0,0 +1 @@ +{"extends":["/control/list/IPSListDataItem"],"psAppDEField":{"desc":"关联应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/control/list/IPSDEListHandler.json b/resources/model/control/list/IPSDEListHandler.json new file mode 100644 index 0000000..89dddab --- /dev/null +++ b/resources/model/control/list/IPSDEListHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSMDAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/list/IPSDEListItem.json b/resources/model/control/list/IPSDEListItem.json new file mode 100644 index 0000000..4b44bd9 --- /dev/null +++ b/resources/model/control/list/IPSDEListItem.json @@ -0,0 +1 @@ +{"extends":["/control/list/IPSListItem"],"dataItemName":{"desc":"数据项名称","type":"string"},"psDEUIActionGroup":{"desc":"界面行为组","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"},"valueFormat":{"desc":"值格式化","type":"string"},"width":{"desc":"宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/list/IPSDEListParam.json b/resources/model/control/list/IPSDEListParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/list/IPSDEListParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/list/IPSDEMobMDCtrl.json b/resources/model/control/list/IPSDEMobMDCtrl.json new file mode 100644 index 0000000..682d3cc --- /dev/null +++ b/resources/model/control/list/IPSDEMobMDCtrl.json @@ -0,0 +1 @@ +{"extends":["/control/list/IPSDEList"],"psDEUIActionGroup":{"desc":"界面行为组","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"},"psDEUIActionGroup2":{"desc":"界面行为组2","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"},"psDEUIActionGroup3":{"desc":"界面行为组3","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"},"psDEUIActionGroup4":{"desc":"界面行为组4","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"},"psDEUIActionGroup5":{"desc":"界面行为组5","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"},"psDEUIActionGroup6":{"desc":"界面行为组6","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"}} \ No newline at end of file diff --git a/resources/model/control/list/IPSDEMobMDCtrlParam.json b/resources/model/control/list/IPSDEMobMDCtrlParam.json new file mode 100644 index 0000000..aa6316f --- /dev/null +++ b/resources/model/control/list/IPSDEMobMDCtrlParam.json @@ -0,0 +1 @@ +{"extends":["/control/list/IPSDEListParam"]} \ No newline at end of file diff --git a/resources/model/control/list/IPSList.json b/resources/model/control/list/IPSList.json new file mode 100644 index 0000000..0b41877 --- /dev/null +++ b/resources/model/control/list/IPSList.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControl","/control/IPSControlContainer","/control/IPSControlNavigatable"],"emptyText":{"desc":"无值显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"itemPSLayoutPanel":{"desc":"项布局面板","type":"object","schema":"/control/panel/IPSLayoutPanel"}} \ No newline at end of file diff --git a/resources/model/control/list/IPSListDataItem.json b/resources/model/control/list/IPSListDataItem.json new file mode 100644 index 0000000..bffd3a2 --- /dev/null +++ b/resources/model/control/list/IPSListDataItem.json @@ -0,0 +1 @@ +{"extends":["/data/IPSDataItem"],"frontPSCodeList":{"desc":"前端代码表","type":"object","schema":"/codelist/IPSCodeList"},"groupItem":{"desc":"数据分组项","type":"string"},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"脚本代码模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/list/IPSListItem.json b/resources/model/control/list/IPSListItem.json new file mode 100644 index 0000000..73f7c11 --- /dev/null +++ b/resources/model/control/list/IPSListItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"align":{"desc":"对齐方式","type":"string","enum":{"LEFT":"左对齐","CENTER":"居中","RIGHT":"右对齐"}},"cLConvertMode":{"desc":"代码表输出模式","type":"string","enum":{"NONE":"直接值","FRONT":"前台","BACKEND":"后台"}},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"groupItem":{"desc":"数据分组项","type":"string"},"itemPrivId":{"desc":"项权限标识","type":"string"},"itemType":{"desc":"项类型","type":"string","enum":{"TEXTITEM":"显示内容项","ACTIONITEM":"操作项","DATAITEM":"数据项"}},"psSysPFPlugin":{"desc":"列前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"widthString":{"desc":"宽度串","type":"string"},"enableItemPriv":{"desc":"启用项权限控制","type":"boolean"},"enableSort":{"desc":"支持排序","type":"boolean"},"hiddenDataItem":{"desc":"隐藏数据项","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/map/IPSMap.json b/resources/model/control/map/IPSMap.json new file mode 100644 index 0000000..005d8c2 --- /dev/null +++ b/resources/model/control/map/IPSMap.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControl","/control/IPSControlContainer"],"emptyText":{"desc":"无值显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"mapStyle":{"desc":"地图样式","type":"string","enum":{"USER":"用户自定义","USER2":"用户自定义2"}}} \ No newline at end of file diff --git a/resources/model/control/map/IPSMapItem.json b/resources/model/control/map/IPSMapItem.json new file mode 100644 index 0000000..4e71321 --- /dev/null +++ b/resources/model/control/map/IPSMapItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSControlXDataContainer","/control/IPSControlMDataContainer","/control/IPSControlObjectNavigatable","/IPSModelSortable"],"bKColor":{"desc":"默认背景颜色","type":"string"},"borderColor":{"desc":"边框颜色","type":"string"},"borderWidth":{"desc":"边框宽度","type":"number"},"color":{"desc":"默认文本颜色","type":"string"},"itemStyle":{"desc":"项样式","type":"string","enum":{"POINT":"点","POINT2":"点2","POINT3":"点3","POINT4":"点4","LINE":"连线","LINE2":"连线2","LINE3":"连线3","LINE4":"连线4","REGION":"区域","REGION2":"区域2","REGION3":"区域3","REGION4":"区域4","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"itemType":{"desc":"项标识","type":"string"},"maxSize":{"desc":"最大加载项数","type":"number"},"modelObj":{"desc":"代码模型对象","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psDEContextMenu":{"desc":"上下文菜单对象","type":"object","schema":"/control/toolbar/IPSDEContextMenu"},"psSysCss":{"desc":"项界面样式表","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"项图标资源对象","type":"object","schema":"/res/IPSSysImage"},"radius":{"desc":"半径","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/map/IPSMapParam.json b/resources/model/control/map/IPSMapParam.json new file mode 100644 index 0000000..cfce46f --- /dev/null +++ b/resources/model/control/map/IPSMapParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/map/IPSSysMap.json b/resources/model/control/map/IPSSysMap.json new file mode 100644 index 0000000..6f52295 --- /dev/null +++ b/resources/model/control/map/IPSSysMap.json @@ -0,0 +1 @@ +{"extends":["/control/map/IPSMap"],"legendPos":{"desc":"图例位置","type":"string","enum":{"LEFT":"左边","TOP":"上方","RIGHT":"右边","BOTTOM":"下方","NONE":"不显示"}},"psSysMapItems":{"desc":"地图项集合","type":"array","schema":"/control/map/IPSSysMapItem"}} \ No newline at end of file diff --git a/resources/model/control/map/IPSSysMapItem.json b/resources/model/control/map/IPSSysMapItem.json new file mode 100644 index 0000000..dd35da5 --- /dev/null +++ b/resources/model/control/map/IPSSysMapItem.json @@ -0,0 +1 @@ +{"extends":["/control/map/IPSMapItem","/control/IPSControlMDObject"],"altitudePSAppDEField":{"desc":"高度值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"bKColorPSAppDEField":{"desc":"背景颜色应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"colorPSAppDEField":{"desc":"文本颜色应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"contentPSAppDEField":{"desc":"内容应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"groupPSAppDEField":{"desc":"分组值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"iconPSAppDEField":{"desc":"项图标值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"idPSAppDEField":{"desc":"项标识值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"latitudePSAppDEField":{"desc":"维度值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"longitudePSAppDEField":{"desc":"经度值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"orderValuePSAppDEField":{"desc":"排序值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psAppDEDataSet":{"desc":"应用实体数据集","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"removePSAppDEAction":{"desc":"删除数据应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"removePSDEOPPriv":{"desc":"删除要求操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"tag2PSAppDEField":{"desc":"标记值2应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"tagPSAppDEField":{"desc":"标记值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"textPSAppDEField":{"desc":"项文本值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"tipsPSAppDEField":{"desc":"提示应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"}} \ No newline at end of file diff --git a/resources/model/control/map/IPSSysMapParam.json b/resources/model/control/map/IPSSysMapParam.json new file mode 100644 index 0000000..1e5a4ca --- /dev/null +++ b/resources/model/control/map/IPSSysMapParam.json @@ -0,0 +1 @@ +{"extends":["/control/map/IPSMapParam"]} \ No newline at end of file diff --git a/resources/model/control/menu/IPSAppMenu.json b/resources/model/control/menu/IPSAppMenu.json new file mode 100644 index 0000000..767571d --- /dev/null +++ b/resources/model/control/menu/IPSAppMenu.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl","/app/appmenu/IPSAppMenuModel","/control/layout/IPSLayoutContainer"],"appMenuStyle":{"desc":"应用菜单样式","type":"string","enum":{"ICONVIEW":"图标视图","LISTVIEW":"列表视图","SWIPERVIEW":"图片滑动视图","LISTVIEW2":"列表视图(无刷新)","LISTVIEW3":"列表视图(无滑动)","LISTVIEW4":"列表视图(无背景)","EXTVIEW1":"扩展视图1","EXTVIEW2":"扩展视图2","EXTVIEW3":"扩展视图3","EXTVIEW4":"扩展视图4","EXTVIEW5":"扩展视图5","USER":"用户自定义","USER2":"用户自定义2"}},"layoutMode":{"desc":"布局模式","type":"string","enum":{"TABLE":"表格","TABLE_12COL":"栅格布局(12列)","TABLE_24COL":"栅格布局(24列)","FLEX":"Flex布局","BORDER":"边缘布局","ABSOLUTE":"绝对布局"}},"psAppCounterRef":{"desc":"应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"},"psAppMenuItems":{"desc":"菜单项集合","type":"array","schema":"/control/menu/IPSAppMenuItem"}} \ No newline at end of file diff --git a/resources/model/control/menu/IPSAppMenuItem.json b/resources/model/control/menu/IPSAppMenuItem.json new file mode 100644 index 0000000..c768523 --- /dev/null +++ b/resources/model/control/menu/IPSAppMenuItem.json @@ -0,0 +1 @@ +{"extends":["/control/menu/IPSMenuItem","/control/layout/IPSLayoutContainer","/control/layout/IPSLayoutItem","/control/IPSNavigateParamContainer"],"appMenuItemState":{"desc":"菜单项状态","type":"number","enum":{"1":"新功能","2":"热门功能"}},"counterId":{"desc":"计数器标识","type":"string"},"data":{"desc":"项数据","type":"string"},"informTag":{"desc":"菜单项通知标记","type":"string"},"informTag2":{"desc":"菜单项通知标记2","type":"string"},"psAppFunc":{"desc":"应用功能","type":"object","schema":"/app/func/IPSAppFunc"},"psAppMenuItems":{"desc":"菜单项集合","type":"array","schema":"/control/menu/IPSAppMenuItem"},"psSysCss":{"desc":"系统样式","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"系统图片","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"前端应用插件","type":"object","schema":"/res/IPSSysPFPlugin"},"titleBarCloseMode":{"desc":"标题栏关闭模式","type":"number","enum":{"0":"无关闭","1":"启用关闭(默认打开)","2":"启用关闭(默认关闭)"}},"disableClose":{"desc":"禁用关闭","type":"boolean"},"hideSideBar":{"desc":"打开时隐藏边栏","type":"boolean"},"openDefault":{"desc":"默认打开","type":"boolean"},"seperator":{"desc":"分隔栏","type":"boolean"},"valid":{"desc":"启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/menu/IPSAppMenuParam.json b/resources/model/control/menu/IPSAppMenuParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/menu/IPSAppMenuParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/menu/IPSAppMenuRawItem.json b/resources/model/control/menu/IPSAppMenuRawItem.json new file mode 100644 index 0000000..055506a --- /dev/null +++ b/resources/model/control/menu/IPSAppMenuRawItem.json @@ -0,0 +1 @@ +{"extends":["/control/menu/IPSAppMenuItem","/control/IPSRawItem"]} \ No newline at end of file diff --git a/resources/model/control/menu/IPSContextMenu.json b/resources/model/control/menu/IPSContextMenu.json new file mode 100644 index 0000000..fae1217 --- /dev/null +++ b/resources/model/control/menu/IPSContextMenu.json @@ -0,0 +1 @@ +{"extends":["/control/menu/IPSMenu"],"owner":{"desc":"菜单所有者","type":"object"}} \ No newline at end of file diff --git a/resources/model/control/menu/IPSContextMenuParam.json b/resources/model/control/menu/IPSContextMenuParam.json new file mode 100644 index 0000000..3f19377 --- /dev/null +++ b/resources/model/control/menu/IPSContextMenuParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"],"owner":{"desc":"菜单所有者","type":"object"}} \ No newline at end of file diff --git a/resources/model/control/menu/IPSMenu.json b/resources/model/control/menu/IPSMenu.json new file mode 100644 index 0000000..269d31b --- /dev/null +++ b/resources/model/control/menu/IPSMenu.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"]} \ No newline at end of file diff --git a/resources/model/control/menu/IPSMenuItem.json b/resources/model/control/menu/IPSMenuItem.json new file mode 100644 index 0000000..6d04fe4 --- /dev/null +++ b/resources/model/control/menu/IPSMenuItem.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"],"accUserMode":{"desc":"访问用户模式","type":"number","enum":{"0":"未指定","2":"登录用户","3":"匿名用户及登录用户","4":"登录用户且拥有指定资源能力"}},"accessKey":{"desc":"访问标识","type":"string"},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"counterId":{"desc":"计数器标识","type":"string"},"itemType":{"desc":"项类型","type":"string","enum":{"SEPERATOR":"分隔项","USERITEM":"用户自定义项","APPMENUREF":"菜单引用","MENUITEM":"菜单项","RAWITEM":"直接内容项"}},"tooltip":{"desc":"操作提示信息","type":"string"},"tooltipPSLanguageRes":{"desc":"操作提示语言资源","type":"object","schema":"/res/IPSLanguageRes"},"expanded":{"desc":"默认展开菜单","type":"boolean"},"hidden":{"desc":"是否隐藏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSLayoutPanel.json b/resources/model/control/panel/IPSLayoutPanel.json new file mode 100644 index 0000000..0b2d0ed --- /dev/null +++ b/resources/model/control/panel/IPSLayoutPanel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanel"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanel.json b/resources/model/control/panel/IPSPanel.json new file mode 100644 index 0000000..2d7bf63 --- /dev/null +++ b/resources/model/control/panel/IPSPanel.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl","/control/IPSControlContainer","/control/layout/IPSLayoutContainer"],"allPSPanelFields":{"desc":"面板字段项集合","type":"array","schema":"/control/panel/IPSPanelField"},"codeName":{"desc":"代码标识","type":"string"},"dataMode":{"desc":"面板数据模式","type":"number","enum":{"0":"不获取(使用传入数据)","1":"未传入时获取","2":"始终获取","3":"绑定到应用全局变量","4":"绑定到路由视图会话变量","5":"绑定到当前视图会话变量"}},"dataName":{"desc":"数据对象名称","type":"string"},"dataTimer":{"desc":"面板数据刷新模式","type":"number"},"getPSControlAction":{"desc":"获取数据行为","type":"object","schema":"/control/IPSControlAction"},"layoutMode":{"desc":"布局模式","type":"string","enum":{"TABLE":"表格","TABLE_12COL":"栅格布局(12列)","TABLE_24COL":"栅格布局(24列)","FLEX":"Flex布局","BORDER":"边缘布局","ABSOLUTE":"绝对布局"}},"panelStyle":{"desc":"面板样式","type":"string"},"panelWidth":{"desc":"面板宽度","type":"number"},"rootPSPanelItems":{"desc":"面板顶级成员集合","type":"array","schema":"/control/panel/IPSPanelItem"},"layoutPanel":{"desc":"布局面板","type":"boolean"},"mobilePanel":{"desc":"移动端面板","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelButton.json b/resources/model/control/panel/IPSPanelButton.json new file mode 100644 index 0000000..bee1edc --- /dev/null +++ b/resources/model/control/panel/IPSPanelButton.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem","/app/view/IPSUIActionItem","/control/button/IPSButtonContainer"],"actionType":{"desc":"按钮行为类型","type":"string","enum":{"UIACTION":"界面行为","FIUPDATE":"表单项更新"}},"psUIAction":{"desc":"调用界面行为","type":"object","schema":"/view/IPSUIAction"},"tooltip":{"desc":"操作提示信息","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelContainer.json b/resources/model/control/panel/IPSPanelContainer.json new file mode 100644 index 0000000..541fc81 --- /dev/null +++ b/resources/model/control/panel/IPSPanelContainer.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem"],"psPanelItems":{"desc":"成员集合","type":"array","schema":"/control/panel/IPSPanelItem"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelControl.json b/resources/model/control/panel/IPSPanelControl.json new file mode 100644 index 0000000..824fed2 --- /dev/null +++ b/resources/model/control/panel/IPSPanelControl.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem"],"psControl":{"desc":"部件对象","type":"object","schema":"/control/IPSControl"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelCtrlPos.json b/resources/model/control/panel/IPSPanelCtrlPos.json new file mode 100644 index 0000000..d8dab12 --- /dev/null +++ b/resources/model/control/panel/IPSPanelCtrlPos.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelEngine.json b/resources/model/control/panel/IPSPanelEngine.json new file mode 100644 index 0000000..f17b531 --- /dev/null +++ b/resources/model/control/panel/IPSPanelEngine.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelObject","/app/view/IPSAppViewEngine"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelField.json b/resources/model/control/panel/IPSPanelField.json new file mode 100644 index 0000000..bb2715f --- /dev/null +++ b/resources/model/control/panel/IPSPanelField.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem","/control/IPSEditorContainer"],"outputCodeListConfigMode":{"desc":"输出代码表配置模式","type":"number","enum":{"0":"无","1":"只输出选择项","2":"输出子项"}},"psSysImage":{"desc":"属性项图片对象","type":"object","schema":"/res/IPSSysImage"},"valueFormat":{"desc":"值格式化","type":"string"},"allowEmpty":{"desc":"允许空值输入","type":"boolean"},"convertToCodeItemText":{"desc":"转换为代码项文本","type":"boolean"},"hidden":{"desc":"隐藏属性项","type":"boolean"},"needCodeListConfig":{"desc":"需要代码表配置","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelHandler.json b/resources/model/control/panel/IPSPanelHandler.json new file mode 100644 index 0000000..0fb0144 --- /dev/null +++ b/resources/model/control/panel/IPSPanelHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelItem.json b/resources/model/control/panel/IPSPanelItem.json new file mode 100644 index 0000000..95052a8 --- /dev/null +++ b/resources/model/control/panel/IPSPanelItem.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelObject","/control/layout/IPSLayoutItem"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"contentHeight":{"desc":"内容高度","type":"number"},"contentWidth":{"desc":"内容宽度","type":"number"},"height":{"desc":"高度","type":"number"},"itemStyle":{"desc":"成员样式","type":"string","enum":{"DEFAULT":"默认样式","STYLE2":"样式2","STYLE3":"样式3","STYLE4":"样式4"}},"itemType":{"desc":"成员类型","type":"string"},"psLayout":{"desc":"布局设置","type":"object","schema":"/control/layout/IPSLayout"},"psLayoutPos":{"desc":"位置","type":"object","schema":"/control/layout/IPSLayoutPos"},"psPanelItemGroupLogics":{"desc":"面板成员动态逻辑","type":"array","schema":"/control/panel/IPSPanelItemCatGroupLogic"},"psSysCss":{"desc":"界面样式表","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"图片对象","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"width":{"desc":"宽度","type":"number"},"showCaption":{"desc":"显示标题","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelItemCatGroupLogic.json b/resources/model/control/panel/IPSPanelItemCatGroupLogic.json new file mode 100644 index 0000000..e605cd9 --- /dev/null +++ b/resources/model/control/panel/IPSPanelItemCatGroupLogic.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItemGroupLogic"],"getRelatedItemNames":{"desc":"关联成员名称集合","type":"array","schema":"string"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelItemCustomLogic.json b/resources/model/control/panel/IPSPanelItemCustomLogic.json new file mode 100644 index 0000000..b1ecf4e --- /dev/null +++ b/resources/model/control/panel/IPSPanelItemCustomLogic.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItemLogic"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelItemGroupLogic.json b/resources/model/control/panel/IPSPanelItemGroupLogic.json new file mode 100644 index 0000000..dc33859 --- /dev/null +++ b/resources/model/control/panel/IPSPanelItemGroupLogic.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItemLogic"],"groupOP":{"desc":"组逻辑","type":"string"},"psPanelItemLogics":{"desc":"逻辑项集合","type":"array","schema":"/control/panel/IPSPanelItemLogic"},"notMode":{"desc":"逻辑取反","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelItemLogic.json b/resources/model/control/panel/IPSPanelItemLogic.json new file mode 100644 index 0000000..4b5ff13 --- /dev/null +++ b/resources/model/control/panel/IPSPanelItemLogic.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"logicCat":{"desc":"逻辑类别","type":"string","enum":{"PANELVISIBLE":"面板显示","ITEMENABLE":"表单项启用","ITEMBLANK":"表单项空输入"}},"logicType":{"desc":"逻辑类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelItemSingleLogic.json b/resources/model/control/panel/IPSPanelItemSingleLogic.json new file mode 100644 index 0000000..5be8b36 --- /dev/null +++ b/resources/model/control/panel/IPSPanelItemSingleLogic.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItemLogic"],"condOp":{"desc":"条件操作","type":"string"},"dstModelField":{"desc":"模型属性名称","type":"string"},"value":{"desc":"条件值","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelLogic.json b/resources/model/control/panel/IPSPanelLogic.json new file mode 100644 index 0000000..54b7bdc --- /dev/null +++ b/resources/model/control/panel/IPSPanelLogic.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelObject","/app/view/IPSAppViewLogic"],"codeName":{"desc":"代码标识","type":"string"},"eventArg":{"desc":"事件参数","type":"string"},"eventArg2":{"desc":"事件参数2","type":"string"},"eventNames":{"desc":"事件名称","type":"string"},"logicName":{"desc":"逻辑名称","type":"string"},"logicTrigger":{"desc":"逻辑触发","type":"string","enum":{"TIMER":"定时器触发","PANELEVENT":"面板事件触发","CTRLEVENT":"部件事件触发","CUSTOM":"自定义"}},"logicType":{"desc":"触发逻辑类型","type":"string","enum":{"DEUILOGIC":"实体界面逻辑","SYSVIEWLOGIC":"系统预置界面逻辑","PFPLUGIN":"前端扩展插件","SCRIPT":"脚本代码"}},"psAppUILogic":{"desc":"应用预置界面逻辑","type":"object","schema":"/app/logic/IPSAppUILogic"},"timer":{"desc":"定时间隔(ms)","type":"number"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelModel.json b/resources/model/control/panel/IPSPanelModel.json new file mode 100644 index 0000000..c7a3bb9 --- /dev/null +++ b/resources/model/control/panel/IPSPanelModel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelObject"],"codeName":{"desc":"代码标识","type":"string"},"dataType":{"desc":"数据类型","type":"string","enum":{"OBJECT":"对象","OBJECTARRAY":"对象集合","STRING":"字符串","STRINGARRAY":"字符串数组","INT":"整形","INTARRAY":"整形数组","NUMBER":"数值","NUMBERARRAY":"数值数组","BOOL":"布尔值"}},"type":{"desc":"模型类型","type":"string","enum":{"PANELMODEL":"面板定义模型","VIEWMODEL":"视图定义模型","CTRLMODEL":"部件定义模型"}},"ctrlModel":{"desc":"部件模型","type":"boolean"},"panelModel":{"desc":"面板模型","type":"boolean"},"viewModel":{"desc":"视图模型","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelObject.json b/resources/model/control/panel/IPSPanelObject.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/control/panel/IPSPanelObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelParam.json b/resources/model/control/panel/IPSPanelParam.json new file mode 100644 index 0000000..8694565 --- /dev/null +++ b/resources/model/control/panel/IPSPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelRawItem.json b/resources/model/control/panel/IPSPanelRawItem.json new file mode 100644 index 0000000..c1e5f2e --- /dev/null +++ b/resources/model/control/panel/IPSPanelRawItem.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem","/control/IPSRawItem"],"contentType":{"desc":"内容类型","type":"string"},"htmlContent":{"desc":"Html内容","type":"string"},"rawContent":{"desc":"直接内容","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelTabPage.json b/resources/model/control/panel/IPSPanelTabPage.json new file mode 100644 index 0000000..0ab79ee --- /dev/null +++ b/resources/model/control/panel/IPSPanelTabPage.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelContainer"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelTabPanel.json b/resources/model/control/panel/IPSPanelTabPanel.json new file mode 100644 index 0000000..6c039d4 --- /dev/null +++ b/resources/model/control/panel/IPSPanelTabPanel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem"],"psPanelTabPages":{"desc":"分页面板集合","type":"array","schema":"/control/panel/IPSPanelTabPage"}} \ No newline at end of file diff --git a/resources/model/control/panel/IPSPanelUserControl.json b/resources/model/control/panel/IPSPanelUserControl.json new file mode 100644 index 0000000..d8dab12 --- /dev/null +++ b/resources/model/control/panel/IPSPanelUserControl.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysLayoutPanel.json b/resources/model/control/panel/IPSSysLayoutPanel.json new file mode 100644 index 0000000..317f0a1 --- /dev/null +++ b/resources/model/control/panel/IPSSysLayoutPanel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSLayoutPanel","/control/panel/IPSSysPanel"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanel.json b/resources/model/control/panel/IPSSysPanel.json new file mode 100644 index 0000000..0b2d0ed --- /dev/null +++ b/resources/model/control/panel/IPSSysPanel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanel"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelButton.json b/resources/model/control/panel/IPSSysPanelButton.json new file mode 100644 index 0000000..42dcb43 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelButton.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelButton","/control/panel/IPSSysPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelContainer.json b/resources/model/control/panel/IPSSysPanelContainer.json new file mode 100644 index 0000000..fe6177c --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelContainer.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelContainer","/control/panel/IPSSysPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelControl.json b/resources/model/control/panel/IPSSysPanelControl.json new file mode 100644 index 0000000..cadedcb --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelControl.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelControl","/control/panel/IPSSysPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelCtrlPos.json b/resources/model/control/panel/IPSSysPanelCtrlPos.json new file mode 100644 index 0000000..2aa5f77 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelCtrlPos.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelCtrlPos","/control/panel/IPSSysPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelDataItem.json b/resources/model/control/panel/IPSSysPanelDataItem.json new file mode 100644 index 0000000..0965a9a --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelDataItem.json @@ -0,0 +1 @@ +{"extends":["/data/IPSDataItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelField.json b/resources/model/control/panel/IPSSysPanelField.json new file mode 100644 index 0000000..e93e584 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelField.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelField","/control/panel/IPSSysPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelHandler.json b/resources/model/control/panel/IPSSysPanelHandler.json new file mode 100644 index 0000000..c102f21 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelHandler.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelHandler"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelItem.json b/resources/model/control/panel/IPSSysPanelItem.json new file mode 100644 index 0000000..d8dab12 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelItem.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelLogic.json b/resources/model/control/panel/IPSSysPanelLogic.json new file mode 100644 index 0000000..7693b53 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelLogic.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelLogic"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelModel.json b/resources/model/control/panel/IPSSysPanelModel.json new file mode 100644 index 0000000..3a4e848 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelModel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelModel"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelParam.json b/resources/model/control/panel/IPSSysPanelParam.json new file mode 100644 index 0000000..2bff0b1 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelParam"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelRawItem.json b/resources/model/control/panel/IPSSysPanelRawItem.json new file mode 100644 index 0000000..633c7b7 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelRawItem.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelRawItem","/control/panel/IPSSysPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelTabPage.json b/resources/model/control/panel/IPSSysPanelTabPage.json new file mode 100644 index 0000000..aed191d --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelTabPage.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelTabPage","/control/panel/IPSSysPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelTabPanel.json b/resources/model/control/panel/IPSSysPanelTabPanel.json new file mode 100644 index 0000000..3ecc60e --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelTabPanel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSPanelTabPanel","/control/panel/IPSSysPanelItem"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysPanelUserControl.json b/resources/model/control/panel/IPSSysPanelUserControl.json new file mode 100644 index 0000000..c725272 --- /dev/null +++ b/resources/model/control/panel/IPSSysPanelUserControl.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSSysPanelItem","/control/panel/IPSPanelUserControl"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysViewLayoutPanel.json b/resources/model/control/panel/IPSSysViewLayoutPanel.json new file mode 100644 index 0000000..1c3ea4f --- /dev/null +++ b/resources/model/control/panel/IPSSysViewLayoutPanel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSViewLayoutPanel","/control/panel/IPSSysPanel"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSSysViewLayoutPanelParam.json b/resources/model/control/panel/IPSSysViewLayoutPanelParam.json new file mode 100644 index 0000000..cd9750d --- /dev/null +++ b/resources/model/control/panel/IPSSysViewLayoutPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSSysPanelParam"]} \ No newline at end of file diff --git a/resources/model/control/panel/IPSViewLayoutPanel.json b/resources/model/control/panel/IPSViewLayoutPanel.json new file mode 100644 index 0000000..ac79307 --- /dev/null +++ b/resources/model/control/panel/IPSViewLayoutPanel.json @@ -0,0 +1 @@ +{"extends":["/control/panel/IPSSysLayoutPanel"],"layoutBodyOnly":{"desc":"仅布局内容区","type":"boolean"},"useDefaultLayout":{"desc":"使用默认布局","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/reportpanel/IPSDEReportPanel.json b/resources/model/control/reportpanel/IPSDEReportPanel.json new file mode 100644 index 0000000..269d31b --- /dev/null +++ b/resources/model/control/reportpanel/IPSDEReportPanel.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"]} \ No newline at end of file diff --git a/resources/model/control/reportpanel/IPSDEReportPanelParam.json b/resources/model/control/reportpanel/IPSDEReportPanelParam.json new file mode 100644 index 0000000..8694565 --- /dev/null +++ b/resources/model/control/reportpanel/IPSDEReportPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"]} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSearchBar.json b/resources/model/control/searchbar/IPSSearchBar.json new file mode 100644 index 0000000..38995da --- /dev/null +++ b/resources/model/control/searchbar/IPSSearchBar.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlContainer","/control/IPSControl"],"codeName":{"desc":"代码标识","type":"string"},"groupMoreText":{"desc":"更多分组显示文本","type":"string"},"psAppCounterRef":{"desc":"应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"},"psSearchBarFilters":{"desc":"过滤项集合","type":"array","schema":"/control/searchbar/IPSSearchBarFilter"},"psSearchBarGroups":{"desc":"分组项集合","type":"array","schema":"/control/searchbar/IPSSearchBarGroup"},"psSearchBarQuickSearchs":{"desc":"快速搜索项集合","type":"array","schema":"/control/searchbar/IPSSearchBarQuickSearch"},"quickGroupCount":{"desc":"快速分组显示数量","type":"number"},"quickSearchMode":{"desc":"快速搜索模式","type":"number","enum":{"0":"否","1":"默认","2":"高级(快速搜索项)"}},"quickSearchWidth":{"desc":"快速搜索框宽度","type":"number"},"searchBarStyle":{"desc":"搜索栏样式","type":"string","enum":{"SEARCHBAR":"搜索栏","SEARCHBAR2":"搜索栏2","MOBSEARCHBAR":"移动端搜索栏","MOBSEARCHBAR2":"移动端搜索栏2","USER":"用户自定义","USER2":"用户自定义2"}},"enableFilter":{"desc":"支持过滤器","type":"boolean"},"enableGroup":{"desc":"支持数据分组","type":"boolean"},"enableQuickSearch":{"desc":"支持快速搜索","type":"boolean"},"mobileSearchBar":{"desc":"移动端搜索栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSearchBarFilter.json b/resources/model/control/searchbar/IPSSearchBarFilter.json new file mode 100644 index 0000000..fd0d4db --- /dev/null +++ b/resources/model/control/searchbar/IPSSearchBarFilter.json @@ -0,0 +1 @@ +{"extends":["/control/searchbar/IPSSearchBarItem","/control/IPSEditorContainer"],"capPSLanguageRes":{"desc":"标题多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"createDV":{"desc":"建立默认值","type":"string"},"createDVT":{"desc":"建立默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据"}},"dataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"itemHeight":{"desc":"表单项高度","type":"number"},"itemWidth":{"desc":"表单项宽度","type":"number"},"labelPos":{"desc":"标签位置","type":"string","enum":{"LEFT":"左边","TOP":"上方","RIGHT":"右边","BOTTOM":"下方","NONE":"不显示"}},"labelWidth":{"desc":"标签宽度","type":"number"},"outputCodeListConfigMode":{"desc":"输出代码表配置模式","type":"number","enum":{"0":"无","1":"只输出选择项","2":"输出子项"}},"pHPSLanguageRes":{"desc":"输入提示语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psDEFSearchMode":{"desc":"属性搜索模式","type":"object","schema":"/dataentity/defield/IPSDEFSearchMode"},"psSysCss":{"desc":"过滤项界面样式表","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"项图片对象","type":"object","schema":"/res/IPSSysImage"},"resetItemName":{"desc":"重置项名称","type":"string"},"unitName":{"desc":"单位名称","type":"string"},"unitNameWidth":{"desc":"单位宽度","type":"number"},"width":{"desc":"宽度","type":"number"},"addSeparator":{"desc":"添加分隔栏","type":"boolean"},"allowEmpty":{"desc":"允许空值输入","type":"boolean"},"convertToCodeItemText":{"desc":"转换为代码项文本","type":"boolean"},"emptyCaption":{"desc":"是否空白标签","type":"boolean"},"enableItemPriv":{"desc":"启用项权限控制","type":"boolean"},"enableUnitName":{"desc":"支持单位","type":"boolean"},"hidden":{"desc":"隐藏表单项","type":"boolean"},"needCodeListConfig":{"desc":"需要代码表配置","type":"boolean"},"showCaption":{"desc":"显示标题","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSearchBarGroup.json b/resources/model/control/searchbar/IPSSearchBarGroup.json new file mode 100644 index 0000000..99337eb --- /dev/null +++ b/resources/model/control/searchbar/IPSSearchBarGroup.json @@ -0,0 +1 @@ +{"extends":["/control/searchbar/IPSSearchBarItem"],"tooltip":{"desc":"分组提示信息","type":"string"},"tooltipPSLanguageRes":{"desc":"分组提示信息多语言资源","type":"object","schema":"/res/IPSLanguageRes"},"width":{"desc":"宽度","type":"number"},"addSeparator":{"desc":"添加分隔栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSearchBarItem.json b/resources/model/control/searchbar/IPSSearchBarItem.json new file mode 100644 index 0000000..0c700e8 --- /dev/null +++ b/resources/model/control/searchbar/IPSSearchBarItem.json @@ -0,0 +1 @@ +{"extends":["/control/searchbar/IPSSearchBarObject"],"capPSLanguageRes":{"desc":"标题多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"data":{"desc":"项数据","type":"string"},"itemType":{"desc":"项类型","type":"string","enum":{"FILTER":"过滤项","GROUP":"分组项","QUICKSEARCH":"快速搜索项"}},"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"psSysCss":{"desc":"过滤项界面样式表","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"项图片对象","type":"object","schema":"/res/IPSSysImage"}} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSearchBarObject.json b/resources/model/control/searchbar/IPSSearchBarObject.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/control/searchbar/IPSSearchBarObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSearchBarParam.json b/resources/model/control/searchbar/IPSSearchBarParam.json new file mode 100644 index 0000000..8694565 --- /dev/null +++ b/resources/model/control/searchbar/IPSSearchBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"]} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSearchBarQuickSearch.json b/resources/model/control/searchbar/IPSSearchBarQuickSearch.json new file mode 100644 index 0000000..8467b24 --- /dev/null +++ b/resources/model/control/searchbar/IPSSearchBarQuickSearch.json @@ -0,0 +1 @@ +{"extends":["/control/searchbar/IPSSearchBarItem"],"psDEFSearchMode":{"desc":"属性搜索模式","type":"object","schema":"/dataentity/defield/IPSDEFSearchMode"}} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSysSearchBar.json b/resources/model/control/searchbar/IPSSysSearchBar.json new file mode 100644 index 0000000..48553c0 --- /dev/null +++ b/resources/model/control/searchbar/IPSSysSearchBar.json @@ -0,0 +1 @@ +{"extends":["/control/searchbar/IPSSearchBar"]} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSysSearchBarItem.json b/resources/model/control/searchbar/IPSSysSearchBarItem.json new file mode 100644 index 0000000..42d433e --- /dev/null +++ b/resources/model/control/searchbar/IPSSysSearchBarItem.json @@ -0,0 +1 @@ +{"extends":["/control/searchbar/IPSSearchBarItem","/control/searchbar/IPSSysSearchBarObject"]} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSysSearchBarObject.json b/resources/model/control/searchbar/IPSSysSearchBarObject.json new file mode 100644 index 0000000..7876534 --- /dev/null +++ b/resources/model/control/searchbar/IPSSysSearchBarObject.json @@ -0,0 +1 @@ +{"extends":["/control/searchbar/IPSSearchBarObject"]} \ No newline at end of file diff --git a/resources/model/control/searchbar/IPSSysSearchBarParam.json b/resources/model/control/searchbar/IPSSysSearchBarParam.json new file mode 100644 index 0000000..5c0c368 --- /dev/null +++ b/resources/model/control/searchbar/IPSSysSearchBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/searchbar/IPSSearchBarParam"]} \ No newline at end of file diff --git a/resources/model/control/titlebar/IPSAppTitleBar.json b/resources/model/control/titlebar/IPSAppTitleBar.json new file mode 100644 index 0000000..320b07f --- /dev/null +++ b/resources/model/control/titlebar/IPSAppTitleBar.json @@ -0,0 +1 @@ +{"extends":["/control/titlebar/IPSTitleBar"]} \ No newline at end of file diff --git a/resources/model/control/titlebar/IPSSysTitleBar.json b/resources/model/control/titlebar/IPSSysTitleBar.json new file mode 100644 index 0000000..320b07f --- /dev/null +++ b/resources/model/control/titlebar/IPSSysTitleBar.json @@ -0,0 +1 @@ +{"extends":["/control/titlebar/IPSTitleBar"]} \ No newline at end of file diff --git a/resources/model/control/titlebar/IPSTitleBar.json b/resources/model/control/titlebar/IPSTitleBar.json new file mode 100644 index 0000000..5ab38b1 --- /dev/null +++ b/resources/model/control/titlebar/IPSTitleBar.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"psSysImage":{"desc":"图标资源","type":"object","schema":"/res/IPSSysImage"},"titleBarStyle":{"desc":"标题栏样式","type":"string","enum":{"USER":"用户自定义","USER2":"用户自定义2"}},"titleBarType":{"desc":"标题栏类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/titlebar/IPSTitleBarParam.json b/resources/model/control/titlebar/IPSTitleBarParam.json new file mode 100644 index 0000000..8694565 --- /dev/null +++ b/resources/model/control/titlebar/IPSTitleBarParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"]} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDECMGroupItem.json b/resources/model/control/toolbar/IPSDECMGroupItem.json new file mode 100644 index 0000000..52bdf90 --- /dev/null +++ b/resources/model/control/toolbar/IPSDECMGroupItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEContextMenuItem"],"psDEContextMenuItems":{"desc":"子项集合","type":"array","schema":"/control/toolbar/IPSDEContextMenuItem"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDECMRawItem.json b/resources/model/control/toolbar/IPSDECMRawItem.json new file mode 100644 index 0000000..e693e14 --- /dev/null +++ b/resources/model/control/toolbar/IPSDECMRawItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEContextMenuItem"],"rawContent":{"desc":"直接内容","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDECMSeperatorItem.json b/resources/model/control/toolbar/IPSDECMSeperatorItem.json new file mode 100644 index 0000000..c29bc3e --- /dev/null +++ b/resources/model/control/toolbar/IPSDECMSeperatorItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEContextMenuItem"]} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDECMUIActionItem.json b/resources/model/control/toolbar/IPSDECMUIActionItem.json new file mode 100644 index 0000000..8ef0cf6 --- /dev/null +++ b/resources/model/control/toolbar/IPSDECMUIActionItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEContextMenuItem","/app/view/IPSDEUIActionItem","/app/view/IPSWFUIActionItem"],"actionLevel":{"desc":"行为级别","type":"number","enum":{"50":"不常用","100":"一般操作","200":"常用操作","250":"关键操作"}},"groupExtractMode":{"desc":"界面行为组展开模式","type":"string","enum":{"ITEM":"按项展开(默认)","ITEMS":"按分组展开"}},"enableToggleMode":{"desc":"启用点击切换模式","type":"boolean"},"hiddenItem":{"desc":"是否隐藏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDEContextMenu.json b/resources/model/control/toolbar/IPSDEContextMenu.json new file mode 100644 index 0000000..a72a3d0 --- /dev/null +++ b/resources/model/control/toolbar/IPSDEContextMenu.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEToolbar","/control/menu/IPSContextMenu"]} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDEContextMenuItem.json b/resources/model/control/toolbar/IPSDEContextMenuItem.json new file mode 100644 index 0000000..44a722c --- /dev/null +++ b/resources/model/control/toolbar/IPSDEContextMenuItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEToolbarItem"]} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDEContextMenuParam.json b/resources/model/control/toolbar/IPSDEContextMenuParam.json new file mode 100644 index 0000000..851e916 --- /dev/null +++ b/resources/model/control/toolbar/IPSDEContextMenuParam.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEToolbarParam","/control/menu/IPSContextMenuParam"]} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDETBGroupItem.json b/resources/model/control/toolbar/IPSDETBGroupItem.json new file mode 100644 index 0000000..8eaf9c1 --- /dev/null +++ b/resources/model/control/toolbar/IPSDETBGroupItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEToolbarItem"],"psDEToolbarItems":{"desc":"子项集合","type":"array","schema":"/control/toolbar/IPSDEToolbarItem"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDETBRawItem.json b/resources/model/control/toolbar/IPSDETBRawItem.json new file mode 100644 index 0000000..33e28a7 --- /dev/null +++ b/resources/model/control/toolbar/IPSDETBRawItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEToolbarItem","/control/IPSRawItem"],"rawContent":{"desc":"直接内容","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDETBSeperatorItem.json b/resources/model/control/toolbar/IPSDETBSeperatorItem.json new file mode 100644 index 0000000..655bc53 --- /dev/null +++ b/resources/model/control/toolbar/IPSDETBSeperatorItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEToolbarItem"],"spanMode":{"desc":"是否延展","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDETBUIActionItem.json b/resources/model/control/toolbar/IPSDETBUIActionItem.json new file mode 100644 index 0000000..44958ad --- /dev/null +++ b/resources/model/control/toolbar/IPSDETBUIActionItem.json @@ -0,0 +1 @@ +{"extends":["/control/toolbar/IPSDEToolbarItem","/app/view/IPSDEUIActionItem","/app/view/IPSWFUIActionItem"],"actionLevel":{"desc":"行为级别","type":"number","enum":{"50":"不常用","100":"一般操作","200":"常用操作","250":"关键操作"}},"groupExtractMode":{"desc":"界面行为组展开模式","type":"string","enum":{"ITEM":"按项展开(默认)","ITEMS":"按分组展开"}},"noPrivDisplayMode":{"desc":"无权限显示模式","type":"number","enum":{"1":"禁用","2":"隐藏","6":"隐藏且默认隐藏"}},"psDEToolbarItems":{"desc":"子项集合","type":"array","schema":"/control/toolbar/IPSDEToolbarItem"},"enableToggleMode":{"desc":"启用点击切换模式","type":"boolean"},"hiddenItem":{"desc":"是否隐藏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDEToolbar.json b/resources/model/control/toolbar/IPSDEToolbar.json new file mode 100644 index 0000000..b14023c --- /dev/null +++ b/resources/model/control/toolbar/IPSDEToolbar.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl"],"owner":{"desc":"工具栏所有者","type":"object"},"psDEToolbarItems":{"desc":"工具栏项集合","type":"array","schema":"/control/toolbar/IPSDEToolbarItem"},"toolbarStyle":{"desc":"工具栏样式","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDEToolbarItem.json b/resources/model/control/toolbar/IPSDEToolbarItem.json new file mode 100644 index 0000000..c8a96bd --- /dev/null +++ b/resources/model/control/toolbar/IPSDEToolbarItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"data":{"desc":"项数据","type":"string"},"height":{"desc":"工具栏项高度","type":"number"},"itemType":{"desc":"项类型","type":"string","enum":{"DEUIACTION":"界面行为项","SEPERATOR":"分隔项","ITEMS":"分组项","RAWITEM":"直接项"}},"psSysCss":{"desc":"系统样式表","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"图标资源对象","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"前端应用插件","type":"object","schema":"/res/IPSSysPFPlugin"},"tooltip":{"desc":"工具提示","type":"string"},"tooltipPSLanguageRes":{"desc":"提示语言资源","type":"object","schema":"/res/IPSLanguageRes"},"userTag":{"desc":"用户标记","type":"string"},"userTag2":{"desc":"用户标记2","type":"string"},"width":{"desc":"工具栏项宽度","type":"number"},"showCaption":{"desc":"显示标题","type":"boolean"},"showIcon":{"desc":"显示图标","type":"boolean"},"valid":{"desc":"启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/toolbar/IPSDEToolbarParam.json b/resources/model/control/toolbar/IPSDEToolbarParam.json new file mode 100644 index 0000000..673a727 --- /dev/null +++ b/resources/model/control/toolbar/IPSDEToolbarParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"],"owner":{"desc":"工具栏所有者","type":"object"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDEGantt.json b/resources/model/control/tree/IPSDEGantt.json new file mode 100644 index 0000000..6953b45 --- /dev/null +++ b/resources/model/control/tree/IPSDEGantt.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeGridEx"],"beginDataItemName":{"desc":"开始时间数据项","type":"string"},"endDataItemName":{"desc":"结束时间数据项","type":"string"},"finishDataItemName":{"desc":"完成量数据项","type":"string"},"prevDataItemName":{"desc":"前置数据项","type":"string"},"sNDataItemName":{"desc":"编号数据项","type":"string"},"totalDataItemName":{"desc":"总量数据项","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDEGanttParam.json b/resources/model/control/tree/IPSDEGanttParam.json new file mode 100644 index 0000000..884121f --- /dev/null +++ b/resources/model/control/tree/IPSDEGanttParam.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeGridExParam"]} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETree.json b/resources/model/control/tree/IPSDETree.json new file mode 100644 index 0000000..6f522ba --- /dev/null +++ b/resources/model/control/tree/IPSDETree.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControl","/control/IPSControlContainer"],"emptyText":{"desc":"无值显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psAppCounterRef":{"desc":"应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"},"psDETreeColumns":{"desc":"树表格列集合","type":"array","schema":"/control/tree/IPSDETreeColumn"},"psDETreeNodeRSs":{"desc":"树节点关系集合","type":"array","schema":"/control/tree/IPSDETreeNodeRS"},"psDETreeNodes":{"desc":"树节点集合","type":"array","schema":"/control/tree/IPSDETreeNode"},"treeGridMode":{"desc":"树表格模式","type":"number","enum":{"0":"无","1":"常规树表格","2":"甘特图树表格"}},"enableEdit":{"desc":"支持编辑","type":"boolean"},"enableRootSelect":{"desc":"支持根选择","type":"boolean"},"outputIconDefault":{"desc":"默认输出图标","type":"boolean"},"rootVisible":{"desc":"显示根","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeCodeListNode.json b/resources/model/control/tree/IPSDETreeCodeListNode.json new file mode 100644 index 0000000..6e73541 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeCodeListNode.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeNode"],"psCodeList":{"desc":"应用代码表对象","type":"object","schema":"/app/codelist/IPSAppCodeList"},"appendCaption":{"desc":"附加节点标题","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeColumn.json b/resources/model/control/tree/IPSDETreeColumn.json new file mode 100644 index 0000000..9e5b352 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeColumn.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"align":{"desc":"列对齐","type":"string","enum":{"LEFT":"左对齐","CENTER":"居中","RIGHT":"右对齐"}},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"cellPSSysCss":{"desc":"单元格样式对象","type":"object","schema":"/res/IPSSysCss"},"codeName":{"desc":"代码标识","type":"string"},"columnStyle":{"desc":"树视图列样式","type":"string","enum":{"USER":"用户自定义","USER2":"用户自定义2"}},"columnType":{"desc":"列类型","type":"string","enum":{"DEFGRIDCOLUMN":"属性列","UAGRIDCOLUMN":"操作列","GROUPGRIDCOLUMN":"属性分组列"}},"dataItemName":{"desc":"默认值","type":"string"},"headerPSSysCss":{"desc":"头部样式对象","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"头部图片对象","type":"object","schema":"/res/IPSSysImage"},"renderPSSysPFPlugin":{"desc":"列绘制应用插件","type":"object","schema":"/res/IPSSysPFPlugin"},"width":{"desc":"列宽","type":"number"},"widthUnit":{"desc":"列宽单位","type":"string","enum":{"PX":"px","STAR":"*"}},"enableExpand":{"desc":"支持展开(树节点)","type":"boolean"},"enableSort":{"desc":"支持排序","type":"boolean"},"hideDefault":{"desc":"默认隐藏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeDEFColumn.json b/resources/model/control/tree/IPSDETreeDEFColumn.json new file mode 100644 index 0000000..5a5e508 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeDEFColumn.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeColumn"],"defaultValue":{"desc":"默认值","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeDataSetNode.json b/resources/model/control/tree/IPSDETreeDataSetNode.json new file mode 100644 index 0000000..e77c60a --- /dev/null +++ b/resources/model/control/tree/IPSDETreeDataSetNode.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeNode","/control/IPSControlMDObject"],"childCntPSAppDEField":{"desc":"节点计数值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"customCond":{"desc":"附加查询条件","type":"string"},"filterPSAppDEDataSet":{"desc":"过滤应用实体结果集对象","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"iconPSAppDEField":{"desc":"节点图标值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"idPSAppDEField":{"desc":"节点标识值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"leafFlagPSAppDEField":{"desc":"叶节点标识值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"maxSize":{"desc":"最大加载节点数","type":"number"},"psAppDEDataSet":{"desc":"应用实体结果集对象","type":"object","schema":"/app/dataentity/IPSAppDEDataSet"},"removePSAppDEAction":{"desc":"删除数据应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"removePSDEOPPriv":{"desc":"删除要求操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"sortDir":{"desc":"节点排序方向","type":"string","enum":{"ASC":"升序","DESC":"降序"}},"sortPSAppDEField":{"desc":"节点排序值应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"textFormat":{"desc":"节点文本格式化","type":"string"},"textPSAppDEField":{"desc":"节点文本值属性对象","type":"object","schema":"/app/dataentity/IPSAppDEField"},"updatePSDEOPPriv":{"desc":"更新要求操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"appendCaption":{"desc":"附加节点标题","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeGridEx.json b/resources/model/control/tree/IPSDETreeGridEx.json new file mode 100644 index 0000000..33b0d37 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeGridEx.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETree"]} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeGridExParam.json b/resources/model/control/tree/IPSDETreeGridExParam.json new file mode 100644 index 0000000..08679cf --- /dev/null +++ b/resources/model/control/tree/IPSDETreeGridExParam.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeParam"]} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeHandler.json b/resources/model/control/tree/IPSDETreeHandler.json new file mode 100644 index 0000000..89dddab --- /dev/null +++ b/resources/model/control/tree/IPSDETreeHandler.json @@ -0,0 +1 @@ +{"extends":["/control/ajax/IPSMDAjaxControlHandler"]} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeNode.json b/resources/model/control/tree/IPSDETreeNode.json new file mode 100644 index 0000000..e92aed3 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeNode.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSControlXDataContainer","/control/IPSControlMDataContainer","/control/IPSControlObjectNavigatable"],"counterId":{"desc":"计数器标识","type":"string"},"counterMode":{"desc":"计数器模式","type":"number","enum":{"0":"默认","1":"0 值时隐藏"}},"modelObj":{"desc":"代码模型对象","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"navFilter":{"desc":"导航视图过滤项","type":"string"},"navPSAppView":{"desc":"导航视图对象","type":"object","schema":"/app/view/IPSAppView"},"navPSDER":{"desc":"导航关系","type":"object","schema":"/dataentity/der/IPSDERBase"},"nodeType":{"desc":"节点标识","type":"string"},"psAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"psDEContextMenu":{"desc":"上下文菜单对象","type":"object","schema":"/control/toolbar/IPSDEContextMenu"},"psDETreeNodeDataItems":{"desc":"树节点数据项集合","type":"array","schema":"/control/tree/IPSDETreeNodeDataItem"},"psDETreeNodeRVs":{"desc":"树节点引用视图集合","type":"array","schema":"/control/tree/IPSDETreeNodeRV"},"psSysCss":{"desc":"节点界面样式表","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"节点图标对象","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"前端绘制插件","type":"object","schema":"/res/IPSSysPFPlugin"},"treeNodeType":{"desc":"节点类型","type":"string","enum":{"STATIC":"静态","DE":"动态(实体)","CODELIST":"动态(代码表)"}},"hasPSDETreeNodeRSs":{"desc":"是否有子节点","type":"boolean"},"allowDrag":{"desc":"允许拖到节点","type":"boolean"},"allowDrop":{"desc":"允许拖入节点","type":"boolean"},"allowEditText":{"desc":"允许编辑节点文本","type":"boolean"},"allowOrder":{"desc":"允许节点排序","type":"boolean"},"appendPNodeId":{"desc":"附加父节点标识","type":"boolean"},"disableSelect":{"desc":"禁止选择","type":"boolean"},"enableCheck":{"desc":"支持选中","type":"boolean"},"enableQuickSearch":{"desc":"支持快速搜索","type":"boolean"},"expandFirstOnly":{"desc":"仅展开首节点","type":"boolean"},"expanded":{"desc":"默认展开","type":"boolean"},"rootNode":{"desc":"根节点","type":"boolean"},"selectFirstOnly":{"desc":"仅选择首节点","type":"boolean"},"selected":{"desc":"默认选择","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeNodeDataItem.json b/resources/model/control/tree/IPSDETreeNodeDataItem.json new file mode 100644 index 0000000..66da58d --- /dev/null +++ b/resources/model/control/tree/IPSDETreeNodeDataItem.json @@ -0,0 +1 @@ +{"extends":["/data/IPSDataItem"],"cLConvertMode":{"desc":"代码表输出模式","type":"string","enum":{"NONE":"直接值","FRONT":"前台","BACKEND":"后台"}},"defaultValue":{"desc":"默认值","type":"string"},"frontPSCodeList":{"desc":"前端代码表","type":"object","schema":"/codelist/IPSCodeList"},"psAppDEField":{"desc":"应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"脚本代码模式","type":"boolean"},"enableItemPriv":{"desc":"启用项权限控制","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeNodeRS.json b/resources/model/control/tree/IPSDETreeNodeRS.json new file mode 100644 index 0000000..59bc4df --- /dev/null +++ b/resources/model/control/tree/IPSDETreeNodeRS.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSNavigateParamContainer"],"childPSDETreeNode":{"desc":"下级节点对象","type":"object","schema":"/control/tree/IPSDETreeNode"},"psDETreeNodeRSParams":{"desc":"关系导航参数集合","type":"array","schema":"/control/tree/IPSDETreeNodeRSParam"},"parentFilter":{"desc":"父值过滤项","type":"string"},"parentPSAppDEField":{"desc":"父关系连接属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"parentPSDER1N":{"desc":"父值关系","type":"object","schema":"/dataentity/der/IPSDER1N"},"parentPSDETreeNode":{"desc":"上级节点对象","type":"object","schema":"/control/tree/IPSDETreeNode"},"parentValueLevel":{"desc":"父值级别","type":"number","enum":{"1":"上一级","2":"上两级","3":"上三级"}},"searchMode":{"desc":"搜索模式","type":"number","enum":{"1":"有搜索时启用","2":"无搜索时启用","3":"全部启用"}}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeNodeRSNavContext.json b/resources/model/control/tree/IPSDETreeNodeRSNavContext.json new file mode 100644 index 0000000..2e50748 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeNodeRSNavContext.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeNodeRSNavParam","/control/IPSNavigateContext"]} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeNodeRSNavParam.json b/resources/model/control/tree/IPSDETreeNodeRSNavParam.json new file mode 100644 index 0000000..dc3b1a7 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeNodeRSNavParam.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeNodeRSParam","/control/IPSNavigateParam"],"rawValue":{"desc":"直接值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeNodeRSParam.json b/resources/model/control/tree/IPSDETreeNodeRSParam.json new file mode 100644 index 0000000..94eb6bc --- /dev/null +++ b/resources/model/control/tree/IPSDETreeNodeRSParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"desc":{"desc":"说明","type":"string"},"key":{"desc":"参数","type":"string"},"value":{"desc":"值","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeNodeRV.json b/resources/model/control/tree/IPSDETreeNodeRV.json new file mode 100644 index 0000000..095f4d9 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeNodeRV.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSNavigateParamContainer"],"refPSAppView":{"desc":"引用视图","type":"object","schema":"/app/view/IPSAppView"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeParam.json b/resources/model/control/tree/IPSDETreeParam.json new file mode 100644 index 0000000..cfce46f --- /dev/null +++ b/resources/model/control/tree/IPSDETreeParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSMDAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeStaticNode.json b/resources/model/control/tree/IPSDETreeStaticNode.json new file mode 100644 index 0000000..97955a6 --- /dev/null +++ b/resources/model/control/tree/IPSDETreeStaticNode.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeNode"],"nodeValue":{"desc":"静态节点值","type":"string"},"text":{"desc":"节点文本","type":"string"},"tooltip":{"desc":"提示信息","type":"string"},"tooltipPSLanguageRes":{"desc":"提示语言资源","type":"object","schema":"/res/IPSLanguageRes"}} \ No newline at end of file diff --git a/resources/model/control/tree/IPSDETreeUAColumn.json b/resources/model/control/tree/IPSDETreeUAColumn.json new file mode 100644 index 0000000..02db3de --- /dev/null +++ b/resources/model/control/tree/IPSDETreeUAColumn.json @@ -0,0 +1 @@ +{"extends":["/control/tree/IPSDETreeColumn"],"psDEUIActionGroup":{"desc":"界面行为组","type":"object","schema":"/dataentity/uiaction/IPSDEUIActionGroup"}} \ No newline at end of file diff --git a/resources/model/control/viewpanel/IPSDEPickupViewPanel.json b/resources/model/control/viewpanel/IPSDEPickupViewPanel.json new file mode 100644 index 0000000..368c865 --- /dev/null +++ b/resources/model/control/viewpanel/IPSDEPickupViewPanel.json @@ -0,0 +1 @@ +{"extends":["/control/viewpanel/IPSDEViewPanel"]} \ No newline at end of file diff --git a/resources/model/control/viewpanel/IPSDETabViewPanel.json b/resources/model/control/viewpanel/IPSDETabViewPanel.json new file mode 100644 index 0000000..3b838e1 --- /dev/null +++ b/resources/model/control/viewpanel/IPSDETabViewPanel.json @@ -0,0 +1 @@ +{"extends":["/control/viewpanel/IPSDEViewPanel","/control/expbar/IPSTabExpPage"],"counterId":{"desc":"计数器标识","type":"string"},"navFilter":{"desc":"导航过滤项","type":"string"},"navPSDER":{"desc":"导航关系对象","type":"object","schema":"/dataentity/der/IPSDERBase"},"psAppCounterRef":{"desc":"应用计数器引用","type":"object","schema":"/app/control/IPSAppCounterRef"},"psDEOPPriv":{"desc":"访问操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"psSysImage":{"desc":"标题图标","type":"object","schema":"/res/IPSSysImage"}} \ No newline at end of file diff --git a/resources/model/control/viewpanel/IPSDETabViewPanelParam.json b/resources/model/control/viewpanel/IPSDETabViewPanelParam.json new file mode 100644 index 0000000..2c9fe96 --- /dev/null +++ b/resources/model/control/viewpanel/IPSDETabViewPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/viewpanel/IPSDEViewPanelParam"],"navFilter":{"desc":"导航过滤项","type":"string"},"navPSDERName":{"desc":"导航关系名称","type":"string"},"getPSDEOPPrivId":{"desc":"访问操作标识","type":"string"},"getPSSysImageId":{"desc":"标题图标","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/viewpanel/IPSDEViewPanel.json b/resources/model/control/viewpanel/IPSDEViewPanel.json new file mode 100644 index 0000000..91f677a --- /dev/null +++ b/resources/model/control/viewpanel/IPSDEViewPanel.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControl","/control/IPSNavigateParamContainer"],"capPSLanguageRes":{"desc":"标题语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"embeddedPSAppDEView":{"desc":"嵌入视图对象","type":"object","schema":"/app/view/IPSAppDEView"}} \ No newline at end of file diff --git a/resources/model/control/viewpanel/IPSDEViewPanelParam.json b/resources/model/control/viewpanel/IPSDEViewPanelParam.json new file mode 100644 index 0000000..8694565 --- /dev/null +++ b/resources/model/control/viewpanel/IPSDEViewPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSControlParam"]} \ No newline at end of file diff --git a/resources/model/control/wizardpanel/IPSDEStateWizardPanel.json b/resources/model/control/wizardpanel/IPSDEStateWizardPanel.json new file mode 100644 index 0000000..b5b6c12 --- /dev/null +++ b/resources/model/control/wizardpanel/IPSDEStateWizardPanel.json @@ -0,0 +1 @@ +{"extends":["/control/wizardpanel/IPSDEWizardPanel"]} \ No newline at end of file diff --git a/resources/model/control/wizardpanel/IPSDEStateWizardPanelParam.json b/resources/model/control/wizardpanel/IPSDEStateWizardPanelParam.json new file mode 100644 index 0000000..ba6b939 --- /dev/null +++ b/resources/model/control/wizardpanel/IPSDEStateWizardPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/wizardpanel/IPSDEWizardPanelParam"]} \ No newline at end of file diff --git a/resources/model/control/wizardpanel/IPSDEWizardPanel.json b/resources/model/control/wizardpanel/IPSDEWizardPanel.json new file mode 100644 index 0000000..97e267f --- /dev/null +++ b/resources/model/control/wizardpanel/IPSDEWizardPanel.json @@ -0,0 +1 @@ +{"extends":["/control/wizardpanel/IPSWizardPanel"],"finishPSControlAction":{"desc":"完成行为","type":"object","schema":"/control/IPSControlAction"},"initPSControlAction":{"desc":"初始化行为","type":"object","schema":"/control/IPSControlAction"},"psDEEditForms":{"desc":"实体编辑表单集合","type":"array","schema":"/control/form/IPSDEEditForm"},"psDEWizard":{"desc":"实体向导对象","type":"object","schema":"/dataentity/wizard/IPSDEWizard"},"statePSAppDEField":{"desc":"状态应用实体属性","type":"object","schema":"/app/dataentity/IPSAppDEField"},"showActionBar":{"desc":"显示操作栏","type":"boolean"},"showStepBar":{"desc":"显示步骤栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/control/wizardpanel/IPSDEWizardPanelParam.json b/resources/model/control/wizardpanel/IPSDEWizardPanelParam.json new file mode 100644 index 0000000..47c4b37 --- /dev/null +++ b/resources/model/control/wizardpanel/IPSDEWizardPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/wizardpanel/IPSWizardPanelParam"]} \ No newline at end of file diff --git a/resources/model/control/wizardpanel/IPSWizardPanel.json b/resources/model/control/wizardpanel/IPSWizardPanel.json new file mode 100644 index 0000000..8fe0394 --- /dev/null +++ b/resources/model/control/wizardpanel/IPSWizardPanel.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControl","/control/IPSControlContainer"],"wizardStyle":{"desc":"内置式样","type":"string"}} \ No newline at end of file diff --git a/resources/model/control/wizardpanel/IPSWizardPanelParam.json b/resources/model/control/wizardpanel/IPSWizardPanelParam.json new file mode 100644 index 0000000..087c247 --- /dev/null +++ b/resources/model/control/wizardpanel/IPSWizardPanelParam.json @@ -0,0 +1 @@ +{"extends":["/control/IPSAjaxControlParam"]} \ No newline at end of file diff --git a/resources/model/ctrl.json b/resources/model/ctrl.json new file mode 100644 index 0000000..423f209 --- /dev/null +++ b/resources/model/ctrl.json @@ -0,0 +1,3 @@ +{ + "extends": ["/control/IPSControl"] +} diff --git a/resources/model/ctrls.json b/resources/model/ctrls.json new file mode 100644 index 0000000..15d42fc --- /dev/null +++ b/resources/model/ctrls.json @@ -0,0 +1,3 @@ +{ + "extends": ["/ctrl"] +} diff --git a/resources/model/data/IPSDataItem.json b/resources/model/data/IPSDataItem.json new file mode 100644 index 0000000..f28bb22 --- /dev/null +++ b/resources/model/data/IPSDataItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"dataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"format":{"desc":"格式化","type":"string"},"psCodeList":{"desc":"代码表对象","type":"object","schema":"/codelist/IPSCodeList"},"convertToCodeItemText":{"desc":"转换为代码项文本","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/data/IPSDataItemParam.json b/resources/model/data/IPSDataItemParam.json new file mode 100644 index 0000000..d08ae24 --- /dev/null +++ b/resources/model/data/IPSDataItemParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"format":{"desc":"格式化","type":"string"}} \ No newline at end of file diff --git a/resources/model/data/IPSValueOP.json b/resources/model/data/IPSValueOP.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/data/IPSValueOP.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/resources/model/database/IPSDEDBConfig.json b/resources/model/database/IPSDEDBConfig.json new file mode 100644 index 0000000..66f0781 --- /dev/null +++ b/resources/model/database/IPSDEDBConfig.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"dBType":{"desc":"数据库类型","type":"string","enum":{"DB2":"DB2","MYSQL5":"MySQL5","ORACLE":"Oracle","SQLSERVER":"SqlServer","POSTGRESQL":"PostgreSQL","PPAS":"PPAS","SQLITE":"SQLite","DM":"DM","HANA":"HANA"}},"objNameCase":{"desc":"对象名称转化","type":"string"},"standardTableName":{"desc":"标准表名","type":"string"},"tableName":{"desc":"表名称","type":"string"},"view2Name":{"desc":"视图2名称","type":"string"},"view3Name":{"desc":"视图3名称","type":"string"},"view4Name":{"desc":"视图4名称","type":"string"},"viewName":{"desc":"视图名称","type":"string"},"customTableOrView":{"desc":"自定义表或视图名称","type":"boolean"},"valid":{"desc":"是否启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/database/IPSDEDBTable.json b/resources/model/database/IPSDEDBTable.json new file mode 100644 index 0000000..6be8ab1 --- /dev/null +++ b/resources/model/database/IPSDEDBTable.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"allPSDEFields":{"desc":"相关属性集合","type":"array","schema":"/dataentity/defield/IPSDEField"},"codeName":{"desc":"代码标识","type":"string"},"psSysDBTable":{"desc":"关系数据库表","type":"object","schema":"/database/IPSSysDBTable"},"tableType":{"desc":"实体表类型","type":"string","enum":{"MAIN":"主表"}}} \ No newline at end of file diff --git a/resources/model/database/IPSDEFDTColumn.json b/resources/model/database/IPSDEFDTColumn.json new file mode 100644 index 0000000..b06b9b7 --- /dev/null +++ b/resources/model/database/IPSDEFDTColumn.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"columnName":{"desc":"列名称","type":"string"},"dBType":{"desc":"数据库类型","type":"string"},"queryCodeExp":{"desc":"查询代码表达式","type":"string"},"standardColumnName":{"desc":"标准列名","type":"string"},"autoIncrement":{"desc":"自增列","type":"boolean"},"valueAutoGen":{"desc":"自动产生值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/database/IPSSysDBColumn.json b/resources/model/database/IPSSysDBColumn.json new file mode 100644 index 0000000..5839276 --- /dev/null +++ b/resources/model/database/IPSSysDBColumn.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"createSql":{"desc":"建立SQL","type":"string"},"defaultValue":{"desc":"默认值","type":"string"},"dropSql":{"desc":"移除SQL","type":"string"},"length":{"desc":"字段长度","type":"number"},"logicName":{"desc":"逻辑名称","type":"string"},"precision":{"desc":"字段精度","type":"number"},"refPSSysDBColumn":{"desc":"引用数据列","type":"object","schema":"/database/IPSSysDBColumn"},"refPSSysDBTable":{"desc":"引用数据表","type":"object","schema":"/database/IPSSysDBTable"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"autoIncrement":{"desc":"自增列","type":"boolean"},"fKey":{"desc":"外键","type":"boolean"},"nullable":{"desc":"允许空值输入","type":"boolean"},"pKey":{"desc":"主键","type":"boolean"},"unsigned":{"desc":"无符号列","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/database/IPSSysDBScheme.json b/resources/model/database/IPSSysDBScheme.json new file mode 100644 index 0000000..c5b79db --- /dev/null +++ b/resources/model/database/IPSSysDBScheme.json @@ -0,0 +1 @@ +{"allPSSysDBTables":{"desc":"数据表集合","type":"array","schema":"/database/IPSSysDBTable"},"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"dSLink":{"desc":"默认数据源","type":"string","enum":{"DEFAULT":"默认连接","DB2":"数据连接2","DB3":"数据连接3","DB4":"数据连接4","DB5":"数据连接5","DB6":"数据连接6","DB7":"数据连接7","DB8":"数据连接8","DB9":"数据连接9","DB10":"数据连接10","DB11":"数据连接11","DB12":"数据连接12"}},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"schemeTag":{"desc":"体系标记","type":"string"},"schemeTag2":{"desc":"体系标记2","type":"string"},"autoExtendModel":{"desc":"自动扩展结构","type":"boolean"},"existingModel":{"desc":"现有数据结构","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/database/IPSSysDBTable.json b/resources/model/database/IPSSysDBTable.json new file mode 100644 index 0000000..525fda2 --- /dev/null +++ b/resources/model/database/IPSSysDBTable.json @@ -0,0 +1 @@ +{"allPSSysDBColumns":{"desc":"数据列集合","type":"array","schema":"/database/IPSSysDBColumn"},"codeName":{"desc":"代码标识","type":"string"},"createSql":{"desc":"建立SQL","type":"string"},"dropSql":{"desc":"移除SQL","type":"string"},"logicName":{"desc":"逻辑名称 ","type":"string"},"autoExtendModel":{"desc":"自动扩展结构","type":"boolean"},"existingModel":{"desc":"现有数据结构","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/database/IPSSysDBValueFunc.json b/resources/model/database/IPSSysDBValueFunc.json new file mode 100644 index 0000000..c48e4d3 --- /dev/null +++ b/resources/model/database/IPSSysDBValueFunc.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"dBValueFuncType":{"desc":"函数类型","type":"string","enum":{"PS":"云平台内置","UX":"用户扩展"}},"inputStdDataType":{"desc":"输入值数据库类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"outputStdDataType":{"desc":"输出值数据库类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"outputValueFormat":{"desc":"输出值格式化","type":"string"},"psSysSFPlugin":{"desc":"后端模板插件对象","type":"object","schema":"/res/IPSSysSFPlugin"}} \ No newline at end of file diff --git a/resources/model/database/IPSSystemDBConfig.json b/resources/model/database/IPSSystemDBConfig.json new file mode 100644 index 0000000..a041577 --- /dev/null +++ b/resources/model/database/IPSSystemDBConfig.json @@ -0,0 +1 @@ +{"dBType":{"desc":"数据库类型","type":"string","enum":{"DB2":"DB2","MySQL5":"MySQL5","MYSQL5":"MySQL5","Oracle":"Oracle","ORACLE":"Oracle","SqlServer":"SqlServer","SQLSERVER":"SqlServer","POSTGRESQL":"PostgreSQL","PostgreSQL":"PostgreSQL","PPAS":"PPAS","SQLITE":"SQLite","DM":"DM","HANA":"HANA"}},"nullValueOrderMode":{"desc":"数据空值排序模式","type":"string","enum":{"FIRST":"最先","LAST":"最后"}},"objNameCase":{"desc":"对象名称转化","type":"string","enum":{"DEFAULT":"默认","UCASE":"转换为大写","LCASE":"转换为小写"}},"defaultMode":{"desc":"默认数据库支持","type":"boolean"},"pubFKey":{"desc":"发布外键","type":"boolean"},"pubIndex":{"desc":"发布索引","type":"boolean"},"pubModel":{"desc":"发布数据库模型","type":"boolean"},"pubModelComment":{"desc":"发布注释","type":"boolean"},"pubView":{"desc":"发布视图","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/IPSDEGroup.json b/resources/model/dataentity/IPSDEGroup.json new file mode 100644 index 0000000..09cb842 --- /dev/null +++ b/resources/model/dataentity/IPSDEGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject","/IPSModelSortable"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"logicMode":{"desc":"逻辑模式","type":"string","enum":{"INITMODEL":"注入模型","SYNCMODEL":"同步同构模型","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"logicParam":{"desc":"逻辑参数","type":"string"},"logicParam2":{"desc":"逻辑参数2","type":"string"},"psDEGroupDetails":{"desc":"实体组成员集合","type":"array","schema":"/dataentity/IPSDEGroupDetail"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"}} \ No newline at end of file diff --git a/resources/model/dataentity/IPSDEGroupDetail.json b/resources/model/dataentity/IPSDEGroupDetail.json new file mode 100644 index 0000000..2a88aaf --- /dev/null +++ b/resources/model/dataentity/IPSDEGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"detailParam":{"desc":"成员参数","type":"string"},"detailParam2":{"desc":"成员参数2","type":"string"},"orderValue":{"desc":"排序值","type":"number"},"psDataEntity":{"desc":"实体","type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/dataentity/IPSDataEntity.json b/resources/model/dataentity/IPSDataEntity.json new file mode 100644 index 0000000..ef70c6d --- /dev/null +++ b/resources/model/dataentity/IPSDataEntity.json @@ -0,0 +1 @@ +{"allPSDEACModes":{"desc":"实体自动填充模式集合","type":"array","schema":"/dataentity/ac/IPSDEACMode"},"allPSDEActionGroups":{"desc":"实体行为组集合","type":"array","schema":"/dataentity/action/IPSDEActionGroup"},"allPSDEActions":{"desc":"实体行为集合","type":"array","schema":"/dataentity/action/IPSDEAction"},"allPSDEDBConfigs":{"desc":"实体数据库配置集合","type":"array","schema":"/database/IPSDEDBConfig"},"allPSDEDBTables":{"desc":"实体数据表集合","type":"array","schema":"/database/IPSDEDBTable"},"allPSDEDTSQueues":{"desc":"实体分布式事务处理队列集合","type":"array","schema":"/dataentity/dts/IPSDEDTSQueue"},"allPSDEDataExports":{"desc":"实体数据导出集合","type":"array","schema":"/dataentity/dataexport/IPSDEDataExport"},"allPSDEDataImports":{"desc":"实体数据导入集合","type":"array","schema":"/dataentity/dataimport/IPSDEDataImport"},"allPSDEDataQueries":{"desc":"实体数据查询集合","type":"array","schema":"/dataentity/ds/IPSDEDataQuery"},"allPSDEDataSets":{"desc":"实体数据集集合","type":"array","schema":"/dataentity/ds/IPSDEDataSet"},"allPSDEDataSyncs":{"desc":"实体数据同步集合","type":"array","schema":"/dataentity/datasync/IPSDEDataSync"},"allPSDEFGroups":{"desc":"实体属性组集合","type":"array","schema":"/dataentity/defield/IPSDEFGroup"},"allPSDEFields":{"desc":"属性集合","type":"array","schema":"/dataentity/defield/IPSDEField"},"allPSDEGroups":{"desc":"实体组集合","type":"array","schema":"/dataentity/IPSDEGroup"},"allPSDELogics":{"desc":"实体逻辑对象集合","type":"array","schema":"/dataentity/logic/IPSDELogic"},"allPSDEMainStates":{"desc":"实体主状态集合","type":"array","schema":"/dataentity/mainstate/IPSDEMainState"},"allPSDEMaps":{"desc":"实体映射集合","type":"array","schema":"/dataentity/datamap/IPSDEMap"},"allPSDEMethodDTOs":{"desc":"实体方法DTO集合","type":"array","schema":"/dataentity/service/IPSDEMethodDTO"},"allPSDENotifies":{"desc":"实体通知集合","type":"array","schema":"/dataentity/notify/IPSDENotify"},"allPSDEOPPrivs":{"desc":"实体操作标识集合","type":"array","schema":"/dataentity/priv/IPSDEOPPriv"},"allPSDEPrints":{"desc":"实体打印集合","type":"array","schema":"/dataentity/print/IPSDEPrint"},"allPSDERGroups":{"desc":"实体关系组集合","type":"array","schema":"/dataentity/der/IPSDERGroup"},"allPSDEReports":{"desc":"实体报表集合","type":"array","schema":"/dataentity/report/IPSDEReport"},"allPSDEUniStates":{"desc":"实体统一状态集合","type":"array","schema":"/dataentity/unistate/IPSDEUniState"},"allPSDEUserRoles":{"desc":"实体操作角色集合","type":"array","schema":"/dataentity/priv/IPSDEUserRole"},"allPSDEUtils":{"desc":"实体功能配置集合","type":"array","schema":"/dataentity/util/IPSDEUtil"},"allPSDEWFs":{"desc":"实体工作流集合","type":"array","schema":"/dataentity/wf/IPSDEWF"},"allPSModelDatas":{"desc":"实体附加模型数据集合","type":"array","schema":"/IPSModelData"},"auditMode":{"desc":"审计模式","type":"number","enum":{"1":"基本审计","2":"详细审计(含变化记录)"}},"bizTag":{"desc":"业务标记","type":"string","enum":{"DATAAUDIT":"数据审计记录","DYNASTORAGE":"动态数据存储","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"codeName":{"desc":"代码标识","type":"string"},"dEType":{"desc":"实体类型","type":"number","enum":{"1":"主实体","2":"附属实体","3":"关系实体","4":"动态附属实体"}},"dSLink":{"desc":"默认数据源","type":"string","enum":{"DEFAULT":"默认连接","DB2":"数据连接2","DB3":"数据连接3","DB4":"数据连接4","DB5":"数据连接5","DB6":"数据连接6","DB7":"数据连接7","DB8":"数据连接8","DB9":"数据连接9","DB10":"数据连接10","DB11":"数据连接11","DB12":"数据连接12"}},"dataAccCtrlArch":{"desc":"实体访问控制体系","type":"number","enum":{"1":"运行子系统角色体系(默认)","2":"当前系统角色及实体角色"}},"dataAccCtrlMode":{"desc":"实体数据访问控制方式","type":"number","enum":{"0":"无控制","1":"自控制","2":"附属主实体控制","3":"附属主实体控制(未映射自控)"}},"dataChangeLogMode":{"desc":"实体数据变化日志模式","type":"number","enum":{"0":"无日志","2":"单项数据(同步)","3":"单项数据(含关联数据)(同步)","4":"单项数据(异步)","5":"单项数据(含关联数据)(异步)"}},"defaultPSDEDataQuery":{"desc":"默认实体数据查询","type":"object","schema":"/dataentity/ds/IPSDEDataQuery"},"defaultPSDEDataSet":{"desc":"默认实体数据集合","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"defaultPSDEMSLogic":{"desc":"默认实体主状态迁移逻辑","type":"object","schema":"/dataentity/logic/IPSDEMSLogic"},"dynaInstMode":{"desc":"动态实例模式","type":"number","enum":{"0":"不启用","1":"启用","2":"启用副本"}},"dynaInstTag":{"desc":"动态实例标记","type":"string"},"dynaInstTag2":{"desc":"动态实例标记2","type":"string"},"enableActions":{"desc":"支持行为操作","type":"number","enum":{"1":"建立","2":"更新","4":"删除"}},"enableUIActions":{"desc":"支持界面操作","type":"number","enum":{"1":"建立","2":"更新","4":"删除"}},"enableViewLevel":{"desc":"启用视图级别","type":"number","enum":{"0":"默认(全部数据)","1":"2级(无行外数据)","2":"3级(关键数据)","3":"4级(个别字段)"}},"entityCacheTimeout":{"desc":"实体缓存超时时长(毫秒)","type":"number"},"indexDEType":{"desc":"索引实体类型","type":"string"},"indexTypePSDEField":{"desc":"索引类型属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"inheritPSDataEntity":{"desc":"继承实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"invalidLogicValue":{"desc":"逻辑无效值","type":"string"},"keyPSDEField":{"desc":"主键属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"lNPSLanguageRes":{"desc":"逻辑名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"logicName":{"desc":"逻辑名称","type":"string"},"logicValidPSDEField":{"desc":"逻辑有效属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"mainStatePSDEFields":{"desc":"主状态属性集合","type":"array","schema":"/dataentity/defield/IPSDEField"},"majorPSDEField":{"desc":"主信息属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"majorPSDERs":{"desc":"主关系集合","type":"array","schema":"/dataentity/der/IPSDERBase"},"minorPSDERs":{"desc":"从关系集合","type":"array","schema":"/dataentity/der/IPSDERBase"},"psDERInherit":{"desc":"继承关系对象","type":"object","schema":"/dataentity/der/IPSDERInherit"},"psSubSysServiceAPI":{"desc":"子系统服务接口","type":"object","schema":"/service/IPSSubSysServiceAPI"},"psSubSysServiceAPIDE":{"desc":"子系统服务接口实体","type":"object","schema":"/service/IPSSubSysServiceAPIDE"},"psSysDBScheme":{"desc":"关系数据库架构","type":"object","schema":"/database/IPSSysDBScheme"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"psSystemModule":{"desc":"系统模块","type":"object","schema":"/system/IPSSystemModule"},"saaSDCIdColumnName":{"desc":"SaaS数据租户列","type":"string"},"saaSDataIdColumnName":{"desc":"SaaS数据主键列","type":"string"},"saaSMode":{"desc":"SaaS模式","type":"number","enum":{"0":"不启用","1":"标准SaaS构型","2":"标准SaaS构型2","3":"标准SaaS构型3","4":"标准SaaS构型4"}},"serviceAPIMode":{"desc":"实体服务资源模式","type":"number","enum":{"0":"默认不提供","1":"默认提供"}},"serviceCodeName":{"desc":"服务代码标识","type":"string"},"storageMode":{"desc":"默认存储模式","type":"number","enum":{"0":"无存储","1":"SQL","2":"NoSQL","4":"ServiceAPI","9":"SQL(多模式支持)","10":"NoSQL(多模式支持)","12":"ServiceAPI(多模式支持)","128":"用户自定义","256":"用户自定义2"}},"systemTag":{"desc":"所属系统标识","type":"string"},"tableName":{"desc":"表名称","type":"string"},"tempDataHolder":{"desc":"临时数据处理模式","type":"number","enum":{"0":"不启用","1":"后台","2":"前端","3":"后台及前端"}},"unionKeyValuePSDEFields":{"desc":"联合键值属性集合","type":"array","schema":"/dataentity/defield/IPSDEField"},"validLogicValue":{"desc":"逻辑有效值","type":"string"},"view2Name":{"desc":"视图2名称","type":"string"},"view3Name":{"desc":"视图3名称","type":"string"},"view4Name":{"desc":"视图4名称","type":"string"},"viewName":{"desc":"视图名称","type":"string"},"virtualMode":{"desc":"虚拟实体模式","type":"number","enum":{"0":"不启用","1":"常规多继承模式","2":"高级继承扩展模式","3":"索引主实体模式"}},"enableAPIStorage":{"desc":"支持接口存储","type":"boolean"},"enableCreate":{"desc":"支持建立","type":"boolean"},"enableDataVer":{"desc":"启用数据版本能力","type":"boolean"},"enableEntityCache":{"desc":"启用实体缓存","type":"boolean"},"enableModify":{"desc":"支持修改","type":"boolean"},"enableMultiDS":{"desc":"同时支持多数据源","type":"boolean"},"enableMultiForm":{"desc":"支持多表单","type":"boolean"},"enableMultiStorage":{"desc":"支持多存储模式","type":"boolean"},"enableNoSQLStorage":{"desc":"支持NoSQL存储","type":"boolean"},"enableRemove":{"desc":"支持删除","type":"boolean"},"enableSQLStorage":{"desc":"支持SQL存储","type":"boolean"},"enableTempData":{"desc":"支持临时数据","type":"boolean"},"enableTempDataBackend":{"desc":"支持后端临时数据处理","type":"boolean"},"enableTempDataFront":{"desc":"支持前端临时数据处理","type":"boolean"},"logicValid":{"desc":"启用逻辑有效","type":"boolean"},"subSysAsCloud":{"desc":"子系统以云服务方式提供","type":"boolean"},"subSysDE":{"desc":"子系统实体","type":"boolean"},"virtual":{"desc":"虚拟实体","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/IPSDataEntityObject.json b/resources/model/dataentity/IPSDataEntityObject.json new file mode 100644 index 0000000..8fc9234 --- /dev/null +++ b/resources/model/dataentity/IPSDataEntityObject.json @@ -0,0 +1 @@ +{"extends":["/IPSObject","/IPSModelObject"],"extendMode":{"desc":"子系统扩展","type":"number","enum":{"0":"无扩展","2":"子系统功能扩展"}}} \ No newline at end of file diff --git a/resources/model/dataentity/IPSSysDEGroup.json b/resources/model/dataentity/IPSSysDEGroup.json new file mode 100644 index 0000000..0c9efeb --- /dev/null +++ b/resources/model/dataentity/IPSSysDEGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDEGroup"]} \ No newline at end of file diff --git a/resources/model/dataentity/ac/IPSDEACMode.json b/resources/model/dataentity/ac/IPSDEACMode.json new file mode 100644 index 0000000..86fafb8 --- /dev/null +++ b/resources/model/dataentity/ac/IPSDEACMode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"emptyText":{"desc":"无值显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"无值内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"logicName":{"desc":"逻辑名称","type":"string"},"minorSortDir":{"desc":"附加排序方向","type":"string"},"psDEACModeDataItems":{"desc":"数据项集合","type":"array","schema":"/dataentity/ac/IPSDEACModeDataItem"},"pagingSize":{"desc":"分页大小","type":"number"},"defaultMode":{"desc":"默认自填模式","type":"boolean"},"enablePagingBar":{"desc":"支持分页栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/ac/IPSDEACModeDataItem.json b/resources/model/dataentity/ac/IPSDEACModeDataItem.json new file mode 100644 index 0000000..e9d4e9c --- /dev/null +++ b/resources/model/dataentity/ac/IPSDEACModeDataItem.json @@ -0,0 +1 @@ +{"extends":["/data/IPSDataItem"],"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"脚本代码模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEAction.json b/resources/model/dataentity/action/IPSDEAction.json new file mode 100644 index 0000000..3a23bca --- /dev/null +++ b/resources/model/dataentity/action/IPSDEAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject","/IPSModelSortable"],"actionMode":{"desc":"行为模式","type":"string","enum":{"CREATE":"创建数据","READ":"读取数据","UPDATE":"更新数据","DELETE":"删除数据","CUSTOM":"自定义操作","GETDRAFT":"获取草稿","UNKNOWN":"未知操作","MOVEORDER":"移动位置","CHECKKEY":"检查主键","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"actionType":{"desc":"行为类型","type":"string","enum":{"USERCUSTOM":"用户自定义","DELOGIC":"实体处理逻辑","BUILTIN":"内置方法","SELECTBYKEY":"通过键值获取","USERCREATE":"用户扩展建立","USERUPDATE":"用户扩展更新","USERSYSUPDATE":"用户扩展系统更新","SCRIPT":"脚本代码","REMOTE":"远程接口行为"}},"afterPSDEActionLogics":{"desc":"执行后附加逻辑集合","type":"array","schema":"/dataentity/action/IPSDEActionLogic"},"batchActionMode":{"desc":"批操作模式","type":"number","enum":{"0":"不支持","1":"支持","2":"仅支持批操作","5":"支持(事务)","6":"仅支持批操作(事务)"}},"beforePSDEActionLogics":{"desc":"执行前附加逻辑集合","type":"array","schema":"/dataentity/action/IPSDEActionLogic"},"checkPSDEActionLogics":{"desc":"检查附加逻辑集合","type":"array","schema":"/dataentity/action/IPSDEActionLogic"},"codeName":{"desc":"代码标识","type":"string"},"extendMode":{"desc":"子系统扩展","type":"number","enum":{"0":"无扩展","2":"子系统功能扩展"}},"logicName":{"desc":"逻辑名称","type":"string"},"orderValue":{"desc":"行为次序","type":"number"},"psDEActionInput":{"desc":"调用输入对象","type":"object","schema":"/dataentity/action/IPSDEActionInput"},"psDEActionParams":{"desc":"行为参数集合","type":"array","schema":"/dataentity/action/IPSDEActionParam"},"psDEActionReturn":{"desc":"调用返回对象","type":"object","schema":"/dataentity/action/IPSDEActionReturn"},"psDEActionVRs":{"desc":"行为附加值规则集合","type":"array","schema":"/dataentity/action/IPSDEActionVR"},"psDEOPPriv":{"desc":"服务访问操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"psSubSysServiceAPIDEMethod":{"desc":"外部服务接口方法","type":"object","schema":"/service/IPSSubSysServiceAPIDEMethod"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"paramMode":{"desc":"行为参数模式","type":"number","enum":{"1":"默认参数(设置指定参数项值)","2":"指定参数(主键默认传入)","3":"其它对象"}},"preparePSDEActionLogics":{"desc":"准备附加逻辑集合","type":"array","schema":"/dataentity/action/IPSDEActionLogic"},"tempDataMode":{"desc":"临时数据模式","type":"number","enum":{"0":"无临时数据模式","1":"主数据模式","2":"从数据模式"}},"testActionMode":{"desc":"测试行为模式","type":"number","enum":{"0":"无测试行为","1":"有测试行为","3":"公开测试行为"}},"timeOut":{"desc":"调用超时","type":"number"},"transactionMode":{"desc":"事务模式","type":"string"},"batchAction":{"desc":"批操作行为","type":"boolean"},"builtinAction":{"desc":"预置行为","type":"boolean"},"customParam":{"desc":"自定义行为参数","type":"boolean"},"enableAudit":{"desc":"启用访问审计","type":"boolean"},"enableTempData":{"desc":"支持临时数据","type":"boolean"},"prepareLast":{"desc":"准备操作之前数据","type":"boolean"},"valid":{"desc":"启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionGroup.json b/resources/model/dataentity/action/IPSDEActionGroup.json new file mode 100644 index 0000000..91186da --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionGroupDetail.json b/resources/model/dataentity/action/IPSDEActionGroupDetail.json new file mode 100644 index 0000000..6e629c6 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"detailType":{"desc":"成员类型","type":"string","enum":{"DEACTION":"实体行为","DEDATASET":"实体结果集"}},"orderValue":{"desc":"排序值","type":"number"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionInput.json b/resources/model/dataentity/action/IPSDEActionInput.json new file mode 100644 index 0000000..58cf429 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionInput.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodInput"],"keyPSDEField":{"desc":"主键属性对象","type":"object","schema":"/dataentity/defield/IPSDEField"},"psDEActionParams":{"desc":"行为参数集合","type":"array","schema":"/dataentity/action/IPSDEActionParam"},"psDEMethodDTO":{"desc":"实体方法DTO对象","type":"object","schema":"/dataentity/service/IPSDEMethodDTO"},"output":{"desc":"输入对象同时为结果对象","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionInputDTO.json b/resources/model/dataentity/action/IPSDEActionInputDTO.json new file mode 100644 index 0000000..e8e1db7 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionInputDTO.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodDTO"],"psDEActionInputDTOFields":{"desc":"实体行为输入DTO对象属性集合","type":"array","schema":"/dataentity/action/IPSDEActionInputDTOField"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionInputDTOField.json b/resources/model/dataentity/action/IPSDEActionInputDTOField.json new file mode 100644 index 0000000..dd2dfb9 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionInputDTOField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodDTOField"]} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionLogic.json b/resources/model/dataentity/action/IPSDEActionLogic.json new file mode 100644 index 0000000..a8f7742 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionLogic.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"actionLogicType":{"desc":"行为逻辑类型","type":"number","enum":{"1":"内部逻辑","0":"外部逻辑","2":"脚本代码","3":"实体通知"}},"attachMode":{"desc":"附加模式","type":"string","enum":{"PREPARE":"准备","CHECK":"检查","BEFORE":"执行之前","AFTER":"执行之后"}},"dstPSDE":{"desc":"目标实体","type":"object","schema":"/dataentity/IPSDataEntity"},"dstPSDEAction":{"desc":"目标实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"psDELogic":{"desc":"实体逻辑","type":"object","schema":"/dataentity/logic/IPSDELogic"},"psDENotify":{"desc":"实体通知","type":"object","schema":"/dataentity/notify/IPSDENotify"},"scriptCode":{"desc":"脚本代码","type":"string"},"cloneParam":{"desc":"克隆传入参数","type":"boolean"},"enableBackend":{"desc":"支持后台执行","type":"boolean"},"ignoreException":{"desc":"是否忽略异常","type":"boolean"},"internalLogic":{"desc":"内部逻辑","type":"boolean"},"prepareLast":{"desc":"准备操作之前数据","type":"boolean"},"valid":{"desc":"启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionParam.json b/resources/model/dataentity/action/IPSDEActionParam.json new file mode 100644 index 0000000..2543d78 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/IPSModelSortable"],"psDEField":{"desc":"参数实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"paramTag":{"desc":"参数标记","type":"string"},"paramTag2":{"desc":"参数标记2","type":"string"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"value":{"desc":"值或属性","type":"string"},"valueType":{"desc":"值类型","type":"string","enum":{"INPUTVALUE":"输入值(默认)","NONEVALUE":"无值(不设置)","PARAM":"数据对象属性","VALUE":"指定值","NULLVALUE":"空值","SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据"}},"array":{"desc":"数组","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionReturn.json b/resources/model/dataentity/action/IPSDEActionReturn.json new file mode 100644 index 0000000..a4be272 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionReturn.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodReturn"],"psDEDataQuery":{"desc":"属性组关联查询","type":"object","schema":"/dataentity/ds/IPSDEDataQuery"},"psDEMethodDTO":{"desc":"实体方法DTO对象","type":"object","schema":"/dataentity/service/IPSDEMethodDTO"},"stdDataType":{"desc":"简单值类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionTempl.json b/resources/model/dataentity/action/IPSDEActionTempl.json new file mode 100644 index 0000000..b0bf330 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionTempl.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"predefinedTempl":{"desc":"预置模板","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEActionVR.json b/resources/model/dataentity/action/IPSDEActionVR.json new file mode 100644 index 0000000..a71ff14 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEActionVR.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"orderValue":{"desc":"检查次序","type":"number"},"psDEFValueRule":{"desc":"属性值规则","type":"object","schema":"/dataentity/defield/valuerule/IPSDEFValueRule"},"psDEField":{"desc":"属性对象","type":"object","schema":"/dataentity/defield/IPSDEField"},"valueRuleType":{"desc":"值规则类型","type":"string","enum":{"DEFVALUERULE":"实体值规则","SYSVALUERULE":"系统值规则"}}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDELogicAction.json b/resources/model/dataentity/action/IPSDELogicAction.json new file mode 100644 index 0000000..7d05cc1 --- /dev/null +++ b/resources/model/dataentity/action/IPSDELogicAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/action/IPSDEAction"],"psDELogic":{"desc":"实体处理逻辑","type":"object","schema":"/dataentity/logic/IPSDELogic"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDERemoteAction.json b/resources/model/dataentity/action/IPSDERemoteAction.json new file mode 100644 index 0000000..afa5492 --- /dev/null +++ b/resources/model/dataentity/action/IPSDERemoteAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/action/IPSDEAction"],"psSubSysServiceAPIDEMethod":{"desc":"外部服务接口方法","type":"object","schema":"/service/IPSSubSysServiceAPIDEMethod"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEScriptAction.json b/resources/model/dataentity/action/IPSDEScriptAction.json new file mode 100644 index 0000000..374ad35 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEScriptAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/action/IPSDEAction"],"scriptCode":{"desc":"脚本代码","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDESelectAction.json b/resources/model/dataentity/action/IPSDESelectAction.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/action/IPSDESelectAction.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDESelectActionParam.json b/resources/model/dataentity/action/IPSDESelectActionParam.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/action/IPSDESelectActionParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDESelectByKeyAction.json b/resources/model/dataentity/action/IPSDESelectByKeyAction.json new file mode 100644 index 0000000..3fda49a --- /dev/null +++ b/resources/model/dataentity/action/IPSDESelectByKeyAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/action/IPSDEAction"],"psDEDataQuery":{"desc":"实体数据查询","type":"object","schema":"/dataentity/ds/IPSDEDataQuery"}} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEUserCreateAction.json b/resources/model/dataentity/action/IPSDEUserCreateAction.json new file mode 100644 index 0000000..9068022 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEUserCreateAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/action/IPSDEAction"]} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEUserSysUpdateAction.json b/resources/model/dataentity/action/IPSDEUserSysUpdateAction.json new file mode 100644 index 0000000..9068022 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEUserSysUpdateAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/action/IPSDEAction"]} \ No newline at end of file diff --git a/resources/model/dataentity/action/IPSDEUserUpdateAction.json b/resources/model/dataentity/action/IPSDEUserUpdateAction.json new file mode 100644 index 0000000..9068022 --- /dev/null +++ b/resources/model/dataentity/action/IPSDEUserUpdateAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/action/IPSDEAction"]} \ No newline at end of file diff --git a/resources/model/dataentity/dataexport/IPSDEDataExport.json b/resources/model/dataentity/dataexport/IPSDEDataExport.json new file mode 100644 index 0000000..0f00d8b --- /dev/null +++ b/resources/model/dataentity/dataexport/IPSDEDataExport.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"maxRowCount":{"desc":"最大记录数","type":"number"},"psDEDataExportItems":{"desc":"导出项集合","type":"array","schema":"/dataentity/dataexport/IPSDEDataExportItem"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"}} \ No newline at end of file diff --git a/resources/model/dataentity/dataexport/IPSDEDataExportItem.json b/resources/model/dataentity/dataexport/IPSDEDataExportItem.json new file mode 100644 index 0000000..64f2d8f --- /dev/null +++ b/resources/model/dataentity/dataexport/IPSDEDataExportItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"defaultValue":{"desc":"默认值","type":"object"},"format":{"desc":"格式化","type":"string"},"psCodeList":{"desc":"代码表","type":"object","schema":"/codelist/IPSCodeList"},"privilegeId":{"desc":"权限标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/dataimport/IPSDEDataImport.json b/resources/model/dataentity/dataimport/IPSDEDataImport.json new file mode 100644 index 0000000..b9a7bf3 --- /dev/null +++ b/resources/model/dataentity/dataimport/IPSDEDataImport.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"batchSize":{"desc":"批导入数量","type":"number"},"codeName":{"desc":"代码标识","type":"string"},"createDataAccessAction":{"desc":"建立操作标识","type":"string"},"createPSDEAction":{"desc":"建立数据行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"psDEDataImportItems":{"desc":"导入项集合","type":"array","schema":"/dataentity/dataimport/IPSDEDataImportItem"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"updateDataAccessAction":{"desc":"更新操作标识","type":"string"},"updatePSDEAction":{"desc":"更新数据行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"defaultMode":{"desc":"默认导入","type":"boolean"},"ignoreError":{"desc":"忽略导入错误","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/dataimport/IPSDEDataImportItem.json b/resources/model/dataentity/dataimport/IPSDEDataImportItem.json new file mode 100644 index 0000000..ba4df4e --- /dev/null +++ b/resources/model/dataentity/dataimport/IPSDEDataImportItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/IPSModelSortable"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"createDV":{"desc":"建立默认值","type":"string"},"createDVT":{"desc":"建立默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据"}},"psCodeList":{"desc":"代码表对象","type":"object","schema":"/codelist/IPSCodeList"},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"updateDV":{"desc":"更新默认值","type":"string"},"updateDVT":{"desc":"更新默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据"}},"hiddenDataItem":{"desc":"隐藏数据项","type":"boolean"},"uniqueItem":{"desc":"数据识别项","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/datamap/IPSDEMap.json b/resources/model/dataentity/datamap/IPSDEMap.json new file mode 100644 index 0000000..ab49360 --- /dev/null +++ b/resources/model/dataentity/datamap/IPSDEMap.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"dstPSDE":{"desc":"映射目标实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psDEMapActions":{"desc":"映射行为集合","type":"array","schema":"/dataentity/datamap/IPSDEMapAction"},"psDEMapDataQueries":{"desc":"映射查询集合","type":"array","schema":"/dataentity/datamap/IPSDEMapDataQuery"},"psDEMapDataSets":{"desc":"映射数据集集合","type":"array","schema":"/dataentity/datamap/IPSDEMapDataSet"},"psDEMapFields":{"desc":"映射属性集合","type":"array","schema":"/dataentity/datamap/IPSDEMapField"},"autoDEActionMap":{"desc":"自动行为映射","type":"boolean"},"autoDEDataQueryMap":{"desc":"自动数据查询映射","type":"boolean"},"autoDEDataSetMap":{"desc":"自动数据集合映射","type":"boolean"},"autoDEFieldMap":{"desc":"自动属性映射","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/datamap/IPSDEMapAction.json b/resources/model/dataentity/datamap/IPSDEMapAction.json new file mode 100644 index 0000000..7338c3a --- /dev/null +++ b/resources/model/dataentity/datamap/IPSDEMapAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/datamap/IPSDEMapObject"],"dstPSDEAction":{"desc":"目标实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"srcPSDEAction":{"desc":"源实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"}} \ No newline at end of file diff --git a/resources/model/dataentity/datamap/IPSDEMapDataQuery.json b/resources/model/dataentity/datamap/IPSDEMapDataQuery.json new file mode 100644 index 0000000..265fd66 --- /dev/null +++ b/resources/model/dataentity/datamap/IPSDEMapDataQuery.json @@ -0,0 +1 @@ +{"extends":["/dataentity/datamap/IPSDEMapObject"],"dstPSDEDataQuery":{"desc":"目标实体查询","type":"object","schema":"/dataentity/ds/IPSDEDataQuery"},"srcPSDEDataQuery":{"desc":"源实体查询","type":"object","schema":"/dataentity/ds/IPSDEDataQuery"}} \ No newline at end of file diff --git a/resources/model/dataentity/datamap/IPSDEMapDataSet.json b/resources/model/dataentity/datamap/IPSDEMapDataSet.json new file mode 100644 index 0000000..ac14149 --- /dev/null +++ b/resources/model/dataentity/datamap/IPSDEMapDataSet.json @@ -0,0 +1 @@ +{"extends":["/dataentity/datamap/IPSDEMapObject"],"dstPSDEDataSet":{"desc":"目标实体数据集合","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"srcPSDEDataSet":{"desc":"源实体数据集合","type":"object","schema":"/dataentity/ds/IPSDEDataSet"}} \ No newline at end of file diff --git a/resources/model/dataentity/datamap/IPSDEMapField.json b/resources/model/dataentity/datamap/IPSDEMapField.json new file mode 100644 index 0000000..d06977f --- /dev/null +++ b/resources/model/dataentity/datamap/IPSDEMapField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/datamap/IPSDEMapObject"],"dstFieldName":{"desc":"目标属性名称","type":"string"},"dstPSDEField":{"desc":"目标实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"srcFieldName":{"desc":"源属性名称","type":"string"},"srcPSDEField":{"desc":"源实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"srcType":{"desc":"源类型","type":"string","enum":{"FIELD":"属性","VALUE":"直接值"}},"srcValue":{"desc":"源值","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/datamap/IPSDEMapObject.json b/resources/model/dataentity/datamap/IPSDEMapObject.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/datamap/IPSDEMapObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/datasync/IPSDEDataSync.json b/resources/model/dataentity/datasync/IPSDEDataSync.json new file mode 100644 index 0000000..68e481d --- /dev/null +++ b/resources/model/dataentity/datasync/IPSDEDataSync.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"eventType":{"desc":"事件类型","type":"number","enum":{"1":"新建","2":"更新","4":"删除"}},"importPSDEAction":{"desc":"导入实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"inPSDEDataSet":{"desc":"输入数据集合","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"inPSSysDataSyncAgent":{"desc":"输入系统数据同步代理对象","type":"object","schema":"/res/IPSSysDataSyncAgent"},"inScriptCode":{"desc":"输入调用脚本代码","type":"string"},"inTestPSDEAction":{"desc":"输入判断实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"outPSDEDataSet":{"desc":"输出数据集合","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"outPSSysDataSyncAgent":{"desc":"输出系统数据同步代理对象","type":"object","schema":"/res/IPSSysDataSyncAgent"},"outScriptCode":{"desc":"输出调用脚本代码","type":"string"},"outTestPSDEAction":{"desc":"输出判断实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"syncDir":{"desc":"同步方向","type":"string","enum":{"IN":"输入","OUT":"输出"}},"exportFull":{"desc":"导出全部","type":"boolean"},"timerMode":{"desc":"定时触发模式","type":"boolean"},"valid":{"desc":"启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFGroup.json b/resources/model/dataentity/defield/IPSDEFGroup.json new file mode 100644 index 0000000..927262b --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject","/IPSModelSortable"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"groupType":{"desc":"属性组类型","type":"string","enum":{"FIELDS":"指定属性","FORMITEMS":"表单项","BASEFIELDS":"基础属性","AUDITFIELDS":"审计属性"}},"logicMode":{"desc":"逻辑模式","type":"string","enum":{"SORT":"属性值排序","NOTSAME":"属性值差异","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"logicParam":{"desc":"逻辑参数","type":"string"},"logicParam2":{"desc":"逻辑参数2","type":"string"},"psDEFGroupDetails":{"desc":"属性组成员集合","type":"array","schema":"/dataentity/defield/IPSDEFGroupDetail"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFGroupDetail.json b/resources/model/dataentity/defield/IPSDEFGroupDetail.json new file mode 100644 index 0000000..0bcb474 --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelSortable","/IPSModelObject","/dataentity/defield/IPSDEFieldBase"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"detailParam":{"desc":"成员参数","type":"string"},"detailParam2":{"desc":"成员参数2","type":"string"},"lNPSLanguageRes":{"desc":"逻辑名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"logicName":{"desc":"中文名称","type":"string"},"orderValue":{"desc":"排序值","type":"number"},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"stringLength":{"desc":"字符串长度","type":"number"},"allowEmpty":{"desc":"允许空输入","type":"boolean"},"enableUserInsert":{"desc":"支持用户输入","type":"boolean"},"enableUserUpdate":{"desc":"支持用户更新","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFInputTip.json b/resources/model/dataentity/defield/IPSDEFInputTip.json new file mode 100644 index 0000000..6621205 --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFInputTip.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFieldObject"],"codeName":{"desc":"代码标识","type":"string"},"content":{"desc":"内容","type":"string"},"contentPSLanguageRes":{"desc":"内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"htmlContent":{"desc":"Html内容","type":"string"},"rawContent":{"desc":"直接内容","type":"string"},"tipMode":{"desc":"提示模式","type":"string"},"uniqueTag":{"desc":"唯一标记","type":"string"},"default":{"desc":"属性默认输入提示","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFSearchMode.json b/resources/model/dataentity/defield/IPSDEFSearchMode.json new file mode 100644 index 0000000..81ded93 --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFSearchMode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFieldObject","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"valueFormat":{"desc":"值格式化","type":"string"},"valueFunc":{"desc":"值处理","type":"string"},"valueOP":{"desc":"值操作","type":"string"},"default":{"desc":"默认搜索项","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFUIItem.json b/resources/model/dataentity/defield/IPSDEFUIItem.json new file mode 100644 index 0000000..5870d79 --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFUIItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFieldObject","/IPSModelObject","/dataentity/defield/IPSDEFieldBase"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"codeName":{"desc":"代码标识","type":"string"},"editorParams":{"desc":"编辑器参数集合","type":"object"},"editorStyle":{"desc":"编辑器样式","type":"string"},"editorType":{"desc":"编辑器类型","type":"string"},"maxValueString":{"desc":"最大值(字符串)","type":"string"},"minStringLength":{"desc":"最小字符串长度","type":"number"},"minValueString":{"desc":"最小值(字符串)","type":"string"},"originCaption":{"desc":"原始标题","type":"string"},"outputCodeListConfigMode":{"desc":"输出代码表配置模式","type":"number","enum":{"0":"无","1":"只输出选择项","2":"输出子项"}},"pHPSLanguageRes":{"desc":"输入提示语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psSysImage":{"desc":"图标图片资源对象","type":"object","schema":"/res/IPSSysImage"},"placeHolder":{"desc":"输入提示信息","type":"string"},"precision":{"desc":"数据精度","type":"number"},"refLinkPSDEViewCodeName":{"desc":"引用链接实体视图代码标识","type":"string"},"refMPickupPSDEViewCodeName":{"desc":"引用多项选择实体视图代码标识","type":"string"},"refPSDEACMode":{"desc":"引用实体自填模式","type":"object","schema":"/dataentity/ac/IPSDEACMode"},"refPSDEDataSet":{"desc":"引用实体数据集","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"refPSDataEntity":{"desc":"引用实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"refPickupPSDEViewCodeName":{"desc":"引用单项选择实体视图代码标识","type":"string"},"stringLength":{"desc":"字符串长度","type":"number"},"uIMode":{"desc":"应用模式","type":"string","enum":{"DEFAULT":"默认模式","CUSTOM":"用户自定义","MOBILEDEFAULT":"移动端默认模式","APPDEFAULT":"应用默认模式","MODE1":"模式1","MODE2":"模式2","MODE3":"模式3","MODE4":"模式4","MODE5":"模式5","MODE6":"模式6","MODE7":"模式7","MODE8":"模式8","MODE9":"模式9"}},"valueFormat":{"desc":"值格式化","type":"string"},"allowEmpty":{"desc":"允许空值输入","type":"boolean"},"mobileMode":{"desc":"移动端模式","type":"boolean"},"needCodeListConfig":{"desc":"需要代码表配置","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFUIMode.json b/resources/model/dataentity/defield/IPSDEFUIMode.json new file mode 100644 index 0000000..4cacbb3 --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFUIMode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFieldObject"],"codeName":{"desc":"代码标识","type":"string"},"psDEFFormItem":{"desc":"属性表单项模式","type":"object","schema":"/control/form/IPSDEFFormItem"},"type":{"desc":"应用模式","type":"string","enum":{"DEFAULT":"默认模式","CUSTOM":"用户自定义","MOBILEDEFAULT":"移动端默认模式","APPDEFAULT":"应用默认模式","MODE1":"模式1","MODE2":"模式2","MODE3":"模式3","MODE4":"模式4","MODE5":"模式5","MODE6":"模式6","MODE7":"模式7","MODE8":"模式8","MODE9":"模式9"}},"mobileMode":{"desc":"移动端模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEField.json b/resources/model/dataentity/defield/IPSDEField.json new file mode 100644 index 0000000..930aa9e --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEField.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/dataentity/IPSDataEntityObject","/dataentity/defield/IPSDEFieldBase"],"allPSDEFDTColumns":{"desc":"数据库列对象集合","type":"array","schema":"/database/IPSDEFDTColumn"},"allPSDEFSearchModes":{"desc":"属性搜索模式集合","type":"array","schema":"/dataentity/defield/IPSDEFSearchMode"},"allPSDEFUIModes":{"desc":"属性界面模式集合","type":"array","schema":"/dataentity/defield/IPSDEFUIMode"},"allPSDEFValueRules":{"desc":"属性值规则集合","type":"array","schema":"/dataentity/defield/valuerule/IPSDEFValueRule"},"auditInfoFormat":{"desc":"审计格式","type":"string"},"bizTag":{"desc":"业务标记","type":"string","enum":{"WFINSTANCEID":"流程实例标识","WFSTEP":"流程实例步骤值","WFUSERSTATE":"流程实例业务状态","WFVERSION":"流程实例版本","WFSTATE":"流程实例状态","BEGINTIME":"开始时间","ENDTIME":"结束时间","DURATION":"持续时间","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4","USER5":"用户自定义5","USER6":"用户自定义6","USER7":"用户自定义7","USER8":"用户自定义8","USER9":"用户自定义9"}},"checkPSDEFLogic":{"desc":"值检查逻辑","type":"object","schema":"/dataentity/logic/IPSDEFLogic"},"codeName":{"desc":"代码标识","type":"string"},"computeExpression":{"desc":"值计算表达式","type":"string"},"computePSDEFLogic":{"desc":"值计算逻辑","type":"object","schema":"/dataentity/logic/IPSDEFLogic"},"dEFType":{"desc":"属性类型","type":"number","enum":{"1":"物理字段[来自当前实体物理表字段]","2":"逻辑字段[来自计算式]","3":"链接字段[来自关系实体字段]","4":"扩展物理字段[来自动态存储实体物理表字段]","5":"应用界面字段[无存储]"}},"dEMSFieldMode":{"desc":"主状态属性模式","type":"string","enum":{"STATE1":"状态属性1","STATE2":"状态属性2","STATE3":"状态属性3"}},"dataType":{"desc":"数据类型","type":"string","enum":{"ACID":"自增标识,整数类型,用户不可见","BIGINT":"大整型","CODELISTTEXT":"选择项文本","CURRENCY":"货币","CURRENCYUNIT":"货币单位","DATE":"日期型","DATETIME":"日期时间型","DATETIME_BIRTHDAY":"出生日期","DECIMAL":"数值","BIGDECIMAL":"大数值","FLOAT":"浮点","GUID":"全局唯一标识,文本类型,用户不可见","HTMLTEXT":"HTML文本,没有长度限制","INHERIT":"继承属性","INT":"整型","LONGTEXT":"长文本,没有长度限制","LONGTEXT_1000":"长文本,长度1000","NBID":"数字串业务标识,数字类型,用户可见","NMCODELIST":"多项选择(数值)","NSCODELIST":"单项选择(数值)","PICKUP":"外键值","PICKUPDATA":"外键值附加数据","PICKUPTEXT":"外键值文本","SBID":"字符串业务标识,文本类型,用户可见","SMCODELIST":"多项选择(文本值)","SSCODELIST":"单项选择(文本值)","TEXT":"文本,可指定长度","TEXT_EMAIL":"电子邮件","TIME":"时间型","TRUEFALSE":"真假逻辑","VARBINARY":"二进制流,没有长度限制","WFSTATE":"工作流处理状态","YESNO":"是否逻辑","ONE2MANYDATA":"一对多关系数据集合","PICKUPOBJECT":"外键值对象","ONE2ONEDATA":"一对一关系数据对象","FILE":"文件","FILELIST":"文件列表","LONGFILELIST":"文件列表,没有数量限制","PICTURE":"图片","PICTURELIST":"图片列表","LONGPICTURELIST":"图片列表,没有数量限制"}},"defaultValue":{"desc":"默认值","type":"string"},"defaultValuePSDEFLogic":{"desc":"默认值逻辑","type":"object","schema":"/dataentity/logic/IPSDEFLogic"},"defaultValueType":{"desc":"默认值类型","type":"string","enum":{"SESSION":"用户全局对象","APPLICATION":"系统全局对象","UNIQUEID":"唯一编码","CONTEXT":"网页请求","PARAM":"数据对象属性","OPERATOR":"当前操作用户(编号)","OPERATORNAME":"当前操作用户(名称)","CURTIME":"当前时间","APPDATA":"当前应用数据","EXPRESSION":"表达式","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"dupCheckMode":{"desc":"重复值检查","type":"string","enum":{"NONE":"不检查","ALL":"全部检查","NOTNULL":"非空检查","CHECKVALUES":"指定值范围","EXCLUDEVALUES":"排除值范围"}},"dupCheckPSDEFields":{"desc":"重复值检查范围属性集合","type":"array","schema":"/dataentity/defield/IPSDEField"},"getDupCheckValues":{"desc":"重复值检查集合","type":"array","schema":"string"},"importOrder":{"desc":"导入次序","type":"number"},"importTag":{"desc":"导入标识","type":"string"},"lNPSLanguageRes":{"desc":"逻辑名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"length":{"desc":"字段长度","type":"number"},"logicName":{"desc":"逻辑名称","type":"string"},"maxValueString":{"desc":"最大值(字符串)","type":"string"},"minStringLength":{"desc":"最小字符串长度","type":"number"},"minValueString":{"desc":"最小值(字符串)","type":"string"},"nullValueOrderMode":{"desc":"数据空值排序模式","type":"string","enum":{"FIRST":"最先","LAST":"最后"}},"onChangePSDEFLogic":{"desc":"值变更逻辑","type":"object","schema":"/dataentity/logic/IPSDEFLogic"},"psCodeList":{"desc":"属性代码表","type":"object","schema":"/codelist/IPSCodeList"},"psDEDBTable":{"desc":"实体数据表对象","type":"object","schema":"/database/IPSDEDBTable"},"psSysDBColumn":{"desc":"关系数据库列对象","type":"object","schema":"/database/IPSSysDBColumn"},"psSysSequence":{"desc":"系统值序列","type":"object","schema":"/res/IPSSysSequence"},"psSysTranslator":{"desc":"系统值转换器","type":"object","schema":"/res/IPSSysTranslator"},"precision":{"desc":"数据精度","type":"number"},"predefinedType":{"desc":"预置业务类型","type":"string","enum":{"NONE":"(非预置属性)","LOGICVALID":"逻辑有效标识","ORDERVALUE":"排序值","VERSION":"数据版本","CREATEMAN":"建立人标识","CREATEMANNAME":"建立人名称","CREATEDATE":"建立时间","UPDATEMAN":"更新人标识","UPDATEMANNAME":"更新人名称","UPDATEDATE":"更新时间","ORGID":"组织机构标识","ORGNAME":"组织机构名称","ORGSECTORID":"部门标识","ORGSECTORNAME":"部门名称","PARENTTYPE":"动态父类型","PARENTID":"动态父标识","PARENTNAME":"动态父名称","PARENTIDPATH":"父标识路径","PARENTNAMEPATH":"父名称路径","TIMESTAMP":"时间戳"}},"sequenceMode":{"desc":"值序列使用模式","type":"string","enum":{"NONE":"无","GETDRAFT":"草稿","CREATE":"建立","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"stringCase":{"desc":"字符串转化","type":"string","enum":{"UCASE":"转换为大写","LCASE":"转换为小写","PASSWORD":"密码模式","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"stringLength":{"desc":"最大字符串长度","type":"number"},"translatorMode":{"desc":"值转换器使用模式","type":"string","enum":{"NONE":"无","DIGEST":"密码","ENCRYPT":"加密","TRANSLATE":"转换器处理","TRANSLATE2":"转换器处理(双向)","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"unionKeyValue":{"desc":"联合键值属性","type":"string","enum":{"KEY1":"联合键值1","KEY2":"联合键值2","KEY3":"联合键值3","KEY4":"联合键值4","KEY5":"联合键值5","KEY6":"联合键值6","KEY7":"联合键值7","KEY8":"联合键值8"}},"user2PSDEFLogic":{"desc":"用户自定义逻辑2","type":"object","schema":"/dataentity/logic/IPSDEFLogic"},"user3PSDEFLogic":{"desc":"用户自定义逻辑3","type":"object","schema":"/dataentity/logic/IPSDEFLogic"},"user4PSDEFLogic":{"desc":"用户自定义逻辑4","type":"object","schema":"/dataentity/logic/IPSDEFLogic"},"userPSDEFLogic":{"desc":"用户自定义逻辑","type":"object","schema":"/dataentity/logic/IPSDEFLogic"},"valueFormat":{"desc":"值格式化","type":"string"},"valuePSDEField":{"desc":"值项属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"allowEmpty":{"desc":"允许空值输入","type":"boolean"},"checkRecursion":{"desc":"检查递归","type":"boolean"},"dataTypeDEField":{"desc":"数据类型属性","type":"boolean"},"dynaStorageDEField":{"desc":"动态存储属性","type":"boolean"},"enableAudit":{"desc":"支持审计","type":"boolean"},"enableCreate":{"desc":"支持建立","type":"boolean"},"enableDBAutoValue":{"desc":"数据库自动产生值","type":"boolean"},"enableModify":{"desc":"支持修改","type":"boolean"},"enablePrivilege":{"desc":"支持字段权限","type":"boolean"},"enableQuickSearch":{"desc":"支持快速搜索","type":"boolean"},"enableUICreate":{"desc":"支持界面建立","type":"boolean"},"enableUIModify":{"desc":"支持界面修改","type":"boolean"},"formulaDEField":{"desc":"公式属性","type":"boolean"},"indexTypeDEField":{"desc":"索引类型属性","type":"boolean"},"inheritDEField":{"desc":"继承属性","type":"boolean"},"keyDEField":{"desc":"主键属性","type":"boolean"},"linkDEField":{"desc":"链接属性","type":"boolean"},"majorDEField":{"desc":"主属性","type":"boolean"},"multiFormDEField":{"desc":"多表单识别属性","type":"boolean"},"pasteReset":{"desc":"拷贝重置","type":"boolean"},"phisicalDEField":{"desc":"物理属性","type":"boolean"},"queryColumn":{"desc":"查询列","type":"boolean"},"systemReserver":{"desc":"系统属性","type":"boolean"},"uIAssistDEField":{"desc":"界面辅助属性","type":"boolean"},"uniTagField":{"desc":"唯一业务标识属性","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFieldBase.json b/resources/model/dataentity/defield/IPSDEFieldBase.json new file mode 100644 index 0000000..0f68eca --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFieldBase.json @@ -0,0 +1 @@ +{"maxValueString":{"desc":"最大值(字符串)","type":"string"},"minStringLength":{"desc":"最小字符串长度","type":"number"},"minValueString":{"desc":"最小值(字符串)","type":"string"},"precision":{"desc":"数据精度","type":"number"},"stringLength":{"desc":"字符串长度","type":"number"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFieldObject.json b/resources/model/dataentity/defield/IPSDEFieldObject.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFieldObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSDEFieldType.json b/resources/model/dataentity/defield/IPSDEFieldType.json new file mode 100644 index 0000000..67d80c2 --- /dev/null +++ b/resources/model/dataentity/defield/IPSDEFieldType.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"],"editorHeight":{"desc":"编辑器高度","type":"number"},"editorType":{"desc":"编辑器类型","type":"string"},"editorWidth":{"desc":"编辑器宽度","type":"number"},"gridColumnAlign":{"desc":"表格列对齐","type":"string","enum":{"LEFT":"左对齐","CENTER":"居中","RIGHT":"右对齐"}},"maxValueString":{"desc":"最大值(字符串)","type":"string"},"minStringLength":{"desc":"最小字符串长度","type":"number"},"minValueString":{"desc":"最小值(字符串)","type":"string"},"searchEditorHeight":{"desc":"搜索编辑器高度","type":"number"},"searchEditorType":{"desc":"搜索编辑器类型","type":"string"},"searchEditorWidth":{"desc":"搜索编辑器宽度","type":"number"},"stringLength":{"desc":"字符串长度","type":"number"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSFormulaDEField.json b/resources/model/dataentity/defield/IPSFormulaDEField.json new file mode 100644 index 0000000..e7550ae --- /dev/null +++ b/resources/model/dataentity/defield/IPSFormulaDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEField"],"formulaColumns":{"desc":"公式列参数","type":"string"},"formulaFormat":{"desc":"公式列格式","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSInheritDEField.json b/resources/model/dataentity/defield/IPSInheritDEField.json new file mode 100644 index 0000000..cbab306 --- /dev/null +++ b/resources/model/dataentity/defield/IPSInheritDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSLinkDEField"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSLinkDEField.json b/resources/model/dataentity/defield/IPSLinkDEField.json new file mode 100644 index 0000000..2a53def --- /dev/null +++ b/resources/model/dataentity/defield/IPSLinkDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEField"],"psDER":{"desc":"实体关系对象","type":"object","schema":"/dataentity/der/IPSDERBase"},"realPSDEField":{"desc":"实际链接物理属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"realPSDataEntity":{"desc":"实际属性所在实体","type":"object","schema":"/dataentity/IPSDataEntity"},"relatedPSDEField":{"desc":"链接属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"relatedPSDataEntity":{"desc":"链接属性所在实体","type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSOne2ManyDataDEField.json b/resources/model/dataentity/defield/IPSOne2ManyDataDEField.json new file mode 100644 index 0000000..4cac559 --- /dev/null +++ b/resources/model/dataentity/defield/IPSOne2ManyDataDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEField"],"psDER":{"desc":"一对多关系","type":"object","schema":"/dataentity/der/IPSDERBase"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSOne2OneDataDEField.json b/resources/model/dataentity/defield/IPSOne2OneDataDEField.json new file mode 100644 index 0000000..1dec585 --- /dev/null +++ b/resources/model/dataentity/defield/IPSOne2OneDataDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEField"],"psDER":{"desc":"一对一关系","type":"object","schema":"/dataentity/der/IPSDERBase"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSPickupDEField.json b/resources/model/dataentity/defield/IPSPickupDEField.json new file mode 100644 index 0000000..cbab306 --- /dev/null +++ b/resources/model/dataentity/defield/IPSPickupDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSLinkDEField"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSPickupDataDEField.json b/resources/model/dataentity/defield/IPSPickupDataDEField.json new file mode 100644 index 0000000..4cddda4 --- /dev/null +++ b/resources/model/dataentity/defield/IPSPickupDataDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSLinkDEField"],"enableWriteBack":{"desc":"支持回写","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSPickupObjectDEField.json b/resources/model/dataentity/defield/IPSPickupObjectDEField.json new file mode 100644 index 0000000..ae63baa --- /dev/null +++ b/resources/model/dataentity/defield/IPSPickupObjectDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEField"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSPickupTextDEField.json b/resources/model/dataentity/defield/IPSPickupTextDEField.json new file mode 100644 index 0000000..bf90352 --- /dev/null +++ b/resources/model/dataentity/defield/IPSPickupTextDEField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSPickupDataDEField"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/IPSSysDEFType.json b/resources/model/dataentity/defield/IPSSysDEFType.json new file mode 100644 index 0000000..654e89b --- /dev/null +++ b/resources/model/dataentity/defield/IPSSysDEFType.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFieldType"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/search/IPSDEFSearch.json b/resources/model/dataentity/defield/search/IPSDEFSearch.json new file mode 100644 index 0000000..44c2eb3 --- /dev/null +++ b/resources/model/dataentity/defield/search/IPSDEFSearch.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFieldObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFDataRangeRule.json b/resources/model/dataentity/defield/valuerule/IPSDEFDataRangeRule.json new file mode 100644 index 0000000..922c439 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFDataRangeRule.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFValueRule"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRCondition.json new file mode 100644 index 0000000..e983bff --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRCondition.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"condTag":{"desc":"条件标记","type":"string"},"condTag2":{"desc":"条件标记2","type":"string"},"condType":{"desc":"条件项类型","type":"string","enum":{"GROUP":"条件组","NULLRULE":"空值判断","VALUERANGE":"数据集范围","VALUERANGE2":"数值范围","REGEX":"正则式","STRINGLENGTH":"字符长度","SIMPLE":"常规条件","VALUERANGE3":"值清单","QUERYCOUNT":"查询计数","VALUERECURSION":"值递归检查","SYSVALUERULE":"系统值规则"}},"ruleInfo":{"desc":"规则信息","type":"string"},"keyCond":{"desc":"关键条件","type":"boolean"},"notMode":{"desc":"逻辑取反","type":"boolean"},"tryMode":{"desc":"检查失败忽略","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRGroupCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRGroupCondition.json new file mode 100644 index 0000000..5e598a2 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRGroupCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRCondition"],"condOp":{"desc":"组合条件操作","type":"string","enum":{"AND":"与(AND)","OR":"或(OR)"}},"psDEFVRConditions":{"desc":"子条件集合","type":"array","schema":"/dataentity/defield/valuerule/IPSDEFVRCondition"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRQueryCountCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRQueryCountCondition.json new file mode 100644 index 0000000..28d3e10 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRQueryCountCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"],"maxValue":{"desc":"最大值","type":"number"},"minValue":{"desc":"最小值","type":"number"},"psDEDataQuery":{"desc":"实体数据查询对象","type":"object","schema":"/dataentity/ds/IPSDEDataQuery"},"alwaysCheck":{"desc":"始终检查","type":"boolean"},"includeMaxValue":{"desc":"含最大值","type":"boolean"},"includeMinValue":{"desc":"含最小值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRRegExCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRRegExCondition.json new file mode 100644 index 0000000..a4be392 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRRegExCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"],"regExCode":{"desc":"正则式","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRSimpleCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRSimpleCondition.json new file mode 100644 index 0000000..4111efb --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRSimpleCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"],"condOp":{"desc":"条件操作","type":"string"},"paramType":{"desc":"参数类型","type":"string","enum":{"ENTITYFIELD":"数据对象属性","CURTIME":"当前时间"}},"paramValue":{"desc":"参数值","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRSingleCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRSingleCondition.json new file mode 100644 index 0000000..5a20d44 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRSingleCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRCondition"],"dEFName":{"desc":"属性名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRStringLengthCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRStringLengthCondition.json new file mode 100644 index 0000000..fa5311f --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRStringLengthCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"],"maxValue":{"desc":"最大值","type":"number"},"minValue":{"desc":"最小值","type":"number"},"includeMaxValue":{"desc":"含最大值","type":"boolean"},"includeMinValue":{"desc":"含最小值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRSysValueRuleCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRSysValueRuleCondition.json new file mode 100644 index 0000000..53d916e --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRSysValueRuleCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"],"psSysValueRule":{"desc":"系统值规则对象","type":"object","schema":"/valuerule/IPSSysValueRule"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRange2Condition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRange2Condition.json new file mode 100644 index 0000000..fa5311f --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRange2Condition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"],"maxValue":{"desc":"最大值","type":"number"},"minValue":{"desc":"最小值","type":"number"},"includeMaxValue":{"desc":"含最大值","type":"boolean"},"includeMinValue":{"desc":"含最小值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRange3Condition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRange3Condition.json new file mode 100644 index 0000000..53f70f9 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRange3Condition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"],"separator":{"desc":"值分隔符","type":"string"},"getValueRanges":{"desc":"值集合","type":"array","schema":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRangeCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRangeCondition.json new file mode 100644 index 0000000..b2de632 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRangeCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"],"extMajorPSDEField":{"desc":"附加主实体属性对象","type":"object","schema":"/dataentity/defield/IPSDEField"},"extPSDEField":{"desc":"附加属性对象","type":"object","schema":"/dataentity/defield/IPSDEField"},"majorPSDEDataSet":{"desc":"主实体结果集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"majorPSDataEntity":{"desc":"主实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"alwaysCheck":{"desc":"始终检查","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRecursionCondition.json b/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRecursionCondition.json new file mode 100644 index 0000000..0e52935 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFVRValueRecursionCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/valuerule/IPSDEFVRSingleCondition"]} \ No newline at end of file diff --git a/resources/model/dataentity/defield/valuerule/IPSDEFValueRule.json b/resources/model/dataentity/defield/valuerule/IPSDEFValueRule.json new file mode 100644 index 0000000..1f3f3f6 --- /dev/null +++ b/resources/model/dataentity/defield/valuerule/IPSDEFValueRule.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFieldObject","/IPSModelObject"],"codeName":{"desc":"代码名称 ","type":"string"},"psDEFVRGroupCondition":{"desc":"实体属性值规则条件","type":"object","schema":"/dataentity/defield/valuerule/IPSDEFVRGroupCondition"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"ruleInfo":{"desc":"规则信息","type":"string"},"ruleTag":{"desc":"规则标记","type":"string"},"ruleTag2":{"desc":"规则标记2","type":"string"},"scriptCode":{"desc":"脚本代码","type":"string"},"checkDefault":{"desc":"默认检查","type":"boolean"},"customCode":{"desc":"自定义脚本代码","type":"boolean"},"defaultMode":{"desc":"默认规则 ","type":"boolean"},"enableBackend":{"desc":"支持后台执行","type":"boolean"},"enableFront":{"desc":"支持前台执行","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDER11.json b/resources/model/dataentity/der/IPSDER11.json new file mode 100644 index 0000000..ff4497d --- /dev/null +++ b/resources/model/dataentity/der/IPSDER11.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERBase","/dataentity/der/IPSDER1N"],"psOne2OneDataDEField":{"desc":"一对一关系数据属性","type":"object","schema":"/dataentity/defield/IPSOne2OneDataDEField"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDER1N.json b/resources/model/dataentity/der/IPSDER1N.json new file mode 100644 index 0000000..81be16f --- /dev/null +++ b/resources/model/dataentity/der/IPSDER1N.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERBase"],"customExportOrder":{"desc":"自定义导出次序","type":"number"},"customExportOrder2":{"desc":"自定义导出次序2","type":"number"},"eRMajorPSDEF":{"desc":"附加约束主属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"eRMinorPSDEF":{"desc":"附加约束从属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"exportMajorModel":{"desc":"导出引用数据模式","type":"number","enum":{"1":"导出基本数据(只建立不更新)"}},"majorPPSDER1N":{"desc":"主实体父关系","type":"object","schema":"/dataentity/der/IPSDER1N"},"masterOrder":{"desc":"主控次序","type":"number"},"masterRS":{"desc":"主从关系类型","type":"number","enum":{"1":"附属关系","2":"附属关系(N:N连接)","4":"数据访问控制","8":"嵌套操作","16":"递归关系"}},"minorPPSDER1N":{"desc":"从实体父关系","type":"object","schema":"/dataentity/der/IPSDER1N"},"nestedPSDEDataSet":{"desc":"嵌套成员数据集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDER1NDEFieldMaps":{"desc":"关系属性映射集合","type":"array","schema":"/dataentity/der/IPSDER1NDEFieldMap"},"psOne2ManyDataDEField":{"desc":"一对多关系数据属性","type":"object","schema":"/dataentity/defield/IPSOne2ManyDataDEField"},"psPickupDEField":{"desc":"外键属性","type":"object","schema":"/dataentity/defield/IPSPickupDEField"},"psPickupTextDEField":{"desc":"外键文本属性","type":"object","schema":"/dataentity/defield/IPSLinkDEField"},"pickupDEFName":{"desc":"关系属性名称","type":"string"},"rRMLanResTag":{"desc":"删除拒绝消息语言标记","type":"string"},"rRMPSLanguageRes":{"desc":"删除拒绝消息语言资源","type":"object","schema":"/res/IPSLanguageRes"},"removeActionType":{"desc":"删除方式","type":"number","enum":{"0":"无操作","1":"同时删除","2":"置空","3":"限制删除"}},"removeOrder":{"desc":"删除次序","type":"number"},"removeRejectMsg":{"desc":"删除拒绝消息","type":"string"},"cloneRS":{"desc":"支持克隆","type":"boolean"},"enableDEFieldWriteBack":{"desc":"关系属性回写","type":"boolean"},"enableExtRestrict":{"desc":"启用附加约束","type":"boolean"},"enablePDEREQ":{"desc":"启用父关系等价","type":"boolean"},"nestedRS":{"desc":"嵌套操作","type":"boolean"},"recursiveRS":{"desc":"递归关系","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDER1NDEFieldMap.json b/resources/model/dataentity/der/IPSDER1NDEFieldMap.json new file mode 100644 index 0000000..8eeff80 --- /dev/null +++ b/resources/model/dataentity/der/IPSDER1NDEFieldMap.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERDEFieldMap"],"mapType":{"desc":"映射类型","type":"string","enum":{"SUM":"合计","AVG":"平均","MAX":"最大值","MIN":"最小值","COUNT":"计数","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"minorPSDEDataQuery":{"desc":"从实体数据查询","type":"object","schema":"/dataentity/ds/IPSDEDataQuery"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDER1NSelectAction.json b/resources/model/dataentity/der/IPSDER1NSelectAction.json new file mode 100644 index 0000000..0b9136d --- /dev/null +++ b/resources/model/dataentity/der/IPSDER1NSelectAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/action/IPSDESelectAction"]} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERAggData.json b/resources/model/dataentity/der/IPSDERAggData.json new file mode 100644 index 0000000..d48f55f --- /dev/null +++ b/resources/model/dataentity/der/IPSDERAggData.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERBase"],"psDERAggDataDEFieldMaps":{"desc":"关系属性映射集合","type":"array","schema":"/dataentity/der/IPSDERAggDataDEFieldMap"},"sourcePSDEDataSet":{"desc":"源数据集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERAggDataDEFieldMap.json b/resources/model/dataentity/der/IPSDERAggDataDEFieldMap.json new file mode 100644 index 0000000..e484cc0 --- /dev/null +++ b/resources/model/dataentity/der/IPSDERAggDataDEFieldMap.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERDEFieldMap"],"drillDownCondFormat":{"desc":"钻取条件格式","type":"string"},"formulaFormat":{"desc":"公式列格式","type":"string"},"mapType":{"desc":"映射类型","type":"string","enum":{"SUM":"合计","AVG":"平均","MAX":"最大值","MIN":"最小值","COUNT":"计数","GROUPBY":"分组","GROUPBY_DAYOFWEEK":"按周天分组","GROUPBY_DAYOFMONTH":"按月天分组","GROUPBY_DAYOFYEAR":"按年天分组","GROUPBY_WEEK":"按周分组","GROUPBY_MONTH":"按月份分组","GROUPBY_QUARTER":"按季度分组","GROUPBY_YEAR":"按年份分组","GROUPBY_HOUR":"按小时分组","GROUPBY_MINUTE":"按分钟分组","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERBase.json b/resources/model/dataentity/der/IPSDERBase.json new file mode 100644 index 0000000..dd9b14f --- /dev/null +++ b/resources/model/dataentity/der/IPSDERBase.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"dERType":{"desc":"关系类型","type":"string","enum":{"DER1N":"1:N关系","DERINHERIT":"继承关系","DERINDEX":"索引关系","DER11":"1:1 关系","DERMULINH":"多继承关系(虚拟实体)","DERCUSTOM":"自定义关系","DERAGGDATA":"聚合数据关系"}},"logicName":{"desc":"逻辑名称","type":"string"},"majorPSDataEntity":{"desc":"主实体","type":"object","schema":"/dataentity/IPSDataEntity"},"minorCodeName":{"desc":"关系数据代码名称","type":"string"},"minorPSDataEntity":{"desc":"关系实体","type":"object","schema":"/dataentity/IPSDataEntity"},"orderValue":{"desc":"排序值","type":"number"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERCustom.json b/resources/model/dataentity/der/IPSDERCustom.json new file mode 100644 index 0000000..4d45480 --- /dev/null +++ b/resources/model/dataentity/der/IPSDERCustom.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERBase"],"customExportOrder":{"desc":"自定义导出次序","type":"number"},"customExportOrder2":{"desc":"自定义导出次序2","type":"number"},"dERSubType":{"desc":"关系子类型","type":"string"},"masterRS":{"desc":"主从关系类型","type":"number","enum":{"1":"附属关系","2":"附属关系(N:N连接)","4":"数据访问控制","8":"嵌套操作","16":"递归关系"}},"nestedPSDEDataSet":{"desc":"嵌套成员数据集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"pickupDEFName":{"desc":"关系属性名称","type":"string"},"pickupPSDEField":{"desc":"关系属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"rRMLanResTag":{"desc":"删除拒绝消息语言标记","type":"string"},"rRMPSLanguageRes":{"desc":"删除拒绝消息语言资源","type":"object","schema":"/res/IPSLanguageRes"},"removeActionType":{"desc":"删除方式","type":"number","enum":{"0":"无操作","1":"同时删除","2":"置空","3":"限制删除"}},"removeOrder":{"desc":"删除次序","type":"number"},"removeRejectMsg":{"desc":"删除拒绝消息","type":"string"},"typeValue":{"desc":"关系识别值","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERDEFieldMap.json b/resources/model/dataentity/der/IPSDERDEFieldMap.json new file mode 100644 index 0000000..ac16f23 --- /dev/null +++ b/resources/model/dataentity/der/IPSDERDEFieldMap.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"majorPSDEField":{"desc":"主实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"minorPSDEField":{"desc":"从实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERGroup.json b/resources/model/dataentity/der/IPSDERGroup.json new file mode 100644 index 0000000..2d1c0e2 --- /dev/null +++ b/resources/model/dataentity/der/IPSDERGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject","/IPSModelSortable"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"psDERGroupDetails":{"desc":"实体关系组成员集合","type":"array","schema":"/dataentity/der/IPSDERGroupDetail"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERGroupDetail.json b/resources/model/dataentity/der/IPSDERGroupDetail.json new file mode 100644 index 0000000..4927b4d --- /dev/null +++ b/resources/model/dataentity/der/IPSDERGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"orderValue":{"desc":"排序值","type":"number"},"psDER":{"desc":"实体关系","type":"object","schema":"/dataentity/der/IPSDERBase"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERIndex.json b/resources/model/dataentity/der/IPSDERIndex.json new file mode 100644 index 0000000..9e0433b --- /dev/null +++ b/resources/model/dataentity/der/IPSDERIndex.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERBase"],"psDERIndexDEFieldMaps":{"desc":"关系属性映射集合","type":"array","schema":"/dataentity/der/IPSDERIndexDEFieldMap"},"typeValue":{"desc":"索引类型识别值","type":"string"},"inherit":{"desc":"继承模式","type":"boolean"},"virtual":{"desc":"虚拟模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERIndexDEFieldMap.json b/resources/model/dataentity/der/IPSDERIndexDEFieldMap.json new file mode 100644 index 0000000..6b9b589 --- /dev/null +++ b/resources/model/dataentity/der/IPSDERIndexDEFieldMap.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERDEFieldMap"]} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERInherit.json b/resources/model/dataentity/der/IPSDERInherit.json new file mode 100644 index 0000000..ffe23f0 --- /dev/null +++ b/resources/model/dataentity/der/IPSDERInherit.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERBase","/dataentity/der/IPSDERIndex"],"inheritMode":{"desc":"继承处理模式","type":"number"},"logicInherit":{"desc":"逻辑继承模式","type":"boolean"},"sameStorage":{"desc":"一致存储","type":"boolean"},"singleInherit":{"desc":"单继承关系","type":"boolean"},"storageInherit":{"desc":"存储继承模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERMultiInherit.json b/resources/model/dataentity/der/IPSDERMultiInherit.json new file mode 100644 index 0000000..e514415 --- /dev/null +++ b/resources/model/dataentity/der/IPSDERMultiInherit.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERBase","/dataentity/der/IPSDERInherit"]} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSDERNN.json b/resources/model/dataentity/der/IPSDERNN.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/der/IPSDERNN.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/der/IPSSysDERGroup.json b/resources/model/dataentity/der/IPSSysDERGroup.json new file mode 100644 index 0000000..6c4db76 --- /dev/null +++ b/resources/model/dataentity/der/IPSSysDERGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/der/IPSDERGroup"]} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDRCustomItem.json b/resources/model/dataentity/dr/IPSDEDRCustomItem.json new file mode 100644 index 0000000..98281b5 --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDRCustomItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dr/IPSDEDRItem"]} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDRDER11Item.json b/resources/model/dataentity/dr/IPSDEDRDER11Item.json new file mode 100644 index 0000000..98281b5 --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDRDER11Item.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dr/IPSDEDRItem"]} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDRDER1NItem.json b/resources/model/dataentity/dr/IPSDEDRDER1NItem.json new file mode 100644 index 0000000..98281b5 --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDRDER1NItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dr/IPSDEDRItem"]} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDRDetail.json b/resources/model/dataentity/dr/IPSDEDRDetail.json new file mode 100644 index 0000000..71c07df --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDRDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"counterId":{"desc":"计数项标识","type":"string"},"detailType":{"desc":"成员类型","type":"string","enum":{"DRITEM":"关系界面","PDTVIEW":"预置视图"}},"enableMode":{"desc":"启用模式","type":"string","enum":{"ALL":"全部启用","INWF":"流程中启用","ALLWF":"全部流程状态启用","EDIT":"编辑时启用","DEOPPRIV":"实体操作标识","CUSTOM":"自定义"}},"orderValue":{"desc":"排序值","type":"number"},"originCaption":{"desc":"原始标题","type":"string"},"getPSDETreeId":{"desc":"展开树视图标识","type":"string"},"psSysImage":{"desc":"成员图标资源对象","type":"object","schema":"/res/IPSSysImage"},"testPSDEOPPriv":{"desc":"判断输出实体操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"}} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDRGroup.json b/resources/model/dataentity/dr/IPSDEDRGroup.json new file mode 100644 index 0000000..3625e90 --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDRGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"capPSLanguageRes":{"desc":"标题语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"psSysImage":{"desc":"分组图标资源对象","type":"object","schema":"/res/IPSSysImage"},"hidden":{"desc":"隐藏分组","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDRItem.json b/resources/model/dataentity/dr/IPSDEDRItem.json new file mode 100644 index 0000000..42db97b --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDRItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSNavigateParamContainer"],"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"codeName":{"desc":"代码标识","type":"string"},"counterId":{"desc":"计数项标识","type":"string"},"enableMode":{"desc":"启用模式","type":"string","enum":{"ALL":"全部启用","INWF":"流程中启用","ALLWF":"全部流程状态启用","EDIT":"编辑时启用","DEOPPRIV":"实体操作标识","CUSTOM":"自定义"}},"itemType":{"desc":"关系项类型","type":"string","enum":{"DER1N":"1:N关系","SYSDER1N":"系统1:N关系","CUSTOM":"自定义关系"}},"psSysImage":{"desc":"项图标资源对象","type":"object","schema":"/res/IPSSysImage"},"parentDataJO":{"desc":"视图父数据对象","type":"object"},"testPSDEOPPriv":{"desc":"判断输出实体操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"viewParamJO":{"desc":"视图参数对象","type":"object"}} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDRSysDER11Item.json b/resources/model/dataentity/dr/IPSDEDRSysDER11Item.json new file mode 100644 index 0000000..98281b5 --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDRSysDER11Item.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dr/IPSDEDRItem"]} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDRSysDER1NItem.json b/resources/model/dataentity/dr/IPSDEDRSysDER1NItem.json new file mode 100644 index 0000000..98281b5 --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDRSysDER1NItem.json @@ -0,0 +1 @@ +{"extends":["/dataentity/dr/IPSDEDRItem"]} \ No newline at end of file diff --git a/resources/model/dataentity/dr/IPSDEDataRelation.json b/resources/model/dataentity/dr/IPSDEDataRelation.json new file mode 100644 index 0000000..ca43de2 --- /dev/null +++ b/resources/model/dataentity/dr/IPSDEDataRelation.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"formCapPSLanguageRes":{"desc":"编辑项标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"formCaption":{"desc":"编辑项标题","type":"string"},"formPSSysImage":{"desc":"编辑项图标资源","type":"object","schema":"/res/IPSSysImage"},"hideEditItem":{"desc":"默认隐藏编辑项","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDQCondition.json b/resources/model/dataentity/ds/IPSDEDQCondition.json new file mode 100644 index 0000000..2b4cc14 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDQCondition.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"condOp":{"desc":"条件操作","type":"string"},"condType":{"desc":"条件类型","type":"string","enum":{"GROUP":"组合条件","SINGLE":"属性条件","CUSTOM":"自定义条件","PREDEFINED":"预置条件"}}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDQCustomCondition.json b/resources/model/dataentity/ds/IPSDEDQCustomCondition.json new file mode 100644 index 0000000..33c3cc7 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDQCustomCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/ds/IPSDEDQCondition"],"condition":{"desc":"自定义条件","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDQFieldCondition.json b/resources/model/dataentity/ds/IPSDEDQFieldCondition.json new file mode 100644 index 0000000..5aeebbf --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDQFieldCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/ds/IPSDEDQCondition"],"condValue":{"desc":"条件值","type":"string"},"psDEField":{"desc":"属性对象","type":"object","schema":"/dataentity/defield/IPSDEField"},"getPSSysDBVFId":{"desc":"值处理","type":"string"},"getPSVARTypeId":{"desc":"变量类型","type":"string"},"ignoreEmpty":{"desc":"忽略空值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDQGroupCondition.json b/resources/model/dataentity/ds/IPSDEDQGroupCondition.json new file mode 100644 index 0000000..b952490 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDQGroupCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/ds/IPSDEDQCondition"],"psDEDQConditions":{"desc":"子条件集合","type":"array","schema":"/dataentity/ds/IPSDEDQCondition"},"notMode":{"desc":"逻辑取反","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDQJoin.json b/resources/model/dataentity/ds/IPSDEDQJoin.json new file mode 100644 index 0000000..cb81c11 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDQJoin.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"alias":{"desc":"别名","type":"string"},"childPSDEDQJoins":{"desc":"子查询连接集合","type":"array","schema":"/dataentity/ds/IPSDEDQJoin"},"dERPSDataEntity":{"desc":"连接关系所在实体","type":"object","schema":"/dataentity/IPSDataEntity"},"joinPSDER":{"desc":"连接实体关系","type":"object","schema":"/dataentity/der/IPSDERBase"},"joinPSDataEntity":{"desc":"连接实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"joinType":{"desc":"连接类型","type":"string"},"psDEDQGroupCondition":{"desc":"查询条件对象","type":"object","schema":"/dataentity/ds/IPSDEDQGroupCondition"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDQMain.json b/resources/model/dataentity/ds/IPSDEDQMain.json new file mode 100644 index 0000000..3a39518 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDQMain.json @@ -0,0 +1 @@ +{"extends":["/dataentity/ds/IPSDEDQJoin"]} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDQPDCondition.json b/resources/model/dataentity/ds/IPSDEDQPDCondition.json new file mode 100644 index 0000000..790b35e --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDQPDCondition.json @@ -0,0 +1 @@ +{"extends":["/dataentity/ds/IPSDEDQCondition"]} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataQuery.json b/resources/model/dataentity/ds/IPSDEDataQuery.json new file mode 100644 index 0000000..1e86c4f --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataQuery.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"allPSDEDataQueryCodes":{"desc":"查询代码集合","type":"array","schema":"/dataentity/ds/IPSDEDataQueryCode"},"codeName":{"desc":"代码标识","type":"string"},"dEFGroupType":{"desc":"属性组类型","type":"string"},"extendMode":{"desc":"子系统扩展","type":"number","enum":{"0":"无扩展","2":"子系统功能扩展"}},"logicName":{"desc":"逻辑名称","type":"string"},"psDEDQMain":{"desc":"查询主表对象","type":"object","schema":"/dataentity/ds/IPSDEDQMain"},"psDEDataQueryInput":{"desc":"调用输入对象","type":"object","schema":"/dataentity/ds/IPSDEDataQueryInput"},"psDEDataQueryReturn":{"desc":"调用返回对象","type":"object","schema":"/dataentity/ds/IPSDEDataQueryReturn"},"viewLevel":{"desc":"选择列级别","type":"number","enum":{"-1":"默认(全部查询列)","0":"全部数据","1":"2级(无行外数据)","2":"3级(关键数据)","3":"4级(个别字段)","100":"指定属性组"}},"customCode":{"desc":"自定义数据查询","type":"boolean"},"defaultMode":{"desc":"实体默认查询","type":"boolean"},"privQuery":{"desc":"权限使用查询","type":"boolean"},"pubServiceDefault":{"desc":"默认发布服务","type":"boolean"},"queryFromView":{"desc":"从视图查询","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataQueryCode.json b/resources/model/dataentity/ds/IPSDEDataQueryCode.json new file mode 100644 index 0000000..154b1a6 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataQueryCode.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"dBType":{"desc":"数据库类型","type":"string"},"psDEDataQueryCodeConds":{"desc":"查询代码条件集合","type":"array","schema":"/dataentity/ds/IPSDEDataQueryCodeCond"},"psDEDataQueryCodeExps":{"desc":"查询代码表达式集合","type":"array","schema":"/dataentity/ds/IPSDEDataQueryCodeExp"},"queryCode":{"desc":"查询代码","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataQueryCodeCond.json b/resources/model/dataentity/ds/IPSDEDataQueryCodeCond.json new file mode 100644 index 0000000..7abcd25 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataQueryCodeCond.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"condType":{"desc":"条件类型","type":"string"},"customCond":{"desc":"查询条件","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataQueryCodeExp.json b/resources/model/dataentity/ds/IPSDEDataQueryCodeExp.json new file mode 100644 index 0000000..245b3a0 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataQueryCodeExp.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"expression":{"desc":"表达式","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataQueryInput.json b/resources/model/dataentity/ds/IPSDEDataQueryInput.json new file mode 100644 index 0000000..9c21d12 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataQueryInput.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodInput"],"psDEFilterDTO":{"desc":"实体过滤器DTO","type":"object","schema":"/dataentity/ds/IPSDEFilterDTO"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataQueryReturn.json b/resources/model/dataentity/ds/IPSDEDataQueryReturn.json new file mode 100644 index 0000000..8c367e8 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataQueryReturn.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodReturn"],"psDEMethodDTO":{"desc":"实体方法DTO对象","type":"object","schema":"/dataentity/service/IPSDEMethodDTO"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataSet.json b/resources/model/dataentity/ds/IPSDEDataSet.json new file mode 100644 index 0000000..8aee4d3 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataSet.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"dataSetType":{"desc":"结果集类型","type":"string","enum":{"DATAQUERY":"数据查询","INDEXDE":"索引实体","MULTIFORM":"多表单","CODELIST":"代码表","SCRIPT":"脚本代码","REMOTE":"远程接口数据集"}},"extendMode":{"desc":"子系统扩展","type":"number","enum":{"0":"无扩展","2":"子系统功能扩展"}},"groupMode":{"desc":"分组模式","type":"number","enum":{"0":"无","1":"指定分组参数","2":"指定聚合关系"}},"logicName":{"desc":"逻辑名称","type":"string"},"majorSortDir":{"desc":"默认主排序方向","type":"string"},"majorSortPSDEField":{"desc":"默认主排序属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"minorSortDir":{"desc":"默认从排序方向","type":"string"},"minorSortPSDEField":{"desc":"默认从排序属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"psCodeList":{"desc":"代码表对象","type":"object","schema":"/codelist/IPSCodeList"},"psDEDataQueries":{"desc":"数据集查询集合","type":"array","schema":"/dataentity/ds/IPSDEDataQuery"},"psDEDataSetGroupParams":{"desc":"数据集分组参数集合","type":"array","schema":"/dataentity/ds/IPSDEDataSetGroupParam"},"psDEDataSetInput":{"desc":"调用输入对象","type":"object","schema":"/dataentity/ds/IPSDEDataSetInput"},"psDEDataSetReturn":{"desc":"调用返回对象","type":"object","schema":"/dataentity/ds/IPSDEDataSetReturn"},"psDEOPPriv":{"desc":"服务访问操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"psDERAggData":{"desc":"聚合数据关系","type":"object","schema":"/dataentity/der/IPSDERAggData"},"psSubSysServiceAPIDEMethod":{"desc":"子系统实体接口方法","type":"object","schema":"/service/IPSSubSysServiceAPIDEMethod"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysSFPlugin":{"desc":"后端扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"psSysUserDR":{"desc":"用户数据范围对象","type":"object","schema":"/security/IPSSysUserDR"},"psSysUserDR2":{"desc":"用户数据范围对象2","type":"object","schema":"/security/IPSSysUserDR"},"pageSize":{"desc":"默认分页大小","type":"number"},"predefinedType":{"desc":"预定义类型","type":"string","enum":{"CODELIST":"代码表","INDEXDE":"索引实体","MULTIFORM":"多表单","SCRIPT":"脚本代码","REMOTE":"远程接口数据集"}},"scriptCode":{"desc":"脚本代码","type":"string"},"defaultMode":{"desc":"实体默认数据集","type":"boolean"},"enableAudit":{"desc":"启用访问审计","type":"boolean"},"enableBackend":{"desc":"支持后台执行","type":"boolean"},"enableFront":{"desc":"支持前台执行","type":"boolean"},"enableTempData":{"desc":"支持临时数据","type":"boolean"},"valid":{"desc":"启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataSetCode.json b/resources/model/dataentity/ds/IPSDEDataSetCode.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataSetCode.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataSetGroupParam.json b/resources/model/dataentity/ds/IPSDEDataSetGroupParam.json new file mode 100644 index 0000000..f4bad9f --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataSetGroupParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"aggMode":{"desc":"聚合模式","type":"string"},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"enableSort":{"desc":"启用分组排序","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataSetInput.json b/resources/model/dataentity/ds/IPSDEDataSetInput.json new file mode 100644 index 0000000..9c21d12 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataSetInput.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodInput"],"psDEFilterDTO":{"desc":"实体过滤器DTO","type":"object","schema":"/dataentity/ds/IPSDEFilterDTO"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEDataSetReturn.json b/resources/model/dataentity/ds/IPSDEDataSetReturn.json new file mode 100644 index 0000000..8c367e8 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEDataSetReturn.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodReturn"],"psDEMethodDTO":{"desc":"实体方法DTO对象","type":"object","schema":"/dataentity/service/IPSDEMethodDTO"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEFilterDTO.json b/resources/model/dataentity/ds/IPSDEFilterDTO.json new file mode 100644 index 0000000..c8e9cad --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEFilterDTO.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodDTO"],"psDEFilterDTOFields":{"desc":"DTO对象属性集合","type":"array","schema":"/dataentity/ds/IPSDEFilterDTOField"}} \ No newline at end of file diff --git a/resources/model/dataentity/ds/IPSDEFilterDTOField.json b/resources/model/dataentity/ds/IPSDEFilterDTOField.json new file mode 100644 index 0000000..e1d0916 --- /dev/null +++ b/resources/model/dataentity/ds/IPSDEFilterDTOField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodDTOField"],"psDEFSearchMode":{"desc":"实体属性搜索模式","type":"object","schema":"/dataentity/defield/IPSDEFSearchMode"}} \ No newline at end of file diff --git a/resources/model/dataentity/dts/IPSDEDTSQueue.json b/resources/model/dataentity/dts/IPSDEDTSQueue.json new file mode 100644 index 0000000..9f3c3eb --- /dev/null +++ b/resources/model/dataentity/dts/IPSDEDTSQueue.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/jit/IPSDESampleData.json b/resources/model/dataentity/jit/IPSDESampleData.json new file mode 100644 index 0000000..10ea1d2 --- /dev/null +++ b/resources/model/dataentity/jit/IPSDESampleData.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"data":{"desc":"示例数据","type":"string"},"dataJO":{"desc":"示例数据JSON对象","type":"object"},"dataType":{"desc":"数据类型","type":"string","enum":{"JSON":"JSON数据","XML":"XML数据","SCRIPT":"脚本","USER":"用户自定义"}},"logicMode":{"desc":"逻辑模式","type":"string","enum":{"INSTALLDATA":"初始化数据"}},"randomCount":{"desc":"随机数量","type":"number"},"randomMode":{"desc":"随机模式","type":"string"},"randomParam":{"desc":"随机参数","type":"string"},"randomParam2":{"desc":"随机参数2","type":"string"},"randomParam3":{"desc":"随机参数3","type":"number"},"randomParam4":{"desc":"随机参数4","type":"number"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEDEActionLogic.json b/resources/model/dataentity/logic/IPSDEDEActionLogic.json new file mode 100644 index 0000000..2a322a1 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEDEActionLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"],"dstPSAppDEAction":{"desc":"应用实体行为对象","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"dstPSAppDataEntity":{"desc":"应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"dstPSDEAction":{"desc":"目标实体行为对象","type":"object","schema":"/dataentity/action/IPSDEAction"},"dstPSDELogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDELogicParam"},"dstPSDataEntity":{"desc":"目标实体对象","type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEFLogic.json b/resources/model/dataentity/logic/IPSDEFLogic.json new file mode 100644 index 0000000..f4df87a --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEFLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogic"],"dEFLogicMode":{"desc":"属性逻辑模型","type":"string","enum":{"COMPUTE":"计算值","DEFAULT":"默认值","ONCHANGE":"变更触发","CHECK":"检查值","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogic.json b/resources/model/dataentity/logic/IPSDELogic.json new file mode 100644 index 0000000..46d9f8f --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject","/dataentity/logic/IPSDELogicBase"],"defaultParamName":{"desc":"默认参数名称","type":"string"},"logicSubType":{"desc":"逻辑子类","type":"string","enum":{"NONE":"无","DEFIELD":"属性逻辑","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"psDELogicNodes":{"desc":"逻辑处理集合","type":"array","schema":"/dataentity/logic/IPSDELogicNode"},"psDELogicParams":{"desc":"逻辑参数集合","type":"array","schema":"/dataentity/logic/IPSDELogicParam"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"scriptCode":{"desc":"脚本代码","type":"string"},"startPSDELogicNode":{"desc":"开始处理节点","type":"object","schema":"/dataentity/logic/IPSDELogicNode"},"customCode":{"desc":"自定义脚本代码","type":"boolean"},"enableBackend":{"desc":"支持后台执行","type":"boolean"},"enableFront":{"desc":"支持前台执行","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicBase.json b/resources/model/dataentity/logic/IPSDELogicBase.json new file mode 100644 index 0000000..599e189 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicBase.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"defaultParamName":{"desc":"默认参数名称","type":"string"},"logicName":{"desc":"逻辑名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicLink.json b/resources/model/dataentity/logic/IPSDELogicLink.json new file mode 100644 index 0000000..f88c98b --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicLink.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkBase"],"dstPSDELogicNode":{"desc":"目标逻辑节点对象","type":"object","schema":"/dataentity/logic/IPSDELogicNode"},"psDELogicLinkGroupCond":{"desc":"连接条件对象","type":"object","schema":"/dataentity/logic/IPSDELogicLinkGroupCond"},"srcPSDELogicNode":{"desc":"源逻辑节点对象","type":"object","schema":"/dataentity/logic/IPSDELogicNode"},"defaultLink":{"desc":"默认连接","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicLinkBase.json b/resources/model/dataentity/logic/IPSDELogicLinkBase.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicLinkBase.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicLinkCond.json b/resources/model/dataentity/logic/IPSDELogicLinkCond.json new file mode 100644 index 0000000..d564386 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicLinkCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkCondBase"]} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicLinkCondBase.json b/resources/model/dataentity/logic/IPSDELogicLinkCondBase.json new file mode 100644 index 0000000..7010a18 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicLinkCondBase.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"logicType":{"desc":"条件类型","type":"string","enum":{"GROUP":"组逻辑","SINGLE":"单项逻辑"}}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicLinkGroupCond.json b/resources/model/dataentity/logic/IPSDELogicLinkGroupCond.json new file mode 100644 index 0000000..31a28c0 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicLinkGroupCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkCond","/dataentity/logic/IPSDELogicLinkGroupCondBase"],"psDELogicLinkConds":{"desc":"子条件集合","type":"array","schema":"/dataentity/logic/IPSDELogicLinkCond"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicLinkGroupCondBase.json b/resources/model/dataentity/logic/IPSDELogicLinkGroupCondBase.json new file mode 100644 index 0000000..38beac6 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicLinkGroupCondBase.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkCondBase"],"groupOP":{"desc":"组合条件","type":"string","enum":{"AND":"与(AND)","OR":"或(OR)"}},"notMode":{"desc":"逻辑取反","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicLinkSingleCond.json b/resources/model/dataentity/logic/IPSDELogicLinkSingleCond.json new file mode 100644 index 0000000..0f9abb3 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicLinkSingleCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkCond","/dataentity/logic/IPSDELogicLinkSingleCondBase"],"dstLogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDELogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicLinkSingleCondBase.json b/resources/model/dataentity/logic/IPSDELogicLinkSingleCondBase.json new file mode 100644 index 0000000..e11d680 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicLinkSingleCondBase.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkCondBase"],"condOP":{"desc":"值操作","type":"string"},"dstFieldName":{"desc":"目标属性名称","type":"string"},"dstLogicParam":{"type":"object","schema":"/dataentity/logic/IPSDELogicParamBase"},"paramType":{"desc":"参数类型","type":"string","enum":{"ENTITYFIELD":"数据对象属性","CURTIME":"当前时间"}},"paramValue":{"desc":"参数值","type":"string"},"value":{"desc":"值(旧)","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicNode.json b/resources/model/dataentity/logic/IPSDELogicNode.json new file mode 100644 index 0000000..02c1f57 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicNode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNodeBase"],"psDELogicLinks":{"desc":"逻辑节点连出连接集合","type":"array","schema":"/dataentity/logic/IPSDELogicLink"},"psDELogicNodeParams":{"desc":"节点参数集合","type":"array","schema":"/dataentity/logic/IPSDELogicNodeParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicNodeBase.json b/resources/model/dataentity/logic/IPSDELogicNodeBase.json new file mode 100644 index 0000000..07294af --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicNodeBase.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"logicNodeType":{"desc":"逻辑节点类型","type":"string","enum":{"BEGIN":"开始","DEACTION":"实体行为","PREPAREPARAM":"准备参数","RAWSQLCALL":"直接SQL调用","RAWSQLANDLOOPCALL":"直接SQL并循环调用","STARTWF":"启动流程","THROWEXCEPTION":"抛出异常","SFPLUGIN":"系统服务插件","RAWSFCODE":"直接后台代码","SYSLOGIC":"系统逻辑处理","PREPAREJSPARAM":"准备参数","VIEWCTRLINVOKE":"视图部件调用","RAWJSCODE":"直接前台代码","MSGBOX":"消息弹窗","PFPLUGIN":"前端插件调用","DEUIACTION":"实体界面行为调用","MAINSTATE":"主状态"}},"parallelOutput":{"desc":"平行输出","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicNodeParam.json b/resources/model/dataentity/logic/IPSDELogicNodeParam.json new file mode 100644 index 0000000..6af5938 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicNodeParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNodeParamBase"],"dstPSDELogicParam":{"desc":"目标逻辑参数","type":"object","schema":"/dataentity/logic/IPSDELogicParam"},"expression":{"desc":"表达式","type":"string"},"srcPSDELogicParam":{"desc":"源逻辑参数","type":"object","schema":"/dataentity/logic/IPSDELogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicNodeParamBase.json b/resources/model/dataentity/logic/IPSDELogicNodeParamBase.json new file mode 100644 index 0000000..e8e585b --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicNodeParamBase.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"dstFieldName":{"desc":"目标属性名称","type":"string"},"paramAction":{"desc":"逻辑处理参数操作","type":"string","enum":{"SETPARAMVALUE":"设置变量","RESETPARAM":"重置变量","COPYPARAM":"拷贝变量","SQLPARAM":"数据库调用参数","SFPLUGINPARAM":"后台服务插件参数"}},"srcFieldName":{"desc":"源属性名称","type":"string"},"srcValue":{"desc":"直接值","type":"string"},"srcValueType":{"desc":"源值类型","type":"string","enum":{"SRCDLPARAM":"源逻辑参数","WEBCONTEXT":"网页请求上下文","APPDATA":"当前应用数据","APPLICATION":"系统全局对象","SESSION":"用户全局对象","DATACONTEXT":"数据上下文","ENVPARAM":"当前环境参数","VIEWPARAM":"当前视图参数","NONEVALUE":"无值(NONE)","NULLVALUE":"空值(NULL)","SRCVALUE":"直接值","EXPRESSION":"计算式"}}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicParam.json b/resources/model/dataentity/logic/IPSDELogicParam.json new file mode 100644 index 0000000..fbc56bb --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicParamBase"],"paramPSDataEntity":{"desc":"参数实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"paramTag":{"desc":"参数标记","type":"string"},"paramTag2":{"desc":"参数标记2","type":"string"},"envParam":{"desc":"系统环境变量","type":"boolean"},"lastParam":{"desc":"最后数据变量","type":"boolean"},"sessionParam":{"desc":"操作会话变量","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDELogicParamBase.json b/resources/model/dataentity/logic/IPSDELogicParamBase.json new file mode 100644 index 0000000..e40be9d --- /dev/null +++ b/resources/model/dataentity/logic/IPSDELogicParamBase.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"default":{"desc":"默认参数","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEMSLogic.json b/resources/model/dataentity/logic/IPSDEMSLogic.json new file mode 100644 index 0000000..597a54d --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEMSLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicBase"],"psDEMSLogicNodes":{"desc":"主状态逻辑节点集合","type":"array","schema":"/dataentity/logic/IPSDEMSLogicNode"},"psDEMSLogicParams":{"desc":"主状态逻辑参数集合","type":"array","schema":"/dataentity/logic/IPSDEMSLogicParam"},"startPSDEMSLogicNode":{"desc":"开始处理节点","type":"object","schema":"/dataentity/logic/IPSDEMSLogicNode"},"defaultMode":{"desc":"默认主状态切换逻辑","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEMSLogicLink.json b/resources/model/dataentity/logic/IPSDEMSLogicLink.json new file mode 100644 index 0000000..6959cb9 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEMSLogicLink.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkBase"],"dstPSDEMSLogicNode":{"desc":"目标主状态节点对象","type":"object","schema":"/dataentity/logic/IPSDEMSLogicNode"},"psDEMSLogicLinkGroupCond":{"desc":"连接条件对象","type":"object","schema":"/dataentity/logic/IPSDEMSLogicLinkGroupCond"},"srcPSDEMSLogicNode":{"desc":"源主状态节点对象","type":"object","schema":"/dataentity/logic/IPSDEMSLogicNode"},"defaultLink":{"desc":"默认连接","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEMSLogicLinkCond.json b/resources/model/dataentity/logic/IPSDEMSLogicLinkCond.json new file mode 100644 index 0000000..d564386 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEMSLogicLinkCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkCondBase"]} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEMSLogicLinkGroupCond.json b/resources/model/dataentity/logic/IPSDEMSLogicLinkGroupCond.json new file mode 100644 index 0000000..cc586f1 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEMSLogicLinkGroupCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEMSLogicLinkCond","/dataentity/logic/IPSDELogicLinkGroupCondBase"],"psDEMSLogicLinkConds":{"desc":"子条件集合","type":"array","schema":"/dataentity/logic/IPSDEMSLogicLinkCond"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEMSLogicLinkSingleCond.json b/resources/model/dataentity/logic/IPSDEMSLogicLinkSingleCond.json new file mode 100644 index 0000000..30ac827 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEMSLogicLinkSingleCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEMSLogicLinkCond","/dataentity/logic/IPSDELogicLinkSingleCondBase"],"dstLogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDEMSLogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEMSLogicNode.json b/resources/model/dataentity/logic/IPSDEMSLogicNode.json new file mode 100644 index 0000000..2b74e46 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEMSLogicNode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNodeBase"],"psDEMSLogicLinks":{"desc":"逻辑节点连出连接集合","type":"array","schema":"/dataentity/logic/IPSDEMSLogicLink"},"psDEMainState":{"desc":"实体主状态","type":"object","schema":"/dataentity/mainstate/IPSDEMainState"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEMSLogicParam.json b/resources/model/dataentity/logic/IPSDEMSLogicParam.json new file mode 100644 index 0000000..9c7011d --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEMSLogicParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicParamBase"]} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDERawCodeLogic.json b/resources/model/dataentity/logic/IPSDERawCodeLogic.json new file mode 100644 index 0000000..8113a02 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDERawCodeLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"],"code":{"desc":"直接代码","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDERawSqlAndLoopCallLogic.json b/resources/model/dataentity/logic/IPSDERawSqlAndLoopCallLogic.json new file mode 100644 index 0000000..7cf2359 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDERawSqlAndLoopCallLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"],"dstPSDEAction":{"desc":"目标实体行为对象","type":"object","schema":"/dataentity/action/IPSDEAction"},"dstPSDataEntity":{"desc":"目标实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"sql":{"desc":"SQL代码","type":"string"},"srcPSDELogicParam":{"desc":"附加源参数对象","type":"object","schema":"/dataentity/logic/IPSDELogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDERawSqlCallLogic.json b/resources/model/dataentity/logic/IPSDERawSqlCallLogic.json new file mode 100644 index 0000000..4f4772b --- /dev/null +++ b/resources/model/dataentity/logic/IPSDERawSqlCallLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"],"dstPSDELogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDELogicParam"},"sql":{"desc":"SQL代码","type":"string"},"fillDstLogicParam":{"desc":"执行结果填充目标参数","type":"boolean"},"ignoreResetDstLogicParam":{"desc":"忽略重置目标参数","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDESFPluginLogic.json b/resources/model/dataentity/logic/IPSDESFPluginLogic.json new file mode 100644 index 0000000..76d9735 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDESFPluginLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"],"dstPSDELogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDELogicParam"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEStartWFLogic.json b/resources/model/dataentity/logic/IPSDEStartWFLogic.json new file mode 100644 index 0000000..63f8c00 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEStartWFLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"],"dstPSDELogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDELogicParam"},"dstPSDataEntity":{"desc":"目标实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psAppWF":{"desc":"应用工作流对象","type":"object","schema":"/app/wf/IPSAppWF"},"psDEWF":{"desc":"实体工作流对象","type":"object","schema":"/dataentity/wf/IPSDEWF"},"psWorkflow":{"desc":"工作流对象","type":"object","schema":"/wf/IPSWorkflow"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDESysLogicLogic.json b/resources/model/dataentity/logic/IPSDESysLogicLogic.json new file mode 100644 index 0000000..2486e7b --- /dev/null +++ b/resources/model/dataentity/logic/IPSDESysLogicLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"],"dstPSDELogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDELogicParam"},"logicParam":{"desc":"逻辑调用参数","type":"string"},"logicParam2":{"desc":"逻辑调用参数2","type":"string"},"psSysLogic":{"desc":"系统逻辑对象","type":"object","schema":"/res/IPSSysLogic"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEThrowExceptionLogic.json b/resources/model/dataentity/logic/IPSDEThrowExceptionLogic.json new file mode 100644 index 0000000..99da0a2 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEThrowExceptionLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNode"],"errorCode":{"desc":"错误代码","type":"number"},"errorInfo":{"desc":"错误信息","type":"string"},"exceptionObj":{"desc":"异常对象","type":"string"},"exceptionParam":{"desc":"异常参数对象","type":"object","schema":"/dataentity/logic/IPSDELogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUIActionLogic.json b/resources/model/dataentity/logic/IPSDEUIActionLogic.json new file mode 100644 index 0000000..561f760 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUIActionLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"dstPSAppDEUIAction":{"desc":"调用应用实体界面行为","type":"object","schema":"/app/dataentity/IPSAppDEUIAction"},"dstPSAppDataEntity":{"desc":"目标应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUICtrlFireEventLogic.json b/resources/model/dataentity/logic/IPSDEUICtrlFireEventLogic.json new file mode 100644 index 0000000..957836e --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUICtrlFireEventLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"eventName":{"desc":"事件名称","type":"string"},"eventParam":{"desc":"事件参数","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"},"fireCtrl":{"desc":"触发对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUICtrlInvokeLogic.json b/resources/model/dataentity/logic/IPSDEUICtrlInvokeLogic.json new file mode 100644 index 0000000..f5870a0 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUICtrlInvokeLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"invokeCtrl":{"desc":"调用部件","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"},"invokeMethod":{"desc":"调用方法","type":"string"},"invokeParam":{"desc":"调用参数","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUIDEActionLogic.json b/resources/model/dataentity/logic/IPSDEUIDEActionLogic.json new file mode 100644 index 0000000..f0b2ba9 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUIDEActionLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"dstPSAppDEAction":{"desc":"调用应用实体行为","type":"object","schema":"/app/dataentity/IPSAppDEAction"},"dstPSAppDataEntity":{"desc":"目标应用实体对象","type":"object","schema":"/app/dataentity/IPSAppDataEntity"},"dstPSDEUILogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogic.json b/resources/model/dataentity/logic/IPSDEUILogic.json new file mode 100644 index 0000000..c2d6f64 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicBase"],"psDEUILogicNodes":{"desc":"逻辑处理节点集合","type":"array","schema":"/dataentity/logic/IPSDEUILogicNode"},"psDEUILogicParams":{"desc":"逻辑处理参数集合","type":"array","schema":"/dataentity/logic/IPSDEUILogicParam"},"startPSDEUILogicNode":{"desc":"开始处理节点","type":"object","schema":"/dataentity/logic/IPSDEUILogicNode"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicGroup.json b/resources/model/dataentity/logic/IPSDEUILogicGroup.json new file mode 100644 index 0000000..9f3c3eb --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicGroupDetail.json b/resources/model/dataentity/logic/IPSDEUILogicGroupDetail.json new file mode 100644 index 0000000..cdeda03 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"ctrlName":{"desc":"部件名称","type":"string"},"eventArg":{"desc":"事件参数","type":"string"},"eventArg2":{"desc":"事件参数2","type":"string"},"eventNames":{"desc":"事件名称","type":"string"},"logicTag":{"desc":"逻辑标记","type":"string"},"logicTag2":{"desc":"逻辑标记2","type":"string"},"logicType":{"desc":"触发逻辑类型","type":"string","enum":{"DEUILOGIC":"实体界面逻辑","SYSVIEWLOGIC":"系统预置界面逻辑","PFPLUGIN":"前端扩展插件","SCRIPT":"脚本代码"}},"scriptCode":{"desc":"脚本代码","type":"string"},"triggerType":{"desc":"触发器类型","type":"string","enum":{"TIMER":"定时器触发","CTRLEVENT":"部件事件触发","VIEWEVENT":"视图事件触发","APPEVENT":"应用事件触发","CUSTOM":"只挂接(外部调用)"}}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicLink.json b/resources/model/dataentity/logic/IPSDEUILogicLink.json new file mode 100644 index 0000000..d6676a0 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicLink.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkBase"],"dstPSDEUILogicNode":{"desc":"目标逻辑节点对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicNode"},"linkCond":{"desc":"连接条件","type":"string"},"linkMode":{"desc":"连接模式","type":"number","enum":{"0":"常规","1":"默认连接","2":"异步结束","3":"异步拒绝","9":"异常处理"}},"psDEUILogicLinkGroupCond":{"desc":"连接条件对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicLinkGroupCond"},"srcPSDEUILogicNode":{"desc":"源逻辑节点对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicNode"},"catchLink":{"desc":"异常处理连接","type":"boolean"},"defaultLink":{"desc":"默认连接","type":"boolean"},"fulfilledLink":{"desc":"异步完成连接","type":"boolean"},"rejectedLink":{"desc":"异步拒绝连接","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicLinkCond.json b/resources/model/dataentity/logic/IPSDEUILogicLinkCond.json new file mode 100644 index 0000000..d564386 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicLinkCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicLinkCondBase"]} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicLinkGroupCond.json b/resources/model/dataentity/logic/IPSDEUILogicLinkGroupCond.json new file mode 100644 index 0000000..2172e05 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicLinkGroupCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicLinkCond","/dataentity/logic/IPSDELogicLinkGroupCondBase"],"psDEUILogicLinkConds":{"desc":"子条件集合","type":"array","schema":"/dataentity/logic/IPSDEUILogicLinkCond"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicLinkSingleCond.json b/resources/model/dataentity/logic/IPSDEUILogicLinkSingleCond.json new file mode 100644 index 0000000..472abdc --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicLinkSingleCond.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicLinkCond","/dataentity/logic/IPSDELogicLinkSingleCondBase"],"dstLogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicNode.json b/resources/model/dataentity/logic/IPSDEUILogicNode.json new file mode 100644 index 0000000..a42cdf2 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicNode.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNodeBase"],"dstPSDEUILogicParam":{"desc":"目标逻辑参数对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"},"psDEUILogicLinks":{"desc":"逻辑节点连出连接集合","type":"array","schema":"/dataentity/logic/IPSDEUILogicLink"},"psDEUILogicNodeParams":{"desc":"逻辑节点参数集合","type":"array","schema":"/dataentity/logic/IPSDEUILogicNodeParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicNodeParam.json b/resources/model/dataentity/logic/IPSDEUILogicNodeParam.json new file mode 100644 index 0000000..5fd3a74 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicNodeParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicNodeParamBase"],"dstPSDEUILogicParam":{"desc":"目标逻辑参数","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"},"expression":{"desc":"表达式","type":"string"},"srcPSDEUILogicParam":{"desc":"源逻辑参数","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUILogicParam.json b/resources/model/dataentity/logic/IPSDEUILogicParam.json new file mode 100644 index 0000000..97100b9 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUILogicParam.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDELogicParamBase"],"paramFieldName":{"desc":"参数属性名称","type":"string"},"paramTag":{"desc":"参数标记","type":"string"},"paramTag2":{"desc":"参数标记2","type":"string"},"refPSDEUILogicParam":{"desc":"引用参数对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"},"activeContainerParam":{"desc":"当前容器对象","type":"boolean"},"activeCtrlParam":{"desc":"当前部件对象","type":"boolean"},"activeViewParam":{"desc":"当前视图对象","type":"boolean"},"appGlobalParam":{"desc":"应用全局参数绑定参数","type":"boolean"},"ctrlParam":{"desc":"指定部件对象","type":"boolean"},"navContextParam":{"desc":"导航上下文绑定参数","type":"boolean"},"navViewParamParam":{"desc":"导航视图参数绑定参数","type":"boolean"},"paramSubParam":{"desc":"参数子参数","type":"boolean"},"routeViewSessionParam":{"desc":"顶级视图会话共享参数绑定参数","type":"boolean"},"viewNavDataParam":{"desc":"导航数据参数绑定参数","type":"boolean"},"viewSessionParam":{"desc":"当前视图会话共享参数绑定参数","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUIMsgBoxLogic.json b/resources/model/dataentity/logic/IPSDEUIMsgBoxLogic.json new file mode 100644 index 0000000..5d4845b --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUIMsgBoxLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"buttonsType":{"desc":"按钮集类型","type":"string","enum":{"YESNO":"是、否","YESNOCANCEL":"是、否、取消","OK":"确定","OKCANCEL":"确定、取消"}},"message":{"desc":"消息内容","type":"string"},"msgBoxParam":{"desc":"消息框参数对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"},"msgBoxType":{"desc":"消息框类型","type":"string","enum":{"INFO":"常规","QUESTION":"询问","WARNING":"警告","ERROR":"错误"}},"showMode":{"desc":"显示模式","type":"string","enum":{"CENTER":"居中"}},"title":{"desc":"消息抬头","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUIPFPluginLogic.json b/resources/model/dataentity/logic/IPSDEUIPFPluginLogic.json new file mode 100644 index 0000000..2e8c5f5 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUIPFPluginLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUIRawCodeLogic.json b/resources/model/dataentity/logic/IPSDEUIRawCodeLogic.json new file mode 100644 index 0000000..bf2cbf7 --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUIRawCodeLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"code":{"desc":"直接代码","type":"string"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEUIThrowExceptionLogic.json b/resources/model/dataentity/logic/IPSDEUIThrowExceptionLogic.json new file mode 100644 index 0000000..2b1431b --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEUIThrowExceptionLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogicNode"],"errorCode":{"desc":"错误代码","type":"number"},"errorInfo":{"desc":"错误信息","type":"string"},"exceptionObj":{"desc":"异常对象","type":"string"},"exceptionParam":{"desc":"异常参数对象","type":"object","schema":"/dataentity/logic/IPSDEUILogicParam"}} \ No newline at end of file diff --git a/resources/model/dataentity/logic/IPSDEViewLogic.json b/resources/model/dataentity/logic/IPSDEViewLogic.json new file mode 100644 index 0000000..ec728dd --- /dev/null +++ b/resources/model/dataentity/logic/IPSDEViewLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/logic/IPSDEUILogic"]} \ No newline at end of file diff --git a/resources/model/dataentity/mainstate/IPSDEMainState.json b/resources/model/dataentity/mainstate/IPSDEMainState.json new file mode 100644 index 0000000..56dae86 --- /dev/null +++ b/resources/model/dataentity/mainstate/IPSDEMainState.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"actionDenyMsg":{"desc":"行为拒绝消息","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"enterPSDEAction":{"desc":"进入实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"enterStateMode":{"desc":"进入状态模式","type":"string","enum":{"ANY":"任意","SOME":"指定"}},"logicName":{"desc":"逻辑名称","type":"string"},"mSTag":{"desc":"主状态标记","type":"string"},"oPPrivDenyMsg":{"desc":"操作标识拒绝消息","type":"string"},"orderValue":{"desc":"排序值","type":"number"},"psDEMainStateActions":{"desc":"主状态控制行为集合","type":"array","schema":"/dataentity/mainstate/IPSDEMainStateAction"},"psDEMainStateOPPrivs":{"desc":"主状态控制操作标识集合","type":"array","schema":"/dataentity/mainstate/IPSDEMainStateOPPriv"},"prevPSDEMainStates":{"desc":"前序状态集合","type":"array","schema":"/dataentity/mainstate/IPSDEMainState"},"state2Value":{"desc":"状态2值","type":"string"},"state3Value":{"desc":"状态3值","type":"string"},"stateValue":{"desc":"状态值","type":"string"},"viewActions":{"desc":"视图操作控制","type":"number","enum":{"1":"支持建立","2":"支持编辑","4":"支持查看","8":"支持删除","16":"支持拷贝","32":"支持行编辑","64":"支持导出","1024":"支持导入","128":"支持打印","256":"支持过滤","512":"支持帮助","2048":"支持启动流程"}},"wFStateMode":{"desc":"流程状态模式","type":"number","enum":{"0":"无","1":"流程中","2":"流程正常结束","3":"流程异常退出"}},"actionAllowMode":{"desc":"行为允许模式","type":"boolean"},"default":{"desc":"默认主状态","type":"boolean"},"enableViewActions":{"desc":"启用视图操作控制","type":"boolean"},"fieldAllowMode":{"desc":"属性允许模式","type":"boolean"},"oPPrivAllowMode":{"desc":"操作标识允许模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/mainstate/IPSDEMainStateAction.json b/resources/model/dataentity/mainstate/IPSDEMainStateAction.json new file mode 100644 index 0000000..bb6dbb4 --- /dev/null +++ b/resources/model/dataentity/mainstate/IPSDEMainStateAction.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psDEAction":{"desc":"实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"allowMode":{"desc":"行为允许模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/mainstate/IPSDEMainStateField.json b/resources/model/dataentity/mainstate/IPSDEMainStateField.json new file mode 100644 index 0000000..df0e08d --- /dev/null +++ b/resources/model/dataentity/mainstate/IPSDEMainStateField.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"allowMode":{"desc":"属性允许模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/mainstate/IPSDEMainStateOPPriv.json b/resources/model/dataentity/mainstate/IPSDEMainStateOPPriv.json new file mode 100644 index 0000000..da329ee --- /dev/null +++ b/resources/model/dataentity/mainstate/IPSDEMainStateOPPriv.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psDEOPPriv":{"desc":"实体操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"}} \ No newline at end of file diff --git a/resources/model/dataentity/mainstate/IPSDEMainStateRS.json b/resources/model/dataentity/mainstate/IPSDEMainStateRS.json new file mode 100644 index 0000000..d8de567 --- /dev/null +++ b/resources/model/dataentity/mainstate/IPSDEMainStateRS.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"nextPSDEMainState":{"desc":"进入主状态","type":"object","schema":"/dataentity/mainstate/IPSDEMainState"},"prevPSDEMainState":{"desc":"前序主状态","type":"object","schema":"/dataentity/mainstate/IPSDEMainState"}} \ No newline at end of file diff --git a/resources/model/dataentity/notify/IPSDENotify.json b/resources/model/dataentity/notify/IPSDENotify.json new file mode 100644 index 0000000..f836247 --- /dev/null +++ b/resources/model/dataentity/notify/IPSDENotify.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"beginTimePSDEField":{"desc":"开始时间值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"checkTimer":{"desc":"通知检查间隔","type":"number"},"codeName":{"desc":"代码标识","type":"string"},"customCond":{"desc":"自定义条件","type":"string"},"endTimePSDEField":{"desc":"结束时间值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"msgType":{"desc":"发送通知类型","type":"number","enum":{"1":"系统消息","2":"电子邮件","4":"手机短信","8":"MSN消息","16":"检务通消息","32":"微信","64":"钉钉"}},"notifyEnd":{"desc":"延后通知间隔","type":"number"},"notifyStart":{"desc":"提前通知间隔","type":"number"},"notifyTag":{"desc":"通知标记","type":"string"},"notifyTag2":{"desc":"通知标记2","type":"string"},"psDEDataSet":{"desc":"数据集","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDENotifyTargets":{"desc":"通知目标集合","type":"array","schema":"/dataentity/notify/IPSDENotifyTarget"},"psSysMsgQueue":{"desc":"系统消息队列","type":"object","schema":"/msg/IPSSysMsgQueue"},"psSysMsgTempl":{"desc":"系统消息模板","type":"object","schema":"/msg/IPSSysMsgTempl"},"taskMode":{"desc":"附加任务模式","type":"number","enum":{"0":"无任务","1":"待办任务"}},"timerMode":{"desc":"定时触发模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/notify/IPSDENotifyTarget.json b/resources/model/dataentity/notify/IPSDENotifyTarget.json new file mode 100644 index 0000000..51d93e6 --- /dev/null +++ b/resources/model/dataentity/notify/IPSDENotifyTarget.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"filter":{"desc":"系统消息目标过滤项","type":"string"},"psSysMsgTarget":{"desc":"系统消息目标","type":"object","schema":"/msg/IPSSysMsgTarget"},"targetPSDEField":{"desc":"目标标识值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"targetType":{"desc":"目标类型","type":"string","enum":{"DEFIELD":"当前实体属性","SYSMSGTARGET":"系统消息目标","USER":"用户自定义","USER2":"用户自定义2"}},"targetTypePSDEField":{"desc":"目标类型值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/dataentity/print/IPSDEPrint.json b/resources/model/dataentity/print/IPSDEPrint.json new file mode 100644 index 0000000..523374f --- /dev/null +++ b/resources/model/dataentity/print/IPSDEPrint.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"dataAccessAction":{"desc":"数据访问标识","type":"string"},"detailPSDE":{"desc":"明细数据实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"detailPSDEDataSet":{"desc":"明细数据实体数据集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"getDataPSDEAction":{"desc":"获取数据实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"getDataPSDEOPPriv":{"desc":"获取数据实体操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"reportFile":{"desc":"报表路径","type":"string"},"reportModel":{"desc":"报表模型","type":"string"},"reportType":{"desc":"报表类型","type":"string"},"defaultMode":{"desc":"实体默认打印","type":"boolean"},"enableColPriv":{"desc":"启用列权限","type":"boolean"},"enableLog":{"desc":"启用打印日志","type":"boolean"},"enableMulitPrint":{"desc":"启用多页打印","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/priv/IPSDEOPPriv.json b/resources/model/dataentity/priv/IPSDEOPPriv.json new file mode 100644 index 0000000..fa0ab4d --- /dev/null +++ b/resources/model/dataentity/priv/IPSDEOPPriv.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"logicName":{"desc":"逻辑名称","type":"string"},"mapPSDEName":{"desc":"映射实体名称","type":"string"},"mapPSDEOPPrivName":{"desc":"映射实体操作标识","type":"string"},"mapPSDER":{"desc":"映射关系对象","type":"object","schema":"/dataentity/der/IPSDERBase"},"mapPSDataEntity":{"desc":"映射实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"mapPSSysUniRes":{"desc":"系统统一资源","type":"object","schema":"/security/IPSSysUniRes"},"mapSysUniResCode":{"desc":"统一资源代码","type":"string"},"mapSysUniRes":{"desc":"映射系统统一资源","type":"boolean"},"systemReserved":{"desc":"系统保留","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/priv/IPSDEOPPrivRole.json b/resources/model/dataentity/priv/IPSDEOPPrivRole.json new file mode 100644 index 0000000..1dcdd7a --- /dev/null +++ b/resources/model/dataentity/priv/IPSDEOPPrivRole.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject","/dataentity/priv/IPSDEUserRoleOPPriv"],"psDEOPPriv":{"desc":"实体操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"}} \ No newline at end of file diff --git a/resources/model/dataentity/priv/IPSDEUserRole.json b/resources/model/dataentity/priv/IPSDEUserRole.json new file mode 100644 index 0000000..7661294 --- /dev/null +++ b/resources/model/dataentity/priv/IPSDEUserRole.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"customCond":{"desc":"自定义条件","type":"string"},"customDRMode":{"desc":"自定义数据范围模式","type":"string"},"customDRMode2":{"desc":"自定义数据范围模式2","type":"string"},"customDRMode2Param":{"desc":"自定义数据范围2参数","type":"string"},"customDRModeParam":{"desc":"自定义数据范围参数","type":"string"},"orgDR":{"desc":"机构数据范围","type":"number","enum":{"1":"当前组织","2":"上级组织","4":"下级组织","8":"无组织值"}},"psDEDataSet":{"desc":"实体数据集","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDEUserRoleOPPrivs":{"desc":"授权操作标识集合","type":"array","schema":"/dataentity/priv/IPSDEUserRoleOPPriv"},"psSysUserDR":{"desc":"用户数据范围对象","type":"object","schema":"/security/IPSSysUserDR"},"psSysUserDR2":{"desc":"用户数据范围对象2","type":"object","schema":"/security/IPSSysUserDR"},"roleTag":{"desc":"角色标记","type":"string"},"secBC":{"desc":"部门业务条件","type":"string"},"secDR":{"desc":"部门数据范围","type":"number","enum":{"1":"当前部门","2":"上级部门","4":"下级部门","8":"无部门值"}},"userDRAction":{"desc":"数据访问使用操作标识","type":"string"},"allData":{"desc":"全部数据","type":"boolean"},"defaultMode":{"desc":"默认角色","type":"boolean"},"enableOrgDR":{"desc":"支持机构数据范围","type":"boolean"},"enableSecBC":{"desc":"支持部门业务条线","type":"boolean"},"enableSecDR":{"desc":"支持部门数据范围","type":"boolean"},"enableUserDR":{"desc":"启用用户数据范围","type":"boolean"},"systemReserved":{"desc":"系统保留","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/priv/IPSDEUserRoleOPPriv.json b/resources/model/dataentity/priv/IPSDEUserRoleOPPriv.json new file mode 100644 index 0000000..11f8b66 --- /dev/null +++ b/resources/model/dataentity/priv/IPSDEUserRoleOPPriv.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"customCond":{"desc":"自定义条件","type":"string"},"dataAccessAction":{"desc":"数据访问标识","type":"string"},"psDEOPPriv":{"desc":"实体操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"}} \ No newline at end of file diff --git a/resources/model/dataentity/priv/IPSSysDEOPPriv.json b/resources/model/dataentity/priv/IPSSysDEOPPriv.json new file mode 100644 index 0000000..63e26de --- /dev/null +++ b/resources/model/dataentity/priv/IPSSysDEOPPriv.json @@ -0,0 +1 @@ +{"extends":["/dataentity/priv/IPSDEOPPriv"]} \ No newline at end of file diff --git a/resources/model/dataentity/report/IPSDEReport.json b/resources/model/dataentity/report/IPSDEReport.json new file mode 100644 index 0000000..4b7a842 --- /dev/null +++ b/resources/model/dataentity/report/IPSDEReport.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"psDEDataSet":{"desc":"实体数据集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDEDataSet2":{"desc":"实体数据集对象2","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDEDataSet3":{"desc":"实体数据集对象3","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDEDataSet4":{"desc":"实体数据集对象4","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDEReportItems":{"desc":"报表项集合","type":"array","schema":"/dataentity/report/IPSDEReportItem"},"psSysUniRes":{"desc":"权限统一资源对象","type":"object","schema":"/security/IPSSysUniRes"},"reportFile":{"desc":"报表路径","type":"string"},"reportModel":{"desc":"报表模型","type":"string"},"reportType":{"desc":"报表类型","type":"string"},"enableLog":{"desc":"支持日志","type":"boolean"},"multiPage":{"desc":"多页报表","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/report/IPSDEReportItem.json b/resources/model/dataentity/report/IPSDEReportItem.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/report/IPSDEReportItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEMethodDTO.json b/resources/model/dataentity/service/IPSDEMethodDTO.json new file mode 100644 index 0000000..80e584c --- /dev/null +++ b/resources/model/dataentity/service/IPSDEMethodDTO.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"psDEMethodDTOFields":{"desc":"DTO属性集合","type":"array","schema":"/dataentity/service/IPSDEMethodDTOField"},"sourceType":{"desc":"实体方法DTO对象来源类型","type":"string","enum":{"DE":"实体","DYNAMODEL":"动态模型","DEACTIONINPUT":"实体行为参数","DEFILTER":"实体过滤器"}},"type":{"desc":"类型","type":"string","enum":{"DEFAULT":"实体默认","DEACTIONINPUT":"实体行为自定义参数","DEFILTER":"实体过滤器"}},"defaultMode":{"desc":"默认域对象","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEMethodDTOField.json b/resources/model/dataentity/service/IPSDEMethodDTOField.json new file mode 100644 index 0000000..c4df7d9 --- /dev/null +++ b/resources/model/dataentity/service/IPSDEMethodDTOField.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFieldBase","/IPSModelSortable","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"defaultValue":{"desc":"默认值","type":"string"},"defaultValueType":{"desc":"默认值类型","type":"string"},"fieldTag":{"desc":"属性标记","type":"string"},"fieldTag2":{"desc":"属性标记2","type":"string"},"logicName":{"desc":"中文名称","type":"string"},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"psDER":{"desc":"嵌套数据关系","type":"object","schema":"/dataentity/der/IPSDERBase"},"refPSDEMethodDTO":{"desc":"引用实体方法DTO对象","type":"object","schema":"/dataentity/service/IPSDEMethodDTO"},"refPSDataEntity":{"desc":"引用实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"sourceType":{"desc":"DTO属性来源类型","type":"string","enum":{"DEFIELD":"实体属性","DEFGROUPDETAIL":"实体属性组成员","DER":"实体关系","DYNAMODELATTR":"动态模型属性","DEACTIONPARAM":"实体行为参数","DEFSEARCHMODE":"属性搜索模式"}},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"type":{"desc":"实体DTO对象属性类型","type":"string","enum":{"SIMPLE":"简单数据类型","SIMPLES":"简单数据类型数组","DTO":"DTO对象","DTOS":"DTO对象数组"}},"allowEmpty":{"desc":"允许空输入","type":"boolean"},"readOnly":{"desc":"只读属性","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEMethodInput.json b/resources/model/dataentity/service/IPSDEMethodInput.json new file mode 100644 index 0000000..367f0e7 --- /dev/null +++ b/resources/model/dataentity/service/IPSDEMethodInput.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"type":{"desc":"输入类型","type":"string","enum":{"NONE":"没有输入","KEYFIELD":"主键属性","KEYFIELDS":"主键属性集合","DTO":"DTO对象","DTOS":"DTO对象集合","FILTER":"搜索过滤对象","UNKNOWN":"未知","USER":"用户自定义","USER2":"用户自定义2"}}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEMethodReturn.json b/resources/model/dataentity/service/IPSDEMethodReturn.json new file mode 100644 index 0000000..207dec6 --- /dev/null +++ b/resources/model/dataentity/service/IPSDEMethodReturn.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"type":{"desc":"返回类型","type":"string","enum":{"VOID":"没有返回","SIMPLE":"简单值","SIMPLES":"简单值数组","DTO":"DTO对象","DTOS":"DTO对象集合","PAGE":"搜索分页","UNKNOWN":"未知","USER":"用户自定义","USER2":"用户自定义2"}}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEServiceAPI.json b/resources/model/dataentity/service/IPSDEServiceAPI.json new file mode 100644 index 0000000..30be2f8 --- /dev/null +++ b/resources/model/dataentity/service/IPSDEServiceAPI.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"aPIMode":{"desc":"接口模式","type":"number","enum":{"1":"主接口","0":"从接口","9":"数据传输对象(DTO)嵌套成员"}},"codeName":{"desc":"代码标识","type":"string"},"lNPSLanguageRes":{"desc":"逻辑名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"logicName":{"desc":"逻辑名称","type":"string"},"majorPSDEServiceAPIRSs":{"desc":"接口主关系集合","type":"array","schema":"/dataentity/service/IPSDEServiceAPIRS"},"minorPSDEServiceAPIRSs":{"desc":"接口从关系集合","type":"array","schema":"/dataentity/service/IPSDEServiceAPIRS"},"psDEServiceAPIFields":{"desc":"服务接口属性集合","type":"array","schema":"/dataentity/service/IPSDEServiceAPIField"},"psDEServiceAPIMethods":{"desc":"接口方法集合","type":"array","schema":"/dataentity/service/IPSDEServiceAPIMethod"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysSFPlugin":{"desc":"后端扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"enableDataExport":{"desc":"支持数据导出","type":"boolean"},"enableDataImport":{"desc":"支持数据导入","type":"boolean"},"major":{"desc":"主接口","type":"boolean"},"nested":{"desc":"嵌套成员","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEServiceAPIField.json b/resources/model/dataentity/service/IPSDEServiceAPIField.json new file mode 100644 index 0000000..6f094ee --- /dev/null +++ b/resources/model/dataentity/service/IPSDEServiceAPIField.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/dataentity/defield/IPSDEFieldBase"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"lNPSLanguageRes":{"desc":"逻辑名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"logicName":{"desc":"逻辑名称","type":"string"},"orderValue":{"desc":"排序值","type":"number"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"stringLength":{"desc":"字符串长度","type":"number"},"allowEmpty":{"desc":"允许空输入","type":"boolean"},"enableCreate":{"desc":"支持建立","type":"boolean"},"enableModify":{"desc":"支持修改","type":"boolean"},"keyField":{"desc":"主键属性","type":"boolean"},"majorField":{"desc":"主信息属性","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEServiceAPIMethod.json b/resources/model/dataentity/service/IPSDEServiceAPIMethod.json new file mode 100644 index 0000000..80bdd05 --- /dev/null +++ b/resources/model/dataentity/service/IPSDEServiceAPIMethod.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"dataAccessAction":{"desc":"数据访问标识","type":"string"},"methodParam":{"desc":"方法参数","type":"string"},"methodParam2":{"desc":"方法参数2","type":"string"},"methodType":{"desc":"方法类型","type":"string","enum":{"DEACTION":"实体行为","FETCH":"实体数据集合","SELECT":"实体数据查询(SELECT)","FETCHTEMP":"实体数据集合(临时)","SELECTTEMP":"实体数据查询(SELECT)(临时)","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"psDEAction":{"desc":"实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"psDEDataSet":{"desc":"数据集合","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDEServiceAPIMethodInput":{"desc":"方法输入对象","type":"object","schema":"/dataentity/service/IPSDEServiceAPIMethodInput"},"psDEServiceAPIMethodReturn":{"desc":"方法返回对象","type":"object","schema":"/dataentity/service/IPSDEServiceAPIMethodReturn"},"psSysSFPlugin":{"desc":"后端扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"parentKeyMode":{"desc":"父值处理模式","type":"string","enum":{"DEFAULT":"默认","CHILDOF":"递归子数据(查询)","IGNORE":"忽略","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"requestField":{"desc":"请求属性","type":"string"},"requestMethod":{"desc":"请求方式","type":"string","enum":{"GET":"GET","HEAD":"HEAD","POST":"POST","PUT":"PUT","PATCH":"PATCH","DELETE":"DELETE","OPTIONS":"OPTIONS","TRACE":"TRACE"}},"requestParamType":{"desc":"参数类型","type":"string","enum":{"NONE":"无参数","FIELD":"指定属性","FIELDS":"指定属性数组","ENTITY":"数据对象","ENTITIES":"数据对象数组","OBJECT":"其它对象","OBJECTS":"其它对象数组"}},"requestPath":{"desc":"请求路径","type":"string"},"returnValueType":{"desc":"返回值类型","type":"string","enum":{"VOID":"无(void)","SIMPLE":"简单值","SIMPLES":"简单值数组","ENTITY":"数据对象(Entity)","ENTITIES":"数据对象数组(Entity[])","OBJECT":"其它对象(Object)","OBJECTS":"其它对象数组(Object[])","USER":"用户自定义(USER)","USER2":"用户自定义2(USER2)"}},"tempDataMode":{"desc":"临时数据模式","type":"number","enum":{"0":"无临时数据模式","1":"主数据模式","2":"从数据模式"}},"enableTestMethod":{"desc":"启用判断执行方法","type":"boolean"},"needResourceKey":{"desc":"需要提供资源键值","type":"boolean"},"noServiceCodeName":{"desc":"无服务代码标识","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEServiceAPIMethodInput.json b/resources/model/dataentity/service/IPSDEServiceAPIMethodInput.json new file mode 100644 index 0000000..4e20eb4 --- /dev/null +++ b/resources/model/dataentity/service/IPSDEServiceAPIMethodInput.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodInput"],"keyPSDEServiceAPIField":{"desc":"实体服务接口主键属性","type":"object","schema":"/dataentity/service/IPSDEServiceAPIField"},"psDEMethodDTO":{"desc":"实体服务接口DTO对象","type":"object","schema":"/dataentity/service/IPSDEMethodDTO"}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEServiceAPIMethodReturn.json b/resources/model/dataentity/service/IPSDEServiceAPIMethodReturn.json new file mode 100644 index 0000000..daec8a0 --- /dev/null +++ b/resources/model/dataentity/service/IPSDEServiceAPIMethodReturn.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodReturn"],"psDEMethodDTO":{"desc":"实体服务接口DTO对象","type":"object","schema":"/dataentity/service/IPSDEMethodDTO"},"stdDataType":{"desc":"简单值类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEServiceAPIRS.json b/resources/model/dataentity/service/IPSDEServiceAPIRS.json new file mode 100644 index 0000000..11074ab --- /dev/null +++ b/resources/model/dataentity/service/IPSDEServiceAPIRS.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"majorPSDEServiceAPI":{"desc":"主接口对象","type":"object","schema":"/dataentity/service/IPSDEServiceAPI"},"minorPSDEServiceAPI":{"desc":"从接口对象","type":"object","schema":"/dataentity/service/IPSDEServiceAPI"},"orderValue":{"desc":"排序值","type":"number"},"psDER":{"desc":"关系对象","type":"object","schema":"/dataentity/der/IPSDERBase"},"psDEServiceAPIMethods":{"desc":"接口方法集合","type":"array","schema":"/dataentity/service/IPSDEServiceAPIMethod"},"parentFilter":{"desc":"关系项","type":"string"},"parentIdPSDEField":{"desc":"父数据标识实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"parentTypeFilter":{"desc":"父类型过滤项","type":"string"},"parentTypePSDEField":{"desc":"父数据类型实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"array":{"desc":"数组模式","type":"boolean"},"enableDataExport":{"desc":"支持数据导出","type":"boolean"},"enableDataImport":{"desc":"支持数据导入","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/service/IPSDEServiceAPIVR.json b/resources/model/dataentity/service/IPSDEServiceAPIVR.json new file mode 100644 index 0000000..7dfcd79 --- /dev/null +++ b/resources/model/dataentity/service/IPSDEServiceAPIVR.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"orderValue":{"desc":"检查次序","type":"number"},"valueRuleType":{"desc":"值规则类型","type":"string","enum":{"DEFVALUERULE":"实体值规则","SYSVALUERULE":"系统值规则"}}} \ No newline at end of file diff --git a/resources/model/dataentity/uiaction/IPSDEUIAction.json b/resources/model/dataentity/uiaction/IPSDEUIAction.json new file mode 100644 index 0000000..d2cec95 --- /dev/null +++ b/resources/model/dataentity/uiaction/IPSDEUIAction.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject","/view/IPSUIAction"],"noPrivDisplayMode":{"desc":"无权限显示模式","type":"number"},"frontPSAppView":{"desc":"前端应用视图","type":"object","schema":"/app/view/IPSAppView"},"psAppDEMethod":{"desc":"应用实体方法","type":"object","schema":"/app/dataentity/IPSAppDEMethod"},"psDEOPPriv":{"desc":"相关实体操作标识","type":"object","schema":"/dataentity/priv/IPSDEOPPriv"},"saveTargetFirst":{"desc":"先保存目标数据","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/uiaction/IPSDEUIActionGroup.json b/resources/model/dataentity/uiaction/IPSDEUIActionGroup.json new file mode 100644 index 0000000..8081e82 --- /dev/null +++ b/resources/model/dataentity/uiaction/IPSDEUIActionGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject","/view/IPSUIActionGroup"]} \ No newline at end of file diff --git a/resources/model/dataentity/uiaction/IPSDEUIActionGroupDetail.json b/resources/model/dataentity/uiaction/IPSDEUIActionGroupDetail.json new file mode 100644 index 0000000..1b3641c --- /dev/null +++ b/resources/model/dataentity/uiaction/IPSDEUIActionGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/view/IPSUIActionGroupDetail"],"detailType":{"desc":"成员类型","type":"string","enum":{"DEUIACTION":"实体界面行为"}}} \ No newline at end of file diff --git a/resources/model/dataentity/unistate/IPSDEUniState.json b/resources/model/dataentity/unistate/IPSDEUniState.json new file mode 100644 index 0000000..b7bb2e1 --- /dev/null +++ b/resources/model/dataentity/unistate/IPSDEUniState.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"default":{"desc":"实体默认","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/util/IPSDEDataAuditUtil.json b/resources/model/dataentity/util/IPSDEDataAuditUtil.json new file mode 100644 index 0000000..d53ec42 --- /dev/null +++ b/resources/model/dataentity/util/IPSDEDataAuditUtil.json @@ -0,0 +1 @@ +{"extends":["/dataentity/util/IPSDEUtil"]} \ No newline at end of file diff --git a/resources/model/dataentity/util/IPSDEUtil.json b/resources/model/dataentity/util/IPSDEUtil.json new file mode 100644 index 0000000..4b1b7d6 --- /dev/null +++ b/resources/model/dataentity/util/IPSDEUtil.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"utilPSDE":{"desc":"功能实体","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE10":{"desc":"功能实体10","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE10Name":{"desc":"功能实体10名称","type":"string"},"utilPSDE11":{"desc":"功能实体11","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE12":{"desc":"功能实体12","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE13":{"desc":"功能实体13","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE14":{"desc":"功能实体14","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE15":{"desc":"功能实体15","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE16":{"desc":"功能实体16","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE17":{"desc":"功能实体17","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE18":{"desc":"功能实体18","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE19":{"desc":"功能实体19","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE2":{"desc":"功能实体2","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE20":{"desc":"功能实体20","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE2Name":{"desc":"功能实体2名称","type":"string"},"utilPSDE3":{"desc":"功能实体3","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE3Name":{"desc":"功能实体3名称","type":"string"},"utilPSDE4":{"desc":"功能实体4","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE4Name":{"desc":"功能实体4名称","type":"string"},"utilPSDE5":{"desc":"功能实体5","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE5Name":{"desc":"功能实体5名称","type":"string"},"utilPSDE6":{"desc":"功能实体6","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE6Name":{"desc":"功能实体6名称","type":"string"},"utilPSDE7":{"desc":"功能实体7","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE7Name":{"desc":"功能实体7名称","type":"string"},"utilPSDE8":{"desc":"功能实体8","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE8Name":{"desc":"功能实体8名称","type":"string"},"utilPSDE9":{"desc":"功能实体9","type":"object","schema":"/dataentity/IPSDataEntity"},"utilPSDE9Name":{"desc":"功能实体9名称","type":"string"},"utilPSDEName":{"desc":"功能实体名称","type":"string"},"utilTag":{"desc":"功能标记","type":"string"},"utilType":{"desc":"功能类型","type":"string","enum":{"DATAAUDIT":"数据审计","DYNASTORAGE":"动态存储","USER":"用户自定义"}}} \ No newline at end of file diff --git a/resources/model/dataentity/wf/IPSDEWF.json b/resources/model/dataentity/wf/IPSDEWF.json new file mode 100644 index 0000000..b6e83cb --- /dev/null +++ b/resources/model/dataentity/wf/IPSDEWF.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"entityStatePSCodeList":{"desc":"用户数据状态代码表","type":"object","schema":"/codelist/IPSCodeList"},"entityWFErrorState":{"desc":"流程错误状态值","type":"string"},"entityWFFinishState":{"desc":"流程结束状态值","type":"string"},"entityWFState":{"desc":"流程状态值","type":"string"},"errorPSDEMainState":{"desc":"错误跳转主状态","type":"object","schema":"/dataentity/mainstate/IPSDEMainState"},"finishPSDEAction":{"desc":"流程完成实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"finishPSDEMainState":{"desc":"完成跳转主状态","type":"object","schema":"/dataentity/mainstate/IPSDEMainState"},"initPSDEAction":{"desc":"流程初始化实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"myWFDataCapPSLanguageRes":{"desc":"我的数据标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"myWFDataCaption":{"desc":"我的数据标题","type":"string"},"myWFWorkCapPSLanguageRes":{"desc":"我的工作标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"myWFWorkCaption":{"desc":"我的工作标题","type":"string"},"psWorkflow":{"desc":"工作流对象","type":"object","schema":"/wf/IPSWorkflow"},"pWFInstPSDEField":{"desc":"父流程实例属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"processPSDEMainState":{"desc":"处理中主状态","type":"object","schema":"/dataentity/mainstate/IPSDEMainState"},"proxyDataPSDEField":{"desc":"代理数据存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"proxyModulePSDEField":{"desc":"代理模块存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"uDStatePSDEField":{"desc":"用户状态属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"wFActorsPSDEField":{"desc":"流程操作者属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"wFInstPSDEField":{"desc":"流程实例属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"wFMode":{"desc":"流程模式","type":"string"},"wFProxyMode":{"desc":"工作流代理模式","type":"number","enum":{"0":"(不使用)","1":"使用流程代理服务(客户端)","2":"提供流程代理服务(服务端)"}},"wFRetPSDEField":{"desc":"嵌入流程返回值存放属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"wFStartName":{"desc":"开始流程名称","type":"string"},"wFStatePSDEField":{"desc":"流程状态属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"wFStepPSCodeList":{"desc":"流程步骤代码表","type":"object","schema":"/codelist/IPSCodeList"},"wFStepPSDEField":{"desc":"流程步骤属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"wFVerPSDEField":{"desc":"流程版本存放属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"workflowPSDEField":{"desc":"工作流存放属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"defaultMode":{"desc":"默认流程实体","type":"boolean"},"enableUserStart":{"desc":"支持用户启动","type":"boolean"},"useWFProxyApp":{"desc":"使用工作流代理应用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEActionWizard.json b/resources/model/dataentity/wizard/IPSDEActionWizard.json new file mode 100644 index 0000000..ddae4e7 --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEActionWizard.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEActionWizardGroup.json b/resources/model/dataentity/wizard/IPSDEActionWizardGroup.json new file mode 100644 index 0000000..ddae4e7 --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEActionWizardGroup.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEActionWizardGroupDetail.json b/resources/model/dataentity/wizard/IPSDEActionWizardGroupDetail.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEActionWizardGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEActionWizardItem.json b/resources/model/dataentity/wizard/IPSDEActionWizardItem.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEActionWizardItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEDataSetDEAW.json b/resources/model/dataentity/wizard/IPSDEDataSetDEAW.json new file mode 100644 index 0000000..48752cb --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEDataSetDEAW.json @@ -0,0 +1 @@ +{"extends":["/dataentity/wizard/IPSDEActionWizard"]} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEWizard.json b/resources/model/dataentity/wizard/IPSDEWizard.json new file mode 100644 index 0000000..2d83e7d --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEWizard.json @@ -0,0 +1 @@ +{"extends":["/dataentity/IPSDataEntityObject"],"codeName":{"desc":"代码标识","type":"string"},"finishCapLanResTag":{"desc":"完成标题语言资源标识","type":"string"},"finishCapPSLanguageRes":{"desc":"完成标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"finishCaption":{"desc":"完成标题","type":"string"},"firstPSDEWizardForm":{"desc":"首向导表单","type":"object","schema":"/dataentity/wizard/IPSDEWizardForm"},"nextCapLanResTag":{"desc":"下一步标题语言资源标识","type":"string"},"nextCapPSLanguageRes":{"desc":"下一步标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"nextCaption":{"desc":"下一步标题","type":"string"},"psDEWizardForms":{"desc":"实体向导表单集合","type":"array","schema":"/dataentity/wizard/IPSDEWizardForm"},"psDEWizardSteps":{"desc":"实体向导步骤集合","type":"array","schema":"/dataentity/wizard/IPSDEWizardStep"},"prevCapLanResTag":{"desc":"上一步标题语言资源标识","type":"string"},"prevCapPSLanguageRes":{"desc":"上一步标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"prevCaption":{"desc":"上一步标题","type":"string"},"wizardStyle":{"desc":"向导样式","type":"string","enum":{"DEFAULT":"默认样式","STYLE2":"样式2","STYLE3":"样式3","STYLE4":"样式4"}},"enableMainStateLogic":{"desc":"启用主状态迁移逻辑","type":"boolean"},"stateWizard":{"desc":"状态向导","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEWizardForm.json b/resources/model/dataentity/wizard/IPSDEWizardForm.json new file mode 100644 index 0000000..0562267 --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEWizardForm.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"cM2PSLanguageRes":{"desc":"下一步确认信息2语言资源","type":"object","schema":"/res/IPSLanguageRes"},"cMPSLanguageRes":{"desc":"下一步确认信息语言资源","type":"object","schema":"/res/IPSLanguageRes"},"confirmMsg":{"desc":"下一步确认信息","type":"string"},"confirmMsg2":{"desc":"下一步确认信息2","type":"string"},"formTag":{"desc":"向导表单标记","type":"string"},"getPSDEFormName":{"desc":"实体表单名称","type":"string"},"psDEWizardStep":{"desc":"向导步骤对象","type":"object","schema":"/dataentity/wizard/IPSDEWizardStep"},"getStepActions":{"desc":"向导步骤行为","type":"array","schema":"string"},"firstForm":{"desc":"首表单","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEWizardStep.json b/resources/model/dataentity/wizard/IPSDEWizardStep.json new file mode 100644 index 0000000..28afc5a --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEWizardStep.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psSysImage":{"desc":"图标资源对象","type":"object","schema":"/res/IPSSysImage"},"stepTag":{"desc":"步骤标识","type":"string"},"subTitle":{"desc":"子抬头","type":"string"},"subTitlePSLanguageRes":{"desc":"子抬头语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"title":{"desc":"抬头","type":"string"},"titlePSLanguageRes":{"desc":"抬头语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"titlePSSysCss":{"desc":"抬头样式对象","type":"object","schema":"/res/IPSSysCss"},"enableLink":{"desc":"支持链接","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEWizardStepGroupLogic.json b/resources/model/dataentity/wizard/IPSDEWizardStepGroupLogic.json new file mode 100644 index 0000000..9004e78 --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEWizardStepGroupLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/wizard/IPSDEWizardStepLogic"]} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEWizardStepLogic.json b/resources/model/dataentity/wizard/IPSDEWizardStepLogic.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEWizardStepLogic.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dataentity/wizard/IPSDEWizardStepSingleLogic.json b/resources/model/dataentity/wizard/IPSDEWizardStepSingleLogic.json new file mode 100644 index 0000000..9004e78 --- /dev/null +++ b/resources/model/dataentity/wizard/IPSDEWizardStepSingleLogic.json @@ -0,0 +1 @@ +{"extends":["/dataentity/wizard/IPSDEWizardStepLogic"]} \ No newline at end of file diff --git a/resources/model/dts/IPSSysDTSQueue.json b/resources/model/dts/IPSSysDTSQueue.json new file mode 100644 index 0000000..75fb00c --- /dev/null +++ b/resources/model/dts/IPSSysDTSQueue.json @@ -0,0 +1 @@ +{"cancelTimeout":{"desc":"取消超时时长(毫秒)","type":"number"},"refreshTimer":{"desc":"刷新间隔时长(毫秒)","type":"number"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSDynaModel.json b/resources/model/dynamodel/IPSDynaModel.json new file mode 100644 index 0000000..89b68e8 --- /dev/null +++ b/resources/model/dynamodel/IPSDynaModel.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psDynaModelAttrs":{"desc":"属性集合","type":"array","schema":"/dynamodel/IPSDynaModelAttr"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSDynaModelAttr.json b/resources/model/dynamodel/IPSDynaModelAttr.json new file mode 100644 index 0000000..4aae40a --- /dev/null +++ b/resources/model/dynamodel/IPSDynaModelAttr.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"attrTag":{"desc":"属性标记","type":"string"},"attrTag2":{"desc":"属性标记2","type":"string"},"value":{"type":"string"},"valueType":{"type":"string"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonArraySchema.json b/resources/model/dynamodel/IPSJsonArraySchema.json new file mode 100644 index 0000000..32aa6f2 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonArraySchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodeSchema"],"enableAdditionalItems":{"desc":"支持额外节点","type":"boolean"},"enableUniqueItems":{"desc":"唯一项限制","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonBooleanSchema.json b/resources/model/dynamodel/IPSJsonBooleanSchema.json new file mode 100644 index 0000000..66329cb --- /dev/null +++ b/resources/model/dynamodel/IPSJsonBooleanSchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonSimpleSchema"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonDefs.json b/resources/model/dynamodel/IPSJsonDefs.json new file mode 100644 index 0000000..1bdda96 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonDefs.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodeSchemas"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonNode.json b/resources/model/dynamodel/IPSJsonNode.json new file mode 100644 index 0000000..cee7346 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonNode.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodeOwner"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonNodeOwner.json b/resources/model/dynamodel/IPSJsonNodeOwner.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dynamodel/IPSJsonNodeOwner.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonNodeSchema.json b/resources/model/dynamodel/IPSJsonNodeSchema.json new file mode 100644 index 0000000..a807d06 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonNodeSchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNode"],"description":{"desc":"描述信息","type":"string"},"refSchemaId":{"desc":"引用模型标识","type":"string"},"type":{"desc":"类型","type":"string","enum":{"null":"空值","boolean":"布尔值","object":"对象","array":"数组","number":"数值","string":"字符串","integer":"整数"}},"refMode":{"desc":"引用模型模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonNodeSchemas.json b/resources/model/dynamodel/IPSJsonNodeSchemas.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonNodeSchemas.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonNodes.json b/resources/model/dynamodel/IPSJsonNodes.json new file mode 100644 index 0000000..dd8a717 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonNodes.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNode","/dynamodel/IPSJsonNodeOwner"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonNullSchema.json b/resources/model/dynamodel/IPSJsonNullSchema.json new file mode 100644 index 0000000..c0b0011 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonNullSchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodeSchema"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonNumberSchema.json b/resources/model/dynamodel/IPSJsonNumberSchema.json new file mode 100644 index 0000000..66329cb --- /dev/null +++ b/resources/model/dynamodel/IPSJsonNumberSchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonSimpleSchema"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonObjectSchema.json b/resources/model/dynamodel/IPSJsonObjectSchema.json new file mode 100644 index 0000000..cd4d67a --- /dev/null +++ b/resources/model/dynamodel/IPSJsonObjectSchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodeSchema"],"enableAdditionalProperties":{"desc":"支持扩展属性","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonProperties.json b/resources/model/dynamodel/IPSJsonProperties.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonProperties.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonProperty.json b/resources/model/dynamodel/IPSJsonProperty.json new file mode 100644 index 0000000..814a67c --- /dev/null +++ b/resources/model/dynamodel/IPSJsonProperty.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNode"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonSchema.json b/resources/model/dynamodel/IPSJsonSchema.json new file mode 100644 index 0000000..d03bbd7 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonSchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonObjectSchema"],"schemaId":{"desc":"JsonSchema标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonSimpleSchema.json b/resources/model/dynamodel/IPSJsonSimpleSchema.json new file mode 100644 index 0000000..116cc63 --- /dev/null +++ b/resources/model/dynamodel/IPSJsonSimpleSchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodeSchema"],"format":{"desc":"格式","type":"string"},"stdDataType":{"desc":"标准值类型","type":"number"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSJsonStringSchema.json b/resources/model/dynamodel/IPSJsonStringSchema.json new file mode 100644 index 0000000..66329cb --- /dev/null +++ b/resources/model/dynamodel/IPSJsonStringSchema.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonSimpleSchema"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSSysDynaModel.json b/resources/model/dynamodel/IPSSysDynaModel.json new file mode 100644 index 0000000..d3fe367 --- /dev/null +++ b/resources/model/dynamodel/IPSSysDynaModel.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSDynaModel","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"content":{"desc":"模型内容","type":"string"},"usage":{"desc":"模型用途","type":"string","enum":{"DATA":"数据","JSONSCHEMA":"JsonSchema","OPENAPI3SCHEMA":"OpenAPI3Schema","LIQUIBASECHANGELOG":"LiquibaseChangeLog"}}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSSysDynaModelAttr.json b/resources/model/dynamodel/IPSSysDynaModelAttr.json new file mode 100644 index 0000000..8bdf839 --- /dev/null +++ b/resources/model/dynamodel/IPSSysDynaModelAttr.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSDynaModelAttr","/IPSModelSortable"],"stdDataType":{"desc":"标准值类型","type":"number"},"value":{"desc":"属性值","type":"string"},"valueType":{"desc":"值类型","type":"string"},"array":{"desc":"属性为数组","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSXmlElement.json b/resources/model/dynamodel/IPSXmlElement.json new file mode 100644 index 0000000..96953a3 --- /dev/null +++ b/resources/model/dynamodel/IPSXmlElement.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSXmlNode"],"elementId":{"desc":"元素标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSXmlNode.json b/resources/model/dynamodel/IPSXmlNode.json new file mode 100644 index 0000000..f1c0910 --- /dev/null +++ b/resources/model/dynamodel/IPSXmlNode.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSXmlNodeOwner"],"nodeName":{"desc":"节点名称","type":"string"},"nodeValue":{"desc":"节点值","type":"string"}} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSXmlNodeOwner.json b/resources/model/dynamodel/IPSXmlNodeOwner.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/dynamodel/IPSXmlNodeOwner.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/dynamodel/IPSXmlNodes.json b/resources/model/dynamodel/IPSXmlNodes.json new file mode 100644 index 0000000..ba3c449 --- /dev/null +++ b/resources/model/dynamodel/IPSXmlNodes.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSXmlNodeOwner"]} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIDE.json b/resources/model/eai/IPSEAIDE.json new file mode 100644 index 0000000..9c96d70 --- /dev/null +++ b/resources/model/eai/IPSEAIDE.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"dETag":{"desc":"映射实体标记","type":"string"},"dETag2":{"desc":"映射实体标记2","type":"string"},"psDataEntity":{"desc":"实体","type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIDEField.json b/resources/model/eai/IPSEAIDEField.json new file mode 100644 index 0000000..8b7ca15 --- /dev/null +++ b/resources/model/eai/IPSEAIDEField.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIDEObject","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"dstType":{"desc":"映射目标类型","type":"string","enum":{"ATTRIBUTE":"属性","ELEMENT":"简单元素"}},"fieldTag":{"desc":"实体属性映射标记","type":"string"},"fieldTag2":{"desc":"实体属性映射标记2","type":"string"},"psDEField":{"desc":"实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIDEObject.json b/resources/model/eai/IPSEAIDEObject.json new file mode 100644 index 0000000..b42917f --- /dev/null +++ b/resources/model/eai/IPSEAIDEObject.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAISchemeObject"]} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIDER.json b/resources/model/eai/IPSEAIDER.json new file mode 100644 index 0000000..4159e40 --- /dev/null +++ b/resources/model/eai/IPSEAIDER.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/eai/IPSEAIDEObject"],"codeName":{"desc":"代码标识","type":"string"},"dERTag":{"desc":"实体关系映射标记","type":"string"},"dERTag2":{"desc":"实体关系映射标记2","type":"string"},"psDER":{"desc":"实体关系","type":"object","schema":"/dataentity/der/IPSDERBase"}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIDataType.json b/resources/model/eai/IPSEAIDataType.json new file mode 100644 index 0000000..ac4fe8a --- /dev/null +++ b/resources/model/eai/IPSEAIDataType.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSSysEAISchemeObject"],"codeName":{"desc":"代码标识","type":"string"},"dataTypeTag":{"desc":"数据类型标记","type":"string"},"dataTypeTag2":{"desc":"数据类型标记2","type":"string"},"maxStringLength":{"desc":"最大字符串长度","type":"number"},"maxValueString":{"desc":"最大值(字符串)","type":"string"},"minStringLength":{"desc":"最小字符串长度","type":"number"},"minValueString":{"desc":"最小值(字符串)","type":"string"},"pattern":{"desc":"内容模式","type":"string"},"precision":{"desc":"数据精度","type":"number"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"enableEnum":{"desc":"支持枚举值","type":"boolean"},"includeMaxValue":{"desc":"包含最大值","type":"boolean"},"includeMinValue":{"desc":"包含最小值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIDataTypeItem.json b/resources/model/eai/IPSEAIDataTypeItem.json new file mode 100644 index 0000000..4216d09 --- /dev/null +++ b/resources/model/eai/IPSEAIDataTypeItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"data":{"desc":"数据","type":"string"},"itemTag":{"desc":"项标记","type":"string"},"itemTag2":{"desc":"项标记2","type":"string"},"value":{"desc":"值","type":"string"}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIDataTypeObject.json b/resources/model/eai/IPSEAIDataTypeObject.json new file mode 100644 index 0000000..b42917f --- /dev/null +++ b/resources/model/eai/IPSEAIDataTypeObject.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAISchemeObject"]} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIElement.json b/resources/model/eai/IPSEAIElement.json new file mode 100644 index 0000000..7bfe683 --- /dev/null +++ b/resources/model/eai/IPSEAIElement.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSSysEAISchemeObject"],"codeName":{"desc":"代码标识","type":"string"},"elementTag":{"desc":"元素标记","type":"string"},"elementTag2":{"desc":"元素标记2","type":"string"},"elementType":{"desc":"集成元素类型","type":"string","enum":{"COMPLEX":"复合元素","ELEMENTGROUP":"元素组","ATTRIBUTEGROUP":"属性组"}},"orderMode":{"desc":"引用元素排序模式","type":"string","enum":{"ALL":"全部(随机次序,只能出现一次)","CHOICE":"选择一项","SEQUENCE":"按次序"}}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIElementAttr.json b/resources/model/eai/IPSEAIElementAttr.json new file mode 100644 index 0000000..b22ff66 --- /dev/null +++ b/resources/model/eai/IPSEAIElementAttr.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIElementObject"],"attrTag":{"desc":"属性标记","type":"string"},"attrTag2":{"desc":"属性标记2","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"defaultValue":{"desc":"默认值","type":"string"},"elementAttrType":{"desc":"元素属性类型","type":"string","enum":{"SIMPLE":"简单属性","GROUP":"属性组"}},"fixedValue":{"desc":"固定值","type":"string"},"allowEmpty":{"desc":"允许空输入","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIElementObject.json b/resources/model/eai/IPSEAIElementObject.json new file mode 100644 index 0000000..b42917f --- /dev/null +++ b/resources/model/eai/IPSEAIElementObject.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAISchemeObject"]} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIElementRE.json b/resources/model/eai/IPSEAIElementRE.json new file mode 100644 index 0000000..a5b14ca --- /dev/null +++ b/resources/model/eai/IPSEAIElementRE.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIElementObject"],"codeName":{"desc":"代码标识","type":"string"},"defaultValue":{"desc":"默认值","type":"string"},"elementREType":{"desc":"元素属性类型","type":"string","enum":{"SIMPLE":"简单元素","COMPLEX":"复合元素","GROUP":"元素组"}},"fixedValue":{"desc":"固定值","type":"string"},"maxOccurs":{"desc":"最大出现次数","type":"number"},"minOccurs":{"desc":"最小出现次数","type":"number"},"rETag":{"desc":"属性标记","type":"string"},"rETag2":{"desc":"属性标记2","type":"string"},"allowEmpty":{"desc":"允许空输入","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAIScheme.json b/resources/model/eai/IPSEAIScheme.json new file mode 100644 index 0000000..7273dbd --- /dev/null +++ b/resources/model/eai/IPSEAIScheme.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"schemeTag":{"desc":"体系标记","type":"string"},"schemeTag2":{"desc":"体系标记2","type":"string"}} \ No newline at end of file diff --git a/resources/model/eai/IPSEAISchemeObject.json b/resources/model/eai/IPSEAISchemeObject.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/eai/IPSEAISchemeObject.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIDE.json b/resources/model/eai/IPSSysEAIDE.json new file mode 100644 index 0000000..280e6ac --- /dev/null +++ b/resources/model/eai/IPSSysEAIDE.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIDE","/eai/IPSSysEAISchemeObject"],"allPSSysEAIDEFields":{"desc":"集成实体属性映射集合","type":"array","schema":"/eai/IPSSysEAIDEField"},"allPSSysEAIDERs":{"desc":"集成实体关系映射集合","type":"array","schema":"/eai/IPSSysEAIDER"},"psSysEAIElement":{"desc":"映射集成元素","type":"object","schema":"/eai/IPSSysEAIElement"}} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIDEField.json b/resources/model/eai/IPSSysEAIDEField.json new file mode 100644 index 0000000..db75ef1 --- /dev/null +++ b/resources/model/eai/IPSSysEAIDEField.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIDEField","/eai/IPSSysEAIDEObject"],"psSysEAIElementAttr":{"desc":"集成元素属性","type":"object","schema":"/eai/IPSSysEAIElementAttr"},"psSysEAIElementRE":{"desc":"集成元素引用属性","type":"object","schema":"/eai/IPSSysEAIElementRE"}} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIDEObject.json b/resources/model/eai/IPSSysEAIDEObject.json new file mode 100644 index 0000000..465429a --- /dev/null +++ b/resources/model/eai/IPSSysEAIDEObject.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIDEObject"]} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIDER.json b/resources/model/eai/IPSSysEAIDER.json new file mode 100644 index 0000000..1be2e8b --- /dev/null +++ b/resources/model/eai/IPSSysEAIDER.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIDER","/eai/IPSSysEAIDEObject"],"psSysEAIElementRE":{"desc":"集成元素引用属性","type":"object","schema":"/eai/IPSSysEAIElementRE"}} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIDataType.json b/resources/model/eai/IPSSysEAIDataType.json new file mode 100644 index 0000000..38ce5e0 --- /dev/null +++ b/resources/model/eai/IPSSysEAIDataType.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSSysEAISchemeObject","/eai/IPSEAIDataType"],"allPSSysEAIDataTypeItems":{"desc":"集成数据类型项集合","type":"array","schema":"/eai/IPSSysEAIDataTypeItem"}} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIDataTypeItem.json b/resources/model/eai/IPSSysEAIDataTypeItem.json new file mode 100644 index 0000000..631a729 --- /dev/null +++ b/resources/model/eai/IPSSysEAIDataTypeItem.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIDataTypeItem"]} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIDataTypeObject.json b/resources/model/eai/IPSSysEAIDataTypeObject.json new file mode 100644 index 0000000..e6675a2 --- /dev/null +++ b/resources/model/eai/IPSSysEAIDataTypeObject.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIDataTypeObject","/eai/IPSSysEAISchemeObject"]} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIElement.json b/resources/model/eai/IPSSysEAIElement.json new file mode 100644 index 0000000..e9b29b2 --- /dev/null +++ b/resources/model/eai/IPSSysEAIElement.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSSysEAISchemeObject","/eai/IPSEAIElement"],"allPSSysEAIElementAttrs":{"desc":"集成元素属性集合","type":"array","schema":"/eai/IPSSysEAIElementAttr"},"allPSSysEAIElementREs":{"desc":"集成元素引用元素集合","type":"array","schema":"/eai/IPSSysEAIElementRE"}} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIElementAttr.json b/resources/model/eai/IPSSysEAIElementAttr.json new file mode 100644 index 0000000..8830237 --- /dev/null +++ b/resources/model/eai/IPSSysEAIElementAttr.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIElementAttr"],"psSysEAIDataType":{"desc":"集成数据类型","type":"object","schema":"/eai/IPSSysEAIDataType"},"refPSSysEAIElement":{"desc":"引用属性组","type":"object","schema":"/eai/IPSSysEAIElement"}} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIElementObject.json b/resources/model/eai/IPSSysEAIElementObject.json new file mode 100644 index 0000000..fecd799 --- /dev/null +++ b/resources/model/eai/IPSSysEAIElementObject.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIElementObject","/eai/IPSSysEAISchemeObject"]} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIElementRE.json b/resources/model/eai/IPSSysEAIElementRE.json new file mode 100644 index 0000000..595aeaa --- /dev/null +++ b/resources/model/eai/IPSSysEAIElementRE.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIElementRE"],"psSysEAIDataType":{"desc":"集成数据类型","type":"object","schema":"/eai/IPSSysEAIDataType"},"refPSSysEAIElement":{"desc":"引用属性组","type":"object","schema":"/eai/IPSSysEAIElement"}} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAIScheme.json b/resources/model/eai/IPSSysEAIScheme.json new file mode 100644 index 0000000..aa67520 --- /dev/null +++ b/resources/model/eai/IPSSysEAIScheme.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAIScheme"],"allPSSysEAIDEs":{"desc":"集成实体映射集合","type":"array","schema":"/eai/IPSSysEAIDE"},"allPSSysEAIDataTypes":{"desc":"集成数据类型集合","type":"array","schema":"/eai/IPSSysEAIDataType"},"allPSSysEAIElements":{"desc":"集成元素集合","type":"array","schema":"/eai/IPSSysEAIElement"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"}} \ No newline at end of file diff --git a/resources/model/eai/IPSSysEAISchemeObject.json b/resources/model/eai/IPSSysEAISchemeObject.json new file mode 100644 index 0000000..b42917f --- /dev/null +++ b/resources/model/eai/IPSSysEAISchemeObject.json @@ -0,0 +1 @@ +{"extends":["/eai/IPSEAISchemeObject"]} \ No newline at end of file diff --git a/resources/model/global.json b/resources/model/global.json index 4201c31..8b5584b 100644 --- a/resources/model/global.json +++ b/resources/model/global.json @@ -1,4 +1,11 @@ { - "system": "./system.json", - "apps": "./apps.json" + "system": { "schema": "/system" }, + "apps": { "schema": "/apps" }, + "app": { "schema": "/app" }, + "pages": { "schema": "/pages" }, + "page": { "schema": "/page" }, + "appEntities": { "schema": "/appEntities" }, + "appEntity": { "schema": "/appEntity" }, + "ctrls": { "schema": "/ctrls" }, + "ctrl": { "schema": "/ctrl" } } diff --git a/resources/model/msg/IPSSysMsgQueue.json b/resources/model/msg/IPSSysMsgQueue.json new file mode 100644 index 0000000..44cdf4e --- /dev/null +++ b/resources/model/msg/IPSSysMsgQueue.json @@ -0,0 +1 @@ +{"contentPSDEField":{"desc":"消息内容值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"dDContentPSDEField":{"desc":"钉钉消息内容值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"iMContentPSDEField":{"desc":"即时消息内容值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"mobTaskUrlPSDEField":{"desc":"移动端任务操作路径值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"msgQueueTag":{"desc":"消息队列标记","type":"string"},"msgQueueTag2":{"desc":"消息队列标记2","type":"string"},"msgQueueType":{"desc":"消息队列类型","type":"string","enum":{"RUNTIME":"Runtime","DE":"实体数据集","USER":"用户自定义","USER2":"用户自定义2"}},"msgTypePSDEField":{"desc":"消息类型值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"sMSContentPSDEField":{"desc":"短消息内容值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"sendTimePSDEField":{"desc":"消息发送时间值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"statePSDEField":{"desc":"消息状态值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"tag2PSDEField":{"desc":"消息标记2值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"tagPSDEField":{"desc":"消息标记值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"targetPSDEField":{"desc":"目标标识值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"targetTypePSDEField":{"desc":"目标类型值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"taskUrlPSDEField":{"desc":"任务操作路径值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"titlePSDEField":{"desc":"消息标题值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"wXContentPSDEField":{"desc":"微信消息内容值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/msg/IPSSysMsgTarget.json b/resources/model/msg/IPSSysMsgTarget.json new file mode 100644 index 0000000..5d61bdf --- /dev/null +++ b/resources/model/msg/IPSSysMsgTarget.json @@ -0,0 +1 @@ +{"msgTargetTag":{"desc":"消息目标标记","type":"string"},"msgTargetTag2":{"desc":"消息目标标记2","type":"string"},"msgTargetType":{"desc":"消息目标类型","type":"string","enum":{"RUNTIME":"Runtime","DE":"实体数据集","USER":"用户自定义","USER2":"用户自定义2"}},"psDEDataSet":{"desc":"目标数据集","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"targetPSDEField":{"desc":"目标标识值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"targetTypePSDEField":{"desc":"目标类型值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/msg/IPSSysMsgTempl.json b/resources/model/msg/IPSSysMsgTempl.json new file mode 100644 index 0000000..ae80d5c --- /dev/null +++ b/resources/model/msg/IPSSysMsgTempl.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"content":{"desc":"内容","type":"string"},"contentPSLanguageRes":{"desc":"内容多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"contentType":{"desc":"内容类型","type":"string","enum":{"TEXT":"纯文本","HTML":"HTML网页"}},"dDContent":{"desc":"钉钉内容","type":"string"},"dDPSLanguageRes":{"desc":"钉钉内容多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"iMContent":{"desc":"即时消息内容","type":"string"},"iMPSLanguageRes":{"desc":"即时消息多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"mobTaskUrl":{"desc":"移动端任务操作路径","type":"string"},"psSystemModule":{"desc":"系统模块","type":"object","schema":"/system/IPSSystemModule"},"sMSContent":{"desc":"短消息内容","type":"string"},"sMSPSLanguageRes":{"desc":"短消息多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"subPSLanguageRes":{"desc":"标题多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"subject":{"desc":"标题","type":"string"},"taskUrl":{"desc":"任务操作路径","type":"string"},"wXContent":{"desc":"微信内容","type":"string"},"wXPSLanguageRes":{"desc":"微信内容多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"mailGroupSend":{"desc":"邮件群组发送","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/page.json b/resources/model/page.json index c4fb6c2..7cdc8d4 100644 --- a/resources/model/page.json +++ b/resources/model/page.json @@ -1,5 +1,4 @@ { - "name": "视图", - "codeName": "view", - "pageName": "" + "extends": ["/app/view/IPSAppView"], + "ctrls": { "desc": "视图部件", "type": "object", "schema": "/ctrls" } } diff --git a/resources/model/pages.json b/resources/model/pages.json index 2c05155..a2bbe26 100644 --- a/resources/model/pages.json +++ b/resources/model/pages.json @@ -1,3 +1,3 @@ { - "extends": "./page.json" + "extends": ["/page"] } diff --git a/resources/model/pub/IPSSysSFPub.json b/resources/model/pub/IPSSysSFPub.json new file mode 100644 index 0000000..0361fe8 --- /dev/null +++ b/resources/model/pub/IPSSysSFPub.json @@ -0,0 +1 @@ +{"baseClassPKGCodeName":{"desc":"基类代码包名","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"contentType":{"desc":"发布内容模式","type":"string","enum":{"CODE":"运行代码","DOC":"文档"}},"defaultFlag":{"desc":"默认发布","type":"boolean"},"pKGCodeName":{"desc":"代码包名","type":"string"},"psSysSFPubPkgs":{"desc":"后台发布组件包集合","type":"array","schema":"/pub/IPSSysSFPubPkg"},"versionString":{"desc":"组件版本","type":"string"},"codeMode":{"desc":"发布代码模式","type":"boolean"},"docMode":{"desc":"发布文档模式","type":"boolean"},"enableGlobalTransaction":{"desc":"启用全局事务","type":"boolean"},"mainPSSysSFPub":{"desc":"主后台体系","type":"boolean"},"subSysPackage":{"desc":"输出子系统组件包","type":"boolean"},"testCodeMode":{"desc":"发布测试代码模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/pub/IPSSysSFPubPkg.json b/resources/model/pub/IPSSysSFPubPkg.json new file mode 100644 index 0000000..fdccbc1 --- /dev/null +++ b/resources/model/pub/IPSSysSFPubPkg.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"orderValue":{"desc":"排序值","type":"number"},"pkgParam":{"desc":"包参数","type":"string"},"pkgParam2":{"desc":"包参数2","type":"string"},"pkgParam3":{"desc":"包参数3","type":"string"},"pkgParam4":{"desc":"包参数4","type":"string"},"verParam":{"desc":"版本参数","type":"string"},"verTag":{"desc":"版本标记","type":"string"},"verTag2":{"desc":"版本标记2","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSCtrlMsg.json b/resources/model/res/IPSCtrlMsg.json new file mode 100644 index 0000000..2e5d7d0 --- /dev/null +++ b/resources/model/res/IPSCtrlMsg.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"msgModel":{"desc":"消息配置","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSDEFInputTipSet.json b/resources/model/res/IPSDEFInputTipSet.json new file mode 100644 index 0000000..d6fd6a2 --- /dev/null +++ b/resources/model/res/IPSDEFInputTipSet.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSLanguageItem.json b/resources/model/res/IPSLanguageItem.json new file mode 100644 index 0000000..ec1e9f7 --- /dev/null +++ b/resources/model/res/IPSLanguageItem.json @@ -0,0 +1 @@ +{"content":{"desc":"内容","type":"string"},"lanResTag":{"desc":"语言资源标记","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSLanguageRes.json b/resources/model/res/IPSLanguageRes.json new file mode 100644 index 0000000..6221cf8 --- /dev/null +++ b/resources/model/res/IPSLanguageRes.json @@ -0,0 +1 @@ +{"lanResTag":{"desc":"语言资源标记","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSPortletType.json b/resources/model/res/IPSPortletType.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/res/IPSPortletType.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/resources/model/res/IPSSubViewType.json b/resources/model/res/IPSSubViewType.json new file mode 100644 index 0000000..1bc213c --- /dev/null +++ b/resources/model/res/IPSSubViewType.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"nameMode":{"desc":"视图命名模式","type":"string","enum":{"APPEND":"名称附加","REPLACE":"名称替换"}},"typeCode":{"desc":"类型代码","type":"string"},"viewModel":{"desc":"视图模型","type":"object"},"extendStyleOnly":{"desc":"仅扩展界面样式","type":"boolean"},"replaceDefault":{"desc":"全局默认替换","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysChartTheme.json b/resources/model/res/IPSSysChartTheme.json new file mode 100644 index 0000000..6bedc43 --- /dev/null +++ b/resources/model/res/IPSSysChartTheme.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"themeDesc":{"desc":"主题说明","type":"string"},"themeParams":{"desc":"主题参数","type":"string"},"themeTag":{"desc":"主题标记","type":"string"},"themeTag2":{"desc":"主题标记2","type":"string"},"defaultMode":{"desc":"默认主题","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysContent.json b/resources/model/res/IPSSysContent.json new file mode 100644 index 0000000..6cab8bc --- /dev/null +++ b/resources/model/res/IPSSysContent.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"contenTag2":{"desc":"内容标记2","type":"string"},"content":{"desc":"内容","type":"string"},"contentTag":{"desc":"内容标记","type":"string"},"contentTag3":{"desc":"内容标记3","type":"string"},"contentTag4":{"desc":"内容标记4","type":"string"},"contentType":{"desc":"内容类型","type":"string","enum":{"RAW":"直接内容","HTML":"Html内容"}}} \ No newline at end of file diff --git a/resources/model/res/IPSSysContentCat.json b/resources/model/res/IPSSysContentCat.json new file mode 100644 index 0000000..c0e8326 --- /dev/null +++ b/resources/model/res/IPSSysContentCat.json @@ -0,0 +1 @@ +{"catTag":{"desc":"分类标记","type":"string"},"catTag2":{"desc":"分类标记2","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"psSysContents":{"desc":"内容集合","type":"array","schema":"/res/IPSSysContent"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysCss.json b/resources/model/res/IPSSysCss.json new file mode 100644 index 0000000..172d475 --- /dev/null +++ b/resources/model/res/IPSSysCss.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"cssName":{"desc":"样式名称","type":"string"},"cssStyle":{"desc":"直接样式内容","type":"string"},"designCssStyle":{"desc":"配置样式内容","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysCustomPortlet.json b/resources/model/res/IPSSysCustomPortlet.json new file mode 100644 index 0000000..bcec42b --- /dev/null +++ b/resources/model/res/IPSSysCustomPortlet.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortlet"]} \ No newline at end of file diff --git a/resources/model/res/IPSSysDEChartPortlet.json b/resources/model/res/IPSSysDEChartPortlet.json new file mode 100644 index 0000000..bcec42b --- /dev/null +++ b/resources/model/res/IPSSysDEChartPortlet.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortlet"]} \ No newline at end of file diff --git a/resources/model/res/IPSSysDEEditFormPortlet.json b/resources/model/res/IPSSysDEEditFormPortlet.json new file mode 100644 index 0000000..bcec42b --- /dev/null +++ b/resources/model/res/IPSSysDEEditFormPortlet.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortlet"]} \ No newline at end of file diff --git a/resources/model/res/IPSSysDEFInputTip.json b/resources/model/res/IPSSysDEFInputTip.json new file mode 100644 index 0000000..ec97b42 --- /dev/null +++ b/resources/model/res/IPSSysDEFInputTip.json @@ -0,0 +1 @@ +{"extends":["/dataentity/defield/IPSDEFInputTip"]} \ No newline at end of file diff --git a/resources/model/res/IPSSysDEListPortlet.json b/resources/model/res/IPSSysDEListPortlet.json new file mode 100644 index 0000000..bcec42b --- /dev/null +++ b/resources/model/res/IPSSysDEListPortlet.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortlet"]} \ No newline at end of file diff --git a/resources/model/res/IPSSysDESearchFormPortlet.json b/resources/model/res/IPSSysDESearchFormPortlet.json new file mode 100644 index 0000000..bcec42b --- /dev/null +++ b/resources/model/res/IPSSysDESearchFormPortlet.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortlet"]} \ No newline at end of file diff --git a/resources/model/res/IPSSysDEToolbarPortlet.json b/resources/model/res/IPSSysDEToolbarPortlet.json new file mode 100644 index 0000000..bcec42b --- /dev/null +++ b/resources/model/res/IPSSysDEToolbarPortlet.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortlet"]} \ No newline at end of file diff --git a/resources/model/res/IPSSysDEViewPortlet.json b/resources/model/res/IPSSysDEViewPortlet.json new file mode 100644 index 0000000..bcec42b --- /dev/null +++ b/resources/model/res/IPSSysDEViewPortlet.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortlet"]} \ No newline at end of file diff --git a/resources/model/res/IPSSysDataSyncAgent.json b/resources/model/res/IPSSysDataSyncAgent.json new file mode 100644 index 0000000..ae2ab91 --- /dev/null +++ b/resources/model/res/IPSSysDataSyncAgent.json @@ -0,0 +1 @@ +{"agentTag":{"desc":"代理标记","type":"string"},"agentTag2":{"desc":"代理标记2","type":"string"},"agentType":{"desc":"代理类型","type":"string","enum":{"ACTIVEMQ":"ActiveMQ","USER":"用户自定义","USER2":"用户自定义2"}},"codeName":{"desc":"代码标识","type":"string"},"syncDir":{"desc":"同步方向","type":"string","enum":{"IN":"输入","OUT":"输出"}}} \ No newline at end of file diff --git a/resources/model/res/IPSSysDictCat.json b/resources/model/res/IPSSysDictCat.json new file mode 100644 index 0000000..13a5ef2 --- /dev/null +++ b/resources/model/res/IPSSysDictCat.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"dictCatTag":{"desc":"词条分类标记","type":"string"},"dictCatTag2":{"desc":"词条分类标记2","type":"string"},"userDictCat":{"desc":"用户词典","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysEditorStyle.json b/resources/model/res/IPSSysEditorStyle.json new file mode 100644 index 0000000..2b695a0 --- /dev/null +++ b/resources/model/res/IPSSysEditorStyle.json @@ -0,0 +1 @@ +{"ajaxHandlerType":{"desc":"界面处理模式","type":"string","enum":{"None":"无处理","CodeList":"代码表","PickupText":"外键文本","AC":"自动填充","Custom":"自定义"}},"codeName":{"desc":"代码标识","type":"string"},"containerType":{"desc":"容器类型","type":"string","enum":{"FORMITEM":"表单项编辑器","GRIDCOLUMN":"表格单元格编辑器","PANELFIELD":"面板属性编辑器"}},"editorHeight":{"desc":"编辑器高度","type":"number"},"editorType":{"desc":"编辑器类型","type":"string"},"editorWidth":{"desc":"编辑器宽度","type":"number"},"linkViewShowMode":{"desc":"链接视图显示模式","type":"string","enum":{"NORMAL":"常规","MODAL":"模态","EMBEDDED":"嵌入"}},"psSysCss":{"desc":"界面样式表","type":"object","schema":"/res/IPSSysCss"},"psSysPFPlugin":{"desc":"前端应用插件","type":"object","schema":"/res/IPSSysPFPlugin"},"refViewShowMode":{"desc":"引用视图显示模式","type":"string","enum":{"NORMAL":"常规","MODAL":"模态","EMBEDDED":"嵌入"}},"styleCode":{"desc":"样式代码","type":"string"},"extendStyleOnly":{"desc":"仅扩展界面样式","type":"boolean"},"replaceDefault":{"desc":"替换默认样式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysHtmlPortlet.json b/resources/model/res/IPSSysHtmlPortlet.json new file mode 100644 index 0000000..bb5ae06 --- /dev/null +++ b/resources/model/res/IPSSysHtmlPortlet.json @@ -0,0 +1 @@ +{"extends":["/res/IPSSysPortlet"],"htmlShowMode":{"desc":"内容显示模式","type":"string","enum":{"INNER":"嵌入","IFRAME":"IFrame"}},"pageUrl":{"desc":"页面路径","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysImage.json b/resources/model/res/IPSSysImage.json new file mode 100644 index 0000000..e18f6ff --- /dev/null +++ b/resources/model/res/IPSSysImage.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"cssClass":{"desc":"图片样式","type":"string"},"cssClassX":{"desc":"图片样式(X)","type":"string"},"glyph":{"desc":"字体标识","type":"string"},"height":{"desc":"图片宽度","type":"number"},"imagePath":{"desc":"图片路径","type":"string"},"imagePathX":{"desc":"图片路径(X)","type":"string"},"rawContent":{"desc":"直接内容","type":"string"},"width":{"desc":"图片宽度","type":"number"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysLan.json b/resources/model/res/IPSSysLan.json new file mode 100644 index 0000000..3ebefa1 --- /dev/null +++ b/resources/model/res/IPSSysLan.json @@ -0,0 +1 @@ +{"language":{"desc":"语言","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysLogic.json b/resources/model/res/IPSSysLogic.json new file mode 100644 index 0000000..3b7789e --- /dev/null +++ b/resources/model/res/IPSSysLogic.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"customObject":{"desc":"自定义处理对象","type":"string"},"psSysSFPlugin":{"desc":"后端模板插件对象","type":"object","schema":"/res/IPSSysSFPlugin"},"psSystemModule":{"desc":"系统模块","type":"object","schema":"/system/IPSSystemModule"},"scriptCode":{"desc":"脚本代码","type":"string"},"customCode":{"desc":"自定义脚本代码","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysPDTView.json b/resources/model/res/IPSSysPDTView.json new file mode 100644 index 0000000..dbe3de9 --- /dev/null +++ b/resources/model/res/IPSSysPDTView.json @@ -0,0 +1 @@ +{"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"fromDEViewToPDTView":{"desc":"从实体视图定向预置视图","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysPFPlugin.json b/resources/model/res/IPSSysPFPlugin.json new file mode 100644 index 0000000..1d8cf89 --- /dev/null +++ b/resources/model/res/IPSSysPFPlugin.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"pluginCode":{"desc":"插件代码","type":"string"},"pluginModel":{"desc":"插件模型","type":"object"},"pluginTag":{"desc":"插件标记","type":"string"},"pluginType":{"desc":"应用插件类型","type":"string","enum":{"AC_ITEM":"自填列表项绘制插件","CHART_RENDER":"图表绘制插件","CHART_AXISRENDER":"图表坐标轴绘制插件","CHART_SERIESRENDER":"图表序列绘制插件","CHART_CSRENDER":"图表坐标系组件绘制插件","CUSTOM":"自定义部件绘制插件","DATAVIEW_ITEM":"数据视图项绘制插件","DATAVIEW_RENDER":"数据视图绘制插件","EDITFORM_RENDER":"编辑表单绘制插件","EDITOR_CUSTOMSTYLE":"编辑器自定义绘制插件","FORM_USERCONTROL":"表单自定义控件绘制插件","GRID_COLRENDER":"数据表格列绘制插件","GRID_RENDER":"数据表格绘制插件","LIST_ITEMRENDER":"列表项绘制插件","LIST_RENDER":"列表绘制插件","PORTLET_CUSTOM":"自定义门户部件绘制插件","PORTLET_TITLEBAR":"门户部件标题栏绘制插件","SEARCHFORM_RENDER":"搜索表单绘制插件","TOOLBAR_ITEM":"工具栏项绘制插件","TOOLBAR_RENDER":"工具栏绘制插件","TREEEXPBAR_RENDER":"树导航栏绘制插件","TREE_RENDER":"树视图绘制插件","UIENGINE":"界面引擎","UILOGICNODE":"界面逻辑节点","VIEW_CUSTOM":"实体视图绘制插件","DEMETHOD":"应用实体方法插件","APPUTIL":"应用功能插件","APPCOUNTER":"应用计数器插件","DEDATAIMPORT":"应用实体数据导入","DEDATAEXPORT":"应用实体数据导出","DEFVALUERULE":"应用实体属性值规则","APPVALUERULE":"应用值规则","SEARCHBAR_ITEM":"搜索栏项绘制插件","SEARCHBAR_RENDER":"搜索栏绘制插件","WIZARDPANEL_RENDER":"向导面板绘制插件","DEUIACTION":"应用实体界面行为","CALENDAR_ITEM":"日历部件项绘制插件","CALENDAR_RENDER":"日历部件绘制插件","MAPVIEW_ITEM":"地图部件项绘制插件","MAPVIEW_RENDER":"地图部件绘制插件","PANEL_ITEM":"面板部件成员绘制插件","PANEL_RENDER":"面板部件绘制插件","DASHBOARD_ITEM":"数据看板成员绘制插件","DASHBOARD_RENDER":"数据看板绘制插件","APPUILOGIC":"系统界面逻辑插件","APPMENU_ITEM":"应用菜单项绘制插件","APPMENU_RENDER":"应用菜单绘制插件","TITLEBAR_RENDER":"标题栏绘制插件"}},"extendStyleOnly":{"desc":"仅扩展界面样式","type":"boolean"},"replaceDefault":{"desc":"全局默认替换","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysPortlet.json b/resources/model/res/IPSSysPortlet.json new file mode 100644 index 0000000..0c6e7ba --- /dev/null +++ b/resources/model/res/IPSSysPortlet.json @@ -0,0 +1 @@ +{"actionGroupExtractMode":{"desc":"界面行为组展开模式","type":"string","enum":{"ITEM":"按项展开(默认)","ITEMS":"按分组展开"}},"codeName":{"desc":"代码标识","type":"string"},"emptyText":{"desc":"空白显示内容","type":"string"},"emptyTextPSLanguageRes":{"desc":"空白内容语言资源","type":"object","schema":"/res/IPSLanguageRes"},"height":{"desc":"高度","type":"number"},"psSysCss":{"desc":"系统界面样式","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"系统图片","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysUniRes":{"desc":"系统统一资源","type":"object","schema":"/security/IPSSysUniRes"},"portletStyle":{"desc":"预置样式","type":"string","enum":{"DEFAULT":"默认样式","STYLE2":"样式2","STYLE3":"样式3","STYLE4":"样式4"}},"portletType":{"desc":"部件类型","type":"string","enum":{"LIST":"实体列表","CHART":"实体图表","VIEW":"实体视图","HTML":"网页部件","TOOLBAR":"工具栏","ACTIONBAR":"操作栏","CUSTOM":"自定义"}},"reloadTimer":{"desc":"刷新间隔(毫秒)","type":"number"},"templEngine":{"desc":"模板引擎","type":"string"},"title":{"desc":"抬头","type":"string"},"titlePSLanguageRes":{"desc":"抬头语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"titlePSSysPFPlugin":{"desc":"抬头绘制应用插件","type":"object","schema":"/res/IPSSysPFPlugin"},"enableAppDashboard":{"desc":"支持应用全局数据看板","type":"boolean"},"enableDEDashboard":{"desc":"支持实体数据看板","type":"boolean"},"showTitleBar":{"desc":"显示抬头栏","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysPortletCat.json b/resources/model/res/IPSSysPortletCat.json new file mode 100644 index 0000000..9ec3c8e --- /dev/null +++ b/resources/model/res/IPSSysPortletCat.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psSysCss":{"desc":"系统界面样式","type":"object","schema":"/res/IPSSysCss"},"psSysImage":{"desc":"系统图片","type":"object","schema":"/res/IPSSysImage"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysResource.json b/resources/model/res/IPSSysResource.json new file mode 100644 index 0000000..524d3a9 --- /dev/null +++ b/resources/model/res/IPSSysResource.json @@ -0,0 +1 @@ +{"content":{"desc":"资源内容","type":"string"},"resTag":{"desc":"资源标记","type":"string"},"resourceType":{"desc":"资源类型","type":"string","enum":{"IMAGE":"图片","STRING":"字符串","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4","USER5":"用户自定义5","USER6":"用户自定义6","USER7":"用户自定义7","USER8":"用户自定义8","USER9":"用户自定义9"}}} \ No newline at end of file diff --git a/resources/model/res/IPSSysSFPlugin.json b/resources/model/res/IPSSysSFPlugin.json new file mode 100644 index 0000000..6b631eb --- /dev/null +++ b/resources/model/res/IPSSysSFPlugin.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"pluginCode":{"desc":"插件代码","type":"string"},"pluginModel":{"desc":"插件模型","type":"object"},"pluginType":{"desc":"插件类型","type":"string","enum":{"STRFUNC":"字符串操作","MATHFUNC":"数学函数","DOCFUNC":"文档操作","DEACTION":"实体行为","DEDATASET":"实体数据集","USER":"用户自定义"}},"rTObjectName":{"desc":"运行时对象名称","type":"string"},"rTObjectSource":{"desc":"运行时对象来源","type":"number"},"replaceDefault":{"desc":"全局默认替换","type":"boolean"},"runtimeObject":{"desc":"运行时对象","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysSampleValue.json b/resources/model/res/IPSSysSampleValue.json new file mode 100644 index 0000000..2fd64b1 --- /dev/null +++ b/resources/model/res/IPSSysSampleValue.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"randomValue":{"desc":"随机示例值","type":"string"},"value":{"desc":"示例值","type":"string"},"nullValue":{"desc":"空值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysSequence.json b/resources/model/res/IPSSysSequence.json new file mode 100644 index 0000000..1595304 --- /dev/null +++ b/resources/model/res/IPSSysSequence.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"getExtFormatParams":{"desc":"扩展格式化参数集合","type":"array","schema":"string"},"keyPSDEField":{"desc":"标识存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"maxValue":{"desc":"值序列最大值","type":"number"},"minValue":{"desc":"值序列最小值","type":"number"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysSFPlugin":{"desc":"后端模板插件对象","type":"object","schema":"/res/IPSSysSFPlugin"},"sequenceFormat":{"desc":"值序列格式化","type":"string"},"sequenceTag":{"desc":"值序列标记","type":"string"},"sequenceTag2":{"desc":"值序列标记2","type":"string"},"sequenceType":{"desc":"值序列类型","type":"string","enum":{"DB":"数据库","DE":"实体","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"timeFormat":{"desc":"时间格式化","type":"string"},"timePSDEField":{"desc":"时间存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"typePSDEField":{"desc":"类型存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"valuePSDEField":{"desc":"值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysTranslator.json b/resources/model/res/IPSSysTranslator.json new file mode 100644 index 0000000..a8f0110 --- /dev/null +++ b/resources/model/res/IPSSysTranslator.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"keyPSDEField":{"desc":"标识存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysSFPlugin":{"desc":"后端模板插件对象","type":"object","schema":"/res/IPSSysSFPlugin"},"translatorTag":{"desc":"值转换器标记","type":"string"},"translatorTag2":{"desc":"值转换器标记2","type":"string"},"translatorType":{"desc":"值转换器类型","type":"string","enum":{"DIGEST":"密码(不可逆)","ENCRYPT":"加密(可逆)","DESTORAGE":"实体扩展存储","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"valuePSDEField":{"desc":"值存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysUniState.json b/resources/model/res/IPSSysUniState.json new file mode 100644 index 0000000..3dd7465 --- /dev/null +++ b/resources/model/res/IPSSysUniState.json @@ -0,0 +1 @@ +{"uniStateType":{"desc":"状态协同类型","type":"string","enum":{"DE":"实体"}},"uniqueTag":{"desc":"唯一业务标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysUnit.json b/resources/model/res/IPSSysUnit.json new file mode 100644 index 0000000..44d3e8d --- /dev/null +++ b/resources/model/res/IPSSysUnit.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"unitTag":{"desc":"单位标记","type":"string"},"unitTag2":{"desc":"单位标记2","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysUtil.json b/resources/model/res/IPSSysUtil.json new file mode 100644 index 0000000..4de28a7 --- /dev/null +++ b/resources/model/res/IPSSysUtil.json @@ -0,0 +1 @@ +{"extends":["/dataentity/util/IPSDEUtil"],"codeName":{"desc":"代码标识","type":"string"},"utilPSDE10Name":{"desc":"功能实体10名称","type":"string"},"utilPSDE2Name":{"desc":"功能实体2名称","type":"string"},"utilPSDE3Name":{"desc":"功能实体3名称","type":"string"},"utilPSDE4Name":{"desc":"功能实体4名称","type":"string"},"utilPSDE5Name":{"desc":"功能实体5名称","type":"string"},"utilPSDE6Name":{"desc":"功能实体6名称","type":"string"},"utilPSDE7Name":{"desc":"功能实体7名称","type":"string"},"utilPSDE8Name":{"desc":"功能实体8名称","type":"string"},"utilPSDE9Name":{"desc":"功能实体9名称","type":"string"},"utilPSDEName":{"desc":"功能实体名称","type":"string"},"utilType":{"desc":"功能类型","type":"string","enum":{"DATAAUDIT":"数据审计","FILE":"附件存储","APPCUSTOMIZE":"应用自定义","SAASADMIN":"SaaS应用管理","SAASUSERAUTH":"SaaS用户授权(内置)","SAASUSERAUTHSERVICE":"SaaS用户授权服务(对外)","SAASORG":"SaaS组织功能(内置)","SAASORGSERVICE":"SaaS组织服务(对外)","SAASWF":"SaaS流程引擎功能(内置)","SAASWFSERVICE":"SaaS流程引擎服务(对外)","SAASCORESERVICE":"SaaS核心服务(对外)","USER":"用户自定义"}},"regToSys":{"desc":"注册到系统","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysViewLogic.json b/resources/model/res/IPSSysViewLogic.json new file mode 100644 index 0000000..aef0c76 --- /dev/null +++ b/resources/model/res/IPSSysViewLogic.json @@ -0,0 +1 @@ +{"extends":["/view/IPSViewLogic"],"codeName":{"desc":"代码标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/res/IPSSysViewLogicParam.json b/resources/model/res/IPSSysViewLogicParam.json new file mode 100644 index 0000000..a8ec26f --- /dev/null +++ b/resources/model/res/IPSSysViewLogicParam.json @@ -0,0 +1 @@ +{"extends":["/IPSObject","/view/IPSViewLogicParam"],"paramValue":{"desc":"参数值2","type":"string"},"paramValue2":{"desc":"参数值2","type":"string"}} \ No newline at end of file diff --git a/resources/model/security/IPSSysUniRes.json b/resources/model/security/IPSSysUniRes.json new file mode 100644 index 0000000..65a909a --- /dev/null +++ b/resources/model/security/IPSSysUniRes.json @@ -0,0 +1 @@ +{"resCode":{"desc":"资源标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/security/IPSSysUserDR.json b/resources/model/security/IPSSysUserDR.json new file mode 100644 index 0000000..5d5892a --- /dev/null +++ b/resources/model/security/IPSSysUserDR.json @@ -0,0 +1 @@ +{"customMode":{"desc":"自定义模式","type":"string"}} \ No newline at end of file diff --git a/resources/model/security/IPSSysUserMode.json b/resources/model/security/IPSSysUserMode.json new file mode 100644 index 0000000..697ed7e --- /dev/null +++ b/resources/model/security/IPSSysUserMode.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"userModeSN":{"desc":"用户模式编号","type":"string"},"userModeTag":{"desc":"用户模式标记","type":"string"}} \ No newline at end of file diff --git a/resources/model/security/IPSSysUserRole.json b/resources/model/security/IPSSysUserRole.json new file mode 100644 index 0000000..732eab4 --- /dev/null +++ b/resources/model/security/IPSSysUserRole.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"defaultUser":{"desc":"默认用户","type":"string","enum":{"NONE":"无","ACCESSUSER":"授权访问用户","ACCESSADMIN":"授权访问用户(管理员)","USER":"用户默认","ADMIN":"管理员默认"}},"psDEDataSet":{"desc":"实体数据集对象","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysUserRoleDatas":{"desc":"数据能力集合","type":"array","schema":"/security/IPSSysUserRoleData"},"psSysUserRoleReses":{"desc":"统一资源集合","type":"array","schema":"/security/IPSSysUserRoleRes"},"roleTag":{"desc":"角色标记","type":"string"},"roleType":{"desc":"角色类型","type":"string","enum":{"CUSTOM":"自定义","DEDATASET":"实体数据集合"}},"globalRole":{"desc":"全局角色","type":"boolean"},"systemReserved":{"desc":"系统保留","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/security/IPSSysUserRoleData.json b/resources/model/security/IPSSysUserRoleData.json new file mode 100644 index 0000000..aefa479 --- /dev/null +++ b/resources/model/security/IPSSysUserRoleData.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psDEUserRole":{"desc":"实体能力角色","type":"object","schema":"/dataentity/priv/IPSDEUserRole"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/security/IPSSysUserRoleRes.json b/resources/model/security/IPSSysUserRoleRes.json new file mode 100644 index 0000000..e322fd9 --- /dev/null +++ b/resources/model/security/IPSSysUserRoleRes.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psSysUniRes":{"desc":"系统统一资源","type":"object","schema":"/security/IPSSysUniRes"},"sysUniResCode":{"desc":"系统统一资源代码","type":"string"}} \ No newline at end of file diff --git a/resources/model/service/IPSServiceAPIDTO.json b/resources/model/service/IPSServiceAPIDTO.json new file mode 100644 index 0000000..aaeeb5a --- /dev/null +++ b/resources/model/service/IPSServiceAPIDTO.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"type":{"desc":"数据传输对象类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/service/IPSServiceAPIDTOField.json b/resources/model/service/IPSServiceAPIDTOField.json new file mode 100644 index 0000000..2aeebdf --- /dev/null +++ b/resources/model/service/IPSServiceAPIDTOField.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"type":{"desc":"外部服务接口DTO属性类型","type":"string","enum":{"SIMPLE":"简单值","SIMPLES":"简单值数组","DOMAIN":"域对象","DOMAINS":"域对象数组"}},"readOnly":{"desc":"只读属性","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPI.json b/resources/model/service/IPSSubSysServiceAPI.json new file mode 100644 index 0000000..6e0b352 --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPI.json @@ -0,0 +1 @@ +{"aPISource":{"desc":"接口来源","type":"string","enum":{"NONE":"无","SYSAPI":"当前系统服务接口","DEVSYSAPI":"外部开发系统服务接口","PREDEFINED":"预定义系统服务接口"}},"aPITag":{"desc":"接口标记","type":"string"},"aPITag2":{"desc":"接口标记2","type":"string"},"aPIType":{"desc":"接口类型","type":"string","enum":{"RESTFUL":"RESTful API","JAXRS":"RESTful WebService","WEBSERVICE":"WebService","USER":"用户自定义","USER2":"用户自定义2"}},"allPSSubSysServiceAPIDERSs":{"desc":"接口实体关系集合","type":"array","schema":"/service/IPSSubSysServiceAPIDERS"},"allPSSubSysServiceAPIDEs":{"desc":"接口实体集合","type":"array","schema":"/service/IPSSubSysServiceAPIDE"},"allPSSubSysServiceAPIDTOs":{"desc":"接口DTO集合","type":"array","schema":"/service/IPSSubSysServiceAPIDTO"},"authAccessTokenUrl":{"desc":"认证token路径","type":"string"},"authClientId":{"desc":"认证客户端标识","type":"string"},"authClientSecret":{"desc":"认证客户端密码","type":"string"},"authMode":{"desc":"认证模式","type":"string","enum":{"NONE":"无认证","AUTHORIZATION_CODE":"授权码模式","PASSWORD":"密码模式","CLIENT_CREDENTIALS":"客户端模式","IMPLICIT":"简化模式","USER":"用户自定义","USER2":"用户自定义2"}},"authParam":{"desc":"认证参数","type":"string"},"authParam2":{"desc":"认证参数2","type":"string"},"authParam3":{"desc":"认证参数3","type":"string"},"authParam4":{"desc":"认证参数4","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"handler":{"desc":"处理对象","type":"string"},"psOpenAPI3Schema":{"desc":"OpenAPI3 Schema","type":"object","schema":"/service/openapi/IPSOpenAPI3Schema"},"psSysSFPlugin":{"desc":"后端扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"predefinedType":{"desc":"预定义接口类型","type":"string","enum":{"SAASADMIN":"SaaS应用管理接口","WFSERVICE":"工作流引擎服务接口","WFCALLBACK":"工作流引擎回调接口","USERAUTH":"用户授权服务接口","ORGSERVICE":"组织管理服务接口","ORGCALLBACK":"组织服务回调接口","CORESERVICE":"SaaS核心服务接口","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"serviceCodeName":{"desc":"服务代码名称","type":"string"},"serviceParam":{"desc":"服务参数","type":"string"},"serviceParam2":{"desc":"服务参数2","type":"string"},"serviceParam3":{"desc":"服务参数3","type":"string"},"serviceParam4":{"desc":"服务参数4","type":"string"},"servicePath":{"desc":"服务路径","type":"string"},"serviceType":{"desc":"服务类型","type":"string"},"enableServiceAPIDTO":{"desc":"启用服务接口DTO","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIDE.json b/resources/model/service/IPSSubSysServiceAPIDE.json new file mode 100644 index 0000000..ec6c0f6 --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIDE.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"aPIMode":{"desc":"接口模式","type":"number","enum":{"1":"主接口","0":"从接口","9":"数据传输对象(DTO)嵌套成员"}},"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"dETag":{"desc":"实体标记","type":"string"},"dETag2":{"desc":"实体标记2","type":"string"},"logicName":{"desc":"逻辑名称","type":"string"},"psSubSysServiceAPIDEFields":{"desc":"接口属性集合","type":"array","schema":"/service/IPSSubSysServiceAPIDEField"},"psSubSysServiceAPIDEMethods":{"desc":"外部接口实体方法集合","type":"array","schema":"/service/IPSSubSysServiceAPIDEMethod"},"psSysSFPlugin":{"desc":"后端扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"major":{"desc":"主接口","type":"boolean"},"nested":{"desc":"嵌套成员","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIDEField.json b/resources/model/service/IPSSubSysServiceAPIDEField.json new file mode 100644 index 0000000..bbe8d27 --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIDEField.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"dataType":{"desc":"数据类型","type":"string","enum":{"ACID":"自增标识,整数类型,用户不可见","BIGINT":"大整型","CODELISTTEXT":"选择项文本","CURRENCY":"货币","CURRENCYUNIT":"货币单位","DATE":"日期型","DATETIME":"日期时间型","DATETIME_BIRTHDAY":"出生日期","DECIMAL":"数值","BIGDECIMAL":"大数值","FLOAT":"浮点","GUID":"全局唯一标识,文本类型,用户不可见","HTMLTEXT":"HTML文本,没有长度限制","INHERIT":"继承属性","INT":"整型","LONGTEXT":"长文本,没有长度限制","LONGTEXT_1000":"长文本,长度1000","NBID":"数字串业务标识,数字类型,用户可见","NMCODELIST":"多项选择(数值)","NSCODELIST":"单项选择(数值)","PICKUP":"外键值","PICKUPDATA":"外键值附加数据","PICKUPTEXT":"外键值文本","SBID":"字符串业务标识,文本类型,用户可见","SMCODELIST":"多项选择(文本值)","SSCODELIST":"单项选择(文本值)","TEXT":"文本,可指定长度","TEXT_EMAIL":"电子邮件","TIME":"时间型","TRUEFALSE":"真假逻辑","VARBINARY":"二进制流,没有长度限制","WFSTATE":"工作流处理状态","YESNO":"是否逻辑","ONE2MANYDATA":"一对多关系数据集合","PICKUPOBJECT":"外键值对象","ONE2ONEDATA":"一对一关系数据对象","FILE":"文件","FILELIST":"文件列表","LONGFILELIST":"文件列表,没有数量限制","PICTURE":"图片","PICTURELIST":"图片列表","LONGPICTURELIST":"图片列表,没有数量限制"}},"fieldTag":{"desc":"属性标记","type":"string"},"fieldTag2":{"desc":"属性标记2","type":"string"},"length":{"desc":"属性长度","type":"number"},"logicName":{"desc":"逻辑名称","type":"string"},"orderValue":{"desc":"排序值","type":"number"},"precision":{"desc":"属性精度","type":"number"},"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"allowEmpty":{"desc":"允许空输入","type":"boolean"},"keyDEField":{"desc":"主键属性","type":"boolean"},"majorDEField":{"desc":"主信息属性","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIDEMethod.json b/resources/model/service/IPSSubSysServiceAPIDEMethod.json new file mode 100644 index 0000000..5d5bba0 --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIDEMethod.json @@ -0,0 +1 @@ +{"extends":["/service/IPSSubSysServiceAPIMethod"],"inPSSubSysServiceAPIDE":{"desc":"输入对象","type":"object","schema":"/service/IPSSubSysServiceAPIDE"},"outPSSubSysServiceAPIDE":{"desc":"输出对象","type":"object","schema":"/service/IPSSubSysServiceAPIDE"},"psSubSysServiceAPIDE":{"desc":"外部接口实体对象","type":"object","schema":"/service/IPSSubSysServiceAPIDE"},"psSubSysServiceAPIMethodInput":{"desc":"方法输入对象","type":"object","schema":"/service/IPSSubSysServiceAPIMethodInput"},"psSubSysServiceAPIMethodReturn":{"desc":"方法返回对象","type":"object","schema":"/service/IPSSubSysServiceAPIMethodReturn"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIDERS.json b/resources/model/service/IPSSubSysServiceAPIDERS.json new file mode 100644 index 0000000..6630095 --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIDERS.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"majorPSSubSysServiceAPIDE":{"desc":"主接口实体","type":"object","schema":"/service/IPSSubSysServiceAPIDE"},"minorPSSubSysServiceAPIDE":{"desc":"从接口实体","type":"object","schema":"/service/IPSSubSysServiceAPIDE"},"parentFilter":{"desc":"关系项","type":"string"},"rSTag":{"desc":"关系标记","type":"string"},"rSTag2":{"desc":"关系标记","type":"string"},"array":{"desc":"数组模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIDTO.json b/resources/model/service/IPSSubSysServiceAPIDTO.json new file mode 100644 index 0000000..0ee817b --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIDTO.json @@ -0,0 +1 @@ +{"extends":["/service/IPSServiceAPIDTO"],"psSubSysServiceAPIDTOFields":{"desc":"外部服务接口DTO属性集合","type":"array","schema":"/service/IPSSubSysServiceAPIDTOField"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIDTOField.json b/resources/model/service/IPSSubSysServiceAPIDTOField.json new file mode 100644 index 0000000..80a934d --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIDTOField.json @@ -0,0 +1 @@ +{"extends":["/service/IPSServiceAPIDTOField","/IPSModelSortable"],"logicName":{"desc":"中文名称","type":"string"},"psCodeList":{"desc":"代码表","type":"object","schema":"/codelist/IPSCodeList"},"sourceType":{"desc":"外部服务接口DTO属性来源类型","type":"string","enum":{"SUBSYSSERVICEAPIDEFIELD":"外部服务接口实体属性","SUBSYSSERVICEAPIDERS":"外部服务接口实体关系"}},"allowEmpty":{"desc":"允许空输入","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIMethod.json b/resources/model/service/IPSSubSysServiceAPIMethod.json new file mode 100644 index 0000000..6d89a2f --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIMethod.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"codeName2":{"desc":"代码名称2","type":"string"},"methodParam":{"desc":"方法参数","type":"string"},"methodParam2":{"desc":"方法参数2","type":"string"},"methodTag":{"desc":"方法标记","type":"string"},"methodTag2":{"desc":"方法标记2","type":"string"},"methodType":{"desc":"方法类型","type":"string","enum":{"DEACTION":"实体行为","FETCH":"实体数据集合","SELECT":"实体数据查询(SELECT)","FETCHTEMP":"实体数据集合(临时)","SELECTTEMP":"实体数据查询(SELECT)(临时)","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"getPSDECodeName":{"desc":"实体代码名称","type":"string"},"getPSDELogicName":{"desc":"实体逻辑名称","type":"string"},"getPSDEName":{"desc":"实体名称","type":"string"},"psSysSFPlugin":{"desc":"后端扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"requestField":{"desc":"请求属性","type":"string"},"requestMethod":{"desc":"请求方式","type":"string","enum":{"GET":"GET","HEAD":"HEAD","POST":"POST","PUT":"PUT","PATCH":"PATCH","DELETE":"DELETE","OPTIONS":"OPTIONS","TRACE":"TRACE"}},"requestParamType":{"desc":"参数类型","type":"string","enum":{"NONE":"无参数","FIELD":"指定属性","FIELDS":"指定属性数组","ENTITY":"数据对象","ENTITIES":"数据对象数组","OBJECT":"其它对象","OBJECTS":"其它对象数组"}},"requestPath":{"desc":"请求路径","type":"string"},"returnValueType":{"desc":"返回值类型","type":"string","enum":{"VOID":"无(void)","SIMPLE":"简单值","SIMPLES":"简单值数组","ENTITY":"数据对象(Entity)","ENTITIES":"数据对象数组(Entity[])","OBJECT":"其它对象(Object)","OBJECTS":"其它对象数组(Object[])","USER":"用户自定义(USER)","USER2":"用户自定义2(USER2)"}},"needResouceKey":{"desc":"独立输出资源键值","type":"boolean"},"noServiceCodeName":{"desc":"无服务代码标识","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIMethodInput.json b/resources/model/service/IPSSubSysServiceAPIMethodInput.json new file mode 100644 index 0000000..8270349 --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIMethodInput.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodInput"],"keyPSSubSysServiceAPIField":{"desc":"外部服务接口主键属性","type":"object","schema":"/service/IPSSubSysServiceAPIDEField"},"psSubSysServiceAPIDTO":{"desc":"外部服务接口DTO对象","type":"object","schema":"/service/IPSSubSysServiceAPIDTO"}} \ No newline at end of file diff --git a/resources/model/service/IPSSubSysServiceAPIMethodReturn.json b/resources/model/service/IPSSubSysServiceAPIMethodReturn.json new file mode 100644 index 0000000..a46ec91 --- /dev/null +++ b/resources/model/service/IPSSubSysServiceAPIMethodReturn.json @@ -0,0 +1 @@ +{"extends":["/dataentity/service/IPSDEMethodReturn"],"psSubSysServiceAPIDTO":{"desc":"实体服务接口DTO对象","type":"object","schema":"/service/IPSSubSysServiceAPIDTO"},"stdDataType":{"desc":"简单值类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}}} \ No newline at end of file diff --git a/resources/model/service/IPSSysServiceAPI.json b/resources/model/service/IPSSysServiceAPI.json new file mode 100644 index 0000000..b5f7b72 --- /dev/null +++ b/resources/model/service/IPSSysServiceAPI.json @@ -0,0 +1 @@ +{"aPILevel":{"desc":"接口级别","type":"number"},"aPIMode":{"desc":"接口模式","type":"number","enum":{"0":"实体服务接口(指定实体)(默认)","1":"实体服务接口(全部非子系统实体)","2":"平台预置服务接口","10":"自定义接口"}},"aPITag":{"desc":"接口标记","type":"string"},"aPITag2":{"desc":"接口标记2","type":"string"},"aPIType":{"desc":"接口类型","type":"string","enum":{"RESTFUL":"RESTful API","JAXRS":"RESTful WebService","WEBSERVICE":"WebService","USER":"用户自定义","USER2":"用户自定义2"}},"aPIVersion":{"desc":"接口版本","type":"number"},"authCheckTokenUrl":{"desc":"认证token路径","type":"string"},"authClientId":{"desc":"认证客户端标识","type":"string"},"authClientSecret":{"desc":"认证客户端密码","type":"string"},"authMode":{"desc":"认证模式","type":"string","enum":{"NONE":"无认证","AUTHORIZATION_CODE":"授权码模式","PASSWORD":"密码模式","CLIENT_CREDENTIALS":"客户端模式","IMPLICIT":"简化模式","USER":"用户自定义","USER2":"用户自定义2"}},"authParam":{"desc":"认证参数","type":"string"},"authParam2":{"desc":"认证参数2","type":"string"},"authParam3":{"desc":"认证参数3","type":"string"},"authParam4":{"desc":"认证参数4","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"handler":{"desc":"处理对象","type":"string"},"httpPort":{"desc":"默认端口","type":"number"},"psDEServiceAPIRSs":{"desc":"实体资源关系集合","type":"array","schema":"/dataentity/service/IPSDEServiceAPIRS"},"psDEServiceAPIs":{"desc":"实体资源集合","type":"array","schema":"/dataentity/service/IPSDEServiceAPI"},"psSysSFPlugin":{"desc":"后端扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"psSysTestPrjs":{"desc":"测试项目集合","type":"array","schema":"/testing/IPSSysTestPrj"},"predefinedType":{"desc":"预定义接口类型","type":"string","enum":{"SAASADMIN":"SaaS应用管理接口","WFSERVICE":"工作流引擎服务接口","WFPROXYAPP":"工作流代理应用接口","WFCALLBACK":"工作流引擎回调接口","USERAUTH":"用户授权服务接口","ORGSERVICE":"组织管理服务接口","ORGCALLBACK":"组织服务回调接口","CORESERVICE":"SaaS核心服务接口","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"serviceCodeName":{"desc":"服务代码名称","type":"string"},"serviceParam":{"desc":"服务参数","type":"string"},"serviceParam2":{"desc":"服务参数2","type":"string"},"serviceParam3":{"desc":"服务参数3","type":"string"},"serviceParam4":{"desc":"服务参数4","type":"string"},"serviceType":{"desc":"服务类型","type":"string","enum":{"DEFAULT":"默认","APPLICATION":"前端应用","PROXY":"代理","MIDDLEPLATFORM":"中台","MASA":"MASA","USER":"用户自定义","USER2":"用户自定义2"}},"coreLevel":{"desc":"系统级别接口","type":"boolean"},"enableServiceAPIDTO":{"desc":"启用服务接口DTO","type":"boolean"},"resetDefaultActionCodeName":{"desc":"重置默认行为方法代码名称","type":"boolean"},"userLevel":{"desc":"用户级别接口","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/IPSSysServiceAPIDTO.json b/resources/model/service/IPSSysServiceAPIDTO.json new file mode 100644 index 0000000..dc06c38 --- /dev/null +++ b/resources/model/service/IPSSysServiceAPIDTO.json @@ -0,0 +1 @@ +{"extends":["/service/IPSServiceAPIDTO"]} \ No newline at end of file diff --git a/resources/model/service/IPSSysServiceAPIDTOField.json b/resources/model/service/IPSSysServiceAPIDTOField.json new file mode 100644 index 0000000..845dea7 --- /dev/null +++ b/resources/model/service/IPSSysServiceAPIDTOField.json @@ -0,0 +1 @@ +{"extends":["/service/IPSServiceAPIDTOField"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Callback.json b/resources/model/service/openapi/IPSOpenAPI3Callback.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Callback.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Callbacks.json b/resources/model/service/openapi/IPSOpenAPI3Callbacks.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Callbacks.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Components.json b/resources/model/service/openapi/IPSOpenAPI3Components.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Components.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Contact.json b/resources/model/service/openapi/IPSOpenAPI3Contact.json new file mode 100644 index 0000000..bc772cc --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Contact.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"],"email":{"desc":"联系人电子邮件地址","type":"string"},"url":{"desc":"联系人URL地址","type":"string"}} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Example.json b/resources/model/service/openapi/IPSOpenAPI3Example.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Example.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Examples.json b/resources/model/service/openapi/IPSOpenAPI3Examples.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Examples.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Header.json b/resources/model/service/openapi/IPSOpenAPI3Header.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Header.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Headers.json b/resources/model/service/openapi/IPSOpenAPI3Headers.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Headers.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Info.json b/resources/model/service/openapi/IPSOpenAPI3Info.json new file mode 100644 index 0000000..a144cbf --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Info.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"],"aPIVersion":{"desc":"版本","type":"string"},"termsOfService":{"desc":"服务条款路径","type":"string"},"title":{"desc":"抬头","type":"string"}} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3JsonNodeSchemas.json b/resources/model/service/openapi/IPSOpenAPI3JsonNodeSchemas.json new file mode 100644 index 0000000..5f89449 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3JsonNodeSchemas.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodeSchemas","/dynamodel/IPSJsonDefs"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3License.json b/resources/model/service/openapi/IPSOpenAPI3License.json new file mode 100644 index 0000000..fd882da --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3License.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"],"url":{"desc":"协议URL地址","type":"string"}} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Link.json b/resources/model/service/openapi/IPSOpenAPI3Link.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Link.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Links.json b/resources/model/service/openapi/IPSOpenAPI3Links.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Links.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3MediaType.json b/resources/model/service/openapi/IPSOpenAPI3MediaType.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3MediaType.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3MediaTypes.json b/resources/model/service/openapi/IPSOpenAPI3MediaTypes.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3MediaTypes.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Object.json b/resources/model/service/openapi/IPSOpenAPI3Object.json new file mode 100644 index 0000000..940b1fe --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Object.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNode"],"description":{"desc":"描述信息","type":"string"}} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Operation.json b/resources/model/service/openapi/IPSOpenAPI3Operation.json new file mode 100644 index 0000000..59244b9 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Operation.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"],"operationId":{"desc":"操作标识","type":"string"},"summary":{"desc":"操作摘要","type":"string"}} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Parameter.json b/resources/model/service/openapi/IPSOpenAPI3Parameter.json new file mode 100644 index 0000000..54081fb --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Parameter.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"],"in":{"desc":"输入方式","type":"string"},"required":{"desc":"必须输入","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Parameters.json b/resources/model/service/openapi/IPSOpenAPI3Parameters.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Parameters.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Path.json b/resources/model/service/openapi/IPSOpenAPI3Path.json new file mode 100644 index 0000000..2e55779 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Path.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"],"summary":{"desc":"摘要信息","type":"string"}} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Paths.json b/resources/model/service/openapi/IPSOpenAPI3Paths.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Paths.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3RequestBodies.json b/resources/model/service/openapi/IPSOpenAPI3RequestBodies.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3RequestBodies.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3RequestBody.json b/resources/model/service/openapi/IPSOpenAPI3RequestBody.json new file mode 100644 index 0000000..75b0e9e --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3RequestBody.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"],"required":{"desc":"必须输入","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Response.json b/resources/model/service/openapi/IPSOpenAPI3Response.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Response.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Responses.json b/resources/model/service/openapi/IPSOpenAPI3Responses.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Responses.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3Schema.json b/resources/model/service/openapi/IPSOpenAPI3Schema.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3Schema.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3SecurityScheme.json b/resources/model/service/openapi/IPSOpenAPI3SecurityScheme.json new file mode 100644 index 0000000..3aae62f --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3SecurityScheme.json @@ -0,0 +1 @@ +{"extends":["/service/openapi/IPSOpenAPI3Object"]} \ No newline at end of file diff --git a/resources/model/service/openapi/IPSOpenAPI3SecuritySchemes.json b/resources/model/service/openapi/IPSOpenAPI3SecuritySchemes.json new file mode 100644 index 0000000..cfc6466 --- /dev/null +++ b/resources/model/service/openapi/IPSOpenAPI3SecuritySchemes.json @@ -0,0 +1 @@ +{"extends":["/dynamodel/IPSJsonNodes"]} \ No newline at end of file diff --git a/resources/model/system.json b/resources/model/system.json index 1d808cd..2a6883a 100644 --- a/resources/model/system.json +++ b/resources/model/system.json @@ -1,5 +1,4 @@ { - "name": "name", - "codeName": "codeName", - "apps": "./apps.json" + "extends": ["/IPSSystem"], + "apps": { "schema": "/apps" } } diff --git a/resources/model/system/IPSSysModelGroup.json b/resources/model/system/IPSSysModelGroup.json new file mode 100644 index 0000000..408144d --- /dev/null +++ b/resources/model/system/IPSSysModelGroup.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"groupTag":{"desc":"分组标记","type":"string"},"groupTag2":{"desc":"分组标记2","type":"string"},"groupTag3":{"desc":"分组标记3","type":"string"},"groupTag4":{"desc":"分组标记4","type":"string"}} \ No newline at end of file diff --git a/resources/model/system/IPSSysRef.json b/resources/model/system/IPSSysRef.json new file mode 100644 index 0000000..7a7d334 --- /dev/null +++ b/resources/model/system/IPSSysRef.json @@ -0,0 +1 @@ +{"refParam":{"desc":"引用参数","type":"string"},"refParam2":{"desc":"引用参数2","type":"string"},"sysCodeName":{"desc":"系统代码名称","type":"string"},"sysName":{"desc":"系统名称","type":"string"},"sysPkgName":{"desc":"系统包名称","type":"string"},"sysRefTag":{"desc":"引用系统标记","type":"string"},"sysRefType":{"desc":"引用系统类型","type":"string","enum":{"SUBSYS":"平台子系统","DEVSYS":"开发系统组件","DEVSYSCLOUD":"开发系统云服务","ETLSOURCE":"ETL数据源","ETLMODEL":"ETL模型"}},"sysSrvCodeName":{"desc":"系统服务发布名称","type":"string"},"sysVCName":{"desc":"系统版本名称","type":"string"}} \ No newline at end of file diff --git a/resources/model/system/IPSSystemModule.json b/resources/model/system/IPSSystemModule.json new file mode 100644 index 0000000..5e86d0d --- /dev/null +++ b/resources/model/system/IPSSystemModule.json @@ -0,0 +1 @@ +{"allPSCodeLists":{"desc":"代码表集合","type":"array","schema":"/codelist/IPSCodeList"},"allPSDataEntities":{"desc":"实体集合","type":"array","schema":"/dataentity/IPSDataEntity"},"allPSWorkflows":{"desc":"工作流集合","type":"array","schema":"/wf/IPSWorkflow"},"codeName":{"desc":"代码标识","type":"string"},"dSLink":{"desc":"默认数据源","type":"string","enum":{"DEFAULT":"默认连接","DB2":"数据连接2","DB3":"数据连接3","DB4":"数据连接4","DB5":"数据连接5","DB6":"数据连接6","DB7":"数据连接7","DB8":"数据连接8","DB9":"数据连接9","DB10":"数据连接10","DB11":"数据连接11","DB12":"数据连接12"}},"moduleSN":{"desc":"模块编号","type":"string"},"moduleTag":{"desc":"模块标记","type":"string"},"moduleTag2":{"desc":"模块标记2","type":"string"},"moduleTag3":{"desc":"模块标记3","type":"string"},"moduleTag4":{"desc":"模块标记4","type":"string"},"pKGCodeName":{"desc":"包代码名称","type":"string"},"psSysModelGroup":{"desc":"系统模型组","type":"object","schema":"/system/IPSSysModelGroup"},"psSysRef":{"desc":"系统引用","type":"object","schema":"/system/IPSSysRef"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"sysRefType":{"desc":"引用系统类型","type":"string","enum":{"SUBSYS":"平台子系统","DEVSYS":"开发系统组件","DEVSYSCLOUD":"开发系统云服务","ETLSOURCE":"ETL数据源","ETLMODEL":"ETL模型"}},"utilParams":{"desc":"模块功能参数","type":"object"},"utilTag":{"desc":"模块功能标记","type":"string"},"utilType":{"desc":"模块功能类型","type":"string","enum":{"ADMIN":"管理模块","EAI":"应用集成","BI":"智能报表","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"defaultModule":{"desc":"默认模块","type":"boolean"},"subSysAsCloud":{"desc":"子系统以云服务方式提供","type":"boolean"},"subSysModule":{"desc":"子系统模块","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/testing/IPSAppViewTestCase.json b/resources/model/testing/IPSAppViewTestCase.json new file mode 100644 index 0000000..d068711 --- /dev/null +++ b/resources/model/testing/IPSAppViewTestCase.json @@ -0,0 +1 @@ +{"extends":["/testing/IPSSysTestCase2"],"psAppView":{"desc":"应用视图","type":"object","schema":"/app/view/IPSAppView"}} \ No newline at end of file diff --git a/resources/model/testing/IPSDEActionTestCase.json b/resources/model/testing/IPSDEActionTestCase.json new file mode 100644 index 0000000..7bef1ea --- /dev/null +++ b/resources/model/testing/IPSDEActionTestCase.json @@ -0,0 +1 @@ +{"extends":["/testing/IPSSysTestCase","/dataentity/IPSDataEntityObject"],"psDEAction":{"desc":"测试实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"}} \ No newline at end of file diff --git a/resources/model/testing/IPSDEFVRTestCase.json b/resources/model/testing/IPSDEFVRTestCase.json new file mode 100644 index 0000000..f8fda2f --- /dev/null +++ b/resources/model/testing/IPSDEFVRTestCase.json @@ -0,0 +1 @@ +{"extends":["/testing/IPSSysTestCase","/dataentity/IPSDataEntityObject"],"psDEField":{"desc":"相关实体属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/testing/IPSDESAMethodTestCase.json b/resources/model/testing/IPSDESAMethodTestCase.json new file mode 100644 index 0000000..7a92de3 --- /dev/null +++ b/resources/model/testing/IPSDESAMethodTestCase.json @@ -0,0 +1 @@ +{"extends":["/testing/IPSSysTestCase2"],"psDEServiceAPI":{"desc":"实体服务接口","type":"object","schema":"/dataentity/service/IPSDEServiceAPI"},"psDEServiceAPIMethod":{"desc":"实体服务接口方法","type":"object","schema":"/dataentity/service/IPSDEServiceAPIMethod"}} \ No newline at end of file diff --git a/resources/model/testing/IPSSysTestCase.json b/resources/model/testing/IPSSysTestCase.json new file mode 100644 index 0000000..4828b69 --- /dev/null +++ b/resources/model/testing/IPSSysTestCase.json @@ -0,0 +1 @@ +{"assertExceptionData":{"desc":"断言异常数据","type":"string"},"assertExceptionData2":{"desc":"断言异常数据2","type":"string"},"assertExceptionName":{"desc":"断言异常名称","type":"string"},"assertType":{"desc":"测试断言类型","type":"string","enum":{"RESULT":"预期结果","EXCEPTION":"预期异常","DATAEXISTS":"预期数据存在","NOEXCEPTION":"预期无异常","CUSTOMCODE":"自定义代码","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"codeName":{"desc":"代码标识","type":"string"},"psDataEntity":{"desc":"测试实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysTestCaseAsserts":{"desc":"测试用例断言集合","type":"array","schema":"/testing/IPSSysTestCaseAssert"},"psSysTestCaseInputs":{"desc":"测试用例输入集合","type":"array","schema":"/testing/IPSSysTestCaseInput"},"psSysTestData":{"desc":"测试数据","type":"object","schema":"/testing/IPSSysTestData"},"testCaseSN":{"desc":"测试用例编号","type":"string"},"testCaseType":{"desc":"用例类型","type":"string","enum":{"DEFVR":"实体属性值规则","DEACTION":"实体行为","DESADETAIL":"实体接口方法","APPVIEW":"应用视图","CUSTOM":"自定义"}},"rollbackTransaction":{"desc":"事务回滚","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/testing/IPSSysTestCase2.json b/resources/model/testing/IPSSysTestCase2.json new file mode 100644 index 0000000..a92ace9 --- /dev/null +++ b/resources/model/testing/IPSSysTestCase2.json @@ -0,0 +1 @@ +{"extends":["/testing/IPSSysTestCase"],"psSysTestModule":{"desc":"测试模块","type":"object","schema":"/testing/IPSSysTestModule"},"psSysTestPrj":{"desc":"测试项目","type":"object","schema":"/testing/IPSSysTestPrj"}} \ No newline at end of file diff --git a/resources/model/testing/IPSSysTestCaseAssert.json b/resources/model/testing/IPSSysTestCaseAssert.json new file mode 100644 index 0000000..25a2732 --- /dev/null +++ b/resources/model/testing/IPSSysTestCaseAssert.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"assertTag":{"desc":"断言标记","type":"string"},"assertTag2":{"desc":"断言标记2","type":"string"},"assertTag3":{"desc":"断言标记3","type":"string"},"assertTag4":{"desc":"断言标记4","type":"string"},"assertType":{"desc":"断言类型","type":"string","enum":{"RESULT":"预期结果","EXCEPTION":"预期异常","DATAEXISTS":"预期数据存在","NOEXCEPTION":"预期无异常","CUSTOMCODE":"自定义代码","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"assertValue":{"desc":"断言值","type":"string"},"exceptionName":{"desc":"异常名称","type":"string"},"exceptionTag":{"desc":"异常标记","type":"string"},"exceptionTag2":{"desc":"异常标记2","type":"string"},"psSysTestCaseInput":{"desc":"测试用例输入","type":"object","schema":"/testing/IPSSysTestCaseInput"},"scriptCode":{"desc":"脚本代码","type":"string"}} \ No newline at end of file diff --git a/resources/model/testing/IPSSysTestCaseInput.json b/resources/model/testing/IPSSysTestCaseInput.json new file mode 100644 index 0000000..b06c086 --- /dev/null +++ b/resources/model/testing/IPSSysTestCaseInput.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"inputPSDEAction":{"desc":"输入行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"inputTag":{"desc":"输入标记","type":"string"},"inputTag2":{"desc":"输入标记2","type":"string"},"inputTag3":{"desc":"输入标记3","type":"string"},"inputTag4":{"desc":"输入标记4","type":"string"},"inputType":{"desc":"输入类型","type":"string","enum":{"DATA":"数据","CUSTOMCODE":"自定义代码","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"inputValue":{"desc":"输入值","type":"string"},"psSysTestCaseAsserts":{"desc":"输入断言集合","type":"array","schema":"/testing/IPSSysTestCaseAssert"},"psSysTestData":{"desc":"测试数据","type":"object","schema":"/testing/IPSSysTestData"},"scriptCode":{"desc":"脚本代码","type":"string"}} \ No newline at end of file diff --git a/resources/model/testing/IPSSysTestData.json b/resources/model/testing/IPSSysTestData.json new file mode 100644 index 0000000..6e7f4ae --- /dev/null +++ b/resources/model/testing/IPSSysTestData.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"data":{"desc":"测试数据","type":"string"},"instCount":{"desc":"实例数量","type":"number"},"psDataEntity":{"desc":"相关实体","type":"object","schema":"/dataentity/IPSDataEntity"},"psSysTestDataItems":{"desc":"测试数据项集合","type":"array","schema":"/testing/IPSSysTestDataItem"},"scriptCode":{"desc":"脚本代码","type":"string"},"testDataType":{"desc":"测试数据类型","type":"string","enum":{"DATA":"数据","CUSTOMCODE":"自定义代码","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}},"baseMode":{"desc":"基本模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/testing/IPSSysTestDataItem.json b/resources/model/testing/IPSSysTestDataItem.json new file mode 100644 index 0000000..5eacfa0 --- /dev/null +++ b/resources/model/testing/IPSSysTestDataItem.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"stdDataType":{"desc":"标准数据类型","type":"number","enum":{"0":"UNKNOWN","1":"BIGINT","2":"BINARY","3":"BIT","4":"CHAR","5":"DATETIME","6":"DECIMAL","7":"FLOAT","8":"IMAGE","9":"INT","10":"MONEY","11":"NCHAR","12":"NTEXT","13":"NVARCHAR","14":"NUMERIC","15":"REAL","16":"SMALLDATETIME","17":"SMALLINT","18":"SMALLMONEY","19":"SQL_VARIANT","20":"SYSNAME","21":"TEXT","22":"TIMESTAMP","23":"TINYINT","24":"VARBINARY","25":"VARCHAR","26":"UNIQUEIDENTIFIER","27":"DATE","28":"TIME","29":"BIGDECIMAL"}},"value":{"desc":"值","type":"string"},"valueType":{"desc":"值类型","type":"string","enum":{"VALUE":"直接值","VALUERANGE":"值范围","NULLVALUE":"空值","PICKUPVALUE":"外键随机值","CODELISTVALUE":"代码表随机值"}},"nullValue":{"desc":"空值","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/testing/IPSSysTestModule.json b/resources/model/testing/IPSSysTestModule.json new file mode 100644 index 0000000..5c89d56 --- /dev/null +++ b/resources/model/testing/IPSSysTestModule.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"moduleTag":{"desc":"模块标记","type":"string"},"moduleTag2":{"desc":"模块标记2","type":"string"},"psSysTestCases":{"desc":"测试用例集合","type":"array","schema":"/testing/IPSSysTestCase"}} \ No newline at end of file diff --git a/resources/model/testing/IPSSysTestPrj.json b/resources/model/testing/IPSSysTestPrj.json new file mode 100644 index 0000000..b896d55 --- /dev/null +++ b/resources/model/testing/IPSSysTestPrj.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"psApplication":{"desc":"系统应用","type":"object","schema":"/app/IPSApplication"},"psSysServiceAPI":{"desc":"系统服务接口","type":"object","schema":"/service/IPSSysServiceAPI"},"psSysTestModules":{"desc":"测试模块集合","type":"array","schema":"/testing/IPSSysTestModule"},"prjTag":{"desc":"项目标记","type":"string"},"prjTag2":{"desc":"项目标记2","type":"string"},"prjType":{"desc":"项目类型","type":"string","enum":{"SYSAPP":"前端应用","SYSSERVICEAPI":"系统服务接口","USER":"用户自定义","USER2":"用户自定义2","USER3":"用户自定义3","USER4":"用户自定义4"}}} \ No newline at end of file diff --git a/resources/model/valuerule/IPSSysValueRule.json b/resources/model/valuerule/IPSSysValueRule.json new file mode 100644 index 0000000..6ecd1cb --- /dev/null +++ b/resources/model/valuerule/IPSSysValueRule.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"customObject":{"desc":"自定义处理对象","type":"string"},"customParams":{"desc":"自定义参数","type":"string"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"psSysSFPlugin":{"desc":"后台扩展插件","type":"object","schema":"/res/IPSSysSFPlugin"},"regExCode":{"desc":"正则式代码","type":"string"},"regExCode2":{"desc":"正则式代码2","type":"string"},"regExCode3":{"desc":"正则式代码3","type":"string"},"regExCode4":{"desc":"正则式代码4","type":"string"},"ruleInfo":{"desc":"值规则信息","type":"string"},"ruleTag":{"desc":"规则标记","type":"string"},"ruleTag2":{"desc":"规则标记2","type":"string"},"ruleType":{"desc":"值规则类型","type":"string","enum":{"SCRIPT":"脚本","REG":"正则式","CUSTOM":"自定义"}},"scriptCode":{"desc":"脚本代码","type":"string"},"enableBackend":{"desc":"支持后台执行","type":"boolean"},"enableFront":{"desc":"支持前台执行","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/view/IPSDEDataSetViewMsg.json b/resources/model/view/IPSDEDataSetViewMsg.json new file mode 100644 index 0000000..14ff236 --- /dev/null +++ b/resources/model/view/IPSDEDataSetViewMsg.json @@ -0,0 +1 @@ +{"extends":["/view/IPSViewMsg"],"cacheScope":{"type":"string"},"cacheTimeout":{"type":"number"},"enableCache":{"type":"boolean"}} \ No newline at end of file diff --git a/resources/model/view/IPSUIAction.json b/resources/model/view/IPSUIAction.json new file mode 100644 index 0000000..269ca51 --- /dev/null +++ b/resources/model/view/IPSUIAction.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject","/control/IPSNavigateParamContainer"],"actionLevel":{"desc":"行为级别","type":"number","enum":{"50":"不常用","100":"一般操作","200":"常用操作","250":"关键操作"}},"actionTarget":{"desc":"行为操作目标","type":"string","enum":{"SINGLEDATA":"单项数据","SINGLEKEY":"单项数据(主键)","MULTIDATA":"多项数据","MULTIKEY":"多项数据(主键)","NONE":"无数据"}},"cMPSLanguageRes":{"desc":"确认信息语言资源","type":"object","schema":"/res/IPSLanguageRes"},"capPSLanguageRes":{"desc":"标题语言资源","type":"object","schema":"/res/IPSLanguageRes"},"caption":{"desc":"标题","type":"string"},"codeName":{"desc":"代码标识","type":"string"},"confirmMsg":{"desc":"操作确认信息","type":"string"},"dataAccessAction":{"desc":"数据访问权限","type":"string"},"dialogResult":{"desc":"弹窗关闭结果","type":"string","enum":{"OK":"确定","CANCEL":"取消","YES":"是","NO":"否"}},"frontPSAppView":{"desc":"前端应用视图","type":"object","schema":"/app/view/IPSAppView"},"frontProcessType":{"desc":"前台处理类型","type":"string","enum":{"WIZARD":"打开视图或向导(模态)","TOP":"打开顶级视图","OPENHTMLPAGE":"打开HTML页面","OTHER":"用户自定义"}},"fullCodeName":{"desc":"完全代码名称","type":"string"},"htmlPageUrl":{"desc":"Html页面路径","type":"string"},"nextPSUIAction":{"desc":"下一步界面行为","type":"object","schema":"/view/IPSUIAction"},"psSysImage":{"desc":"界面行为图标对象","type":"object","schema":"/res/IPSSysImage"},"psSysPFPlugin":{"desc":"前端扩展插件","type":"object","schema":"/res/IPSSysPFPlugin"},"paramItem":{"desc":"参数项名称","type":"string"},"refreshMode":{"desc":"刷新引用视图模式","type":"number","enum":{"0":"无","1":"引用视图或树节点","2":"引用树节点父节点","3":"引用树节点根节点"}},"sMPSLanguageRes":{"desc":"成功信息语言资源","type":"object","schema":"/res/IPSLanguageRes"},"successMsg":{"desc":"操作成功提示信息","type":"string"},"textItem":{"desc":"文本项名称","type":"string"},"timeout":{"desc":"操作超时时长(毫秒)","type":"number"},"tooltip":{"desc":"操作提示信息","type":"string"},"tooltipPSLanguageRes":{"desc":"操作提示语言资源","type":"object","schema":"/res/IPSLanguageRes"},"uIActionMode":{"desc":"界面行为模式","type":"string","enum":{"SYS":"系统预定义","FRONT":"前台调用","BACKEND":"后台调用","WFFRONT":"工作流前台调用","WFBACKEND":"工作流后台调用"}},"uIActionParamJO":{"desc":"界面行为参数对象","type":"object"},"uIActionTag":{"desc":"界面行为标记","type":"string"},"uIActionType":{"desc":"界面行为类型","type":"string"},"uILogicAttachMode":{"desc":"界面逻辑附加类型","type":"string","enum":{"REPLACE":"替换执行","AFTER":"执行之后"}},"uILogicType":{"desc":"界面逻辑类型","type":"string"},"valueItem":{"desc":"值项名称","type":"string"},"closeEditView":{"desc":"操作后关闭编辑视图","type":"boolean"},"enableConfirm":{"desc":"启用用户操作确认","type":"boolean"},"enableToggleMode":{"desc":"启用按钮点击切换模式","type":"boolean"},"group":{"desc":"行为组","type":"boolean"},"reloadData":{"desc":"操作后刷新当前界面","type":"boolean"},"showBusyIndicator":{"desc":"显示处理提示","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/view/IPSUIActionGroup.json b/resources/model/view/IPSUIActionGroup.json new file mode 100644 index 0000000..f1fd5dc --- /dev/null +++ b/resources/model/view/IPSUIActionGroup.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psUIActionGroupDetails":{"desc":"组成员对象集合","type":"array","schema":"/view/IPSUIActionGroupDetail"}} \ No newline at end of file diff --git a/resources/model/view/IPSUIActionGroupDetail.json b/resources/model/view/IPSUIActionGroupDetail.json new file mode 100644 index 0000000..9b04251 --- /dev/null +++ b/resources/model/view/IPSUIActionGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"actionLevel":{"desc":"行为级别","type":"number","enum":{"50":"不常用","100":"一般操作","200":"常用操作","250":"关键操作"}},"codeName":{"desc":"代码标识","type":"string"},"detailTag":{"desc":"成员标记","type":"string"},"detailTag2":{"desc":"成员标记2","type":"string"},"psUIAction":{"desc":"界面行为对象","type":"object","schema":"/view/IPSUIAction"},"uIActionParamJO":{"desc":"界面行为附加参数","type":"object"},"addSeparator":{"desc":"添加分隔栏","type":"boolean"},"showCaption":{"desc":"显示标题","type":"boolean"},"showIcon":{"desc":"显示图标","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/view/IPSUIEngine.json b/resources/model/view/IPSUIEngine.json new file mode 100644 index 0000000..be6b7aa --- /dev/null +++ b/resources/model/view/IPSUIEngine.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psUIEngineParams":{"desc":"引擎参数集合","type":"array","schema":"/view/IPSUIEngineParam"}} \ No newline at end of file diff --git a/resources/model/view/IPSUIEngineParam.json b/resources/model/view/IPSUIEngineParam.json new file mode 100644 index 0000000..92eeea8 --- /dev/null +++ b/resources/model/view/IPSUIEngineParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"paramType":{"type":"string"},"value":{"type":"object"}} \ No newline at end of file diff --git a/resources/model/view/IPSViewLogic.json b/resources/model/view/IPSViewLogic.json new file mode 100644 index 0000000..e098606 --- /dev/null +++ b/resources/model/view/IPSViewLogic.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"logicType":{"desc":"逻辑类型","type":"string"},"viewLogicStyle":{"desc":"视图逻辑样式","type":"string"},"viewLogicType":{"desc":"界面逻辑类型","type":"string"}} \ No newline at end of file diff --git a/resources/model/view/IPSViewLogicParam.json b/resources/model/view/IPSViewLogicParam.json new file mode 100644 index 0000000..981c8ed --- /dev/null +++ b/resources/model/view/IPSViewLogicParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"]} \ No newline at end of file diff --git a/resources/model/view/IPSViewMsg.json b/resources/model/view/IPSViewMsg.json new file mode 100644 index 0000000..3159464 --- /dev/null +++ b/resources/model/view/IPSViewMsg.json @@ -0,0 +1 @@ +{"codeName":{"type":"string"},"contentPSLanguageRes":{"desc":"内容多语言资源对象","type":"object","schema":"/res/IPSLanguageRes"},"dynamicMode":{"type":"number"},"message":{"type":"string"},"messageType":{"type":"string"},"position":{"type":"string"},"removeMode":{"type":"number"},"title":{"type":"string"},"titleLanResTag":{"type":"string"},"titlePSLanguageRes":{"type":"object","schema":"/res/IPSLanguageRes"},"enableRemove":{"type":"boolean"}} \ No newline at end of file diff --git a/resources/model/view/IPSViewMsgGroup.json b/resources/model/view/IPSViewMsgGroup.json new file mode 100644 index 0000000..64c919d --- /dev/null +++ b/resources/model/view/IPSViewMsgGroup.json @@ -0,0 +1 @@ +{"bodyStyle":{"type":"string"},"bottomStyle":{"type":"string"},"codeName":{"type":"string"},"topStyle":{"type":"string"}} \ No newline at end of file diff --git a/resources/model/view/IPSViewMsgGroupDetail.json b/resources/model/view/IPSViewMsgGroupDetail.json new file mode 100644 index 0000000..6672524 --- /dev/null +++ b/resources/model/view/IPSViewMsgGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"position":{"type":"string"}} \ No newline at end of file diff --git a/resources/model/wf/IPSSysWFSetting.json b/resources/model/wf/IPSSysWFSetting.json new file mode 100644 index 0000000..0aea787 --- /dev/null +++ b/resources/model/wf/IPSSysWFSetting.json @@ -0,0 +1 @@ +{"psWFUtilUIActions":{"desc":"功能界面行为","type":"array","schema":"/wf/IPSWFUtilUIAction"},"remindPSSysMsgTempl":{"desc":"催办消息模板","type":"object","schema":"/msg/IPSSysMsgTempl"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFCallActivityProcess.json b/resources/model/wf/IPSWFCallActivityProcess.json new file mode 100644 index 0000000..b6741c4 --- /dev/null +++ b/resources/model/wf/IPSWFCallActivityProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFProcess"],"targetPSWF":{"desc":"调用目标流程","type":"object","schema":"/wf/IPSWorkflow"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFCallOrgActivityProcess.json b/resources/model/wf/IPSWFCallOrgActivityProcess.json new file mode 100644 index 0000000..a530e88 --- /dev/null +++ b/resources/model/wf/IPSWFCallOrgActivityProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFCallActivityProcess"],"psWFProcessRoles":{"desc":"组织角色集合","type":"array","schema":"/wf/IPSWFProcessRole"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFDE.json b/resources/model/wf/IPSWFDE.json new file mode 100644 index 0000000..cee0637 --- /dev/null +++ b/resources/model/wf/IPSWFDE.json @@ -0,0 +1 @@ +{"extends":["/dataentity/wf/IPSDEWF"],"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFDEActionProcess.json b/resources/model/wf/IPSWFDEActionProcess.json new file mode 100644 index 0000000..86cfa64 --- /dev/null +++ b/resources/model/wf/IPSWFDEActionProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFProcess"],"psDEAction":{"desc":"实体行为","type":"object","schema":"/dataentity/action/IPSDEAction"},"psDataEntity":{"desc":"实体对象","type":"object","schema":"/dataentity/IPSDataEntity"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFDEDataSetRole.json b/resources/model/wf/IPSWFDEDataSetRole.json new file mode 100644 index 0000000..64f1958 --- /dev/null +++ b/resources/model/wf/IPSWFDEDataSetRole.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFRole"],"psDEDataSet":{"desc":"数据源数据集合","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDataEntity":{"desc":"数据源实体对象","type":"object","schema":"/dataentity/IPSDataEntity"},"wFUserIdPSDEF":{"desc":"流程用户标识存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"},"wFUserNamePSDEF":{"desc":"流程用户名称存储属性","type":"object","schema":"/dataentity/defield/IPSDEField"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFEmbedWFProcess.json b/resources/model/wf/IPSWFEmbedWFProcess.json new file mode 100644 index 0000000..7a1160c --- /dev/null +++ b/resources/model/wf/IPSWFEmbedWFProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFEmbedWFProcessBase"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFEmbedWFProcessBase.json b/resources/model/wf/IPSWFEmbedWFProcessBase.json new file mode 100644 index 0000000..d69fc5d --- /dev/null +++ b/resources/model/wf/IPSWFEmbedWFProcessBase.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFProcess"],"psWFProcessSubWFs":{"desc":"嵌套流程集合","type":"array","schema":"/wf/IPSWFProcessSubWF"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFEmbedWFReturnLink.json b/resources/model/wf/IPSWFEmbedWFReturnLink.json new file mode 100644 index 0000000..56e8112 --- /dev/null +++ b/resources/model/wf/IPSWFEmbedWFReturnLink.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFLink"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFEndProcess.json b/resources/model/wf/IPSWFEndProcess.json new file mode 100644 index 0000000..1857545 --- /dev/null +++ b/resources/model/wf/IPSWFEndProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFProcess"],"exitStateValue":{"desc":"结束状态值","type":"string"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFExclusiveGatewayProcess.json b/resources/model/wf/IPSWFExclusiveGatewayProcess.json new file mode 100644 index 0000000..caafa69 --- /dev/null +++ b/resources/model/wf/IPSWFExclusiveGatewayProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFGatewayProcessBase"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFGatewayProcessBase.json b/resources/model/wf/IPSWFGatewayProcessBase.json new file mode 100644 index 0000000..f769478 --- /dev/null +++ b/resources/model/wf/IPSWFGatewayProcessBase.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFProcess"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFInclusiveGatewayProcess.json b/resources/model/wf/IPSWFInclusiveGatewayProcess.json new file mode 100644 index 0000000..caafa69 --- /dev/null +++ b/resources/model/wf/IPSWFInclusiveGatewayProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFGatewayProcessBase"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFInteractiveLink.json b/resources/model/wf/IPSWFInteractiveLink.json new file mode 100644 index 0000000..65c3921 --- /dev/null +++ b/resources/model/wf/IPSWFInteractiveLink.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFLink"],"formCodeName":{"desc":"操作表单标记","type":"string"},"fromPSWFProcess":{"desc":"源流程处理","type":"object","schema":"/wf/IPSWFInteractiveProcess"},"mobFormCodeName":{"desc":"移动端操作表单标记","type":"string"},"mobViewCodeName":{"desc":"移动端操作视图标记","type":"string"},"psWFLinkRoles":{"desc":"操作角色集合","type":"array","schema":"/wf/IPSWFLinkRole"},"viewCodeName":{"desc":"操作视图标记","type":"string"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFInteractiveProcess.json b/resources/model/wf/IPSWFInteractiveProcess.json new file mode 100644 index 0000000..450f917 --- /dev/null +++ b/resources/model/wf/IPSWFInteractiveProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFProcess"],"getEditFields":{"desc":"编辑相关属性","type":"array","schema":"string"},"editMode":{"desc":"编辑模式","type":"number","enum":{"0":"不支持","1":"支持(排除指定属性)","2":"支持(仅指定属性)"}},"formCodeName":{"desc":"操作表单标记","type":"string"},"memoField":{"desc":"处理意见字段","type":"string"},"mobFormCodeName":{"desc":"移动端操作表单标记","type":"string"},"mobUAGroupCodeName":{"desc":"移动端附加界面行为组标记","type":"string"},"mobUtil2FormCodeName":{"desc":"移动端功能2操作表单标记","type":"string"},"mobUtil2FormName":{"desc":"移动端功能2操作表单名称","type":"string"},"mobUtil3FormCodeName":{"desc":"移动端功能3操作表单标记","type":"string"},"mobUtil3FormName":{"desc":"移动端功能3操作表单名称","type":"string"},"mobUtil4FormCodeName":{"desc":"移动端功能4操作表单标记","type":"string"},"mobUtil4FormName":{"desc":"移动端功能4操作表单名称","type":"string"},"mobUtil5FormCodeName":{"desc":"移动端功能5操作表单标记","type":"string"},"mobUtil5FormName":{"desc":"移动端功能5操作表单名称","type":"string"},"mobUtilFormCodeName":{"desc":"移动端功能操作表单标记","type":"string"},"mobUtilFormName":{"desc":"移动端功能操作表单名称","type":"string"},"msgType":{"desc":"发送通知类型","type":"number","enum":{"1":"系统消息","2":"电子邮件","4":"手机短信","8":"MSN消息","16":"检务通消息","32":"微信","64":"钉钉"}},"multiInstMode":{"desc":"多实例模式","type":"string","enum":{"NONE":"无","PARALLEL":"并行多实例","SEQUENTIAL":"串行多实例"}},"psWFProcessRoles":{"desc":"交互处理角色集合","type":"array","schema":"/wf/IPSWFProcessRole"},"getPredefinedActions":{"desc":"预定义行为","type":"array","schema":"string"},"uAGroupCodeName":{"desc":"附加界面行为组标记","type":"string"},"util2FormCodeName":{"desc":"功能2操作表单标记","type":"string"},"util2FormName":{"desc":"功能2操作表单名称","type":"string"},"util3FormCodeName":{"desc":"功能3操作表单标记","type":"string"},"util3FormName":{"desc":"功能3操作表单名称","type":"string"},"util4FormCodeName":{"desc":"功能4操作表单标记","type":"string"},"util4FormName":{"desc":"功能4操作表单名称","type":"string"},"util5FormCodeName":{"desc":"功能5操作表单标记","type":"string"},"util5FormName":{"desc":"功能5操作表单名称","type":"string"},"utilFormCodeName":{"desc":"功能操作表单标记","type":"string"},"utilFormName":{"desc":"功能操作表单名称","type":"string"},"editable":{"desc":"支持编辑","type":"boolean"},"sendInform":{"desc":"发送通知","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFLink.json b/resources/model/wf/IPSWFLink.json new file mode 100644 index 0000000..d478ddf --- /dev/null +++ b/resources/model/wf/IPSWFLink.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"customCond":{"desc":"自定义条件","type":"string"},"fromPSWFProcess":{"desc":"源流程处理","type":"object","schema":"/wf/IPSWFProcess"},"lNPSLanguageRes":{"desc":"逻辑名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"logicName":{"desc":"逻辑名称","type":"string"},"psWFLinkGroupCond":{"desc":"连接条件","type":"object","schema":"/wf/IPSWFLinkGroupCond"},"toPSWFProcess":{"desc":"目标流程处理","type":"object","schema":"/wf/IPSWFProcess"},"wFLinkType":{"desc":"处理连接处理","type":"string","enum":{"TIMEOUT":"超时连接","IAACTION":"交互连接","ROUTE":"常规连接","WFRETURN":"嵌入流程返回"}}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFLinkCond.json b/resources/model/wf/IPSWFLinkCond.json new file mode 100644 index 0000000..c3c0793 --- /dev/null +++ b/resources/model/wf/IPSWFLinkCond.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"condType":{"desc":"条件类型","type":"string","enum":{"GROUP":"组逻辑","SINGLE":"单项逻辑","CUSTOM":"用户自定义"}}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFLinkCustomCond.json b/resources/model/wf/IPSWFLinkCustomCond.json new file mode 100644 index 0000000..cb563b9 --- /dev/null +++ b/resources/model/wf/IPSWFLinkCustomCond.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFLinkCond"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFLinkGroupCond.json b/resources/model/wf/IPSWFLinkGroupCond.json new file mode 100644 index 0000000..07227ab --- /dev/null +++ b/resources/model/wf/IPSWFLinkGroupCond.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFLinkCond"],"groupOP":{"desc":"组合条件","type":"string","enum":{"AND":"与(AND)","OR":"或(OR)"}},"psWFLinkConds":{"desc":"子条件集合","type":"array","schema":"/wf/IPSWFLinkCond"},"notMode":{"desc":"逻辑取反","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFLinkRole.json b/resources/model/wf/IPSWFLinkRole.json new file mode 100644 index 0000000..48fdb43 --- /dev/null +++ b/resources/model/wf/IPSWFLinkRole.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psSysMsgTempl":{"desc":"通知消息模板","type":"object","schema":"/msg/IPSSysMsgTempl"},"psWFProcessRole":{"desc":"流程处理角色","type":"object","schema":"/wf/IPSWFProcessRole"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFLinkSingleCond.json b/resources/model/wf/IPSWFLinkSingleCond.json new file mode 100644 index 0000000..1a31204 --- /dev/null +++ b/resources/model/wf/IPSWFLinkSingleCond.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFLinkCond"],"fieldName":{"desc":"目标属性","type":"string"},"paramType":{"desc":"参数类型","type":"string","enum":{"ENTITYFIELD":"数据对象属性","CURTIME":"当前时间"}},"paramValue":{"desc":"条件值","type":"string"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFParallelGatewayProcess.json b/resources/model/wf/IPSWFParallelGatewayProcess.json new file mode 100644 index 0000000..caafa69 --- /dev/null +++ b/resources/model/wf/IPSWFParallelGatewayProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFGatewayProcessBase"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFParallelSubWFProcess.json b/resources/model/wf/IPSWFParallelSubWFProcess.json new file mode 100644 index 0000000..7a1160c --- /dev/null +++ b/resources/model/wf/IPSWFParallelSubWFProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFEmbedWFProcessBase"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFProcess.json b/resources/model/wf/IPSWFProcess.json new file mode 100644 index 0000000..1ddc161 --- /dev/null +++ b/resources/model/wf/IPSWFProcess.json @@ -0,0 +1 @@ +{"extends":["/IPSObject","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"height":{"desc":"高度","type":"number"},"leftPos":{"desc":"左侧位置","type":"number"},"logicName":{"desc":"逻辑名称","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psSysMsgTempl":{"desc":"通知消息模板","type":"object","schema":"/msg/IPSSysMsgTempl"},"psWFLinks":{"desc":"处理连出集合","type":"array","schema":"/wf/IPSWFLink"},"psWFProcessParams":{"desc":"处理参数集合","type":"array","schema":"/wf/IPSWFProcessParam"},"psWFWorkTime":{"desc":"流程工作时间","type":"object","schema":"/wf/IPSWFWorkTime"},"timeout":{"desc":"处理超时时长","type":"number"},"timeoutField":{"desc":"动态超时时长存放属性","type":"string"},"timeoutType":{"desc":"处理超时单位","type":"string","enum":{"MINUTE":"分钟","HOUR":"小时","DAY":"天","WORKDAY":"工作日"}},"topPos":{"desc":"上方位置","type":"number"},"userData":{"desc":"处理数据","type":"string"},"userData2":{"desc":"处理数据2","type":"string"},"wFProcessType":{"desc":"流程处理类型","type":"string","enum":{"START":"开始","END":"结束","PROCESS":"常规处理","INTERACTIVE":"交互处理","EMBED":"嵌套子流程","EXCLUSIVEGATEWAY":"排它网关","INCLUSIVEGATEWAY":"包容网关","PARALLELGATEWAY":"并行网关","CALLORGACTIVITY":"调用组织流程"}},"wFStepValue":{"desc":"流程步骤值","type":"string"},"width":{"desc":"宽度","type":"number"},"asynchronousProcess":{"desc":"异步处理","type":"boolean"},"enableTimeout":{"desc":"启用处理超时","type":"boolean"},"startProcess":{"desc":"开始处理","type":"boolean"},"terminalProcess":{"desc":"终止处理","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFProcessParam.json b/resources/model/wf/IPSWFProcessParam.json new file mode 100644 index 0000000..3efe651 --- /dev/null +++ b/resources/model/wf/IPSWFProcessParam.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"dstField":{"desc":"目标属性","type":"string"},"srcValue":{"desc":"源值","type":"string"},"srcValueType":{"desc":"源值类型","type":"string"},"userData":{"desc":"处理角色数据","type":"string"},"userData2":{"desc":"处理角色数据2","type":"string"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFProcessRole.json b/resources/model/wf/IPSWFProcessRole.json new file mode 100644 index 0000000..2e15c1e --- /dev/null +++ b/resources/model/wf/IPSWFProcessRole.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"psSysMsgTempl":{"desc":"通知消息模板","type":"object","schema":"/msg/IPSSysMsgTempl"},"psWFRole":{"desc":"流程角色对象","type":"object","schema":"/wf/IPSWFRole"},"uDField":{"desc":"数据对象属性名称","type":"string"},"userData":{"desc":"处理角色数据","type":"string"},"userData2":{"desc":"处理角色数据2","type":"string"},"wFProcessRoleType":{"desc":"流程处理角色类型","type":"string","enum":{"WFROLE":"工作流角色","LASTTWOSTEPACTOR":"上两个步骤操作者","LASTTHREESTEPACTOR":"上三个步骤操作者","LASTSTEPACTOR":"上一步骤操作者","UDACTOR":"当前数据属性","CURACTOR":"当前操作者"}},"cCMode":{"desc":"仅抄送模式","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFProcessSubWF.json b/resources/model/wf/IPSWFProcessSubWF.json new file mode 100644 index 0000000..ac54f38 --- /dev/null +++ b/resources/model/wf/IPSWFProcessSubWF.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"psDEDataSet":{"desc":"嵌套流程实体数据集","type":"object","schema":"/dataentity/ds/IPSDEDataSet"},"psDataEntity":{"desc":"嵌套流程实体","type":"object","schema":"/dataentity/IPSDataEntity"},"psWFVersion":{"desc":"嵌套流程版本","type":"object","schema":"/wf/IPSWFVersion"},"psWorkflow":{"desc":"嵌套流程","type":"object","schema":"/wf/IPSWorkflow"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFRole.json b/resources/model/wf/IPSWFRole.json new file mode 100644 index 0000000..922e155 --- /dev/null +++ b/resources/model/wf/IPSWFRole.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"psSystemModule":{"desc":"系统模块","type":"object","schema":"/system/IPSSystemModule"},"uniqueTag":{"desc":"角色唯一标记","type":"string"},"userData":{"desc":"工作流角色数据","type":"string"},"userData2":{"desc":"工作流角色数据2","type":"string"},"wFRoleSN":{"desc":"工作流角色编号","type":"string"},"wFRoleType":{"desc":"工作流角色类型","type":"string","enum":{"USERGROUP":"用户组","CUSTOM":"自定义","DEDATASET":"实体数据集合","ORG":"当前组织","PORG":"当前组织父组织","ORGSECTOR":"当前部门","PORGSECTOR":"当前部门父部门","ORGGROUP":"机构组","ORGSECTORGROUP":"部门组","ORGUSERGROUP":"机构人员组","ORGSECTORUSERGROUP":"部门人员组","ORGADMIN":"当前组织管理员","ORGSECTORADMIN":"当前部门管理员"}}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFRouteLink.json b/resources/model/wf/IPSWFRouteLink.json new file mode 100644 index 0000000..56e8112 --- /dev/null +++ b/resources/model/wf/IPSWFRouteLink.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFLink"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFStartProcess.json b/resources/model/wf/IPSWFStartProcess.json new file mode 100644 index 0000000..33537d3 --- /dev/null +++ b/resources/model/wf/IPSWFStartProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFProcess"],"formCodeName":{"desc":"操作表单标记","type":"string"},"mobFormCodeName":{"desc":"移动端操作表单标记","type":"string"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFTimeoutLink.json b/resources/model/wf/IPSWFTimeoutLink.json new file mode 100644 index 0000000..56e8112 --- /dev/null +++ b/resources/model/wf/IPSWFTimeoutLink.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFLink"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFTimerEventProcess.json b/resources/model/wf/IPSWFTimerEventProcess.json new file mode 100644 index 0000000..f769478 --- /dev/null +++ b/resources/model/wf/IPSWFTimerEventProcess.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWFProcess"]} \ No newline at end of file diff --git a/resources/model/wf/IPSWFUtilUIAction.json b/resources/model/wf/IPSWFUtilUIAction.json new file mode 100644 index 0000000..f480794 --- /dev/null +++ b/resources/model/wf/IPSWFUtilUIAction.json @@ -0,0 +1 @@ +{"extends":["/IPSModelObject"],"getPSDEUIActionId":{"desc":"界面行为标识","type":"string"},"getPSWorkflowId":{"desc":"工作流标识","type":"string"},"utilType":{"desc":"功能类型","type":"string","enum":{"SENDBACK":"回退","SUPPLYINFO":"补充信息","ADDSTEPBEFORE":"前加签","ADDSTEPAFTER":"后加签","TAKEADVICE":"征求意见","SENDCOPY":"抄送","REASSIGN":"转办","USERACTION":"用户自定义","USERACTION2":"用户自定义2","USERACTION3":"用户自定义3","USERACTION4":"用户自定义4","USERACTION5":"用户自定义5","USERACTION6":"用户自定义6"}}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFVersion.json b/resources/model/wf/IPSWFVersion.json new file mode 100644 index 0000000..2082c4e --- /dev/null +++ b/resources/model/wf/IPSWFVersion.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWorkflowObject","/IPSModelObject"],"codeName":{"desc":"代码标识","type":"string"},"psWFLinks":{"desc":"流程连接集合","type":"array","schema":"/wf/IPSWFLink"},"psWFProcesses":{"desc":"流程处理集合","type":"array","schema":"/wf/IPSWFProcess"},"psWorkflow":{"desc":"工作流","type":"object","schema":"/wf/IPSWorkflow"},"startPSWFProcess":{"desc":"开始处理","type":"object","schema":"/wf/IPSWFProcess"},"wFCodeName":{"desc":"工作流代码标识","type":"string"},"wFVersion":{"desc":"版本","type":"number"},"hasMobStartView":{"desc":"有移动端流程启动视图","type":"boolean"},"hasStartView":{"desc":"有流程启动视图","type":"boolean"},"valid":{"desc":"是否启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWFWorkTime.json b/resources/model/wf/IPSWFWorkTime.json new file mode 100644 index 0000000..79fe300 --- /dev/null +++ b/resources/model/wf/IPSWFWorkTime.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"psSystemModule":{"desc":"系统模块","type":"object","schema":"/system/IPSSystemModule"},"userData":{"desc":"工作时间数据","type":"string"},"userData2":{"desc":"工作时间数据2","type":"string"},"wFWorkTimeSN":{"desc":"工作时间编号","type":"string"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWorkflow.json b/resources/model/wf/IPSWorkflow.json new file mode 100644 index 0000000..a3e8313 --- /dev/null +++ b/resources/model/wf/IPSWorkflow.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"},"entityWFErrorState":{"desc":"实体流程错误状态值","type":"string"},"entityWFFinishState":{"desc":"实体流程结束状态值","type":"string"},"entityWFState":{"desc":"实体流程中状态值","type":"string"},"logicName":{"desc":"逻辑名称","type":"string"},"namePSLanguageRes":{"desc":"名称语言资源","type":"object","schema":"/res/IPSLanguageRes"},"psSystemModule":{"desc":"系统模块","type":"object","schema":"/system/IPSSystemModule"},"psWFDEs":{"desc":"流程实体集合","type":"array","schema":"/wf/IPSWFDE"},"psWFVersions":{"desc":"流程版本集合","type":"array","schema":"/wf/IPSWFVersion"},"wFEngineCat":{"desc":"流程引擎类别","type":"string"},"wFEngineType":{"desc":"流程引擎类型","type":"string"},"wFProxyMode":{"desc":"工作流代理模式","type":"number","enum":{"0":"(不使用)","1":"使用流程代理服务(客户端)","2":"提供流程代理服务(服务端)","3":"提供流程代理服务(服务端及客户端)"}},"wFSN":{"desc":"工作流编号","type":"string"},"wFType":{"desc":"工作流类型","type":"string","enum":{"ORG":"机构流程","ORGSECTOR":"部门流程","DEFAULT":"默认"}},"useRemoteEngine":{"desc":"使用远程引擎","type":"boolean"},"useWFProxyApp":{"desc":"使用工作流代理应用","type":"boolean"},"valid":{"desc":"启用","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/wf/IPSWorkflowObject.json b/resources/model/wf/IPSWorkflowObject.json new file mode 100644 index 0000000..0b278fa --- /dev/null +++ b/resources/model/wf/IPSWorkflowObject.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"],"psWorkflow":{"type":"object","schema":"/wf/IPSWorkflow"}} \ No newline at end of file diff --git a/resources/model/wf/uiaction/IPSWFUIAction.json b/resources/model/wf/uiaction/IPSWFUIAction.json new file mode 100644 index 0000000..3699d5c --- /dev/null +++ b/resources/model/wf/uiaction/IPSWFUIAction.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWorkflowObject","/view/IPSUIAction"],"frontPSAppView":{"desc":"前端应用视图","type":"object","schema":"/app/view/IPSAppView"},"saveTargetFirst":{"desc":"先保存目标数据","type":"boolean"}} \ No newline at end of file diff --git a/resources/model/wf/uiaction/IPSWFUIActionGroup.json b/resources/model/wf/uiaction/IPSWFUIActionGroup.json new file mode 100644 index 0000000..672dbbb --- /dev/null +++ b/resources/model/wf/uiaction/IPSWFUIActionGroup.json @@ -0,0 +1 @@ +{"extends":["/wf/IPSWorkflowObject","/view/IPSUIActionGroup"]} \ No newline at end of file diff --git a/resources/model/wf/uiaction/IPSWFUIActionGroupDetail.json b/resources/model/wf/uiaction/IPSWFUIActionGroupDetail.json new file mode 100644 index 0000000..ced47b0 --- /dev/null +++ b/resources/model/wf/uiaction/IPSWFUIActionGroupDetail.json @@ -0,0 +1 @@ +{"extends":["/view/IPSUIActionGroupDetail"]} \ No newline at end of file diff --git a/resources/model/wx/IPSWXAccount.json b/resources/model/wx/IPSWXAccount.json new file mode 100644 index 0000000..d6fd6a2 --- /dev/null +++ b/resources/model/wx/IPSWXAccount.json @@ -0,0 +1 @@ +{"codeName":{"desc":"代码标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/wx/IPSWXAccountObject.json b/resources/model/wx/IPSWXAccountObject.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/wx/IPSWXAccountObject.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/resources/model/wx/IPSWXEntApp.json b/resources/model/wx/IPSWXEntApp.json new file mode 100644 index 0000000..851176b --- /dev/null +++ b/resources/model/wx/IPSWXEntApp.json @@ -0,0 +1 @@ +{"extends":["/wx/IPSWXAccountObject","/IPSObject"],"codeName":{"desc":"代码标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/wx/IPSWXLogic.json b/resources/model/wx/IPSWXLogic.json new file mode 100644 index 0000000..dce092d --- /dev/null +++ b/resources/model/wx/IPSWXLogic.json @@ -0,0 +1 @@ +{"extends":["/wx/IPSWXAccountObject"],"codeName":{"desc":"代码标识","type":"string"}} \ No newline at end of file diff --git a/resources/model/wx/IPSWXMenu.json b/resources/model/wx/IPSWXMenu.json new file mode 100644 index 0000000..0af2708 --- /dev/null +++ b/resources/model/wx/IPSWXMenu.json @@ -0,0 +1 @@ +{"extends":["/wx/IPSWXAccountObject","/IPSObject"]} \ No newline at end of file diff --git a/resources/model/wx/IPSWXMenuFunc.json b/resources/model/wx/IPSWXMenuFunc.json new file mode 100644 index 0000000..a848f4e --- /dev/null +++ b/resources/model/wx/IPSWXMenuFunc.json @@ -0,0 +1 @@ +{"extends":["/wx/IPSWXAccountObject"]} \ No newline at end of file diff --git a/resources/model/wx/IPSWXMenuItem.json b/resources/model/wx/IPSWXMenuItem.json new file mode 100644 index 0000000..1cc3ef0 --- /dev/null +++ b/resources/model/wx/IPSWXMenuItem.json @@ -0,0 +1 @@ +{"extends":["/IPSObject"]} \ No newline at end of file diff --git a/src/interface/index.ts b/src/interface/index.ts new file mode 100644 index 0000000..90bbd6e --- /dev/null +++ b/src/interface/index.ts @@ -0,0 +1 @@ +export { ModelItem } from './model-item/model-item'; diff --git a/src/interface/model-item/model-item.ts b/src/interface/model-item/model-item.ts new file mode 100644 index 0000000..2601c17 --- /dev/null +++ b/src/interface/model-item/model-item.ts @@ -0,0 +1,42 @@ +/** + * 模型参数项 + * + * @author chitanda + * @date 2022-01-19 15:01:39 + * @export + * @interface ModelItem + */ +export interface ModelItem { + /** + * 参数描述 + * + * @author chitanda + * @date 2022-01-19 15:01:57 + * @type {string} + */ + desc: string; + /** + * 值类型 + * + * @author chitanda + * @date 2022-01-19 15:01:29 + * @type {string} + */ + type: string; + /** + * 当为对象时,对应的 json 文件路径。如果已加载则是对应的 json 对象 + * + * @author chitanda + * @date 2022-01-19 18:01:32 + * @type {(string | IModel)} + */ + schema?: string | IModel; + /** + * 代码表 + * + * @author chitanda + * @date 2022-01-19 15:01:32 + * @type {Record[]} + */ + enum?: Record[]; +} diff --git a/src/model-completion-item.ts b/src/model-completion-item.ts index a23bf2c..ad51d7f 100644 --- a/src/model-completion-item.ts +++ b/src/model-completion-item.ts @@ -1,4 +1,5 @@ -import { Command, CompletionItem, CompletionItemKind, CompletionItemLabel, CompletionItemTag, MarkdownString, Range, SnippetString, TextEdit } from 'vscode'; +import { CompletionItem, CompletionItemKind } from 'vscode'; +import { ModelItem } from './interface'; /** * 适应项 @@ -17,7 +18,17 @@ export class ModelCompletionItem extends CompletionItem { * @date 2022-01-10 18:01:26 * @param {string} text 属性名称 */ - constructor(text: string) { - super(text, CompletionItemKind.Field); + constructor(key: string, modelItem: ModelItem) { + super({ label: key, description: modelItem.desc }); + switch (modelItem.type) { + case 'object': + this.kind = CompletionItemKind.Class; + break; + case 'array': + this.kind = CompletionItemKind.Class; + break; + default: + this.kind = CompletionItemKind.Field; + } } } diff --git a/src/model-completion-provider.ts b/src/model-completion-provider.ts index 55d656a..5f77008 100644 --- a/src/model-completion-provider.ts +++ b/src/model-completion-provider.ts @@ -15,6 +15,8 @@ import { last, nth } from 'lodash'; import { ContextTag, ContextItem, ContextModel } from './context'; import { Model } from './model'; import { eachEndTag, eachTag, helperVariableReg, withEndTag, withTag } from './reg-exp'; +import { ModelItem } from './interface'; +import { ModelCompletionItem } from './model-completion-item'; /** * 模板模型自动填充 @@ -55,7 +57,7 @@ export class ModelCompletionProvider implements CompletionItemProvider { _context: CompletionContext, ): ProviderResult> { this.contexts = []; - const result: Set = new Set(); + const result: Map = new Map(); // 当前光标所在位置的行 const line = document.lineAt(position); // 行内容 @@ -64,7 +66,7 @@ export class ModelCompletionProvider implements CompletionItemProvider { const lineTextBeforeCursor = lineText.substring(0, position.character); const variable = lineTextBeforeCursor.substring(lineTextBeforeCursor.lastIndexOf('{{'), lineTextBeforeCursor.length); // 当是助手中时,获取助手中的第一组变量 - const reg = helperVariableReg.exec(variable); + const reg = new RegExp(helperVariableReg).exec(variable) || /(?<={{)(.*)/.exec(variable); // 内容中是否包含开始标签 if (variable.indexOf('{{') !== -1) { // 当为结束标签 或者 助手的前半部分时忽略 @@ -79,38 +81,44 @@ export class ModelCompletionProvider implements CompletionItemProvider { // 当次计算域中的总模型控制器 const modelController = new ContextModel(); // 加载全局模型 - const globalModel = this.model.getModel('global.json'); + const globalModel = this.model.getModel('/global'); modelController.add(globalModel); // 光标的位置 const offset = document.offsetAt(position); // 当前激活的标签域 const active = this.contexts.find(ctx => ctx.isCurrentDomain(offset)); - if (active) { - // 根据便宜计算当前激活标签域下的所有上下文标签 - const tags = active.calcCompletionDomain(offset); - for (let i = 0; i < tags.length; i++) { - const tag = tags[i]; - // 分割标签内变量 - const keys = tag.variable.split('.'); - for (let j = 0; j < keys.length; j++) { - const key = keys[j]; - // 在作用域内查找变量的值 - const val = modelController.getModel(key); - if (!val) { - break; + if (active || (reg && reg[0].indexOf('.') !== -1)) { + let tags: ContextTag[] = []; + if (active) { + // 根据便宜计算当前激活标签域下的所有上下文标签 + tags = active.calcCompletionDomain(offset); + for (let i = 0; i < tags.length; i++) { + const tag = tags[i]; + // 分割标签内变量 + const keys = tag.variable.split('.'); + for (let j = 0; j < keys.length; j++) { + const key = keys[j]; + // 在作用域内查找变量的值 + const modelItem = modelController.getModel(key) as ModelItem; + if (!modelItem) { + break; + } + // 如果指定的是 json 文件,去加载文件 + if (modelItem.schema && typeof modelItem.schema === 'string') { + const model = this.model.getModel(modelItem.schema); + modelItem.schema = model; + } + if (typeof modelItem.schema === 'object') { + modelController.add(modelItem.schema); + } } - // 如果指定的是 json 文件,去加载文件 - if (typeof val === 'string' && val.endsWith('.json')) { - const model = this.model.getModel(val); - modelController.add(model); + // 如果有定义别名,在父级域下补充变量指向当前变量 + if (keys.length > 1 && tag.isAlias()) { + const model = modelController.getModel(keys[keys.length - 1]); + const parentModel = nth(modelController.models, -2)!; + parentModel[tag.alias] = model; } } - // 如果有定义别名,在父级域下补充变量指向当前变量 - if (keys.length > 0 && tag.isAlias()) { - const model = nth(modelController.models, -1)!; - const parentModel = nth(modelController.models, -2)!; - parentModel[tag.alias] = model; - } } // 默认填充全局模型 let model: IModel = modelController.getGlobalModel(); @@ -124,16 +132,16 @@ export class ModelCompletionProvider implements CompletionItemProvider { // 遍历当前变量的所有层级,未加载时。加载到堆栈中 for (let i = 0; i < keys.length - 1; i++) { const key = keys[i]; - const val = modelController.getModel(key); - if (val) { - if (typeof val === 'string') { - if (val.endsWith('.json')) { - const model = this.model.getModel(val); - modelController.add(model); - } - } else { - model = val; + const modelItem = modelController.getModel(key) as IModel; + if (modelItem && modelItem.schema) { + if (typeof modelItem.schema === 'string') { + const model = this.model.getModel(modelItem.schema); + modelItem.schema = model; } + modelController.add(modelItem.schema); + model = modelItem.schema; + } else { + model = {}; } } // 当前变量的最后一个层级 @@ -144,19 +152,19 @@ export class ModelCompletionProvider implements CompletionItemProvider { if (key !== '' && modelKey.indexOf(key) === -1) { return; } - result.add(modelKey); + result.set(modelKey, model[modelKey]); }); // 当 key 只有一个层级时 if (keys.length === 1) { // 将上一个层级的模型添加到提示列表中 const lastModel = modelController.getLastModel(); Object.keys(lastModel).forEach(key => { - result.add(key); + result.set(key, lastModel[key]); }); // 将别名添加到提示列表中 tags.forEach(tag => { if (tag.isAlias()) { - result.add(tag.alias); + result.set(tag.alias, { desc: tag.alias, type: 'object' }); } }); } @@ -164,12 +172,16 @@ export class ModelCompletionProvider implements CompletionItemProvider { // 无激活的标签域,则提示全局模型 const model = modelController.getGlobalModel(); Object.keys(model).forEach(key => { - result.add(key); + result.set(key, model[key]); }); } } } - return Array.from(result.values()).map(str => new CompletionItem(str, CompletionItemKind.Field)); + const arr: ModelCompletionItem[] = []; + result.forEach((value, key) => { + arr.push(new ModelCompletionItem(key, value)); + }); + return arr; } /** @@ -185,19 +197,23 @@ export class ModelCompletionProvider implements CompletionItemProvider { const arr: ContextTag[] = []; let item: RegExpExecArray | null; // 匹配所有 each 开始 - while ((item = eachTag.exec(text))) { + const eachStart = new RegExp(eachTag); + while ((item = eachStart.exec(text))) { arr.push(new ContextTag('each', item)); } // 匹配所有 each 结束 - while ((item = eachEndTag.exec(text))) { + const eachEnd = new RegExp(eachEndTag); + while ((item = eachEnd.exec(text))) { arr.push(new ContextTag('eachEnd', item)); } // 匹配所有 with 开始 - while ((item = withTag.exec(text))) { + const withStart = new RegExp(withTag); + while ((item = withStart.exec(text))) { arr.push(new ContextTag('with', item)); } // 匹配所有 with 结束 - while ((item = withEndTag.exec(text))) { + const withEnd = new RegExp(withEndTag); + while ((item = withEnd.exec(text))) { arr.push(new ContextTag('withEnd', item)); } // 按位置进行排序 diff --git a/src/model/index.ts b/src/model/index.ts index 4f10b4e..16c3bde 100644 --- a/src/model/index.ts +++ b/src/model/index.ts @@ -2,6 +2,9 @@ import { readFileSync } from 'fs-extra'; import { merge } from 'lodash'; import { join } from 'path'; import { ExtensionContext } from 'vscode'; +import { ModelItem } from '../interface'; + +export type ModelJson = { [key: string]: ModelItem | string[] }; /** * 模型对象加载帮助 @@ -15,17 +18,32 @@ export class Model { private static readonly instance: Model = new Model(); /** - * 文件内容缓存 + * 模型描述文件内容缓存 * * @author chitanda - * @date 2022-01-13 14:01:16 + * @date 2022-01-19 15:01:30 * @protected - * @type {Map} + * @type {Map} */ - protected jsonCache: Map = new Map(); + protected jsonCache: Map = new Map(); + /** + * 插件上下文 + * + * @author chitanda + * @date 2022-01-19 15:01:26 + * @protected + * @type {ExtensionContext} + */ protected context!: ExtensionContext; + /** + * 设置导出上下文 + * + * @author chitanda + * @date 2022-01-19 15:01:33 + * @param {ExtensionContext} context + */ setContext(context: ExtensionContext) { this.context = context; } @@ -34,11 +52,11 @@ export class Model { * 获取指定路径模型内容 * * @author chitanda - * @date 2022-01-13 14:01:05 + * @date 2022-01-19 15:01:56 * @param {string} jsonPath - * @return {*} {IModel} + * @return {*} {ModelJson} */ - getModel(jsonPath: string): IModel { + getModel(jsonPath: string): ModelJson { return this.getJson(jsonPath); } @@ -52,7 +70,7 @@ export class Model { * @return {*} {IModel} */ protected getJson(jsonPath: string): IModel { - const path = join(this.context.extensionPath, 'resources/model', jsonPath); + const path = this.calcPath(jsonPath); if (this.jsonCache.has(path)) { return this.jsonCache.get(path)!; } @@ -71,21 +89,38 @@ export class Model { * @author chitanda * @date 2022-01-13 14:01:50 * @protected - * @param {IModel} data - * @return {*} {IModel} + * @param {ModelJson} data + * @return {*} {ModelJson} */ - protected fillExtends(data: IModel): IModel { - if (data.extends && data.extends.length > 0) { - const extendPath = join(this.context.extensionPath, 'resources/model', data.extends); - const extendStr = readFileSync(extendPath, 'utf-8'); - let extendData = JSON.parse(extendStr); - delete data.extends; - extendData = this.fillExtends(extendData); - data = merge(data, extendData); + protected fillExtends(data: ModelJson): ModelJson { + const exts = data.extends as string[]; + if (exts && exts.length > 0) { + for (let i = 0; i < exts.length; i++) { + const item = exts[i]; + const extendPath = this.calcPath(item); + const extendStr = readFileSync(extendPath, 'utf-8'); + let extendData = JSON.parse(extendStr); + delete data.extends; + extendData = this.fillExtends(extendData); + data = merge(data, extendData); + } } return data; } + /** + * 计算文件路径 + * + * @author chitanda + * @date 2022-01-19 15:01:33 + * @protected + * @param {string} path + * @return {*} {string} + */ + protected calcPath(path: string): string { + return join(this.context.extensionPath, 'resources/model', `.${path}.json`); + } + /** * 实例 * -- Gitee From e346bee6aac8bd4628d342fbb85b8db7e5b39606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E5=8F=8D=E7=94=B0=E4=B8=B7?= <26603306@qq.com> Date: Wed, 9 Feb 2022 16:26:28 +0800 Subject: [PATCH 10/10] =?UTF-8?q?add:=20=E8=A1=A5=E5=85=85=E3=80=90?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E3=80=81readme=E3=80=81changeLog=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc copy.json | 45 -- .gitignore | 2 + .vscodeignore | 2 + CHANGELOG.md | 13 +- README.md | 71 +--- package.json | 23 +- pnpm-lock.yaml | 400 +++++++++++------- resources/images/preview.gif | Bin 0 -> 591711 bytes resources/model/action.json | 3 + resources/model/api.json | 3 + resources/model/apiDto.json | 3 + resources/model/apiDtoField.json | 3 + resources/model/apiEntity.json | 3 + resources/model/apiMethod.json | 3 + resources/model/app.json | 4 +- resources/model/appEntity.json | 4 +- resources/model/ctrl.json | 2 +- resources/model/dataSet.json | 3 + resources/model/entity.json | 3 + resources/model/extends/ActionModel.json | 21 + resources/model/extends/ApiDtoFieldModel.json | 33 ++ resources/model/extends/ApiDtoModel.json | 22 + resources/model/extends/ApiEntityModel.json | 21 + resources/model/extends/ApiMethodModel.json | 40 ++ resources/model/extends/ApiModel.json | 14 + resources/model/extends/AppEntityModel.json | 61 +++ resources/model/extends/AppModel.json | 42 ++ resources/model/extends/CtrlModel.json | 256 +++++++++++ resources/model/extends/DataSetModel.json | 36 ++ resources/model/extends/EntityModel.json | 130 ++++++ resources/model/extends/FieldModel.json | 74 ++++ resources/model/extends/PageModel.json | 111 +++++ .../model/extends/RelationshipModel.json | 41 ++ resources/model/extends/SystemModel.json | 75 ++++ resources/model/extends/WorkflowModel.json | 40 ++ resources/model/field.json | 3 + resources/model/page.json | 3 +- resources/model/relationship.json | 3 + resources/model/system.json | 3 +- resources/model/workflow.json | 3 + resources/xlsx/model-map.xlsx | Bin 0 -> 26784 bytes src/model-completion-provider.ts | 1 - utils/generate-json.js | 123 ++++++ 43 files changed, 1442 insertions(+), 304 deletions(-) delete mode 100644 .eslintrc copy.json create mode 100644 resources/images/preview.gif create mode 100644 resources/model/action.json create mode 100644 resources/model/api.json create mode 100644 resources/model/apiDto.json create mode 100644 resources/model/apiDtoField.json create mode 100644 resources/model/apiEntity.json create mode 100644 resources/model/apiMethod.json create mode 100644 resources/model/dataSet.json create mode 100644 resources/model/entity.json create mode 100644 resources/model/extends/ActionModel.json create mode 100644 resources/model/extends/ApiDtoFieldModel.json create mode 100644 resources/model/extends/ApiDtoModel.json create mode 100644 resources/model/extends/ApiEntityModel.json create mode 100644 resources/model/extends/ApiMethodModel.json create mode 100644 resources/model/extends/ApiModel.json create mode 100644 resources/model/extends/AppEntityModel.json create mode 100644 resources/model/extends/AppModel.json create mode 100644 resources/model/extends/CtrlModel.json create mode 100644 resources/model/extends/DataSetModel.json create mode 100644 resources/model/extends/EntityModel.json create mode 100644 resources/model/extends/FieldModel.json create mode 100644 resources/model/extends/PageModel.json create mode 100644 resources/model/extends/RelationshipModel.json create mode 100644 resources/model/extends/SystemModel.json create mode 100644 resources/model/extends/WorkflowModel.json create mode 100644 resources/model/field.json create mode 100644 resources/model/relationship.json create mode 100644 resources/model/workflow.json create mode 100644 resources/xlsx/model-map.xlsx create mode 100644 utils/generate-json.js diff --git a/.eslintrc copy.json b/.eslintrc copy.json deleted file mode 100644 index 203a65b..0000000 --- a/.eslintrc copy.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "extends": [ - "prettier", - "plugin:@typescript-eslint/recommended" - ], - "env": { - "browser": false, - "node": true - }, - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "@typescript-eslint/naming-convention": "warn", - "@typescript-eslint/semi": "warn", - "curly": "warn", - "eqeqeq": "warn", - "no-throw-literal": "warn", - "semi": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-unused-vars": [ - 0, - { - "varsIgnorePattern": "_" - } - ], - "prefer-rest-params": "off", - "no-var": "off" - }, - "ignorePatterns": [ - "out", - "dist", - "**/*.d.ts" - ] -} diff --git a/.gitignore b/.gitignore index cb2646f..0827b6d 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ dist/ out/ // 打包文件 *.vsix + +resources/xlsx/~$model-map.xlsx diff --git a/.vscodeignore b/.vscodeignore index 3899967..07cfe3a 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -8,3 +8,5 @@ vsc-extension-quickstart.md **/.eslintrc.json **/*.map **/*.ts +utils/** +resources/xlsx/** diff --git a/CHANGELOG.md b/CHANGELOG.md index b77e206..d6e1a16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,12 @@ -# Change Log +# 版本变更日志 -All notable changes to the "ibizmodelcompletion" extension will be documented in this file. +这个项目的所有关键变化都将记录在此文件中. -Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +此日志格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/), +并且此项目遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/). -## [Unreleased] +## [0.0.1] - 2022-02-09 -- Initial release \ No newline at end of file +### Added + +- 基本智能提示功能实现 \ No newline at end of file diff --git a/README.md b/README.md index de1a32b..d6e101d 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,7 @@ -# ibizmodelcompletion README +# iBizModeling Handlebars -This is the README for your extension "ibizmodelcompletion". After writing up a brief description, we recommend including the following sections. + iBizModeling Handlebars 模板智能提示,智能计算在编写模板时的可用属性 -## Features +## 效果 -Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. - -For example if there is an image subfolder under your extension project workspace: - -\!\[feature X\]\(images/feature-x.png\) - -> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. - -## Requirements - -If you have any requirements or dependencies, add a section describing those and how to install and configure them. - -## Extension Settings - -Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. - -For example: - -This extension contributes the following settings: - -* `myExtension.enable`: enable/disable this extension -* `myExtension.thing`: set to `blah` to do something - -## Known Issues - -Calling out known issues can help limit users opening duplicate issues against your extension. - -## Release Notes - -Users appreciate release notes as you update your extension. - -### 1.0.0 - -Initial release of ... - -### 1.0.1 - -Fixed issue #. - -### 1.1.0 - -Added features X, Y, and Z. - ------------------------------------------------------------------------------------------------------------ -## Following extension guidelines - -Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension. - -* [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines) - -## Working with Markdown - -**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: - -* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) -* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) -* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets - -### For more information - -* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) -* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) - -**Enjoy!** + ![preview](./resources/images/preview.gif) \ No newline at end of file diff --git a/package.json b/package.json index 95f565c..feb0ad9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "ibiz-model-completion", - "displayName": "IBizModelCompletion", + "name": "ibiz-modeling-handlebars-completion", + "displayName": "IBizModelingHandlebarsCompletion", "description": "iBizSys 模板模型自动补全", "publisher": "ibizlab", "version": "0.0.1", @@ -45,22 +45,23 @@ "lodash": "^4.17.21" }, "devDependencies": { + "node-xlsx": "^0.21.0", "@types/fs-extra": "^9.0.13", "@types/glob": "^7.2.0", "@types/lodash": "^4.14.178", - "@types/mocha": "^9.0.0", + "@types/mocha": "^9.1.0", "@types/node": "17.x", - "@types/vscode": "^1.63.1", - "@typescript-eslint/eslint-plugin": "^5.9.1", - "@typescript-eslint/parser": "^5.9.1", - "@vscode/test-electron": "^2.0.3", - "eslint": "^8.6.0", + "@types/vscode": "^1.64.0", + "@typescript-eslint/eslint-plugin": "^5.11.0", + "@typescript-eslint/parser": "^5.11.0", + "@vscode/test-electron": "^2.1.2", + "eslint": "^8.8.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "glob": "^7.2.0", - "mocha": "^9.1.3", + "mocha": "^9.2.0", "prettier": "^2.5.1", - "typescript": "^4.5.4", - "vsce": "^2.6.3" + "typescript": "^4.5.5", + "vsce": "^2.6.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 144ac1b..ffd4aca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,22 +4,23 @@ specifiers: '@types/fs-extra': ^9.0.13 '@types/glob': ^7.2.0 '@types/lodash': ^4.14.178 - '@types/mocha': ^9.0.0 + '@types/mocha': ^9.1.0 '@types/node': 17.x - '@types/vscode': ^1.63.1 - '@typescript-eslint/eslint-plugin': ^5.9.1 - '@typescript-eslint/parser': ^5.9.1 - '@vscode/test-electron': ^2.0.3 - eslint: ^8.6.0 + '@types/vscode': ^1.64.0 + '@typescript-eslint/eslint-plugin': ^5.11.0 + '@typescript-eslint/parser': ^5.11.0 + '@vscode/test-electron': ^2.1.2 + eslint: ^8.8.0 eslint-config-prettier: ^8.3.0 eslint-plugin-prettier: ^4.0.0 fs-extra: ^10.0.0 glob: ^7.2.0 lodash: ^4.17.21 - mocha: ^9.1.3 + mocha: ^9.2.0 + node-xlsx: ^0.21.0 prettier: ^2.5.1 - typescript: ^4.5.4 - vsce: ^2.6.3 + typescript: ^4.5.5 + vsce: ^2.6.7 dependencies: fs-extra: 10.0.0 @@ -29,20 +30,21 @@ devDependencies: '@types/fs-extra': 9.0.13 '@types/glob': 7.2.0 '@types/lodash': 4.14.178 - '@types/mocha': 9.0.0 + '@types/mocha': 9.1.0 '@types/node': 17.0.8 - '@types/vscode': 1.63.1 - '@typescript-eslint/eslint-plugin': 5.9.1_b7b2e42b32ee097737cd3e626b10847b - '@typescript-eslint/parser': 5.9.1_eslint@8.6.0+typescript@4.5.4 - '@vscode/test-electron': 2.0.3 - eslint: 8.6.0 - eslint-config-prettier: 8.3.0_eslint@8.6.0 - eslint-plugin-prettier: 4.0.0_1c588f61426b1faf18812943f1678311 + '@types/vscode': 1.64.0 + '@typescript-eslint/eslint-plugin': 5.11.0_de5a1ddccd75ca1e499b8b8491d3dcba + '@typescript-eslint/parser': 5.11.0_eslint@8.8.0+typescript@4.5.5 + '@vscode/test-electron': 2.1.2 + eslint: 8.8.0 + eslint-config-prettier: 8.3.0_eslint@8.8.0 + eslint-plugin-prettier: 4.0.0_43197c8d12d1d439034cfcf65e1c48c2 glob: 7.2.0 - mocha: 9.1.3 + mocha: 9.2.0 + node-xlsx: 0.21.0 prettier: 2.5.1 - typescript: 4.5.4 - vsce: 2.6.3 + typescript: 4.5.5 + vsce: 2.6.7 packages: @@ -129,20 +131,20 @@ packages: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true - /@types/mocha/9.0.0: - resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} + /@types/mocha/9.1.0: + resolution: {integrity: sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==} dev: true /@types/node/17.0.8: resolution: {integrity: sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==} dev: true - /@types/vscode/1.63.1: - resolution: {integrity: sha512-Z+ZqjRcnGfHP86dvx/BtSwWyZPKQ/LBdmAVImY82TphyjOw2KgTKcp7Nx92oNwCTsHzlshwexAG/WiY2JuUm3g==} + /@types/vscode/1.64.0: + resolution: {integrity: sha512-bSlAWz5WtcSL3cO9tAT/KpEH9rv5OBnm93OIIFwdCshaAiqr2bp1AUyEwW9MWeCvZBHEXc3V0fTYVdVyzDNwHA==} dev: true - /@typescript-eslint/eslint-plugin/5.9.1_b7b2e42b32ee097737cd3e626b10847b: - resolution: {integrity: sha512-Xv9tkFlyD4MQGpJgTo6wqDqGvHIRmRgah/2Sjz1PUnJTawjHWIwBivUE9x0QtU2WVii9baYgavo/bHjrZJkqTw==} + /@typescript-eslint/eslint-plugin/5.11.0_de5a1ddccd75ca1e499b8b8491d3dcba: + resolution: {integrity: sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -152,42 +154,24 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 5.9.1_eslint@8.6.0+typescript@4.5.4 - '@typescript-eslint/parser': 5.9.1_eslint@8.6.0+typescript@4.5.4 - '@typescript-eslint/scope-manager': 5.9.1 - '@typescript-eslint/type-utils': 5.9.1_eslint@8.6.0+typescript@4.5.4 + '@typescript-eslint/parser': 5.11.0_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/scope-manager': 5.11.0 + '@typescript-eslint/type-utils': 5.11.0_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/utils': 5.11.0_eslint@8.8.0+typescript@4.5.5 debug: 4.3.3 - eslint: 8.6.0 + eslint: 8.8.0 functional-red-black-tree: 1.0.1 ignore: 5.2.0 regexpp: 3.2.0 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.5.4 - typescript: 4.5.4 + tsutils: 3.21.0_typescript@4.5.5 + typescript: 4.5.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.9.1_eslint@8.6.0+typescript@4.5.4: - resolution: {integrity: sha512-cb1Njyss0mLL9kLXgS/eEY53SZQ9sT519wpX3i+U457l2UXRDuo87hgKfgRazmu9/tQb0x2sr3Y0yrU+Zz0y+w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@types/json-schema': 7.0.9 - '@typescript-eslint/scope-manager': 5.9.1 - '@typescript-eslint/types': 5.9.1 - '@typescript-eslint/typescript-estree': 5.9.1_typescript@4.5.4 - eslint: 8.6.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.6.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/parser/5.9.1_eslint@8.6.0+typescript@4.5.4: - resolution: {integrity: sha512-PLYO0AmwD6s6n0ZQB5kqPgfvh73p0+VqopQQLuNfi7Lm0EpfKyDalchpVwkE+81k5HeiRrTV/9w1aNHzjD7C4g==} + /@typescript-eslint/parser/5.11.0_eslint@8.8.0+typescript@4.5.5: + resolution: {integrity: sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -196,26 +180,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.9.1 - '@typescript-eslint/types': 5.9.1 - '@typescript-eslint/typescript-estree': 5.9.1_typescript@4.5.4 + '@typescript-eslint/scope-manager': 5.11.0 + '@typescript-eslint/types': 5.11.0 + '@typescript-eslint/typescript-estree': 5.11.0_typescript@4.5.5 debug: 4.3.3 - eslint: 8.6.0 - typescript: 4.5.4 + eslint: 8.8.0 + typescript: 4.5.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.9.1: - resolution: {integrity: sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==} + /@typescript-eslint/scope-manager/5.11.0: + resolution: {integrity: sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.9.1 - '@typescript-eslint/visitor-keys': 5.9.1 + '@typescript-eslint/types': 5.11.0 + '@typescript-eslint/visitor-keys': 5.11.0 dev: true - /@typescript-eslint/type-utils/5.9.1_eslint@8.6.0+typescript@4.5.4: - resolution: {integrity: sha512-tRSpdBnPRssjlUh35rE9ug5HrUvaB9ntREy7gPXXKwmIx61TNN7+l5YKgi1hMKxo5NvqZCfYhA5FvyuJG6X6vg==} + /@typescript-eslint/type-utils/5.11.0_eslint@8.8.0+typescript@4.5.5: + resolution: {integrity: sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -224,22 +208,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 5.9.1_eslint@8.6.0+typescript@4.5.4 + '@typescript-eslint/utils': 5.11.0_eslint@8.8.0+typescript@4.5.5 debug: 4.3.3 - eslint: 8.6.0 - tsutils: 3.21.0_typescript@4.5.4 - typescript: 4.5.4 + eslint: 8.8.0 + tsutils: 3.21.0_typescript@4.5.5 + typescript: 4.5.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.9.1: - resolution: {integrity: sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==} + /@typescript-eslint/types/5.11.0: + resolution: {integrity: sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.9.1_typescript@4.5.4: - resolution: {integrity: sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==} + /@typescript-eslint/typescript-estree/5.11.0_typescript@4.5.5: + resolution: {integrity: sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -247,32 +231,50 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.9.1 - '@typescript-eslint/visitor-keys': 5.9.1 + '@typescript-eslint/types': 5.11.0 + '@typescript-eslint/visitor-keys': 5.11.0 debug: 4.3.3 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.5.4 - typescript: 4.5.4 + tsutils: 3.21.0_typescript@4.5.5 + typescript: 4.5.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/visitor-keys/5.9.1: - resolution: {integrity: sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==} + /@typescript-eslint/utils/5.11.0_eslint@8.8.0+typescript@4.5.5: + resolution: {integrity: sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/types': 5.9.1 - eslint-visitor-keys: 3.1.0 + '@types/json-schema': 7.0.9 + '@typescript-eslint/scope-manager': 5.11.0 + '@typescript-eslint/types': 5.11.0 + '@typescript-eslint/typescript-estree': 5.11.0_typescript@4.5.5 + eslint: 8.8.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.8.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.11.0: + resolution: {integrity: sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.11.0 + eslint-visitor-keys: 3.2.0 dev: true /@ungap/promise-all-settled/1.1.2: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true - /@vscode/test-electron/2.0.3: - resolution: {integrity: sha512-1QXF3hW2saWk01XRqh5CMtzdKZAfM27UO7eYnnx6gaqxwD1+TP4T5s8ACDgK5e9qvzOdMBMy75IVpJudBrDz4w==} + /@vscode/test-electron/2.1.2: + resolution: {integrity: sha512-INjJ0YA9RgR1B/xBl8P4sxww4Dy2996f4Xn5oGTFfC0c2Mm45y/1Id8xmfuoba6tR5i8zZaUIHfEYWe7Rt4uZA==} engines: {node: '>=8.9.3'} dependencies: http-proxy-agent: 4.0.1 @@ -297,6 +299,22 @@ packages: hasBin: true dev: true + /adler-32/1.2.0: + resolution: {integrity: sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + exit-on-epipe: 1.0.1 + printj: 1.1.2 + dev: true + + /adler-32/1.3.0: + resolution: {integrity: sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g==} + engines: {node: '>=0.8'} + dependencies: + printj: 1.2.3 + dev: true + /agent-base/6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -363,12 +381,6 @@ packages: readable-stream: 2.3.7 dev: true - /argparse/1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -482,6 +494,15 @@ packages: engines: {node: '>=10'} dev: true + /cfb/1.2.1: + resolution: {integrity: sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.0 + crc-32: 1.2.1 + printj: 1.3.1 + dev: true + /chainsaw/0.1.0: resolution: {integrity: sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=} dependencies: @@ -528,8 +549,8 @@ packages: tslib: 2.3.1 dev: true - /chokidar/3.5.2: - resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.2 @@ -560,6 +581,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: true + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -598,6 +624,15 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true + /crc-32/1.2.1: + resolution: {integrity: sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + exit-on-epipe: 1.0.1 + printj: 1.3.1 + dev: true + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -622,8 +657,8 @@ packages: engines: {node: '>= 6'} dev: true - /debug/4.3.2_supports-color@8.1.1: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -632,10 +667,9 @@ packages: optional: true dependencies: ms: 2.1.2 - supports-color: 8.1.1 dev: true - /debug/4.3.3: + /debug/4.3.3_supports-color@8.1.1: resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} peerDependencies: @@ -645,6 +679,7 @@ packages: optional: true dependencies: ms: 2.1.2 + supports-color: 8.1.1 dev: true /decamelize/4.0.0: @@ -740,15 +775,8 @@ packages: once: 1.4.0 dev: true - /enquirer/2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} - dependencies: - ansi-colors: 4.1.1 - dev: true - - /entities/2.0.3: - resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} + /entities/2.1.0: + resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} dev: true /entities/2.2.0: @@ -770,16 +798,16 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier/8.3.0_eslint@8.6.0: + /eslint-config-prettier/8.3.0_eslint@8.8.0: resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.6.0 + eslint: 8.8.0 dev: true - /eslint-plugin-prettier/4.0.0_1c588f61426b1faf18812943f1678311: + /eslint-plugin-prettier/4.0.0_43197c8d12d1d439034cfcf65e1c48c2: resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} engines: {node: '>=6.0.0'} peerDependencies: @@ -790,8 +818,8 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.6.0 - eslint-config-prettier: 8.3.0_eslint@8.6.0 + eslint: 8.8.0 + eslint-config-prettier: 8.3.0_eslint@8.8.0 prettier: 2.5.1 prettier-linter-helpers: 1.0.0 dev: true @@ -812,13 +840,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.6.0: + /eslint-utils/3.0.0_eslint@8.8.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.6.0 + eslint: 8.8.0 eslint-visitor-keys: 2.1.0 dev: true @@ -827,13 +855,13 @@ packages: engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.1.0: - resolution: {integrity: sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==} + /eslint-visitor-keys/3.2.0: + resolution: {integrity: sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.6.0: - resolution: {integrity: sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==} + /eslint/8.8.0: + resolution: {integrity: sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: @@ -844,11 +872,10 @@ packages: cross-spawn: 7.0.3 debug: 4.3.3 doctrine: 3.0.0 - enquirer: 2.3.6 escape-string-regexp: 4.0.0 eslint-scope: 7.1.0 - eslint-utils: 3.0.0_eslint@8.6.0 - eslint-visitor-keys: 3.1.0 + eslint-utils: 3.0.0_eslint@8.8.0 + eslint-visitor-keys: 3.2.0 espree: 9.3.0 esquery: 1.4.0 esutils: 2.0.3 @@ -857,7 +884,7 @@ packages: functional-red-black-tree: 1.0.1 glob-parent: 6.0.2 globals: 13.12.0 - ignore: 4.0.6 + ignore: 5.2.0 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 @@ -868,9 +895,7 @@ packages: minimatch: 3.0.4 natural-compare: 1.4.0 optionator: 0.9.1 - progress: 2.0.3 regexpp: 3.2.0 - semver: 7.3.5 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -885,7 +910,7 @@ packages: dependencies: acorn: 8.7.0 acorn-jsx: 5.3.2_acorn@8.7.0 - eslint-visitor-keys: 3.1.0 + eslint-visitor-keys: 3.2.0 dev: true /esquery/1.4.0: @@ -917,6 +942,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /exit-on-epipe/1.0.1: + resolution: {integrity: sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==} + engines: {node: '>=0.8'} + dev: true + /expand-template/2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} @@ -1000,6 +1030,11 @@ packages: resolution: {integrity: sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==} dev: true + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: true + /fs-constants/1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true @@ -1087,17 +1122,6 @@ packages: is-glob: 4.0.3 dev: true - /glob/7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob/7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} dependencies: @@ -1344,8 +1368,8 @@ packages: type-check: 0.4.0 dev: true - /linkify-it/2.2.0: - resolution: {integrity: sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==} + /linkify-it/3.0.3: + resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} dependencies: uc.micro: 1.0.6 dev: true @@ -1384,13 +1408,13 @@ packages: yallist: 4.0.0 dev: true - /markdown-it/10.0.0: - resolution: {integrity: sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==} + /markdown-it/12.3.2: + resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} hasBin: true dependencies: - argparse: 1.0.10 - entities: 2.0.3 - linkify-it: 2.2.0 + argparse: 2.0.1 + entities: 2.1.0 + linkify-it: 3.0.3 mdurl: 1.0.1 uc.micro: 1.0.6 dev: true @@ -1444,32 +1468,32 @@ packages: minimist: 1.2.5 dev: true - /mocha/9.1.3: - resolution: {integrity: sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==} + /mocha/9.2.0: + resolution: {integrity: sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==} engines: {node: '>= 12.0.0'} hasBin: true dependencies: '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 browser-stdout: 1.3.1 - chokidar: 3.5.2 - debug: 4.3.2_supports-color@8.1.1 + chokidar: 3.5.3 + debug: 4.3.3_supports-color@8.1.1 diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 - glob: 7.1.7 + glob: 7.2.0 growl: 1.10.5 he: 1.2.0 js-yaml: 4.1.0 log-symbols: 4.1.0 minimatch: 3.0.4 ms: 2.1.3 - nanoid: 3.1.25 + nanoid: 3.2.0 serialize-javascript: 6.0.0 strip-json-comments: 3.1.1 supports-color: 8.1.1 which: 2.0.2 - workerpool: 6.1.5 + workerpool: 6.2.0 yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 @@ -1487,8 +1511,8 @@ packages: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true - /nanoid/3.1.25: - resolution: {integrity: sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==} + /nanoid/3.2.0: + resolution: {integrity: sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true @@ -1511,6 +1535,14 @@ packages: resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} dev: true + /node-xlsx/0.21.0: + resolution: {integrity: sha512-MB+KcNCuRzwjgr17scpKiVTPd4Vbj3V+7QwKpqACGyJzhvC67xCQUbw2vYEIKtNfMfcLxgB2q2kEuRS8rmak9g==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + xlsx: 0.17.5 + dev: true + /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -1667,13 +1699,26 @@ packages: hasBin: true dev: true - /process-nextick-args/2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /printj/1.1.2: + resolution: {integrity: sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==} + engines: {node: '>=0.8'} + hasBin: true dev: true - /progress/2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} + /printj/1.2.3: + resolution: {integrity: sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA==} + engines: {node: '>=0.8'} + hasBin: true + dev: true + + /printj/1.3.1: + resolution: {integrity: sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==} + engines: {node: '>=0.8'} + hasBin: true + dev: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true /pump/3.0.0: @@ -1870,8 +1915,11 @@ packages: engines: {node: '>=8'} dev: true - /sprintf-js/1.0.3: - resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 dev: true /string-width/1.0.2: @@ -1993,14 +2041,14 @@ packages: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} dev: true - /tsutils/3.21.0_typescript@4.5.4: + /tsutils/3.21.0_typescript@4.5.5: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.5.4 + typescript: 4.5.5 dev: true /tunnel-agent/0.6.0: @@ -2034,8 +2082,8 @@ packages: underscore: 1.13.2 dev: true - /typescript/4.5.4: - resolution: {integrity: sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==} + /typescript/4.5.5: + resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -2086,8 +2134,8 @@ packages: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /vsce/2.6.3: - resolution: {integrity: sha512-PKfvAtG9rLT1evHiKOJpBHND1hUHOOf4lL7chZFp0KGu+Bpgcx3g3T5eq0d8Hmzd08zd3KJunsaA3iaNSmTU/A==} + /vsce/2.6.7: + resolution: {integrity: sha512-5dEtdi/yzWQbOU7JDUSOs8lmSzzkewBR5P122BUkmXE6A/DEdFsKNsg2773NGXJTwwF1MfsOgUR6QVF3cLLJNQ==} engines: {node: '>= 14'} hasBin: true dependencies: @@ -2099,7 +2147,7 @@ packages: hosted-git-info: 4.1.0 keytar: 7.7.0 leven: 3.1.0 - markdown-it: 10.0.0 + markdown-it: 12.3.2 mime: 1.6.0 minimatch: 3.0.4 parse-semver: 1.1.1 @@ -2127,13 +2175,23 @@ packages: string-width: 4.2.3 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: true + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /workerpool/6.1.5: - resolution: {integrity: sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==} + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: true + + /workerpool/6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} dev: true /wrap-ansi/7.0.0: @@ -2149,6 +2207,20 @@ packages: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} dev: true + /xlsx/0.17.5: + resolution: {integrity: sha512-lXNU0TuYsvElzvtI6O7WIVb9Zar1XYw7Xb3VAx2wn8N/n0whBYrCnHMxtFyIiUU1Wjf09WzmLALDfBO5PqTb1g==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.2.0 + cfb: 1.2.1 + codepage: 1.15.0 + crc-32: 1.2.1 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: true + /xml2js/0.4.23: resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} engines: {node: '>=4.0.0'} diff --git a/resources/images/preview.gif b/resources/images/preview.gif new file mode 100644 index 0000000000000000000000000000000000000000..4248144dcf7d6e7ccb379d9d400ca06c59a0f314 GIT binary patch literal 591711 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

?NdR>b;hW4PG{v*t%_Lfj82tyVvV~# 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

@%}ItXSBHTe5xB7k{2Bz|6oU8! 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∓ztLvIDhYHDVdo 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 literal 0 HcmV?d00001 diff --git a/resources/model/action.json b/resources/model/action.json new file mode 100644 index 0000000..aab6920 --- /dev/null +++ b/resources/model/action.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/action/IPSDEAction", "/extends/ActionModel"] +} diff --git a/resources/model/api.json b/resources/model/api.json new file mode 100644 index 0000000..c92d8ae --- /dev/null +++ b/resources/model/api.json @@ -0,0 +1,3 @@ +{ + "extends": ["/service/IPSSysServiceAPI", "/extends/ApiModel"] +} diff --git a/resources/model/apiDto.json b/resources/model/apiDto.json new file mode 100644 index 0000000..14614dc --- /dev/null +++ b/resources/model/apiDto.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/service/IPSDEMethodDTO", "/extends/ApiDtoModel"] +} diff --git a/resources/model/apiDtoField.json b/resources/model/apiDtoField.json new file mode 100644 index 0000000..6e591e4 --- /dev/null +++ b/resources/model/apiDtoField.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/service/IPSDEMethodDTOField", "/extends/ApiDtoFieldModel"] +} diff --git a/resources/model/apiEntity.json b/resources/model/apiEntity.json new file mode 100644 index 0000000..ad02e66 --- /dev/null +++ b/resources/model/apiEntity.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/service/IPSDEServiceAPI", "/extends/ApiEntityModel"] +} diff --git a/resources/model/apiMethod.json b/resources/model/apiMethod.json new file mode 100644 index 0000000..2e36dbb --- /dev/null +++ b/resources/model/apiMethod.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/service/IPSDEServiceAPIMethod", "/extends/ApiMethodModel"] +} diff --git a/resources/model/app.json b/resources/model/app.json index 097eb2c..87c30dd 100644 --- a/resources/model/app.json +++ b/resources/model/app.json @@ -1,5 +1,3 @@ { - "extends": ["/app/IPSApplication"], - "appEntities": { "desc": "应用实体", "type": "object", "schema": "/appEntities" }, - "pages": { "desc": "应用实体视图", "type": "object", "schema": "/pages" } + "extends": ["/app/IPSApplication", "/extends/AppModel"] } diff --git a/resources/model/appEntity.json b/resources/model/appEntity.json index 5ce493b..28ea601 100644 --- a/resources/model/appEntity.json +++ b/resources/model/appEntity.json @@ -1,5 +1,3 @@ { - "extends": ["/app/dataentity/IPSAppDataEntity"], - "pages": { "desc": "应用实体视图", "type": "object", "schema": "/pages" }, - "ctrls": { "desc": "视图部件", "type": "object", "schema": "/ctrls" } + "extends": ["/app/dataentity/IPSAppDataEntity", "/extends/AppEntityModel"] } diff --git a/resources/model/ctrl.json b/resources/model/ctrl.json index 423f209..440a3f0 100644 --- a/resources/model/ctrl.json +++ b/resources/model/ctrl.json @@ -1,3 +1,3 @@ { - "extends": ["/control/IPSControl"] + "extends": ["/control/IPSControl", "extends/CtrlModel"] } diff --git a/resources/model/dataSet.json b/resources/model/dataSet.json new file mode 100644 index 0000000..aa3aa19 --- /dev/null +++ b/resources/model/dataSet.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/ds/IPSDEDataSet", "/extends/DataSetModel"] +} diff --git a/resources/model/entity.json b/resources/model/entity.json new file mode 100644 index 0000000..225346b --- /dev/null +++ b/resources/model/entity.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/IPSDataEntity", "/extends/EntityModel"] +} diff --git a/resources/model/extends/ActionModel.json b/resources/model/extends/ActionModel.json new file mode 100644 index 0000000..811d514 --- /dev/null +++ b/resources/model/extends/ActionModel.json @@ -0,0 +1,21 @@ +{ + "actionType": { + "type": "string" + }, + "codeName": { + "type": "string" + }, + "entity": { + "type": "object", + "scheme": "/entity" + }, + "logicName": { + "type": "string" + }, + "logics": { + "type": "string" + }, + "transactionMode": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/ApiDtoFieldModel.json b/resources/model/extends/ApiDtoFieldModel.json new file mode 100644 index 0000000..bcc39b0 --- /dev/null +++ b/resources/model/extends/ApiDtoFieldModel.json @@ -0,0 +1,33 @@ +{ + "apiDto": { + "type": "object", + "scheme": "/apiDto" + }, + "codeName": { + "type": "string" + }, + "format": { + "type": "string" + }, + "javaType": { + "type": "string" + }, + "jsonName": { + "type": "string" + }, + "keyDEField": { + "type": "boolean" + }, + "logicName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "predefinedType": { + "type": "boolean" + }, + "timeType": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/ApiDtoModel.json b/resources/model/extends/ApiDtoModel.json new file mode 100644 index 0000000..97ff12e --- /dev/null +++ b/resources/model/extends/ApiDtoModel.json @@ -0,0 +1,22 @@ +{ + "apiDtoFields": { + "type": "object", + "scheme": "/apiDtoField" + }, + "apiEntity": { + "type": "object", + "scheme": "/apiEntity" + }, + "codeName": { + "type": "string" + }, + "logicName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/ApiEntityModel.json b/resources/model/extends/ApiEntityModel.json new file mode 100644 index 0000000..3ab0f02 --- /dev/null +++ b/resources/model/extends/ApiEntityModel.json @@ -0,0 +1,21 @@ +{ + "api": { + "type": "object", + "scheme": "/api" + }, + "codeName": { + "type": "string" + }, + "dtos": { + "type": "object", + "scheme": "/apiDto" + }, + "entity": { + "type": "object", + "scheme": "/entity" + }, + "methods": { + "type": "object", + "scheme": "/apiMethod" + } +} \ No newline at end of file diff --git a/resources/model/extends/ApiMethodModel.json b/resources/model/extends/ApiMethodModel.json new file mode 100644 index 0000000..af137b3 --- /dev/null +++ b/resources/model/extends/ApiMethodModel.json @@ -0,0 +1,40 @@ +{ + "apiEntity": { + "type": "object", + "scheme": "/apiEntity" + }, + "body": { + "type": "string" + }, + "input": { + "type": "object", + "scheme": "/dataentity/service/IPSDEServiceAPIMethodInput" + }, + "methodType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pathVariables": { + "type": "list" + }, + "pSDEAction": { + "type": "object", + "scheme": "/dataentity/action/IPSDEAction" + }, + "pSDEDataSet": { + "type": "object", + "scheme": "/dataentity/ds/IPSDEDataSet" + }, + "requestMethod": { + "type": "string" + }, + "requestPath": { + "type": "string" + }, + "return": { + "type": "object", + "scheme": "/dataentity/service/IPSDEServiceAPIMethodReturn" + } +} \ No newline at end of file diff --git a/resources/model/extends/ApiModel.json b/resources/model/extends/ApiModel.json new file mode 100644 index 0000000..041b412 --- /dev/null +++ b/resources/model/extends/ApiModel.json @@ -0,0 +1,14 @@ +{ + "aPIVersion": { + "type": "int" + }, + "codeName": { + "type": "string" + }, + "httpPort": { + "type": "int" + }, + "name": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/AppEntityModel.json b/resources/model/extends/AppEntityModel.json new file mode 100644 index 0000000..819eb93 --- /dev/null +++ b/resources/model/extends/AppEntityModel.json @@ -0,0 +1,61 @@ +{ + "allPSAppDEMethods": { + "type": "object", + "scheme": "/app/dataentity/IPSAppDEMethod" + }, + "allPSDEMainStates": { + "type": "object", + "scheme": "/dataentity/mainstate/IPSDEMainState" + }, + "allPSDEOPPrivs": { + "type": "object", + "scheme": "/dataentity/priv/IPSDEOPPriv" + }, + "app": { + "type": "object", + "scheme": "/app" + }, + "appDEUIActions": { + "type": "json" + }, + "appEntityResources": { + "type": "json" + }, + "codeName": { + "type": "string" + }, + "entity": { + "type": "object", + "scheme": "/entity" + }, + "keyField": { + "type": "string" + }, + "keyPSAppDEField": { + "type": "object", + "scheme": "/app/dataentity/IPSAppDEField" + }, + "logicName": { + "type": "string" + }, + "majorField": { + "type": "string" + }, + "majorPSAppDEField": { + "type": "object", + "scheme": "/app/dataentity/IPSAppDEField" + }, + "name": { + "type": "string" + }, + "pSDataEntity": { + "type": "object", + "scheme": "/dataentity/IPSDataEntity" + }, + "refServiceId": { + "type": "string" + }, + "serviceId": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/AppModel.json b/resources/model/extends/AppModel.json new file mode 100644 index 0000000..4f27ec1 --- /dev/null +++ b/resources/model/extends/AppModel.json @@ -0,0 +1,42 @@ +{ + "allPSAppCodeLists": { + "type": "object", + "scheme": "/codelist/IPSCodeList" + }, + "allPSAppFuncs": { + "type": "object", + "scheme": "/app/func/IPSAppFunc" + }, + "allPSAppMenuModels": { + "type": "object", + "scheme": "/app/appmenu/IPSAppMenuModel" + }, + "allPSAppViews": { + "type": "object", + "scheme": "/page" + }, + "appEntities": { + "type": "object", + "scheme": "/appEntity" + }, + "appEntitiesMap": { + "type": "string" + }, + "appEntityResources": { + "type": "json" + }, + "codeName": { + "type": "string" + }, + "defaultPSAppIndexView": { + "type": "object", + "scheme": "/page" + }, + "name": { + "type": "string" + }, + "pages": { + "type": "object", + "scheme": "/page" + } +} \ No newline at end of file diff --git a/resources/model/extends/CtrlModel.json b/resources/model/extends/CtrlModel.json new file mode 100644 index 0000000..f50503a --- /dev/null +++ b/resources/model/extends/CtrlModel.json @@ -0,0 +1,256 @@ +{ + "aggMode": { + "type": "string" + }, + "aggPSAppDataEntity": { + "type": "object", + "scheme": "/app/dataentity/IPSAppDataEntity" + }, + "allPortlets": { + "type": "object", + "scheme": "/ctrl" + }, + "appEntity": { + "type": "object", + "scheme": "/appEntity" + }, + "appViewRefs": { + "type": "object", + "scheme": "/app/view/IPSAppViewRef" + }, + "codeName": { + "type": "string" + }, + "contentType": { + "type": "string" + }, + "controlType": { + "type": "string" + }, + "createPSControlAction": { + "type": "object", + "scheme": "/control/IPSControlAction" + }, + "ctrls": { + "type": "object", + "scheme": "/ctrl" + }, + "embeddedPSAppDEView": { + "type": "object", + "scheme": "/page" + }, + "emptyText": { + "type": "string" + }, + "enableAutoSave": { + "type": "boolean" + }, + "enableCustomized": { + "type": "boolean" + }, + "enableGroup": { + "type": "boolean" + }, + "enablePagingBar": { + "type": "boolean" + }, + "fetchPSControlAction": { + "type": "object", + "scheme": "/control/IPSControlAction" + }, + "formWidth": { + "type": "double" + }, + "getDraftPSControlAction": { + "type": "object", + "scheme": "/control/IPSControlAction" + }, + "getPSControlAction": { + "type": "object", + "scheme": "/control/IPSControlAction" + }, + "groupMode": { + "type": "string" + }, + "groupPSAppDEField": { + "type": "object", + "scheme": "/app/dataentity/IPSAppDEField" + }, + "groupPSCodeList": { + "type": "object", + "scheme": "/codelist/IPSCodeList" + }, + "height": { + "type": "double" + }, + "htmlContent": { + "type": "string" + }, + "infoFormMode": { + "type": "boolean" + }, + "minorSortDir": { + "type": "string" + }, + "minorSortPSAppDEField": { + "type": "object", + "scheme": "/app/dataentity/IPSAppDEField" + }, + "name": { + "type": "string" + }, + "navFilter": { + "type": "string" + }, + "noSort": { + "type": "boolean" + }, + "noTabHeader": { + "type": "boolean" + }, + "pageUrl": { + "type": "string" + }, + "pagingSize": { + "type": "int" + }, + "portletPSAppView": { + "type": "object", + "scheme": "/page" + }, + "portletType": { + "type": "string" + }, + "psAppDataEntity": { + "type": "object", + "scheme": "/app/dataentity/IPSAppDataEntity" + }, + "psAppMenuItems": { + "type": "object", + "scheme": "/control/menu/IPSAppMenuItem" + }, + "psAppViewRefs": { + "type": "object", + "scheme": "/app/view/IPSAppViewRef" + }, + "psControlHandler": { + "type": "object", + "scheme": "/control/IPSControlHandler" + }, + "psControls": { + "type": "object", + "scheme": "/ctrl" + }, + "psDEFormItems": { + "type": "object", + "scheme": "/control/form/IPSDEFormItem" + }, + "psDEFormItemVRs": { + "type": "object", + "scheme": "/control/form/IPSDEFormItemVR" + }, + "psDEFormPages": { + "type": "object", + "scheme": "/control/form/IPSDEFormPage" + }, + "psDEGridColumns": { + "type": "object", + "scheme": "/control/grid/IPSDEGridColumn" + }, + "psDEGridDataItems": { + "type": "object", + "scheme": "/control/grid/IPSDEGridDataItem" + }, + "psDEGridEditItems": { + "type": "object", + "scheme": "/control/grid/IPSDEGridEditItem" + }, + "psDEGridEditItemVRs": { + "type": "object", + "scheme": "/control/grid/IPSDEGridEditItemVR" + }, + "psDETreeNodeRSs": { + "type": "object", + "scheme": "/control/tree/IPSDETreeNodeRS" + }, + "psDETreeNodes": { + "type": "object", + "scheme": "/control/tree/IPSDETreeNode" + }, + "psLayoutPos": { + "type": "object", + "scheme": "/control/layout/IPSLayoutPos" + }, + "psNavigateContexts": { + "type": "object", + "scheme": "/control/IPSNavigateContext" + }, + "psNavigateParams": { + "type": "object", + "scheme": "/control/IPSNavigateContext" + }, + "psSearchBarFilters": { + "type": "object", + "scheme": "/control/searchbar/IPSSearchBarFilter" + }, + "psSysCss": { + "type": "object", + "scheme": "/res/IPSSysCss" + }, + "psSysImage": { + "type": "object", + "scheme": "/res/IPSSysImage" + }, + "psUIActionGroup": { + "type": "object", + "scheme": "/view/IPSUIActionGroup" + }, + "rawContent": { + "type": "string" + }, + "rawItemHeight": { + "type": "double" + }, + "rawItemWidth": { + "type": "double" + }, + "removePSControlAction": { + "type": "object", + "scheme": "/control/IPSControlAction" + }, + "rootVisible": { + "type": "boolean" + }, + "searchButtonPos": { + "type": "string" + }, + "searchButtonStyle": { + "type": "string" + }, + "showTitleBar": { + "type": "boolean" + }, + "singleSelect": { + "type": "boolean" + }, + "tabLayout": { + "type": "string" + }, + "title": { + "type": "string" + }, + "titlePSLanguageRes": { + "type": "object", + "scheme": "/res/IPSLanguageRes" + }, + "updatePSControlAction": { + "type": "object", + "scheme": "/control/IPSControlAction" + }, + "width": { + "type": "double" + }, + "xDataControlName": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/DataSetModel.json b/resources/model/extends/DataSetModel.json new file mode 100644 index 0000000..665cf91 --- /dev/null +++ b/resources/model/extends/DataSetModel.json @@ -0,0 +1,36 @@ +{ + "codeName": { + "type": "string" + }, + "dsCode": { + "type": "string" + }, + "dsType": { + "type": "string" + }, + "enableGroup": { + "type": "boolean" + }, + "entity": { + "type": "object", + "scheme": "/entity" + }, + "groupBy": { + "type": "string" + }, + "logicName": { + "type": "string" + }, + "orderBy": { + "type": "string" + }, + "queries": { + "type": "string" + }, + "select": { + "type": "string" + }, + "where": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/EntityModel.json b/resources/model/extends/EntityModel.json new file mode 100644 index 0000000..902bafb --- /dev/null +++ b/resources/model/extends/EntityModel.json @@ -0,0 +1,130 @@ +{ + "actions": { + "type": "string" + }, + "allPSDEDataSyncs": { + "type": "object", + "scheme": "/dataentity/datasync/IPSDEDataSync" + }, + "codeName": { + "type": "string" + }, + "dataQueries": { + "type": "string" + }, + "dataScopes": { + "type": "optionitem" + }, + "dataSets": { + "type": "object", + "scheme": "/dataSet" + }, + "defaultDataQuery": { + "type": "object", + "scheme": "/dataSet" + }, + "enableES": { + "type": "boolean" + }, + "extActions": { + "type": "object", + "scheme": "/action" + }, + "fields": { + "type": "object", + "scheme": "/field" + }, + "hasDupCheck": { + "type": "boolean" + }, + "hasPSDERsMapping": { + "type": "boolean" + }, + "hasReferences": { + "type": "boolean" + }, + "hasResetField": { + "type": "boolean" + }, + "indexRelation": { + "type": "object", + "scheme": "/relationship" + }, + "indexSubDE": { + "type": "boolean" + }, + "isIndexSubDE": { + "type": "boolean" + }, + "keyField": { + "type": "object", + "scheme": "/field" + }, + "keyFields": { + "type": "object", + "scheme": "/field" + }, + "logicName": { + "type": "string" + }, + "logicValid": { + "type": "boolean" + }, + "module": { + "type": "string" + }, + "mqPublishers": { + "type": "list" + }, + "needTypeHandler": { + "type": "boolean" + }, + "nesteds": { + "type": "object", + "scheme": "/relationship" + }, + "orgField": { + "type": "object", + "scheme": "/field" + }, + "psSubSysServiceAPI": { + "type": "object", + "scheme": "/service/IPSSubSysServiceAPI" + }, + "psSystemModule": { + "type": "object", + "scheme": "/system/IPSSystemModule" + }, + "quickSearchFields": { + "type": "object", + "scheme": "/field" + }, + "references": { + "type": "object", + "scheme": "/relationship" + }, + "relEntities": { + "type": "object", + "scheme": "/entity" + }, + "storage": { + "type": "string" + }, + "tableName": { + "type": "string" + }, + "unionKeyFields": { + "type": "object", + "scheme": "/field" + }, + "unionKeyMode": { + "type": "boolean" + }, + "viewDataQuery": { + "type": "object", + "scheme": "/dataSet" + }, + "viewName": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/FieldModel.json b/resources/model/extends/FieldModel.json new file mode 100644 index 0000000..2aeb632 --- /dev/null +++ b/resources/model/extends/FieldModel.json @@ -0,0 +1,74 @@ +{ + "alias": { + "type": "string" + }, + "allPSDEFSearchModes": { + "type": "object", + "scheme": "/dataentity/defield/IPSDEFSearchMode" + }, + "annotation": { + "type": "string" + }, + "codeName": { + "type": "string" + }, + "columnName": { + "type": "string" + }, + "dataType": { + "type": "string" + }, + "deepStructure": { + "type": "boolean" + }, + "enableAudit": { + "type": "boolean" + }, + "entity": { + "type": "object", + "scheme": "/entity" + }, + "format": { + "type": "string" + }, + "insertOnly": { + "type": "boolean" + }, + "jsonName": { + "type": "string" + }, + "keyDEField": { + "type": "boolean" + }, + "logicName": { + "type": "string" + }, + "logicValidField": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "pasteReset": { + "type": "boolean" + }, + "phisicalDEField": { + "type": "boolean" + }, + "predefinedType": { + "type": "string" + }, + "reference": { + "type": "object", + "scheme": "/relationship" + }, + "refFieldCodeName": { + "type": "string" + }, + "timeType": { + "type": "string" + }, + "type": { + "type": "proptype" + } +} \ No newline at end of file diff --git a/resources/model/extends/PageModel.json b/resources/model/extends/PageModel.json new file mode 100644 index 0000000..7e12045 --- /dev/null +++ b/resources/model/extends/PageModel.json @@ -0,0 +1,111 @@ +{ + "app": { + "type": "object", + "scheme": "/app" + }, + "appEntity": { + "type": "object", + "scheme": "/appEntity" + }, + "capPSLanguageRes": { + "type": "object", + "scheme": "/res/IPSLanguageRes" + }, + "caption": { + "type": "string" + }, + "codeName": { + "type": "string" + }, + "ctrls": { + "type": "object", + "scheme": "/ctrl" + }, + "enableFilter": { + "type": "boolean" + }, + "enableQuickGroup": { + "type": "boolean" + }, + "enableQuickSearch": { + "type": "boolean" + }, + "enableRowEdit": { + "type": "boolean" + }, + "expandSearchForm": { + "type": "boolean" + }, + "gridRowActiveMode": { + "type": "int" + }, + "height": { + "type": "int" + }, + "loadDefault": { + "type": "boolean" + }, + "mainMenuAlign": { + "type": "string" + }, + "name": { + "type": "string" + }, + "openMode": { + "type": "string" + }, + "psAppViewLogics": { + "type": "object", + "scheme": "/app/view/IPSAppViewLogic" + }, + "psAppViewNavContexts": { + "type": "object", + "scheme": "/app/view/IPSAppViewNavContext" + }, + "psAppViewNavParams": { + "type": "object", + "scheme": "/app/view/IPSAppViewNavParam" + }, + "psSysCss": { + "type": "object", + "scheme": "/res/IPSSysCss" + }, + "psSysImage": { + "type": "object", + "scheme": "/res/IPSSysImage" + }, + "quickGroupPSCodeList": { + "type": "object", + "scheme": "/codelist/IPSCodeList" + }, + "redirectView": { + "type": "boolean" + }, + "rowEditDefault": { + "type": "boolean" + }, + "showCaptionBar": { + "type": "boolean" + }, + "subCaption": { + "type": "string" + }, + "tabLayout": { + "type": "string" + }, + "viewStyle": { + "type": "string" + }, + "viewToolBarItems": { + "type": "json" + }, + "viewType": { + "type": "string" + }, + "width": { + "type": "int" + }, + "xDataControlName": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/RelationshipModel.json b/resources/model/extends/RelationshipModel.json new file mode 100644 index 0000000..3134b89 --- /dev/null +++ b/resources/model/extends/RelationshipModel.json @@ -0,0 +1,41 @@ +{ + "codeName": { + "type": "string" + }, + "columnName": { + "type": "string" + }, + "entityCodeName": { + "type": "string" + }, + "entityLogicName": { + "type": "string" + }, + "fields": { + "type": "object", + "scheme": "/field" + }, + "fkField": { + "type": "object", + "scheme": "/field" + }, + "listCode": { + "type": "string" + }, + "lookup": { + "type": "string" + }, + "module": { + "type": "string" + }, + "relEntity": { + "type": "object", + "scheme": "/entity" + }, + "relFieldCount": { + "type": "int" + }, + "removeActionType": { + "type": "int" + } +} \ No newline at end of file diff --git a/resources/model/extends/SystemModel.json b/resources/model/extends/SystemModel.json new file mode 100644 index 0000000..2cd9042 --- /dev/null +++ b/resources/model/extends/SystemModel.json @@ -0,0 +1,75 @@ +{ + "allPSCodeLists": { + "type": "object", + "scheme": "/codelist/IPSCodeList" + }, + "allPSSysMsgTempls": { + "type": "object", + "scheme": "/msg/IPSSysMsgTempl" + }, + "allPSSysUniReses": { + "type": "object", + "scheme": "/security/IPSSysUniRes" + }, + "allPSWorkflows": { + "type": "object", + "scheme": "/wf/IPSWorkflow" + }, + "apis": { + "type": "object", + "scheme": "/api" + }, + "apps": { + "type": "object", + "scheme": "/app" + }, + "codeName": { + "type": "string" + }, + "enableDS": { + "type": "boolean" + }, + "enableES": { + "type": "boolean" + }, + "enableGlobalTransaction": { + "type": "boolean" + }, + "enableMongo": { + "type": "boolean" + }, + "enableMQ": { + "type": "boolean" + }, + "enableMysql": { + "type": "boolean" + }, + "enableOAuth2": { + "type": "boolean" + }, + "enableOracle": { + "type": "boolean" + }, + "enablePostgreSQL": { + "type": "boolean" + }, + "enableWorkflow": { + "type": "boolean" + }, + "entities": { + "type": "object", + "scheme": "/entity" + }, + "hasMsgTemplate": { + "type": "boolean" + }, + "hasRuntimeDict": { + "type": "boolean" + }, + "logicName": { + "type": "string" + }, + "mqSubscribes": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/extends/WorkflowModel.json b/resources/model/extends/WorkflowModel.json new file mode 100644 index 0000000..3e55599 --- /dev/null +++ b/resources/model/extends/WorkflowModel.json @@ -0,0 +1,40 @@ +{ + "bookings": { + "type": "string" + }, + "id": { + "type": "string" + }, + "mobApps": { + "type": "string" + }, + "name": { + "type": "string" + }, + "processes": { + "type": "map" + }, + "psWFProcesses": { + "type": "object", + "scheme": "/wf/IPSWFProcess" + }, + "psWorkflow": { + "type": "object", + "scheme": "/wf/IPSWorkflow" + }, + "refGroups": { + "type": "string" + }, + "sequenceFlows": { + "type": "map" + }, + "userTasks": { + "type": "map" + }, + "valid": { + "type": "boolean" + }, + "webApps": { + "type": "string" + } +} \ No newline at end of file diff --git a/resources/model/field.json b/resources/model/field.json new file mode 100644 index 0000000..11a0362 --- /dev/null +++ b/resources/model/field.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/defield/IPSDEField", "/extends/FieldModel"] +} diff --git a/resources/model/page.json b/resources/model/page.json index 7cdc8d4..9fbc1cc 100644 --- a/resources/model/page.json +++ b/resources/model/page.json @@ -1,4 +1,3 @@ { - "extends": ["/app/view/IPSAppView"], - "ctrls": { "desc": "视图部件", "type": "object", "schema": "/ctrls" } + "extends": ["/app/view/IPSAppView", "/extends/PageModel"] } diff --git a/resources/model/relationship.json b/resources/model/relationship.json new file mode 100644 index 0000000..e5d40f2 --- /dev/null +++ b/resources/model/relationship.json @@ -0,0 +1,3 @@ +{ + "extends": ["/dataentity/der/IPSDERBase", "/extends/WorkflowModel"] +} diff --git a/resources/model/system.json b/resources/model/system.json index 2a6883a..30a90d5 100644 --- a/resources/model/system.json +++ b/resources/model/system.json @@ -1,4 +1,3 @@ { - "extends": ["/IPSSystem"], - "apps": { "schema": "/apps" } + "extends": ["/IPSSystem", "/extends/SystemModel"] } diff --git a/resources/model/workflow.json b/resources/model/workflow.json new file mode 100644 index 0000000..14c6a46 --- /dev/null +++ b/resources/model/workflow.json @@ -0,0 +1,3 @@ +{ + "extends": ["/wf/IPSWFVersion", "/extends/WorkflowModel"] +} diff --git a/resources/xlsx/model-map.xlsx b/resources/xlsx/model-map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..658c575a2aeee0f64a5a9812ae7177f52d4a269f GIT binary patch literal 26784 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 q6#n>U&wrQx_=){BYLfp8` { + // 非自定义扩展 + glob(path.resolve(__dirname, '../resources/model/**/*.json'), (err, files) => { + if (err) { + reject(err); + } else { + resolve(files); + } + }); + }); + const typeMap = new Map(); + paths.forEach(pathStr => { + pathStr = pathStr.replace(/\\/g, '/'); + pathStr = pathStr.substring(pathStr.indexOf('/resources/model') + 16); + const name = path.basename(pathStr, '.json'); + typeMap.set(name, pathStr.replace('.json', '')); + }); + const pathStr = path.resolve(__dirname, '../resources/xlsx/model-map.xlsx'); + const content = xlsx.parse(pathStr); + const sheet = content[0].data; + const map = new Map(); + for (let i = 1; i < sheet.length; i++) { + const cls = sheet[i][0]; + const name = sheet[i][1]; + let type = sheet[i][2]; + if (type === 'JSONObject') { + type = 'json'; + } + if (cls === 'LookupModel') { + continue; + } + if (!cls.startsWith('IPS') && cls.endsWith('Model')) { + if (!map.has(cls)) { + map.set(cls, {}); + } + const data = map.get(cls); + let scheme = ''; + // 自定义扩展 + { + switch (type) { + case 'ActionModel': + scheme = '/action'; + break; + case 'ApiDtoFieldModel': + scheme = '/apiDtoField'; + break; + case 'ApiDtoModel': + scheme = '/apiDto'; + break; + case 'ApiEntityModel': + scheme = '/apiEntity'; + break; + case 'ApiMethodModel': + scheme = '/apiMethod'; + break; + case 'ApiModel': + scheme = '/api'; + break; + case 'AppEntityModel': + scheme = '/appEntity'; + break; + case 'AppModel': + scheme = '/app'; + break; + case 'CtrlModel': + scheme = '/ctrl'; + break; + case 'DataSetModel': + scheme = '/dataSet'; + break; + case 'EntityModel': + scheme = '/entity'; + break; + case 'FieldModel': + scheme = '/field'; + break; + case 'PageModel': + scheme = '/page'; + break; + case 'RelationshipModel': + scheme = '/relationship'; + break; + case 'SystemModel': + scheme = '/system'; + break; + case 'WorkflowModel': + scheme = '/workflow'; + break; + case 'IPSAppView': + scheme = '/page'; + break; + case 'IPSControl': + scheme = '/ctrl'; + break; + case 'IPSAppDataEntity': + scheme = '/appEntity'; + break; + } + } + // 预置类型 + if ((!scheme || scheme === '') && typeMap.has(type)) { + scheme = typeMap.get(type); + } + if (scheme && scheme !== '') { + data[name] = { type: 'object', scheme }; + } else { + data[name] = { type: type.toLowerCase() }; + } + } + } + const writePath = path.resolve(__dirname, '../resources/model/extends'); + map.forEach((value, key) => { + fs.writeFileSync(path.resolve(writePath, `${key}.json`), JSON.stringify(value, null, 2)); + }); +} + +run(); -- Gitee