mirror of
				https://gitee.com/hhyykk/ipms-sjy-ui.git
				synced 2025-11-04 04:08:44 +08:00 
			
		
		
		
	mall:优惠券 商品适用范围,增加商品分类
This commit is contained in:
		@@ -9,7 +9,7 @@ export interface CouponTemplateVO {
 | 
				
			|||||||
  takeType: number
 | 
					  takeType: number
 | 
				
			||||||
  usePrice: number
 | 
					  usePrice: number
 | 
				
			||||||
  productScope: number
 | 
					  productScope: number
 | 
				
			||||||
  productSpuIds: string
 | 
					  productSpuIds: number[]
 | 
				
			||||||
  validityType: number
 | 
					  validityType: number
 | 
				
			||||||
  validStartTime: Date
 | 
					  validStartTime: Date
 | 
				
			||||||
  validEndTime: Date
 | 
					  validEndTime: Date
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -220,6 +220,10 @@ export const PromotionProductScopeEnum = {
 | 
				
			|||||||
  SPU: {
 | 
					  SPU: {
 | 
				
			||||||
    scope: 2,
 | 
					    scope: 2,
 | 
				
			||||||
    name: '指定商品参与'
 | 
					    name: '指定商品参与'
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  CATEGORY: {
 | 
				
			||||||
 | 
					    scope: 3,
 | 
				
			||||||
 | 
					    name: '指定品类参与'
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <el-tree-select
 | 
				
			||||||
 | 
					    v-model="selectCategoryId"
 | 
				
			||||||
 | 
					    :data="categoryList"
 | 
				
			||||||
 | 
					    :props="defaultProps"
 | 
				
			||||||
 | 
					    :multiple="multiple"
 | 
				
			||||||
 | 
					    :show-checkbox="multiple"
 | 
				
			||||||
 | 
					    class="w-1/1"
 | 
				
			||||||
 | 
					    node-key="id"
 | 
				
			||||||
 | 
					    placeholder="请选择商品分类"
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<script lang="ts" setup>
 | 
				
			||||||
 | 
					import { defaultProps, handleTree } from '@/utils/tree'
 | 
				
			||||||
 | 
					import * as ProductCategoryApi from '@/api/mall/product/category'
 | 
				
			||||||
 | 
					import { oneOf } from 'vue-types'
 | 
				
			||||||
 | 
					import { propTypes } from '@/utils/propTypes'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 商品分类选择组件 */
 | 
				
			||||||
 | 
					defineOptions({ name: 'ProductCategorySelect' })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const props = defineProps({
 | 
				
			||||||
 | 
					  value: oneOf([propTypes.number, propTypes.array.def([])]).isRequired, // 选中的ID
 | 
				
			||||||
 | 
					  multiple: propTypes.bool.def(false) // 是否多选
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 选中的分类ID */
 | 
				
			||||||
 | 
					const selectCategoryId = computed({
 | 
				
			||||||
 | 
					  get: () => {
 | 
				
			||||||
 | 
					    return props.value
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  set: (val: number | number[]) => {
 | 
				
			||||||
 | 
					    emit('update:modelValue', val)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 分类选择 */
 | 
				
			||||||
 | 
					const emit = defineEmits(['update:modelValue'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const categoryList = ref([]) // 分类树
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					onMounted(async () => {
 | 
				
			||||||
 | 
					  // 获得分类树
 | 
				
			||||||
 | 
					  const data = await ProductCategoryApi.getCategoryList({})
 | 
				
			||||||
 | 
					  categoryList.value = handleTree(data, 'id', 'parentId')
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
@@ -172,6 +172,12 @@
 | 
				
			|||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </el-form-item>
 | 
					      </el-form-item>
 | 
				
			||||||
 | 
					      <el-form-item
 | 
				
			||||||
 | 
					        v-if="formData.productScope === PromotionProductScopeEnum.CATEGORY.scope"
 | 
				
			||||||
 | 
					        prop="productCategoryIds"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <ProductCategorySelect v-model="formData.productCategoryIds" multiple />
 | 
				
			||||||
 | 
					      </el-form-item>
 | 
				
			||||||
    </el-form>
 | 
					    </el-form>
 | 
				
			||||||
    <template #footer>
 | 
					    <template #footer>
 | 
				
			||||||
      <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
 | 
					      <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
 | 
				
			||||||
@@ -190,6 +196,7 @@ import {
 | 
				
			|||||||
  PromotionProductScopeEnum
 | 
					  PromotionProductScopeEnum
 | 
				
			||||||
} from '@/utils/constants'
 | 
					} from '@/utils/constants'
 | 
				
			||||||
import SpuTableSelect from '@/views/mall/product/spu/components/SpuTableSelect.vue'
 | 
					import SpuTableSelect from '@/views/mall/product/spu/components/SpuTableSelect.vue'
 | 
				
			||||||
 | 
					import ProductCategorySelect from '@/views/mall/product/category/components/ProductCategorySelect.vue'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defineOptions({ name: 'CouponTemplateForm' })
 | 
					defineOptions({ name: 'CouponTemplateForm' })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -218,7 +225,8 @@ const formData = ref({
 | 
				
			|||||||
  fixedStartTerm: undefined,
 | 
					  fixedStartTerm: undefined,
 | 
				
			||||||
  fixedEndTerm: undefined,
 | 
					  fixedEndTerm: undefined,
 | 
				
			||||||
  productScope: PromotionProductScopeEnum.ALL.scope,
 | 
					  productScope: PromotionProductScopeEnum.ALL.scope,
 | 
				
			||||||
  productSpuIds: []
 | 
					  productSpuIds: [],
 | 
				
			||||||
 | 
					  productCategoryIds: []
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
const formRules = reactive({
 | 
					const formRules = reactive({
 | 
				
			||||||
  name: [{ required: true, message: '优惠券名称不能为空', trigger: 'blur' }],
 | 
					  name: [{ required: true, message: '优惠券名称不能为空', trigger: 'blur' }],
 | 
				
			||||||
@@ -235,7 +243,8 @@ const formRules = reactive({
 | 
				
			|||||||
  fixedStartTerm: [{ required: true, message: '开始领取天数不能为空', trigger: 'blur' }],
 | 
					  fixedStartTerm: [{ required: true, message: '开始领取天数不能为空', trigger: 'blur' }],
 | 
				
			||||||
  fixedEndTerm: [{ required: true, message: '开始领取天数不能为空', trigger: 'blur' }],
 | 
					  fixedEndTerm: [{ required: true, message: '开始领取天数不能为空', trigger: 'blur' }],
 | 
				
			||||||
  productScope: [{ required: true, message: '商品范围不能为空', trigger: 'blur' }],
 | 
					  productScope: [{ required: true, message: '商品范围不能为空', trigger: 'blur' }],
 | 
				
			||||||
  productSpuIds: [{ required: true, message: '商品范围不能为空', trigger: 'blur' }]
 | 
					  productSpuIds: [{ required: true, message: '商品范围不能为空', trigger: 'blur' }],
 | 
				
			||||||
 | 
					  productCategoryIds: [{ required: true, message: '分类范围不能为空', trigger: 'blur' }]
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
const formRef = ref() // 表单 Ref
 | 
					const formRef = ref() // 表单 Ref
 | 
				
			||||||
const productSpus = ref<ProductSpuApi.Spu[]>([]) // 商品列表
 | 
					const productSpus = ref<ProductSpuApi.Spu[]>([]) // 商品列表
 | 
				
			||||||
@@ -302,6 +311,12 @@ const submitForm = async () => {
 | 
				
			|||||||
          ? formData.value.validTimes[1]
 | 
					          ? formData.value.validTimes[1]
 | 
				
			||||||
          : undefined
 | 
					          : undefined
 | 
				
			||||||
    } as CouponTemplateApi.CouponTemplateVO
 | 
					    } as CouponTemplateApi.CouponTemplateVO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (formData.value.productCategoryIds?.length > 0) {
 | 
				
			||||||
 | 
					      // 改个名字?加个字段?
 | 
				
			||||||
 | 
					      data.productSpuIds = formData.value.productCategoryIds
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (formType.value === 'create') {
 | 
					    if (formType.value === 'create') {
 | 
				
			||||||
      await CouponTemplateApi.createCouponTemplate(data)
 | 
					      await CouponTemplateApi.createCouponTemplate(data)
 | 
				
			||||||
      message.success(t('common.createSuccess'))
 | 
					      message.success(t('common.createSuccess'))
 | 
				
			||||||
@@ -337,7 +352,8 @@ const resetForm = () => {
 | 
				
			|||||||
    fixedStartTerm: undefined,
 | 
					    fixedStartTerm: undefined,
 | 
				
			||||||
    fixedEndTerm: undefined,
 | 
					    fixedEndTerm: undefined,
 | 
				
			||||||
    productScope: PromotionProductScopeEnum.ALL.scope,
 | 
					    productScope: PromotionProductScopeEnum.ALL.scope,
 | 
				
			||||||
    productSpuIds: []
 | 
					    productSpuIds: [],
 | 
				
			||||||
 | 
					    productCategoryIds: []
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  formRef.value?.resetFields()
 | 
					  formRef.value?.resetFields()
 | 
				
			||||||
  productSpus.value = []
 | 
					  productSpus.value = []
 | 
				
			||||||
@@ -350,6 +366,10 @@ const getProductScope = async () => {
 | 
				
			|||||||
      // 获得商品列表
 | 
					      // 获得商品列表
 | 
				
			||||||
      productSpus.value = await ProductSpuApi.getSpuDetailList(formData.value.productSpuIds)
 | 
					      productSpus.value = await ProductSpuApi.getSpuDetailList(formData.value.productSpuIds)
 | 
				
			||||||
      break
 | 
					      break
 | 
				
			||||||
 | 
					    case PromotionProductScopeEnum.CATEGORY.scope:
 | 
				
			||||||
 | 
					      formData.value.productCategoryIds = formData.value.productSpuIds
 | 
				
			||||||
 | 
					      formData.value.productSpuIds = []
 | 
				
			||||||
 | 
					      break
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
      break
 | 
					      break
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user