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 @@ + + + + + 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 @@ + + + + +