diff --git a/src/views/system/notice/DetailModal.vue b/src/views/system/notice/DetailModal.vue
new file mode 100644
index 0000000..16eafcf
--- /dev/null
+++ b/src/views/system/notice/DetailModal.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/system/notice/NoticeModal.vue b/src/views/system/notice/NoticeModal.vue
new file mode 100644
index 0000000..6c09d89
--- /dev/null
+++ b/src/views/system/notice/NoticeModal.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue
new file mode 100644
index 0000000..17f5314
--- /dev/null
+++ b/src/views/system/notice/index.vue
@@ -0,0 +1,143 @@
+
+
+
+
diff --git a/src/views/system/notice/notice.api.ts b/src/views/system/notice/notice.api.ts
new file mode 100644
index 0000000..040d44a
--- /dev/null
+++ b/src/views/system/notice/notice.api.ts
@@ -0,0 +1,89 @@
+import { defHttp } from '/@/utils/http/axios';
+import { useMessage } from '/@/hooks/web/useMessage';
+const { createConfirm } = useMessage();
+enum Api {
+ list = '/sys/annountCement/list',
+ save = '/sys/annountCement/add',
+ edit = '/sys/annountCement/edit',
+ delete = '/sys/annountCement/delete',
+ deleteBatch = '/sys/annountCement/deleteBatch',
+ exportXls = '/sys/annountCement/exportXls',
+ importExcel = '/sys/annountCement/importExcel',
+ releaseData = '/sys/annountCement/doReleaseData',
+ reovkeData = '/sys/annountCement/doReovkeData',
+ publishData = '/sys/annountCement/publishData',
+ queryById = '/sys/annountCement/queryById',
+}
+
+/**
+ * 导出url
+ */
+export const getExportUrl = Api.exportXls;
+/**
+ * 导入url
+ */
+export const getImportUrl = Api.importExcel;
+/**
+ * 查询租户列表
+ * @param params
+ */
+export const getList = (params) => {
+ return defHttp.get({ url: Api.list, params });
+};
+
+/**
+ * 请求编辑数据
+ */
+export const resEditData = async (params, handleSuccess) => {
+ return await defHttp.get({ url: Api.queryById, params });
+};
+
+/**
+ * 保存或者更新通告
+ * @param params
+ */
+export const saveOrUpdate = (params, isUpdate) => {
+ let url = isUpdate ? Api.edit : Api.save;
+ return defHttp.post({ url: url, params });
+};
+
+/**
+ * 删除通告
+ * @param params
+ */
+export const deleteNotice = (params, handleSuccess) => {
+ return defHttp.delete({ url: Api.delete, data: params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+
+// /**
+// * 批量消息公告
+// * @param params
+// */
+// export const batchDeleteNotice = (params) => defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true });
+//
+// /**
+// * 发布
+// * @param id
+// */
+// export const doReleaseData = (params) => defHttp.get({ url: Api.releaseData, params });
+// /**
+// * 撤销
+// * @param id
+// */
+// export const doReovkeData = (params) => defHttp.get({ url: Api.reovkeData, params });
+export const publishData = (params, handleSuccess) => {
+ createConfirm({
+ iconType: 'warning',
+ title: '确认发布',
+ content: '是否发布该消息?发布之后会逐步发短信给用户',
+ okText: '确认',
+ cancelText: '取消',
+ onOk: () => {
+ return defHttp.post({ url: Api.publishData, data: params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+ },
+ });
+};
diff --git a/src/views/system/notice/notice.data.ts b/src/views/system/notice/notice.data.ts
new file mode 100644
index 0000000..78dc342
--- /dev/null
+++ b/src/views/system/notice/notice.data.ts
@@ -0,0 +1,199 @@
+import { BasicColumn, FormSchema } from '/@/components/Table';
+import { rules } from '/@/utils/helper/validator';
+import { render } from '/@/utils/common/renderUtils';
+
+export const columns: BasicColumn[] = [
+ {
+ title: '标题',
+ width: 150,
+ dataIndex: 'titile',
+ },
+ {
+ title: '消息类型',
+ dataIndex: 'msgCategory_dictText',
+ width: 100,
+ },
+
+ /*{
+ title: '优先级',
+ dataIndex: 'priority',
+ width: 70,
+ customRender: ({ text }) => {
+ const color = text == 'L' ? 'blue' : text == 'M' ? 'yellow' : 'red';
+ return render.renderTag(render.renderDict(text, 'priority'), color);
+ },
+ },*/
+ {
+ title: '通知对象',
+ dataIndex: 'msgType_dictText',
+ width: 100,
+ },
+ {
+ title: '创建人',
+ width: 100,
+ dataIndex: 'createBy',
+ },
+ {
+ title: '发布状态',
+ dataIndex: 'sendStatus',
+ width: 70,
+ customRender: ({ text }) => {
+ const color = text == '0' ? 'red' : text == '1' ? 'green' : 'orange';
+ return render.renderTag(render.renderDict(text, 'send_status'), color);
+ },
+ },
+ {
+ title: '发布人',
+ width: 100,
+ dataIndex: 'sender',
+ },
+ {
+ title: '发布时间',
+ width: 100,
+ dataIndex: 'sendTime',
+ },
+ {
+ title: '发布进度',
+ width: 100,
+ dataIndex: 'msgAbstract',
+ },
+ /*{
+ title: '撤销时间',
+ width: 100,
+ dataIndex: 'cancelTime',
+ },*/
+];
+
+export const searchFormSchema: FormSchema[] = [
+ {
+ field: 'titile',
+ label: '标题',
+ component: 'JInput',
+ colProps: { span: 8 },
+ },
+ {
+ field: 'sendStatus',
+ label: '发布状态',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'send_status',
+ },
+ colProps: { span: 8 },
+ },
+];
+
+export const formSchema: FormSchema[] = [
+ {
+ field: 'id',
+ label: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ field: 'msgCategory',
+ label: '消息类型',
+ required: true,
+ component: 'JDictSelectTag',
+ defaultValue: '3',
+ componentProps: {
+ type: 'radio',
+ dictCode: 'msg_category',
+ placeholder: '请选择类型',
+ },
+ },
+
+ /*{
+ field: 'msgAbstract',
+ label: '摘要',
+ component: 'InputTextArea',
+ required: true,
+ },*/
+ // {
+ // field: 'endTime',
+ // label: '截至日期',
+ // component: 'DatePicker',
+ // componentProps: {
+ // showTime: true,
+ // valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ // placeholder: '请选择截至日期',
+ // },
+ // dynamicRules: ({ model }) => rules.endTime(model.startTime, true),
+ // },
+ {
+ field: 'msgType',
+ label: '通知对象',
+ defaultValue: 'ALL',
+ component: 'JDictSelectTag',
+ required: true,
+ componentProps: {
+ type: 'radioButton',
+ dictCode: 'msg_type',
+ placeholder: '请选择发布范围',
+ onChange: function (arg1) {
+ console.log(arg1);
+ },
+ },
+ },
+ {
+ field: 'userIds',
+ label: '指定用户',
+ component: 'JSelectUserByDept',
+ required: true,
+ componentProps: ({ formModel }) => {
+ return {
+ rowKey: 'id',
+ labelKey: 'realname',
+ // onChange: function (arg1) {
+ // formModel.userIds = arg1.join(',');
+ // }
+ };
+ },
+ ifShow: ({ values }) => values.msgType == 'USER',
+ },
+ {
+ field: 'docIds',
+ label: '指定专家',
+ component: 'JSelectDocByType',
+ required: true,
+ componentProps: ({ formModel }) => {
+ return {
+ rowKey: 'id',
+ labelKey: 'doctorName',
+ // onChange: function (arg1) {
+ // formModel.userIds = arg1.join(',');
+ // }
+ };
+ },
+ ifShow: ({ values }) => values.msgType == 'DOC',
+ },
+
+ /*{
+ field: 'priority',
+ label: '优先级',
+ defaultValue: 'H',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'priority',
+ type: 'radio',
+ placeholder: '请选择优先级',
+ },
+ },*/
+ {
+ field: 'titile',
+ label: '标题',
+ component: 'Input',
+ required: true,
+ componentProps: {
+ placeholder: '请输入标题',
+ },
+ },
+ {
+ field: 'msgContent',
+ label: '短信内容',
+ component: 'InputTextArea',
+ required: true,
+ componentProps: {
+ placeholder: '请输入短信内容',
+ },
+ },
+];