diff --git a/src/api/system/systemNotice/index.ts b/src/api/system/systemNotice/index.ts new file mode 100644 index 0000000..9183db8 --- /dev/null +++ b/src/api/system/systemNotice/index.ts @@ -0,0 +1,87 @@ +import { XjrNoticePageModel, XjrNoticePageParams, XjrNoticePageResult } from './model/SystemNoticeModel'; +import { defHttp } from '/@/utils/http/axios'; +import { ErrorMessageMode } from '/#/axios'; + +enum Api { + Page = '/system/systemNotice/page', + List = '/system/systemNotice/list', + Info = '/system/systemNotice/info', + XjrNotice = '/system/systemNotice', + + +} + +/** + * @description: 查询XjrNotice分页列表 + */ +export async function getXjrNoticePage(params: XjrNoticePageParams, mode: ErrorMessageMode = 'modal') { + return defHttp.get( + { + url: Api.Page, + params, + }, + { + errorMessageMode: mode, + }, + ); +} + +/** + * @description: 获取XjrNotice信息 + */ +export async function getXjrNotice(id: String, mode: ErrorMessageMode = 'modal') { + return defHttp.get( + { + url: Api.Info, + params: { id }, + }, + { + errorMessageMode: mode, + }, + ); +} + +/** + * @description: 新增XjrNotice + */ +export async function addXjrNotice(xjrNotice: Recordable, mode: ErrorMessageMode = 'modal') { + return defHttp.post( + { + url: Api.XjrNotice, + params: xjrNotice, + }, + { + errorMessageMode: mode, + }, + ); +} + +/** + * @description: 更新XjrNotice + */ +export async function updateXjrNotice(xjrNotice: Recordable, mode: ErrorMessageMode = 'modal') { + return defHttp.put( + { + url: Api.XjrNotice, + params: xjrNotice, + }, + { + errorMessageMode: mode, + }, + ); +} + +/** + * @description: 删除XjrNotice(批量删除) + */ +export async function deleteXjrNotice(ids: string[], mode: ErrorMessageMode = 'modal') { + return defHttp.delete( + { + url: Api.XjrNotice, + data: ids, + }, + { + errorMessageMode: mode, + }, + ); +} \ No newline at end of file diff --git a/src/api/system/systemNotice/model/SystemNoticeModel.ts b/src/api/system/systemNotice/model/SystemNoticeModel.ts new file mode 100644 index 0000000..426eb21 --- /dev/null +++ b/src/api/system/systemNotice/model/SystemNoticeModel.ts @@ -0,0 +1,114 @@ +import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel'; + +/** + * @description: XjrNotice分页参数 模型 + */ +export interface XjrNoticePageParams extends BasicPageParams { + title: string; + + type: string; + + publisherType: string; + + publisher: string; + + status: string; +} + +/** + * @description: XjrNotice分页返回值模型 + */ +export interface XjrNoticePageModel { + id: string; + + title: string; + + type: string; + + publisherType: string; + + publisher: string; + + status: string; +} + +/** + * @description: XjrNotice表类型 + */ +export interface XjrNoticeModel { + id: number; + + title: string; + + type: number; + + typeName: string; + + publisher: number; + + publisherType: number; + + publisherName: number; + + content: string; + + attachs: number; + + status: number; + + createUserId: number; + + createDate: string; + + modifyUserId: number; + + modifyDate: string; + + deleteMark: number; + + enabledMark: number; + + deptId: number; + + tenantId: number; + + ruleUserId: number; + + xjrNoticeUserList?: XjrNoticeUserModel; +} + +/** + * @description: XjrNoticeUser表类型 + */ +export interface XjrNoticeUserModel { + id: number; + + noticeId: number; + + userId: number; + + isRead: number; + + reply: string; + + createUserId: number; + + createDate: string; + + modifyUserId: number; + + modifyDate: string; + + deleteMark: number; + + enabledMark: number; + + deptId: number; + + tenantId: number; +} + +/** + * @description: XjrNotice分页返回值结构 + */ +export type XjrNoticePageResult = BasicFetchResult; \ No newline at end of file diff --git a/src/views/system/systemNotice/components/Form.vue b/src/views/system/systemNotice/components/Form.vue new file mode 100644 index 0000000..dc01e54 --- /dev/null +++ b/src/views/system/systemNotice/components/Form.vue @@ -0,0 +1,174 @@ + + \ No newline at end of file diff --git a/src/views/system/systemNotice/components/SystemnoticeModal.vue b/src/views/system/systemNotice/components/SystemnoticeModal.vue new file mode 100644 index 0000000..168dd47 --- /dev/null +++ b/src/views/system/systemNotice/components/SystemnoticeModal.vue @@ -0,0 +1,110 @@ + + \ No newline at end of file diff --git a/src/views/system/systemNotice/components/config.ts b/src/views/system/systemNotice/components/config.ts new file mode 100644 index 0000000..3e2cb9c --- /dev/null +++ b/src/views/system/systemNotice/components/config.ts @@ -0,0 +1,563 @@ +import { FormProps, FormSchema } from '/@/components/Form'; +import { BasicColumn } from '/@/components/Table'; +import { uploadApi } from '/@/api/sys/upload'; + +export const searchFormSchema: FormSchema[] = [ + { + field: 'title', + label: '标题', + component: 'Input', + }, + { + field: 'type', + label: '类型', + component: 'XjrSelect', + componentProps: { + datasourceType: 'dic', + params: { itemId: '1718831555510091777' }, + labelField: 'name', + valueField: 'value', + + getPopupContainer: () => document.body, + }, + }, + { + field: 'publisherType', + label: '发布主体类型', + component: 'XjrSelect', + componentProps: { + datasourceType: 'staticData', + staticOptions: [ + { key: 1, label: '组织', value: '1' }, + { key: 2, label: '用户', value: '0' }, + ], + labelField: 'label', + valueField: 'value', + + getPopupContainer: () => document.body, + }, + }, + { + field: 'publisher', + label: '发布主体', + component: 'Dept', + componentProps: { + placeholder: '请选择', + getPopupContainer: () => document.body, + }, + }, + { + field: 'status', + label: '发布状态', + component: 'XjrSelect', + componentProps: { + datasourceType: 'staticData', + staticOptions: [ + { key: 1, label: '草稿', value: '0' }, + { key: 2, label: '已发布', value: '1' }, + { key: 3, label: '已结束', value: '2' }, + ], + labelField: 'label', + valueField: 'value', + + getPopupContainer: () => document.body, + }, + }, +]; + +export const columns: BasicColumn[] = [ + { + dataIndex: 'title', + title: '标题', + componentType: 'input', + align: 'left', + + sorter: true, + }, + + { + dataIndex: 'type', + title: '类型', + componentType: 'select', + align: 'left', + + sorter: true, + }, + + { + dataIndex: 'publisherType', + title: '发布主体类型', + componentType: 'radio', + align: 'left', + + customRender: ({ record }) => { + const staticOptions = [ + { key: 1, label: '组织', value: '1' }, + { key: 2, label: '用户', value: '0' }, + ]; + return staticOptions.filter((x) => x.value === record.publisherType)[0]?.label; + }, + + sorter: true, + }, + + { + dataIndex: 'publisher', + title: '发布主体', + componentType: 'organization', + align: 'left', + + sorter: true, + }, + + { + dataIndex: 'status', + title: '发布状态', + componentType: 'select', + align: 'left', + + customRender: ({ record }) => { + const staticOptions = [ + { key: 1, label: '草稿', value: '0' }, + { key: 2, label: '已发布', value: '1' }, + { key: 3, label: '已结束', value: '2' }, + ]; + return staticOptions.filter((x) => x.value === record.status)[0]?.label; + }, + + sorter: true, + }, +]; +//表单事件 +export const formEventConfigs = { + 0: [ + { + type: 'circle', + color: '#2774ff', + text: '开始节点', + icon: '#icon-kaishi', + bgcColor: '#D8E5FF', + isUserDefined: false, + }, + { + color: '#F6AB01', + icon: '#icon-chushihua', + text: '初始化表单', + bgcColor: '#f9f5ea', + isUserDefined: false, + nodeInfo: { processEvent: [] }, + }, + ], + 1: [ + { + color: '#B36EDB', + icon: '#icon-shujufenxi', + text: '获取表单数据', + detail: '(新增无此操作)', + bgcColor: '#F8F2FC', + isUserDefined: false, + nodeInfo: { processEvent: [] }, + }, + ], + 2: [ + { + color: '#F8625C', + icon: '#icon-jiazai', + text: '加载表单', + bgcColor: '#FFF1F1', + isUserDefined: false, + nodeInfo: { processEvent: [] }, + }, + ], + 3: [ + { + color: '#6C6AE0', + icon: '#icon-jsontijiao', + text: '提交表单', + bgcColor: '#F5F4FF', + isUserDefined: false, + nodeInfo: { processEvent: [] }, + }, + ], + 4: [ + { + type: 'circle', + color: '#F8625C', + text: '结束节点', + icon: '#icon-jieshuzhiliao', + bgcColor: '#FFD6D6', + isLast: true, + isUserDefined: false, + }, + ], +}; +export const formProps: FormProps = { + labelCol: { span: 3, offset: 0 }, + labelAlign: 'right', + layout: 'horizontal', + size: 'default', + schemas: [ + { + key: '7b8d7c4f6460482b808e9d6cf62f384c', + field: '', + label: '标题', + type: 'title', + component: 'Title', + colProps: { span: 24 }, + defaultValue: '通知', + componentProps: { + defaultValue: '通知', + color: '', + align: 'left', + fontSize: 18, + isShow: true, + style: {}, + }, + }, + { + key: 'b0f1185fbd5e4301b3ce642adee6f714', + field: 'title', + label: '标题', + type: 'input', + component: 'Input', + colProps: { span: 24 }, + defaultValue: '', + componentProps: { + width: '100%', + span: '', + defaultValue: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: true, + respNewRow: false, + placeholder: '请输入标题', + maxlength: null, + prefix: '', + suffix: '', + addonBefore: '', + addonAfter: '', + disabled: false, + allowClear: false, + showLabel: true, + required: true, + rules: [], + events: {}, + isSave: false, + isShow: true, + scan: false, + style: { width: '100%' }, + }, + }, + { + key: 'bd89a831bc2a4600aa6cf62ce68f1a83', + field: 'type', + label: '类型', + type: 'select', + component: 'XjrSelect', + colProps: { span: 24 }, + componentProps: { + width: '100%', + span: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: true, + respNewRow: false, + placeholder: '请选择类型', + sepTextField: '', + showLabel: true, + showSearch: false, + clearable: false, + disabled: false, + staticOptions: [ + { key: 1, label: 'Option 1', value: 'Option 1' }, + { key: 2, label: 'Option 2', value: 'Option 2' }, + { key: 3, label: 'Option 3', value: 'Option 3' }, + ], + defaultSelect: null, + datasourceType: 'dic', + params: { itemId: '1718831555510091777' }, + labelField: 'name', + valueField: 'value', + apiConfig: { + path: 'CodeGeneration/selection', + method: 'GET', + apiId: '93d735dcb7364a0f8102188ec4d77ac7', + }, + dicOptions: [], + required: true, + rules: [], + events: {}, + isShow: true, + itemId: '1718831555510091777', + style: { width: '100%' }, + }, + }, + { + key: 'cda07002c20341b5a3a463ab71f6f6bb', + field: 'publisherType', + label: '发布主体类型', + type: 'radio', + component: 'ApiRadioGroup', + colProps: { span: 24 }, + componentProps: { + span: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: true, + respNewRow: false, + showLabel: true, + disabled: false, + optionType: 'default', + staticOptions: [ + { key: 1, label: '组织', value: '1' }, + { key: 2, label: '用户', value: '0' }, + ], + datasourceType: 'staticData', + labelField: 'label', + valueField: 'value', + defaultSelect: '1', + apiConfig: { + path: 'CodeGeneration/selection', + method: 'GET', + apiId: '93d735dcb7364a0f8102188ec4d77ac7', + }, + dicOptions: [], + required: false, + rules: [], + events: {}, + isShow: true, + params: null, + style: {}, + }, + }, + { + key: '491b4e9de46a4d6486e339aacdef8015', + field: 'publisher', + label: '发布主体', + type: 'organization', + component: 'Dept', + colProps: { span: 24 }, + componentProps: { + labelWidthMode: 'fix', + labelFixWidth: 120, + parentNode: '', + responsive: true, + sepTextField: '', + span: '', + width: '100%', + orgzType: 0, + placeholder: '请选择发布主体', + showLabel: true, + disabled: false, + required: false, + isShow: true, + events: {}, + style: { width: '100%' }, + }, + }, + { + key: '351960d97c424dfc84e198b94b0405a5', + field: 'status', + label: '发布状态', + type: 'select', + component: 'XjrSelect', + colProps: { span: 24 }, + componentProps: { + width: '100%', + span: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: true, + respNewRow: false, + placeholder: '请选择发布状态', + sepTextField: '', + showLabel: true, + showSearch: false, + clearable: false, + disabled: false, + staticOptions: [ + { key: 1, label: '草稿', value: '0' }, + { key: 2, label: '已发布', value: '1' }, + { key: 3, label: '已结束', value: '2' }, + ], + defaultSelect: '0', + datasourceType: 'staticData', + params: null, + labelField: 'label', + valueField: 'value', + apiConfig: { + path: 'CodeGeneration/selection', + method: 'GET', + apiId: '93d735dcb7364a0f8102188ec4d77ac7', + }, + dicOptions: [], + required: false, + rules: [], + events: {}, + isShow: true, + style: { width: '100%' }, + }, + }, + { + key: '9628fc13869d420d8ab505dae01127cc', + field: 'content', + label: '内容', + type: 'richtext-editor', + component: 'RichTextEditor', + colProps: { span: 24 }, + defaultValue: '', + componentProps: { + labelWidthMode: 'fix', + labelFixWidth: 120, + span: '', + defaultValue: '', + width: '100%', + disabled: false, + showLabel: true, + required: false, + isShow: true, + rules: [], + events: {}, + style: { width: '100%' }, + }, + }, + { + key: '4d5977260e2b45a3a75bb9917f6d3cc2', + field: 'attachs', + label: '附件', + type: 'upload', + component: 'Upload', + colProps: { span: 24 }, + componentProps: { + api: uploadApi, + labelWidthMode: 'fix', + labelFixWidth: 120, + span: '', + defaultValue: [], + accept: '', + maxNumber: 5, + maxSize: 5, + showLabel: true, + multiple: true, + disabled: false, + required: false, + isShow: true, + events: {}, + listType: 'text', + }, + }, + { + key: '8abfa905aa4243658aaf33f71872f4da', + label: '通知人员', + field: 'xjrNoticeUserList', + type: 'form', + component: 'SubForm', + required: true, + colProps: { span: 24 }, + componentProps: { + mainKey: 'xjrNoticeUserList', + columns: [ + { + key: '6b00ebe98c3c4c83a82519399de7ec57', + title: '人员', + dataIndex: 'userId', + componentType: 'User', + defaultValue: '', + componentProps: { + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + sepTextField: '', + span: '', + width: '100%', + defaultValue: '', + placeholder: '请选择人员', + userType: 0, + prefix: '', + suffix: 'ant-design:setting-outlined', + showLabel: true, + disabled: false, + required: true, + isShow: true, + events: {}, + }, + }, + { + key: '33835f3894c54e39baebd3abb0dc447e', + title: '已读', + dataIndex: 'isRead', + componentType: 'Switch', + defaultValue: 0, + componentProps: { + span: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + respNewRow: false, + defaultValue: 0, + checkedChildren: '', + unCheckedChildren: '', + checkedColor: '#5e95ff', + unCheckedColor: '#bbbdbf', + showLabel: true, + disabled: true, + events: {}, + isShow: true, + }, + }, + { + key: 'bf5c3106785f4d64ab57c7fc76980b85', + title: '回复', + dataIndex: 'reply', + componentType: 'Input', + defaultValue: '', + componentProps: { + width: '100%', + span: '', + defaultValue: '', + labelWidthMode: 'fix', + labelFixWidth: 120, + responsive: false, + respNewRow: false, + placeholder: '暂无回复', + maxlength: null, + prefix: '', + suffix: '', + addonBefore: '', + addonAfter: '', + disabled: true, + allowClear: false, + showLabel: true, + required: false, + rules: [], + events: {}, + isSave: false, + isShow: true, + scan: false, + }, + }, + { title: '操作', key: 'action', fixed: 'right', width: '50px' }, + ], + span: '24', + preloadType: 'api', + apiConfig: {}, + itemId: '', + dicOptions: [], + useSelectButton: false, + buttonName: '选择数据', + showLabel: true, + showComponentBorder: true, + showFormBorder: true, + showIndex: true, + isShow: true, + multipleHeads: [], + }, + }, + ], + showActionButtonGroup: false, + buttonLocation: 'center', + actionColOptions: { span: 24 }, + showResetButton: false, + showSubmitButton: false, + hiddenComponent: [], +}; \ No newline at end of file diff --git a/src/views/system/systemNotice/components/workflowPermission.ts b/src/views/system/systemNotice/components/workflowPermission.ts new file mode 100644 index 0000000..1715bff --- /dev/null +++ b/src/views/system/systemNotice/components/workflowPermission.ts @@ -0,0 +1,179 @@ +export const permissionList = [ + { + required: false, + view: true, + edit: false, + disabled: true, + isSaveTable: false, + tableName: '', + fieldName: '标题', + fieldId: '', + isSubTable: false, + showChildren: true, + type: 'title', + key: '7b8d7c4f6460482b808e9d6cf62f384c', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '标题', + fieldId: 'title', + isSubTable: false, + showChildren: true, + type: 'input', + key: 'b0f1185fbd5e4301b3ce642adee6f714', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '类型', + fieldId: 'type', + isSubTable: false, + showChildren: true, + type: 'select', + key: 'bd89a831bc2a4600aa6cf62ce68f1a83', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '发布主体类型', + fieldId: 'publisherType', + isSubTable: false, + showChildren: true, + type: 'radio', + key: 'cda07002c20341b5a3a463ab71f6f6bb', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '发布主体', + fieldId: 'publisher', + isSubTable: false, + showChildren: true, + type: 'organization', + key: '491b4e9de46a4d6486e339aacdef8015', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '发布状态', + fieldId: 'status', + isSubTable: false, + showChildren: true, + type: 'select', + key: '351960d97c424dfc84e198b94b0405a5', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '内容', + fieldId: 'content', + isSubTable: false, + showChildren: true, + type: 'richtext-editor', + key: '9628fc13869d420d8ab505dae01127cc', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSaveTable: false, + tableName: '', + fieldName: '附件', + fieldId: 'attachs', + isSubTable: false, + showChildren: true, + type: 'upload', + key: '4d5977260e2b45a3a75bb9917f6d3cc2', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSubTable: true, + showChildren: false, + tableName: 'xjrNoticeUserList', + fieldName: '通知人员', + fieldId: 'xjrNoticeUserList', + type: 'form', + key: '8abfa905aa4243658aaf33f71872f4da', + children: [ + { + required: true, + view: true, + edit: true, + disabled: false, + isSubTable: true, + isSaveTable: false, + showChildren: false, + tableName: 'xjrNoticeUserList', + fieldName: '人员', + fieldId: 'userId', + key: '6b00ebe98c3c4c83a82519399de7ec57', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSubTable: true, + isSaveTable: false, + showChildren: false, + tableName: 'xjrNoticeUserList', + fieldName: '已读', + fieldId: 'isRead', + key: '33835f3894c54e39baebd3abb0dc447e', + children: [], + }, + { + required: true, + view: true, + edit: true, + disabled: false, + isSubTable: true, + isSaveTable: false, + showChildren: false, + tableName: 'xjrNoticeUserList', + fieldName: '回复', + fieldId: 'reply', + key: 'bf5c3106785f4d64ab57c7fc76980b85', + children: [], + }, + ], + }, +]; \ No newline at end of file diff --git a/src/views/system/systemNotice/index.vue b/src/views/system/systemNotice/index.vue new file mode 100644 index 0000000..cc1b6e6 --- /dev/null +++ b/src/views/system/systemNotice/index.vue @@ -0,0 +1,355 @@ + + + \ No newline at end of file