wu.jian2 2 роки тому
батько
коміт
74f6bf433a

+ 17 - 0
data-room-ui/.babelrc

@@ -0,0 +1,17 @@
+{
+  "plugins": [
+    [
+      "component",
+      {
+        "libraryName": "gc-starter-ui",
+        "styleLibraryName": false
+      }
+    ]
+  ],
+  "env": {
+    "development":{
+      // 将import方法转成require(),且是动态的
+      "plugins":["dynamic-import-node"]
+    }
+  }
+}

+ 14 - 0
data-room-ui/.editorconfig

@@ -0,0 +1,14 @@
+# 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

+ 15 - 0
data-room-ui/.env.development

@@ -0,0 +1,15 @@
+# just a flag
+ENV = 'development'
+
+# base api
+VUE_APP_BASE_API = '/gc-starter-server'
+
+VUE_APP_BUILD_TYPE = 'example'
+# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
+# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
+# It only does one thing by converting all import() to require().
+# This configuration can significantly increase the speed of hot updates,
+# when you have a large number of pages.
+# Detail:  https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js
+
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 11 - 0
data-room-ui/.env.history

@@ -0,0 +1,11 @@
+NODE_ENV = production
+
+# just a flag
+ENV = 'history'
+
+# VUE_APP_BASE为项目访问路径的前缀
+VUE_APP_BASE = '/gc-starter-lowcode-ui'
+# VUE_APP_HISTORY为是否开启history模式
+VUE_APP_HISTORY = 'y'
+
+VUE_APP_BUILD_TYPE = 'example'

+ 4 - 0
data-room-ui/.env.package

@@ -0,0 +1,4 @@
+# just a flag
+ENV = 'production'
+
+VUE_APP_BUILD_TYPE = 'package'

+ 7 - 0
data-room-ui/.env.production

@@ -0,0 +1,7 @@
+# just a flag
+ENV = 'production'
+
+# base api
+VUE_APP_BASE_API = '/chuangDa'
+
+VUE_APP_BUILD_TYPE = 'example'

+ 10 - 0
data-room-ui/.env.staging

@@ -0,0 +1,10 @@
+NODE_ENV = production
+
+# just a flag
+ENV = 'staging'
+
+# base api
+VUE_APP_BASE_API = '/stage-api'
+
+VUE_APP_BUILD_TYPE = 'example'
+

+ 6 - 0
data-room-ui/.eslintignore

@@ -0,0 +1,6 @@
+build/*.js
+src/assets
+public/
+dist
+node_modules/
+src/views/bigScreen/*

+ 40 - 0
data-room-ui/.eslintrc.js

@@ -0,0 +1,40 @@
+/*
+ * @Author: wujian
+ * @Date: 2022-05-31 09:27:01
+ * @LastEditors: xing.heng
+ * @LastEditTime: 2023-05-17 22:48:17
+ */
+module.exports = {
+  root: true,
+  parserOptions: {
+    parser: '@babel/eslint-parser',
+    sourceType: 'module',
+    ecmaVersion: 2015
+  },
+  plugins: ['vue'],
+  env: {
+    browser: true,
+    node: true,
+    es6: true
+  },
+  rules: {
+    // 忽略console警告
+    'no-console': 'off',
+    // 忽略v-html警告
+    'vue/no-v-html': 'off',
+    'vue/multi-word-component-names': 'off',
+    'vue/no-mutating-props': 'off',
+    'no-prototype-builtins': 'off',
+    'array-callback-return': 'off',
+    'prefer-regex-literals': 'off',
+    'multiline-ternary': 'off',
+    'vue/order-in-components': 'off',
+    'no-eval': 'off',
+    'vue/no-template-shadow': 'off'
+  },
+  extends: [
+    'plugin:vue/recommended',
+    'eslint:recommended',
+    '@vue/standard' // 使eslint继承standard标准
+  ]
+}

+ 371 - 0
data-room-ui/.gitignore

