init project

This commit is contained in:
千反田丷 2021-12-08 14:38:18 +08:00
parent 55da72fe36
commit d0d68743d3
147 changed files with 20283 additions and 116 deletions

15
.editorconfig Normal file
View File

@ -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

45
.eslintrc.json Normal file
View File

@ -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"
]
}

123
.gitignore vendored
View File

@ -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

14
.prettierrc.js Normal file
View File

@ -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',
};

8
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,8 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"dbaeumer.vscode-eslint",
"amodio.tsl-problem-matcher"
]
}

35
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,35 @@
// 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}/dist/**/*.js"
],
"preLaunchTask": "${defaultBuildTask}"
},
{
"name": "Extension Tests",
"type": "extensionHost",
"request": "launch",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}",
"--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
],
"outFiles": [
"${workspaceFolder}/out/**/*.js",
"${workspaceFolder}/dist/**/*.js"
],
"preLaunchTask": "tasks: watch-tests"
}
]
}

13
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,13 @@
// 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
"dist": false // set this to true to hide the "dist" folder with the compiled JS files
},
"search.exclude": {
"out": true, // set this to false to include "out" folder in search results
"dist": true // set this to false to include "dist" folder in search results
},
// Turn off tsc task auto detection since we have the necessary tasks as npm scripts
"typescript.tsc.autoDetect": "off"
}

43
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,43 @@
// 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": [
"$ts-webpack-watch",
"$tslint-webpack-watch"
],
"isBackground": true,
"presentation": {
"reveal": "never",
"group": "watchers"
},
"group": {
"kind": "build",
"isDefault": true
}
},
{
"type": "npm",
"script": "watch-tests",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"presentation": {
"reveal": "never",
"group": "watchers"
},
"group": "build"
},
{
"label": "tasks: watch-tests",
"dependsOn": [
"npm: watch",
"npm: watch-tests"
],
"problemMatcher": []
}
]
}

14
.vscodeignore Normal file
View File

@ -0,0 +1,14 @@
.vscode/**
.vscode-test/**
out/**
node_modules/**
src/**
.gitignore
.yarnrc
webpack.config.js
vsc-extension-quickstart.md
**/tsconfig.json
**/.eslintrc.json
**/*.map
**/*.ts
.history

9
CHANGELOG.md Normal file
View File

@ -0,0 +1,9 @@
# Change Log
All notable changes to the "Test" 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

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2021 千反田丷
Copyright (c) 2021
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

119
README.md Normal file
View File

@ -0,0 +1,119 @@
# iBiz建模工场iBizModelingStudio
辅助 iBizSys 系统进行模型开发,不需要脱离你的生产力工具即可完成需要的模型操作。
yaml 格式的文本编辑,友好的提示和便捷的修改,更拥有友好的图形化界面方便进行复杂模型编辑。良好的索引界面,帮助你更快的定位到需要修改的模型。无本地文件,无需占用本地空间。
## 功能预览
<img src='https://cdn.ibizlab.cn/ibizsys-vscode-plugin/tool-preview.gif' style='width: 100%'></img>
## vscode 基本设置
##### 1. 配置基本服务域地址
```json
// 配置说明
{
"ibiz-modeling-studio.iBizModelingStudioDomain": "基本服务提供域地址"
}
// 正式环境配置 <插件默认配置>
{
"ibiz-modeling-studio.iBizModelingStudioDomain": "http://studio.ibizmodeling.cn"
}
// 开发环境配置
{
"ibiz-modeling-studio.iBizModelingStudioDomain": "http://172.16.170.145"
}
```
##### 2. 系统消息终端
1. 在关闭后收到消息时会自动弹出,可以配置 `ibiz-modeling-studio.console.autoDisplay=false` 关闭弹出
## 前置要求
1. 拥有 iBizLab 账户
2. 本地有 iBizSys 项目,并且账户对项目拥有修改权限
3. 项目根目录有 .ibizproject 文件
## 快速开始
1. 请确认项目 .ibizproject 文件中有如下几个属性
```yaml
# .ibizproject 文件
# 打开类型设置。当前支持系统,后续将支持直接从应用开始。
type: PSSYSTEM
# 方案标识
psdevsln: 22A4AD93-6A7C-4380-B912-6B2CA9C3DCDF
# 系统标识
psdevslnsys: 913D11CB-B368-4589-845C-9B47308A02B4
# 系统名称
psdevslnsysname: iBiz产品生产管理系统
```
2. 在 vscode 新建窗口,快捷键:`Ctrl+Shift+N`
3. 将项目添加到工作区,按钮路径:`文件 => 将文件夹添加到工作区`
<img src='https://cdn.ibizlab.cn/ibizsys-vscode-plugin/add-folder-to-workspace.gif' style='width: 100%'></img>
4. 添加成功识并别到 .ibizproject 文件后会弹出登录框,请使用 iBizLab 账号登录
<img src='https://cdn.ibizlab.cn/ibizsys-vscode-plugin/login-user.gif' style='width: 100%'></img>
5. 登录成功后重新加载工作区,使插件初始化文件系统
<img src='https://cdn.ibizlab.cn/ibizsys-vscode-plugin/reload-workspace.gif' style='width: 100%'></img>
6. 初始化完毕,将工作区保存
7. 以后直接打开工作区即可使用啦~
## 命令(Command)&nbsp;&ensp;快捷键:`Ctrl+Shift+P`
1. 打开系统消息终端
2. 发布系统
3. 发布模板
## Issues
在使用过程中遇见问题,可以来 [issues](http://172.16.180.230/vscode-plugin/ibiz-modeling-studio/issues) 提交
### 0.0.1
初始版本
---
<!-- ## 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 -->
### 了解更多
- [iBizSys 官网](http://www.ibizsys.cn)
- [iBiz 开发平台](https://www.ibizlab.cn/)
- [应用中心管理](http://www.ibizmodeling.cn/#/appcenter/appportalview)
## 常见问题
1. 出现 <font color=#eb445a>read ECONNRESET</font> 错误提示,请检查是否使用了翻墙软件。一般为翻墙软件导致的无法发送请求。

9387
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

286
package.json Normal file
View File

@ -0,0 +1,286 @@
{
"name": "ibiz-modeling-studio",
"displayName": "iBizModelingStudio",
"description": "iBiz建模工场",
"publisher": "ibizlab",
"preview": true,
"version": "0.0.4",
"engines": {
"vscode": "^1.62.0"
},
"repository": "http://172.16.180.230/vscode-plugin/ibiz-studio-code.git",
"categories": [
"Other"
],
"icon": "resources/icon/icon.png",
"activationEvents": [
"onFileSystem:ibizmos",
"onCustomEditor:iBizCustomEditor.iBizModelUI",
"onCustomEditor:iBizCustomEditor.iBizModelRuntime",
"workspaceContains:**/.ibizproject"
],
"main": "./dist/extension.js",
"contributes": {
"commands": [
{
"command": "ibiz-modeling-studio.user.login",
"title": "%command.ibiz-modeling-studio.user.login%",
"category": "%command.ibiz-modeling-studio.category%"
},
{
"command": "ibiz-modeling-studio.open-ibiz-modeling",
"title": "%command.ibiz-modeling-studio.open-ibiz-modeling%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"dark": "resources/icon/dark/logo.svg",
"light": "resources/icon/light/logo.svg"
}
},
{
"command": "ibiz-modeling-studio.system-info-terminal.show",
"title": "%command.ibiz-modeling-studio.system-info-terminal.show%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"dark": "resources/icon/dark/terminal.svg",
"light": "resources/icon/light/terminal.svg"
}
},
{
"command": "ibiz-modeling-studio.system.publish.code",
"title": "%command.ibiz-modeling-studio.system.publish.code%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"dark": "resources/icon/dark/code-publish.svg",
"light": "resources/icon/light/code-publish.svg"
}
},
{
"command": "ibiz-modeling-studio.template.publish",
"title": "%command.ibiz-modeling-studio.template.publish%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"dark": "resources/icon/dark/template-publish.svg",
"light": "resources/icon/light/template-publish.svg"
}
},
{
"command": "ibiz-modeling-studio.mos-fs.copy-path",
"title": "%command.ibiz-modeling-studio.mos-fs.copy-path%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"light": "resources/icon/light/copy.svg",
"dark": "resources/icon/dark/copy.svg"
}
},
{
"command": "ibiz-modeling-studio.mos-fs.open-file",
"title": "%command.ibiz-modeling-studio.mos-fs.open-file%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"light": "resources/icon/light/edit.svg",
"dark": "resources/icon/dark/edit.svg"
}
},
{
"command": "ibiz-modeling-studio.mos-fs.open-runtime",
"title": "%command.ibiz-modeling-studio.mos-fs.open-runtime%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"light": "resources/icon/light/model-runtime.svg",
"dark": "resources/icon/dark/model-runtime.svg"
}
},
{
"command": "ibiz-modeling-studio.mos-fs.search-model-by-path",
"title": "%command.ibiz-modeling-studio.mos-fs.search-model-by-path%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"light": "resources/icon/light/link.svg",
"dark": "resources/icon/dark/link.svg"
}
},
{
"command": "ibiz-modeling-studio.mos-fs.search-entity",
"title": "%command.ibiz-modeling-studio.mos-fs.search-entity%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"light": "resources/icon/light/search-entity.svg",
"dark": "resources/icon/dark/search-entity.svg"
}
},
{
"command": "ibiz-modeling-studio.mos-fs.search-entity-view",
"title": "%command.ibiz-modeling-studio.mos-fs.search-entity-view%",
"category": "%command.ibiz-modeling-studio.category%",
"icon": {
"light": "resources/icon/light/search-entity-view.svg",
"dark": "resources/icon/dark/search-entity-view.svg"
}
},
{
"command": "ibiz-modeling-studio.user.login-reply-path-handle",
"title": "处理粘贴板中的登录地址",
"enablement": "false"
}
],
"menus": {
"view/title": [
{
"command": "ibiz-modeling-studio.open-ibiz-modeling",
"when": "view == iBizExplorer.ModelExpTree",
"group": "navigation@10"
},
{
"command": "ibiz-modeling-studio.mos-fs.search-model-by-path",
"when": "view == iBizExplorer.ModelExpTree",
"group": "navigation@20"
},
{
"command": "ibiz-modeling-studio.mos-fs.search-entity",
"when": "view == iBizExplorer.ModelExpTree",
"group": "navigation@30"
},
{
"command": "ibiz-modeling-studio.system-info-terminal.show",
"when": "view == iBizExplorer.ModelExpTree",
"group": "navigation@50"
},
{
"command": "ibiz-modeling-studio.system.publish.code",
"when": "view == iBizExplorer.ModelExpTree",
"group": "1_ibiz_modeling"
},
{
"command": "ibiz-modeling-studio.template.publish",
"when": "view == iBizExplorer.ModelExpTree",
"group": "1_ibiz_modeling"
}
],
"view/item/context": [
{
"command": "ibiz-modeling-studio.mos-fs.open-runtime",
"when": "view == iBizExplorer.ModelExpTree && viewItem == MODEL",
"group": "inline@10"
},
{
"command": "ibiz-modeling-studio.mos-fs.open-file",
"when": "view == iBizExplorer.ModelExpTree && viewItem == MODEL",
"group": "inline@20"
},
{
"command": "ibiz-modeling-studio.mos-fs.copy-path",
"when": "view == iBizExplorer.ModelExpTree && viewItem == MODEL"
}
]
},
"viewsContainers": {
"activitybar": [
{
"id": "ibiz-modeling-studio_explorer",
"title": "%global.ibiz-modeling-studio.title%",
"icon": "resources/icon/logo.svg"
}
]
},
"views": {
"ibiz-modeling-studio_explorer": [
{
"id": "iBizExplorer.ModelExpTree",
"name": "",
"icon": "resources/icon/logo.svg",
"when": "ibiz-modeling-studio.enable-plugin == true"
}
]
},
"customEditors": [
{
"viewType": "iBizCustomEditor.iBizModelUI",
"displayName": "模型图形编辑器",
"priority": "default",
"selector": [
{
"filenamePattern": "*.ibizmodel.ui"
}
]
},
{
"viewType": "iBizCustomEditor.iBizModelRuntime",
"displayName": "实时模型对象",
"priority": "default",
"selector": [
{
"filenamePattern": "*.ibizmodel.runtime"
}
]
}
],
"configuration": {
"title": "%global.ibiz-modeling-studio.title%",
"properties": {
"ibiz-modeling-studio.ibiz-modeling-studio-domain": {
"description": "%properties.ibiz-modeling-studio.ibiz-modeling-studio-domain%",
"type": "string",
"default": "http://studio.ibizmodeling.cn"
},
"ibiz-modeling-studio.console.auto-display": {
"description": "%properties.ibiz-modeling-studio.console.auto-display%",
"type": "boolean",
"default": true
},
"ibiz-modeling-studio.ibiz-modeling-link.enable": {
"description": "%properties.ibiz-modeling-studio.ibiz-modeling-link.enable%",
"type": "boolean",
"default": true
}
}
}
},
"scripts": {
"vscode:prepublish": "npm run package",
"compile": "webpack",
"watch": "webpack --watch",
"package": "webpack --mode production --devtool hidden-source-map",
"compile-tests": "tsc -p . --outDir out",
"watch-tests": "tsc -p . -w --outDir out",
"pretest": "npm run compile-tests && npm run compile && npm run lint",
"lint": "eslint src --ext ts",
"test": "node ./out/test/runTest.js"
},
"devDependencies": {
"@types/debug": "^4.1.7",
"@types/fs-extra": "^9.0.13",
"@types/glob": "^7.2.0",
"@types/js-yaml": "^4.0.5",
"@types/mocha": "^9.0.0",
"@types/node": "16.x",
"@types/ramda": "^0.27.59",
"@types/vscode": "^1.62.0",
"@typescript-eslint/eslint-plugin": "^5.6.0",
"@typescript-eslint/parser": "^5.6.0",
"@vscode/test-electron": "^1.6.2",
"eslint": "^8.4.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"glob": "^7.2.0",
"mocha": "^9.1.3",
"ts-loader": "^9.2.6",
"typescript": "^4.5.2",
"utf-8-validate": "^5.0.7",
"vsce": "^2.5.1",
"webpack": "^5.65.0",
"webpack-cli": "^4.9.1"
},
"dependencies": {
"@ibiz/vscode-editor-api": "^0.0.6",
"axios": "^0.24.0",
"bufferutil": "^4.0.5",
"dayjs": "^1.10.7",
"debug": "^4.3.3",
"fs-extra": "^10.0.0",
"js-yaml": "^4.1.0",
"mqtt": "~2.18.8",
"ramda": "^0.27.1",
"rxjs": "^7.4.0",
"vscode-nls": "^5.0.0"
}
}

18
package.nls.json Normal file
View File

@ -0,0 +1,18 @@
{
"global.ibiz-modeling-studio.title": "IBiz Modeling Studio",
"command.ibiz-modeling-studio.category": "iBizModeling",
"command.ibiz-modeling-studio.user.login": "Login",
"command.ibiz-modeling-studio.open-ibiz-modeling": "Open iBizModeling Tool",
"command.ibiz-modeling-studio.system-info-terminal.show": "Open Information Terminal",
"command.ibiz-modeling-studio.system.publish.code": "Publish Code",
"command.ibiz-modeling-studio.template.publish": "Publish Template",
"command.ibiz-modeling-studio.mos-fs.copy-path": "Copy Path",
"command.ibiz-modeling-studio.mos-fs.open-file": "Open Model",
"command.ibiz-modeling-studio.mos-fs.open-runtime": "Open Model Runtime",
"command.ibiz-modeling-studio.mos-fs.search-model-by-path": "Search Model By Path",
"command.ibiz-modeling-studio.mos-fs.search-entity": "Search Entity",
"command.ibiz-modeling-studio.mos-fs.search-entity-view": "Search Entity View",
"properties.ibiz-modeling-studio.ibiz-modeling-studio-domain": "Modeling Studio Domain",
"properties.ibiz-modeling-studio.console.auto-display": "After the message terminal is closed, the terminal is reopened when the message is received",
"properties.ibiz-modeling-studio.ibiz-modeling-link.enable": "Enable iBizModeling Link Recognition"
}

18
package.nls.zh-cn.json Normal file
View File

@ -0,0 +1,18 @@
{
"global.ibiz-modeling-studio.title": "iBiz建模工场",
"command.ibiz-modeling-studio.category": "iBiz建模工场",
"command.ibiz-modeling-studio.user.login": "登录",
"command.ibiz-modeling-studio.open-ibiz-modeling": "打开 iBizModeling 工具",
"command.ibiz-modeling-studio.system-info-terminal.show": "打开信息终端",
"command.ibiz-modeling-studio.system.publish.code": "发布代码",
"command.ibiz-modeling-studio.template.publish": "发布模板",
"command.ibiz-modeling-studio.mos-fs.copy-path": "复制路径",
"command.ibiz-modeling-studio.mos-fs.open-file": "打开模型",
"command.ibiz-modeling-studio.mos-fs.open-runtime": "打开运行时",
"command.ibiz-modeling-studio.mos-fs.search-model-by-path": "根据路径查找模型",
"command.ibiz-modeling-studio.mos-fs.search-entity": "查找实体",
"command.ibiz-modeling-studio.mos-fs.search-entity-view": "查找实体视图",
"properties.ibiz-modeling-studio.ibiz-modeling-studio-domain": "建模工场域",
"properties.ibiz-modeling-studio.console.auto-display": "消息终端关闭后,收到时消息重新打开终端",
"properties.ibiz-modeling-studio.ibiz-modeling-link.enable": "启用 iBizModeling 链接识别"
}

