|
@@ -5,10 +5,10 @@
|
|
|
:wrapper-col="{ offset: 1, span: 12 }"
|
|
|
:colon="false"
|
|
|
>
|
|
|
- <a-form-item label="落地页名称">
|
|
|
+ <a-form-item label="落地页名称" v-bind="validateInfos.title">
|
|
|
<a-input placeholder="请输入落地页名称" v-model:value="forms.title" />
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="公众号">
|
|
|
+ <a-form-item label="公众号" v-bind="validateInfos.gzh_name">
|
|
|
<a-select
|
|
|
placeholder="请选择公众号"
|
|
|
v-model:value="forms.gzh_name"
|
|
@@ -24,7 +24,7 @@
|
|
|
<a-form-item label="微信号">
|
|
|
<a-input placeholder="请输入微信号" disabled :value="forms.gzh_code" />
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="域名">
|
|
|
+ <a-form-item label="域名" v-bind="validateInfos.domain">
|
|
|
<a-select
|
|
|
placeholder="请选择域名"
|
|
|
v-model:value="forms.domain"
|
|
@@ -37,7 +37,7 @@
|
|
|
</template>
|
|
|
</a-select>
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="推广书籍">
|
|
|
+ <a-form-item label="推广书籍" v-bind="validateInfos.bid">
|
|
|
<a-select placeholder="请选择需要推广的书籍" v-model:value="forms.bid">
|
|
|
<template v-for="book in books" :key="book.bid">
|
|
|
<a-select-option :value="book.bid">
|
|
@@ -57,10 +57,13 @@
|
|
|
<a-select-option value="2">2</a-select-option>
|
|
|
</a-select> -->
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="渠道">
|
|
|
- <a-select placeholder="请选择渠道">
|
|
|
- <a-select-option value="1">1</a-select-option>
|
|
|
- <a-select-option value="2">2</a-select-option>
|
|
|
+ <a-form-item label="渠道" v-bind="validateInfos.link_source">
|
|
|
+ <a-select placeholder="请选择渠道" v-model:value="forms.link_source">
|
|
|
+ <a-select-option value="uc">UC</a-select-option>
|
|
|
+ <a-select-option value="iqiyi">爱奇艺</a-select-option>
|
|
|
+ <a-select-option value="tiktok">抖音</a-select-option>
|
|
|
+ <a-select-option value="vivo">Vivo</a-select-option>
|
|
|
+ <a-select-option value="baidu">百度</a-select-option>
|
|
|
</a-select>
|
|
|
</a-form-item>
|
|
|
<a-form-item label="公众号后缀">
|
|
@@ -75,26 +78,53 @@
|
|
|
<a-radio value="xcx">小程序</a-radio>
|
|
|
</a-radio-group>
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="关注图片"></a-form-item>
|
|
|
- <a-form-item label="公众号头像"></a-form-item>
|
|
|
+ <a-form-item label="关注图片" v-bind="validateInfos.sub_img">
|
|
|
+ <image-upload
|
|
|
+ name="sub_img"
|
|
|
+ type="关注图片"
|
|
|
+ :value="forms.sub_img"
|
|
|
+ @change="onUploadChange"
|
|
|
+ />
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item label="公众号头像">
|
|
|
+ <image-upload
|
|
|
+ name="gzh_img"
|
|
|
+ type="公众号头像"
|
|
|
+ :value="forms.gzh_img"
|
|
|
+ @change="onUploadChange"
|
|
|
+ />
|
|
|
+ </a-form-item>
|
|
|
<a-form-item label="简介">
|
|
|
<a-textarea v-model="forms.name"></a-textarea>
|
|
|
</a-form-item>
|
|
|
+ <a-form-item :wrapper-col="{ offset: 3 }">
|
|
|
+ <a-button @click="onBack" style="margin-right: 10px">返回</a-button>
|
|
|
+ <a-button type="primary" @click="onNextStep">下一步</a-button>
|
|
|
+ </a-form-item>
|
|
|
</a-form>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts">
|
|
|
import { defineComponent, reactive, ref, toRefs } from "vue";
|
|
|
+import { useForm } from "@ant-design-vue/use";
|
|
|
+import { useRouter } from "vue-router";
|
|
|
+
|
|
|
+import ImageUpload from "@/components/image-upload/index.vue";
|
|
|
|
|
|
import { getLandingBooks, getLandingDomains, getLandingOfficials } from "@/api";
|
|
|
import { IDomainItem, IGZHItem, IPBookItem } from "@/types/api";
|
|
|
|
|
|
const StepOne = defineComponent({
|
|
|
name: "StepOne",
|
|
|
+ components: {
|
|
|
+ ImageUpload
|
|
|
+ },
|
|
|
props: {},
|
|
|
- emits: [],
|
|
|
+ emits: ["next"],
|
|
|
setup(props, { emit }) {
|
|
|
+ const router = useRouter();
|
|
|
+
|
|
|
const state = reactive({
|
|
|
officials: ref<IGZHItem[]>([]),
|
|
|
domains: ref<IDomainItem[]>([]),
|
|
@@ -105,10 +135,9 @@ const StepOne = defineComponent({
|
|
|
gzh_code: "",
|
|
|
gzh_name: "",
|
|
|
bid: "",
|
|
|
- channel_id: "",
|
|
|
domain: "",
|
|
|
company_name: "",
|
|
|
- link_source: "",
|
|
|
+ link_source: "uc",
|
|
|
gzh_suffix_mode: 0,
|
|
|
gzh_suffix: "",
|
|
|
jump_type: "copy_name",
|
|
@@ -118,6 +147,43 @@ const StepOne = defineComponent({
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ const formsRules = reactive({
|
|
|
+ title: [{ required: true, trigger: "blur", message: "请输入落地页名称" }],
|
|
|
+ gzh_name: [
|
|
|
+ { required: true, trigger: "change", message: "请选择公众号" }
|
|
|
+ ],
|
|
|
+ domain: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ trigger: "change",
|
|
|
+ message: "请选择域名"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ bid: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ type: "number",
|
|
|
+ trigger: "change",
|
|
|
+ message: "请选择推广书籍"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ link_source: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ trigger: "change",
|
|
|
+ message: "请选择渠道"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ sub_img: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请上传关注图片"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ });
|
|
|
+
|
|
|
+ const { validate, validateInfos } = useForm(state.forms, formsRules);
|
|
|
+
|
|
|
const initConfigData = async () => {
|
|
|
try {
|
|
|
const [
|
|
@@ -130,10 +196,11 @@ const StepOne = defineComponent({
|
|
|
getLandingBooks()
|
|
|
]);
|
|
|
state.officials = official.list;
|
|
|
- state.domains = domains;
|
|
|
+ state.domains = domains.list;
|
|
|
state.books = books.list;
|
|
|
} catch (error) {
|
|
|
console.log("error happened in initLandingConfig:", error.message);
|
|
|
+ router.back();
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -141,7 +208,9 @@ const StepOne = defineComponent({
|
|
|
|
|
|
const onGzhChange = (name: string) => {
|
|
|
const target = state.officials.find((gzh) => gzh.gzh_name === name);
|
|
|
- state.forms.channel_id = target!.channel_id.toString() ?? "";
|
|
|
+ // state.forms.channel_id = target!.channel_id.toString() ?? "";
|
|
|
+ state.forms.gzh_img = target!.gzh_img ?? "";
|
|
|
+ state.forms.sub_img = target!.sub_img ?? "";
|
|
|
state.forms.gzh_code = target!.gzh_code ?? "";
|
|
|
};
|
|
|
|
|
@@ -150,7 +219,36 @@ const StepOne = defineComponent({
|
|
|
state.forms.company_name = target!.company_name ?? "";
|
|
|
};
|
|
|
|
|
|
- return { ...toRefs(state), onGzhChange, onDomainChange };
|
|
|
+ const onUploadChange = (result: {
|
|
|
+ url: string;
|
|
|
+ type: "sub_img" | "gzh_img";
|
|
|
+ }) => {
|
|
|
+ state.forms[result.type] = result.url;
|
|
|
+ console.log(state.forms);
|
|
|
+ };
|
|
|
+
|
|
|
+ const onBack = () => {
|
|
|
+ router.replace("/put/landing");
|
|
|
+ };
|
|
|
+
|
|
|
+ const onNextStep = async () => {
|
|
|
+ try {
|
|
|
+ await validate();
|
|
|
+ emit("next", state.forms);
|
|
|
+ } catch (error) {
|
|
|
+ console.log(error);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ return {
|
|
|
+ ...toRefs(state),
|
|
|
+ validateInfos,
|
|
|
+ onGzhChange,
|
|
|
+ onDomainChange,
|
|
|
+ onUploadChange,
|
|
|
+ onBack,
|
|
|
+ onNextStep
|
|
|
+ };
|
|
|
}
|
|
|
});
|
|
|
|