food/src/views/layout/components/main/shop/add.vue
sszdot 9be9d04a91 【类 型】:factor
【原  因】:小程序端在结算的时候 从商铺信息里面调用 默认的运费 打包费
【过  程】:商铺设置里增加 运费 打包费字段缺省值
【影  响】:
2024-12-12 14:26:36 +08:00

286 lines
10 KiB
Vue

<template>
<div class="app-container">
<el-row class="m-t-0">
<el-col :span="24">
<el-container>
<el-header height="42px" class="l-h-42 p-l-10 p-r-10 border border-b-n">
<div class="l">
<i v-if="pageState === 'add'" class="el-icon-plus f-s-20"></i>
<i v-else class="el-icon-edit f-s-20"></i>
<font class="m-l-10 f-s-18 fb">{{ $route.meta.title }}</font>
</div>
</el-header>
<el-main class="border p-20 m-b-20">
<el-form ref="form" :model="form" label-width="120px" :label-position="$store.state.app.isWideScreen?'top':'right'">
<!-- 用户select选项 -->
<el-form-item v-if="pageState === 'edit'" label="商铺选择">
<SelectionShopId v-model="form.shop_id" />
</el-form-item>
<el-form-item label="店铺名称">
<el-input v-model="form.name" placeholder="推荐使用景区名称" />
</el-form-item>
<el-form-item label="负责人">
<el-input v-model="form.waiter" placeholder="店铺负责人,填写其姓名或昵称" />
</el-form-item>
<el-form-item label="微信账号">
<el-input v-model="form.service_wx" placeholder="微信账号绑定" />
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="form.tel" placeholder="联系电话,既客服电话" />
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="form.email" placeholder="用来接收验证信息等" />
</el-form-item>
<el-form-item label="最低消费">
<el-input v-model="form.price_min" placeholder="游客扫码下单最低消费值">
<template slot="append">元</template>
</el-input>
</el-form-item>
<el-form-item label="运载极限重量">
<el-input v-model="form.weight_max" placeholder="无人机每单运载的重量上限,通常以店铺内飞机的载重上限为准">
<template slot="append">克</template>
</el-input>
</el-form-item>
<el-form-item label="运费缺省">
<el-input v-model="form.default_transport_price" placeholder="送货运费缺省值">
<template slot="append">元</template>
</el-input>
</el-form-item>
<el-form-item label="打包费缺省">
<el-input v-model="form.default_pack_price" placeholder="打包服务费缺省值">
<template slot="append">元</template>
</el-input>
</el-form-item>
<el-form-item label="营业时间">
<el-time-picker is-range v-model="form.intervalTime" range-separator="至" start-placeholder="开始时间"
end-placeholder="结束时间" placeholder="选择时间范围">
</el-time-picker>
</el-form-item>
<el-form-item label="商铺LOGO">
<el-upload class="avatar-uploader" drag name="file" :action="action" :headers="myheader"
:show-file-list="false" :on-success="handleUpSuccess" :on-error="handleUpErr"
:before-upload="beforeAvatarUpload">
<img v-if="form.upFile != ''"
:src="$store.state.settings.tempPath + form.upFile" class="avatar" />
<img v-else-if="form.oldFile != [] && form.upFile == ''"
:src="form.oldFile[0]" class="avatar" />
<template v-else>
<i class="el-icon-plus f-s-30 m-t-70 seatFontColor"></i>
<div class="el-upload__text"><em>建议200*200像素 <br> jpg png gif svg</em></div>
</template>
</el-upload>
</el-form-item>
<el-form-item label="描述">
<el-input v-model="form.desc" type="textarea" placeholder="商铺小程序介绍说明或景区的描述等,会显示在小程序的介绍里面" />
</el-form-item>
<el-form-item v-if="pageState == 'add' ? true : false">
<el-button type="primary" icon="el-icon-plus" @click="addShop">创建</el-button>
<el-button @click="setForm({ oldFile: '' }); form.upFile = ''" class="iconfont icon-qingchu">
<font class="m-l-5">重填</font>
</el-button>
</el-form-item>
<el-form-item v-else>
<el-button type="primary" icon="el-icon-edit" @click="saveShop">更新</el-button>
</el-form-item>
</el-form>
</el-main>
</el-container>
</el-col>
</el-row>
</div>
</template>
<script>
import SelectionShopId from '@/components/SelectionShopId'
export default {
name: 'ShopEdit',
data () {
return {
action: this.$store.state.settings.baseURL + this.$store.state.settings.apiAdminPath + 'upImgFile',
myheader: { token: this.$store.state.user.token },
form: {
shop_id: '',
name: '',
waiter: '',
service_wx: '',
tel: '',
email: '',
price_min: '',
weight_max: '',
desc: '',
upFile: '',
oldFile: '',
intervalTime: [new Date(0, 0, 0, 8, 0), new Date(0, 0, 0, 20, 0)]
},
pageState: 'add', // 页面状态
shop: null
}
},
components: {
SelectionShopId
},
computed: {
/**
* @description: 获取商铺列表
*/
shopList () {
return this.$store.state.shopList
},
shop_id () {
return this.form.shop_id
}
},
methods: {
/* 文件上传表单 */
handleUpSuccess (res) {
console.log(res)
if (res.status === 0) {
this.$message.error(res.msg)
} else {
this.form.upFile = res.data
this.$message.success(res.msg)
}
},
beforeAvatarUpload (file) {
const isJPG = file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/gif'
if (!isJPG) {
this.$message.error('上传图片只能是JPG|PNG|GIF格式!')
}
return isJPG
},
handleUpErr () {
// this.$message.error('接口访问失败')
this.$message.error(this.action)
},
// 将时间字符串转换为Date对象
parseTimeString (timeString) {
const [hours, minutes, seconds] = timeString.split(':')
return new Date(0, 0, 0, parseInt(hours), parseInt(minutes), parseInt(seconds))
},
// 将Date对象转换为时间字符串 'HH:mm:ss'
formatDateToString (date) {
const hours = date.getHours().toString().padStart(2, '0')
const minutes = date.getMinutes().toString().padStart(2, '0')
const seconds = date.getSeconds().toString().padStart(2, '0')
return `${hours}:${minutes}:${seconds}`
},
// 设置表单
setForm (data) {
if (data.desc == null) {
data.desc = ''
}
this.form.name = data.name
this.form.waiter = data.waiter
this.form.service_wx = data.service_wx
this.form.tel = data.tel
this.form.email = data.email
this.form.price_min = data.price_min
this.form.weight_max = data.weight_max
this.form.default_transport_price = data.default_transport_price
this.form.default_pack_price = data.default_pack_price
this.form.oldFile = data.oldFile
this.form.upFile = data.upFile
this.form.desc = data.desc
this.form.intervalTime = data.intervalTime
if (Object.keys(data).length === 0) {
this.$message.warning('清空表单')
}
},
// 初始化页面 添加or编辑
initPage () {
if (this.$route.path.indexOf('add') > -1) {
this.pageState = 'add'
} else {
this.pageState = 'edit'
this.shop = this.shopList.find((item) => item.shop_id === this.shop_id)
if (this.shop) {
const data = {
name: this.shop.name,
waiter: this.shop.waiter,
service_wx: this.shop.service_wx,
tel: this.shop.tel,
email: this.shop.email,
price_min: this.shop.price_min,
weight_max: this.shop.weight_max,
default_transport_price: this.shop.default_transport_price,
default_pack_price: this.shop.default_pack_price,
oldFile: this.shop.logo,
upFile: '',
intervalTime: [this.parseTimeString(this.shop.opening_time), this.parseTimeString(this.shop.closeing_time)]
}
this.setForm(data)
}
}
},
/**
* @description: 创建新商铺
*/
async addShop () {
this.form.opening_time = this.formatDateToString(this.form.intervalTime[0])
this.form.closeing_time = this.formatDateToString(this.form.intervalTime[1])
const res = await this.$store.dispatch('fetchAddShop', this.form)
if (res.data.status === 1) {
this.$router.push({ path: '/shop/add', query: { refresh: Date.now() } })
}
},
/**
* @description: 更新商铺
*/
async saveShop () {
this.form.opening_time = this.formatDateToString(this.form.intervalTime[0])
this.form.closeing_time = this.formatDateToString(this.form.intervalTime[1])
const res = await this.$store.dispatch('fetchSaveShop', this.form)
if (res.data.status === 1) {
this.$router.push({ path: '/shop/edit', query: { refresh: Date.now() } })
}
}
},
watch: {
shop_id (val) {
this.initPage()// 初始化页面
}
},
created () {
this.initPage()// 初始化页面
}
}
</script>
<style scoped>
.line {
text-align: center;
}
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
.el-upload__text {
line-height: 1.2em !important;
}
</style>