@@ -0,0 +1,371 @@
+# data-room-uii.zip
+# data-room-uii
+chuangDa
+chuangDa.zip
+deploy.sh
+dist
+gc-starter-lowcode-ui
+### VisualStudioCode template
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+*.code-workspace
+
+# Local History for Visual Studio Code
+.history/
+
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+.idea
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn.  Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+### Eclipse template
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.recommenders
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# PyDev specific (Python IDE for Eclipse)
+*.pydevproject
+
+# CDT-specific (C/C++ Development Tooling)
+.cproject
+
+# CDT- autotools
+.autotools
+
+# Java annotation processor (APT)
+.factorypath
+
+# PDT-specific (PHP Development Tools)
+.buildpath
+
+# sbteclipse plugin
+.target
+
+# Tern plugin
+.tern-project
+
+# TeXlipse plugin
+.texlipse
+
+# STS (Spring Tool Suite)
+.springBeans
+
+# Code Recommenders
+.recommenders/
+
+# Annotation Processing
+.apt_generated/
+.apt_generated_test/
+
+# Scala IDE specific (Scala & Java development for Eclipse)
+.cache-main
+.scala_dependencies
+.worksheet
+
+# Uncomment this line if you wish to ignore the project description file.
+# Typically, this file would be tracked if it contains build/dependency configurations:
+#.project
+
+### Node template
+# 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
+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.*
+
+### Vue template
+# gitignore template for Vue.js projects
+#
+# Recommended template: Node.gitignore
+
+# TODO: where does this rule come from?
+docs/_book
+
+# TODO: where does this rule come from?
+test/
+
+### Windows template
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+### macOS template
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### SublimeText template
+# Cache files for Sublime Text
+*.tmlanguage.cache
+*.tmPreferences.cache
+*.stTheme.cache
+
+# Workspace files are user-specific
+*.sublime-workspace
+
+# Project files should be checked into the repository, unless a significant
+# proportion of contributors will probably not be using Sublime Text
+# *.sublime-project
+
+# SFTP configuration file
+sftp-config.json
+sftp-config-alt*.json
+
+# Package control specific files
+Package Control.last-run
+Package Control.ca-list
+Package Control.ca-bundle
+Package Control.system-ca-bundle
+Package Control.cache/
+Package Control.ca-certs/
+Package Control.merged-ca-bundle
+Package Control.user-ca-bundle
+oscrypto-ca-bundle.crt
+bh_unicode_properties.cache
+
+# Sublime-github package stores a github token in this file
+# https://packagecontrol.io/packages/sublime-github
+GitHub.sublime-settings
+
+lib
+gc-starter-lowcode-ui

+ 0 - 0
data-room-ui/.npmrc


+ 9 - 9
data-room-ui/README.md

@@ -1,6 +1,6 @@
 ## 📚简介
 <p align="center">
-  <img alt="logo" width="50" src="../doc/logo.png">
+  <img alt="logo" width="50" src="./doc/logo.png">
 </p>
 
 🔥基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器,具备大屏目录管理、大屏设计、大屏预览能力,支持MySQL、Oracle、PostgreSQL、JSON等数据集接入,对于复杂数据处理还可以使用Groovy脚本数据集,使用简单,完全免费,代码开源。
@@ -19,10 +19,10 @@
 ## 效果图
 
 #### 管理页
-<img alt="logo" src="../doc/images/home.png">
+<img alt="logo" src="./doc/images/home.png">
 
 #### 设计器
-<img alt="logo" src="../doc/images/design01.png">
+<img alt="logo" src="./doc/images/design01.png">
 
 ## 优势
 
