From b11aa3309fec378e2b1bc573cdb5ceeb59f9fd20 Mon Sep 17 00:00:00 2001
From: zhujiamin <1147570162@qq.com>
Date: Thu, 25 May 2023 18:45:00 +0800
Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E5=90=84?=
=?UTF-8?q?=E7=B1=BB=E7=BC=96=E8=BE=91=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/common/app-rawitem/app-rawitem.tsx | 13 +-
src/common/index.ts | 6 +-
src/common/rawitem/rawitem.tsx | 181 ++++++++++++++++++
.../autocomplete-editor.controller.ts | 92 ++++++---
.../ibiz-autocomplete/ibiz-autocomplete.tsx | 91 +++++----
.../ibiz-picker-dropdown.tsx | 23 ++-
.../ibiz-picker-select-view.tsx | 21 +-
.../data-picker/ibiz-picker/ibiz-picker.tsx | 23 ++-
.../data-picker/picker-editor.controller.ts | 94 ++++++---
.../date-range-editor.controller.ts | 53 +++++
.../date-range/date-range-editor.provider.ts | 28 +++
.../ibiz-date-range-picker.scss | 5 +
.../ibiz-date-range-picker.tsx | 149 ++++++++++++++
src/editor/date-range/index.ts | 3 +
src/editor/index.ts | 18 ++
.../list-box-picker-editor.controller.ts | 54 +++---
.../ibiz-number-range-picker.scss | 8 +
.../ibiz-number-range-picker.tsx | 151 +++++++++++++++
src/editor/number-range/index.ts | 3 +
.../number-range-editor.controller.ts | 11 ++
.../number-range-editor.provider.ts | 28 +++
src/editor/raw/ibiz-raw/ibiz-raw.tsx | 4 +-
src/editor/span/span-editor.controller.ts | 17 +-
.../stepper/stepper-editor.controller.ts | 10 +-
src/editor/upload/upload-editor.controller.ts | 26 ++-
25 files changed, 931 insertions(+), 181 deletions(-)
create mode 100644 src/common/rawitem/rawitem.tsx
create mode 100644 src/editor/date-range/date-range-editor.controller.ts
create mode 100644 src/editor/date-range/date-range-editor.provider.ts
create mode 100644 src/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.scss
create mode 100644 src/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.tsx
create mode 100644 src/editor/date-range/index.ts
create mode 100644 src/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.scss
create mode 100644 src/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.tsx
create mode 100644 src/editor/number-range/index.ts
create mode 100644 src/editor/number-range/number-range-editor.controller.ts
create mode 100644 src/editor/number-range/number-range-editor.provider.ts
diff --git a/src/common/app-rawitem/app-rawitem.tsx b/src/common/app-rawitem/app-rawitem.tsx
index 356ce3076..f7e311dd7 100644
--- a/src/common/app-rawitem/app-rawitem.tsx
+++ b/src/common/app-rawitem/app-rawitem.tsx
@@ -57,18 +57,7 @@ export const AppRawItem = defineComponent({
].includes(props.type)
) {
if (props.content && typeof props.content === 'string') {
- const items = props.content.match(/\{{(.+?)\}}/g);
- if (items) {
- items.forEach((item: string) => {
- rawItemText.value = (props.content as string).replace(
- /\{{(.+?)\}}/,
- // eslint-disable-next-line no-eval
- eval(item.substring(2, item.length - 2)),
- );
- });
- } else {
- rawItemText.value = props.content;
- }
+ rawItemText.value = props.content;
rawItemText.value = rawItemText.value.replaceAll('<', '<');
rawItemText.value = rawItemText.value.replaceAll('>', '>');
rawItemText.value = rawItemText.value.replaceAll(' ', ' ');
diff --git a/src/common/index.ts b/src/common/index.ts
index 27256c728..f46693211 100644
--- a/src/common/index.ts
+++ b/src/common/index.ts
@@ -8,7 +8,7 @@ import { IBizRow } from './row/row';
import { IBizControlBase } from './control-base/control-base';
import { IBizControlShell } from './control-shell/control-shell';
import { IBizViewShell } from './view-shell/view-shell';
-import { AppRawItem } from './app-rawitem/app-rawitem';
+import { IBizRawItem } from './rawitem/rawitem';
export * from './icon/icon';
export * from './keep-alive/keep-alive';
@@ -19,7 +19,7 @@ export * from './action-toolbar/action-toolbar';
export * from './control-base/control-base';
export * from './control-shell/control-shell';
export * from './view-shell/view-shell';
-export * from './app-rawitem/app-rawitem';
+export * from './rawitem/rawitem';
export const IBizCommonComponents = {
install: (v: App) => {
@@ -32,7 +32,7 @@ export const IBizCommonComponents = {
v.component(IBizActionToolbar.name, IBizActionToolbar);
v.component(IBizViewShell.name, IBizViewShell);
v.component(IBizControlShell.name, IBizControlShell);
- v.component(AppRawItem.name, AppRawItem);
+ v.component(IBizRawItem.name, IBizRawItem);
},
};
diff --git a/src/common/rawitem/rawitem.tsx b/src/common/rawitem/rawitem.tsx
new file mode 100644
index 000000000..235d05043
--- /dev/null
+++ b/src/common/rawitem/rawitem.tsx
@@ -0,0 +1,181 @@
+import { useNamespace } from '@ibiz-template/vue3-util';
+import { defineComponent, ref } from 'vue';
+import { createUUID } from 'qx-util';
+
+export const IBizRawItem = defineComponent({
+ name: 'IBizRawItem',
+ props: {
+ type: {
+ type: String,
+ required: true,
+ },
+ content: {
+ type: [String, Object],
+ },
+ },
+ setup(props) {
+ const ns = useNamespace('rawitem');
+
+ // 视频类型内容参数
+ const playerParams = ref({
+ id: createUUID(),
+ path: '',
+ mute: true,
+ autoplay: true,
+ replay: false,
+ showcontrols: true,
+ });
+
+ // 分割线类型参数
+ const dividerParams = ref({
+ contentPosition: 'center',
+ html: '',
+ });
+
+ // 类型参数
+ const alertParams = ref({
+ type: 'info',
+ title: '',
+ closeabled: true,
+ showIcon: false,
+ });
+
+ // 文本类型显示值
+ const rawItemText = ref('');
+
+ if (
+ [
+ 'TEXT',
+ 'HEADING1',
+ 'HEADING2',
+ 'HEADING3',
+ 'HEADING4',
+ 'HEADING5',
+ 'HEADING6',
+ 'PARAGRAPH',
+ 'HTML',
+ ].includes(props.type)
+ ) {
+ if (props.content && typeof props.content === 'string') {
+ rawItemText.value = props.content;
+ rawItemText.value = rawItemText.value.replaceAll('<', '<');
+ rawItemText.value = rawItemText.value.replaceAll('>', '>');
+ rawItemText.value = rawItemText.value.replaceAll(' ', ' ');
+ rawItemText.value = rawItemText.value.replaceAll(' ', ' ');
+ }
+ }
+
+ if (['VIDEO', 'DIVIDER', 'INFO', 'WARNING', 'ERROR'].includes(props.type)) {
+ if (props.content) {
+ let rawConfig = {};
+ try {
+ if (typeof props.content === 'string') {
+ // eslint-disable-next-line no-new-func
+ const func = new Function(`return (${props.content});`);
+ rawConfig = func();
+ switch (props.type) {
+ case 'VIDEO':
+ Object.assign(playerParams.value, rawConfig);
+ break;
+ case 'DIVIDER':
+ Object.assign(dividerParams.value, rawConfig);
+ break;
+ case 'INFO':
+ case 'WARNING':
+ case 'ERROR':
+ alertParams.value.type = props.type.toLocaleLowerCase();
+ Object.assign(alertParams.value, rawConfig);
+ break;
+ default:
+ break;
+ }
+ }
+ } catch {
+ ibiz.log.error(`${props.type}类型自定义参数配置错误`);
+ }
+ }
+ }
+
+ return { ns, rawItemText, playerParams, dividerParams, alertParams };
+ },
+ render() {
+ if (this.type === 'IMAGE') {
+ return (
+
{this.rawItemText}
; + } + if (this.type === 'HTML') { + return ( + + ); + } + if (this.type === 'VIDEO') { + return ( +{this.rawItemText}
; - } - if (this.type === 'HTML') { - return ( - - ); - } - if (this.type === 'VIDEO') { - return ( -