|
@@ -0,0 +1,221 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <el-dialog
|
|
|
+ title="添加banner"
|
|
|
+ :visible.sync="dialogShow"
|
|
|
+ width="800px"
|
|
|
+ :before-close="close"
|
|
|
+ >
|
|
|
+ <el-form :model="form" ref="form" :rules="rules" label-width="100px">
|
|
|
+ <el-form-item label="banner名称" prop="name">
|
|
|
+ <el-input
|
|
|
+ v-model="form.name"
|
|
|
+ style="width: 300px"
|
|
|
+ size="small"
|
|
|
+ placeholder="请输入banner名称"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="位置" prop="location">
|
|
|
+ <el-select
|
|
|
+ v-model="form.location"
|
|
|
+ placeholder="请选择位置"
|
|
|
+ clearable
|
|
|
+ style="width: 300px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ :label="item.dictLabel"
|
|
|
+ :value="item.dictValue"
|
|
|
+ v-for="(item, index) in bannerLocationList"
|
|
|
+ :key="index"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="排序">
|
|
|
+ <el-input
|
|
|
+ v-model.number="form.sort"
|
|
|
+ style="width: 300px"
|
|
|
+ size="small"
|
|
|
+ placeholder="请输入排序"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="图片" prop="picUrl">
|
|
|
+ <image-upload
|
|
|
+ :limit="1"
|
|
|
+ :value="form.picUrl"
|
|
|
+ :file-size="50"
|
|
|
+ :is-public="true"
|
|
|
+ @input="pictureSelect"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="类型" prop="type">
|
|
|
+ <el-radio-group v-model="form.type" size="small" @change="changeType">
|
|
|
+ <el-radio label="link">自定义链接</el-radio>
|
|
|
+ <el-radio label="tag">商品标签</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="链接地址" prop="linkUrl" v-if="form.type == 'link'">
|
|
|
+ <el-input
|
|
|
+ v-model="form.linkUrl"
|
|
|
+ style="width: 300px"
|
|
|
+ size="small"
|
|
|
+ placeholder="请输入链接地址"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商品标签" prop="goodsTags" v-if="form.type == 'tag'">
|
|
|
+ <el-select
|
|
|
+ v-model="form.goodsTags"
|
|
|
+ placeholder="请选择商品标签"
|
|
|
+ multiple
|
|
|
+ clearable
|
|
|
+ style="width: 300px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.tagId"
|
|
|
+ v-for="(item, index) in goodsTagItemsList"
|
|
|
+ :key="index"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <!-- 按钮 -->
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="close">取 消</el-button>
|
|
|
+ <el-button type="primary" :disabled="loading" @click="saveClick"
|
|
|
+ >确 定</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import CustomFieldsMixin from "@/mixins/CustomFields";
|
|
|
+import { goodsBannerCreate } from "@/api/business/banner";
|
|
|
+import { goodsTagItems } from "@/api/business/tag";
|
|
|
+export default {
|
|
|
+ mixins: [CustomFieldsMixin],
|
|
|
+ props: {
|
|
|
+ // 弹框显示
|
|
|
+ dialogShow: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.getBannerLocation();
|
|
|
+ this.getGoodsTagItems();
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ loading: false,
|
|
|
+ form: {
|
|
|
+ picUrl: [],
|
|
|
+ type: 'link',
|
|
|
+ },
|
|
|
+ bannerLocationList: [],
|
|
|
+ goodsTagItemsList: [],
|
|
|
+ // 盲票组序列号
|
|
|
+ pkgNo: "",
|
|
|
+ // 选中盲票组列表
|
|
|
+ list: [],
|
|
|
+
|
|
|
+ rules: {
|
|
|
+ name: [
|
|
|
+ { required: true, message: "请输入banner名称", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ location: [
|
|
|
+ { required: true, message: "请选择位置", trigger: "change" },
|
|
|
+ ],
|
|
|
+ picUrl: [
|
|
|
+ {
|
|
|
+ type: "array",
|
|
|
+ required: true,
|
|
|
+ message: "请上传banner图片",
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ type: [
|
|
|
+ { required: true, message: "请选择类型", trigger: "change" },
|
|
|
+ ],
|
|
|
+ linkUrl: [
|
|
|
+ { required: true, message: "请输入链接地址", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ goodsTags: [
|
|
|
+ { required: true, message: "请选择商品标签", trigger: "change" },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ };
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getBannerLocation() {
|
|
|
+ this.getDicts("banner_location").then((res) => {
|
|
|
+ this.bannerLocationList = res && res.data;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getGoodsTagItems() {
|
|
|
+ goodsTagItems({}).then((res) => {
|
|
|
+ this.goodsTagItemsList = res && res.data;
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ changeType(){
|
|
|
+ this.$refs["form"].clearValidate();
|
|
|
+ },
|
|
|
+
|
|
|
+ // 添加图片
|
|
|
+ pictureSelect(data) {
|
|
|
+ this.form.picUrl = data;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 关闭弹框
|
|
|
+ close() {
|
|
|
+ this.$emit("close");
|
|
|
+ this.loading = false;
|
|
|
+ this.$refs["form"].resetFields();
|
|
|
+ },
|
|
|
+
|
|
|
+ // 确认
|
|
|
+ saveClick() {
|
|
|
+ this.loading = true;
|
|
|
+ const subForm = this.$refs["form"];
|
|
|
+ subForm.validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ this.submitForm(this.form);
|
|
|
+ } else {
|
|
|
+ this.loading = false;
|
|
|
+ // 提示第一个error
|
|
|
+ this.getFormErrorMessage(subForm);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 提交
|
|
|
+ submitForm(form) {
|
|
|
+ let data = {
|
|
|
+ ... form,
|
|
|
+ picUrl: this.form.picUrl[0].fileName,
|
|
|
+ goodsTags: form.goodsTags ? form.goodsTags.join(',') : ''
|
|
|
+ };
|
|
|
+ goodsBannerCreate(data)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code == 0) {
|
|
|
+ this.msgSuccess("添加成功");
|
|
|
+ this.close();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+<style scoped>
|
|
|
+.channel {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+</style>
|