-
-
-
- {{ item[textField] || formatName(item) }}
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ {{ item[textField] || formatName(item) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/common/component/MonacoEditor.vue b/packages/common/component/MonacoEditor.vue
index 8c6fc8582..42e94833a 100644
--- a/packages/common/component/MonacoEditor.vue
+++ b/packages/common/component/MonacoEditor.vue
@@ -6,16 +6,21 @@
-
+
@@ -39,6 +45,8 @@ import { computed, ref, onActivated, onDeactivated } from 'vue'
import { Tooltip } from '@opentiny/vue'
import PublicIcon from './PublicIcon.vue'
import VueMonaco from './VueMonaco.vue'
+import { constants } from '@opentiny/tiny-engine-utils'
+const { OPEN_DELAY } = constants
export default {
components: {
@@ -60,8 +68,8 @@ export default {
default: true
}
},
- emits: ['editorDidMount'],
- setup(props) {
+ emits: ['editorDidMount', 'change', 'fullscreenChange'],
+ setup(props, { emit }) {
const editor = ref(null)
const fullscreen = ref(false)
const editorOptions = computed(() => {
@@ -112,6 +120,7 @@ export default {
const switchFullScreen = (value) => {
fullscreen.value = value
+ emit('fullscreenChange', value)
}
return {
@@ -122,7 +131,8 @@ export default {
fullscreen,
switchFullScreen,
getValue,
- formatCode
+ formatCode,
+ OPEN_DELAY
}
}
}
@@ -140,7 +150,7 @@ export default {
top: var(--base-top-panel-height);
bottom: 0;
left: calc(var(--base-nav-panel-width) + var(--base-left-panel-width));
- right: var(--base-left-panel-width);
+ right: var(--base-right-panel-width);
z-index: 100;
padding: 10px 16px 16px 16px;
background-color: var(--ti-lowcode-common-component-bg);
@@ -164,7 +174,7 @@ export default {
color: var(--te-common-icon-secondary);
}
}
- .fullscreen {
+ .engine-fullscreen {
display: flex;
margin-right: 20px;
}
diff --git a/packages/common/component/PluginBlockList.vue b/packages/common/component/PluginBlockList.vue
index c1f34c5ee..071f6f284 100644
--- a/packages/common/component/PluginBlockList.vue
+++ b/packages/common/component/PluginBlockList.vue
@@ -53,14 +53,14 @@
@@ -74,12 +74,12 @@
@@ -205,7 +205,7 @@ export default {
emits: ['click', 'iconClick', 'add', 'deleteBlock', 'openVersionPanel', 'editBlock', 'checkAll', 'cancelCheckAll'],
setup(props, { emit }) {
const panelState = inject('panelState', {})
- const blockUsers = inject('blockUsers')
+ const blockUsers = inject('blockUsers', [])
const state = reactive({
activeIndex: -1,
data: computed(() => props.data),
@@ -741,19 +741,12 @@ export default {
box-sizing: border-box;
cursor: pointer;
&:hover {
- background-color: var(--ti-lowcode-component-block-setting-item-hover-bg);
color: var(--ti-lowcode-common-primary-text-color);
}
.list-item-icon {
font-size: 14px;
color: var(--te-common-icon-secondary);
}
- .list-item-svg {
- color: var(--te-common-icon-secondary);
- }
- .list-item-svg:hover {
- background-color: var(--ti-lowcode-component-block-setting-item-hover-bg);
- }
}
}
diff --git a/packages/common/component/PluginPanel.vue b/packages/common/component/PluginPanel.vue
index cf0fb240f..297ef4fd2 100644
--- a/packages/common/component/PluginPanel.vue
+++ b/packages/common/component/PluginPanel.vue
@@ -108,7 +108,10 @@ export default {
align-items: center;
:deep(.svg-button + .svg-button) {
- margin: 0;
+ margin-left: 4px;
+ }
+ :deep(.svg-button + .icon-wrap) {
+ margin-left: 4px;
}
}
}
diff --git a/packages/common/component/PluginSetting.vue b/packages/common/component/PluginSetting.vue
index b822f87b1..37e50e972 100644
--- a/packages/common/component/PluginSetting.vue
+++ b/packages/common/component/PluginSetting.vue
@@ -9,16 +9,17 @@
@@ -32,7 +33,9 @@
@@ -52,20 +45,19 @@ export default {
.svg-wrap {
position: relative;
- .dots {
+
+ .dot {
+ position: absolute;
width: 6px;
height: 6px;
background: var(--ti-lowcode-toolbar-dot-color);
border-radius: 50%;
- display: inline-block;
- position: absolute;
- top: -2px;
- right: -2px;
+ top: -3px;
+ right: 2px;
z-index: 100;
}
-}
-
-.save-title {
- margin: 0 6px;
+ .svg-icon.svg-icon.svg-icon {
+ color: var(--te-common-icon-primary);
+ }
}
diff --git a/packages/common/component/toolbar-built-in/ToolbarBaseIcon.vue b/packages/common/component/toolbar-built-in/ToolbarBaseIcon.vue
index b763a5059..2404f3903 100644
--- a/packages/common/component/toolbar-built-in/ToolbarBaseIcon.vue
+++ b/packages/common/component/toolbar-built-in/ToolbarBaseIcon.vue
@@ -8,7 +8,7 @@
>
-
+
@@ -17,7 +17,6 @@
+
+
diff --git a/packages/engine-cli/template/designer/src/composable/http/index.js b/packages/engine-cli/template/designer/src/composable/http/index.js
index 26b7edae7..f11538395 100644
--- a/packages/engine-cli/template/designer/src/composable/http/index.js
+++ b/packages/engine-cli/template/designer/src/composable/http/index.js
@@ -1,36 +1,135 @@
+import { createApp } from 'vue'
import { HttpService } from '@opentiny/tiny-engine'
+import { useBroadcastChannel } from '@vueuse/core'
+import { constants } from '@opentiny/tiny-engine-utils'
+import Login from './Login.vue'
+
+const LOGIN_EXPIRED_CODE = 401
+const { BROADCAST_CHANNEL } = constants
+
+const { post: globalNotify } = useBroadcastChannel({ name: BROADCAST_CHANNEL.Notify })
+
+const procession = {
+ promiseLogin: null,
+ mePromise: {}
+}
+let loginVM = null
+
+const showError = (url, message) => {
+ globalNotify({
+ type: 'error',
+ title: '接口报错',
+ message: `报错接口: ${url} \n报错信息: ${message ?? ''}`
+ })
+}
const preRequest = (config) => {
+ const isDevelopEnv = import.meta.env.MODE?.includes('dev')
+
+ if (isDevelopEnv && config.url.match(/\/generate\//)) {
+ config.baseURL = ''
+ }
+
+ const isVsCodeEnv = window.vscodeBridge
+
+ if (isVsCodeEnv) {
+ config.baseURL = ''
+ }
+
return config
}
const preResponse = (res) => {
+ if (res.data?.error) {
+ showError(res.config?.url, res?.data?.error?.message)
+
+ return Promise.reject(res.data.error)
+ }
+
return res.data?.data
}
+const openLogin = () => {
+ if (!window.lowcode) {
+ const loginDom = document.createElement('div')
+ document.body.appendChild(loginDom)
+ loginVM = createApp(Login).mount(loginDom)
+
+ window.lowcode = {
+ platformCenter: {
+ Session: {
+ rebuiltCallback: function () {
+ loginVM.closeLogin()
+
+ procession.mePromise.resolve('login ok')
+ procession.promiseLogin = null
+ procession.mePromise = {}
+ }
+ }
+ }
+ }
+ }
+
+ return new Promise((resolve, reject) => {
+ if (!procession.promiseLogin) {
+ procession.promiseLogin = loginVM.openLogin(procession, '/api/rebuildSession')
+ procession.promiseLogin.then((response) => {
+ HttpService.apis.request(response.config).then(resolve, reject)
+ })
+ }
+ })
+}
+
const errorResponse = (error) => {
- return Promise.reject(error.message)
+ // 用户信息失效时,弹窗提示登录
+ const { response } = error
+
+ if (response?.status === LOGIN_EXPIRED_CODE) {
+ // vscode 插件环境弹出输入框提示登录
+ if (window.vscodeBridge) {
+ return Promise.resolve(true)
+ }
+
+ // 浏览器环境弹出小窗登录
+ if (response?.headers['x-login-url']) {
+ return openLogin()
+ }
+ }
+
+ showError(error.config?.url, error?.message)
+
+ return response?.data.error ? Promise.reject(response.data.error) : Promise.reject(error.message)
}
const getConfig = (env = import.meta.env) => {
+ const baseURL = env.VITE_ORIGIN
+ // 仅在本地开发时,启用 withCredentials
+ const dev = env.MODE?.includes('dev')
+ // 获取租户 id
+ const getTenant = () => new URLSearchParams(location.search).get('tenant')
+
return {
- baseURL: env.VITE_ORIGIN,
+ baseURL,
+ withCredentials: dev,
headers: {
- 'x-lowcode-mode': env.MODE
+ ...(dev && { 'x-lowcode-mode': 'develop' }),
+ 'x-lowcode-org': getTenant()
}
}
}
-const options = {
- axiosConfig: getConfig(),
- enableMock: false,
- mockData: {},
- interceptors: {
- request: [preRequest],
- response: [[preResponse, errorResponse]]
+const customizeHttpService = () => {
+ const options = {
+ axiosConfig: getConfig(),
+ interceptors: {
+ request: [preRequest],
+ response: [[preResponse, errorResponse]]
+ }
}
-}
-HttpService.apis.setOptions(options)
+ HttpService.apis.setOptions(options)
+
+ return HttpService
+}
-export default HttpService
+export default customizeHttpService()
diff --git a/packages/engine-cli/template/designer/src/preview.js b/packages/engine-cli/template/designer/src/preview.js
index 4e120d4c6..eb7717c66 100644
--- a/packages/engine-cli/template/designer/src/preview.js
+++ b/packages/engine-cli/template/designer/src/preview.js
@@ -14,6 +14,7 @@ import { initHook, HOOK_NAME, GenerateCodeService, Breadcrumb, Media, Lang } fro
import { initPreview } from '@opentiny/tiny-engine'
import 'virtual:svg-icons-register'
import '@opentiny/tiny-engine-theme'
+import { HttpService } from './composable'
const beforeAppCreate = () => {
initHook(HOOK_NAME.useEnv, import.meta.env)
@@ -23,7 +24,7 @@ initPreview({
registry: {
root: {
id: 'engine.root',
- metas: [GenerateCodeService]
+ metas: [HttpService, GenerateCodeService]
},
config: { id: 'engine.config', theme: 'light' },
toolbars: [Breadcrumb, Media, Lang]
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index 08549005b..6b12b4595 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-i18n-host",
- "version": "2.0.0",
+ "version": "2.1.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/layout/package.json b/packages/layout/package.json
index f699c3e1b..3e905a9a8 100644
--- a/packages/layout/package.json
+++ b/packages/layout/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-layout",
- "version": "2.0.0",
+ "version": "2.1.0",
"scripts": {
"build": "vite build"
},
diff --git a/packages/layout/src/DesignPlugins.vue b/packages/layout/src/DesignPlugins.vue
index 27b7c9ee6..19adc16b3 100644
--- a/packages/layout/src/DesignPlugins.vue
+++ b/packages/layout/src/DesignPlugins.vue
@@ -257,7 +257,7 @@ export default {
&.bottom {
flex: 1;
- padding-bottom: 20px;
+ padding-bottom: 28px;
}
.list-item {
diff --git a/packages/layout/src/DesignSettings.vue b/packages/layout/src/DesignSettings.vue
index c79bcaeda..7a5aada53 100644
--- a/packages/layout/src/DesignSettings.vue
+++ b/packages/layout/src/DesignSettings.vue
@@ -2,7 +2,7 @@
-
+
@@ -15,14 +15,15 @@
diff --git a/packages/plugins/datasource/src/DataSourceList.vue b/packages/plugins/datasource/src/DataSourceList.vue
index 566ea8154..bed1f7f52 100644
--- a/packages/plugins/datasource/src/DataSourceList.vue
+++ b/packages/plugins/datasource/src/DataSourceList.vue
@@ -8,12 +8,13 @@
>
-
+
{{ item.name }}
@@ -161,23 +163,14 @@ export default {
align-items: center;
}
.plugin-icon-data {
+ color: var(--te-common-icon-secondary);
margin-right: 8px;
- width: 18px;
}
}
.item-handler {
height: 24px;
line-height: 24px;
display: none;
- .svg-button {
- width: 16px;
- height: 16px;
- margin-top: 6px;
- color: var(--ti-lowcode-datasource-toolbar-more-hover-color);
- &:hover {
- color: var(--ti-lowcode-toolbar-icon-color);
- }
- }
}
}
}
diff --git a/packages/plugins/datasource/src/DataSourceRecordList.vue b/packages/plugins/datasource/src/DataSourceRecordList.vue
index 48008ea1f..a00c1b1b0 100644
--- a/packages/plugins/datasource/src/DataSourceRecordList.vue
+++ b/packages/plugins/datasource/src/DataSourceRecordList.vue
@@ -597,12 +597,14 @@ export default {
}
}
.download {
- margin: 0 12px;
- text-decoration: underline;
+ text-decoration: none;
display: inline-block;
font-size: 12px;
text-align: left;
padding: 0;
+ &:hover {
+ text-decoration: underline;
+ }
color: var(--te-common-text-primary);
.icon-download {
margin: 0 1px 4px 0;
@@ -633,6 +635,7 @@ export default {
align-items: center;
.svg-icon {
margin-right: 10px;
+ color: var(--te-common-icon-secondary);
}
}
}
diff --git a/packages/plugins/datasource/src/DataSourceRemoteAutoload.vue b/packages/plugins/datasource/src/DataSourceRemoteAutoload.vue
index 628b22f6f..e04c69d66 100644
--- a/packages/plugins/datasource/src/DataSourceRemoteAutoload.vue
+++ b/packages/plugins/datasource/src/DataSourceRemoteAutoload.vue
@@ -39,14 +39,12 @@ export default {
diff --git a/packages/plugins/datasource/src/DataSourceRemoteDataResult.vue b/packages/plugins/datasource/src/DataSourceRemoteDataResult.vue
index e15f0e9c0..c510c6e94 100644
--- a/packages/plugins/datasource/src/DataSourceRemoteDataResult.vue
+++ b/packages/plugins/datasource/src/DataSourceRemoteDataResult.vue
@@ -89,12 +89,11 @@ export default {
.response-data {
position: relative;
.resonse-header {
- padding: 10px;
- margin-bottom: 16px;
+ margin-bottom: 12px;
.life-cycle-alert {
- font-size: 11px;
- color: var(--ti-lowcode-datasource-tip-color);
+ font-size: var(--te-base-font-size-base);
+ color: var(--te-common-text-weaken);
}
.title {
color: var(--ti-lowcode-datasource-toolbar-breadcrumb-color);
@@ -116,7 +115,10 @@ export default {
z-index: 9999;
.tiny-button {
border-radius: 4px;
- border-color: var(--te-common-border-default);
+ border-color: var(--te-common-border-secondary);
+ & + .tiny-button {
+ margin-left: 4px;
+ }
}
}
diff --git a/packages/plugins/datasource/src/DataSourceRemoteForm.vue b/packages/plugins/datasource/src/DataSourceRemoteForm.vue
index fe2f01614..174d5fda5 100644
--- a/packages/plugins/datasource/src/DataSourceRemoteForm.vue
+++ b/packages/plugins/datasource/src/DataSourceRemoteForm.vue
@@ -113,7 +113,8 @@ export default {
}
:deep(.border-input) {
input {
- border-radius: 0;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
border-left: none;
}
}
diff --git a/packages/plugins/datasource/src/DataSourceRemotePanel.vue b/packages/plugins/datasource/src/DataSourceRemotePanel.vue
index 6d4d4f580..99a6f7fef 100644
--- a/packages/plugins/datasource/src/DataSourceRemotePanel.vue
+++ b/packages/plugins/datasource/src/DataSourceRemotePanel.vue
@@ -251,7 +251,6 @@ export default {
color: var(--ti-lowcode-datasource-toolbar-breadcrumb-color);
}
.send {
- margin-bottom: 14px;
}
.tip-dot {
padding-left: 4px;
@@ -271,16 +270,11 @@ export default {
:deep(.send-service) {
text-align: right;
border-top: 1px solid var(--ti-lowcode-datasource-tabs-border-color);
- padding: 20px 10px;
- margin-bottom: 10px;
+ padding: 12px 0px 0px;
.use-service {
text-align: left;
padding-top: 5px;
-
- div {
- margin-bottom: 5px;
- }
}
.title {
@@ -301,10 +295,28 @@ export default {
overflow-y: scroll;
:deep(.tiny-tabs.tiny-tabs--button-card .tiny-tabs__item) {
border-radius: 4px;
+ &:hover {
+ color: var(--te-common-text-primary);
+ }
}
:deep(.tiny-tabs__content) {
margin: 12px 0;
}
+ :deep(.is-active) {
+ .tiny-tabs__item__title {
+ color: var(--te-common-text-primary);
+ }
+ }
+ }
+ :deep(.tiny-collapse) {
+ .tiny-collapse-item:first-child {
+ border-top: 0;
+ }
+ .tiny-collapse-item__header {
+ .tiny-collapse-item__word-overflow {
+ margin: var(--te-common-vertical-item-spacing-normal) 0px 0;
+ }
+ }
}
}
}
diff --git a/packages/plugins/datasource/src/Main.vue b/packages/plugins/datasource/src/Main.vue
index 2f4771218..23e49fbcf 100644
--- a/packages/plugins/datasource/src/Main.vue
+++ b/packages/plugins/datasource/src/Main.vue
@@ -5,13 +5,13 @@
@@ -146,12 +146,6 @@ export default {
}
diff --git a/packages/plugins/materials/src/meta/block/src/BlockGroupFilters.vue b/packages/plugins/materials/src/meta/block/src/BlockGroupFilters.vue
index 58520ed59..db5706368 100644
--- a/packages/plugins/materials/src/meta/block/src/BlockGroupFilters.vue
+++ b/packages/plugins/materials/src/meta/block/src/BlockGroupFilters.vue
@@ -5,9 +5,9 @@
{
+ return props.filters.reduce(
(result, filter) => ({
...result,
[filter.id]: []
}),
{}
)
+ }
+
+ const state = reactive({
+ // filterValues 是一个对象。key 为 filter id,value 为选中的值,是一个数组
+ filterValues: initFilterValues()
})
// 不同的filter,值所在的字段可能是id或者name。这里把实际的值都映射到value字段
@@ -79,16 +83,14 @@ export default {
)
})
- const getFilters = (checked, id) => {
- filters[id] = checked
-
- emit('search', null, filters)
+ const handleValueChange = () => {
+ emit('search', state.filterValues)
}
return {
state,
selectOptions,
- getFilters
+ handleValueChange
}
}
}
diff --git a/packages/plugins/materials/src/meta/block/src/BlockGroupPanel.vue b/packages/plugins/materials/src/meta/block/src/BlockGroupPanel.vue
index 0869591a9..1a1380512 100644
--- a/packages/plugins/materials/src/meta/block/src/BlockGroupPanel.vue
+++ b/packages/plugins/materials/src/meta/block/src/BlockGroupPanel.vue
@@ -1,22 +1,20 @@
-
+
区块列表
-
-
+
+
@@ -29,7 +27,7 @@
diff --git a/packages/settings/events/src/components/BindEvents.vue b/packages/settings/events/src/components/BindEvents.vue
index 181d9fddc..335c046aa 100644
--- a/packages/settings/events/src/components/BindEvents.vue
+++ b/packages/settings/events/src/components/BindEvents.vue
@@ -358,7 +358,6 @@ export default {
}
}
.bind-event-list {
- padding: var(--te-common-vertical-item-spacing-normal) 0;
color: var(--ti-lowcode-events-bind-event-list-color);
}
.bind-event-list-item-notallow {
@@ -367,7 +366,8 @@ export default {
color: var(--ti-lowcode-events-bind-event-list-item-disabled-color);
}
.bind-event-list-item {
- padding: 0 12px;
+ padding: 0 16px;
+ margin: 0 -16px;
line-height: 24px;
&:hover {
cursor: pointer;
diff --git a/packages/settings/panel/package.json b/packages/settings/panel/package.json
index 8f9ca1fe3..9a43bb763 100644
--- a/packages/settings/panel/package.json
+++ b/packages/settings/panel/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-settings-panel",
- "version": "2.0.0",
+ "version": "2.1.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/settings/props/package.json b/packages/settings/props/package.json
index eb3c79695..8d541130a 100644
--- a/packages/settings/props/package.json
+++ b/packages/settings/props/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-setting-props",
- "version": "2.0.0",
+ "version": "2.1.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/settings/props/src/composable/useProperty.js b/packages/settings/props/src/composable/useProperty.js
index 81ffe30f1..3beba42a9 100644
--- a/packages/settings/props/src/composable/useProperty.js
+++ b/packages/settings/props/src/composable/useProperty.js
@@ -11,7 +11,6 @@
*/
import { computed } from 'vue'
-import { extend } from '@opentiny/vue-renderless/common/object'
import { constants } from '@opentiny/tiny-engine-utils'
import { useBlock } from '@opentiny/tiny-engine-meta-register'
@@ -26,7 +25,7 @@ const addPropertyLinks = ({ linked, propertyName, componentProperties }) => {
const property = propertyList[j]
if (property.property === propertyName) {
- propertyList[j] = extend(true, {}, property, {
+ Object.assign(property, {
linked,
widget: {
props: {
diff --git a/packages/settings/styles/package.json b/packages/settings/styles/package.json
index a34515bb5..f8bd1a6ae 100644
--- a/packages/settings/styles/package.json
+++ b/packages/settings/styles/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-setting-styles",
- "version": "2.0.0",
+ "version": "2.1.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/settings/styles/src/Main.vue b/packages/settings/styles/src/Main.vue
index 84e70f440..3fec47982 100644
--- a/packages/settings/styles/src/Main.vue
+++ b/packages/settings/styles/src/Main.vue
@@ -67,7 +67,7 @@
+