@@ -53,14 +53,14 @@
 
 * [使用手册、二次开发、部署手册、常见问题](https://www.yuque.com/chuinixiongkou/bigscreen/index)
 * [前端代码仓库(GitHub)](https://github.com/gcpaas/DataRoom/tree/master/data-room-ui)、[前端代码仓库(码云)](https://gitee.com/gcpaas/gc-starter-bigscreen-ui)
-* [后端代码仓库(GitHub)](https://github.com/gcpaas/DataRoom/tree/master/DataRoom)、 [后端代码仓库(码云)](https://gitee.com/gcpaas/gc-starter-bigscreen)
+* [后端代码仓库(GitHub)](https://github.com/gcpaas/gc-starter-bigscreen)、 [后端代码仓库(码云)](https://gitee.com/gcpaas/gc-starter-bigscreen)
 
 ## 如何集成
 
 ### 1. 安装依赖
 
 ``` bash
-npm install gc-starter-bigscreen-ui
+npm install @gcpaas/data-room-ui
 ```
 
 ### 2. 在 `main.js` 引入大屏
@@ -91,7 +91,7 @@ window.CONFIG.baseUrl=http://127.0.0.1:8081/bigScreenServer
 ```javascript
 // file: main.js
 
-import { registerConfig } from 'gc-starter-bigscreen-ui'
+import { registerConfig } from '@gcpaas/data-room-ui'
 registerConfig({
   httpConfigs: {
     baseURL: `这里是后端服务地址的值,如:window.CONFIG.baseUrl`
@@ -110,7 +110,7 @@ VUE_APP_BASE_URL=http://127.0.0.1:8081/bigScreenServer
 ```javascript
 // file: main.js
 
-import { registerConfig } from 'gc-starter-bigscreen-ui'
+import { registerConfig } from '@gcpaas/data-room-ui'
 // 注意写在 new Vue() 之前
 registerConfig({
   httpConfigs: {
@@ -124,7 +124,7 @@ registerConfig({
 ```js
 // file: 项目中导出strore的文件
 
-import { $bigScreen } from 'gc-starter-bigscreen-ui'
+import { $bigScreen } from '@gcpaas/data-room-ui'
 const store = new Vuex.Store({
   modules: 
     // 导出大屏所需vuex模块
@@ -150,7 +150,7 @@ export default store
 <img alt="QQ群" src="https://img.shields.io/badge/QQ群-322302395-blue.svg">
 
 <p>
-    <img alt="logo" width="200" src="../doc/images/qq.jpeg">
+    <img alt="logo" width="200" src="./doc/images/qq.jpeg">
 </p>
 
 ## License

+ 1 - 1
data-room-ui/example/main.js

@@ -9,7 +9,7 @@ import store from './store'
 import router from './router'
 import 'element-ui/lib/theme-chalk/index.css'
 import '@/assets/styles/index.scss'
-import { registerConfig } from 'gc-starter-bigscreen-ui'
+import { registerConfig } from 'data-room-ui'
 import remoteComponents from '@/remoteComponents/exports.js'
 import customDatasetComponents from '@/customDatasetComponents/exports.js'
 Vue.use(ElementUI, { size: 'mini' })

+ 1 - 1
data-room-ui/jsconfig.json

@@ -8,5 +8,5 @@
   "vueCompilerOptions": {
     "experimentalDisableTemplateSupport" : true
   },
-  "exclude": ["node_modules", "dist","lib"]
+  "exclude": ["node_modules", "dist"]
 }

+ 43 - 43
data-room-ui/package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "@gcpaas/data-room-ui",
-  "version": "0.0.1-2023061901-Alpha",
+  "version": "0.0.1-2023061903-Alpha",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -3307,27 +3307,6 @@
         "whatwg-fetch": "^3.6.2"
       },
       "dependencies": {
-        "@vue/vue-loader-v15": {
-          "version": "npm:vue-loader@15.10.1",
-          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
-          "integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
-          "dev": true,
-          "requires": {
-            "@vue/component-compiler-utils": "^3.1.0",
-            "hash-sum": "^1.0.2",
-            "loader-utils": "^1.1.0",
-            "vue-hot-reload-api": "^2.3.0",
-            "vue-style-loader": "^4.1.0"
-          },
-          "dependencies": {
-            "hash-sum": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
-              "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-              "dev": true
-            }
-          }
-        },
         "acorn-walk": {
           "version": "8.2.0",
           "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz",
@@ -3399,26 +3378,6 @@
             "tapable": "^2.0.0"
           }
         },
-        "json5": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-          "dev": true,
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.2",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
-          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-          "dev": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
         "ms": {
           "version": "2.1.2",
           "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
@@ -3636,6 +3595,47 @@
         "lodash": "^4.17.4"
       }
     },
+    "@vue/vue-loader-v15": {
+      "version": "npm:vue-loader@15.10.1",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
+      "integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
+      "dev": true,
+      "requires": {
+        "@vue/component-compiler-utils": "^3.1.0",
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.1.0",
+        "vue-hot-reload-api": "^2.3.0",
+        "vue-style-loader": "^4.1.0"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+          "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
+          "dev": true
+        },
+        "json5": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "loader-utils": {
+          "version": "1.4.2",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
+          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
     "@vue/vue2-jest": {
       "version": "27.0.0",
       "resolved": "https://registry.npmmirror.com/@vue/vue2-jest/-/vue2-jest-27.0.0.tgz",
@@ -19719,7 +19719,7 @@
     },
     "vue-hot-reload-api": {
       "version": "2.3.4",
-      "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
+      "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
       "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
       "dev": true
     },

+ 6 - 6
data-room-ui/package.json

@@ -1,18 +1,18 @@
 {
   "name": "@gcpaas/data-room-ui",
-  "version": "0.0.1-2023061902-Alpha",
+  "version": "0.0.1-2023061903-Alpha",
   "description": "自定义大屏",
   "author": "gc-starter",
   "license": "MIT",
-  "main": "lib/bigScreen.umd.min.js",
+  "main": "lib/dataRoom.umd.min.js",
   "files": [
     "lib/fonts/*",
     "lib/img/*",
-    "lib/bigScreen.css",
-    "lib/bigScreen.umd.min.js.gz"
+    "lib/dataRoom.css",
+    "lib/dataRoom.umd.min.js.gz"
   ],
   "keywords": [
-    "bigScreen",
+    "dataRoom",
     "大屏设计器",
     "低代码",
     "low code"
@@ -21,7 +21,7 @@
     "type": "github",
     "url": "https://github.com/gcpaas/DataRoom/tree/master/data-room-ui"
   },
-  "homepage": "https://github.com/gcpaas/DataRoom/tree/master/data-room-ui",
+  "homepage": "https://github.com/gcpaas/DataRoom",
   "scripts": {
     "serve": "vue-cli-service serve --open",
     "serve:max": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve --open",