diff --git a/web/apps/web-ele/src/adapter/component/index.ts b/web/apps/web-ele/src/adapter/component/index.ts
index e274034..1146431 100644
--- a/web/apps/web-ele/src/adapter/component/index.ts
+++ b/web/apps/web-ele/src/adapter/component/index.ts
@@ -100,6 +100,11 @@ const RoleSelector = defineAsyncComponent(() =>
(res) => res.default,
),
);
+const DeptSelector = defineAsyncComponent(() =>
+ import('#/components/zq-form/dept-selector/dept-selector.vue').then(
+ (res) => res.default,
+ ),
+);
const FileSelector = defineAsyncComponent(() =>
import('#/components/zq-form/file-selector/file-selector.vue').then(
(res) => res.default,
@@ -115,6 +120,11 @@ const UserSelector = defineAsyncComponent(() =>
(res) => res.default,
),
);
+const PostSelector = defineAsyncComponent(() =>
+ import('#/components/zq-form/post-selector/post-selector.vue').then(
+ (res) => res.default,
+ ),
+);
const ZqIconPicker = defineAsyncComponent(() =>
import('#/components/zq-form/zq-icon-picker/zq-icon-picker.vue').then(
(res) => res.default,
@@ -166,12 +176,14 @@ export type ComponentType =
| 'CheckboxGroup'
| 'CodeEditor'
| 'DatePicker'
+ | 'DeptSelector'
| 'Divider'
| 'FileSelector'
| 'IconPicker'
| 'ImageSelector'
| 'Input'
| 'InputNumber'
+ | 'PostSelector'
| 'RadioGroup'
| 'RoleSelector'
| 'Select'
@@ -249,6 +261,7 @@ function initComponentAdapter() {
PrimaryButton: (props, { attrs, slots }) => {
return h(ElButton, { ...props, attrs, type: 'primary' }, slots);
},
+ DeptSelector: withDefaultPlaceholder(DeptSelector, 'select'),
RoleSelector: withDefaultPlaceholder(RoleSelector, 'select'),
Divider: ElDivider,
FileSelector: withDefaultPlaceholder(FileSelector, 'select'),
@@ -261,6 +274,7 @@ function initComponentAdapter() {
type: 'textarea',
}),
InputNumber: withDefaultPlaceholder(ElInputNumber, 'input'),
+ PostSelector: withDefaultPlaceholder(PostSelector, 'select'),
RadioGroup: (props, { attrs, slots }) => {
let defaultSlot;
if (Reflect.has(slots, 'default')) {
diff --git a/web/apps/web-ele/src/components/zq-form/rich-text-editor/index.ts b/web/apps/web-ele/src/components/zq-form/rich-text-editor/index.ts
new file mode 100644
index 0000000..f5ccaab
--- /dev/null
+++ b/web/apps/web-ele/src/components/zq-form/rich-text-editor/index.ts
@@ -0,0 +1 @@
+export { default as RichTextEditor } from './rich-text-editor.vue';
diff --git a/web/apps/web-ele/src/components/zq-form/rich-text-editor/rich-text-editor.vue b/web/apps/web-ele/src/components/zq-form/rich-text-editor/rich-text-editor.vue
new file mode 100644
index 0000000..cc0d070
--- /dev/null
+++ b/web/apps/web-ele/src/components/zq-form/rich-text-editor/rich-text-editor.vue
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 插入链接
+
+
+
+
+
+
+
+
+
+ 插入图片
+
+
+
+
+
+
+
+
+
+ 行
+
+
+ 列
+
+ 插入表格
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/apps/web-ele/src/views/_core/announcement/index.vue b/web/apps/web-ele/src/views/_core/announcement/index.vue
index b8b386f..b20d3e3 100644
--- a/web/apps/web-ele/src/views/_core/announcement/index.vue
+++ b/web/apps/web-ele/src/views/_core/announcement/index.vue
@@ -60,6 +60,7 @@ import {
import { FuPage } from '#/components/fu-page';
import { UserAvatar } from '#/components/user-avatar';
import { ZqDrawer } from '#/components/zq-drawer';
+import { RichTextEditor } from '#/components/zq-form/rich-text-editor';
defineOptions({ name: 'AnnouncementManager' });
@@ -810,13 +811,12 @@ onBeforeUnmount(() => {
prop="content"
required
>
-
diff --git a/web/apps/web-ele/src/views/_core/user/data.ts b/web/apps/web-ele/src/views/_core/user/data.ts
index a1c2891..29357df 100644
--- a/web/apps/web-ele/src/views/_core/user/data.ts
+++ b/web/apps/web-ele/src/views/_core/user/data.ts
@@ -191,6 +191,14 @@ export function getFormSchema(): VbenFormSchema[] {
fieldName: 'bio',
label: $t('user.bio'),
},
+ {
+ component: 'DeptSelector',
+ componentProps: {
+ placeholder: $t('user.selectDept'),
+ },
+ fieldName: 'dept_id',
+ label: $t('user.dept'),
+ },
{
component: 'UserSelector',
componentProps: {
@@ -199,6 +207,14 @@ export function getFormSchema(): VbenFormSchema[] {
fieldName: 'manager_id',
label: $t('user.manager'),
},
+ {
+ component: 'PostSelector',
+ componentProps: {
+ placeholder: $t('user.selectPost'),
+ },
+ fieldName: 'post_id',
+ label: $t('user.post'),
+ },
{
component: 'RoleSelector',
componentProps: {
@@ -295,6 +311,12 @@ export function useZqTableColumns(): Column[] {
title: $t('user.city'),
width: 120,
},
+ {
+ key: 'dept_name',
+ dataKey: 'dept_name',
+ title: $t('user.dept'),
+ width: 140,
+ },
{
key: 'manager_name',
dataKey: 'manager_name',