From 3383183e3b7ee12f0bcef920288b8a819f018e3e Mon Sep 17 00:00:00 2001
From: JiangQiming <291854119@qq.com>
Date: Sat, 28 Jan 2023 16:06:33 +0800
Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E9=80=9A=E7=9F=A5=E6=A8=A1?=
=?UTF-8?q?=E6=9D=BF,=E6=96=B0=E5=A2=9E=E5=8F=98=E9=87=8F=E5=88=97?=
=?UTF-8?q?=E8=A1=A8=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/AIcon/index.tsx | 3 +-
.../Detail/components/VariableDefinitions.vue | 138 ++++++++++++++++++
src/views/notice/Template/Detail/index.vue | 60 +++++++-
3 files changed, 198 insertions(+), 3 deletions(-)
create mode 100644 src/views/notice/Template/Detail/components/VariableDefinitions.vue
diff --git a/src/components/AIcon/index.tsx b/src/components/AIcon/index.tsx
index 02e6d8a2..604aa3fe 100644
--- a/src/components/AIcon/index.tsx
+++ b/src/components/AIcon/index.tsx
@@ -26,7 +26,8 @@ const iconKeys = [
'ExportOutlined',
'SyncOutlined',
'ExclamationCircleOutlined',
- 'UploadOutlined'
+ 'UploadOutlined',
+ 'QuestionCircleOutlined'
]
const Icon = (props: {type: string}) => {
diff --git a/src/views/notice/Template/Detail/components/VariableDefinitions.vue b/src/views/notice/Template/Detail/components/VariableDefinitions.vue
new file mode 100644
index 00000000..249fe830
--- /dev/null
+++ b/src/views/notice/Template/Detail/components/VariableDefinitions.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+ {{ record[column.dataIndex] }}
+
+
+
+ 字符串
+ 时间
+ 数字
+
+
+
+ {{ record.format }}
+
+
+
+ timestamp
+
+
+ yyyy-MM-dd
+
+
+ yyyy-MM-dd HH:mm:ss
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/notice/Template/Detail/index.vue b/src/views/notice/Template/Detail/index.vue
index 9699ee50..610ad87d 100644
--- a/src/views/notice/Template/Detail/index.vue
+++ b/src/views/notice/Template/Detail/index.vue
@@ -418,6 +418,34 @@
+
+
+
+
+
+
formData.value.template.message,
+ (val) => {
+ if (!val) return;
+ // 已经存在的变量
+ const oldKey = formData.value.variableDefinitions?.map((m) => m.id);
+ // 正则提取${}里面的值
+ const pattern = /(?<=\$\{).*?(?=\})/g;
+ const titleList = val.match(pattern)?.filter((f) => f);
+ const newKey = [...new Set(titleList)];
+ const result = newKey?.map((m) =>
+ oldKey.includes(m)
+ ? formData.value.variableDefinitions.find(
+ (item) => item.id === m,
+ )
+ : {
+ id: m,
+ name: '',
+ type: 'string',
+ format: '%s',
+ },
+ );
+ formData.value.variableDefinitions = result;
+ },
+ { deep: true },
+);
+
const getDetail = async () => {
const res = await templateApi.detail(route.params.id as string);
// console.log('res: ', res);
@@ -589,9 +645,9 @@ const handleSubmit = () => {
// test
watch(
- () => formData.value.template,
+ () => formData.value,
(val) => {
- console.log('formData.value.template: ', val);
+ console.log('formData.value: ', val);
},
{ deep: true },
);
From b45f6f087aa65794215407ea77aa68d5850ae3b5 Mon Sep 17 00:00:00 2001
From: JiangQiming <291854119@qq.com>
Date: Sat, 28 Jan 2023 16:25:31 +0800
Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=8F=98=E9=87=8F?=
=?UTF-8?q?=E5=88=97=E8=A1=A8=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../notice/Template/Detail/components/VariableDefinitions.vue | 4 +---
src/views/notice/Template/Detail/index.vue | 3 ++-
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/src/views/notice/Template/Detail/components/VariableDefinitions.vue b/src/views/notice/Template/Detail/components/VariableDefinitions.vue
index 249fe830..f167289c 100644
--- a/src/views/notice/Template/Detail/components/VariableDefinitions.vue
+++ b/src/views/notice/Template/Detail/components/VariableDefinitions.vue
@@ -113,14 +113,12 @@ const dataSource = computed({
watch(
() => dataSource.value,
(val) => {
- console.log('dataSource.value : ', val);
- emit('update:variableDefinitions', val)
+ emit('update:variableDefinitions', val);
},
{ deep: true },
);
const handleTypeChange = (record: IVariable) => {
- console.log('record.type: ', record.type);
switch (record.type) {
case 'string':
record.format = '%s';
diff --git a/src/views/notice/Template/Detail/index.vue b/src/views/notice/Template/Detail/index.vue
index 610ad87d..74c9f554 100644
--- a/src/views/notice/Template/Detail/index.vue
+++ b/src/views/notice/Template/Detail/index.vue
@@ -534,7 +534,7 @@ watch(
);
computed(() => {
- console.log('formData.value.type: ', formData.value.type);
+ // console.log('formData.value.type: ', formData.value.type);
Object.assign(
formData.value.template,
TEMPLATE_FIELD_MAP[formData.value.type][formData.value.provider],
@@ -576,6 +576,7 @@ const { resetFields, validate, validateInfos, clearValidate } = useForm(
watch(
() => formData.value.type,
() => {
+ formData.value.variableDefinitions = []
clearValidate();
},
{ deep: true },
From 6b5bd5ee257fc92103cff27638390a15aef31149 Mon Sep 17 00:00:00 2001
From: JiangQiming <291854119@qq.com>
Date: Sat, 28 Jan 2023 17:12:58 +0800
Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E9=80=9A=E7=9F=A5=E6=A8=A1?=
=?UTF-8?q?=E6=9D=BF=E6=8E=A5=E5=8F=A3=E8=81=94=E8=B0=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/notice/config.ts | 3 +
src/components/RadioCard/index.vue | 6 +-
src/views/notice/Template/Detail/index.vue | 65 +++++++++++++---------
src/views/notice/Template/types.d.ts | 22 +++++++-
4 files changed, 69 insertions(+), 27 deletions(-)
diff --git a/src/api/notice/config.ts b/src/api/notice/config.ts
index 9ed55cf8..ff653f67 100644
--- a/src/api/notice/config.ts
+++ b/src/api/notice/config.ts
@@ -1,8 +1,11 @@
import { patch, post, get } from '@/utils/request'
+import { BindConfig } from '@/views/notice/Template/types'
export default {
// 列表
list: (data: any) => post(`/notifier/config/_query`, data),
+ // 不分页列表
+ listNoPage: (data: any) => post(`/notifier/config/_query/no-paging?paging=false`, data),
// 详情
detail: (id: string): any => get(`/notifier/config/${id}`),
// 新增
diff --git a/src/components/RadioCard/index.vue b/src/components/RadioCard/index.vue
index 2d27ba0b..152ae840 100644
--- a/src/components/RadioCard/index.vue
+++ b/src/components/RadioCard/index.vue
@@ -25,6 +25,7 @@ interface IOption {
type Emits = {
(e: 'update:modelValue', data: string): void;
+ (e: 'change') :void
};
const emit = defineEmits();
@@ -41,7 +42,10 @@ const props = defineProps({
const myValue = computed({
get: () => props.modelValue,
- set: (val) => emit('update:modelValue', val),
+ set: (val) => {
+ emit('update:modelValue', val)
+ emit('change')
+ },
});
diff --git a/src/views/notice/Template/Detail/index.vue b/src/views/notice/Template/Detail/index.vue
index 74c9f554..507b3b54 100644
--- a/src/views/notice/Template/Detail/index.vue
+++ b/src/views/notice/Template/Detail/index.vue
@@ -39,6 +39,7 @@
- {{ item.label }}
+ {{ item.name }}
@@ -246,17 +247,11 @@
-
- {{ item.label }}
-
-
+ />
formData.value.type,
() => {
- formData.value.variableDefinitions = []
+ formData.value.variableDefinitions = [];
clearValidate();
},
{ deep: true },
@@ -609,6 +607,9 @@ watch(
{ deep: true },
);
+/**
+ * 获取详情
+ */
const getDetail = async () => {
const res = await templateApi.detail(route.params.id as string);
// console.log('res: ', res);
@@ -617,6 +618,20 @@ const getDetail = async () => {
};
// getDetail();
+/**
+ * 获取绑定配置
+ */
+const configList = ref();
+const getConfigList = async () => {
+ const terms = [
+ { column: 'type$IN', value: formData.value.type },
+ { column: 'provider', value: formData.value.provider },
+ ];
+ const { result } = await configApi.listNoPage({ terms });
+ configList.value = result;
+};
+getConfigList();
+
/**
* 表单提交
*/
@@ -626,17 +641,17 @@ const handleSubmit = () => {
.then(async () => {
console.log('formData.value: ', formData.value);
btnLoading.value = true;
- // let res;
- // if (!formData.value.id) {
- // res = await templateApi.save(formData.value);
- // } else {
- // res = await templateApi.update(formData.value);
- // }
- // // console.log('res: ', res);
- // if (res?.success) {
- // message.success('保存成功');
- // router.back();
- // }
+ let res;
+ if (!formData.value.id) {
+ res = await templateApi.save(formData.value);
+ } else {
+ res = await templateApi.update(formData.value);
+ }
+ // console.log('res: ', res);
+ if (res?.success) {
+ message.success('保存成功');
+ router.back();
+ }
btnLoading.value = false;
})
.catch((err) => {
diff --git a/src/views/notice/Template/types.d.ts b/src/views/notice/Template/types.d.ts
index 7eaa8850..b48cd773 100644
--- a/src/views/notice/Template/types.d.ts
+++ b/src/views/notice/Template/types.d.ts
@@ -71,4 +71,24 @@ export type TemplateFormData = {
creatorId?: string;
createTime?: number;
configId?: string;
-};
\ No newline at end of file
+};
+
+// 绑定配置类型
+export type config = {
+ host: string;
+ password: string;
+ port: number;
+ sender: string;
+ ssl: boolean;
+ username: string;
+}
+export type BindConfig = {
+ configuration: config;
+ createTime: number
+ creatorId: string;
+ id: string;
+ maxRetryTimes: number;
+ name: string;
+ provider: string;
+ type: string
+}
\ No newline at end of file
From 841fa8433a65db7505b8253654fc1b7ee226c8df Mon Sep 17 00:00:00 2001
From: JiangQiming <291854119@qq.com>
Date: Sat, 28 Jan 2023 17:51:10 +0800
Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E9=80=9A=E7=9F=A5=E7=AE=A1?=
=?UTF-8?q?=E7=90=86=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/notice/config.ts | 32 ++++++++++++++++++----
src/api/notice/template.ts | 19 +++++++++++--
src/views/notice/Template/Detail/index.vue | 6 ++--
src/views/notice/Template/types.d.ts | 23 +++++++++-------
4 files changed, 59 insertions(+), 21 deletions(-)
diff --git a/src/api/notice/config.ts b/src/api/notice/config.ts
index ff653f67..d6e29cc5 100644
--- a/src/api/notice/config.ts
+++ b/src/api/notice/config.ts
@@ -1,15 +1,37 @@
-import { patch, post, get } from '@/utils/request'
-import { BindConfig } from '@/views/notice/Template/types'
+import { patch, post, get, remove } from '@/utils/request'
export default {
// 列表
list: (data: any) => post(`/notifier/config/_query`, data),
- // 不分页列表
- listNoPage: (data: any) => post(`/notifier/config/_query/no-paging?paging=false`, data),
// 详情
detail: (id: string): any => get(`/notifier/config/${id}`),
// 新增
save: (data: any) => post(`/notifier/config`, data),
// 修改
- update: (data: any) => patch(`/notifier/config`, data)
+ update: (data: any) => patch(`/notifier/config`, data),
+ del: (id: string) => remove(`/notifier/config/${id}`),
+ getTemplate: (data: any, id: string) => post(`/notifier/template/${id}/_query`, data),
+ getTemplateDetail: (id: string) => get(`/notifier/template/${id}/detail`),
+ debug: (data: any, configId: string, templateId: string) => post(`/notifier/${configId}/${templateId}/_send`, data),
+ getHistory: (data: any, id: string) => post(`/notify/history/config/${id}/_query`, data),
+ // 获取所有平台用户
+ getPlatformUsers: () => post(`/user/_query/no-paging`, { paging: false }),
+ // 钉钉部门
+ dingTalkDept: (id: string) => get(`/notifier/dingtalk/corp/${id}/departments/tree`),
+ // 钉钉部门人员
+ getDingTalkUsers: (configId: string, deptId: string) => get(`/notifier/dingtalk/corp/${configId}/${deptId}/users`),
+ // 钉钉已经绑定的人员
+ getDingTalkBindUsers: (id: string) => get(`/user/third-party/dingTalk_dingTalkMessage/${id}`),
+ // 钉钉绑定用户
+ dingTalkBindUser: (data: any, id: string) => patch(`/user/third-party/dingTalk_dingTalkMessage/${id}`, data),
+ // 微信部门
+ weChatDept: (id: string) => get(`/notifier/wechat/corp/${id}/departments`),
+ // 微信部门人员
+ getWeChatUsers: (configId: string, deptId: string) => get(`/notifier/wechat/corp/${configId}/${deptId}/users`),
+ // 微信已经绑定的人员
+ getWeChatBindUsers: (id: string) => get(`/user/third-party/weixin_corpMessage/${id}`),
+ // 微信绑定用户
+ weChatBindUser: (data: any, id: string) => patch(`/user/third-party/weixin_corpMessage/${id}`, data),
+ // 解绑
+ unBindUser: (data: any, id: string) => post(`/user/third-party/${id}/_unbind`, data)
}
\ No newline at end of file
diff --git a/src/api/notice/template.ts b/src/api/notice/template.ts
index b49dbd8b..7281501f 100644
--- a/src/api/notice/template.ts
+++ b/src/api/notice/template.ts
@@ -1,4 +1,5 @@
-import { patch, post, get } from '@/utils/request'
+import { patch, post, get, remove } from '@/utils/request'
+import { BindConfig } from '@/views/notice/Template/types'
export default {
// 列表
@@ -8,5 +9,19 @@ export default {
// 新增
save: (data: any) => post(`/notifier/template`, data),
// 修改
- update: (data: any) => patch(`/notifier/template`, data)
+ update: (data: any) => patch(`/notifier/template`, data),
+ del: (id: any) => remove(`/notifier/template/${id}`),
+ getConfig: (data: any) => post(`/notifier/config/_query/no-paging?paging=false`, data),
+ getTemplateDetail: (id: string) => get(`/notifier/template/${id}/detail`),
+ debug: (data: any, configId: string, templateId: string) => post(`/notifier/${configId}/${templateId}/_send`, data),
+ getHistory: (data: any, id: string) => post(`/notify/history/template/${id}/_query`, data),
+ // 钉钉/微信, 根据配置获取部门和用户
+ getDept: (type: string, id: string) => get(`/notifier/${type}/corp/${id}/departments`),
+ getUser: (type: string, id: string) => get(`/notifier/${type}/corp/${id}/users`),
+ // 微信获取标签推送
+ getTags: (id: string) => get(`/notifier/wechat/corp/${id}/tags`),
+ // 语音/短信获取阿里云模板
+ getAliTemplate: (id: string) => get(`/notifier/sms/aliyun/${id}/templates`),
+ // 短信获取签名
+ getSigns: (id: string) => get(`/notifier/sms/aliyun/${id}/signs`)
}
\ No newline at end of file
diff --git a/src/views/notice/Template/Detail/index.vue b/src/views/notice/Template/Detail/index.vue
index 507b3b54..f32d3ed2 100644
--- a/src/views/notice/Template/Detail/index.vue
+++ b/src/views/notice/Template/Detail/index.vue
@@ -121,8 +121,7 @@
>
@@ -483,7 +482,6 @@ import {
VOICE_TYPE,
} from '@/views/notice/const';
import templateApi from '@/api/notice/template';
-import configApi from '@/api/notice/config';
import Doc from './doc/index';
import MonacoEditor from '@/components/MonacoEditor/index.vue';
import Attachments from './components/Attachments.vue';
@@ -627,7 +625,7 @@ const getConfigList = async () => {
{ column: 'type$IN', value: formData.value.type },
{ column: 'provider', value: formData.value.provider },
];
- const { result } = await configApi.listNoPage({ terms });
+ const { result } = await templateApi.getConfig({ terms });
configList.value = result;
};
getConfigList();
diff --git a/src/views/notice/Template/types.d.ts b/src/views/notice/Template/types.d.ts
index b48cd773..160924a2 100644
--- a/src/views/notice/Template/types.d.ts
+++ b/src/views/notice/Template/types.d.ts
@@ -16,6 +16,17 @@ interface IVariableDefinitions {
format: string;
}
+interface IMarkDown {
+ text: string;
+ title: string;
+}
+interface ILink {
+ title: string;
+ picUrl: string;
+ messageUrl: string;
+ text: string;
+}
+
export type TemplateFormData = {
template: {
// 钉钉消息
@@ -23,16 +34,8 @@ export type TemplateFormData = {
message?: string;
// 钉钉机器人
messageType?: string;
- markdown?: {
- text: string;
- title: string;
- };
- link?: {
- title: string;
- picUrl: string;
- messageUrl: string;
- text: string;
- };
+ markdown?: IMarkDown;
+ link?: ILink;
// 微信
// agentId?: string;
// message?: string;
From 9f87a92f0aeed0830282bfc0be1932720a71fd7d Mon Sep 17 00:00:00 2001
From: JiangQiming <291854119@qq.com>
Date: Sat, 28 Jan 2023 18:04:49 +0800
Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/notice/Template/Detail/index.vue | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/views/notice/Template/Detail/index.vue b/src/views/notice/Template/Detail/index.vue
index f32d3ed2..4db6e5ec 100644
--- a/src/views/notice/Template/Detail/index.vue
+++ b/src/views/notice/Template/Detail/index.vue
@@ -637,7 +637,7 @@ const btnLoading = ref(false);
const handleSubmit = () => {
validate()
.then(async () => {
- console.log('formData.value: ', formData.value);
+ // console.log('formData.value: ', formData.value);
btnLoading.value = true;
let res;
if (!formData.value.id) {
@@ -650,10 +650,10 @@ const handleSubmit = () => {
message.success('保存成功');
router.back();
}
- btnLoading.value = false;
})
.catch((err) => {
console.log('err: ', err);
+ btnLoading.value = false;
});
};