java-mall-admin/src/views/store/activity/surcharge/index.vue
2024-11-01 16:24:11 +08:00

272 lines
7.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="store-activity-base-container">
<vab-query-form>
<vab-query-form-right-panel :span="24">
<el-form :inline="true" :model="queryForm" @submit.native.prevent>
<el-form-item>
<el-input
v-model.trim="queryForm.activity_name"
clearable
:placeholder="__('请输入活动标题')"
style="margin-right: 10px"
/>
</el-form-item>
<el-form-item>
<el-select
v-model="queryForm.store_id"
clearable
filterable
:loading="loading"
:placeholder="__('请输入店铺名称')"
remote
:remote-method="remoteFindUserList"
reserve-keyword
>
<el-option
v-for="item in dataList"
:key="item.store_id"
:label="item.store_name"
:value="item.store_id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-select
v-model="queryForm.activity_state"
clearable
:placeholder="__('请选择活动状态')"
>
<el-option :label="__('未开启')" :value="0" /><el-option :label="__('正常')" :value="1" /><el-option :label="__('已结束')" :value="2" /><el-option :label="__('商家关闭')" :value="3" /><el-option :label="__('管理员关闭')" :value="4" />
</el-select>
</el-form-item>
<el-form-item>
<el-button icon="el-icon-search" type="primary" @click="queryData">
{{ __('查询') }}
</el-button>
</el-form-item>
</el-form>
</vab-query-form-right-panel>
</vab-query-form>
<el-table
v-loading="listLoading"
border
:data="list"
:height="tableConfig.height"
>
<el-table-column
align="center"
:label="__('店铺编号')"
prop="store_id"
show-overflow-tooltip
/>
<el-table-column
align="center"
:label="__('店铺名称')"
prop="store_name"
show-overflow-tooltip
/>
<el-table-column
align="center"
:label="__('活动标题')"
prop="activity_title"
show-overflow-tooltip
/>
<el-table-column
align="center"
:formatter="formatStarttime"
:label="__('活动开始时间')"
prop="activity_starttime"
show-overflow-tooltip
width="160"
/>
<el-table-column
align="center"
:formatter="formatEndtime"
:label="__('活动结束时间')"
prop="activity_endtime"
show-overflow-tooltip
width="160"
/>
<el-table-column
align="center"
:label="__('等级要求')"
prop="activity_use_level_name"
show-overflow-tooltip
/>
<el-table-column
align="center"
:label="__('活动状态')"
prop="activity_state"
show-overflow-tooltip
width="130"
>
<template slot-scope="scope">
<el-button
v-if="scope.row.activity_state === 0"
type="info"
@click="changeState(scope.row.activity_id, 1)"
>
{{ __('未开启') }}
</el-button>
<el-button
v-if="scope.row.activity_state === 1"
type="success"
@click="changeState(scope.row.activity_id, 4)"
>
{{ __('正常') }}
</el-button>
<el-button
v-if="scope.row.activity_state === 2"
disabled
type="danger"
>
{{ __('已结束') }}
</el-button>
<el-button
v-if="scope.row.activity_state === 3"
type="success"
@click="changeState(scope.row.activity_id, 0)"
>
{{ __('商家关闭') }}
</el-button>
<el-button
v-if="scope.row.activity_state === 4"
type="success"
@click="changeState(scope.row.activity_id, 0)"
>
{{ __('管理员关闭') }}
</el-button>
</template>
</el-table-column>
<el-table-column
align="center"
:label="__('活动商品')"
prop="item_id"
show-overflow-tooltip
width="200"
>
<template slot-scope="scope">
<div v-if="scope.row.item">
<el-row v-for="item in scope.row.item" :key="item.item_id">
{{ item.product_item_name }}
</el-row>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
:label="__('活动规则')"
show-overflow-tooltip
width="250"
>
<template slot-scope="scope">
<div v-if="scope.row.activity_rule.rule && scope.row.activity_rule.rule.length > 0">
<el-row>
<span>{{ __('购买同一活动商品消费:') }}</span>
<br />
<div v-for="item in scope.row.activity_rule.rule" :key="item">
{{ __('') }} {{ item.total }} {{ __('') }}{{ __('可换购商品') }} {{ item.max_num }} {{ __('') }}
</div>
</el-row>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
background
:current-page="queryForm.pageNum"
:layout="layout"
:page-size="queryForm.pageSize"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
/>
</div>
</template>
<script>
import { translateTitle as __ } from '@/utils/i18n'
import { editState, getList } from '@/api/store/activity/base'
import { renderTime } from '@/utils/date'
import { getList as storeList } from '@/api/store/base'
export default {
name: 'StoreActivityBase',
components: {},
data() {
return {
tableConfig: {
height: window.innerHeight - 220 - 90,
},
list: [],
dataList: [],
loading: true,
listLoading: true,
layout: 'total, sizes, prev, pager, next, jumper',
total: 0,
selectRows: '',
queryForm: {
pageNum: 1,
pageSize: 20,
activity_type_id: 1101,
},
}
},
created() {
this.fetchData()
},
methods: {
__,
formatStarttime(row) {
return renderTime(row.activity_starttime)
},
formatEndtime(row) {
return renderTime(row.activity_endtime)
},
handleSizeChange(val) {
this.queryForm.pageSize = val
this.fetchData()
},
handleCurrentChange(val) {
this.queryForm.pageNum = val
this.fetchData()
},
queryData() {
this.queryForm.pageNum = 1
this.fetchData()
},
async remoteFindUserList(store_name) {
if (store_name !== '') {
this.loading = true
setTimeout(() => {
this.loading = false
storeList({ store_name: store_name,pageSize: 200 }).then((res) => {
this.dataList = res.data.items
})
}, 200)
} else {
this.dataList = []
}
},
async changeState(activity_id, state) {
this.$baseConfirm(this.__('请确认是否更改状态?'), null, async () => {
const { msg } = await editState({
activity_id: activity_id,
activity_state: state,
})
this.$baseMessage(msg, 'success', false, 'vab-hey-message-success')
await this.fetchData()
})
},
async fetchData() {
this.listLoading = true
const { data } = await getList(this.queryForm)
this.list = data.items
this.total = data.records
this.listLoading = false
},
},
}
</script>