3300
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,364 @@
{
"PSSYSTEM": {
"psmodules": { "caption": "模块", "psmodeltype": "PSMODULE" },
"pscodelists": { "caption": "代码表", "psmodeltype": "PSCODELIST" },
"pssysermaps": { "caption": "ER图", "psmodeltype": "PSSYSERMAP" },
"pssysdbschemes": { "caption": "数据库", "psmodeltype": "PSSYSDBSCHEME" },
"pssysbdschemes": { "caption": "大数据", "psmodeltype": "PSSYSBDSCHEME" },
"pssyssearchschemes": { "caption": "全文检索", "psmodeltype": "PSSYSSEARCHSCHEME" },
"pssysucmaps": { "caption": "用例", "psmodeltype": "PSSYSUCMAP" },
"pssysunireses": { "caption": "统一资源", "psmodeltype": "PSSYSUNIRES" },
"pssysusermodes": { "caption": "用户模式", "psmodeltype": "PSSYSUSERMODE" },
"pssysopprivs": { "caption": "系统角色", "psmodeltype": "PSSYSOPPRIV" },
"pssysuserdrs": { "caption": "自定义数据范围", "psmodeltype": "PSSYSUSERDR" },
"pssysapps": { "caption": "前端应用", "psmodeltype": "PSSYSAPP" },
"pssysserviceapis": { "caption": "服务接口", "psmodeltype": "PSSYSSERVICEAPI" },
"pssyssfpubs": { "caption": "后台架构", "psmodeltype": "PSSYSSFPUB" },
"pssyscsses": { "caption": "界面样式表", "psmodeltype": "PSSYSCSS" },
"pssysimages": { "caption": "图片资源", "psmodeltype": "PSSYSIMAGE" },
"psdeuiactions": { "caption": "全局界面行为", "psmodeltype": "PSDEUIACTION" },
"psdeuagroups": { "caption": "全局界面行为组", "psmodeltype": "PSDEUAGROUP" },
"psdetoolbars": { "caption": "全局工具栏", "psmodeltype": "PSDETOOLBAR" },
"pssysportlets": { "caption": "门户部件", "psmodeltype": "PSSYSPORTLET" },
"psachandlers": { "caption": "全局界面处理", "psmodeltype": "PSACHANDLER" },
"pssyscounters": { "caption": "计数器", "psmodeltype": "PSSYSCOUNTER" },
"pssysviewpanels": { "caption": "视图布局面板", "psmodeltype": "PSSYSVIEWPANEL" },
"psviewmsgs": { "caption": "视图消息", "psmodeltype": "PSVIEWMSG" },
"psviewmsggroups": { "caption": "视图消息组", "psmodeltype": "PSVIEWMSGGROUP" },
"psworkflows": { "caption": "工作流", "psmodeltype": "PSWORKFLOW" },
"pswfroles": { "caption": "工作流角色", "psmodeltype": "PSWFROLE" },
"pswfworktimes": { "caption": "工作流时间", "psmodeltype": "PSWFWORKTIME" },
"pssysmodelgroups": { "caption": "模型组", "psmodeltype": "PSSYSMODELGROUP" },
"pssysrefs": { "caption": "子系统", "psmodeltype": "PSSYSREF" },
"pssyspfplugins": { "caption": "前端模板插件", "psmodeltype": "PSSYSPFPLUGIN" },
"pssyssfplugins": { "caption": "后台模板插件", "psmodeltype": "PSSYSSFPLUGIN" },
"pssyseditorstyles": { "caption": "编辑器样式", "psmodeltype": "PSSYSEDITORSTYLE" },
"pssysdelogicnodes": { "caption": "逻辑处理组件", "psmodeltype": "PSSYSDELOGICNODE" },
"pssysdynamodels": { "caption": "动态模型", "psmodeltype": "PSSYSDYNAMODEL" },
"pssysvaluerules": { "caption": "值规则", "psmodeltype": "PSSYSVALUERULE" },
"pssubsysserviceapis": { "caption": "外部接口", "psmodeltype": "PSSUBSYSSERVICEAPI" },
"pssysresources": { "caption": "资源", "psmodeltype": "PSSYSRESOURCE" },
"psdegroups": { "caption": "实体组", "psmodeltype": "PSDEGROUP" },
"psdergroups": { "caption": "关系组", "psmodeltype": "PSDERGROUP" },
"pssysmsgtempls": { "caption": "消息模板", "psmodeltype": "PSSYSMSGTEMPL" },
"pssysutildes": { "caption": "功能配置", "psmodeltype": "PSSYSUTILDE" },
"pssysdeftypes": { "caption": "属性类型逻辑", "psmodeltype": "PSSYSDEFTYPE" },
"pssystestdata": { "caption": "测试数据", "psmodeltype": "PSSYSTESTDATA" },
"pssystestprjs": { "caption": "测试项目", "psmodeltype": "PSSYSTESTPRJ" },
"pssysunits": { "caption": "单位", "psmodeltype": "PSSYSUNIT" }
},
"PSMODULE": {
"psdataentities": { "caption": "实体", "psmodeltype": "PSDATAENTITY" },
"pscodelists": { "caption": "代码表", "psmodeltype": "PSCODELIST" },
"pssysermaps": { "caption": "ER图", "psmodeltype": "PSSYSERMAP" },
"pssysdbschemes": { "caption": "数据库", "psmodeltype": "PSSYSDBSCHEME" },
"pssysbdschemes": { "caption": "大数据", "psmodeltype": "PSSYSBDSCHEME" },
"pssyssearchschemes": { "caption": "全文检索", "psmodeltype": "PSSYSSEARCHSCHEME" },
"pssysucmaps": { "caption": "用例", "psmodeltype": "PSSYSUCMAP" },
"pssysunireses": { "caption": "统一资源", "psmodeltype": "PSSYSUNIRES" },
"pssysusermodes": { "caption": "用户模式", "psmodeltype": "PSSYSUSERMODE" },
"pssysopprivs": { "caption": "系统角色", "psmodeltype": "PSSYSOPPRIV" },
"pssysuserdrs": { "caption": "自定义数据范围", "psmodeltype": "PSSYSUSERDR" },
"pssysapps": { "caption": "前端应用", "psmodeltype": "PSSYSAPP" },
"pssysserviceapis": { "caption": "服务接口", "psmodeltype": "PSSYSSERVICEAPI" },
"pssyscsses": { "caption": "界面样式表", "psmodeltype": "PSSYSCSS" },
"pssysimages": { "caption": "图片资源", "psmodeltype": "PSSYSIMAGE" },
"psdeuiactions": { "caption": "全局界面行为", "psmodeltype": "PSDEUIACTION" },
"psdeuagroups": { "caption": "全局界面行为组", "psmodeltype": "PSDEUAGROUP" },
"psdetoolbars": { "caption": "全局工具栏", "psmodeltype": "PSDETOOLBAR" },
"pssysportlets": { "caption": "门户部件", "psmodeltype": "PSSYSPORTLET" },
"psachandlers": { "caption": "全局界面处理", "psmodeltype": "PSACHANDLER" },
"pssyscounters": { "caption": "计数器", "psmodeltype": "PSSYSCOUNTER" },
"pssysviewpanels": { "caption": "视图部件面板", "psmodeltype": "PSSYSVIEWPANEL" },
"psviewmsg": { "caption": "视图消息", "psmodeltype": "PSVIEWMSG" },
"psviewmsggroups": { "caption": "视图消息组", "psmodeltype": "PSVIEWMSGGROUP" },
"psworkflows": { "caption": "工作流", "psmodeltype": "PSWORKFLOW" },
"pswfroles": { "caption": "工作流角色", "psmodeltype": "PSWFROLE" },
"pswfworktimes": { "caption": "工作流时间", "psmodeltype": "PSWFWORKTIME" },
"pssyspfplugins": { "caption": "前端模板插件", "psmodeltype": "PSSYSPFPLUGIN" },
"pssyssfplugins": { "caption": "后台模板插件", "psmodeltype": "PSSYSSFPLUGIN" },
"pssyseditorstyles": { "caption": "编辑器样式", "psmodeltype": "PSSYSEDITORSTYLE" },
"pssysdelogicnodes": { "caption": "逻辑处理组件", "psmodeltype": "PSSYSDELOGICNODE" },
"pssysdynamodels": { "caption": "动态模型", "psmodeltype": "PSSYSDYNAMODEL" },
"pssysvaluerules": { "caption": "值规则", "psmodeltype": "PSSYSVALUERULE" },
"pssubsysserviceapis": { "caption": "外部接口", "psmodeltype": "PSSUBSYSSERVICEAPI" },
"pssyscontentcats": { "caption": "内容分类", "psmodeltype": "PSSYSCONTENTCAT" },
"pssysresources": { "caption": "资源", "psmodeltype": "PSSYSRESOURCE" },
"psdegroups": { "caption": "实体组", "psmodeltype": "PSDEGROUP" },
"psdergroups": { "caption": "关系组", "psmodeltype": "PSDERGROUP" },
"pssysmsgtempls": { "caption": "消息模板", "psmodeltype": "PSSYSMSGTEMPL" },
"pssysbackservices": { "caption": "后台作业", "psmodeltype": "PSSYSBACKSERVICE" },
"pssystestprjs": { "caption": "测试项目", "psmodeltype": "PSSYSTESTPRJ" },
"pssysunits": { "caption": "单位", "psmodeltype": "PSSYSUNIT" }
},
"PSDATAENTITY": {
"psdefields": { "caption": "属性", "psmodeltype": "PSDEFIELD" },
"majorpsders": { "caption": "主关系", "psmodeltype": "PSDER" },
"minorpsders": { "caption": "从关系", "psmodeltype": "PSDER" },
"pscodelists": { "caption": "代码表", "psmodeltype": "PSCODELIST" },
"psdedbcfgs": { "caption": "数据库配置", "psmodeltype": "PSDEDBCFG" },
"psdedbindexs": { "caption": "数据库索引", "psmodeltype": "PSDEDBINDEX" },
"pssysdmitems": { "caption": "数据库结构", "psmodeltype": "PSSYSDMITEM" },
"pssyssearchdes": { "caption": "全文检索", "psmodeltype": "PSSYSSEARCHDE" },
"pssysbdtables": { "caption": "大数据", "psmodeltype": "PSSYSBDTABLE" },
"psdeactions": { "caption": "行为", "psmodeltype": "PSDEACTION" },
"psdelogics": { "caption": "处理逻辑", "psmodeltype": "PSDELOGIC" },
"psdedataqueries": { "caption": "数据查询", "psmodeltype": "PSDEDATAQUERY" },
"psdedatasets": { "caption": "数据集合", "psmodeltype": "PSDEDATASET" },
"psdeacmodes": { "caption": "自填模式", "psmodeltype": "PSDEACMODE" },
"psdeactionlogics": { "caption": "行为附加逻辑", "psmodeltype": "PSDEACTIONLOGIC" },
"dstpsdeactionlogics": { "caption": "行为附加逻辑(外)", "psmodeltype": "PSDEACTIONLOGIC" },
"srcpsdemaps": { "caption": "映射", "psmodeltype": "PSDEMAP" },
"psdefsfitems": { "caption": "搜索项", "psmodeltype": "PSDEFSFITEM" },
"psdefvaluerules": { "caption": "值规则", "psmodeltype": "PSDEFVALUERULE" },
"psdemainstates": { "caption": "主状态", "psmodeltype": "PSDEMAINSTATE" },
"psdedataexps": { "caption": "数据导出", "psmodeltype": "PSDEDATAEXP" },
"psdedatasyncs": { "caption": "数据同步", "psmodeltype": "PSDEDATASYNC" },
"psdedataimps": { "caption": "数据导入", "psmodeltype": "PSDEDATAIMP" },
"psdenotifies": { "caption": "实体通知", "psmodeltype": "PSDENOTIFY" },
"psdtsqueues": { "caption": "分布事务队列", "psmodeltype": "PSDEDTSQUEUE" },
"psdeforms": { "caption": "表单", "psmodeltype": "PSDEFORM" },
"psdegrids": { "caption": "表格", "psmodeltype": "PSDEGRID" },
"psdetreeviews": { "caption": "树视图", "psmodeltype": "PSDETREEVIEW" },
"psdecharts": { "caption": "图表", "psmodeltype": "PSDECHART" },
"psdelists": { "caption": "列表", "psmodeltype": "PSDELIST" },
"psdedataviews": { "caption": "卡片", "psmodeltype": "PSDEDATAVIEW" },
"psdetoolbars": { "caption": "工具栏", "psmodeltype": "PSDETOOLBAR" },
"pssysdashboards": { "caption": "数据看板", "psmodeltype": "PSSYSDASHBOARD" },
"pssysportlets": { "caption": "看板部件", "psmodeltype": "PSSYSPORTLET" },
"psachandlers": { "caption": "界面处理", "psmodeltype": "PSACHANDLER" },
"psdeviewbases": { "caption": "视图", "psmodeltype": "PSDEVIEWBASE" },
"pssysviewpanels": { "caption": "面板", "psmodeltype": "PSSYSVIEWPANEL" },
"pssysmapviews": { "caption": "地图", "psmodeltype": "PSSYSMAPVIEW" },
"pssyscalendars": { "caption": "日历", "psmodeltype": "PSSYSCALENDAR" },
"pssyssearchbars": { "caption": "搜索栏", "psmodeltype": "PSSYSSEARCHBAR" },
"psdedatarelations": { "caption": "关系界面组", "psmodeltype": "PSDEDATARELATION" },
"psdedrgroups": { "caption": "关系界面分组", "psmodeltype": "PSDEDRGROUP" },
"psdedritems": { "caption": "关系界面", "psmodeltype": "PSDEDRITEM" },
"psdeuilogics": { "caption": "界面逻辑", "psmodeltype": "PSDELOGIC" },
"psctrllogicgroups": { "caption": "界面逻辑组", "psmodeltype": "PSCTRLLOGICGROUP" },
"psdeuiactions": { "caption": "界面行为", "psmodeltype": "PSDEUIACTION" },
"psdeuagroups": { "caption": "界面行为组", "psmodeltype": "PSDEUAGROUP" },
"pssyscounters": { "caption": "计数器", "psmodeltype": "PSSYSCOUNTER" },
"psdewizards": { "caption": "向导", "psmodeltype": "PSDEWIZARD" },
"psdefuimodes": { "caption": "属性界面模式", "psmodeltype": "PSDEFFORMITEM" },
"pswfdes": { "caption": "工作流实体", "psmodeltype": "PSWFDE" },
"psdeprints": { "caption": "打印", "psmodeltype": "PSDEPRINT" },
"psdereports": { "caption": "报表", "psmodeltype": "PSDEREPORT" },
"psdeutildes": { "caption": "功能配置", "psmodeltype": "PSDEUTILDE" },
"psdeserviceapis": { "caption": "服务实体", "psmodeltype": "PSDESERVICEAPI" },
"psapplocaldes": { "caption": "应用实体", "psmodeltype": "PSAPPLOCALDE" },
"psdeopprivs": { "caption": "操作标识", "psmodeltype": "PSDEOPPRIV" },
"psdeuserroles": { "caption": "操作角色", "psmodeltype": "PSDEUSERROLE" },
"pshelparticles": { "caption": "帮助文章", "psmodeltype": "PSHELPARTICLE" },
"pssystasks": { "caption": "开发任务", "psmodeltype": "PSSYSTASK" },
"pslanguageres": { "caption": "语言资源", "psmodeltype": "PSLANGUAGERES" },
"psdesampledata": { "caption": "示例数据", "psmodeltype": "PSDESAMPLEDATA" },
"pssystestdatas": { "caption": "测试数据", "psmodeltype": "PSSYSTESTDATA" },
"pssystestcases": { "caption": "测试用例", "psmodeltype": "PSSYSTESTCASE" },
"psdefgroups": { "caption": "属性组", "psmodeltype": "PSDEFGROUP" },
"psdergroups": { "caption": "关系组", "psmodeltype": "PSDERGROUP" },
"psdegroups": { "caption": "实体组", "psmodeltype": "PSDEGROUP" },
"psdeactiongroups": { "caption": "行为组", "psmodeltype": "PSDEACTIONGROUP" }
},
"PSDEFIELD": {
"psdefdtcols": { "caption": "数据库", "psmodeltype": "PSDEFDTCOL" },
"psdefvaluerules": { "caption": "值规则", "psmodeltype": "PSDEFVALUERULE" },
"psdefsfitems": { "caption": "搜索模式", "psmodeltype": "PSDEFSFITEM" },
"psdefuimodes": { "caption": "界面模式", "psmodeltype": "PSDEFFORMITEM" },
"psdefinputtips": { "caption": "输入提示", "psmodeltype": "PSDEFINPUTTIP" },
"pssyssearchdefields": { "caption": "全文检索", "psmodeltype": "PSSYSSEARCHDEFIELD" },
"pssystestcases": { "caption": "值规则测试用例", "psmodeltype": "PSSYSTESTCASE" },
"pshelpsections": { "caption": "帮助章节", "psmodeltype": "PSHELPSECTION" },
"psdefields": { "caption": "关系属性", "psmodeltype": "PSDEFIELD" }
},
"PSDER": {
"psdedritems": { "caption": "关系界面", "psmodeltype": "PSDEDRITEM" },
"psdefields": { "caption": "关系属性", "psmodeltype": "PSDEFIELD" },
"psderdefmaps": { "caption": "属性值映射", "psmodeltype": "PSDERDEFMAP" },
"psdeopprivs": { "caption": "操作标识映射", "psmodeltype": "PSDEOPPRIV" }
},
"PSAPPLOCALDE": {
"psappviews": { "caption": "应用视图", "psmodeltype": "PSAPPVIEW" }
},
"PSAPPMODULE": {
"psappviews": { "caption": "应用视图", "psmodeltype": "PSAPPVIEW" },
"psapplocaldes": { "caption": "应用实体", "psmodeltype": "PSAPPLOCALDE" }
},
"PSAPPWF": {
"psappwfvers": { "caption": "版本", "psmodeltype": "PSAPPWFVER" }
},
"PSCODELIST": {
"pscodeitems": { "caption": "代码项", "psmodeltype": "PSCODEITEM" }
},
"PSCTRLLOGICGROUP": {
"psctrllogicgrpdetails": { "caption": "组成员", "psmodeltype": "PSCTRLLOGICGRPDETAIL" }
},
"PSCTRLMSG": {
"psctrlmsgitems": { "caption": "消息项", "psmodeltype": "PSCTRLMSGITEM" }
},
"PSDEACTION": {
"psdeactionparams": { "caption": "行为参数", "psmodeltype": "PSDEACTIONPARAM" },
"psdeactionlogics": { "caption": "附加逻辑", "psmodeltype": "PSDEACTIONLOGIC" },
"psdeactionvrs": { "caption": "参数值规则", "psmodeltype": "PSDEACTIONVR" },
"pssystestcases": { "caption": "测试用例", "psmodeltype": "PSSYSTESTCASE" }
},
"PSDEDBINDEX": {
"psdedbidxfields": { "caption": "索引列", "psmodeltype": "PSDEDBIDXFIELD" }
},
"PSDEDATAIMP": {
"psdedataimpitems": { "caption": "导入项", "psmodeltype": "PSDEDATAIMPITEM" }
},
"PSDEDATARELATION": {
"psdedrdetails": { "caption": "关系成员", "psmodeltype": "PSDEDRDETAIL" }
},
"PSDEDATASET": {
"psdedsdqs": { "caption": "查询项", "psmodeltype": "PSDEDSDQ" }
},
"PSDEFGROUP": {
"psdefgroupdetails": { "caption": "组成员", "psmodeltype": "PSDEFGROUPDETAIL" }
},
"PSDEMAINSTATE": {
"psdemsactions": { "caption": "控制行为", "psmodeltype": "PSDEMSACTION" },
"psdemsopprivs": { "caption": "控制访问标识", "psmodeltype": "PSDEMSOPPRIV" }
},
"PSDEMAP": {
"psdemapdetails": { "caption": "属性映射", "psmodeltype": "PSDEMAPDETAIL" },
"psdemapactions": { "caption": "行为映射", "psmodeltype": "PSDEMAPACTION" },
"psdemapds": { "caption": "数据集合映射", "psmodeltype": "PSDEMAPDS" },
"psdemapdqs": { "caption": "数据查询映射", "psmodeltype": "PSDEMAPDQ" }
},
"PSDERGROUP": {
"psdergroupdetails": { "caption": "组成员", "psmodeltype": "PSDERGROUPDETAIL" }
},
"PSDEREPORT": {
"psderepitems": { "caption": "子报表", "psmodeltype": "PSDEREPITEM" }
},
"PSDESERVICEAPI": {
"psdesadetails": { "caption": "方法", "psmodeltype": "PSDESADETAIL" },
"minorpsdesarss": { "caption": "从关系", "psmodeltype": "PSDESARS" },
"psdesavrs": { "caption": "值规则", "psmodeltype": "PSDESAVR" },
"majorpsdesarss": { "caption": "主关系", "psmodeltype": "PSDESARS" },
"pssystestcases": { "caption": "测试用例", "psmodeltype": "PSSYSTESTCASE" }
},
"PSDEUAGROUP": {
"psdeuagrpdetails": { "caption": "组成员", "psmodeltype": "PSDEUAGRPDETAIL" }
},
"PSDEUSERROLE": {
"psdeopprivroles": { "caption": "操作控制", "psmodeltype": "PSDEOPPRIVROLE" }
},
"PSLANGUAGERES": {
"pslanguageitems": { "caption": "资源项", "psmodeltype": "PSLANGUAGEITEM" }
},
"PSSUBSYSSADE": {
"pssubsyssadefields": { "caption": "属性", "psmodeltype": "PSSUBSYSSADEFIELD" },
"majorpssubsyssaderss": { "caption": "主关系", "psmodeltype": "PSSUBSYSSADERS" },
"minorpssubsyssaderss": { "caption": "从关系", "psmodeltype": "PSSUBSYSSADERS" },
"pssubsyssadetails": { "caption": "行为", "psmodeltype": "PSSUBSYSSADETAIL" }
},
"PSSUBSYSSERVICEAPI": {
"pssubsyssades": { "caption": "接口实体", "psmodeltype": "PSSUBSYSSADE" },
"pssubsyssaderss": { "caption": "接口实体关系", "psmodeltype": "PSSUBSYSSADERS" }
},
"PSSYSAPP": {
"psappmodules": { "caption": "应用模块", "psmodeltype": "PSAPPMODULE" },
"psappviews": { "caption": "应用视图", "psmodeltype": "PSAPPVIEW" },
"psappfuncs": { "caption": "应用功能", "psmodeltype": "PSAPPFUNC" },
"psappmenus": { "caption": "应用菜单", "psmodeltype": "PSAPPMENU" },
"psapputilpages": { "caption": "功能视图", "psmodeltype": "PSAPPUTILPAGE" },
"psapppdtviews": { "caption": "预置视图", "psmodeltype": "PSAPPPDTVIEW" },
"psappresources": { "caption": "资源", "psmodeltype": "PSAPPRESOURCE" },
"psappportlets": { "caption": "看板部件", "psmodeltype": "PSAPPPORTLET" },
"psappstoryboards": { "caption": "故事板", "psmodeltype": "PSAPPSTORYBOARD" },
"psappuithemes": { "caption": "界面主题", "psmodeltype": "PSAPPUITHEME" },
"psapplans": { "caption": "多语言", "psmodeltype": "PSAPPLAN" },
"psapplocaldes": { "caption": "应用实体", "psmodeltype": "PSAPPLOCALDE" },
"psmobappstartpages": { "caption": "移动端资源", "psmodeltype": "PSMOBAPPSTARTPAGE" },
"psappuistyles": { "caption": "界面模式", "psmodeltype": "PSAPPUISTYLE" },
"psappwfs": { "caption": "应用工作流", "psmodeltype": "PSAPPWF" },
"psapputils": { "caption": "功能配置", "psmodeltype": "PSAPPUTIL" },
"psapppkgs": { "caption": "组件包", "psmodeltype": "PSAPPPKG" },
"pssystasks": { "caption": "开发任务", "psmodeltype": "PSSYSTASK" },
"pssystestprjs": { "caption": "测试项目", "psmodeltype": "PSSYSTESTPRJ" }
},
"PSSYSBDSCHEME": {
"pssysbdmodules": { "caption": "模块", "psmodeltype": "PSSYSBDMODULE" },
"pssysbdparts": { "caption": "数据分区", "psmodeltype": "PSSYSBDPART" },
"pssysbdtables": { "caption": "数据表", "psmodeltype": "PSSYSBDTABLE" },
"pssysbdtablerses": { "caption": "数据表关系", "psmodeltype": "PSSYSBDTABLERS" }
},
"PSSYSBDTABLE": {
"pssysbdtabledes": { "caption": "数据表实体", "psmodeltype": "PSSYSBDTABLEDE" },
"pssysbdcolsets": { "caption": "列族", "psmodeltype": "PSSYSBDCOLSET" },
"pssysbdcolumns": { "caption": "数据列", "psmodeltype": "PSSYSBDCOLUMN" }
},
"PSSYSCONTENTCAT": {
"pssyscontentcats": { "caption": "子分类", "psmodeltype": "PSSYSCONTENTCAT" },
"pssyscontents": { "caption": "内容", "psmodeltype": "PSSYSCONTENT" }
},
"PSSYSCOUNTER": {
"pssyscounteritems": { "caption": "计数项", "psmodeltype": "PSSYSCOUNTERITEM" }
},
"PSSYSDBSCHEME": {
"pssysdbtables": { "caption": "数据表", "psmodeltype": "PSSYSDBTABLE" }
},
"PSSYSDBTABLE": {
"pssysdbcolumns": { "caption": "数据列", "psmodeltype": "PSSYSDBCOLUMN" }
},
"PSSYSMODELGROUP": {
"psmodules": { "caption": "模块", "psmodeltype": "PSMODULE" }
},
"PSSYSOPPRIV": {
"pssysuserrolereses": { "caption": "统一资源", "psmodeltype": "PSSYSUSERROLERES" },
"pssysuserroledatas": { "caption": "实体角色", "psmodeltype": "PSSYSUSERROLEDATA" }
},
"PSSYSPFPLUGIN": {
"pssyspfpitempls": { "caption": "插件模板", "psmodeltype": "PSSYSPFPITEMPL" }
},
"PSSYSREF": {
"psmodules": { "caption": "模块", "psmodeltype": "PSMODULE" }
},
"PSSYSSFPLUGIN": {
"pssyssfpitempls": { "caption": "插件模板", "psmodeltype": "PSSYSSFPITEMPL" }
},
"PSSYSSFPUB": {
"pssyssfpubs": { "caption": "子体系", "psmodeltype": "PSSYSSFPUB" },
"pssyssfpubpkgs": { "caption": "组件包", "psmodeltype": "PSSYSSFPUBPKG" }
},
"PSSYSSEARCHDE": {
"pssyssearchdefields": { "caption": "检索属性", "psmodeltype": "PSSYSSEARCHDEFIELD" }
},
"PSSYSSEARCHDOC": {
"pssyssearchfields": { "caption": "检索属性", "psmodeltype": "PSSYSSEARCHFIELD" },
"pssyssearchdes": { "caption": "检索实体", "psmodeltype": "PSSYSSEARCHDE" }
},
"PSSYSSEARCHSCHEME": {
"pssyssearchdocs": { "caption": "检索文档", "psmodeltype": "PSSYSSEARCHDOC" },
"pssyssearchdes": { "caption": "检索实体", "psmodeltype": "PSSYSSEARCHDE" }
},
"PSSYSSERVICEAPI": {
"psdeserviceapis": { "caption": "实体接口", "psmodeltype": "PSDESERVICEAPI" },
"psdesarses": { "caption": "接口关系", "psmodeltype": "PSDESARS" },
"pssystestprjs": { "caption": "测试项目", "psmodeltype": "PSSYSTESTPRJ" }
},
"PSSYSTESTDATA": {
"pssystditems": { "caption": "数据项", "psmodeltype": "PSSYSTDITEM" }
},
"PSSYSTESTMODULE": {
"pssystestcases": { "caption": "测试用例", "psmodeltype": "PSSYSTESTCASE" }
},
"PSSYSTESTPRJ": {
"pssystestmodules": { "caption": "测试模块", "psmodeltype": "PSSYSTESTMODULE" }
},
"PSSYSWFSETTING": {
"pswfutiluiactions": { "caption": "功能界面行为", "psmodeltype": "PSWFUTILUIACTION" }
},
"PSVIEWMSGGROUP": {
"psviewmsggrpdetails": { "caption": "组成员", "psmodeltype": "PSVIEWMSGGRPDETAIL" }
},
"PSWORKFLOW": {
"pswfversions": { "caption": "版本", "psmodeltype": "PSWFVERSION" },
"pswfdes": { "caption": "相关实体", "psmodeltype": "PSWFDE" },
"psappwfs": { "caption": "工作流应用", "psmodeltype": "PSAPPWF" }
}
}

