更新预售

feature/0423
陈伟 1 year ago
parent 1db57ec724
commit 28996ec879
  1. 39
      src/api/market/presale.js
  2. 55
      src/views/market/presale/Index.vue
  3. 105
      src/views/market/presale/modules/AddForm.vue
  4. 125
      src/views/market/presale/modules/EditForm.vue
  5. 4
      src/views/market/presale/modules/index.js

@ -3,6 +3,9 @@ import { axios } from '@/utils/request'
// api接口列表
const api = {
list: '/presale/list',
add: '/presale/add',
edit: '/presale/edit',
delete: '/presale/del',
log: '/presale/log'
}
@ -15,6 +18,42 @@ export function list (params) {
})
}
/**
* 新增记录
* @param {*} data
*/
export function add (data) {
return axios({
url: api.add,
method: 'post',
data
})
}
/**
* 编辑记录
* @param {*} data
*/
export function edit (data) {
return axios({
url: api.edit,
method: 'post',
data
})
}
/**
* 删除记录
* @param {*} data
*/
export function deleted (data) {
return axios({
url: api.delete,
method: 'post',
data: data
})
}
export function log (params) {
return axios({
url: api.log,

@ -1,9 +1,9 @@
<template>
<a-card :bordered="false">
<div class="card-title">{{ $route.meta.title }}</div>
<!-- <div class="table-operator">
<div class="table-operator">
<a-button v-action:add type="primary" icon="plus" @click="handleAdd">新增</a-button>
</div> -->
</div>
<s-table
ref="table"
rowKey="id"
@ -12,18 +12,6 @@
:data="loadData"
:pageSize="15"
>
<!-- 活动入口图片 -->
<span slot="index_image_url" slot-scope="text">
<a title="点击查看原图" :href="text" target="_blank">
<img height="50" :src="text" alt="活动入口图片" />
</a>
</span>
<!-- Banner图 -->
<span slot="theme_image_url" slot-scope="text">
<a title="点击查看原图" :href="text" target="_blank">
<img height="50" :src="text" alt="活动主题图" />
</a>
</span>
<!-- 状态 -->
<span slot="status" slot-scope="text">
<a-tag :color="text == 1 ? 'green' : ''">{{ text ? '开启' : '关闭' }}</a-tag>
@ -31,24 +19,28 @@
<!-- 操作 -->
<span slot="action" slot-scope="text, item">
<a @click="handleDetail(item)">详情</a>
<a v-action:edit style="margin-right: 8px;" @click="handleEdit(item)">编辑</a>
<a v-action:delete @click="handleDelete(item)">删除</a>
</span>
</s-table>
<Log ref="Log" />
<AddForm ref="AddForm" @handleSubmit="handleRefresh" />
<EditForm ref="EditForm" @handleSubmit="handleRefresh" />
</a-card>
</template>
<script>
import * as Api from '@/api/market/presale'
import { STable } from '@/components'
import Log from './modules/Log.vue'
import { AddForm, EditForm } from './modules'
export default {
name: 'Index',
components: {
STable,
Log
AddForm,
EditForm
},
data () {
return {
@ -101,8 +93,31 @@ export default {
},
methods: {
handleDetail (item) {
this.$refs.Log.visibleLog(item.id)
//
handleAdd () {
this.$refs.AddForm.add()
},
//
handleEdit (item) {
this.$refs.EditForm.edit(item)
},
//
handleDelete (item) {
const app = this
const modal = this.$confirm({
title: '您确定要删除该记录吗?',
content: '删除后不可恢复',
onOk () {
return Api.deleted({ activeId: item.id })
.then(result => {
app.$message.success(result.message, 1.5)
app.handleRefresh()
})
.finally(result => modal.destroy())
}
})
},
/**

@ -0,0 +1,105 @@
<template>
<a-modal
:title="title"
:width="780"
:visible="visible"
:confirmLoading="confirmLoading"
:maskClosable="false"
:destroyOnClose="true"
@ok="handleSubmit"
@cancel="handleCancel"
>
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-form-item label="预售名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input v-decorator="['name', { rules: [{ required: true, message: '请输入预售名称' }] }]" placeholder="请输入预售名称" />
</a-form-item>
<a-form-item label="预售商品" :labelCol="labelCol" :wrapperCol="wrapperCol" required>
<div style="width: 100%; overflow-x: auto;">
<SelectGoods
:multiple="true"
v-decorator="['goods_list', { rules: [{ required: true, message: '请选择预售商品' }] }]"
/>
</div>
</a-form-item>
<a-form-item label="状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['status', { initialValue: 1, rules: [{ required: true }] }]">
<a-radio :value="1">开启</a-radio>
<a-radio :value="0">关闭</a-radio>
</a-radio-group>
</a-form-item>
</a-form>
</a-spin>
</a-modal>
</template>
<script>
import pick from 'lodash.pick'
import * as Api from '@/api/market/presale'
import { SelectImage, SelectGoods } from '@/components'
export default {
components: {
SelectImage,
SelectGoods
},
data () {
return {
//
title: '新增预售',
//
labelCol: { span: 3 },
//
wrapperCol: { span: 19 },
// modal()
visible: false,
// modal() loading
confirmLoading: false,
//
form: this.$form.createForm(this)
}
},
methods: {
//
add () {
//
this.visible = true
},
//
handleSubmit (e) {
e.preventDefault()
//
const { form: { validateFields } } = this
validateFields((errors, values) => {
// api
!errors && this.onFormSubmit(values)
})
},
//
handleCancel () {
this.visible = false
this.form.resetFields()
},
// api
onFormSubmit (values) {
this.confirmLoading = true
Api.add({ form: { ...values, goods_list: values.goods_list.join(',') } })
.then(result => {
//
this.$message.success(result.message, 1.5)
//
this.handleCancel()
//
this.$emit('handleSubmit', values)
})
.finally(() => this.confirmLoading = false)
}
}
}
</script>

@ -0,0 +1,125 @@
<template>
<a-modal
:title="title"
:width="780"
:visible="visible"
:confirmLoading="confirmLoading"
:maskClosable="false"
:destroyOnClose="true"
@ok="handleSubmit"
@cancel="handleCancel"
>
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-form-item label="预售名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input v-decorator="['name', { rules: [{ required: true, message: '请输入预售名称' }] }]" placeholder="请输入预售名称" />
</a-form-item>
<a-form-item label="预售商品" :labelCol="labelCol" :wrapperCol="wrapperCol" required>
<div style="width: 100%; overflow-x: auto;">
<SelectGoods
:defaultList="selectGoodsList"
:multiple="true"
v-decorator="['goods_list', { rules: [{ required: true, message: '请选择预售商品' }] }]"
/>
</div>
</a-form-item>
<a-form-item label="状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['status', { initialValue: 1, rules: [{ required: true }] }]">
<a-radio :value="1">开启</a-radio>
<a-radio :value="0">关闭</a-radio>
</a-radio-group>
</a-form-item>
</a-form>
</a-spin>
</a-modal>
</template>
<script>
import pick from 'lodash.pick'
import * as Api from '@/api/market/presale'
import { SelectImage, SelectGoods } from '@/components'
export default {
components: {
SelectImage,
SelectGoods
},
data () {
return {
//
title: '编辑预售',
//
labelCol: { span: 3 },
//
wrapperCol: { span: 19 },
// modal()
visible: false,
// modal() loading
confirmLoading: false,
//
form: this.$form.createForm(this),
//
record: {},
//
selectGoodsList: []
}
},
methods: {
//
edit (record) {
//
this.visible = true
//
this.record = record
this.selectGoodsList = record.goods_list || []
//
this.setFieldsValue()
},
//
setFieldsValue () {
const { record, form: { setFieldsValue } } = this
this.$nextTick(() => {
setFieldsValue(pick(record, ['name', 'goods_list', 'status']))
})
},
//
handleSubmit (e) {
e.preventDefault()
//
const { form: { validateFields } } = this
validateFields((errors, values) => {
// api
!errors && this.onFormSubmit(values)
})
},
//
handleCancel () {
this.visible = false
this.form.resetFields()
},
// api
onFormSubmit (values) {
this.confirmLoading = true
Api.edit({ id: this.record.id, form: { ...values, goods_list: values.goods_list.join(',') } })
.then(result => {
//
this.$message.success(result.message, 1.5)
//
this.handleCancel()
//
this.$emit('handleSubmit', values)
})
.finally(() => this.confirmLoading = false)
}
}
}
</script>

@ -0,0 +1,4 @@
import AddForm from './AddForm'
import EditForm from './EditForm'
export { AddForm, EditForm }
Loading…
Cancel
Save