diff --git a/yudao-admin-vue3/.env.local b/yudao-admin-vue3/.env.local index f61c09e..120bda0 100644 --- a/yudao-admin-vue3/.env.local +++ b/yudao-admin-vue3/.env.local @@ -4,12 +4,13 @@ NODE_ENV=development VITE_DEV=true # 请求路径 -VITE_BASE_URL='http://localhost:6127' +#VITE_BASE_URL='https://zysc.fjptzykj.com' +VITE_BASE_URL='http://192.168.1.12:6127' # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务 VITE_UPLOAD_TYPE=server # 上传路径 -VITE_UPLOAD_URL='http://localhost:6127/admin-api/infra/file/upload' +VITE_UPLOAD_URL='https://zysc.fjptzykj.com/admin-api/infra/file/upload' # 接口地址 VITE_API_URL=/admin-api diff --git a/yudao-admin-vue3/src/api/mall/promotion/point/index.ts b/yudao-admin-vue3/src/api/mall/promotion/point/index.ts new file mode 100644 index 0000000..38254c2 --- /dev/null +++ b/yudao-admin-vue3/src/api/mall/promotion/point/index.ts @@ -0,0 +1,91 @@ +import request from '@/config/axios' +import { Sku, Spu } from '@/api/mall/product/spu' // 积分商城活动 VO + +// 积分商城活动 VO +export interface PointActivityVO { + id: number // 积分商城活动编号 + spuId: number // 积分商城活动商品 + status: number // 活动状态 + stock: number // 积分商城活动库存 + totalStock: number // 积分商城活动总库存 + remark?: string // 备注 + sort: number // 排序 + createTime: string // 创建时间 + products: PointProductVO[] // 积分商城商品 + + // ========== 商品字段 ========== + spuName: string // 商品名称 + picUrl: string // 商品主图 + marketPrice: number // 商品市场价,单位:分 + + //======================= 显示所需兑换积分最少的 sku 信息 ======================= + point: number // 兑换积分 + price: number // 兑换金额,单位:分 +} + +// 秒杀活动所需属性 +export interface PointProductVO { + id?: number // 积分商城商品编号 + activityId?: number // 积分商城活动 id + spuId?: number // 商品 SPU 编号 + skuId: number // 商品 SKU 编号 + count: number // 可兑换数量 + point: number // 兑换积分 + price: number // 兑换金额,单位:分 + stock: number // 积分商城商品库存 + activityStatus?: number // 积分商城商品状态 +} + +// 扩展 Sku 配置 +export type SkuExtension = Sku & { + productConfig: PointProductVO +} + +export interface SpuExtension extends Spu { + skus: SkuExtension[] // 重写类型 +} + +export interface SpuExtension0 extends Spu { + pointStock: number // 积分商城活动库存 + pointTotalStock: number // 积分商城活动总库存 + point: number // 兑换积分 + pointPrice: number // 兑换金额,单位:分 +} + +// 积分商城活动 API +export const PointActivityApi = { + // 查询积分商城活动分页 + getPointActivityPage: async (params: any) => { + return await request.get({ url: `/promotion/point-activity/page`, params }) + }, + + // 查询积分商城活动详情 + getPointActivity: async (id: number) => { + return await request.get({ url: `/promotion/point-activity/get?id=` + id }) + }, + + // 查询积分商城活动列表,基于活动编号数组 + getPointActivityListByIds: async (ids: number[]) => { + return request.get({ url: `/promotion/point-activity/list-by-ids?ids=${ids}` }) + }, + + // 新增积分商城活动 + createPointActivity: async (data: PointActivityVO) => { + return await request.post({ url: `/promotion/point-activity/create`, data }) + }, + + // 修改积分商城活动 + updatePointActivity: async (data: PointActivityVO) => { + return await request.put({ url: `/promotion/point-activity/update`, data }) + }, + + // 删除积分商城活动 + deletePointActivity: async (id: number) => { + return await request.delete({ url: `/promotion/point-activity/delete?id=` + id }) + }, + + // 关闭秒杀活动 + closePointActivity: async (id: number) => { + return await request.put({ url: '/promotion/point-activity/close?id=' + id }) + } +} diff --git a/yudao-admin-vue3/src/api/mall/statistics/member.ts b/yudao-admin-vue3/src/api/mall/statistics/member.ts index d9accf9..5d9827a 100644 --- a/yudao-admin-vue3/src/api/mall/statistics/member.ts +++ b/yudao-admin-vue3/src/api/mall/statistics/member.ts @@ -121,3 +121,10 @@ export const getMemberRegisterCountList = ( params: { times: [formatDate(beginTime), formatDate(endTime)] } }) } + +// 获取自定义页面数据 +export const getDiyPage = () => { + return request.get({ + url: '/promotion/diy-page/getDiyPage' + }) +} diff --git a/yudao-admin-vue3/src/components/AppLinkInput/AppLinkSelectDialog.vue b/yudao-admin-vue3/src/components/AppLinkInput/AppLinkSelectDialog.vue index 5133f16..762ee96 100644 --- a/yudao-admin-vue3/src/components/AppLinkInput/AppLinkSelectDialog.vue +++ b/yudao-admin-vue3/src/components/AppLinkInput/AppLinkSelectDialog.vue @@ -1,210 +1,215 @@ - + \ No newline at end of file diff --git a/yudao-admin-vue3/src/components/AppLinkInput/data.ts b/yudao-admin-vue3/src/components/AppLinkInput/data.ts index 77fb4e1..e6424a9 100644 --- a/yudao-admin-vue3/src/components/AppLinkInput/data.ts +++ b/yudao-admin-vue3/src/components/AppLinkInput/data.ts @@ -250,30 +250,31 @@ export const APP_LINK_GROUP_LIST = [ path: '/pages/user/user_vip/index' } ] - }, - { - name: '自定义页面', - links: [ - { - name: '促销页面', - path: 'ss' - }, - { - name: '关于我们', - path: '/pages/pay/recharge-lo' - }, - { - name: '产品与服务', - path: '/pages/pay/recharge-l' - }, - { - name: '自定义页面', - path: '/pages/pay/recharge-' - }, - { - name: '个人中心', - path: '/pages/pay/recharge' - } - ] } + // , + // { + // name: '自定义页面', + // links: [ + // { + // name: '促销页面', + // path: 'ss' + // }, + // { + // name: '关于我们', + // path: '/pages/pay/recharge-lo' + // }, + // { + // name: '产品与服务', + // path: '/pages/pay/recharge-l' + // }, + // { + // name: '自定义页面', + // path: '/pages/pay/recharge-' + // }, + // { + // name: '个人中心', + // path: '/pages/pay/recharge' + // } + // ] + // } ] as AppLinkGroup[] diff --git a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/CouponCard/property.vue b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/CouponCard/property.vue index 4f32c21..4cecea5 100644 --- a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/CouponCard/property.vue +++ b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/CouponCard/property.vue @@ -23,7 +23,7 @@ - + @@ -85,7 +85,7 @@ defineOptions({ name: 'CouponCardProperty' }) const props = defineProps<{ modelValue: CouponCardProperty }>() const emit = defineEmits(['update:modelValue']) const { formData } = usePropertyForm(props.modelValue, emit) - +formData.value.columns = '3'; // 优惠券列表 const couponList = ref([]) const couponSelectDialog = ref() diff --git a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionCombination/index.vue b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionCombination/index.vue index 328c049..fce5090 100644 --- a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionCombination/index.vue +++ b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionCombination/index.vue @@ -7,8 +7,9 @@
- + + 拼团活动
92人拼团成功
@@ -158,6 +159,14 @@ onMounted(() => { .wh { position: relative; padding-right: 10px; + display: flex; + align-items: center; + .new-text1{ + width:30px; + } + .new-text{ + font-weight: 700; + } } .wh::after { diff --git a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionCombination/property.vue b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionCombination/property.vue index b479582..f31e1db 100644 --- a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionCombination/property.vue +++ b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionCombination/property.vue @@ -99,6 +99,7 @@ defineOptions({ name: 'PromotionCombinationProperty' }) const props = defineProps<{ modelValue: PromotionCombinationProperty }>() const emit = defineEmits(['update:modelValue']) const { formData } = usePropertyForm(props.modelValue, emit) +formData.value.layoutType = 'threeCol'; // 活动列表 const activityList = ref([]) onMounted(async () => { diff --git a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/config.ts b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/config.ts new file mode 100644 index 0000000..75aa0ff --- /dev/null +++ b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/config.ts @@ -0,0 +1,96 @@ +import {ComponentStyle, DiyComponent} from '@/components/DiyEditor/util' + +/** 积分商城属性 */ +export interface PromotionPointProperty { + // 布局类型:单列 | 三列 + layoutType: 'oneColBigImg' | 'oneColSmallImg' | 'twoCol' + // 商品字段 + fields: { + // 商品名称 + name: PromotionPointFieldProperty + // 商品简介 + introduction: PromotionPointFieldProperty + // 商品价格 + price: PromotionPointFieldProperty + // 市场价 + marketPrice: PromotionPointFieldProperty + // 商品销量 + salesCount: PromotionPointFieldProperty + // 商品库存 + stock: PromotionPointFieldProperty + } + // 角标 + badge: { + // 是否显示 + show: boolean + // 角标图片 + imgUrl: string + } + // 按钮 + btnBuy: { + // 类型:文字 | 图片 + type: 'text' | 'img' + // 文字 + text: string + // 文字按钮:背景渐变起始颜色 + bgBeginColor: string + // 文字按钮:背景渐变结束颜色 + bgEndColor: string + // 图片按钮:图片地址 + imgUrl: string + } + // 上圆角 + borderRadiusTop: number + // 下圆角 + borderRadiusBottom: number + // 间距 + space: number + // 秒杀活动编号 + activityIds: number[] + // 组件样式 + style: ComponentStyle +} + +// 商品字段 +export interface PromotionPointFieldProperty { + // 是否显示 + show: boolean + // 颜色 + color: string +} + +// 定义组件 +export const component = { + id: 'PromotionPoint', + name: '积分商城', + icon: 'ep:present', + property: { + layoutType: 'oneColBigImg', + fields: { + name: { show: true, color: '#000' }, + introduction: { show: true, color: '#999' }, + price: { show: true, color: '#ff3000' }, + marketPrice: { show: true, color: '#c4c4c4' }, + salesCount: { show: true, color: '#c4c4c4' }, + stock: { show: false, color: '#c4c4c4' } + }, + badge: { show: false, imgUrl: '' }, + btnBuy: { + type: 'text', + text: '立即兑换', + bgBeginColor: '#FF6000', + bgEndColor: '#FE832A', + imgUrl: '' + }, + borderRadiusTop: 8, + borderRadiusBottom: 8, + space: 8, + style: { + bgType: 'color', + bgColor: '', + marginLeft: 8, + marginRight: 8, + marginBottom: 8 + } as ComponentStyle + } +} as DiyComponent diff --git a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/index.vue b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/index.vue new file mode 100644 index 0000000..4acd93f --- /dev/null +++ b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/index.vue @@ -0,0 +1,202 @@ + + + + diff --git a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/property.vue b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/property.vue new file mode 100644 index 0000000..84a429b --- /dev/null +++ b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionPoint/property.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionSeckill/index.vue b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionSeckill/index.vue index b851de6..ec2670b 100644 --- a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionSeckill/index.vue +++ b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionSeckill/index.vue @@ -6,8 +6,9 @@
- + + 限时秒杀
已有99人购买
@@ -150,6 +151,14 @@ .wh { position: relative; padding-right: 10px; + display: flex; + align-items: center; + .new-text1{ + width:30px; + } + .new-text{ + font-weight: 700; + } } .wh::after { diff --git a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue index 8753782..e4a9bf6 100644 --- a/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue +++ b/yudao-admin-vue3/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue @@ -14,7 +14,7 @@ - +
@@ -99,6 +99,7 @@ defineOptions({ name: 'PromotionSeckillProperty' }) const props = defineProps<{ modelValue: PromotionSeckillProperty }>() const emit = defineEmits(['update:modelValue']) const { formData } = usePropertyForm(props.modelValue, emit) +formData.value.layoutType = "threeCol" // 活动列表 const activityList = ref([]) onMounted(async () => { diff --git a/yudao-admin-vue3/src/components/DiyEditor/util.ts b/yudao-admin-vue3/src/components/DiyEditor/util.ts index 5154c9b..c75945f 100644 --- a/yudao-admin-vue3/src/components/DiyEditor/util.ts +++ b/yudao-admin-vue3/src/components/DiyEditor/util.ts @@ -146,7 +146,7 @@ export const PAGE_LIBS = [ components: [ 'PromotionCombination', 'PromotionSeckill', - // 'PromotionPoint', + 'PromotionPoint', 'CouponCard', 'PromotionArticle' ] diff --git a/yudao-admin-vue3/src/views/mall/promotion/point/activity/PointActivityForm.vue b/yudao-admin-vue3/src/views/mall/promotion/point/activity/PointActivityForm.vue new file mode 100644 index 0000000..a09565c --- /dev/null +++ b/yudao-admin-vue3/src/views/mall/promotion/point/activity/PointActivityForm.vue @@ -0,0 +1,227 @@ + + diff --git a/yudao-admin-vue3/src/views/mall/promotion/point/activity/index.vue b/yudao-admin-vue3/src/views/mall/promotion/point/activity/index.vue new file mode 100644 index 0000000..ceceb7b --- /dev/null +++ b/yudao-admin-vue3/src/views/mall/promotion/point/activity/index.vue @@ -0,0 +1,219 @@ + + + diff --git a/yudao-admin-vue3/src/views/mall/promotion/point/activity/pointActivity.data.ts b/yudao-admin-vue3/src/views/mall/promotion/point/activity/pointActivity.data.ts new file mode 100644 index 0000000..a3334ea --- /dev/null +++ b/yudao-admin-vue3/src/views/mall/promotion/point/activity/pointActivity.data.ts @@ -0,0 +1,55 @@ +import type { CrudSchema } from '@/hooks/web/useCrudSchemas' + +// 表单校验 +export const rules = reactive({ + spuId: [required], + sort: [required] +}) + +// CrudSchema https://doc.iocoder.cn/vue3/crud-schema/ +const crudSchemas = reactive([ + { + label: '排序', + field: 'sort', + form: { + component: 'InputNumber', + value: 0 + }, + table: { + width: 80 + } + }, + { + label: '积分商城活动商品', + field: 'spuId', + isTable: true, + isSearch: false, + form: { + colProps: { + span: 24 + } + }, + table: { + width: 300 + } + }, + { + label: '备注', + field: 'remark', + isSearch: false, + form: { + component: 'Input', + componentProps: { + type: 'textarea', + rows: 4 + }, + colProps: { + span: 24 + } + }, + table: { + width: 300 + } + } +]) +export const { allSchemas } = useCrudSchemas(crudSchemas) diff --git a/yudao-admin-vue3/src/views/mall/promotion/point/components/PointShowcase.vue b/yudao-admin-vue3/src/views/mall/promotion/point/components/PointShowcase.vue new file mode 100644 index 0000000..82e490c --- /dev/null +++ b/yudao-admin-vue3/src/views/mall/promotion/point/components/PointShowcase.vue @@ -0,0 +1,154 @@ + + + + diff --git a/yudao-admin-vue3/src/views/mall/promotion/point/components/PointTableSelect.vue b/yudao-admin-vue3/src/views/mall/promotion/point/components/PointTableSelect.vue new file mode 100644 index 0000000..d68b5f1 --- /dev/null +++ b/yudao-admin-vue3/src/views/mall/promotion/point/components/PointTableSelect.vue @@ -0,0 +1,300 @@ + + +