View File

@ -0,0 +1,3 @@
body {
padding: 0;
}

View File

@ -0,0 +1,4 @@
body {
height: 100vh;
width: 100vw;
}

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1638773269977" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M269.73866667 306.79466667a7.936 7.936 0 0 1 12.928 6.272v81.28c0 2.56-1.216 4.8-3.072 6.336L164.58666667 490.66666667l115.008 89.984c1.92 1.536 3.072 3.84 3.072 6.336v81.28a8 8 0 0 1-12.928 6.272L50.79466667 503.27466667a16.128 16.128 0 0 1 0-25.216z m430.656 1.344a7.936 7.936 0 0 1 11.2-1.344l193.088 151.04a255.552 255.552 0 0 0-141.696-9.28l-61.248-47.872a7.744 7.744 0 0 1-3.072-6.336v-81.28c0-1.792 0.64-3.52 1.728-4.928z m-230.592 366.4l-0.64 1.728-51.008 148.352-0.448 1.28-0.448 1.28-0.192 0.64-0.64 2.048a8.064 8.064 0 0 1-7.68 5.376H340.90666667a8 8 0 0 1-7.552-10.56L564.77866667 152.74666667a8.064 8.064 0 0 1 7.616-5.376h67.456a8.128 8.128 0 0 1 7.68 10.688l-7.36 21.44-0.192 0.768-0.192 0.832-167.808 487.168-2.176 6.272z" fill="#c5c5c5"></path><path d="M629.03466667 695.97866667c1.792-34.496 16.192-66.752 40.768-91.392a140.416 140.416 0 0 1 207.36 10.112l-23.04 17.92a8 8 0 0 0 3.008 14.08l93.248 22.528a8.064 8.064 0 0 0 9.92-7.68l0.64-95.424a8 8 0 0 0-12.928-6.4l-20.288 15.744a204.16 204.16 0 0 0-362.816 119.808c-0.192 4.48 3.52 8.32 8 8.32h48.128a7.936 7.936 0 0 0 8-7.616zM964.90666667 703.59466667h-48.128a7.936 7.936 0 0 0-7.936 7.616 139.008 139.008 0 0 1-40.832 91.392 140.416 140.416 0 0 1-207.36-10.112l23.04-17.92a8 8 0 0 0-3.008-14.08l-93.248-22.464a8.064 8.064 0 0 0-9.92 7.68l-0.64 95.36c0 6.72 7.68 10.56 12.928 6.4l20.288-15.744a204.16 204.16 0 0 0 362.816-119.808 8 8 0 0 0-8-8.32z" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M707 212h-510A75.09 75.09 0 0 0 122 287v570C122 898.37 155.66 932 197 932h510c41.37 0 75-33.63 75-75v-570C782 245.66 748.37 212 707 212z m15 645c0 8.25-6.75 15-15 15h-510a15 15 0 0 1-15-15v-570a15 15 0 0 1 15-15h510a15 15 0 0 1 15 15v570z" fill="#c5c5c5"></path><path d="M827 92h-510a30 30 0 0 0 0 60h510a15 15 0 0 1 15 15v570a30 30 0 1 0 60 0v-570C902 125.66 868.37 92 827 92z" fill="#c5c5c5"></path><path d="M602 369.5H302a30 30 0 0 0 0 60h300a30 30 0 1 0 0-60zM602 519.5H302a30 30 0 1 0 0 60h300a30 30 0 1 0 0-60zM482 668.24H302a30 30 0 1 0 0 60h180a30 30 0 1 0 0-60z" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 933 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><style>.st0{opacity:0}.st0,.st1{fill:#2d2d30}.st2{fill:#c5c5c5}.st3{fill:#2b282e}</style><g id="outline"><path class="st0" d="M0 0h16v16H0z"/><path class="st1" d="M9.586 16L8 14.414 6.414 16H1.586L0 14.414v-3.828L1.586 9H3.53l1.333-2h-.278L3 5.414V1.586L4.585 0h6.829L13 1.586v3.828L11.414 7h-.278l1.334 2h1.944L16 10.586v3.828L14.414 16H9.586zM8 10.586l1.152-1.152L8 7.705 6.847 9.434 8 10.586z"/></g><path class="st2" d="M14 10h-2.065L9.268 6H11l1-1V2l-1-1H5L4 2v3l1 1h1.733l-2.667 4H2l-1 1v3l1 1h4l1-1v-3l-1-1h-.732l2.667-4h.131l2.667 4H10l-1 1v3l1 1h4l1-1v-3l-1-1zm-8 1v3H2v-3h4zM5 5V2h6v3H5zm9 9h-4v-3h4v3z" id="icon_x5F_bg"/><path class="st3" d="M14 11v3h-4v-3h4zM2 14h4v-3H2v3zm9-12H5v3h6V2z" id="icon_x5F_fg"/></svg>

After

