You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
438 lines
14 KiB
Vue
438 lines
14 KiB
Vue
<template>
|
|
<div class>
|
|
<Row>
|
|
<i-col :span="12">
|
|
<Form ref="welcomeForm" :model="welcome" :rules="welcomeRules">
|
|
<FormItem label="欢迎语内容" prop="content">
|
|
<i-input
|
|
v-model="welcome.content"
|
|
type="textarea"
|
|
style="height: 220px"
|
|
:autosize="{ minRows: 10, maxRows: 10 }"
|
|
placeholder="请输入欢迎语内容,最多100个字"
|
|
></i-input>
|
|
</FormItem>
|
|
<Row
|
|
style="margin-bottom: 10px"
|
|
:gutter="10"
|
|
class="inputItem"
|
|
v-for="(item, index) in welcome.params"
|
|
:key="index"
|
|
>
|
|
<div v-if="item.type == 3">
|
|
<i-col style="line-height: 32px" :span="2">标题 {{ index + 1 }}</i-col>
|
|
<i-col :span="4">
|
|
<i-input class="inputClass" type="text" disabled v-model="item.key"></i-input>
|
|
</i-col>
|
|
<i-col style="line-height: 32px" :span="2">APPID {{ index + 1 }}</i-col>
|
|
<i-col :span="4">
|
|
<i-input class="inputClass" type="text" disabled v-model="item.defaultVal"></i-input>
|
|
</i-col>
|
|
<i-col style="line-height: 32px" :span="2">URI {{ index + 1 }}</i-col>
|
|
<i-col :span="3">
|
|
<i-input class="inputClass" type="text" disabled v-model="item.description"></i-input>
|
|
</i-col>
|
|
<i-col style="line-height: 32px" :span="2">MediaId{{ index + 1 }}</i-col>
|
|
<i-col :span="3">
|
|
<i-input class="inputClass" type="text" disabled v-model="item.limitLower"></i-input>
|
|
</i-col>
|
|
</div>
|
|
<div v-else-if="item.type == 2">
|
|
<i-col style="line-height: 32px" :span="4">标题 {{ index + 1 }}</i-col>
|
|
<i-col :span="8">
|
|
<i-input class="inputClass" type="text" disabled v-model="item.description"></i-input>
|
|
</i-col>
|
|
<i-col style="line-height: 32px" :span="4">URL {{ index + 1 }}</i-col>
|
|
<i-col :span="8">
|
|
<i-input class="inputClass" type="text" disabled v-model="item.defaultVal"></i-input>
|
|
</i-col>
|
|
</div>
|
|
<div v-else>
|
|
<i-col style="line-height: 32px" :span="4">{{ item.name }}{{ index + 1 }}</i-col>
|
|
<i-col :span="16">
|
|
<i-input class="inputClass" type="text" disabled v-model="item.defaultVal"></i-input>
|
|
</i-col>
|
|
</div>
|
|
<i-col :span="4">
|
|
<Button type="error" @click="delActivityInput(index)">删除</Button>
|
|
</i-col>
|
|
</Row>
|
|
<FormItem>
|
|
<Button type="text" @click="() => (showMessageTypes = true)" icon="md-add">添加图片/网页/小程序消息</Button>
|
|
</FormItem>
|
|
<FormItem label="配置范围: ">
|
|
<span
|
|
@click="showStores"
|
|
v-if="welcome.stores.length > 0"
|
|
>{{ welcome.stores[0].name }}等{{ welcome.stores.length }}家店铺</span>
|
|
<Button
|
|
type="text"
|
|
v-if="welcome.stores.length <= 0"
|
|
@click="showStores"
|
|
icon="md-add"
|
|
>全部店铺</Button>
|
|
</FormItem>
|
|
<FormItem>
|
|
<Button type="primary" long @click="submit">确定</Button>
|
|
</FormItem>
|
|
</Form>
|
|
</i-col>
|
|
</Row>
|
|
<Modal v-model="showMessageTypes" title="添加图片/网页/小程序消息" :footer-hide="true">
|
|
<Row :gutter="24">
|
|
<i-col :span="8">
|
|
<Upload
|
|
ref="upload"
|
|
:show-upload-list="false"
|
|
:on-success="uploadImgSuccess"
|
|
:format="['jpg', 'jpeg', 'png']"
|
|
:max-size="2048"
|
|
:on-exceeded-size="onExceededSize"
|
|
:before-upload="handleBeforeUpload"
|
|
multiple
|
|
type="drag"
|
|
action
|
|
style="width: 100%;"
|
|
>
|
|
<div style="width: 100%;">
|
|
<Button long type="primary">{{imageUploading ? "上传中..." : "图片"}}</Button>
|
|
</div>
|
|
</Upload>
|
|
</i-col>
|
|
<i-col :span="8">
|
|
<Button long @click="doShowWeb" type="primary">网页</Button>
|
|
</i-col>
|
|
<i-col :span="8">
|
|
<Button long @click="doShowMini" type="primary">小程序</Button>
|
|
</i-col>
|
|
</Row>
|
|
</Modal>
|
|
<Modal v-model="showWeb" title="添加网页消息" :loading="true">
|
|
<Form ref="webForm" :model="webForm" :rules="webFormRules">
|
|
<FormItem label="标题" prop="url">
|
|
<i-input v-model="webForm.title" type="text" placeholder="请输入网页标题"></i-input>
|
|
</FormItem>
|
|
<FormItem label="添加网页消息" prop="url">
|
|
<i-input v-model="webForm.url" type="text" placeholder="以http或https开头"></i-input>
|
|
</FormItem>
|
|
</Form>
|
|
<div slot="footer">
|
|
<Button type="primary" @click="cancelWeb">取消</Button>
|
|
<Button type="primary" @click="okWeb">确定</Button>
|
|
</div>
|
|
</Modal>
|
|
<Modal v-model="showMini" title="添加小程序消息" :loading="true">
|
|
<Form ref="miniForm" :model="miniForm" :rules="miniFormRules">
|
|
<FormItem label="标题" prop="key">
|
|
<i-input v-model="miniForm.key" type="text" placeholder="请输入标题"></i-input>
|
|
</FormItem>
|
|
<FormItem label="APPID" prop="appid">
|
|
<i-input v-model="miniForm.appid" type="text" placeholder="请输入appid"></i-input>
|
|
</FormItem>
|
|
<FormItem label="URI" prop="uri">
|
|
<i-input v-model="miniForm.uri" type="text" placeholder="请输入URl"></i-input>
|
|
</FormItem>
|
|
<FormItem label="封面图">
|
|
<Upload
|
|
ref="upload"
|
|
:show-upload-list="false"
|
|
:on-success="miniUploadImgSuccess"
|
|
:format="['jpg', 'jpeg', 'png']"
|
|
:max-size="2048"
|
|
:before-upload="handleBeforeUploadMini"
|
|
multiple
|
|
type="drag"
|
|
action
|
|
style="display: inline-block;"
|
|
>
|
|
<div style="width: 200px;height:200px;line-height: 200px;border:1px dashed #dedede">
|
|
<span v-if="!miniForm.limitUpper">请上传图片</span>
|
|
<img
|
|
v-if="miniForm.limitUpper"
|
|
:src="`/kiisoo-ic` + miniForm.limitUpper"
|
|
alt
|
|
style="width: 100%; height: auto"
|
|
/>
|
|
</div>
|
|
</Upload>
|
|
</FormItem>
|
|
</Form>
|
|
<div slot="footer">
|
|
<Button type="primary" @click="cancelMini">取消</Button>
|
|
<Button type="primary" @click="okMini">确定</Button>
|
|
</div>
|
|
</Modal>
|
|
<selectStoreStep :isModify="id>0" @doShow="doShow" :schedule="welcome" :show="showStoreCheck"></selectStoreStep>
|
|
</div>
|
|
</template>
|
|
|
|
<script type="text/javascript">
|
|
import axios from "axios";
|
|
import { isURL } from "../../utils/Common";
|
|
import store from "../../store";
|
|
import selectStoreStep from "../activity/selectStoreStep";
|
|
import ActivityManager from "../../services/ActivityManager/ActivityManager";
|
|
const validateUrl = (rule, value, callback) => {
|
|
const is = isURL(value);
|
|
if (is) {
|
|
callback();
|
|
} else {
|
|
callback(new Error("URL非法,请以http或https开头"));
|
|
}
|
|
};
|
|
export default {
|
|
data() {
|
|
return {
|
|
showStoreCheck: false,
|
|
showWeb: false,
|
|
showMini: false,
|
|
id: 0,
|
|
showMessageTypes: false,
|
|
imageUploading: false,
|
|
welcome: {
|
|
content: "",
|
|
params: [],
|
|
company: [],
|
|
stores: [],
|
|
categoryCode: "welcome",
|
|
id: null
|
|
},
|
|
welcomeRules: {
|
|
content: [
|
|
{ required: true, message: "请输入欢迎语内容", trigger: "blur" },
|
|
{
|
|
type: "string",
|
|
max: 100,
|
|
message: "欢迎语最长100个字符",
|
|
trigger: "blur"
|
|
}
|
|
]
|
|
},
|
|
webFormRules: {
|
|
url: [
|
|
{ required: true, message: "请输入url", trigger: "blur" },
|
|
{ validator: validateUrl, trigger: "blur" }
|
|
],
|
|
title: [{ required: true, message: "请输入url", trigger: "blur" }]
|
|
},
|
|
webForm: { url: "", title: "" },
|
|
miniFormRules: {
|
|
appid: [{ required: true, message: "请输入url", trigger: "blur" }],
|
|
uri: [{ required: true, message: "请输入url", trigger: "blur" }],
|
|
key: [{ required: true, message: "请输入url", trigger: "blur" }]
|
|
},
|
|
miniForm: { appid: "", uri: "", limitLower: "", limitUpper: "", key: "" }
|
|
};
|
|
},
|
|
watch: {
|
|
welcome: {
|
|
handler() {
|
|
store.commit("SET_useData", {
|
|
...store.getters.useData,
|
|
...this.welcome
|
|
});
|
|
},
|
|
immediate: true,
|
|
deep: true
|
|
}
|
|
},
|
|
created() {
|
|
this.id = this.$route.query.id;
|
|
// store.commit("SET_useData", { ...store.getters.useData, ...this.welcome });
|
|
console.log(this.$route);
|
|
if (this.id) {
|
|
this.getDetail(this.id);
|
|
}
|
|
},
|
|
components: {
|
|
selectStoreStep
|
|
},
|
|
methods: {
|
|
doShow() {
|
|
this.showStoreCheck = false;
|
|
this.welcome = store.getters.useData;
|
|
},
|
|
onExceededSize() {
|
|
console.log("失败");
|
|
},
|
|
getDetail(instanceId) {
|
|
let _this = this;
|
|
ActivityManager.instanceDetail(
|
|
{
|
|
instanceId
|
|
},
|
|
res => {
|
|
_this.welcome = res.data.results;
|
|
store.commit("SET_useData", {
|
|
...store.getters.useData,
|
|
...this.welcome
|
|
});
|
|
}
|
|
);
|
|
},
|
|
showStores() {
|
|
console.log({ ...store.getters.useData, ...this.welcome });
|
|
store.commit("SET_useData", {
|
|
...this.welcome,
|
|
...store.getters.useData
|
|
});
|
|
this.showStoreCheck = true;
|
|
},
|
|
uploadImgSuccess(res, file) {},
|
|
miniUploadImgSuccess(res, file) {},
|
|
cancelWeb() {
|
|
this.showWeb = false;
|
|
},
|
|
doShowWeb() {
|
|
this.showWeb = true;
|
|
this.webForm = { url: "", title: "" };
|
|
},
|
|
doShowMini() {
|
|
this.showMini = true;
|
|
this.miniForm = {
|
|
appid: "",
|
|
uri: "",
|
|
limitLower: "",
|
|
limitUpper: "",
|
|
key: ""
|
|
};
|
|
},
|
|
cancelMini() {
|
|
this.showMini = false;
|
|
},
|
|
okWeb() {
|
|
let _this = this;
|
|
this.$refs["webForm"].validate(valid => {
|
|
if (valid) {
|
|
_this.welcome.params.push({
|
|
attr: 2,
|
|
defaultVal: this.webForm.url,
|
|
description: this.webForm.title,
|
|
isRequired: 1,
|
|
key: "url",
|
|
limitLower: null,
|
|
limitUpper: null,
|
|
name: "网页",
|
|
type: 2
|
|
});
|
|
this.showWeb = false;
|
|
this.showMessageTypes = false;
|
|
}
|
|
});
|
|
},
|
|
okMini() {
|
|
let _this = this;
|
|
this.$refs["miniForm"].validate(valid => {
|
|
if (valid) {
|
|
_this.welcome.params.push({
|
|
attr: 2,
|
|
defaultVal: this.miniForm.appid,
|
|
description: this.miniForm.uri,
|
|
isRequired: 1,
|
|
key: "mini",
|
|
limitLower: this.miniForm.limitLower,
|
|
limitUpper: this.miniForm.limitUpper,
|
|
name: "小程序消息",
|
|
type: 3
|
|
});
|
|
this.showMini = false;
|
|
this.showMessageTypes = false;
|
|
}
|
|
});
|
|
},
|
|
delActivityInput(index) {
|
|
this.welcome.params.splice(index, 1);
|
|
this.$forceUpdate();
|
|
},
|
|
handleBeforeUploadMini(res) {
|
|
const me = this;
|
|
let data = new FormData();
|
|
data.append("file", res);
|
|
data.append("needMediaId", "true");
|
|
console.log(data);
|
|
this.imageUploading = true;
|
|
axios({
|
|
method: "post",
|
|
url: "/upload",
|
|
data: data,
|
|
headers: {
|
|
"Content-Type": "multipart/form-data"
|
|
}
|
|
}).then(function(res) {
|
|
me.imageUploading = false;
|
|
if (res.data.success) {
|
|
// me.formValidate.logo = res.data.results;
|
|
me.miniForm.limitLower = res.data.results.mediaId;
|
|
me.miniForm.limitUpper = res.data.results.localPath;
|
|
me.showMessageTypes = false;
|
|
}
|
|
});
|
|
return false;
|
|
},
|
|
handleBeforeUpload(res) {
|
|
const me = this;
|
|
let data = new FormData();
|
|
data.append("file", res);
|
|
data.append("needMediaId", "true");
|
|
console.log(data);
|
|
this.imageUploading = true;
|
|
axios({
|
|
method: "post",
|
|
url: "/upload",
|
|
data: data,
|
|
headers: {
|
|
"Content-Type": "multipart/form-data"
|
|
}
|
|
}).then(function(res) {
|
|
me.imageUploading = false;
|
|
if (res.data.success) {
|
|
// me.formValidate.logo = res.data.results;
|
|
me.welcome.params.push({
|
|
attr: 2,
|
|
defaultVal: res.data.results.mediaId,
|
|
description: res.data.results.localPath,
|
|
isRequired: 1,
|
|
key: "image",
|
|
limitLower: null,
|
|
limitUpper: null,
|
|
name: "图片",
|
|
type: 1
|
|
});
|
|
me.showMessageTypes = false;
|
|
}
|
|
});
|
|
return false;
|
|
},
|
|
submit() {
|
|
let _this = this;
|
|
if (this.welcome.stores.length <= 0) {
|
|
_this.$Message.error("请至少选择一个店铺");
|
|
return false;
|
|
}
|
|
this.$refs["welcomeForm"].validate(valid => {
|
|
if (valid) {
|
|
let data = _this.welcome;
|
|
data.isGetActivityInfo = true;
|
|
axios({
|
|
method: "post",
|
|
url: "/activity/instance/saveWelcome",
|
|
data: data,
|
|
headers: {
|
|
"Content-Type": "applications/json"
|
|
}
|
|
}).then(res => {
|
|
_this.$router.push("/shop/increase/welcome/list");
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style scope>
|
|
.ivu-upload-drag {
|
|
border: none !important;
|
|
}
|
|
</style>
|