diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cms/controller/CmsArticleController.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cms/controller/CmsArticleController.java index 4636ece..794504c 100644 --- a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cms/controller/CmsArticleController.java +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cms/controller/CmsArticleController.java @@ -73,6 +73,19 @@ public class CmsArticleController extends JeecgController> queryPlistJSJLNEWageList(CmsArticle cmsArticle, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(cmsArticle, req.getParameterMap()); + queryWrapper.eq("column_id","1855427069138923522"); + Page page = new Page(pageNo, pageSize); + IPage pageList = cmsArticleService.page(page, queryWrapper); + return Result.OK(pageList); + } + /** @@ -134,6 +147,43 @@ public class CmsArticleController extends JeecgController addJSJLNEW(@RequestBody CmsArticle cmsArticle) { + LoginUser principal = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + cmsArticle.setCreateBy(principal.getUsername()); + CmsColumn cmsColumn = cmsColumnService.getById(cmsArticle.getColumnId()); + cmsArticle.setColumnName(cmsColumn.getName()); +// if (StringUtils.equals("1", cmsArticle.getStatus())) { + cmsArticle.setPublishTime(new Date()); + cmsArticle.setStatus("1"); + cmsArticle.setColumnId("1855427069138923522"); + cmsArticle.setColumnName("技术交流"); +// } + /*QueryWrapper subwesideQueryWrapper = new QueryWrapper<>(); + subwesideQueryWrapper.in("compadminid", principal.getId()); + List subwesideList = subwesideService.list(subwesideQueryWrapper); + if (!subwesideList.isEmpty()) { + List subnames = subwesideList.stream() + .map(Subweside::getSubname) // 将每个Subweside对象映射到其subname字段 + .collect(Collectors.toList()); // 收集结果到List + String joinedString = String.join(", ", subnames); + cmsArticle.setSource("来自子站:"+joinedString); + }else { + cmsArticle.setSource(""); + }*/ + cmsArticleService.save(cmsArticle); + return Result.OK("添加成功!"); + } @ApiOperation(value = "文章管理-发布/取消发布", notes = "文章管理-发布/取消发布") @PostMapping(value = "/operationStatus") public Result operationStatus(@RequestBody CmsArticle cmsArticle) { diff --git a/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle.api.ts b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle.api.ts new file mode 100644 index 0000000..79a45c2 --- /dev/null +++ b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle.api.ts @@ -0,0 +1,77 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + listzwh = '/cms/cmsArticle/listzwh', + list = '/cms/cmsArticle/listJSJLNEW', + save='/cms/cmsArticle/addJSJLNEW', + edit='/cms/cmsArticle/edit', + deleteOne = '/cms/cmsArticle/delete', + deleteBatch = '/cms/cmsArticle/deleteBatch', + importExcel = '/cms/cmsArticle/importExcel', + exportXls = '/cms/cmsArticle/exportXls', + operationStatus = '/cms/cmsArticle/operationStatus', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; + +export const updateStatus = (params) => defHttp.post({url: Api.operationStatus, params}); + +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + + +/** + * 列表接口 + * @param params + */ +export const listzwh = (params) => + defHttp.get({url: Api.listzwh, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle.data.ts b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle.data.ts new file mode 100644 index 0000000..905fb6b --- /dev/null +++ b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle.data.ts @@ -0,0 +1,173 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +// import { rules} from '/@/utils/helper/validator'; +// import { render } from '/@/utils/common/renderUtils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '所属栏目', + align: "center", + dataIndex: 'columnName' + }, + { + title: '文章标题', + align: "center", + dataIndex: 'title', + // slots: {customRender: 'htmlSlot'}, + }, + { + title: '作者', + align: "center", + dataIndex: 'createBy_dictText' + }, + { + title: '来源', + align: "center", + dataIndex: 'source' + }, + { + title: '状态', + align: "center", + dataIndex: 'status_dictText' + }, + { + title: '发布时间', + align: "center", + dataIndex: 'publishTime' + }, + // { + // title: '源url', + // align: "center", + // dataIndex: 'originUrl' + // }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ + { + label: "所属栏目", + field: 'columnId', + component: 'JDictSelectTag', + componentProps: { + dictCode: "cms_column,name,id" + }, + colProps: {span: 6}, + }, + { + label: "文章标题", + field: 'title', + component: 'Input', + colProps: {span: 6}, + }, + { + label: "是否发布", + field: 'status', + component: 'JDictSelectTag', + componentProps: { + dictCode: "captain_code" + }, + colProps: {span: 3}, + }, +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '文章标题', + field: 'title', + component: 'Input', + dynamicRules: ({model, schema}) => { + return [ + {required: true, message: '请输入文章标题!'}, + ]; + }, + }, +/* { + label: '所属栏目', + field: 'columnId', + component: 'JDictSelectTag', + componentProps: { + dictCode: "cms_column,name,id" + + }, + dynamicRules: ({model, schema}) => { + return [ + {required: true, message: '请输入所属栏目!'}, + ]; + }, + },*/ + { + label: '文章内容', + field: 'content', + component: 'JEditor', + }, + // { + // label: '所属栏目名称', + // field: 'columnName', + // component: 'Input', + // }, + { + label: '发布时间', + field: 'publishTime', + component: 'DatePicker', + componentProps: { + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss' + }, + }, + { + label: '来源', + field: 'source', + component: 'Input', + }, + { + label: '源url', + field: 'originUrl', + component: 'Input', + }, + + { + label: '文章图片', + field: 'comimg', + component: 'JImageUpload', + componentProps:{ + }, + }, + { + label: '文章文件', + field: 'comfile', + component: 'JUpload', + componentProps:{ + }, + }, + + { + label: '简介', + field: 'info', + component: 'InputTextArea', + }, +/* { + label: '文章来源', + field: 'artfrom', + component: 'JSearchSelect', + componentProps:{ + dict: "subweside,subname,id" + }, + },*/ + + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + + +/** + * 流程表单调用这个方法获取formSchema + * @param param + */ +export function getBpmFormSchema(_formData): FormSchema[] { + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} diff --git a/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticleList.vue b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticleList.vue new file mode 100644 index 0000000..986a66a --- /dev/null +++ b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticleList.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticleListzwh.vue b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticleListzwh.vue new file mode 100644 index 0000000..f3df9c8 --- /dev/null +++ b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticleListzwh.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle_menu_insert.sql b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle_menu_insert.sql new file mode 100644 index 0000000..0e34975 --- /dev/null +++ b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/CmsArticle_menu_insert.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/cms文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2023101212013790550', NULL, '文章', '/cms/cmsArticleList', 'cms/CmsArticleList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-10-12 12:01:55', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2023101212013790551', '2023101212013790550', '添加文章', NULL, NULL, 0, NULL, NULL, 2, 'cms:cms_article:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-10-12 12:01:55', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2023101212013790552', '2023101212013790550', '编辑文章', NULL, NULL, 0, NULL, NULL, 2, 'cms:cms_article:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-10-12 12:01:55', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2023101212013790553', '2023101212013790550', '删除文章', NULL, NULL, 0, NULL, NULL, 2, 'cms:cms_article:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-10-12 12:01:55', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2023101212013790554', '2023101212013790550', '批量删除文章', NULL, NULL, 0, NULL, NULL, 2, 'cms:cms_article:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-10-12 12:01:55', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2023101212013790555', '2023101212013790550', '导出excel_文章', NULL, NULL, 0, NULL, NULL, 2, 'cms:cms_article:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-10-12 12:01:55', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2023101212013790556', '2023101212013790550', '导入excel_文章', NULL, NULL, 0, NULL, NULL, 2, 'cms:cms_article:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-10-12 12:01:55', NULL, NULL, 0, 0, '1', 0); diff --git a/jeecgboot-vue3/src/views/cms/admin/articelJSJL/components/CmsArticleForm.vue b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/components/CmsArticleForm.vue new file mode 100644 index 0000000..aeab99d --- /dev/null +++ b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/components/CmsArticleForm.vue @@ -0,0 +1,70 @@ + + + diff --git a/jeecgboot-vue3/src/views/cms/admin/articelJSJL/components/CmsArticleModal.vue b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/components/CmsArticleModal.vue new file mode 100644 index 0000000..d338f6e --- /dev/null +++ b/jeecgboot-vue3/src/views/cms/admin/articelJSJL/components/CmsArticleModal.vue @@ -0,0 +1,66 @@ + + + + +