Width:  |  Height:  |  Size: 784 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style type="text/css">.icon-canvas-transparent{opacity:0;fill:#F6F6F6;} .icon-vs-out{opacity:0;fill:#F6F6F6;} .icon-vs-bg{fill:#656565;} .icon-vs-fg{fill:#F0EFF1;}</style><path class="icon-canvas-transparent" d="M16 16h-16v-16h16v16z" id="canvas"/><path class="icon-vs-out" d="M4 15c-.97 0-2-.701-2-2v-10c0-1.299 1.03-2 2-2h6.061l3.939 3.556v8.444c0 .97-.701 2-2 2h-8z" id="outline"/><path class="icon-vs-bg" d="M9.641,2H3.964C3.964,2,3,2,3,3c0,0.805,0,7.442,0,10c0,1,0.965,1,0.965,1s7,0,8,0S13,13,13,13V5L9.641,2zM12,13H4V3h5v3h3V13z" id="iconBg"/><path class="icon-vs-fg" d="M4 3h5v3h3v7h-8v-10z" id="iconFg"/></svg>

After

Width:  |  Height:  |  Size: 682 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style type="text/css">.icon-canvas-transparent{opacity:0;fill:#2d2d30;} .icon-vs-out{fill:#2d2d30;} .icon-vs-bg{fill:#c5c5c5;}</style><path class="icon-canvas-transparent" d="M16 16h-16v-16h16v16z" id="canvas"/><path class="icon-vs-out" d="M16 4.28l-11.673 11.72h-4.327v-4.406l11.477-11.594h.308l4.215 4.237v.043z" id="outline" style="display: none;"/><path class="icon-vs-bg" d="M14.598 4.25l-1.688 1.75-3-3 1.688-1.75 3 3zm-5.688-.25l-7 7 3 3 7-7-3-3zm-7.91 8.09v2.91h2.91l-2.91-2.91z" id="iconBg"/></svg>

After

Width:  |  Height:  |  Size: 571 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style type="text/css">.icon-canvas-transparent{opacity:0;fill:#F6F6F6;} .icon-vs-out{opacity:0;fill:#F6F6F6;} .icon-vs-fg{opacity:0;fill:#F0EFF1;} .icon-folder{fill:#C5C5C5;}</style><path class="icon-canvas-transparent" d="M16 16h-16v-16h16v16z" id="canvas"/><path class="icon-vs-out" d="M16 2.5v10c0 .827-.673 1.5-1.5 1.5h-11.996c-.827 0-1.5-.673-1.5-1.5v-8c0-.827.673-1.5 1.5-1.5h2.886l1-2h8.11c.827 0 1.5.673 1.5 1.5z" id="outline"/><path class="icon-folder" d="M14.5 2h-7.492l-1 2h-3.504c-.277 0-.5.224-.5.5v8c0 .276.223.5.5.5h11.996c.275 0 .5-.224.5-.5v-10c0-.276-.225-.5-.5-.5zm-.496 2h-6.496l.5-1h5.996v1z" id="iconBg"/><path class="icon-vs-fg" d="M14 3v1h-6.5l.5-1h6z" id="iconFg"/></svg>

After

Width:  |  Height:  |  Size: 760 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M226.58 550.58c2.34 0 4.68 0.36 6.9 1.02a29.7 29.7 0 0 1 19.44 22.62 35.34 35.34 0 0 1-7.44 30.78l-10.92 12.78a124.62 124.62 0 0 0-24.9 108c7.98 37.5 33.9 67.56 68.04 79.02 8.1 2.58 16.5 3.84 24.9 3.78 25.92-0.12 50.64-11.94 68.04-32.58 32.82-40.14 56.16-50.94 69.9-32.34 13.8 18.6 3.36 44.28-31.26 76.92A139.8 139.8 0 0 1 302.6 872a139.5 139.5 0 0 1-105.72-50.4l-0.84-1.02c-58.74-70.44-58.74-177.12 0-247.56l10.92-12.84a25.56 25.56 0 0 1 19.62-9.6zM542.3 92a138.54 138.54 0 0 1 105.6 51.42c58.32 69.78 58.86 175.44 1.26 246l-10.8 12.78a24.9 24.9 0 0 1-19.2 8.82 25.02 25.02 0 0 1-18.96-9.42 35.64 35.64 0 0 1-0.36-44.4l10.92-12.6a124.8 124.8 0 0 0 25.44-108.42c-7.98-37.62-34.02-67.8-68.4-79.38a85.86 85.86 0 0 0-24.6-3.6 90.72 90.72 0 0 0-68.58 33.42L343.7 338.6c-28.38 34.2-36 82.86-19.68 125.22 14.16 38.94 48.72 64.92 87.6 65.76 2.1 0 4.14 0 6.18-0.18l2.04-0.18a26.58 26.58 0 0 1 22.62 14.16c5.46 9.6 6.12 21.6 1.74 31.8a27.48 27.48 0 0 1-22.98 17.4c-3.24 0.24-6.42 0.42-9.6 0.42a141.78 141.78 0 0 1-106.44-51.42c-58.8-70.44-58.8-177.12 0-247.56L436.1 141.8A138.24 138.24 0 0 1 542.3 92zM450.2 370.58c28.62 3.78 55.5 16.68 77.22 37.02 22.62 21 26.52 25.8 38.52 53.58s12 51.6-2.88 59.52c-14.82 7.86-34.62 4.98-46.8-35.28-24.06-42.6-61.62-49.74-72-52.02-10.38-2.28-13.98-5.1-18.3-11.58a34.98 34.98 0 0 1-5.82-23.22c0.9-15.48 12.6-27.72 27-28.2 1.08 0 2.1 0 3.06 0.18zM643.28 527a165 165 0 0 1 131.58 264.6l87.48 87.42a7.44 7.44 0 0 1 0 10.5l-29.04 29.1a7.56 7.56 0 0 1-5.28 2.16 7.32 7.32 0 0 1-5.22-2.16l-88.8-88.8a165 165 0 1 1-90.72-302.82z m0 60a105 105 0 1 0 0 210 105 105 0 1 0 0-210z" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M551.326129 826.39452076c82.9423794 0 165.95626143 0 249.04164606 0.21450614-43.90225919-52.91151772-88.23353236-105.17951861-132.99381616-157.30451261a4441.85045607 4441.85045607 0 0 1-116.0478299 157.09000647z m157.30451261-219.29679145c45.04629259 54.69906955 88.80554821 110.39916726 131.06326076 167.10029482-0.57201585-126.70163505 0-253.54627533-0.35750969-380.17640941-39.82664224 72.93209274-82.22736001 144.86315731-130.70575107 213.07611459z m-314.60902689-213.07611459c3.78960817 135.9969023 60.06172342 262.19802413 124.41356994 380.17640941 33.60596373-55.12808187 65.92489221-110.82817957 98.45832519-166.74278511-72.71758657-72.71758657-144.00513267-147.0797198-222.87189513-213.4336243zM174.4388145 223.63222494c-3.36059586 199.99123916-5.86316881 400.19698279 1.64454662 600.04521841 98.67283134 4.07561693 197.63167143 2.57407386 296.59050988 2.93158355-131.77828182-184.40379075-256.69236502-381.67795251-298.2350565-602.97680196z m114.68929036-39.32612731a4110.93895971 4110.93895971 0 0 1 357.22425083 340.77877784c57.91666189-112.25822172 112.97324112-225.87498131 167.17179577-339.84925228-174.75101377-0.35750969-349.43052665 0.92952724-524.3960466-0.92952556zM118.73871511 118.73871511h783.01896871c4.29012309 262.12652153 5.14814772 524.39604658-0.35750973 786.52256978H118.73871511v-786.52256978z" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M827.17961482 638.70293333c-16.86945185 0-33.7389037 5.33997037-50.60835557 10.8013037L607.63401482 353.01451852c28.15620741-26.94257778 50.60835555-59.34648889 50.60835555-102.43034074 0-75.48776297-61.89511111-134.83425185-140.65967407-134.83425186s-140.65967408 64.68645925-140.65967408 134.83425186c0 32.28254815 11.28675555 64.68645925 33.7389037 91.62903704L236.14198518 644.0429037c-11.28675555 0-22.45214815-5.33997037-33.7389037-5.33997037-78.76456297 0-140.65967408 59.34648889-140.65967407 134.71288889 0 75.48776297 61.89511111 134.83425185 140.65967407 134.83425186 67.59917037 0 123.79022222-48.54518518 135.07697777-113.23164445h348.91851853c11.28675555 64.68645925 67.59917037 113.23164445 135.07697777 113.23164445 78.76456297 0 140.65967408-59.34648889 140.65967408-134.83425186 0.12136297-75.3664-56.19105185-134.71288889-134.95561481-134.71288889zM697.68533333 741.13327408H343.18411852c-5.5826963-32.40391111-28.15620741-59.34648889-50.60835555-75.48776297l168.81588148-291.14974814c16.86945185 10.8013037 39.44296297 10.8013037 56.3124148 10.8013037 11.28675555 0 28.15620741 0 39.44296297-5.33997037L731.66696297 676.44681482c-16.99081482 16.14127408-28.27757037 37.74388148-33.98162964 64.68645926z" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M13.451 5.609l-.579-.939-1.068.812-.076.094c-.335.415-.927 1.341-1.124 2.876l-.021.165.033.163.071.345c0 1.654-1.346 3-3 3-.795 0-1.545-.311-2.107-.868-.563-.567-.873-1.317-.873-2.111 0-1.431 1.007-2.632 2.351-2.929v2.926s2.528-2.087 2.984-2.461h.012l3.061-2.582-4.919-4.1h-1.137v2.404c-3.429.318-6.121 3.211-6.121 6.721 0 1.809.707 3.508 1.986 4.782 1.277 1.282 2.976 1.988 4.784 1.988 3.722 0 6.75-3.028 6.75-6.75 0-1.245-.349-2.468-1.007-3.536z" fill="#2D2D30"/><path d="M12.6 6.134l-.094.071c-.269.333-.746 1.096-.91 2.375.057.277.092.495.092.545 0 2.206-1.794 4-4 4-1.098 0-2.093-.445-2.817-1.164-.718-.724-1.163-1.718-1.163-2.815 0-2.206 1.794-4 4-4l.351.025v1.85s1.626-1.342 1.631-1.339l1.869-1.577-3.5-2.917v2.218l-.371-.03c-3.176 0-5.75 2.574-5.75 5.75 0 1.593.648 3.034 1.695 4.076 1.042 1.046 2.482 1.694 4.076 1.694 3.176 0 5.75-2.574 5.75-5.75-.001-1.106-.318-2.135-.859-3.012z" fill="#C5C5C5"/></svg>

After

Width:  |  Height:  |  Size: 986 B

View File

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M794.09066667 147.81866667c14.976 0 27.072 12.224 27.072 27.392v323.392A197.312 197.312 0 0 0 765.61066667 490.66666667l-5.312 0.128V380.97066667H375.14666667v390.848h209.28c10.368 23.296 24.96 44.16 42.944 61.76h-455.04a27.2 27.2 0 0 1-26.944-27.52V175.27466667c0-15.168 12.032-27.392 27.008-27.392z m-473.024 61.696H206.18666667v562.304H321.06666667V209.51466667z m439.232 0H375.14666667V326.18666667h385.152V209.51466667z" fill="#c5c5c5"></path><path d="M751.78666667 521.64266667a155.584 155.584 0 0 1 154.88 155.84c0 35.968-12.352 69.376-32.896 95.808l77.76 78.208a18.624 18.624 0 0 1-0.32 27.072 18.176 18.176 0 0 1-26.56 0l-77.76-78.336c-26.24 20.672-59.136 33.088-95.168 33.088a155.648 155.648 0 0 1-154.88-155.84 155.648 155.648 0 0 1 154.88-155.84z m-0.96 38.144a119.424 119.424 0 0 0-118.976 119.744 119.424 119.424 0 0 0 118.976 119.68 119.424 119.424 0 0 0 118.912-119.68c0-66.048-53.184-119.68-118.912-119.744z" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M490.667 97.766c84.468 0 164.13 8.447 224.278 23.666 30.584 7.792 54.905 17.112 72.454 27.67 8.52 5.098 15.656 10.632 21.117 16.603 9.976 10.705 15 22.574 15 35.608v1.966l-.145 1.966.146 166.025v135.514a236.658 236.658 0 00-46.895-24.176V259.422a281.805 281.805 0 01-47.331 17.84l-14.346 3.86c-60.147 15.291-139.81 23.738-224.278 23.738-84.469 0-164.132-8.374-224.28-23.738a320.762 320.762 0 01-61.894-21.846v428.169l.073 48.642c2.039 2.913 16.092 19.88 84.031 35.317 50.827 11.65 115.635 18.423 184.01 19.442 7.428 17.695 16.895 34.37 28.181 49.662h-10.121c-84.469 0-164.132-8.301-224.28-23.593-30.583-7.719-54.904-16.967-72.453-27.453-20.971-12.597-32.913-27.597-35.608-44.637l-.51-7.427V199.274a45.948 45.948 0 012.185-12.524c4.005-12.67 13.544-24.03 28.4-34.152l5.533-3.568c17.476-10.486 41.87-19.806 72.454-27.598 60.147-15.292 139.81-23.666 224.279-23.666zm0 49.735c-75.003 0-146.801 6.918-202.142 19.66-43.691 9.977-65.027 20.608-75.294 27.671a37.647 37.647 0 00-7.646 6.554c4.223 4.952 21.627 20.243 83.012 34.224 55.269 12.67 126.995 19.661 202.07 19.661 75.002 0 146.8-6.99 202.142-19.66 61.312-14.054 78.716-29.273 83.012-34.225a38.01 38.01 0 00-7.719-6.554c-10.194-7.063-31.675-17.694-75.293-27.67-55.342-12.743-127.067-19.661-202.142-19.661z" fill="#c5c5c5"/><path d="M686.692 518.653a178.404 178.404 0 01178.84 177.311c0 40.924-14.272 78.935-37.937 108.936l89.784 89.056a21.044 21.044 0 01-.364 30.802 21.117 21.117 0 01-30.657 0l-89.857-89.13a178.33 178.33 0 01-109.955 37.648 178.404 178.404 0 01-178.84-177.312 178.404 178.404 0 01178.913-177.31zm-1.02 43.327a136.897 136.897 0 00-137.406 136.315A136.897 136.897 0 00685.6 834.464a136.897 136.897 0 00137.334-136.17A136.897 136.897 0 00685.673 561.98z" fill="#c5c5c5"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M912.81138357 813.88169609l-201.71651715-201.92745466c-2.35044608-2.35044608-4.94196405-4.12834845-7.4129469-6.05692035a332.19642893 332.19642893 0 0 0 53.96986643-181.82812499c0-184.47991095-149.40401798-333.97433047-333.79352738-333.97432966C239.58928595 90.09486643 90.09486643 239.58928595 90.09486643 424.06919607c0 184.51004453 149.49441953 333.97433047 333.76339215 333.97433048 67.078125 0 129.45535703-19.94866095 181.82812499-54.06026797 1.92857108 2.53125001 3.67633905 5.0625 5.96651798 7.3828125l201.77678595 201.92745547a70.09151798 70.09151798 0 0 0 99.35156251 0.0301344c27.421875-27.48214297 27.421875-71.98995548 0.03013356-99.44196486m-488.95312499-161.30691954c-125.86941952 0-228.35491095-102.515625-228.35491014-228.50558048 0-125.95982107 102.48549143-228.50558048 228.35491013-228.50557965 125.89955393 0 228.38504452 102.54575857 228.38504536 228.50557965 0 125.98995548-102.48549143 228.50558048-228.38504536 228.50558048" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1638773282266" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M309.5 272a7.5 7.5 0 0 0-7.5 7.5v45c0 4.14 3.36 7.5 7.5 7.5h360a7.5 7.5 0 0 0 7.5-7.5v-45A7.5 7.5 0 0 0 669.5 272h-360z m180 187.5v-45A7.5 7.5 0 0 0 482 407H309.5a7.5 7.5 0 0 0-7.5 7.5v45c0 4.14 3.36 7.5 7.5 7.5H482a7.5 7.5 0 0 0 7.5-7.5z m-45 371.28H227v-660H752v322.44c0 4.2 3.36 7.5 7.5 7.5H812a7.5 7.5 0 0 0 7.5-7.5v-360a30 30 0 0 0-30-30h-600a30 30 0 0 0-30 30v735a30 30 0 0 0 30 30h255A7.5 7.5 0 0 0 452 890.78v-52.56a7.5 7.5 0 0 0-7.5-7.44z m97.62-108.42c1.68-32.34 15.18-62.58 38.22-85.68a131.64 131.64 0 0 1 194.4 9.48l-21.6 16.8a7.5 7.5 0 0 0 2.82 13.2l87.42 21.06a7.56 7.56 0 0 0 9.3-7.2l0.6-89.4a7.5 7.5 0 0 0-12.12-6l-19.02 14.76A191.4 191.4 0 0 0 482 721.7c-0.18 4.2 3.3 7.8 7.5 7.8h45.12a7.44 7.44 0 0 0 7.5-7.14z m314.88 7.14h-45.12a7.44 7.44 0 0 0-7.5 7.14 130.32 130.32 0 0 1-38.22 85.68 131.64 131.64 0 0 1-194.4-9.48l21.6-16.8a7.5 7.5 0 0 0-2.82-13.2l-87.42-21.06a7.56 7.56 0 0 0-9.3 7.2l-0.6 89.4c0 6.3 7.2 9.9 12.12 6l19.02-14.76a191.4 191.4 0 0 0 340.14-112.32 7.5 7.5 0 0 0-7.5-7.8z" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M163.953125 754.578125h696.09375V269.421875H163.953125v485.15625zM90.125 195.59375h843.75v632.8125H90.125V195.59375z m200.07421875 475.875L248.328125 629.59765625l127.14257813-127.1953125L248.328125 375.25976562l41.87109375-41.87109374L459.265625 502.40234375l-169.06640625 169.06640625z m481.46484375 10.91601563H512V617.46875h259.61132813v64.86328125z" fill="#c5c5c5"></path></svg>

After

Width:  |  Height:  |  Size: 716 B

BIN
resources/icon/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1638773269977" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M269.73866667 306.79466667a7.936 7.936 0 0 1 12.928 6.272v81.28c0 2.56-1.216 4.8-3.072 6.336L164.58666667 490.66666667l115.008 89.984c1.92 1.536 3.072 3.84 3.072 6.336v81.28a8 8 0 0 1-12.928 6.272L50.79466667 503.27466667a16.128 16.128 0 0 1 0-25.216z m430.656 1.344a7.936 7.936 0 0 1 11.2-1.344l193.088 151.04a255.552 255.552 0 0 0-141.696-9.28l-61.248-47.872a7.744 7.744 0 0 1-3.072-6.336v-81.28c0-1.792 0.64-3.52 1.728-4.928z m-230.592 366.4l-0.64 1.728-51.008 148.352-0.448 1.28-0.448 1.28-0.192 0.64-0.64 2.048a8.064 8.064 0 0 1-7.68 5.376H340.90666667a8 8 0 0 1-7.552-10.56L564.77866667 152.74666667a8.064 8.064 0 0 1 7.616-5.376h67.456a8.128 8.128 0 0 1 7.68 10.688l-7.36 21.44-0.192 0.768-0.192 0.832-167.808 487.168-2.176 6.272z" fill="#424242"></path><path d="M629.03466667 695.97866667c1.792-34.496 16.192-66.752 40.768-91.392a140.416 140.416 0 0 1 207.36 10.112l-23.04 17.92a8 8 0 0 0 3.008 14.08l93.248 22.528a8.064 8.064 0 0 0 9.92-7.68l0.64-95.424a8 8 0 0 0-12.928-6.4l-20.288 15.744a204.16 204.16 0 0 0-362.816 119.808c-0.192 4.48 3.52 8.32 8 8.32h48.128a7.936 7.936 0 0 0 8-7.616zM964.90666667 703.59466667h-48.128a7.936 7.936 0 0 0-7.936 7.616 139.008 139.008 0 0 1-40.832 91.392 140.416 140.416 0 0 1-207.36-10.112l23.04-17.92a8 8 0 0 0-3.008-14.08l-93.248-22.464a8.064 8.064 0 0 0-9.92 7.68l-0.64 95.36c0 6.72 7.68 10.56 12.928 6.4l20.288-15.744a204.16 204.16 0 0 0 362.816-119.808 8 8 0 0 0-8-8.32z" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M707 212h-510A75.09 75.09 0 0 0 122 287v570C122 898.37 155.66 932 197 932h510c41.37 0 75-33.63 75-75v-570C782 245.66 748.37 212 707 212z m15 645c0 8.25-6.75 15-15 15h-510a15 15 0 0 1-15-15v-570a15 15 0 0 1 15-15h510a15 15 0 0 1 15 15v570z" fill="#424242"></path><path d="M827 92h-510a30 30 0 0 0 0 60h510a15 15 0 0 1 15 15v570a30 30 0 1 0 60 0v-570C902 125.66 868.37 92 827 92z" fill="#424242"></path><path d="M602 369.5H302a30 30 0 0 0 0 60h300a30 30 0 1 0 0-60zM602 519.5H302a30 30 0 1 0 0 60h300a30 30 0 1 0 0-60zM482 668.24H302a30 30 0 1 0 0 60h180a30 30 0 1 0 0-60z" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 933 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><style>.st0{opacity:0}.st0,.st1{fill:#f6f6f6}.st2{fill:#424242}.st3{fill:#f0eff1}</style><g id="outline"><path class="st0" d="M0 0h16v16H0z"/><path class="st1" d="M9.586 16L8 14.414 6.414 16H1.586L0 14.414v-3.828L1.586 9H3.53l1.333-2h-.278L3 5.414V1.586L4.585 0h6.829L13 1.586v3.828L11.414 7h-.278l1.334 2h1.944L16 10.586v3.828L14.414 16H9.586zM8 10.586l1.152-1.152L8 7.705 6.847 9.434 8 10.586z"/></g><path class="st2" d="M14 10h-2.065L9.268 6H11l1-1V2l-1-1H5L4 2v3l1 1h1.733l-2.667 4H2l-1 1v3l1 1h4l1-1v-3l-1-1h-.732l2.667-4h.131l2.667 4H10l-1 1v3l1 1h4l1-1v-3l-1-1zm-8 1v3H2v-3h4zM5 5V2h6v3H5zm9 9h-4v-3h4v3z" id="icon_x5F_bg"/><path class="st3" d="M14 11v3h-4v-3h4zM2 14h4v-3H2v3zm9-12H5v3h6V2z" id="icon_x5F_fg"/></svg>

After

Width:  |  Height:  |  Size: 784 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><style>.icon-canvas-transparent{opacity:0;fill:#2d2d30}.icon-vs-out{fill:#2d2d30}.icon-vs-bg{fill:#c5c5c5}.icon-vs-fg{fill:#2b282e}</style><path class="icon-canvas-transparent" d="M16 16H0V0h16v16z" id="canvas"/><path class="icon-vs-out" d="M15 16H2V0h8.621L15 4.379V16z" id="outline"/><path class="icon-vs-fg" d="M13 14H4V2h5v4h4v8zm-3-9V2.207L12.793 5H10z" id="iconFg"/><path class="icon-vs-bg" d="M3 1v14h11V4.793L10.207 1H3zm10 13H4V2h5v4h4v8zm-3-9V2.207L12.793 5H10z" id="iconBg"/></svg>

After

Width:  |  Height:  |  Size: 552 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style type="text/css">.icon-canvas-transparent{opacity:0;fill:#F6F6F6;} .icon-vs-out{fill:#F6F6F6;} .icon-vs-bg{fill:#424242;}</style><path class="icon-canvas-transparent" d="M16 16h-16v-16h16v16z" id="canvas"/><path class="icon-vs-out" d="M16 4.28l-11.673 11.72h-4.327v-4.406l11.477-11.594h.308l4.215 4.237v.043z" id="outline" style="display: none;"/><path class="icon-vs-bg" d="M14.598 4.25l-1.688 1.75-3-3 1.688-1.75 3 3zm-5.688-.25l-7 7 3 3 7-7-3-3zm-7.91 8.09v2.91h2.91l-2.91-2.91z" id="iconBg"/></svg>

After

Width:  |  Height:  |  Size: 571 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style type="text/css">.icon-canvas-transparent{opacity:0;fill:#F6F6F6;} .icon-vs-out{opacity:0;fill:#F6F6F6;} .icon-vs-fg{fill:#F0EFF1;} .icon-folder{fill:#656565;}</style><path class="icon-canvas-transparent" d="M16 16h-16v-16h16v16z" id="canvas"/><path class="icon-vs-out" d="M16 2.5v10c0 .827-.673 1.5-1.5 1.5h-11.996c-.827 0-1.5-.673-1.5-1.5v-8c0-.827.673-1.5 1.5-1.5h2.886l1-2h8.11c.827 0 1.5.673 1.5 1.5z" id="outline"/><path class="icon-folder" d="M14.5 2h-7.492l-1 2h-3.504c-.277 0-.5.224-.5.5v8c0 .276.223.5.5.5h11.996c.275 0 .5-.224.5-.5v-10c0-.276-.225-.5-.5-.5zm-.496 2h-6.496l.5-1h5.996v1z" id="iconBg"/><path class="icon-vs-fg" d="M14 3v1h-6.5l.5-1h6z" id="iconFg"/></svg>

After

Width:  |  Height:  |  Size: 750 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M226.58 550.58c2.34 0 4.68 0.36 6.9 1.02a29.7 29.7 0 0 1 19.44 22.62 35.34 35.34 0 0 1-7.44 30.78l-10.92 12.78a124.62 124.62 0 0 0-24.9 108c7.98 37.5 33.9 67.56 68.04 79.02 8.1 2.58 16.5 3.84 24.9 3.78 25.92-0.12 50.64-11.94 68.04-32.58 32.82-40.14 56.16-50.94 69.9-32.34 13.8 18.6 3.36 44.28-31.26 76.92A139.8 139.8 0 0 1 302.6 872a139.5 139.5 0 0 1-105.72-50.4l-0.84-1.02c-58.74-70.44-58.74-177.12 0-247.56l10.92-12.84a25.56 25.56 0 0 1 19.62-9.6zM542.3 92a138.54 138.54 0 0 1 105.6 51.42c58.32 69.78 58.86 175.44 1.26 246l-10.8 12.78a24.9 24.9 0 0 1-19.2 8.82 25.02 25.02 0 0 1-18.96-9.42 35.64 35.64 0 0 1-0.36-44.4l10.92-12.6a124.8 124.8 0 0 0 25.44-108.42c-7.98-37.62-34.02-67.8-68.4-79.38a85.86 85.86 0 0 0-24.6-3.6 90.72 90.72 0 0 0-68.58 33.42L343.7 338.6c-28.38 34.2-36 82.86-19.68 125.22 14.16 38.94 48.72 64.92 87.6 65.76 2.1 0 4.14 0 6.18-0.18l2.04-0.18a26.58 26.58 0 0 1 22.62 14.16c5.46 9.6 6.12 21.6 1.74 31.8a27.48 27.48 0 0 1-22.98 17.4c-3.24 0.24-6.42 0.42-9.6 0.42a141.78 141.78 0 0 1-106.44-51.42c-58.8-70.44-58.8-177.12 0-247.56L436.1 141.8A138.24 138.24 0 0 1 542.3 92zM450.2 370.58c28.62 3.78 55.5 16.68 77.22 37.02 22.62 21 26.52 25.8 38.52 53.58s12 51.6-2.88 59.52c-14.82 7.86-34.62 4.98-46.8-35.28-24.06-42.6-61.62-49.74-72-52.02-10.38-2.28-13.98-5.1-18.3-11.58a34.98 34.98 0 0 1-5.82-23.22c0.9-15.48 12.6-27.72 27-28.2 1.08 0 2.1 0 3.06 0.18zM643.28 527a165 165 0 0 1 131.58 264.6l87.48 87.42a7.44 7.44 0 0 1 0 10.5l-29.04 29.1a7.56 7.56 0 0 1-5.28 2.16 7.32 7.32 0 0 1-5.22-2.16l-88.8-88.8a165 165 0 1 1-90.72-302.82z m0 60a105 105 0 1 0 0 210 105 105 0 1 0 0-210z" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M551.326129 826.39452076c82.9423794 0 165.95626143 0 249.04164606 0.21450614-43.90225919-52.91151772-88.23353236-105.17951861-132.99381616-157.30451261a4441.85045607 4441.85045607 0 0 1-116.0478299 157.09000647z m157.30451261-219.29679145c45.04629259 54.69906955 88.80554821 110.39916726 131.06326076 167.10029482-0.57201585-126.70163505 0-253.54627533-0.35750969-380.17640941-39.82664224 72.93209274-82.22736001 144.86315731-130.70575107 213.07611459z m-314.60902689-213.07611459c3.78960817 135.9969023 60.06172342 262.19802413 124.41356994 380.17640941 33.60596373-55.12808187 65.92489221-110.82817957 98.45832519-166.74278511-72.71758657-72.71758657-144.00513267-147.0797198-222.87189513-213.4336243zM174.4388145 223.63222494c-3.36059586 199.99123916-5.86316881 400.19698279 1.64454662 600.04521841 98.67283134 4.07561693 197.63167143 2.57407386 296.59050988 2.93158355-131.77828182-184.40379075-256.69236502-381.67795251-298.2350565-602.97680196z m114.68929036-39.32612731a4110.93895971 4110.93895971 0 0 1 357.22425083 340.77877784c57.91666189-112.25822172 112.97324112-225.87498131 167.17179577-339.84925228-174.75101377-0.35750969-349.43052665 0.92952724-524.3960466-0.92952556zM118.73871511 118.73871511h783.01896871c4.29012309 262.12652153 5.14814772 524.39604658-0.35750973 786.52256978H118.73871511v-786.52256978z" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M827.17961482 638.70293333c-16.86945185 0-33.7389037 5.33997037-50.60835557 10.8013037L607.63401482 353.01451852c28.15620741-26.94257778 50.60835555-59.34648889 50.60835555-102.43034074 0-75.48776297-61.89511111-134.83425185-140.65967407-134.83425186s-140.65967408 64.68645925-140.65967408 134.83425186c0 32.28254815 11.28675555 64.68645925 33.7389037 91.62903704L236.14198518 644.0429037c-11.28675555 0-22.45214815-5.33997037-33.7389037-5.33997037-78.76456297 0-140.65967408 59.34648889-140.65967407 134.71288889 0 75.48776297 61.89511111 134.83425185 140.65967407 134.83425186 67.59917037 0 123.79022222-48.54518518 135.07697777-113.23164445h348.91851853c11.28675555 64.68645925 67.59917037 113.23164445 135.07697777 113.23164445 78.76456297 0 140.65967408-59.34648889 140.65967408-134.83425186 0.12136297-75.3664-56.19105185-134.71288889-134.95561481-134.71288889zM697.68533333 741.13327408H343.18411852c-5.5826963-32.40391111-28.15620741-59.34648889-50.60835555-75.48776297l168.81588148-291.14974814c16.86945185 10.8013037 39.44296297 10.8013037 56.3124148 10.8013037 11.28675555 0 28.15620741 0 39.44296297-5.33997037L731.66696297 676.44681482c-16.99081482 16.14127408-28.27757037 37.74388148-33.98162964 64.68645926z" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M13.451 5.609l-.579-.939-1.068.812-.076.094c-.335.415-.927 1.341-1.124 2.876l-.021.165.033.163.071.345c0 1.654-1.346 3-3 3-.795 0-1.545-.311-2.107-.868-.563-.567-.873-1.317-.873-2.111 0-1.431 1.007-2.632 2.351-2.929v2.926s2.528-2.087 2.984-2.461h.012l3.061-2.582-4.919-4.1h-1.137v2.404c-3.429.318-6.121 3.211-6.121 6.721 0 1.809.707 3.508 1.986 4.782 1.277 1.282 2.976 1.988 4.784 1.988 3.722 0 6.75-3.028 6.75-6.75 0-1.245-.349-2.468-1.007-3.536z" fill="#F6F6F6"/><path d="M12.6 6.134l-.094.071c-.269.333-.746 1.096-.91 2.375.057.277.092.495.092.545 0 2.206-1.794 4-4 4-1.098 0-2.093-.445-2.817-1.164-.718-.724-1.163-1.718-1.163-2.815 0-2.206 1.794-4 4-4l.351.025v1.85s1.626-1.342 1.631-1.339l1.869-1.577-3.5-2.917v2.218l-.371-.03c-3.176 0-5.75 2.574-5.75 5.75 0 1.593.648 3.034 1.695 4.076 1.042 1.046 2.482 1.694 4.076 1.694 3.176 0 5.75-2.574 5.75-5.75-.001-1.106-.318-2.135-.859-3.012z" fill="#424242"/></svg>

After

Width:  |  Height:  |  Size: 986 B

View File

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M794.09066667 147.81866667c14.976 0 27.072 12.224 27.072 27.392v323.392A197.312 197.312 0 0 0 765.61066667 490.66666667l-5.312 0.128V380.97066667H375.14666667v390.848h209.28c10.368 23.296 24.96 44.16 42.944 61.76h-455.04a27.2 27.2 0 0 1-26.944-27.52V175.27466667c0-15.168 12.032-27.392 27.008-27.392z m-473.024 61.696H206.18666667v562.304H321.06666667V209.51466667z m439.232 0H375.14666667V326.18666667h385.152V209.51466667z" fill="#424242"></path><path d="M751.78666667 521.64266667a155.584 155.584 0 0 1 154.88 155.84c0 35.968-12.352 69.376-32.896 95.808l77.76 78.208a18.624 18.624 0 0 1-0.32 27.072 18.176 18.176 0 0 1-26.56 0l-77.76-78.336c-26.24 20.672-59.136 33.088-95.168 33.088a155.648 155.648 0 0 1-154.88-155.84 155.648 155.648 0 0 1 154.88-155.84z m-0.96 38.144a119.424 119.424 0 0 0-118.976 119.744 119.424 119.424 0 0 0 118.976 119.68 119.424 119.424 0 0 0 118.912-119.68c0-66.048-53.184-119.68-118.912-119.744z" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M490.667 97.766c84.468 0 164.13 8.447 224.278 23.666 30.584 7.792 54.905 17.112 72.454 27.67 8.52 5.098 15.656 10.632 21.117 16.603 9.976 10.705 15 22.574 15 35.608v1.966l-.145 1.966.146 166.025v135.514a236.658 236.658 0 00-46.895-24.176V259.422a281.805 281.805 0 01-47.331 17.84l-14.346 3.86c-60.147 15.291-139.81 23.738-224.278 23.738-84.469 0-164.132-8.374-224.28-23.738a320.762 320.762 0 01-61.894-21.846v428.169l.073 48.642c2.039 2.913 16.092 19.88 84.031 35.317 50.827 11.65 115.635 18.423 184.01 19.442 7.428 17.695 16.895 34.37 28.181 49.662h-10.121c-84.469 0-164.132-8.301-224.28-23.593-30.583-7.719-54.904-16.967-72.453-27.453-20.971-12.597-32.913-27.597-35.608-44.637l-.51-7.427V199.274a45.948 45.948 0 012.185-12.524c4.005-12.67 13.544-24.03 28.4-34.152l5.533-3.568c17.476-10.486 41.87-19.806 72.454-27.598 60.147-15.292 139.81-23.666 224.279-23.666zm0 49.735c-75.003 0-146.801 6.918-202.142 19.66-43.691 9.977-65.027 20.608-75.294 27.671a37.647 37.647 0 00-7.646 6.554c4.223 4.952 21.627 20.243 83.012 34.224 55.269 12.67 126.995 19.661 202.07 19.661 75.002 0 146.8-6.99 202.142-19.66 61.312-14.054 78.716-29.273 83.012-34.225a38.01 38.01 0 00-7.719-6.554c-10.194-7.063-31.675-17.694-75.293-27.67-55.342-12.743-127.067-19.661-202.142-19.661z" fill="#424242"/><path d="M686.692 518.653a178.404 178.404 0 01178.84 177.311c0 40.924-14.272 78.935-37.937 108.936l89.784 89.056a21.044 21.044 0 01-.364 30.802 21.117 21.117 0 01-30.657 0l-89.857-89.13a178.33 178.33 0 01-109.955 37.648 178.404 178.404 0 01-178.84-177.312 178.404 178.404 0 01178.913-177.31zm-1.02 43.327a136.897 136.897 0 00-137.406 136.315A136.897 136.897 0 00685.6 834.464a136.897 136.897 0 00137.334-136.17A136.897 136.897 0 00685.673 561.98z" fill="#424242"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M912.81138357 813.88169609l-201.71651715-201.92745466c-2.35044608-2.35044608-4.94196405-4.12834845-7.4129469-6.05692035a332.19642893 332.19642893 0 0 0 53.96986643-181.82812499c0-184.47991095-149.40401798-333.97433047-333.79352738-333.97432966C239.58928595 90.09486643 90.09486643 239.58928595 90.09486643 424.06919607c0 184.51004453 149.49441953 333.97433047 333.76339215 333.97433048 67.078125 0 129.45535703-19.94866095 181.82812499-54.06026797 1.92857108 2.53125001 3.67633905 5.0625 5.96651798 7.3828125l201.77678595 201.92745547a70.09151798 70.09151798 0 0 0 99.35156251 0.0301344c27.421875-27.48214297 27.421875-71.98995548 0.03013356-99.44196486m-488.95312499-161.30691954c-125.86941952 0-228.35491095-102.515625-228.35491014-228.50558048 0-125.95982107 102.48549143-228.50558048 228.35491013-228.50557965 125.89955393 0 228.38504452 102.54575857 228.38504536 228.50557965 0 125.98995548-102.48549143 228.50558048-228.38504536 228.50558048" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1638773282266" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M309.5 272a7.5 7.5 0 0 0-7.5 7.5v45c0 4.14 3.36 7.5 7.5 7.5h360a7.5 7.5 0 0 0 7.5-7.5v-45A7.5 7.5 0 0 0 669.5 272h-360z m180 187.5v-45A7.5 7.5 0 0 0 482 407H309.5a7.5 7.5 0 0 0-7.5 7.5v45c0 4.14 3.36 7.5 7.5 7.5H482a7.5 7.5 0 0 0 7.5-7.5z m-45 371.28H227v-660H752v322.44c0 4.2 3.36 7.5 7.5 7.5H812a7.5 7.5 0 0 0 7.5-7.5v-360a30 30 0 0 0-30-30h-600a30 30 0 0 0-30 30v735a30 30 0 0 0 30 30h255A7.5 7.5 0 0 0 452 890.78v-52.56a7.5 7.5 0 0 0-7.5-7.44z m97.62-108.42c1.68-32.34 15.18-62.58 38.22-85.68a131.64 131.64 0 0 1 194.4 9.48l-21.6 16.8a7.5 7.5 0 0 0 2.82 13.2l87.42 21.06a7.56 7.56 0 0 0 9.3-7.2l0.6-89.4a7.5 7.5 0 0 0-12.12-6l-19.02 14.76A191.4 191.4 0 0 0 482 721.7c-0.18 4.2 3.3 7.8 7.5 7.8h45.12a7.44 7.44 0 0 0 7.5-7.14z m314.88 7.14h-45.12a7.44 7.44 0 0 0-7.5 7.14 130.32 130.32 0 0 1-38.22 85.68 131.64 131.64 0 0 1-194.4-9.48l21.6-16.8a7.5 7.5 0 0 0-2.82-13.2l-87.42-21.06a7.56 7.56 0 0 0-9.3 7.2l-0.6 89.4c0 6.3 7.2 9.9 12.12 6l19.02-14.76a191.4 191.4 0 0 0 340.14-112.32 7.5 7.5 0 0 0-7.5-7.8z" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M163.953125 754.578125h696.09375V269.421875H163.953125v485.15625zM90.125 195.59375h843.75v632.8125H90.125V195.59375z m200.07421875 475.875L248.328125 629.59765625l127.14257813-127.1953125L248.328125 375.25976562l41.87109375-41.87109374L459.265625 502.40234375l-169.06640625 169.06640625z m481.46484375 10.91601563H512V617.46875h259.61132813v64.86328125z" fill="#424242"></path></svg>

After

Width:  |  Height:  |  Size: 716 B

1
resources/icon/logo.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><defs><style type="text/css"></style></defs><path d="M551.326129 826.39452076c82.9423794 0 165.95626143 0 249.04164606 0.21450614-43.90225919-52.91151772-88.23353236-105.17951861-132.99381616-157.30451261a4441.85045607 4441.85045607 0 0 1-116.0478299 157.09000647z m157.30451261-219.29679145c45.04629259 54.69906955 88.80554821 110.39916726 131.06326076 167.10029482-0.57201585-126.70163505 0-253.54627533-0.35750969-380.17640941-39.82664224 72.93209274-82.22736001 144.86315731-130.70575107 213.07611459z m-314.60902689-213.07611459c3.78960817 135.9969023 60.06172342 262.19802413 124.41356994 380.17640941 33.60596373-55.12808187 65.92489221-110.82817957 98.45832519-166.74278511-72.71758657-72.71758657-144.00513267-147.0797198-222.87189513-213.4336243zM174.4388145 223.63222494c-3.36059586 199.99123916-5.86316881 400.19698279 1.64454662 600.04521841 98.67283134 4.07561693 197.63167143 2.57407386 296.59050988 2.93158355-131.77828182-184.40379075-256.69236502-381.67795251-298.2350565-602.97680196z m114.68929036-39.32612731a4110.93895971 4110.93895971 0 0 1 357.22425083 340.77877784c57.91666189-112.25822172 112.97324112-225.87498131 167.17179577-339.84925228-174.75101377-0.35750969-349.43052665 0.92952724-524.3960466-0.92952556zM118.73871511 118.73871511h783.01896871c4.29012309 262.12652153 5.14814772 524.39604658-0.35750973 786.52256978H118.73871511v-786.52256978z"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,17 @@
(function () {
const vscode = acquireVsCodeApi();
// 消息转发中间层
addEventListener('message', event => {
if (event.data) {
const message = event.data;
switch (message.target) {
// 收到 vscode 消息,转发给 iframe
case 'vscode':
return iframe.contentWindow.postMessage(message, '*');
// 收到 iframe 消息,转发给 vscode
case 'iframe':
return vscode.postMessage(message);
}
}
});
})();

View File

@ -0,0 +1,22 @@
import { commands, Uri } from 'vscode';
import { CommandConst } from '../../constants';
import { ctx } from '../../context';
/**
* iBizModeling
*
* @author chitanda
* @date 2021-12-07 17:12:13
* @export
* @class OpenIBizModelingCommand
*/
export class OpenIBizModelingCommand {
constructor() {
commands.registerCommand(CommandConst.IBIZ_MODELING.OPEN, this.execute.bind(this));
}
protected async execute(): Promise<void> {
const openUri = Uri.parse(`${ctx.toolAddress}/mos-dynamic-mgr/#/mosdynamicmgr/${ctx.get('psdevslnsys')}`);
commands.executeCommand(CommandConst.VSCODE.OPEN, openUri);
}
}

37
src/commands/index.ts Normal file
View File

@ -0,0 +1,37 @@
import { ExtensionContext } from 'vscode';
import { OpenIBizModelingCommand } from './ibiz-modeling/open-ibiz-modeling';
import { CopyPathCommand } from './mos-fs/copy-path';
import { OpenFileCommand } from './mos-fs/open-file';
import { OpenRuntimeCommand } from './mos-fs/open-runtime';
import { SearchEntityCommand } from './mos-fs/search-entity';
import { SearchEntityViewCommand } from './mos-fs/search-entity-view';
import { SearchModelCommand } from './mos-fs/search-model';
import { SystemInfoTerminalShowCommand } from './system-info-terminal/show';
import { SystemPublishCommand } from './system/publish';
import { TemplatePublishCommand } from './template/publish';
import { UserLoginCommand } from './user/login';
/**
*
*
* @author chitanda
* @date 2021-11-30 11:11:08
* @export
* @param {ExtensionContext} _context
*/
export function installCommands(_context: ExtensionContext): void {
new OpenIBizModelingCommand();
// mos-fs 相关
{
new CopyPathCommand();
new OpenFileCommand();
new OpenRuntimeCommand();
new SearchModelCommand();
new SearchEntityCommand();
new SearchEntityViewCommand();
}
new SystemPublishCommand();
new SystemInfoTerminalShowCommand();
new TemplatePublishCommand();
new UserLoginCommand();
}

View File

@ -0,0 +1,32 @@
import { commands, env } from 'vscode';
import { CommandConst } from '../../constants';
import { PSMosFile } from '../../entities';
import { Directory, Entry, File } from '../../file-system';
/**
*
*
* @author chitanda
* @date 2021-12-07 16:12:46
* @export
* @class CopyPathCommand
*/
export class CopyPathCommand {
constructor() {
commands.registerCommand(CommandConst.MOS_FS.COPY_PATH, this.execute.bind(this));
}
protected async execute(param: Entry | PSMosFile | string): Promise<void> {
let path = '';
if (param instanceof Directory || param instanceof File) {
path = param.fullPath;
} else {
if (param instanceof PSMosFile) {
path = param.fullPath;
} else {
path = path;
}
}
env.clipboard.writeText(path);
}
}

View File

@ -0,0 +1,58 @@
import { commands, Uri, window } from 'vscode';
import { CommandConst, FileExtensionConst } from '../../constants';
import { ctx } from '../../context';
import { PSMosFile } from '../../entities';
import { Directory, Entry, File, IBizMosFSCustom } from '../../file-system';
import { isNilOrEmpty } from '../../util';
/**
* mos-fs
*
* @author chitanda
* @date 2021-11-30 14:11:13
* @export
* @class OpenFileCommand
*/
export class OpenFileCommand {
protected get fs(): IBizMosFSCustom {
return ctx.mosFS;
}
constructor() {
commands.registerCommand(CommandConst.MOS_FS.OPEN_FILE, this.execute.bind(this));
}
protected async execute(param: Entry | PSMosFile | string): Promise<void> {
if (isNilOrEmpty(param)) {
throw new Error('未指定需要打开的模型');
}
let uri: Uri;
let file: Entry;
if (param instanceof Directory || param instanceof File) {
uri = param.getUri();
file = param;
} else {
if (param instanceof PSMosFile) {
uri = this.fs.getUri(param.fullPath);
} else {
uri = this.fs.getUri(param);
}
file = await this.fs.stat(uri);
}
if (!file) {
window.showErrorMessage(`打开文件失败,文件不存在:${uri.path}`);
return;
}
switch (file.content.extension) {
case FileExtensionConst.MODEL_UI:
case FileExtensionConst.MODEL_RUNTIME:
commands.executeCommand(CommandConst.VSCODE.OPEN, uri);
return;
default:
const openUri = Uri.parse(
`${ctx.toolAddress}/mos-dynamic-mgr/#/mosdynamicmgr/${ctx.get('psdevslnsys')}/vscode-redirect-view?path=${encodeURIComponent(file.content.path)}`,
);
commands.executeCommand(CommandConst.VSCODE.OPEN, openUri);
}
}
}

View File

@ -0,0 +1,50 @@
import { commands, Uri, window } from 'vscode';
import { CommandConst, FileExtensionConst } from '../../constants';
import { ctx } from '../../context';
import { PSMosFile } from '../../entities';
import { Directory, Entry, File, IBizMosFSCustom } from '../../file-system';
import { isNilOrEmpty } from '../../util';
/**
* mos-fs
*
* @author chitanda
* @date 2021-11-30 14:11:13
* @export
* @class OpenRuntimeCommand
*/
export class OpenRuntimeCommand {
protected get fs(): IBizMosFSCustom {
return ctx.mosFS;
}
constructor() {
commands.registerCommand(CommandConst.MOS_FS.OPEN_RUNTIME, this.execute.bind(this));
}
protected async execute(param: Entry | PSMosFile | string): Promise<void> {
if (isNilOrEmpty(param)) {
throw new Error('未指定需要打开的模型');
}
let path = '';
if (param instanceof Directory || param instanceof File) {
path = param.path;
} else {
if (param instanceof PSMosFile) {
path = param.fullPath;
} else {
path = param;
}
}
if (!path.endsWith(FileExtensionConst.MODEL_RUNTIME)) {
path += FileExtensionConst.MODEL_RUNTIME;
}
const file = await this.fs.stat(this.fs.getUri(path));
if (!file) {
window.showErrorMessage(`${path} 暂未支持运行时`);
return;
}
const uri = file.getUri();
commands.executeCommand(CommandConst.VSCODE.OPEN, uri);
}
}

View File

@ -0,0 +1,23 @@
import { commands } from 'vscode';
import { CommandConst } from '../../constants';
import { IBizMOSService } from '../../file-system';
/**
*
*
* @author chitanda
* @date 2021-12-06 19:12:35
* @export
* @class SearchEntityViewCommand
*/
export class SearchEntityViewCommand {
constructor() {
commands.registerCommand(CommandConst.MOS_FS.SEARCH_ENTITY_VIEW, this.execute.bind(this));
}
protected async execute(): Promise<void> {
const service = IBizMOSService.getInstance();
const entityViews = await service.listFiles('/psdeviewbases');
console.log(entityViews);
}
}

View File

@ -0,0 +1,40 @@
import { commands, window } from 'vscode';
import { CommandConst } from '../../constants';
import { MosFilePickItem } from '../../entities';
import { IBizMOSService } from '../../file-system';
/**
*
*
* @author chitanda
* @date 2021-12-06 19:12:28
* @export
* @class SearchEntityCommand
*/
export class SearchEntityCommand {
constructor() {
commands.registerCommand(CommandConst.MOS_FS.SEARCH_ENTITY, this.execute.bind(this));
}
protected async execute(): Promise<void> {
// 加载实体信息
const promise = new Promise<readonly MosFilePickItem[]>(async resolve => {
const arr: MosFilePickItem[] = [];
const service = IBizMOSService.getInstance();
const entities = await service.listFiles('/psdataentities');
if (entities) {
for (let i = 0; i < entities.length; i++) {
arr.push(new MosFilePickItem(entities[i]));
}
}
resolve(arr);
});
const entity = await window.showQuickPick(promise, {
title: '查找实体',
placeHolder: '请输入实体名称',
});
if (entity) {
commands.executeCommand(CommandConst.MOS_FS.OPEN_FILE, entity.data);
}
}
}

View File

@ -0,0 +1,34 @@
import { commands, Uri, window } from 'vscode';
import { CommandConst, GlobalConst } from '../../constants';
/**
*
*
* @author chitanda
* @date 2021-12-05 18:12:44
* @export
* @class SearchModelCommand
*/
export class SearchModelCommand {
constructor() {
commands.registerCommand(CommandConst.MOS_FS.SEARCH_MODEL_BY_PATH, this.execute.bind(this));
}
protected async execute(basePath?: string): Promise<void> {
const defaultUri = Uri.parse(`${GlobalConst.MOS_FS_PROTOCOL}${basePath ? basePath : '/'}`);
const uriArr = await window.showOpenDialog({
title: '根据路路径查找模型',
openLabel: '请输入想要查找或打开的模型路径',
defaultUri,
canSelectFiles: true,
canSelectFolders: true,
canSelectMany: false,
});
if (uriArr) {
for (let i = 0; i < uriArr.length; i++) {
const uri = uriArr[i];
commands.executeCommand(CommandConst.MOS_FS.OPEN_FILE, uri.path);
}
}
}
}

View File

@ -0,0 +1,13 @@
import { commands } from 'vscode';
import { CommandConst } from '../../constants';
import { wsOutput } from '../../terminal';
export class SystemInfoTerminalShowCommand {
constructor() {
commands.registerCommand(CommandConst.SYSTEM_INFO_TERMINAL.SHOW, this.execute.bind(this));
}
protected async execute(): Promise<void> {
wsOutput.openTerminal();
}
}

View File

@ -0,0 +1,34 @@
import { commands, ProgressLocation, window } from 'vscode';
import { CommandConst } from '../../constants';
import { ctx } from '../../context';
import { CoreAPI } from '../../service';
/**
*
*
* @author chitanda
* @date 2021-11-25 18:11:34
* @export
* @class SystemPublishCommand
*/
export class SystemPublishCommand {
constructor() {
commands.registerCommand(CommandConst.SYSTEM.PUBLISH, this.execute.bind(this));
}
protected async execute(): Promise<void> {
const psDevSlnSys = ctx.get('psdevslnsys');
return window.withProgress({ location: ProgressLocation.Notification, title: '系统发布' }, progress => {
return new Promise(resolve => {
setTimeout(async () => {
progress.report({ message: '正在建立发布任务...' });
const res = await CoreAPI.cli('ExecuteSysCLICmd', { pstscmdname: 'devsys_pubcode', psdevslnsysid: psDevSlnSys });
if (res) {
window.showInformationMessage(`已建立 <${ctx.get('psdevslnsysname')}> 系统代码发布`);
}
resolve();
}, 300);
});
});
}
}

View File

@ -0,0 +1,44 @@
import { commands, ProgressLocation, window } from 'vscode';
import { CommandConst } from '../../constants';
import { TemplatePickItem } from '../../entities';
import { CoreAPI } from '../../service';
/**
*
*
* @author chitanda
* @date 2021-11-25 19:11:10
* @export
* @class TemplatePublishCommand
*/
export class TemplatePublishCommand {
constructor() {
commands.registerCommand(CommandConst.TEMPLATE.PUBLISH, this.execute.bind(this));
}
protected async execute(): Promise<void> {
// 加载可刷新的模板
const promise = new Promise<readonly TemplatePickItem[]>(async resolve => {
const arr: TemplatePickItem[] = [];
const templates = await CoreAPI.curUserTemplates();
templates.forEach(item => {
arr.push(new TemplatePickItem(item));
});
resolve(arr);
});
// 选择模板
const temp = await window.showQuickPick(promise, {
title: '发布模板',
placeHolder: '请选择需要发布的模板',
});
if (temp) {
await window.withProgress({ location: ProgressLocation.Notification, title: '发布模板' }, async progress => {
progress.report({ message: '正在发布模板...' });
const res = await CoreAPI.cli('ExecuteTemplCLICmd', { pstscmdname: 'devtempl_publish', psdevslntemplid: temp.data.psdevslntemplid });
if (res) {
window.showInformationMessage(`发布成功: ${temp.label}`);
}
});
}
}
}

View File

@ -0,0 +1,13 @@
import { commands } from 'vscode';
import { CommandConst } from '../../constants';
import { login } from '../../service';
export class UserLoginCommand {
constructor() {
commands.registerCommand(CommandConst.USER.LOGIN, this.execute.bind(this));
}
protected async execute(): Promise<void> {
login.login();
}
}

View File

@ -0,0 +1,90 @@
/* eslint-disable @typescript-eslint/naming-convention */
export class DesignToolUrl {
/**
*
*
* @author chitanda
* @date 2021-11-28 15:11:05
* @static
*/
static readonly urls = {
// 编辑表单
EDITFORM: `/form-design/#/home/___instance___/psdeforms/___srfkey___/views/design`,
// 搜索表单
SEARCHFORM: `/form-design/#/home/___instance___/psdeforms/___srfkey___/views/design`,
// 表格
PSDEGRID: `/grid-design/#/home/___instance___/psdegrids/___srfkey___/views/design`,
// 应用视图
PSAPPVIEW: `/view-design/#/dynainst/___instance___/psdeviewbases/___srfkey___/views/design`,
// 实体视图
PSDEVIEWBASE: `/view-design/#/dynainst/___instance___/psdeviewbases/___srfkey___/views/design`,
// 首页
APPINDEXVIEW: '/index-design/#/indexdesign/___instance___/psappindexviews/___srfkey___/views/design',
// 首页
PSAPPINDEXVIEW: `/toolbar-design/indexdesign.html#/indexdesign/___instance___/psappindexviews/___srfkey___/views/design`,
// 系统数据看板
PSSYSDASHBOARD: `/form-design/sysportaldesign.html#/sysportaldesign/___instance___/pssysdashboards/___srfkey___/views/design`,
// 系统面板
PSSYSVIEWPANEL: `/form-design/paneldesign.html#/paneldesign/___instance___/pssysviewpanels/___srfkey___/views/design`,
// 应用看板视图
PSAPPPORTALVIEW: `/form-design/portaldesign.html#/portaldesign/___instance___/psappportalviews/___srfkey___/views/design`,
// 工作流
PSWFVERSION: `/wf-design/#/home/___instance___/pswfversions/___srfkey___/views/design`,
// 树
PSDETREEVIEW: `/tree-design/#/home/___instance___/psdetreeviews/___srfkey___/views/design`,
// 列表
PSDELIST: `/md-design/#/home/___instance___/psdelists/___srfkey___/views/design`,
// 数据视图
PSDEDATAVIEW: `/md-design/carddesign.html#/carddesign/___instance___/psdedataviews/___srfkey___/views/design`,
// 工具栏
PSDETOOLBAR: `/toolbar-design/#/toolbardesign/___instance___/psdetoolbars/___srfkey___/views/design`,
// 图表设计
PSDECHART: `/chart-design/dynainst.html#/dynainst/F37F67FD-E3C1-496E-AB99-BC42017AE84C/psdecharts/___srfkey___/views/design`,
// 实体处理逻辑
DELOGIC: `/logic-design/#/home/___instance___/psdelogics/___srfkey___/views/design`,
// 界面逻辑
UILOGIC: `/logic-design/design.html#/design/___instance___/psdelogics/___srfkey___/views/uldesign`,
// 实体属性值规则
PSDEFVALUERULE: `/rule-design/#/valueruledesign/___instance___/psdefvaluerules/___srfkey___/views/design`,
// er 图
PSSYSERMAP: `/er-design/#/home/___instance___/pssysermaps/___srfkey___/views/design`,
// 用例图
PSSYSUCMAP: `/usecase-design/#/home/___instance___/pssysucmaps/___srfkey___/views/design`,
// 查询设计
PSDEDATAQUERY: '/dataquery-design/#/home/___instance___/psdedataqueries/___srfkey___/views/design',
// 应用菜单
PSAPPMENU: `/appmenu-design/#/appmenudesign/___instance___/psappmenus/___srfkey___/views/design`,
};
/**
* url
*
* @author chitanda
* @date 2021-11-28 15:11:15
* @static
* @param {string} type
* @return {*} {(string | null)}
*/
static getUrl(type: string): string | null {
if ((this.urls as any)[type]) {
return (this.urls as any)[type];
}
return null;
}
/**
*
*
* @author chitanda
* @date 2021-11-28 15:11:50
* @static
* @param {string} type
* @return {*} {boolean}
*/
static has(type: string): boolean {
if ((this.urls as any)[type]) {
return true;
}
return false;
}
}

View File

@ -0,0 +1,234 @@
import { IBizModelFSCustomChildConfigItem, IBizModelFSCustomConfigItem } from './interface/ibiz-model-fs-custom-config-item';
/**
*
*
* @author chitanda
* @date 2021-11-30 17:11:47
* @export
* @class IBizModelFSCustomConfig
*/
export class IBizModelFSCustomConfig {
protected static readonly regStr = '[^\n\r/]+';
static readonly configs: IBizModelFSCustomConfigItem[] = [
{
path: '/',
children: [
{
path: '/pssysucmaps',
name: 'pssysucmaps',
logicName: '系统用例看板',
},
{
path: '/pssysermaps',
name: 'pssysermaps',
logicName: '实体模型看板',
},
// {
// path: '/pssyssfpubs',
// name: 'pssyssfpubs',
// logicName: '后台体系',
// },
// {
// path: '/pssysdbschemes',
// name: 'pssysdbschemes',
// logicName: '数据库架构',
// },
// {
// path: '/pssysserviceapis',
// name: 'pssysserviceapis',
// logicName: '服务接口',
// },
// {
// path: '/pssubsysserviceapis',
// name: 'pssubsysserviceapis',
// logicName: '外部接口',
// },
{
path: '/pssysapps',
name: 'pssysapps',
logicName: '前端应用',
},
{
path: '/psmodules',
name: 'psmodules',
logicName: '系统',
},
],
},
{
path: '/psmodules/*',
children: [
{
path: '/psmodules/*/psdataentities',
name: 'psdataentities',
logicName: '实体',
},
],
},
{
path: '/psmodules/*/psdataentities/*',
children: [
{
path: '/psmodules/*/psdataentities/*/psdeforms',
name: 'psdeforms',
logicName: '表单',
},
{
path: '/psmodules/*/psdataentities/*/psdegrids',
name: 'psdegrids',
logicName: '数据表格',
},
{
path: '/psmodules/*/psdataentities/*/psdetreeviews',
name: 'psdetreeviews',
logicName: '树视图',
},
{
path: '/psmodules/*/psdataentities/*/psdecharts',
name: 'psdecharts',
logicName: '数据图表',
},
{
path: '/psmodules/*/psdataentities/*/psdelists',
name: 'psdelists',
logicName: '数据列表',
},
{
path: '/psmodules/*/psdataentities/*/psdedataviews',
name: 'psdedataviews',
logicName: '卡片视图',
},
{
path: '/psmodules/*/psdataentities/*/psdetoolbars',
name: 'psdetoolbars',
logicName: '工具栏',
},
{
path: '/psmodules/*/psdataentities/*/pssysviewpanels',
name: 'pssysviewpanels',
logicName: '面板',
},
{
path: '/psmodules/*/psdataentities/*/pssysdashboards',
name: 'pssysdashboards',
logicName: '数据看板',
},
{
path: '/psmodules/*/psdataentities/*/pssysportlets',
name: 'pssysportlets',
logicName: '数据看板部件',
},
{
path: '/psmodules/*/psdataentities/*/pssyscalendars',
name: 'pssyscalendars',
logicName: '日历',
},
{
path: '/psmodules/*/psdataentities/*/psdeviewbases',
name: 'psdeviewbases',
logicName: '实体视图',
},
{
path: '/psmodules/*/psdataentities/*/psdedataqueries',
name: 'psdedataqueries',
logicName: '数据查询',
},
],
},
{
path: '/pssysapps/*',
children: [
{
path: '/pssysapps/*/psappmenus',
name: 'psappmenus',
logicName: '应用菜单',
},
{
path: '/pssysapps/*/psappviews',
name: 'psappviews',
logicName: '应用视图',
},
// {
// path: '/pssysapps/*/psappmodules',
// name: 'psappmodules',
// logicName: '应用模块',
// },
],
},
{
path: '/pssysapps/*/psappmodules/*',
children: [
{
path: '/pssysapps/*/psappmodules/*/psapplocaldes',
name: 'psapplocaldes',
logicName: '应用实体',
},
{
path: '/pssysapps/*/psappmodules/*/psappviews',
name: 'psappviews',
logicName: '应用视图',
},
],
},
];
/**
*
*
* @author chitanda
* @date 2021-12-01 11:12:23
* @static
* @type {string[]}
*/
static leafConfigs: string[] = ['/pssysapps/*/psappmodules/*/psapplocaldes/*', '/pssysapps/*/psappmodules/*/psapplocaldes/*'];
/**
*
*
* @author chitanda
* @date 2021-12-05 13:12:58
* @static
* @type {string[]}
*/
static indexConfigs: RegExp[] = [new RegExp(`^/psmodules/${this.regStr}/psdataentities/${this.regStr}$`)];
/**
*
*
* @author chitanda
* @date 2021-11-30 19:11:13
* @static
* @param {string} path
* @return {*} {IBizModelFSCustomChildConfigItem[]}
*/
static getItems(path: string): IBizModelFSCustomChildConfigItem[] | null {
if (path === '/' || path === '') {
return this.configs.find(item => item.path === '/')!.children;
}
const config = this.configs.find(c => {
if (!c.reg) {
c.reg = new RegExp(`^${c.path.replace(/\*/g, this.regStr)}$`);
}
return c.reg.test(path);
});
if (config) {
return config.children;
}
return null;
}
/**
*
*
* @author chitanda
* @date 2021-12-05 13:12:33
* @static
* @param {string} path
* @return {*} {boolean}
*/
static ownIndex(path: string): boolean {
return this.indexConfigs.some(reg => reg.test(path));
}
}

View File

@ -0,0 +1,69 @@
/**
*
*
* @author chitanda
* @date 2021-12-01 09:12:08
* @export
* @interface IBizModelFSCustomChildConfigItem
*/
export interface IBizModelFSCustomChildConfigItem {
/**
*
*
* @author chitanda
* @date 2021-11-30 18:11:57
* @type {string}
*/
logicName: string;
/**
*
*
* @author chitanda
* @date 2021-11-30 18:11:02
* @type {string}
*/
path: string;
/**
*
*
* @author chitanda
* @date 2021-11-30 18:11:06
* @type {string}
*/
name: string;
}
/**
*
*
* @author chitanda
* @date 2021-11-30 17:11:32
* @export
* @interface IBizModelFSCustomConfigItem
*/
export interface IBizModelFSCustomConfigItem {
/**
*
*
* @author chitanda
* @date 2021-11-30 16:11:38
* @type {string}
*/
path: string;
/**
*
*
* @author chitanda
* @date 2021-11-30 18:11:03
* @type {RegExp}
*/
reg?: RegExp;
/**
*
*
* @author chitanda
* @date 2021-11-30 17:11:01
* @type {IBizModelFSCustomChildConfigItem[]}
*/
children: IBizModelFSCustomChildConfigItem[];
}

3
src/config/index.ts Normal file
View File

@ -0,0 +1,3 @@
export { loadConfig } from './load-config/load-config';
export { DesignToolUrl } from './design-tool-url/design-tool-url';
export { IBizModelFSCustomConfig } from './ibiz-model-fs-custom/ibiz-model-fs-custom';

View File

@ -0,0 +1,47 @@
import { join } from 'path';
import { Uri, window, workspace } from 'vscode';
import { load } from 'js-yaml';
import { ctx } from '../../context';
// .ibizproject 配置文件
export const globalConfig: Record<string, any> = {};
/**
* .ibizproject
*
* @author chitanda
* @date 2021-11-10 12:11:53
* @export
* @return {*} {Promise<void>}
*/
export async function loadConfig(): Promise<void> {
if (workspace.workspaceFolders) {
for (let i = 0; i < workspace.workspaceFolders.length; i++) {
const folder = workspace.workspaceFolders[i];
// 不为实际文件系统时忽略
if (folder.uri.scheme !== 'file') {
continue;
}
// 工作区目录
const path = folder.uri.path;
// 配置文件地址
const uri = Uri.file(join(path, '.ibizproject'));
// 查看配置文件是否存在
const file = await workspace.fs.stat(uri);
if (file) {
// 读取配置文件
const val = await workspace.fs.readFile(uri);
// 加载 yaml 格式的文件内容
const config = load(val.toString()) as Record<string, any>;
// 将全局配置放入上下文中
ctx.set('type', config.type);
ctx.set('psdevsln', config.psdevsln);
ctx.set('psdevslnsys', config.psdevslnsys);
ctx.set('psdevslnsysname', config.psdevslnsysname);
Object.assign(globalConfig, config);
} else {
window.showErrorMessage('埃必致 系统插件启动失败,未识别到项目根目录中的 .ibizproject 配置文件');
}
}
}
}

View File

@ -0,0 +1,36 @@
/* eslint-disable @typescript-eslint/naming-convention */
import { IBizModeling } from './ibiz-modeling/ibiz-modeling';
import { MosFSConst } from './mos-fs/mos-fs';
import { SystemInfoTerminalConst } from './system-info-terminal/system-info-terminal';
import { SystemConst } from './system/system';
import { TemplateConst } from './template/template';
import { UserConst } from './user/user';
import { VSCodeConst } from './vs-code/vs-code';
import { WorkbenchConst } from './workbench/workbench';
/**
*
*
* @author chitanda
* @date 2021-11-11 10:11:19
* @export
* @class CommandConst
*/
export class CommandConst {
static readonly IBIZ_MODELING: IBizModeling = new IBizModeling();
static readonly WORKBENCH: WorkbenchConst = new WorkbenchConst();
static readonly VSCODE: VSCodeConst = new VSCodeConst();
static readonly SYSTEM_INFO_TERMINAL: SystemInfoTerminalConst = new SystemInfoTerminalConst();
static readonly SYSTEM: SystemConst = new SystemConst();
static readonly TEMPLATE: TemplateConst = new TemplateConst();
static readonly USER: UserConst = new UserConst();
static readonly MOS_FS: MosFSConst = new MosFSConst();
}

View File

@ -0,0 +1,18 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
* iBizModeling
*
* @author chitanda
* @date 2021-12-07 17:12:57
* @export
* @class IBizModeling
*/
export class IBizModeling {
/**
* iBizModeling
*
* @author chitanda
* @date 2021-12-07 17:12:12
*/
readonly OPEN = 'ibiz-modeling-studio.open-ibiz-modeling';
}

View File

@ -0,0 +1,54 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
* MosFS
*
* @author chitanda
* @date 2021-12-01 15:12:05
* @export
* @class MosFSConst
*/
export class MosFSConst {
/**
*
*
* @author chitanda
* @date 2021-12-07 16:12:41
*/
readonly COPY_PATH = 'ibiz-modeling-studio.mos-fs.copy-path';
/**
*
*
* @description PSMosFileDirectoryFilepath
* @author chitanda
* @date 2021-12-01 15:12:06
*/
readonly OPEN_FILE = 'ibiz-modeling-studio.mos-fs.open-file';
/**
*
*
* @author chitanda
* @date 2021-12-07 14:12:45
*/
readonly OPEN_RUNTIME = 'ibiz-modeling-studio.mos-fs.open-runtime';
/**
*
*
* @author chitanda
* @date 2021-12-05 18:12:31
*/
readonly SEARCH_MODEL_BY_PATH = 'ibiz-modeling-studio.mos-fs.search-model-by-path';
/**
*
*
* @author chitanda
* @date 2021-12-06 19:12:02
*/
readonly SEARCH_ENTITY = 'ibiz-modeling-studio.mos-fs.search-entity';
/**
*
*
* @author chitanda
* @date 2021-12-06 19:12:07
*/
readonly SEARCH_ENTITY_VIEW = 'ibiz-modeling-studio.mos-fs.search-entity-view';
}

View File

@ -0,0 +1,18 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:39
* @export
* @class SystemInfoTerminalConst
*/
export class SystemInfoTerminalConst {
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:51
*/
readonly SHOW = 'ibiz-modeling-studio.system-info-terminal.show';
}

View File

@ -0,0 +1,18 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:52
* @export
* @class SystemConst
*/
export class SystemConst {
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:53
*/
readonly PUBLISH = 'ibiz-modeling-studio.system.publish.code';
}

View File

@ -0,0 +1,18 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:51
* @export
* @class TemplateConst
*/
export class TemplateConst {
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:54
*/
readonly PUBLISH = 'ibiz-modeling-studio.template.publish';
}

View File

@ -0,0 +1,25 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:34
* @export
* @class UserConst
*/
export class UserConst {
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:23
*/
readonly LOGIN = 'ibiz-modeling-studio.user.login';
/**
*
*
* @author chitanda
* @date 2021-12-06 16:12:08
*/
readonly LOGIN_REPLY_PATH_HANDLE = 'ibiz-modeling-studio.user.login-reply-path-handle';
}

View File

@ -0,0 +1,18 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
* vs code
*
* @author chitanda
* @date 2021-12-01 15:12:40
* @export
* @class VSCodeConst
*/
export class VSCodeConst {
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:47
*/
readonly OPEN = 'vscode.open';
}

View File

@ -0,0 +1,18 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:14
* @export
* @class Workbench
*/
export class WorkbenchConst {
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:22
*/
readonly RELOAD_WINDOW = 'workbench.action.reloadWindow';
}

View File

@ -0,0 +1,42 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
* vscode
*
* @author chitanda
* @date 2021-11-15 17:11:22
* @export
* @class ConfigConst
*/
export class ConfigConst {
/**
*
*
* @author chitanda
* @date 2021-11-29 14:11:15
* @static
* @type {string}
*/
static readonly IBIZ_MODELING_STUDIO_DOMAIN = 'ibiz-modeling-studio-domain';
/**
* console
*
* @author chitanda
* @date 2021-11-25 11:11:39
* @static
*/
static readonly CONSOLE = {
// 控制台关闭时,收到消息是否自动弹出
AUTO_DISPLAY: 'console.auto-display',
};
/**
*
*
* @author chitanda
* @date 2021-12-03 15:12:24
* @static
*/
static readonly IBIZ_MODELING_LINK = {
// 启用模型链接识别
ENABLE: 'ibiz-modeling-link.enable',
};
}

View File

@ -0,0 +1,20 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
*
*
* @author chitanda
* @date 2021-11-30 09:11:25
* @export
* @class ExplorerConst
*/
export class ExplorerConst {
/**
*
*
* @author chitanda
* @date 2021-11-30 09:11:57
* @static
*/
static readonly MODEL_EXP_TREE = 'iBizExplorer.ModelExpTree';
}

View File

@ -0,0 +1,43 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
*
*
* @author chitanda
* @date 2021-11-11 10:11:19
* @export
* @class FileExtensionConst
*/
export class FileExtensionConst {
/**
*
*
* @author chitanda
* @date 2021-11-11 10:11:10
* @static
*/
static readonly MODEL = '.ibizmodel';
/**
*
*
* @author chitanda
* @date 2021-11-11 10:11:10
* @static
*/
// static readonly MODEL_YAML = FileExtensionConst.MODEL + '.yaml';
/**
*
*
* @author chitanda
* @date 2021-11-15 15:11:58
* @static
*/
static readonly MODEL_UI = FileExtensionConst.MODEL + '.ui';
/**
*
*
* @author chitanda
* @date 2021-11-19 14:11:21
* @static
*/
static readonly MODEL_RUNTIME = FileExtensionConst.MODEL + '.runtime';
}

View File

@ -0,0 +1,59 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
*
*
* @author chitanda
* @date 2021-11-14 17:11:13
* @export
* @class GlobalConst
*/
export class GlobalConst {
/**
*
*
* @author chitanda
* @date 2021-12-01 15:12:24
* @static
*/
static readonly PLUGIN_CODE = 'ibiz-modeling-studio';
/**
*
*
* @author chitanda
* @date 2021-11-27 10:11:20
* @static
*/
static readonly PLUGIN_NAME = 'iBizModeling';
/**
*
*
* @author chitanda
* @date 2021-11-27 10:11:20
* @static
*/
static readonly PLUGIN_LOGIC_NAME = 'iBiz建模工场';
/**
*
*
* @author chitanda
* @date 2021-11-11 10:11:10
* @static
*/
static readonly MOS_FS_PROTOCOL = 'ibizmos:';
/**
*
*
* @author chitanda
* @date 2021-12-04 22:12:59
* @static
*/
static readonly MODELING_PATH_PROTOCOL = 'iBizModeling:';
/**
*
*
* @author chitanda
* @date 2021-11-26 19:11:56
* @static
*/
static readonly AUTHORITY = 'ibizlab.ibiz-modeling-studio';
}

5
src/constants/index.ts Normal file
View File

@ -0,0 +1,5 @@
export { ConfigConst } from './config/config';
export { FileExtensionConst } from './file-extension/file-extension';
export { GlobalConst } from './global/global';
export { CommandConst } from './command/command';
export { RTContextConst } from './vscode-rt-context/vscode-rt-context';

View File

@ -0,0 +1,19 @@
/* eslint-disable @typescript-eslint/naming-convention */
/**
* vscode when 使
*
* @author chitanda
* @date 2021-12-03 10:12:47
* @export
* @class RTContextConst
*/
export class RTContextConst {
/**
*
*
* @author chitanda
* @date 2021-12-03 10:12:08
* @static
*/
static readonly ENABLE_PLUGIN = 'ibiz-modeling-studio.enable-plugin';
}

328
src/context/index.ts Normal file
View File

@ -0,0 +1,328 @@
import { commands, ExtensionContext, workspace, WorkspaceConfiguration } from 'vscode';
import { ConfigConst, RTContextConst } from '../constants';
import { IBizMosFSCustom } from '../file-system';
import { GlobalContextData } from '../interface';
import { Websocket } from '../ws';
/**
*
*
* @author chitanda
* @date 2021-11-10 11:11:52
* @export
* @class GlobalContext
*/
export class GlobalContext {
protected static readonly instance: GlobalContext = new GlobalContext();
/**
*
*
* @author chitanda
* @date 2021-11-10 14:11:09
* @private
* @type {GlobalContextData}
*/
private readonly data: GlobalContextData = {};
/**
* ws
*
* @author chitanda
* @date 2021-11-24 20:11:03
* @private
* @type {Websocket}
*/
private _ws!: Websocket;
get ws(): Websocket {
return this._ws;
}
/**
* vscode
*
* @author chitanda
* @date 2021-11-14 11:11:13
* @private
* @type {ExtensionContext}
*/
private _extensionContext!: ExtensionContext;
get extensionContext(): ExtensionContext {
return this._extensionContext;
}
/**
* mos
*
* @author chitanda
* @date 2021-11-15 17:11:52
* @private
* @type {IBizMosFSCustom}
*/
private _mosFS!: IBizMosFSCustom;
get mosFS(): IBizMosFSCustom {
return this._mosFS;
}
/**
*
*
* @author chitanda
* @date 2021-11-29 13:11:29
* @readonly
* @type {string}
*/
get tokenKey(): string {
return 'token_' + this.get('psdevslnsys');
}
/**
*
*
* @author chitanda
* @date 2021-11-29 13:11:35
* @private
* @type {string}
*/
private _token?: string;
get token(): string | undefined {
return this._token;
}
get config(): WorkspaceConfiguration {
return workspace.getConfiguration('ibiz-modeling-studio');
}
/**
*
*
* @author chitanda
* @date 2021-11-10 17:11:07
* @protected
* @type {boolean}
*/
protected _completed: boolean = false;
get completed(): boolean {
return this._completed;
}
/**
*
*
* @author chitanda
* @date 2021-11-27 09:11:35
* @readonly
* @type {string}
*/
get studioAddress(): string {
return ctx.config.get(ConfigConst.IBIZ_MODELING_STUDIO_DOMAIN)!;
}
/**
* studio
*
* @author chitanda
* @date 2021-11-27 02:11:35
* @readonly
* @type {string}
*/
get serviceApiAddress(): string {
return this.studioAddress + '/MosDynamicBackend';
}
/**
*
*
* @author chitanda
* @date 2021-11-27 02:11:38
* @readonly
* @type {string}
*/
get toolAddress(): string {
return this.studioAddress + '/mosdynamictool';
}
/**
*
*
* @author chitanda
* @date 2021-11-27 02:11:25
* @readonly
* @type {string}
*/
get coreApiAddress(): string {
return this.studioAddress + '/MosDynamic';
}
/**
* Creates an instance of GlobalContext.
*
* @author chitanda
* @date 2021-11-26 20:11:20
*/
constructor() {
if (GlobalContext.instance) {
throw new Error('GlobalContext is a singleton class');
}
}
/**
* vscode
*
* @author chitanda
* @date 2021-11-14 11:11:05
* @param {ExtensionContext} context
*/
setExtensionContext(context: ExtensionContext): void {
this._extensionContext = context;
}
/**
* mosFS
*
* @author chitanda
* @date 2021-11-14 15:11:41
* @param {IBizMosFSCustom} mosFS
*/
setMosFS(mosFS: IBizMosFSCustom): void {
this._mosFS = mosFS;
}
/**
* studio ws
*
* @author chitanda
* @date 2021-11-24 20:11:03
* @param {Websocket} ws
*/
setWS(ws: Websocket): void {
this._ws = ws;
}
/**
*
*
* @author chitanda
* @date 2021-11-29 13:11:55
* @param {string} token
*/
setToken(token: string): void {
this._token = token;
this.cacheToken(token);
}
/**
*
*
* @author chitanda
* @date 2021-11-29 13:11:01
* @param {string} token
* @return {*} {Promise<void>}
*/
async cacheToken(token: string): Promise<void> {
this.extensionContext.secrets.store(this.tokenKey, token);
}
/**
*
*
* @author chitanda
* @date 2021-11-10 14:11:37
* @template K
* @param {K} key
* @param {GlobalContextData[K]} val
*/
set<K extends keyof GlobalContextData>(key: K, val: GlobalContextData[K]): void {
this.data[key] = val;
}
/**
*
*
* @author chitanda
* @date 2021-11-10 14:11:09
* @template K
* @param {K} key
* @return {*} {GlobalContextData[K]}
*/
get<K extends keyof GlobalContextData>(key: K): GlobalContextData[K] {
return this.data[key];
}
/**
*
*
* @author chitanda
* @date 2021-11-21 21:11:18
* @template K
* @param {K} key
*/
clear<K extends keyof GlobalContextData>(key: K): void {
delete this.data[key];
}
/**
* vscode package.json wen 使
*
* @author chitanda
* @date 2021-12-02 20:12:23
* @param {string} key
* @param {unknown} val
*/
setContext(key: string, val: unknown): void {
commands.executeCommand('setContext', key, val);
}
/**
*
*
* @author chitanda
* @date 2021-11-10 17:11:45
*/
completedEnd(): void {
this._completed = true;
ctx.setContext(RTContextConst.ENABLE_PLUGIN, true);
}
/**
*
*
* @author chitanda
* @date 2021-11-10 17:11:50
* @param {number} [num=0]
* @return {*} {Promise<void>}
*/
async waitCompleted(num: number = 0): Promise<void> {
if (this.completed) {
return;
}
if (num > 300) {
return;
}
await new Promise(resolve => {
setTimeout(resolve, 100);
});
num++;
return this.waitCompleted(num);
}
static getInstance(): GlobalContext {
return this.instance;
}
}
// 全局上下文
export const ctx: GlobalContext = GlobalContext.getInstance();
/**
*
*
* @author chitanda
* @date 2021-11-16 14:11:57
* @export
* @param {ExtensionContext} context
*/
export function initCtx(context: ExtensionContext): void {
// 将插件上下文设置到上下文中
ctx.setExtensionContext(context);
// 初始化 MosFS 虚拟文件系统并设置到上下文中
const iBizMosFSCustom = new IBizMosFSCustom();
ctx.setMosFS(iBizMosFSCustom);
}

View File

@ -0,0 +1,152 @@
import { APIMessageItem } from '@ibiz/vscode-editor-api';
import { CancellationToken, CustomTextEditorProvider, Disposable, ExtensionContext, TextDocument, Uri, ViewColumn, Webview, WebviewPanel, window, workspace } from 'vscode';
import { GlobalConst } from '../../constants';
import { ctx } from '../../context';
import { PSMosFile } from '../../entities';
import { notNilEmpty } from '../../util';
/**
*
*
* @author chitanda
* @date 2021-11-19 16:11:18
* @export
* @abstract
* @class CustomEditorBase
* @implements {CustomTextEditorProvider}
*/
export abstract class CustomEditorBase implements CustomTextEditorProvider {
protected static readonly viewType: string = '';
constructor(protected readonly context: ExtensionContext) {}
public static register(context: ExtensionContext, customEditorClass: any): Disposable {
const provider = new customEditorClass(context);
const providerRegistration = window.registerCustomEditorProvider(customEditorClass.viewType, provider, { webviewOptions: { retainContextWhenHidden: true } });
return providerRegistration;
}
async resolveCustomTextEditor(document: TextDocument, webviewPanel: WebviewPanel, token: CancellationToken): Promise<void> {
const webview = webviewPanel.webview;
webview.options = {
enableScripts: true,
};
webview.html = this.getHtmlForWebview(document, webview);
webview.onDidReceiveMessage((message: APIMessageItem) => {
switch (message.type) {
case 'init':
// 发送上下文数据
const context = {
token: ctx.token,
psdevslnsys: ctx.get('psdevslnsys'),
};
this.sendContext(webview, context);
// 发送当前文件数据
const data = document.getText();
if (notNilEmpty(data)) {
try {
const json = JSON.parse(data);
this.sendData(webview, json);
} catch (err) {
console.error('json格式转换错误数据', data);
}
}
break;
case 'command':
this.commandMessage(webview, message);
break;
case 'data': // 接收编辑器的数据变更
break;
}
});
}
protected abstract getHtmlForWebview(_document: TextDocument, _webview: Webview): string;
protected getIframeElement(href: string): string {
return `<iframe id='iframe' src='${href}' frameborder='0' style='width:100%;height:100%;'></iframe>`;
}
/**
*
*
* @author chitanda
* @date 2021-11-16 17:11:45
* @protected
* @param {Webview} webview
* @param {*} context
*/
protected sendContext(webview: Webview, context: any) {
const msg: APIMessageItem = {
target: 'vscode',
type: 'context',
context,
};
webview.postMessage(msg);
}
/**
*
*
* @author chitanda
* @date 2021-11-16 17:11:45
* @protected
* @param {Webview} webview
* @param {*} data
*/
protected sendData(webview: Webview, data: any) {
const msg: APIMessageItem = {
target: 'vscode',
type: 'data',
data,
};
webview.postMessage(msg);
}
/**
*
*
* @author chitanda
* @date 2021-11-16 17:11:51
* @protected
* @param {Webview} webview
* @param {APIMessageItem} msg
*/
protected commandMessage(webview: Webview, msg: APIMessageItem) {
switch (msg.command) {
case 'showTextDocument':
const mosFile = new PSMosFile(msg.data);
const uri = ctx.mosFS.getUri(mosFile.fullPath);
window.showTextDocument(uri, { viewColumn: ViewColumn.Two });
break;
}
}
/**
*
*
* @author chitanda
* @date 2021-11-19 16:11:47
* @protected
* @param {string} customEditorPath
* @return {*} {Uri}
*/
protected getCustomEditorSourceUri(customEditorPath: string): Uri {
const uri = Uri.joinPath(this.context.extensionUri, 'packages/custom-editor', customEditorPath);
return uri.with({ scheme: 'vscode-resource' });
}
/**
* resources
*
* @author chitanda
* @date 2021-11-21 14:11:49
* @protected
* @param {string} resourcesPath
* @return {*} {Uri}
*/
protected getResourcesUri(resourcesPath: string): Uri {
const uri = Uri.joinPath(this.context.extensionUri, 'resources', resourcesPath);
return uri.with({ scheme: 'vscode-resource' });
}
}

View File

@ -0,0 +1,42 @@
import { Disposable, ExtensionContext } from 'vscode';
import { ctx } from '../../context';
import { CustomEditorBase } from '../custom-editor-base/custom-editor-base';
/**
*
*
* @author chitanda
* @date 2021-11-19 16:11:34
* @export
* @class IBizModelRuntimeEditorProvider
* @extends {CustomEditorBase}
*/
export class IBizModelRuntimeEditorProvider extends CustomEditorBase {
protected static readonly viewType = 'iBizCustomEditor.iBizModelRuntime';
public static register(context: ExtensionContext): Disposable {
return super.register(context, IBizModelRuntimeEditorProvider);
}
protected getHtmlForWebview(): string {
const address = ctx.toolAddress;
const resetCssUri = this.getResourcesUri('css/custom-editor-reset.css');
const cssUri = this.getResourcesUri('css/custom-iframe-editor.css');
const jsUri = this.getResourcesUri('js/custom-iframe-editor.js');
const iframe = this.getIframeElement(`${address}/model-runtime/`);
return `<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title></title>
<link rel='stylesheet' href='${resetCssUri}'>
<link rel='stylesheet' href='${cssUri}'>
</head>
<body>
${iframe}
<script src='${jsUri}'></script>
</body>
</html>`;
}
}

View File

@ -0,0 +1,85 @@
import { Disposable, ExtensionContext, TextDocument, Webview } from 'vscode';
import { DesignToolUrl } from '../../config';
import { ctx } from '../../context';
import { isNilOrEmpty, notNilEmpty } from '../../util';
import { CustomEditorBase } from '../custom-editor-base/custom-editor-base';
/**
*
*
* @author chitanda
* @date 2021-11-10 15:11:47
* @export
* @class IBizModelUIEditorProvider
* @implements {CustomTextEditorProvider}
*/
export class IBizModelUIEditorProvider extends CustomEditorBase {
protected static readonly viewType = 'iBizCustomEditor.iBizModelUI';
public static register(context: ExtensionContext): Disposable {
return super.register(context, IBizModelUIEditorProvider);
}
protected getHtmlForWebview(document: TextDocument, webview: Webview): string {
const data = document.getText();
let json = {};
if (notNilEmpty(data)) {
try {
json = JSON.parse(data);
} catch (err) {
console.log(err);
}
}
const content = this.getModelContent(json);
return this.getWebContainer(webview, content);
}
protected getWebContainer(_webview: Webview, content: string): string {
const resetCssUri = this.getResourcesUri('css/custom-editor-reset.css');
const cssUri = this.getResourcesUri('css/custom-iframe-editor.css');
const jsUri = this.getResourcesUri('js/custom-iframe-editor.js');
return `<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title></title>
<link rel='stylesheet' href='${resetCssUri}'>
<link rel='stylesheet' href='${cssUri}'>
</head>
<body>
${content}
<script src='${jsUri}'></script>
</body>
</html>`;
}
protected getModelContent(data: Record<string, null>): string {
const address = ctx.toolAddress;
const type = data.psmodeltype!;
const subType = data.psmodelsubtype!;
let url: string | null = DesignToolUrl.getUrl(subType);
if (isNilOrEmpty(url)) {
url = DesignToolUrl.getUrl(type);
}
if (notNilEmpty(url)) {
let iframeUrl = `${address}${url?.replace('___instance___', ctx.get('psdevslnsys')!).replace('___srfkey___', data.psmodelid!)}`;
// 临时处理补充 query 参数
{
const urls = iframeUrl.split('#');
let url = urls[0];
if (url.indexOf('?') === -1) {
url += '?';
} else if (!url.endsWith('&')) {
url += '&';
}
url += `platform=vscode`;
urls[0] = url;
iframeUrl = urls.join('#');
}
return this.getIframeElement(iframeUrl);
}
return `暂未支持的类型 ${type}` + (subType ? ` or 子类型 ${subType}` : '');
}
}

View File

@ -0,0 +1,10 @@
import { ExtensionContext } from 'vscode';
import { IBizModelUIEditorProvider } from './ibiz-model-ui/ibiz-model-ui';
import { IBizModelRuntimeEditorProvider } from './ibiz-model-runtime/ibiz-model-runtime';
export function installCustomEditor(context: ExtensionContext) {
// 注册自定义编辑器
context.subscriptions.push(IBizModelUIEditorProvider.register(context));
context.subscriptions.push(IBizModelRuntimeEditorProvider.register(context));
}

3
src/entities/index.ts Normal file
View File

@ -0,0 +1,3 @@
export { PSMosFile } from './mos-file/ps-mos-file';
export { MosFilePickItem } from './quick-pick-item/mos-file-pick-item';
export { TemplatePickItem } from './quick-pick-item/template-pick-item';

View File

@ -0,0 +1,241 @@
/**
* -
*
* @author chitanda
* @date 2021-11-10 10:11:44
* @export
* @class PSMosFileBase
*/
export class PSMosFileBase {
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
fullpath?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
modelv2tag?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
folderflag?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
createdate?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
tags?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
psmosfilename?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
filecnt?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
uiactionparams?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
psmosfileid?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
userflag?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
updateman?: any;
/**
* 3
*
* @type {*}
* @memberof PSMosFileBase
*/
filetag3?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
psmodeltype?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
updatedate?: any;
/**
* 4
*
* @type {*}
* @memberof PSMosFileBase
*/
filetag4?: any;
/**
* 2
*
* @type {*}
* @memberof PSMosFileBase
*/
filetag2?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
psmodelid?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
memo?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
pssystemname?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
filetag?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
color?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
css?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
pssystemid?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
createman?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
ppsmosfilename?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
uiactions?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
fileattr?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
ppsmosfileid?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
validflag?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
ordervalue?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
data?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
psmodelsubtype?: any;
/**
*
*
* @type {*}
* @memberof PSMosFileBase
*/
filecat?: any;
}

View File

@ -0,0 +1,223 @@
import { DesignToolUrl, IBizModelFSCustomConfig } from '../../config';
import { FileExtensionConst } from '../../constants';
import { PSMosFileBase } from './ps-mos-file-base';
/**
* -
*
* @author chitanda
* @date 2021-11-10 10:11:01
* @export
* @class PSMosFile
* @extends {PSMosFileBase}
*/
export class PSMosFile extends PSMosFileBase {
/**
/**
*
*
* @author chitanda
* @date 2021-11-14 17:11:30
* @static
*/
static readonly pathSeparator = '/';
/**
*
*
* @type {*}
* @memberof PsMOSFile
*/
get id() {
return this.psmodelid;
}
/**
*
*
* @type {*}
* @memberof PsMOSFile
*/
get name(): string {
return this.psmosfilename;
}
/**
*
*
* @author chitanda
* @date 2021-11-14 17:11:44
* @protected
* @type {(string | null | undefined)}
*/
protected _pPath: string | null | undefined = undefined;
/**
*
*
* @author chitanda
* @date 2021-11-14 17:11:40
* @readonly
* @type {(string | null)}
*/
get pPath(): string | null {
if (this._pPath !== undefined) {
return this._pPath;
}
const paths = this.path.split(PSMosFile.pathSeparator);
if (paths.length > 2) {
paths.pop();
this._pPath = paths.join(PSMosFile.pathSeparator);
} else {
this._pPath = null;
}
return this._pPath;
}
/**
*
*
* @type {string}
* @memberof PsMOSFile
*/
get path(): string {
if (this.isLink) {
return this.filetag2;
}
return this.psmosfileid;
}
/**
*
*
* @type {boolean}
* @memberof PsMOSFile
*/
get isFolder(): boolean {
return this.folderflag !== 0;
}
/**
*
*
* @author chitanda
* @date 2021-11-10 10:11:16
* @readonly
* @type {('MODEL' | 'LINK' | 'DR' | 'GROUP' | 'RECENTS' | 'BOOKMARKS' | 'MODELREPOS')}
*/
get type(): 'MODEL' | 'LINK' | 'DR' | 'GROUP' | 'RECENTS' | 'BOOKMARKS' | 'MODELREPOS' {
return this.filetag;
}
/**
*
*
* @author chitanda
* @date 2021-11-24 16:11:49
* @readonly
* @type {boolean}
*/
get isLink(): boolean {
return this.type === 'LINK';
}
/**
*
*
* @author chitanda
* @date 2021-11-10 10:11:58
* @readonly
* @type {boolean}
*/
get ownIndex(): boolean {
return IBizModelFSCustomConfig.ownIndex(this.path);
}
/**
*
*
* @type {(0 | 1 | 3)} 013
* @memberof PsMOSFile
*/
folderflag!: 0 | 1 | 3;
/**
*
*
* @author chitanda
* @date 2021-11-18 11:11:51
* @protected
* @type {string}
*/
protected _extension?: string;
/**
*
*
* @author chitanda
* @date 2021-11-16 17:11:45
* @readonly
* @type {string}
*/
get extension(): string {
if (this._extension) {
return this._extension;
}
const type = this.psmodeltype as string;
const subType = this.psmodelsubtype as string;
if (DesignToolUrl.has(subType) || DesignToolUrl.has(type)) {
return FileExtensionConst.MODEL_UI;
}
return '';
}
/**
*
*
* @author chitanda
* @date 2021-11-18 11:11:36
*/
set extension(str: string) {
this._extension = str;
}
get fullPath(): string {
return `${this.path}${this.extension}`;
}
/**
* Creates an instance of PSMosFile.
*
* @author chitanda
* @date 2021-11-10 10:11:51
* @param {Record<string, any>} data
*/
constructor(data: Record<string, any>) {
super();
this.fill(data);
}
/**
*
*
* @author chitanda
* @date 2021-11-10 10:11:14
* @protected
* @param {*} data
*/
protected fill(data: any) {
const self = this as any;
for (const key in data) {
if (Object.prototype.hasOwnProperty.call(data, key)) {
const val = data[key];
self[key.toLowerCase()] = val;
}
}
}
/**
* JSON
*
* @author chitanda
* @date 2021-11-11 09:11:37
* @return {*} {string}
*/
toString(): string {
try {
return JSON.stringify(this, null, 2);
} catch (err) {
console.log(err);
}
return '';
}
}

View File

@ -0,0 +1,48 @@
import { QuickPickItem } from 'vscode';
import { notNilEmpty } from '../../util';
import { PSMosFile } from '../mos-file/ps-mos-file';
/**
* mos file
*
* @author chitanda
* @date 2021-12-07 11:12:49
* @export
* @class MosFilePickItem
* @implements {QuickPickItem}
*/
export class MosFilePickItem implements QuickPickItem {
/**
* label
*
* @author chitanda
* @date 2021-12-07 11:12:52
* @type {string}
*/
readonly label!: string;
readonly description?: string | undefined;
readonly detail?: string | undefined;
readonly picked?: boolean | undefined;
readonly alwaysShow?: boolean | undefined;
readonly data: PSMosFile;
/**
* Creates an instance of MosFilePickItem.
*
* @author chitanda
* @date 2021-12-07 11:12:13
* @param {PSMosFile} mosFile
*/
constructor(mosFile: PSMosFile) {
this.data = mosFile;
if (notNilEmpty(mosFile.filetag4)) {
this.label = mosFile.filetag4;
}
if (notNilEmpty(this.label)) {
this.description = mosFile.psmosfilename;
} else {
this.label = mosFile.psmosfilename;
}
this.detail = mosFile.filetag2 || mosFile.psmosfileid;
}
}

View File

@ -0,0 +1,46 @@
import { QuickPickItem } from 'vscode';
/**
*
*
* @author chitanda
* @date 2021-12-07 11:12:27
* @export
* @class TemplatePickItem
* @implements {QuickPickItem}
*/
export class TemplatePickItem implements QuickPickItem {
readonly label: string;
readonly description?: string | undefined;
readonly detail?: string | undefined;
readonly picked?: boolean | undefined;
readonly alwaysShow?: boolean | undefined;
readonly data: Record<string, string>;
/**
* Creates an instance of TemplatePickItem.
* @author chitanda
* @date 2021-12-07 11:12:30
* @param {Record<string, string>} temp
*/
constructor(temp: Record<string, string>) {
this.data = temp;
let description = '';
if (temp.templtype === 'PSPF') {
description = '前端模板';
if (temp.pspfname) {
description += ` - ${temp.pspfname}`;
}
} else {
description = '后端模板';
if (temp.pssfname) {
description += ` - ${temp.pssfname}`;
}
}
this.label = temp.psdevslntemplname;
this.description = description;
if (temp.memo) {
this.detail = temp.memo;
}
}
}

14
src/explorer/index.ts Normal file
View File

@ -0,0 +1,14 @@
import { ExtensionContext } from 'vscode';
import { ModelExpTree } from './model-exp/model-exp';
/**
*
*
* @author chitanda
* @date 2021-11-30 10:11:47
* @export
* @param {ExtensionContext} context
*/
export function installExplorer(context: ExtensionContext): void {
new ModelExpTree(context);
}

View File

@ -0,0 +1,19 @@
import { ExtensionContext, window } from 'vscode';
import { ExplorerConst } from '../../constants/explorer/explorer';
import { ctx } from '../../context';
import { ModelExpTreeProvider } from './provider/model-exp-tree';
/**
*
*
* @author chitanda
* @date 2021-11-30 09:11:18
* @export
* @class ModelExpTree
*/
export class ModelExpTree {
constructor(context: ExtensionContext) {
const treeDataProvider = new ModelExpTreeProvider(context, ctx.mosFS);
context.subscriptions.push(window.createTreeView(ExplorerConst.MODEL_EXP_TREE, { treeDataProvider, showCollapseAll: true }));
}
}

View File

@ -0,0 +1,23 @@
import { FileType, TreeItem, TreeItemCollapsibleState } from 'vscode';
import { CommandConst } from '../../../constants';
import { Entry } from '../../../file-system';
/**
*
*
* @author chitanda
* @date 2021-11-30 12:11:35
* @export
* @class ModelTreeItem
* @extends {TreeItem}
*/
export class ModelTreeItem extends TreeItem {
constructor(protected file: Entry) {
super(file.getUri(), file.type === FileType.Directory ? TreeItemCollapsibleState.Collapsed : TreeItemCollapsibleState.None);
this.label = file.logicName || file.name;
if (file.type === FileType.File || file.type === (FileType.SymbolicLink | FileType.File)) {
this.command = { command: CommandConst.MOS_FS.OPEN_FILE, title: '打开文件', arguments: [file.fullPath] };
}
this.contextValue = file.content.type;
}
}

View File

@ -0,0 +1,29 @@
import { Event, EventEmitter, ExtensionContext, TreeDataProvider } from 'vscode';
import { Entry, IBizMosFSCustom } from '../../../file-system';
import { ModelTreeItem } from '../model-tree-item/model-tree-item';
/**
*
*
* @author chitanda
* @date 2021-11-30 10:11:47
* @export
* @class ModelExpTreeProvider
* @implements {TreeDataProvider<Entry>}
*/
export class ModelExpTreeProvider implements TreeDataProvider<Entry> {
private _onDidChangeTreeData: EventEmitter<any> = new EventEmitter<any>();
onDidChangeTreeData?: Event<void | Entry | null | undefined> | undefined = this._onDidChangeTreeData.event;
constructor(protected context: ExtensionContext, protected iBizMosFS: IBizMosFSCustom) {}
async getTreeItem(file: Entry): Promise<ModelTreeItem> {
const treeItem = new ModelTreeItem(file);
return treeItem;
}
async getChildren(file?: Entry): Promise<Entry[]> {
const entries: Entry[] = await this.iBizMosFS.loadDir(file?.path || '');
return entries;
}
}

70
src/extension.ts Normal file
View File

@ -0,0 +1,70 @@
import { ExtensionContext, workspace } from 'vscode';
import { installCommands } from './commands';
import { loadConfig } from './config';
import { ctx, initCtx } from './context';
import { installCustomEditor } from './custom-editor';
import { installExplorer } from './explorer';
import { installLanguages } from './languages';
import { login, serviceApi } from './service';
import { wsOutput } from './terminal';
import { Interceptor, isNilOrEmpty, notNilEmpty } from './util';
import { Websocket } from './ws';
export function activate(context: ExtensionContext): void {
// 初始化插件上下文
initCtx(context);
// 注册系统虚拟文件适配器
workspace.registerFileSystemProvider('ibizmos', ctx.mosFS, { isCaseSensitive: true });
// 注册拦截器
new Interceptor();
// 安装命令
installCommands(context);
// 安装自定义资源管理器
installExplorer(context);
// 安装语言服务适配器
installLanguages(context);
// 注册自定义编辑器
installCustomEditor(context);
// 一些异步激活的东西
asyncActivate(context);
}
/**
*
*
* @author chitanda
* @date 2021-11-29 10:11:36
* @export
* @return {*} {Promise<void>}
*/
export async function asyncActivate(context: ExtensionContext): Promise<void> {
// 读取配置文件
await loadConfig();
{
// 从 vscode 缓存中初始化登录信息
const token = await context.secrets.get(ctx.tokenKey);
if (notNilEmpty(token)) {
ctx.setToken(token!);
}
}
{
// 在读取配置文件后,获取应用基本信息
const appData = (await serviceApi.getAppData()) as Record<string, string>;
if (notNilEmpty(appData)) {
// 初始化 mqtt 服务
ctx.setWS(new Websocket({ psdsconsoleurl: appData.psdsconsoleurl, psdevslnsysid: appData.psdevslnsysid }));
// 初始化系统 output terminal
wsOutput.init(ctx.ws, ctx.get('psdevslnsysname') || '未知');
}
}
{
// 未登录提示登录,已登录时自动更新工作区
const token = ctx.token;
if (isNilOrEmpty(token)) {
login.notLogged();
}
}
ctx.completedEnd();
}
export function deactivate() {}

Some files were not shown because too many files have changed in this diff Show More