From ae3a3bcab6f57a262b99ed097fe7be1090472766 Mon Sep 17 00:00:00 2001
From: wx <645899409@qq.com>
Date: Thu, 5 Feb 2026 14:49:21 +0800
Subject: [PATCH] =?UTF-8?q?update:=201.=E8=BD=AE=E6=92=AD=E5=9B=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../system/systemBanner/SysBanner.api.ts | 92 +++++++++
.../system/systemBanner/SysBanner.data.ts | 177 ++++++++++++++++
.../system/systemBanner/SysBannerList.vue | 195 ++++++++++++++++++
.../systemBanner/components/SysBannerForm.vue | 70 +++++++
.../components/SysBannerModal.vue | 70 +++++++
5 files changed, 604 insertions(+)
create mode 100644 src/views/system/systemBanner/SysBanner.api.ts
create mode 100644 src/views/system/systemBanner/SysBanner.data.ts
create mode 100644 src/views/system/systemBanner/SysBannerList.vue
create mode 100644 src/views/system/systemBanner/components/SysBannerForm.vue
create mode 100644 src/views/system/systemBanner/components/SysBannerModal.vue
diff --git a/src/views/system/systemBanner/SysBanner.api.ts b/src/views/system/systemBanner/SysBanner.api.ts
new file mode 100644
index 0000000..ec51a91
--- /dev/null
+++ b/src/views/system/systemBanner/SysBanner.api.ts
@@ -0,0 +1,92 @@
+import { defHttp } from '/@/utils/http/axios';
+import { useMessage } from '/@/hooks/web/useMessage';
+
+const { createConfirm } = useMessage();
+
+enum Api {
+ list = '/sys/sysBanner/list',
+ save = '/sys/sysBanner/add',
+ edit = '/sys/sysBanner/edit',
+ deleteOne = '/sys/sysBanner/delete',
+ deleteBatch = '/sys/sysBanner/deleteBatch',
+ importExcel = '/sys/sysBanner/importExcel',
+ exportXls = '/sys/sysBanner/exportXls',
+}
+
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+/**
+ * 列表接口
+ * @param params
+ */
+export const list = (params) => defHttp.get({ url: Api.list, params });
+
+/**
+ * 删除单个
+ */
+export const deleteOne = (params, handleSuccess) => {
+ createConfirm({
+ iconType: 'warning',
+ title: '确认删除',
+ content: '是否删除选中数据',
+ okText: '确认',
+ cancelText: '取消',
+ onOk: () => {
+ return defHttp
+ .delete(
+ {
+ url: Api.deleteOne,
+ data: params,
+ },
+ { joinParamsToUrl: true }
+ )
+ .then(() => {
+ 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) => {
+ const url = isUpdate ? Api.edit : Api.save;
+ return defHttp.post({ url: url, params });
+};
diff --git a/src/views/system/systemBanner/SysBanner.data.ts b/src/views/system/systemBanner/SysBanner.data.ts
new file mode 100644
index 0000000..6b3352a
--- /dev/null
+++ b/src/views/system/systemBanner/SysBanner.data.ts
@@ -0,0 +1,177 @@
+import { BasicColumn } from '/@/components/Table';
+import { FormSchema } from '/@/components/Table';
+import { rules } from '/@/utils/helper/validator';
+import { render } from '/@/utils/common/renderUtils';
+import { h } from 'vue';
+import { Image } from 'ant-design-vue';
+import { getDefaultImage, getFileAccessHttpUrl } from '/@/utils/common/compUtils';
+import { BODY_CONTAINER } from "/@/utils/domUtils";
+//列表数据
+export const columns: BasicColumn[] = [
+ {
+ title: '名称',
+ align: 'center',
+ dataIndex: 'name',
+ },
+ {
+ title: '序号',
+ align: 'center',
+ dataIndex: 'sort',
+ },
+ {
+ title: '图片',
+ align: 'center',
+ dataIndex: 'photoUrl',
+ minWidth: 230,
+ customRender: ({ text }) => {
+ return h(Image, {
+ placeholder: true,
+ src: getFileAccessHttpUrl(text),
+ height: 80,
+ width: 200,
+ fallback: getDefaultImage(),
+ });
+ },
+ },
+ {
+ title: '展示位置',
+ align: 'center',
+ dataIndex: 'showLocation_dictText',
+ },
+ {
+ title: '是否有效',
+ align: 'center',
+ dataIndex: 'status_dictText',
+ },
+ {
+ title: '有效期',
+ align: 'center',
+ dataIndex: 'isLongTermEffective_dictText',
+ },
+];
+//查询数据
+export const searchFormSchema: FormSchema[] = [
+ {
+ field: 'name',
+ label: '名称',
+ component: 'Input',
+ },
+ {
+ field: 'showLocation',
+ label: '展示位置',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'show_location',
+ },
+ },
+ {
+ field: 'status',
+ label: '是否有效',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'yes_no_status',
+ },
+ },
+];
+//表单数据
+export const formSchema: FormSchema[] = [
+ {
+ label: '序号',
+ field: 'sort',
+ component: 'InputNumber',
+ rules: [{ required: true }],
+ },
+ {
+ label: '名称',
+ field: 'name',
+ component: 'Input',
+ rules: [{ required: true }],
+ },
+ {
+ label: '图片',
+ field: 'photoUrl',
+ component: 'JImageUpload',
+ rules: [{ required: true, message: '请上传图片' }],
+ },
+ {
+ label: '展示位置',
+ field: 'showLocation',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'show_location',
+ },
+ rules: [{ required: true }],
+ },
+ {
+ label: '是否有效',
+ field: 'status',
+ component: 'JDictSelectTag',
+ defaultValue: '1',
+ componentProps: {
+ type: 'radio',
+ dictCode: 'yes_no_status',
+ },
+ rules: [{ required: true }],
+ },
+ {
+ label: '有效期',
+ field: 'isLongTermEffective',
+ component: 'JDictSelectTag',
+ defaultValue: '1',
+ componentProps: {
+ type: 'radio',
+ dictCode: 'is_long_term_effective',
+ },
+ rules: [{ required: true }],
+ },
+ {
+ label: '有效期时间',
+ field: 'rangeTime',
+ component: 'RangePicker',
+ dynamicRules: ({ model }) => {
+ return [{ required: model.isLongTermEffective !== '1', message: '请选择有效期时间' }];
+ },
+ ifShow: ({ model }) => {
+ return model.isLongTermEffective !== '1';
+ },
+ componentProps: ({ formModel }) => {
+ return {
+ valueType: 'Date',
+ valueFormat: 'YYYY-MM-DD',
+ getPopupContainer: () => BODY_CONTAINER,
+ onChange: ([start, end]) => {
+ formModel.startTime = start;
+ formModel.endTime = end;
+ },
+ };
+ },
+ },
+ {
+ label: '',
+ field: 'startTime',
+ component: 'Input',
+ show: false,
+ },
+ {
+ label: '',
+ field: 'endTime',
+ component: 'Input',
+ show: false,
+ },
+ // TODO 主键隐藏字段,目前写死为ID
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+];
+
+/**
+ * 流程表单调用这个方法获取formSchema
+ * @param param
+ */
+export function getBpmFormSchema(_formData): FormSchema[] {
+ // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema
+ return formSchema;
+}
diff --git a/src/views/system/systemBanner/SysBannerList.vue b/src/views/system/systemBanner/SysBannerList.vue
new file mode 100644
index 0000000..ff578fa
--- /dev/null
+++ b/src/views/system/systemBanner/SysBannerList.vue
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+ 新增
+ 批量删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAreaTextByCode(text) }}
+
+
+ 无文件
+ 下载
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/systemBanner/components/SysBannerForm.vue b/src/views/system/systemBanner/components/SysBannerForm.vue
new file mode 100644
index 0000000..20c291a
--- /dev/null
+++ b/src/views/system/systemBanner/components/SysBannerForm.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/system/systemBanner/components/SysBannerModal.vue b/src/views/system/systemBanner/components/SysBannerModal.vue
new file mode 100644
index 0000000..2fc7f39
--- /dev/null
+++ b/src/views/system/systemBanner/components/SysBannerModal.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+