Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
7c8f7d57
authored
Oct 23, 2023
by
KONGDY-PC\Kongdy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
满减页面布局
parent
54cce467
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
408 additions
and
0 deletions
+408
-0
src/views/mall/promotion/rewardActivity/RewardForm.vue
+195
-0
src/views/mall/promotion/rewardActivity/index.vue
+213
-0
No files found.
src/views/mall/promotion/rewardActivity/RewardForm.vue
0 → 100644
View file @
7c8f7d57
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisible"
>
<el-form
ref=
"formRef"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"活动名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入活动名称"
/>
</el-form-item>
<el-form-item
label=
"活动时间"
prop=
"startAndEndTime"
>
<el-date-picker
v-model=
"formData.startAndEndTime"
type=
"datetimerange"
range-separator=
"-"
:start-placeholder=
"t('common.startTimeText')"
:end-placeholder=
"t('common.endTimeText')"
/>
</el-form-item>
<el-form-item
label=
"条件类型"
prop=
"conditionType"
>
<el-radio-group
v-model=
"formData.conditionType"
>
<el-radio
v-for=
"dict in getIntDictOptions(DICT_TYPE.PROMOTION_CONDITION_TYPE)"
:key=
"dict.value"
:label=
"parseInt(dict.value)"
>
{{
dict
.
label
}}
</el-radio
>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"优惠设置"
>
<!-- TODO 芋艿:待实现! -->
</el-form-item>
<el-form-item
label=
"活动商品"
prop=
"productScope"
>
<el-radio-group
v-model=
"formData.productScope"
>
<el-radio
v-for=
"dict in getIntDictOptions(DICT_TYPE.PROMOTION_PRODUCT_SCOPE)"
:key=
"dict.value"
:label=
"parseInt(dict.value)"
>
{{
dict
.
label
}}
</el-radio
>
</el-radio-group>
</el-form-item>
<el-form-item
v-if=
"formData.productScope === PromotionProductScopeEnum.SPU.scope"
prop=
"productSpuIds"
>
<el-select
v-model=
"formData.productSpuIds"
placeholder=
"请选择活动商品"
clearable
size=
"small"
multiple
filterable
style=
"width: 400px"
>
<el-option
v-for=
"item in productSpus"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
<span
style=
"float: left"
>
{{
item
.
name
}}
</span>
<span
style=
"float: right; font-size: 13px; color: #8492a6"
>
¥
{{
(
item
.
price
/
100.0
).
toFixed
(
2
)
}}
</span
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入备注"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
lang=
"ts"
setup
>
import
{
getSpuSimpleList
}
from
'@/api/mall/product/spu'
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
*
as
ProductBrandApi
from
'@/api/mall/product/brand'
import
{
PromotionConditionTypeEnum
,
PromotionProductScopeEnum
,
PromotionActivityStatusEnum
}
from
'@/utils/constants'
// 商品数据
const
productSpus
=
ref
<
any
[]
>
([])
/** 初始化 **/
onMounted
(()
=>
{
getSpuSimpleList
().
then
((
response
)
=>
{
productSpus
.
value
=
response
})
})
defineOptions
({
name
:
'ProductBrandForm'
})
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
const
dialogTitle
=
ref
(
''
)
// 弹窗的标题
const
formLoading
=
ref
(
false
)
// 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
const
formType
=
ref
(
''
)
// 表单的类型:create - 新增;update - 修改
const
formData
=
ref
({
id
:
undefined
,
name
:
undefined
,
startAndEndTime
:
undefined
,
startTime
:
undefined
,
endTime
:
undefined
,
conditionType
:
PromotionConditionTypeEnum
.
PRICE
.
type
,
remark
:
undefined
,
productScope
:
PromotionProductScopeEnum
.
ALL
.
scope
,
productSpuIds
:
undefined
,
rules
:
undefined
})
const
formRules
=
reactive
({
name
:
[{
required
:
true
,
message
:
'活动名称不能为空'
,
trigger
:
'blur'
}],
startAndEndTime
:
[{
required
:
true
,
message
:
'活动时间不能为空'
,
trigger
:
'blur'
}],
conditionType
:
[{
required
:
true
,
message
:
'条件类型不能为空'
,
trigger
:
'change'
}],
productScope
:
[{
required
:
true
,
message
:
'商品范围不能为空'
,
trigger
:
'blur'
}],
productSpuIds
:
[{
required
:
true
,
message
:
'商品范围不能为空'
,
trigger
:
'blur'
}]
})
const
formRef
=
ref
()
// 表单 Ref
/** 打开弹窗 */
const
open
=
async
(
type
:
string
,
id
?:
number
)
=>
{
dialogVisible
.
value
=
true
dialogTitle
.
value
=
t
(
'action.'
+
type
)
formType
.
value
=
type
resetForm
()
// 修改时,设置数据
if
(
id
)
{
formLoading
.
value
=
true
try
{
// formData.value = await ProductBrandApi.getBrand(id)
formData
.
value
=
{
conditionType
:
10
,
description
:
''
,
id
:
undefined
,
name
:
'测试活动'
,
picUrl
:
''
,
productScope
:
2
,
productSpuIds
:
[
634
],
remark
:
'测试备注'
,
startAndEndTime
:
[
new
Date
(),
new
Date
(
'2023-12-31'
)],
status
:
0
}
}
finally
{
formLoading
.
value
=
false
}
}
}
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
/** 提交表单 */
const
emit
=
defineEmits
([
'success'
])
// 定义 success 事件,用于操作成功后的回调
const
submitForm
=
async
()
=>
{
// 校验表单
if
(
!
formRef
)
return
const
valid
=
await
formRef
.
value
.
validate
()
if
(
!
valid
)
return
console
.
log
(
formData
.
value
)
message
.
success
(
'已在控制台打印数据'
)
return
// 提交请求
formLoading
.
value
=
true
try
{
const
data
=
formData
.
value
as
ProductBrandApi
.
BrandVO
if
(
formType
.
value
===
'create'
)
{
await
ProductBrandApi
.
createBrand
(
data
)
message
.
success
(
t
(
'common.createSuccess'
))
}
else
{
await
ProductBrandApi
.
updateBrand
(
data
)
message
.
success
(
t
(
'common.updateSuccess'
))
}
dialogVisible
.
value
=
false
// 发送操作成功的事件
emit
(
'success'
)
}
finally
{
formLoading
.
value
=
false
}
}
/** 重置表单 */
const
resetForm
=
()
=>
{
formData
.
value
=
{
id
:
undefined
,
name
:
''
,
picUrl
:
''
,
status
:
CommonStatusEnum
.
ENABLE
,
description
:
''
}
formRef
.
value
?.
resetFields
()
}
</
script
>
src/views/mall/promotion/rewardActivity/index.vue
0 → 100644
View file @
7c8f7d57
<
template
>
<!-- 搜索工作栏 -->
<ContentWrap>
<el-form
class=
"-mb-15px"
:model=
"queryParams"
ref=
"queryFormRef"
:inline=
"true"
label-width=
"68px"
>
<el-form-item
label=
"活动名称"
prop=
"name"
>
<el-input
v-model=
"queryParams.name"
placeholder=
"请输入活动名称"
clearable
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item
label=
"活动状态"
prop=
"status"
>
<el-select
v-model=
"queryParams.status"
placeholder=
"请选择活动状态"
clearable
class=
"!w-240px"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.PROMOTION_ACTIVITY_STATUS)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"活动时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
value-format=
"YYYY-MM-DD HH:mm:ss"
type=
"daterange"
start-placeholder=
"活动开始日期"
end-placeholder=
"活动结束日期"
:default-time=
"[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
><Icon
icon=
"ep:search"
class=
"mr-5px"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
<el-button
type=
"primary"
plain
@
click=
"openForm('create')"
v-hasPermi=
"['product:brand:create']"
>
<Icon
icon=
"ep:plus"
class=
"mr-5px"
/>
新增
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table
v-loading=
"loading"
:data=
"list"
row-key=
"id"
default-expand-all
>
<el-table-column
label=
"活动名称"
prop=
"name"
/>
<el-table-column
label=
"活动开始时间"
align=
"center"
prop=
"sort[0]"
:formatter=
"dateFormatter"
/>
<el-table-column
label=
"活动结束时间"
align=
"center"
prop=
"sort[1]"
:formatter=
"dateFormatter"
/>
<el-table-column
label=
"状态"
align=
"center"
prop=
"status"
>
<template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.PROMOTION_ACTIVITY_STATUS"
:value=
"scope.row.status"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"180"
:formatter=
"dateFormatter"
/>
<el-table-column
label=
"操作"
align=
"center"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"primary"
@
click=
"openForm('update', scope.row.id)"
v-hasPermi=
"['product:brand:update']"
>
编辑
</el-button>
<el-button
link
type=
"danger"
@
click=
"handleDelete(scope.row.id)"
v-hasPermi=
"['product:brand:delete']"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total=
"total"
v-model:page=
"queryParams.pageNo"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</ContentWrap>
<!-- 表单弹窗:添加/修改 -->
<RewardForm
ref=
"formRef"
@
success=
"getList"
/>
</template>
<
script
lang=
"ts"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
*
as
ProductBrandApi
from
'@/api/mall/product/brand'
import
RewardForm
from
'./RewardForm.vue'
defineOptions
({
name
:
'PromotionRewardActivity'
})
const
message
=
useMessage
()
// 消息弹窗
const
{
t
}
=
useI18n
()
// 国际化
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
<
any
[]
>
([])
// 列表的数据
const
queryParams
=
reactive
({
pageNo
:
1
,
pageSize
:
10
,
name
:
undefined
,
status
:
undefined
,
createTime
:
[]
})
const
queryFormRef
=
ref
()
// 搜索的表单
/** 查询列表 */
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
// const data = await ProductBrandApi.getBrandParam(queryParams)
const
data
=
{
list
:
[
{
createTime
:
1693463998000
,
description
:
''
,
id
:
3
,
name
:
'索尼'
,
picUrl
:
'http://127.0.0.1:48080/admin-api/infra/file/4/get/f5b7a536306cd1180a42a2211a8212dc23de6b949d30c30d036caa063042f928.png'
,
sort
:
[
+
new
Date
(),
+
new
Date
(
'2023-12-31'
)],
status
:
10
}
],
total
:
1
}
list
.
value
=
data
.
list
total
.
value
=
data
.
total
}
finally
{
loading
.
value
=
false
}
}
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
console
.
log
(
queryParams
)
message
.
success
(
'已打印搜索参数'
)
return
getList
()
}
/** 重置按钮操作 */
const
resetQuery
=
()
=>
{
message
.
success
(
'重置查询表单获取数据'
)
return
queryFormRef
.
value
.
resetFields
()
handleQuery
()
}
/** 添加/修改操作 */
const
formRef
=
ref
()
const
openForm
=
(
type
:
string
,
id
?:
number
)
=>
{
formRef
.
value
.
open
(
type
,
id
)
}
/** 删除按钮操作 */
const
handleDelete
=
async
(
id
:
number
)
=>
{
try
{
// 删除的二次确认
await
message
.
delConfirm
()
message
.
success
(
'您以确认删除'
)
return
// 发起删除
await
ProductBrandApi
.
deleteBrand
(
id
)
message
.
success
(
t
(
'common.delSuccess'
))
// 刷新列表
await
getList
()
}
catch
{}
}
/** 初始化 **/
onMounted
(()
=>
{
getList
()
})
</
script
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment