From c14a00a14f018abbf02c60c4b122df712aa450d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=9D=E5=85=88=E7=91=9E?= <1490493387@qq.com> Date: Tue, 5 Jul 2022 08:03:39 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=8E=A5=E5=8F=A3=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E5=8F=98=E6=9B=B4=E5=92=8C=E5=88=A0=E9=99=A4=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Former-commit-id: 528a17fec4091a54ae63c7cc612c7671d0ed56ae --- docs/node_modules.zip.REMOVED.git-id | 1 - src/api/pms/brand.ts | 2 +- src/api/pms/goods.ts | 20 +- src/api/sms/advert.ts | 4 +- src/api/sms/coupon.ts | 22 +- src/api/system/menu.ts | 18 +- src/api/system/role.ts | 18 +- src/api/system/user.ts | 24 +- src/assets/icons/404.svg | 1 - src/assets/icons/coupon.svg | 1 + src/layout/components/TagsView/index.vue | 16 +- src/permission.ts | 2 +- src/types/api/oms/order.d.ts | 2 +- src/types/api/sms/advert.d.ts | 10 +- src/types/api/sms/coupon.ts | 106 ++++++- src/types/api/system/menu.d.ts | 6 +- src/types/api/system/user.d.ts | 2 +- src/views/pms/goods/components/GoodsInfo.vue | 23 +- src/views/pms/goods/components/GoodsStock.vue | 60 +--- src/views/pms/goods/detail.vue | 4 +- src/views/pms/goods/index.vue | 6 +- src/views/sms/advert/index.vue | 61 ++-- src/views/sms/coupon/index.vue | 292 ++++++++++++------ src/views/system/menu/components/Menu.vue | 22 +- src/views/system/role/index.vue | 84 ++--- src/views/system/user/index.vue | 62 ++-- 26 files changed, 510 insertions(+), 359 deletions(-) delete mode 100644 docs/node_modules.zip.REMOVED.git-id delete mode 100644 src/assets/icons/404.svg create mode 100644 src/assets/icons/coupon.svg diff --git a/docs/node_modules.zip.REMOVED.git-id b/docs/node_modules.zip.REMOVED.git-id deleted file mode 100644 index 3e727a0d..00000000 --- a/docs/node_modules.zip.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -fb6fea335e9ea16947a8a7fa0c57cbc1f5499104 \ No newline at end of file diff --git a/src/api/pms/brand.ts b/src/api/pms/brand.ts index ca35a384..6c29c38f 100644 --- a/src/api/pms/brand.ts +++ b/src/api/pms/brand.ts @@ -16,7 +16,7 @@ export function listBrandPages( queryParams: BrandQueryParam ): AxiosPromise { return request({ - url: '/mall-pms/api/v1/brands/page', + url: '/mall-pms/api/v1/brands/pages', method: 'get', params: queryParams, }); diff --git a/src/api/pms/goods.ts b/src/api/pms/goods.ts index a8b768a6..1ececff7 100644 --- a/src/api/pms/goods.ts +++ b/src/api/pms/goods.ts @@ -11,11 +11,11 @@ import { AxiosPromise } from 'axios'; * * @param queryParams */ -export function listPageGoods( +export function listSpuPages( queryParams: GoodsQueryParam ): AxiosPromise { return request({ - url: '/mall-pms/api/v1/goods/page', + url: '/mall-pms/api/v1/spu/pages', method: 'get', params: queryParams, }); @@ -26,9 +26,9 @@ export function listPageGoods( * * @param id */ -export function getGoodsDetail(id: string): AxiosPromise { +export function getSpuDetail(id: string): AxiosPromise { return request({ - url: '/mall-pms/api/v1/goods/' + id, + url: '/mall-pms/api/v1/spu/' + id, method: 'get', }); } @@ -38,9 +38,9 @@ export function getGoodsDetail(id: string): AxiosPromise { * * @param data */ -export function addGoods(data: object) { +export function addSpu(data: object) { return request({ - url: '/mall-pms/api/v1/goods', + url: '/mall-pms/api/v1/spu', method: 'post', data: data, }); @@ -52,9 +52,9 @@ export function addGoods(data: object) { * @param id * @param data */ -export function updateGoods(id: number, data: object) { +export function updateSpu(id: number, data: object) { return request({ - url: '/mall-pms/api/v1/goods/' + id, + url: '/mall-pms/api/v1/spu/' + id, method: 'put', data: data, }); @@ -65,9 +65,9 @@ export function updateGoods(id: number, data: object) { * * @param ids */ -export function deleteGoods(ids: string) { +export function deleteSpu(ids: string) { return request({ - url: '/mall-pms/api/v1/goods/' + ids, + url: '/mall-pms/api/v1/spu/' + ids, method: 'delete', }); } diff --git a/src/api/sms/advert.ts b/src/api/sms/advert.ts index 21f18e82..25318dcf 100644 --- a/src/api/sms/advert.ts +++ b/src/api/sms/advert.ts @@ -11,11 +11,11 @@ import { AxiosPromise } from 'axios'; * * @param queryParams */ -export function listAdvertsPage( +export function listAdvertPages( queryParams: AdvertQueryParam ): AxiosPromise { return request({ - url: '/mall-sms/api/v1/adverts', + url: '/mall-sms/api/v1/adverts/pages', method: 'get', params: queryParams, }); diff --git a/src/api/sms/coupon.ts b/src/api/sms/coupon.ts index 898e5b37..6613a4fe 100644 --- a/src/api/sms/coupon.ts +++ b/src/api/sms/coupon.ts @@ -1,7 +1,7 @@ import { CouponQueryParam, CouponPageResult, - CouponFormData, + CouponFormData } from '@/types/api/sms/coupon'; import request from '@/utils/request'; import { AxiosPromise } from 'axios'; @@ -11,25 +11,25 @@ import { AxiosPromise } from 'axios'; * * @param queryParams */ -export function listCouponsPage( +export function lisCoupontPages( queryParams: CouponQueryParam ): AxiosPromise { return request({ - url: '/mall-sms/api/v1/coupons/pagelist', + url: '/mall-sms/api/v1/coupons', method: 'get', - params: queryParams, + params: queryParams }); } /** - * 获取优惠券详情 + * 获取优惠券表单数据 * * @param id */ -export function getCouponFormDetail(id: number): AxiosPromise { +export function getCouponFormData(id: number): AxiosPromise { return request({ - url: '/mall-sms/api/v1/coupons/' + id, - method: 'get', + url: '/mall-sms/api/v1/coupons/' + id + '/form_data', + method: 'get' }); } @@ -42,7 +42,7 @@ export function addCoupon(data: CouponFormData) { return request({ url: '/mall-sms/api/v1/coupons', method: 'post', - data: data, + data: data }); } @@ -56,7 +56,7 @@ export function updateCoupon(id: number, data: CouponFormData) { return request({ url: '/mall-sms/api/v1/coupons/' + id, method: 'put', - data: data, + data: data }); } @@ -68,6 +68,6 @@ export function updateCoupon(id: number, data: CouponFormData) { export function deleteCoupons(ids: string) { return request({ url: '/mall-sms/api/v1/coupons/' + ids, - method: 'delete', + method: 'delete' }); } diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts index 291f57ae..3f3850f9 100644 --- a/src/api/system/menu.ts +++ b/src/api/system/menu.ts @@ -1,7 +1,7 @@ import { MenuFormData, MenuItem, - MenuQueryParam + MenuQueryParam, } from '@/types/api/system/menu'; import { Option } from '@/types/common'; import request from '@/utils/request'; @@ -13,7 +13,7 @@ import { AxiosPromise } from 'axios'; export function listRoutes() { return request({ url: '/youlai-admin/api/v1/menus/routes', - method: 'get' + method: 'get', }); } @@ -28,7 +28,7 @@ export function listMenus( return request({ url: '/youlai-admin/api/v1/menus', method: 'get', - params: queryParams + params: queryParams, }); } @@ -38,7 +38,7 @@ export function listMenus( export function listMenuOptions(): AxiosPromise { return request({ url: '/youlai-admin/api/v1/menus/options', - method: 'get' + method: 'get', }); } @@ -48,7 +48,7 @@ export function listMenuOptions(): AxiosPromise { export function getResource(): AxiosPromise { return request({ url: '/youlai-admin/api/v1/menus/resources', - method: 'get' + method: 'get', }); } @@ -59,7 +59,7 @@ export function getResource(): AxiosPromise { export function getMenuDetail(id: number): AxiosPromise { return request({ url: '/youlai-admin/api/v1/menus/' + id, - method: 'get' + method: 'get', }); } @@ -72,7 +72,7 @@ export function addMenu(data: MenuFormData) { return request({ url: '/youlai-admin/api/v1/menus', method: 'post', - data: data + data: data, }); } @@ -86,7 +86,7 @@ export function updateMenu(id: string, data: MenuFormData) { return request({ url: '/youlai-admin/api/v1/menus/' + id, method: 'put', - data: data + data: data, }); } @@ -98,6 +98,6 @@ export function updateMenu(id: string, data: MenuFormData) { export function deleteMenus(ids: string) { return request({ url: '/youlai-admin/api/v1/menus/' + ids, - method: 'delete' + method: 'delete', }); } diff --git a/src/api/system/role.ts b/src/api/system/role.ts index cdd15b7c..c396810b 100644 --- a/src/api/system/role.ts +++ b/src/api/system/role.ts @@ -2,7 +2,7 @@ import { RoleFormData, RolePageResult, RoleQueryParam, - RoleResourceData + RoleResourceData, } from '@/types/api/system/role'; import { Option } from '@/types/common'; @@ -20,7 +20,7 @@ export function listRolePages( return request({ url: '/youlai-admin/api/v1/roles/pages', method: 'get', - params: queryParams + params: queryParams, }); } @@ -35,7 +35,7 @@ export function listRoleOptions( return request({ url: '/youlai-admin/api/v1/roles/options', method: 'get', - params: queryParams + params: queryParams, }); } @@ -47,7 +47,7 @@ export function listRoleOptions( export function getRoleResourceIds(roleId: string): AxiosPromise { return request({ url: '/youlai-admin/api/v1/roles/' + roleId + '/resource_ids', - method: 'get' + method: 'get', }); } @@ -63,7 +63,7 @@ export function updateRoleResource( return request({ url: '/youlai-admin/api/v1/roles/' + roleId + '/resources', method: 'put', - data: data + data: data, }); } @@ -75,7 +75,7 @@ export function updateRoleResource( export function getRoleFormDetail(id: number): AxiosPromise { return request({ url: '/youlai-admin/api/v1/roles/' + id, - method: 'get' + method: 'get', }); } @@ -88,7 +88,7 @@ export function addRole(data: RoleFormData) { return request({ url: '/youlai-admin/api/v1/roles', method: 'post', - data: data + data: data, }); } @@ -102,7 +102,7 @@ export function updateRole(id: number, data: RoleFormData) { return request({ url: '/youlai-admin/api/v1/roles/' + id, method: 'put', - data: data + data: data, }); } @@ -114,6 +114,6 @@ export function updateRole(id: number, data: RoleFormData) { export function deleteRoles(ids: string) { return request({ url: '/youlai-admin/api/v1/roles/' + ids, - method: 'delete' + method: 'delete', }); } diff --git a/src/api/system/user.ts b/src/api/system/user.ts index 4cc23ceb..3d1346c8 100644 --- a/src/api/system/user.ts +++ b/src/api/system/user.ts @@ -4,7 +4,7 @@ import { UserFormData, UserInfo, UserPageResult, - UserQueryParam + UserQueryParam, } from '@/types/api/system/user'; /** @@ -13,7 +13,7 @@ import { export function getUserInfo(): AxiosPromise { return request({ url: '/youlai-admin/api/v1/users/me', - method: 'get' + method: 'get', }); } @@ -28,7 +28,7 @@ export function listUserPages( return request({ url: '/youlai-admin/api/v1/users/pages', method: 'get', - params: queryParams + params: queryParams, }); } @@ -40,7 +40,7 @@ export function listUserPages( export function getUserFormData(userId: number): AxiosPromise { return request({ url: '/youlai-admin/api/v1/users/' + userId + '/form_data', - method: 'get' + method: 'get', }); } @@ -53,7 +53,7 @@ export function addUser(data: any) { return request({ url: '/youlai-admin/api/v1/users', method: 'post', - data: data + data: data, }); } @@ -67,7 +67,7 @@ export function updateUser(id: number, data: UserFormData) { return request({ url: '/youlai-admin/api/v1/users/' + id, method: 'put', - data: data + data: data, }); } @@ -81,7 +81,7 @@ export function updateUserPart(id: number, data: any) { return request({ url: '/youlai-admin/api/v1/users/' + id, method: 'patch', - data: data + data: data, }); } @@ -93,7 +93,7 @@ export function updateUserPart(id: number, data: any) { export function deleteUsers(ids: string) { return request({ url: '/youlai-admin/api/v1/users/' + ids, - method: 'delete' + method: 'delete', }); } @@ -106,7 +106,7 @@ export function downloadTemplate() { return request({ url: '/youlai-admin/api/v1/users/template', method: 'get', - responseType: 'arraybuffer' + responseType: 'arraybuffer', }); } @@ -121,7 +121,7 @@ export function exportUser(queryParams: UserQueryParam) { url: '/youlai-admin/api/v1/users/_export', method: 'get', params: queryParams, - responseType: 'arraybuffer' + responseType: 'arraybuffer', }); } @@ -140,7 +140,7 @@ export function importUser(deptId: number, roleIds: string, file: File) { method: 'post', data: formData, headers: { - 'Content-Type': 'multipart/form-data' - } + 'Content-Type': 'multipart/form-data', + }, }); } diff --git a/src/assets/icons/404.svg b/src/assets/icons/404.svg deleted file mode 100644 index 6df50190..00000000 --- a/src/assets/icons/404.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/icons/coupon.svg b/src/assets/icons/coupon.svg new file mode 100644 index 00000000..2f952b24 --- /dev/null +++ b/src/assets/icons/coupon.svg @@ -0,0 +1 @@ + diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue index ac63fb93..bff87480 100644 --- a/src/layout/components/TagsView/index.vue +++ b/src/layout/components/TagsView/index.vue @@ -10,7 +10,7 @@ :key="tag.path" :data-path="tag.path" :class="isActive(tag) ? 'active' : ''" - :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }" + :to="{ path: tag.path, query: tag.query }" class="tags-view__item" @click.middle="!isAffix(tag) ? closeSelectedTag(tag) : ''" @contextmenu.prevent="openMenu(tag, $event)" @@ -66,7 +66,7 @@ import { ref, watch, onMounted, - ComponentInternalInstance, + ComponentInternalInstance } from 'vue'; import path from 'path-browserify'; @@ -103,11 +103,11 @@ watch( }, { //初始化立即执行 - immediate: true, + immediate: true } ); -watch(visible, (value) => { +watch(visible, value => { if (value) { document.body.addEventListener('click', closeMenu); } else { @@ -115,17 +115,17 @@ watch(visible, (value) => { } }); -function filterAffixTags(routes: RouteRecordRaw[], basePath = '/') { +function filterAffixTags(routes: any[], basePath = '/') { let tags: TagView[] = []; - routes.forEach((route) => { + routes.forEach(route => { if (route.meta && route.meta.affix) { const tagPath = path.resolve(basePath, route.path); tags.push({ fullPath: tagPath, path: tagPath, name: route.name, - meta: { ...route.meta }, + meta: { ...route.meta } }); } @@ -205,7 +205,7 @@ function refreshSelectedTag(view: TagView) { tagsView.delCachedView(view); const { fullPath } = view; nextTick(() => { - router.replace({ path: '/redirect' + fullPath }).catch((err) => { + router.replace({ path: '/redirect' + fullPath }).catch(err => { console.warn(err); }); }); diff --git a/src/permission.ts b/src/permission.ts index b6c53801..c0d078af 100644 --- a/src/permission.ts +++ b/src/permission.ts @@ -21,7 +21,7 @@ router.beforeEach(async (to, from, next) => { const hasGetUserInfo = user.roles.length > 0; if (hasGetUserInfo) { if (to.matched.length === 0) { - from.name ? next({ name: from.name }) : next('/401'); + from.name ? next({ name: from.name as any }) : next('/401'); } else { next(); } diff --git a/src/types/api/oms/order.d.ts b/src/types/api/oms/order.d.ts index 695713d2..09147f32 100644 --- a/src/types/api/oms/order.d.ts +++ b/src/types/api/oms/order.d.ts @@ -19,7 +19,7 @@ export interface Order { payType: number; status: number; totalQuantity: number; - gmtCreate: string; + createTime: string; memberId: string; sourceType: number; orderItems: OrderItem[]; diff --git a/src/types/api/sms/advert.d.ts b/src/types/api/sms/advert.d.ts index 610ae57d..e1cce771 100644 --- a/src/types/api/sms/advert.d.ts +++ b/src/types/api/sms/advert.d.ts @@ -1,14 +1,14 @@ import { PageQueryParam, PageResult } from '../base'; /** - * 广告查询参数类型声明 + * 广告查询参数类型 */ export interface AdvertQueryParam extends PageQueryParam { - title?: string; + keywords: string; } /** - * 广告分页列表项声明 + * 广告分页列表项 */ export interface AdvertItem { id: string; @@ -18,12 +18,12 @@ export interface AdvertItem { } /** - * 广告分页项类型声明 + * 广告分页项类型 */ export type AdvertPageResult = PageResult; /** - * 广告表单类型声明 + * 广告表单类型 */ export interface AdvertFormData { id?: number; diff --git a/src/types/api/sms/coupon.ts b/src/types/api/sms/coupon.ts index 5f81ee6b..29a4b795 100644 --- a/src/types/api/sms/coupon.ts +++ b/src/types/api/sms/coupon.ts @@ -1,33 +1,121 @@ -import { PageQueryParam ,PageResult} from '../base'; +import { PageQueryParam, PageResult } from '../base'; +import { Option } from '@/types/common'; /** * 优惠券查询参数类型 */ export interface CouponQueryParam extends PageQueryParam { status?: number; + keywords?: string; } /** * 优惠券分页列表项 */ - export interface CouponItem { +export interface CouponItem { id: string; name: string; - type: string; + code: string; + platformLabel: string; + typeLabel: string; + faceValueLabel: string; + validityPeriodLabel: string; } /** - *优惠券分页项类型 + *优惠券分页 */ export type CouponPageResult = PageResult; - - /** - * 广告表单类型声明 + * 优惠券表单类型 */ - export interface CouponFormData { +export interface CouponFormData { + /** + * ID + */ id?: number; + /** + * 优惠券名称 + */ name: string; - type: string; + /** + * 优惠券码 + */ + code: string; + /** + * 使用平台(0:全平台;1:移动端;2:PC;) + */ + platform: number; + /** + * 优惠券类型(1:满减券;2:直减券;3:折扣券) + */ + type: number; + /** + * 优惠券面值 + */ + faceValue: number; + /** + * 优惠券折扣 + */ + discount: number; + /** + * 发放数量 + */ + issueCount: number; + /** + * 使用门槛(0:无门槛) + */ + minPoint: number; + /** + * 每人限领张数(-1:无限制) + */ + perLimit: number; + /** + * 有效期类型(1:自领取之日起有效天数;2:有效起止时间) + */ + validityPeriodType: number; + /** + * 自领取之日起有效天数 + */ + validityDays: number; + /** + * 有效期起始时间 + */ + validityBeginTime: string; + /** + * 有效期截止时间 + */ + validityEndTime: string; + /** + * 使用类型(0:全场通用;1:指定商品分类;2:指定商品) + */ + useType: number; + + /** + * 使用类型:指定商品分类 + */ + spuCategoryList: CouponSpuCategory[]; + + /** + * 使用类型:指定商品 + */ + spuList: CouponSpu[]; + + /** + * 使用说明 + */ + remark: string; +} + +export interface CouponSpuCategory { + id: number; + categoryId: number; + categoryName: string; +} + +export interface CouponSpu { + id: number; + spuId: number; + spuName: string; } diff --git a/src/types/api/system/menu.d.ts b/src/types/api/system/menu.d.ts index d0c30366..3d4a848c 100644 --- a/src/types/api/system/menu.d.ts +++ b/src/types/api/system/menu.d.ts @@ -2,7 +2,7 @@ * 菜单查询参数类型声明 */ export interface MenuQueryParam { - name?: string; + name: string; } /** @@ -12,8 +12,8 @@ export interface MenuQueryParam { export interface MenuItem { id: number; parentId: number; - gmtCreate: string; - gmtModified: string; + createTime: string; + updateTime: string; name: string; icon: string; component: string; diff --git a/src/types/api/system/user.d.ts b/src/types/api/system/user.d.ts index 795ed6f8..7e459b8a 100644 --- a/src/types/api/system/user.d.ts +++ b/src/types/api/system/user.d.ts @@ -33,7 +33,7 @@ export interface UserItem { status: number; deptName: string; roleNames: string; - gmtCreate: string; + createTime: string; } /** diff --git a/src/views/pms/goods/components/GoodsInfo.vue b/src/views/pms/goods/components/GoodsInfo.vue index 1e4ddd93..5b765530 100644 --- a/src/views/pms/goods/components/GoodsInfo.vue +++ b/src/views/pms/goods/components/GoodsInfo.vue @@ -53,10 +53,7 @@
- 商品主图 设为主图 + >设为主图
@@ -120,7 +118,7 @@ const state = reactive({ brandOptions: [] as Array, // 商品图册 pictures: [ - { url: undefined, main: true }, // main = true 代表主图,可切换 + { url: undefined, main: true }, // main为true代表主图,可切换 { url: undefined, main: false }, { url: undefined, main: false }, { url: undefined, main: false }, @@ -142,10 +140,12 @@ function loadData() { }); const goodsId = goodsInfo.value.id; if (goodsId) { + // 主图 const mainPicUrl = goodsInfo.value.picUrl; if (mainPicUrl) { state.pictures.filter((item) => item.main)[0].url = mainPicUrl; } + // 商品副图 const subPicUrls = goodsInfo.value.subPicUrls; if (subPicUrls && subPicUrls.length > 0) { for (let i = 1; i <= subPicUrls.length; i++) { @@ -175,18 +175,21 @@ function handlePrev() { function handleNext() { dataFormRef.value.validate((valid: any) => { if (valid) { - // 商品图片 + // 商品主图 const mainPicUrl = state.pictures .filter((item) => item.main == true && item.url) .map((item) => item.url); if (mainPicUrl && mainPicUrl.length > 0) { goodsInfo.value.picUrl = mainPicUrl[0]; } - const subPicUrl = state.pictures + // 商品副图 + const subPicUrls = state.pictures .filter((item) => item.main == false && item.url) .map((item) => item.url); - if (subPicUrl && subPicUrl.length > 0) { - goodsInfo.value.subPicUrls = subPicUrl; + if (subPicUrls && subPicUrls.length > 0) { + goodsInfo.value.subPicUrls = subPicUrls; + } else { + goodsInfo.value.subPicUrls = []; } emit('next'); } diff --git a/src/views/pms/goods/components/GoodsStock.vue b/src/views/pms/goods/components/GoodsStock.vue index 2e52cefc..ae27006e 100644 --- a/src/views/pms/goods/components/GoodsStock.vue +++ b/src/views/pms/goods/components/GoodsStock.vue @@ -180,34 +180,23 @@ @@ -10,21 +10,21 @@ import { ElForm, ElMessage, ElMessageBox } from 'element-plus'; import { Search, Plus, Edit, Refresh, Delete } from '@element-plus/icons-vue'; import SingleUpload from '@/components/Upload/SingleUpload.vue'; import { - listAdvertsPage, + listAdvertPages, getAdvertFormDetail, updateAdvert, addAdvert, - deleteAdverts, + deleteAdverts } from '@/api/sms/advert'; import { Dialog } from '@/types/common'; import { AdvertFormData, AdvertItem, - AdvertQueryParam, + AdvertQueryParam } from '@/types/api/sms/advert'; -const queryFormRef = ref(ElForm); // 属性名必须和元素的ref属性值一致 -const dataFormRef = ref(ElForm); // 属性名必须和元素的ref属性值一致 +const queryFormRef = ref(ElForm); +const dataFormRef = ref(ElForm); const state = reactive({ loading: true, @@ -37,17 +37,16 @@ const state = reactive({ queryParams: { pageNum: 1, pageSize: 10 } as AdvertQueryParam, advertList: [] as AdvertItem[], total: 0, - dialog: {} as Dialog, + dialog: { title: '', visible: false } as Dialog, formData: { status: 1, - sort: 100, + sort: 100 } as AdvertFormData, rules: { title: [{ required: true, message: '请输入广告名称', trigger: 'blur' }], - beginTime: [{ required: true, message: '请填写开始时间', trigger: 'blur' }], - endTime: [{ required: true, message: '请填写结束时间', trigger: 'blur' }], - picUrl: [{ required: true, message: '请上传广告图片', trigger: 'blur' }], + picUrl: [{ required: true, message: '请上传广告图片', trigger: 'blur' }] }, + validityPeriod: '' as any }); const { @@ -59,11 +58,12 @@ const { dialog, formData, rules, + validityPeriod } = toRefs(state); function handleQuery() { state.loading = true; - listAdvertsPage(state.queryParams).then(({ data }) => { + listAdvertPages(state.queryParams).then(({ data }) => { state.advertList = data.list; state.total = data.total; state.loading = false; @@ -84,18 +84,19 @@ function handleSelectionChange(selection: any) { function handleAdd() { state.dialog = { title: '添加广告', - visible: true, + visible: true }; } function handleUpdate(row: any) { state.dialog = { title: '修改广告', - visible: true, + visible: true }; const advertId = row.id || state.ids; - getAdvertFormDetail(advertId).then((response) => { - state.formData = response.data; + getAdvertFormDetail(advertId).then(({ data }) => { + state.formData = data; + validityPeriod.value = [data.beginTime, data.endTime]; }); } @@ -104,6 +105,12 @@ function submitForm() { if (valid) { const avertId = state.formData.id; if (avertId) { + // 有效期转换 + if (validityPeriod.value) { + formData.value.beginTime = validityPeriod.value[0]; + formData.value.endTime = validityPeriod.value[1]; + } + updateAdvert(avertId, state.formData).then(() => { ElMessage.success('修改成功'); cancel(); @@ -131,7 +138,7 @@ function handleDelete(row: any) { ElMessageBox.confirm('确认删除已选中的数据项?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', - type: 'warning', + type: 'warning' }) .then(() => { deleteAdverts(ids).then(() => { @@ -166,8 +173,8 @@ onMounted(() => { @@ -252,16 +259,14 @@ onMounted(() => { - + - ~ - diff --git a/src/views/sms/coupon/index.vue b/src/views/sms/coupon/index.vue index 1ea17f6c..49cd6fdb 100644 --- a/src/views/sms/coupon/index.vue +++ b/src/views/sms/coupon/index.vue @@ -1,6 +1,7 @@ + @@ -9,45 +10,50 @@ import { onMounted, reactive, ref, toRefs } from 'vue'; import { ElForm, ElMessage, ElMessageBox } from 'element-plus'; import { Search, Plus, Edit, Refresh, Delete } from '@element-plus/icons-vue'; import { - listCouponsPage, - getCouponFormDetail, + lisCoupontPages, + getCouponFormData, updateCoupon, addCoupon, - deleteCoupons, + deleteCoupons } from '@/api/sms/coupon'; import { Dialog } from '@/types/common'; import { CouponItem, CouponQueryParam, - CouponFormData, + CouponFormData } from '@/types/api/sms/coupon'; -const queryFormRef = ref(ElForm); // 属性名必须和元素的ref属性值一致 -const dataFormRef = ref(ElForm); // 属性名必须和元素的ref属性值一致 +const queryFormRef = ref(ElForm); +const dataFormRef = ref(ElForm); const state = reactive({ loading: true, - // 选中ID数组 ids: [], - // 非单个禁用 single: true, - // 非多个禁用 multiple: true, queryParams: { pageNum: 1, pageSize: 10 } as CouponQueryParam, couponList: [] as CouponItem[], total: 0, - dialog: {} as Dialog, + dialog: { + title: '', + visible: false + } as Dialog, formData: { - id: undefined, - name: '', - type: '', + type: 1, + platform: 0, + validityPeriodType: 1, + perLimit: 1, + useType: 0 //使用类型(默认全场通用) } as CouponFormData, rules: { title: [{ required: true, message: '请输入优惠券名称', trigger: 'blur' }], beginTime: [{ required: true, message: '请填写开始时间', trigger: 'blur' }], endTime: [{ required: true, message: '请填写结束时间', trigger: 'blur' }], - picUrl: [{ required: true, message: '请上传优惠券图片', trigger: 'blur' }], + picUrl: [{ required: true, message: '请上传优惠券图片', trigger: 'blur' }] }, + validityPeriod: '' as any, + totalCountChecked: false, + perLimitChecked: false }); const { @@ -59,17 +65,25 @@ const { dialog, formData, rules, + validityPeriod, + totalCountChecked, + perLimitChecked } = toRefs(state); +/** + * 查询 + */ function handleQuery() { state.loading = true; - listCouponsPage(state.queryParams).then(({ data }) => { - state.couponList = data.list; - state.total = data.total; - state.loading = false; + lisCoupontPages(queryParams.value).then(({ data }) => { + couponList.value = data.list; + total.value = data.total; + loading.value = false; }); } - +/** + * 查询重置 + */ function resetQuery() { queryFormRef.value.resetFields(); handleQuery(); @@ -82,36 +96,49 @@ function handleSelectionChange(selection: any) { } function handleAdd() { - state.dialog = { + dialog.value = { title: '添加优惠券', - visible: true, + visible: true }; } function handleUpdate(row: any) { - state.dialog = { + dialog.value = { title: '修改优惠券', - visible: true, + visible: true }; - const advertId = row.id || state.ids; - getCouponFormDetail(advertId).then((response) => { - state.formData = response.data; + const id = row.id; + getCouponFormData(id).then(({ data }) => { + formData.value = data; + perLimitChecked.value = data.perLimit == -1; + totalCountChecked.value = data.issueCount == -1; + // 有效期转换 + if (data.validityPeriodType == 2) { + validityPeriod.value = [data.validityBeginTime, data.validityEndTime]; + } }); } function submitForm() { + console.log('validityPeriod', validityPeriod.value[0]); dataFormRef.value.validate((valid: any) => { if (valid) { - const avertId = state.formData.id; - if (avertId) { - updateCoupon(avertId, state.formData).then(() => { - ElMessage.success('修改成功'); + // 有效期转换 + if (formData.value.validityPeriodType == 2 && validityPeriod.value) { + formData.value.validityBeginTime = validityPeriod.value[0]; + formData.value.validityEndTime = validityPeriod.value[1]; + } + + const couponId = formData.value.id; + if (couponId) { + updateCoupon(couponId, formData.value).then(() => { + ElMessage.success('修改优惠券成功'); cancel(); handleQuery(); }); } else { - addCoupon(state.formData).then(() => { - ElMessage.success('新增成功'); + addCoupon(formData.value).then(() => { + ElMessage.success('新增优惠券成功'); cancel(); handleQuery(); }); @@ -120,18 +147,32 @@ function submitForm() { }); } +const handleTotalCountChange = (val: any) => { + formData.value.issueCount = -1; +}; + +const hanclePerLimitChange = (val: any) => { + formData.value.perLimit = -1; +}; + +/** + * 表单取消 + */ function cancel() { state.formData.id = undefined; dataFormRef.value.resetFields(); state.dialog.visible = false; } +/** + * 删除优惠券 + */ function handleDelete(row: any) { const ids = [row.id || state.ids].join(','); ElMessageBox.confirm('确认删除已选中的数据项?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', - type: 'warning', + type: 'warning' }) .then(() => { deleteCoupons(ids).then(() => { @@ -164,10 +205,10 @@ onMounted(() => { > - + @@ -188,29 +229,27 @@ onMounted(() => { > - - - - - - - - - - + + + + + + + + +