|
|
|
@ -2,7 +2,7 @@
|
|
|
|
import Footer from "@/components/Footer.vue";
|
|
|
|
import Footer from "@/components/Footer.vue";
|
|
|
|
import FlexView from "@/components/FlexView.vue";
|
|
|
|
import FlexView from "@/components/FlexView.vue";
|
|
|
|
|
|
|
|
|
|
|
|
import { ref, reactive, watch } from "vue";
|
|
|
|
import { ref, watch, computed } from "vue";
|
|
|
|
|
|
|
|
|
|
|
|
import { useCardStore } from '@/store/card'
|
|
|
|
import { useCardStore } from '@/store/card'
|
|
|
|
|
|
|
|
|
|
|
|
@ -11,10 +11,8 @@ import { useRouter } from "vue-router";
|
|
|
|
import axios from "axios";
|
|
|
|
import axios from "axios";
|
|
|
|
import _ from "lodash";
|
|
|
|
import _ from "lodash";
|
|
|
|
|
|
|
|
|
|
|
|
import { showToast, showLoadingToast, showSuccessToast,showFailToast } from "vant";
|
|
|
|
import { showToast, showLoadingToast, showSuccessToast, showFailToast } from "vant";
|
|
|
|
|
|
|
|
|
|
|
|
import { Cropper } from "vue-advanced-cropper";
|
|
|
|
|
|
|
|
import "vue-advanced-cropper/dist/style.css";
|
|
|
|
|
|
|
|
import { onMounted } from "vue";
|
|
|
|
import { onMounted } from "vue";
|
|
|
|
|
|
|
|
|
|
|
|
const URL = window.URL || window.webkitURL;
|
|
|
|
const URL = window.URL || window.webkitURL;
|
|
|
|
@ -33,18 +31,9 @@ const showDescSizePicker = ref(false);
|
|
|
|
let flexRef = ref(null);
|
|
|
|
let flexRef = ref(null);
|
|
|
|
|
|
|
|
|
|
|
|
const showMvPopup = () => {
|
|
|
|
const showMvPopup = () => {
|
|
|
|
console.log("test");
|
|
|
|
|
|
|
|
showMovie.value = true;
|
|
|
|
showMovie.value = true;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const crop = ref({
|
|
|
|
|
|
|
|
show: false,
|
|
|
|
|
|
|
|
img: null,
|
|
|
|
|
|
|
|
outputType: "jpeg",
|
|
|
|
|
|
|
|
autoCrop: true,
|
|
|
|
|
|
|
|
autoCropWidth: 200,
|
|
|
|
|
|
|
|
autoCropHeight: 200,
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let state = reactive({
|
|
|
|
// let state = reactive({
|
|
|
|
// imagePath: "",
|
|
|
|
// imagePath: "",
|
|
|
|
@ -79,6 +68,21 @@ const form = ref({
|
|
|
|
},
|
|
|
|
},
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const defaultTheme = {
|
|
|
|
|
|
|
|
bgColor: "#ffffff",
|
|
|
|
|
|
|
|
desc: "",
|
|
|
|
|
|
|
|
descColor: "#000000",
|
|
|
|
|
|
|
|
image: "",
|
|
|
|
|
|
|
|
// link: "",
|
|
|
|
|
|
|
|
title: "",
|
|
|
|
|
|
|
|
titleSize: "xl",
|
|
|
|
|
|
|
|
descSize: "sm",
|
|
|
|
|
|
|
|
titleColor: "#000000",
|
|
|
|
|
|
|
|
ratio: "4:3",
|
|
|
|
|
|
|
|
isShow: true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
onMounted(() => {
|
|
|
|
if (cardStore.cusCard.cus_card && cardStore.cusCard.cus_card.length > 0) {
|
|
|
|
if (cardStore.cusCard.cus_card && cardStore.cusCard.cus_card.length > 0) {
|
|
|
|
form.value = JSON.parse(cardStore.cusCard.cus_card);
|
|
|
|
form.value = JSON.parse(cardStore.cusCard.cus_card);
|
|
|
|
@ -209,13 +213,63 @@ const moveBtn = (type, index) => {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const afterRead = async (file, name) => {
|
|
|
|
const afterRead = async (file, name) => {
|
|
|
|
// crop.value.show = true
|
|
|
|
crop.value.show = true
|
|
|
|
// const ofile = file.file
|
|
|
|
const ofile = file.file
|
|
|
|
// crop.value.img = URL.createObjectURL(ofile);
|
|
|
|
crop.value.img = URL.createObjectURL(ofile);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// const imgFile = new FormData();
|
|
|
|
|
|
|
|
// imgFile.append("fileType", "IMAGE");
|
|
|
|
|
|
|
|
// imgFile.append("file", file.file);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// showLoadingToast({
|
|
|
|
|
|
|
|
// duration: 0,
|
|
|
|
|
|
|
|
// message: "圖片上傳中...",
|
|
|
|
|
|
|
|
// forbidClick: true,
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let res = await axios.post(
|
|
|
|
|
|
|
|
// `${import.meta.env.VITE_APP_API_URL}/card/uploadfile`,
|
|
|
|
|
|
|
|
// imgFile,
|
|
|
|
|
|
|
|
// {}
|
|
|
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (res.data.code == 200) {
|
|
|
|
|
|
|
|
// form.value.json5.cards[form.value.page - 1].image = res.data.data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// showSuccessToast("上傳成功");
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// showToast.fail("上傳失敗");
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// START: 圖片剪裁
|
|
|
|
|
|
|
|
// Author: Wayne
|
|
|
|
|
|
|
|
import { Cropper } from "vue-advanced-cropper";
|
|
|
|
|
|
|
|
import "vue-advanced-cropper/dist/style.css";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const myCrop = ref(null);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const crop = ref({
|
|
|
|
|
|
|
|
show: false,
|
|
|
|
|
|
|
|
img: null,
|
|
|
|
|
|
|
|
outputType: "jpeg",
|
|
|
|
|
|
|
|
autoCrop: true,
|
|
|
|
|
|
|
|
autoCropWidth: 200,
|
|
|
|
|
|
|
|
autoCropHeight: 200,
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const onCrop = () => {
|
|
|
|
|
|
|
|
const { canvas } = myCrop.value.getResult();
|
|
|
|
|
|
|
|
if (canvas) {
|
|
|
|
const imgFile = new FormData();
|
|
|
|
const imgFile = new FormData();
|
|
|
|
|
|
|
|
canvas.toBlob(async (blob) => {
|
|
|
|
|
|
|
|
let ufile = new File([blob], "image.jpg");
|
|
|
|
imgFile.append("fileType", "IMAGE");
|
|
|
|
imgFile.append("fileType", "IMAGE");
|
|
|
|
imgFile.append("file", file.file);
|
|
|
|
imgFile.append("file", ufile);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
crop.value.show = false;
|
|
|
|
|
|
|
|
|
|
|
|
showLoadingToast({
|
|
|
|
showLoadingToast({
|
|
|
|
duration: 0,
|
|
|
|
duration: 0,
|
|
|
|
@ -234,12 +288,44 @@ const afterRead = async (file, name) => {
|
|
|
|
|
|
|
|
|
|
|
|
showSuccessToast("上傳成功");
|
|
|
|
showSuccessToast("上傳成功");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
showToast.fail("上傳失敗");
|
|
|
|
showFailToast("上傳失敗");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}, "image/jpeg");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const onClose = () => {
|
|
|
|
|
|
|
|
crop.value.show = false;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const setRatio = (type) => {
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
|
|
form.value.json5.cards[form.value.page - 1].ratio = '4:3';
|
|
|
|
|
|
|
|
defaultTheme.ratio = '4:3'
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
|
|
form.value.json5.cards[form.value.page - 1].ratio = '1:1';
|
|
|
|
|
|
|
|
defaultTheme.ratio = '1:1'
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
|
|
|
|
form.value.json5.cards[form.value.page - 1].ratio = '4:5';
|
|
|
|
|
|
|
|
defaultTheme.ratio = '4:5'
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const ratioToNumber = computed(() => {
|
|
|
|
|
|
|
|
let ratioArr = form.value.json5.cards[form.value.page - 1].ratio.split(':')
|
|
|
|
|
|
|
|
return (parseInt(ratioArr[0]) / parseInt(ratioArr[1]))
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// END: 圖片剪裁
|
|
|
|
|
|
|
|
|
|
|
|
const handleDelete = () => {
|
|
|
|
const handleDelete = () => {
|
|
|
|
form.value.json5.cards[form.value.page - 1].image = "";
|
|
|
|
form.value.json5.cards[form.value.page - 1].image = "";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
@ -280,9 +366,9 @@ const handleSubmit = async () => {
|
|
|
|
|
|
|
|
|
|
|
|
let res = cardStore.updateCusCard(cusCard);
|
|
|
|
let res = cardStore.updateCusCard(cusCard);
|
|
|
|
|
|
|
|
|
|
|
|
if(res){
|
|
|
|
if (res) {
|
|
|
|
showSuccessToast("建立成功");
|
|
|
|
showSuccessToast("建立成功");
|
|
|
|
}else{
|
|
|
|
} else {
|
|
|
|
showFailToast("建立失敗");
|
|
|
|
showFailToast("建立失敗");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -300,20 +386,13 @@ const handleSubmit = async () => {
|
|
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
<template>
|
|
|
|
<div class="edit page">
|
|
|
|
<div class="edit page">
|
|
|
|
<van-nav-bar
|
|
|
|
<van-nav-bar class="bg-skyBlue py-1" left-arrow @click-left="$router.push('/')">
|
|
|
|
class="bg-skyBlue py-1"
|
|
|
|
|
|
|
|
left-arrow
|
|
|
|
|
|
|
|
@click-left="$router.push('/')"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #title>
|
|
|
|
<template #title>
|
|
|
|
<h5 class="text-white mb-1"><strong>商務卡片設定</strong></h5>
|
|
|
|
<h5 class="text-white mb-1"><strong>商務卡片設定</strong></h5>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
<template #left>
|
|
|
|
<template #left>
|
|
|
|
<h4>
|
|
|
|
<h4>
|
|
|
|
<i
|
|
|
|
<i class="fa-solid fa-angle-left text-white" :style="{ opacity: 0.5 }"></i>
|
|
|
|
class="fa-solid fa-angle-left text-white"
|
|
|
|
|
|
|
|
:style="{ opacity: 0.5 }"
|
|
|
|
|
|
|
|
></i>
|
|
|
|
|
|
|
|
</h4>
|
|
|
|
</h4>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-nav-bar>
|
|
|
|
</van-nav-bar>
|
|
|
|
@ -328,58 +407,25 @@ const handleSubmit = async () => {
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
<template #extra>
|
|
|
|
<template #extra>
|
|
|
|
<!-- <van-button size="small" class="ml-1 btn-moBlue" icon="tv-o" hairline @click="$router.push('/card/video')">教學影片</van-button> -->
|
|
|
|
<!-- <van-button size="small" class="ml-1 btn-moBlue" icon="tv-o" hairline @click="$router.push('/card/video')">教學影片</van-button> -->
|
|
|
|
<van-button
|
|
|
|
<van-button size="small" class="ml-1 btn-skyBlue" icon="tv-o" hairline
|
|
|
|
size="small"
|
|
|
|
@click="showMovie = true">教學影片</van-button>
|
|
|
|
class="ml-1 btn-skyBlue"
|
|
|
|
<van-button size="small" class="ml-1 btn-skyBlue" icon="eye-o" hairline
|
|
|
|
icon="tv-o"
|
|
|
|
@click="handlePreview">名片預覽</van-button>
|
|
|
|
hairline
|
|
|
|
|
|
|
|
@click="showMovie = true"
|
|
|
|
|
|
|
|
>教學影片</van-button
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<van-button
|
|
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
|
|
class="ml-1 btn-skyBlue"
|
|
|
|
|
|
|
|
icon="eye-o"
|
|
|
|
|
|
|
|
hairline
|
|
|
|
|
|
|
|
@click="handlePreview"
|
|
|
|
|
|
|
|
>名片預覽</van-button
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-cell>
|
|
|
|
</van-cell>
|
|
|
|
|
|
|
|
|
|
|
|
<van-popup v-model:show="showMovie" class="p-3" closeable>
|
|
|
|
<van-popup v-model:show="showMovie" class="p-3" closeable>
|
|
|
|
<iframe
|
|
|
|
<iframe width="375" height="215" src="https://www.youtube.com/embed/fjZsQ0Rh6yk" title="Utel電子名片教學"
|
|
|
|
width="375"
|
|
|
|
|
|
|
|
height="215"
|
|
|
|
|
|
|
|
src="https://www.youtube.com/embed/fjZsQ0Rh6yk"
|
|
|
|
|
|
|
|
title="Utel電子名片教學"
|
|
|
|
|
|
|
|
frameborder="0"
|
|
|
|
frameborder="0"
|
|
|
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
|
|
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
|
|
|
allowfullscreen
|
|
|
|
allowfullscreen></iframe>
|
|
|
|
></iframe>
|
|
|
|
|
|
|
|
</van-popup>
|
|
|
|
</van-popup>
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
<van-field v-model="form.title" label="標題文字" name="" input-align="right" error-message-align="right"
|
|
|
|
v-model="form.title"
|
|
|
|
placeholder="請輸入您在名片切換時顯示的文字" :rules="[{ required: true, message: '標題文字必填' }]" />
|
|
|
|
label="標題文字"
|
|
|
|
<van-field label="是否顯示於感應名片" class="longText" input-align="right">
|
|
|
|
name=""
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
error-message-align="right"
|
|
|
|
|
|
|
|
placeholder="請輸入您在名片切換時顯示的文字"
|
|
|
|
|
|
|
|
:rules="[{ required: true, message: '標題文字必填' }]"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
|
|
|
|
label="是否顯示於感應名片"
|
|
|
|
|
|
|
|
class="longText"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #input>
|
|
|
|
<template #input>
|
|
|
|
<van-switch
|
|
|
|
<van-switch v-model="form.showNfc" size="18px" active-color="#345068" inactive-color="#888888" />
|
|
|
|
v-model="form.showNfc"
|
|
|
|
|
|
|
|
size="18px"
|
|
|
|
|
|
|
|
active-color="#345068"
|
|
|
|
|
|
|
|
inactive-color="#888888"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
</van-cell-group>
|
|
|
|
</van-cell-group>
|
|
|
|
@ -390,25 +436,13 @@ const handleSubmit = async () => {
|
|
|
|
|
|
|
|
|
|
|
|
<div class="bg-lightPink px-2 pt-3">
|
|
|
|
<div class="bg-lightPink px-2 pt-3">
|
|
|
|
<ul class="nav nav-tabs">
|
|
|
|
<ul class="nav nav-tabs">
|
|
|
|
<li
|
|
|
|
<li class="nav-item" v-for="(card, index) in form.json5.cards" :key="index"
|
|
|
|
class="nav-item"
|
|
|
|
@click="form.page = index + 1">
|
|
|
|
v-for="(card, index) in form.json5.cards"
|
|
|
|
<button type="button" class="nav-link" :class="{ active: form.page === index + 1 }">
|
|
|
|
:key="index"
|
|
|
|
|
|
|
|
@click="form.page = index + 1"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<button
|
|
|
|
|
|
|
|
type="button"
|
|
|
|
|
|
|
|
class="nav-link"
|
|
|
|
|
|
|
|
:class="{ active: form.page === index + 1 }"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
{{ index + 1 }}
|
|
|
|
{{ index + 1 }}
|
|
|
|
</button>
|
|
|
|
</button>
|
|
|
|
</li>
|
|
|
|
</li>
|
|
|
|
<li
|
|
|
|
<li class="nav-item" @click="addCard" v-if="form.json5.cards.length < 10">
|
|
|
|
class="nav-item"
|
|
|
|
|
|
|
|
@click="addCard"
|
|
|
|
|
|
|
|
v-if="form.json5.cards.length < 10"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<button type="button" class="nav-link">
|
|
|
|
<button type="button" class="nav-link">
|
|
|
|
<i class="fa fa-plus-circle"></i> 新增
|
|
|
|
<i class="fa fa-plus-circle"></i> 新增
|
|
|
|
</button>
|
|
|
|
</button>
|
|
|
|
@ -416,91 +450,43 @@ const handleSubmit = async () => {
|
|
|
|
</ul>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<van-divider
|
|
|
|
<van-divider :style="{
|
|
|
|
:style="{
|
|
|
|
|
|
|
|
color: '#345068',
|
|
|
|
color: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
padding: '0 16px',
|
|
|
|
padding: '0 16px',
|
|
|
|
}"
|
|
|
|
}"><strong>卡片設定</strong></van-divider>
|
|
|
|
><strong>卡片設定</strong></van-divider
|
|
|
|
|
|
|
|
>
|
|
|
|
<van-field label="調整卡片順序" :border="false" v-if="form.json5.cards.length > 1">
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
|
|
|
|
label="調整卡片順序"
|
|
|
|
|
|
|
|
:border="false"
|
|
|
|
|
|
|
|
v-if="form.json5.cards.length > 1"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #button>
|
|
|
|
<template #button>
|
|
|
|
<van-button
|
|
|
|
<van-button size="small" class="ml-1 btn-skyBlue" icon="arrow-left"
|
|
|
|
size="small"
|
|
|
|
@click="moveCard(0, form.page)">前移</van-button>
|
|
|
|
class="ml-1 btn-skyBlue"
|
|
|
|
<van-button size="small" class="ml-1 btn-skyBlue" icon="arrow"
|
|
|
|
icon="arrow-left"
|
|
|
|
@click="moveCard(1, form.page)">後移</van-button>
|
|
|
|
@click="moveCard(0, form.page)"
|
|
|
|
<van-button size="small" class="ml-1 btn-tomatoRed" icon="delete-o"
|
|
|
|
>前移</van-button
|
|
|
|
@click="delCard(form.page)"></van-button>
|
|
|
|
>
|
|
|
|
|
|
|
|
<van-button
|
|
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
|
|
class="ml-1 btn-skyBlue"
|
|
|
|
|
|
|
|
icon="arrow"
|
|
|
|
|
|
|
|
@click="moveCard(1, form.page)"
|
|
|
|
|
|
|
|
>後移</van-button
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<van-button
|
|
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
|
|
class="ml-1 btn-tomatoRed"
|
|
|
|
|
|
|
|
icon="delete-o"
|
|
|
|
|
|
|
|
@click="delCard(form.page)"
|
|
|
|
|
|
|
|
></van-button>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
<van-field v-model="form.json5.cards[form.page - 1].bgColor" label="卡片底色" id="vcard-bgColor"
|
|
|
|
v-model="form.json5.cards[form.page - 1].bgColor"
|
|
|
|
input-align="right" placeholder="請輸入卡片底色的色碼,如:#333333" :border="false"
|
|
|
|
label="卡片底色"
|
|
|
|
:rules="[{ required: true, message: '卡片底色色碼必填' }]">
|
|
|
|
id="vcard-bgColor"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
placeholder="請輸入卡片底色的色碼,如:#333333"
|
|
|
|
|
|
|
|
:border="false"
|
|
|
|
|
|
|
|
:rules="[{ required: true, message: '卡片底色色碼必填' }]"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #button>
|
|
|
|
<template #button>
|
|
|
|
<input
|
|
|
|
<input v-model="form.json5.cards[form.page - 1].bgColor" type="color" class="form-control-color" />
|
|
|
|
v-model="form.json5.cards[form.page - 1].bgColor"
|
|
|
|
|
|
|
|
type="color"
|
|
|
|
|
|
|
|
class="form-control-color"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
|
|
|
|
|
|
|
|
<van-divider
|
|
|
|
<van-divider :style="{
|
|
|
|
:style="{
|
|
|
|
|
|
|
|
color: '#345068',
|
|
|
|
color: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
padding: '0 16px',
|
|
|
|
padding: '0 16px',
|
|
|
|
}"
|
|
|
|
}"><strong>內容圖片設定</strong></van-divider>
|
|
|
|
><strong>內容圖片設定</strong></van-divider
|
|
|
|
|
|
|
|
>
|
|
|
|
<van-field v-model="form.json5.cards[form.page - 1].ratio" :border="false">
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
|
|
|
|
v-model="form.json5.cards[form.page - 1].ratio"
|
|
|
|
|
|
|
|
:border="false"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #input>
|
|
|
|
<template #input>
|
|
|
|
<van-uploader
|
|
|
|
<van-uploader :after-read="afterRead" :max-count="1" name="cardimage" @delete="handleDelete">
|
|
|
|
:after-read="afterRead"
|
|
|
|
<template v-if="form.json5.cards[form.page - 1].image.length > 0">
|
|
|
|
:max-count="1"
|
|
|
|
|
|
|
|
name="cardimage"
|
|
|
|
|
|
|
|
@delete="handleDelete"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template
|
|
|
|
|
|
|
|
v-if="form.json5.cards[form.page - 1].image.length > 0"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<div class="upload-main">
|
|
|
|
<div class="upload-main">
|
|
|
|
<img
|
|
|
|
<img class="upload-img" :src="form.json5.cards[form.page - 1].image" alt="" />
|
|
|
|
class="upload-img"
|
|
|
|
|
|
|
|
:src="form.json5.cards[form.page - 1].image"
|
|
|
|
|
|
|
|
alt=""
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
<p class="ml-3 px-2 py-1 text-white bg-moBlue rounded-pill">
|
|
|
|
<p class="ml-3 px-2 py-1 text-white bg-moBlue rounded-pill">
|
|
|
|
<i class="fa-solid fa-arrow-up"></i> 點擊更換圖片
|
|
|
|
<i class="fa-solid fa-arrow-up"></i> 點擊更換圖片
|
|
|
|
</p>
|
|
|
|
</p>
|
|
|
|
@ -508,10 +494,7 @@ const handleSubmit = async () => {
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
<template v-else>
|
|
|
|
<template v-else>
|
|
|
|
<div class="upload-main">
|
|
|
|
<div class="upload-main">
|
|
|
|
<img
|
|
|
|
<img class="upload-img" src="@/assets/images/upload.jpg" />
|
|
|
|
class="upload-img"
|
|
|
|
|
|
|
|
src="@/assets/images/upload.jpg"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
<p class="ml-3 px-2 py-1 text-white bg-skyBlue rounded-pill">
|
|
|
|
<p class="ml-3 px-2 py-1 text-white bg-skyBlue rounded-pill">
|
|
|
|
<i class="fa-solid fa-arrow-up"></i> 請上傳圖片
|
|
|
|
<i class="fa-solid fa-arrow-up"></i> 請上傳圖片
|
|
|
|
</p>
|
|
|
|
</p>
|
|
|
|
@ -521,254 +504,106 @@ const handleSubmit = async () => {
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
<van-divider :style="{
|
|
|
|
v-model="form.json5.cards[form.page - 1].ratio"
|
|
|
|
|
|
|
|
label="圖片長寬比"
|
|
|
|
|
|
|
|
id="vcard-ratio"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
:border="false"
|
|
|
|
|
|
|
|
placeholder="請輸入圖片長寬比,比如:20:13、1:1、6:8"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<van-divider
|
|
|
|
|
|
|
|
:style="{
|
|
|
|
|
|
|
|
color: '#345068',
|
|
|
|
color: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
padding: '0 16px',
|
|
|
|
padding: '0 16px',
|
|
|
|
}"
|
|
|
|
}"><strong>卡片標題</strong></van-divider>
|
|
|
|
><strong>卡片標題</strong></van-divider
|
|
|
|
|
|
|
|
>
|
|
|
|
<van-field v-model="form.json5.cards[form.page - 1].title" label="標題文字" id="vcard-title" input-align="right"
|
|
|
|
|
|
|
|
placeholder="連結(需輸入完整網址,http://..,https://...)" :rules="[{ required: true, message: '請填寫卡片標題文字' }]" />
|
|
|
|
<van-field
|
|
|
|
|
|
|
|
v-model="form.json5.cards[form.page - 1].title"
|
|
|
|
<van-field v-model="form.json5.cards[form.page - 1].titleSize" is-link readonly label="標題文字大小"
|
|
|
|
label="標題文字"
|
|
|
|
id="vcard-titleSize" input-align="right" placeholder="請輸入標題文字的色碼,如:#333333"
|
|
|
|
id="vcard-title"
|
|
|
|
@click="showTitleSizePicker = true" />
|
|
|
|
input-align="right"
|
|
|
|
<van-popup v-model:show="showTitleSizePicker" round position="bottom">
|
|
|
|
placeholder="連結(需輸入完整網址,http://..,https://...)"
|
|
|
|
<van-picker :columns="sizeColumns" @cancel="showTitleSizePicker = false" @confirm="onTitleSizeConfirm" />
|
|
|
|
:rules="[{ required: true, message: '請填寫卡片標題文字' }]"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
|
|
|
|
v-model="form.json5.cards[form.page - 1].titleSize"
|
|
|
|
|
|
|
|
is-link
|
|
|
|
|
|
|
|
readonly
|
|
|
|
|
|
|
|
label="標題文字大小"
|
|
|
|
|
|
|
|
id="vcard-titleSize"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
placeholder="請輸入標題文字的色碼,如:#333333"
|
|
|
|
|
|
|
|
@click="showTitleSizePicker = true"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
<van-popup
|
|
|
|
|
|
|
|
v-model:show="showTitleSizePicker"
|
|
|
|
|
|
|
|
round
|
|
|
|
|
|
|
|
position="bottom"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<van-picker
|
|
|
|
|
|
|
|
:columns="sizeColumns"
|
|
|
|
|
|
|
|
@cancel="showTitleSizePicker = false"
|
|
|
|
|
|
|
|
@confirm="onTitleSizeConfirm"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</van-popup>
|
|
|
|
</van-popup>
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
<van-field v-model="form.json5.cards[form.page - 1].titleColor" label="標題文字顏色" id="vcard-titleColor"
|
|
|
|
v-model="form.json5.cards[form.page - 1].titleColor"
|
|
|
|
input-align="right" placeholder="請輸入標題文字的色碼,如:#333333" :border="false"
|
|
|
|
label="標題文字顏色"
|
|
|
|
:rules="[{ required: true, message: '標題文字色碼必填' }]">
|
|
|
|
id="vcard-titleColor"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
placeholder="請輸入標題文字的色碼,如:#333333"
|
|
|
|
|
|
|
|
:border="false"
|
|
|
|
|
|
|
|
:rules="[{ required: true, message: '標題文字色碼必填' }]"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #button>
|
|
|
|
<template #button>
|
|
|
|
<input
|
|
|
|
<input v-model="form.json5.cards[form.page - 1].titleColor" type="color" class="form-control-color" />
|
|
|
|
v-model="form.json5.cards[form.page - 1].titleColor"
|
|
|
|
|
|
|
|
type="color"
|
|
|
|
|
|
|
|
class="form-control-color"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
|
|
|
|
|
|
|
|
<van-divider
|
|
|
|
<van-divider :style="{
|
|
|
|
:style="{
|
|
|
|
|
|
|
|
color: '#345068',
|
|
|
|
color: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
padding: '0 16px',
|
|
|
|
padding: '0 16px',
|
|
|
|
}"
|
|
|
|
}"><strong>卡片說明文字</strong></van-divider>
|
|
|
|
><strong>卡片說明文字</strong></van-divider
|
|
|
|
|
|
|
|
>
|
|
|
|
<van-field v-model="form.json5.cards[form.page - 1].desc" label="說明文字" label-align="top" id="vcard-desc"
|
|
|
|
|
|
|
|
type="textarea" maxlength="50" placeholder="請填寫卡片說明文字" show-word-limit
|
|
|
|
<van-field
|
|
|
|
:rules="[{ required: true, message: '請填寫卡片說明文字' }]" />
|
|
|
|
v-model="form.json5.cards[form.page - 1].desc"
|
|
|
|
|
|
|
|
label="說明文字"
|
|
|
|
<van-field v-model="form.json5.cards[form.page - 1].descSize" is-link readonly label="說明文字大小"
|
|
|
|
label-align="top"
|
|
|
|
id="vcard-descSize" input-align="right" placeholder="請輸入說明文字的色碼,如:#333333"
|
|
|
|
id="vcard-desc"
|
|
|
|
@click="showDescSizePicker = true" />
|
|
|
|
type="textarea"
|
|
|
|
<van-popup v-model:show="showDescSizePicker" round position="bottom">
|
|
|
|
maxlength="50"
|
|
|
|
<van-picker :columns="sizeColumns" @cancel="showDescSizePicker = false" @confirm="onDescSizeConfirm" />
|
|
|
|
placeholder="請填寫卡片說明文字"
|
|
|
|
|
|
|
|
show-word-limit
|
|
|
|
|
|
|
|
:rules="[{ required: true, message: '請填寫卡片說明文字' }]"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
|
|
|
|
v-model="form.json5.cards[form.page - 1].descSize"
|
|
|
|
|
|
|
|
is-link
|
|
|
|
|
|
|
|
readonly
|
|
|
|
|
|
|
|
label="說明文字大小"
|
|
|
|
|
|
|
|
id="vcard-descSize"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
placeholder="請輸入說明文字的色碼,如:#333333"
|
|
|
|
|
|
|
|
@click="showDescSizePicker = true"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
<van-popup
|
|
|
|
|
|
|
|
v-model:show="showDescSizePicker"
|
|
|
|
|
|
|
|
round
|
|
|
|
|
|
|
|
position="bottom"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<van-picker
|
|
|
|
|
|
|
|
:columns="sizeColumns"
|
|
|
|
|
|
|
|
@cancel="showDescSizePicker = false"
|
|
|
|
|
|
|
|
@confirm="onDescSizeConfirm"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</van-popup>
|
|
|
|
</van-popup>
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
<van-field v-model="form.json5.cards[form.page - 1].descColor" label="說明文字顏色" id="vcard-descColor"
|
|
|
|
v-model="form.json5.cards[form.page - 1].descColor"
|
|
|
|
input-align="right" placeholder="請輸入說明文字的色碼,如:#333333" :rules="[{ required: true, message: '說明文字色碼必填' }]">
|
|
|
|
label="說明文字顏色"
|
|
|
|
|
|
|
|
id="vcard-descColor"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
placeholder="請輸入說明文字的色碼,如:#333333"
|
|
|
|
|
|
|
|
:rules="[{ required: true, message: '說明文字色碼必填' }]"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #button>
|
|
|
|
<template #button>
|
|
|
|
<input
|
|
|
|
<input v-model="form.json5.cards[form.page - 1].descColor" type="color" class="form-control-color" />
|
|
|
|
v-model="form.json5.cards[form.page - 1].descColor"
|
|
|
|
|
|
|
|
type="color"
|
|
|
|
|
|
|
|
class="form-control-color"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
|
|
|
|
|
|
|
|
<van-divider
|
|
|
|
<van-divider :style="{
|
|
|
|
:style="{
|
|
|
|
|
|
|
|
color: '#345068',
|
|
|
|
color: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
borderColor: '#345068',
|
|
|
|
padding: '0 16px',
|
|
|
|
padding: '0 16px',
|
|
|
|
}"
|
|
|
|
}"><strong>按鈕連結設定</strong></van-divider>
|
|
|
|
><strong>按鈕連結設定</strong></van-divider
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<van-field label="新增按鈕" input-align="right" :border="false">
|
|
|
|
<van-field label="新增按鈕" input-align="right" :border="false">
|
|
|
|
<template #button>
|
|
|
|
<template #button>
|
|
|
|
<van-button
|
|
|
|
<van-button size="small" class="ml-1 btn-tomatoRed" icon="add-o" @click="addBtn(form.page)">
|
|
|
|
size="small"
|
|
|
|
<h6>新增按鈕</h6>
|
|
|
|
class="ml-1 btn-tomatoRed"
|
|
|
|
</van-button>
|
|
|
|
icon="add-o"
|
|
|
|
<van-button size="small" class="ml-1 btn-skyBlue" icon="share-o" @click="addShareBtn(form.page)">
|
|
|
|
@click="addBtn(form.page)"
|
|
|
|
<h6>新增分享按鈕</h6>
|
|
|
|
><h6>新增按鈕</h6></van-button
|
|
|
|
</van-button>
|
|
|
|
>
|
|
|
|
|
|
|
|
<van-button
|
|
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
|
|
class="ml-1 btn-skyBlue"
|
|
|
|
|
|
|
|
icon="share-o"
|
|
|
|
|
|
|
|
@click="addShareBtn(form.page)"
|
|
|
|
|
|
|
|
><h6>新增分享按鈕</h6></van-button
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="cardCnt">
|
|
|
|
<div class="cardCnt">
|
|
|
|
<div
|
|
|
|
<div class="card shadow" v-for="(btn, index) in form.json5.cards[form.page - 1].btns" :key="index">
|
|
|
|
class="card shadow"
|
|
|
|
|
|
|
|
v-for="(btn, index) in form.json5.cards[form.page - 1].btns"
|
|
|
|
|
|
|
|
:key="index"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<div class="card-header">
|
|
|
|
<div class="card-header">
|
|
|
|
<van-field
|
|
|
|
<van-field :label="`控制按鈕 ${index + 1}`" :border="false" class="bg-transparent">
|
|
|
|
:label="`控制按鈕 ${index + 1}`"
|
|
|
|
|
|
|
|
:border="false"
|
|
|
|
|
|
|
|
class="bg-transparent"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #button>
|
|
|
|
<template #button>
|
|
|
|
<van-button
|
|
|
|
<van-button size="small" class="bg-transparent border-0" icon="arrow-up"
|
|
|
|
size="small"
|
|
|
|
@click="moveBtn(0, index)" v-if="form.json5.cards[form.page - 1].btns.length > 1"></van-button>
|
|
|
|
class="bg-transparent border-0"
|
|
|
|
<van-button size="small" class="bg-transparent border-0" icon="arrow-down"
|
|
|
|
icon="arrow-up"
|
|
|
|
@click="moveBtn(1, index)" v-if="form.json5.cards[form.page - 1].btns.length > 1"></van-button>
|
|
|
|
@click="moveBtn(0, index)"
|
|
|
|
<van-button size="small" class="bg-transparent border-0" icon="delete-o"
|
|
|
|
v-if="form.json5.cards[form.page - 1].btns.length > 1"
|
|
|
|
@click="delBtn(index)"></van-button>
|
|
|
|
></van-button>
|
|
|
|
|
|
|
|
<van-button
|
|
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
|
|
class="bg-transparent border-0"
|
|
|
|
|
|
|
|
icon="arrow-down"
|
|
|
|
|
|
|
|
@click="moveBtn(1, index)"
|
|
|
|
|
|
|
|
v-if="form.json5.cards[form.page - 1].btns.length > 1"
|
|
|
|
|
|
|
|
></van-button>
|
|
|
|
|
|
|
|
<van-button
|
|
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
|
|
class="bg-transparent border-0"
|
|
|
|
|
|
|
|
icon="delete-o"
|
|
|
|
|
|
|
|
@click="delBtn(index)"
|
|
|
|
|
|
|
|
></van-button>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
|
|
<div class="card-body">
|
|
|
|
<van-field
|
|
|
|
<van-field v-model="btn.text" :label="`按鈕 ${index + 1} 文字`" id="cardbtn-text-0" input-align="right"
|
|
|
|
v-model="btn.text"
|
|
|
|
placeholder="請填寫按鈕文字" :rules="[{ required: true, message: '請填寫按鈕文字' }]" />
|
|
|
|
:label="`按鈕 ${index + 1} 文字`"
|
|
|
|
|
|
|
|
id="cardbtn-text-0"
|
|
|
|
<van-field v-model="btn.link" :label="`按鈕 ${index + 1} 連結`" id="cardbtn-link-0" input-align="right"
|
|
|
|
input-align="right"
|
|
|
|
type="url" placeholder="連結(需輸入完整網址,http://..,https://...)"
|
|
|
|
placeholder="請填寫按鈕文字"
|
|
|
|
:rules="[{ required: true, message: '請填寫按鈕連結' }]" />
|
|
|
|
:rules="[{ required: true, message: '請填寫按鈕文字' }]"
|
|
|
|
|
|
|
|
/>
|
|
|
|
<van-field v-model="btn.color" label="按鈕背景顏色" id="vcard-titleColor" input-align="right"
|
|
|
|
|
|
|
|
placeholder="請輸入標題文字的色碼,如:#333333" :rules="[{ required: true, message: '標題文字色碼必填' }]">
|
|
|
|
<van-field
|
|
|
|
|
|
|
|
v-model="btn.link"
|
|
|
|
|
|
|
|
:label="`按鈕 ${index + 1} 連結`"
|
|
|
|
|
|
|
|
id="cardbtn-link-0"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
type="url"
|
|
|
|
|
|
|
|
placeholder="連結(需輸入完整網址,http://..,https://...)"
|
|
|
|
|
|
|
|
:rules="[{ required: true, message: '請填寫按鈕連結' }]"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
|
|
|
|
v-model="btn.color"
|
|
|
|
|
|
|
|
label="按鈕背景顏色"
|
|
|
|
|
|
|
|
id="vcard-titleColor"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
placeholder="請輸入標題文字的色碼,如:#333333"
|
|
|
|
|
|
|
|
:rules="[{ required: true, message: '標題文字色碼必填' }]"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #button>
|
|
|
|
<template #button>
|
|
|
|
<input
|
|
|
|
<input v-model="btn.color" type="color" class="colorCube" />
|
|
|
|
v-model="btn.color"
|
|
|
|
|
|
|
|
type="color"
|
|
|
|
|
|
|
|
class="colorCube"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
|
|
|
|
|
|
|
|
<van-field
|
|
|
|
<van-field v-model="btn.btnHeight" label="按鈕大小" id="vcard-btnHeight" input-align="right"
|
|
|
|
v-model="btn.btnHeight"
|
|
|
|
:border="false" :rules="[{ required: true, message: '按鈕大小必填' }]">
|
|
|
|
label="按鈕大小"
|
|
|
|
|
|
|
|
id="vcard-btnHeight"
|
|
|
|
|
|
|
|
input-align="right"
|
|
|
|
|
|
|
|
:border="false"
|
|
|
|
|
|
|
|
:rules="[{ required: true, message: '按鈕大小必填' }]"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #input>
|
|
|
|
<template #input>
|
|
|
|
<van-radio-group
|
|
|
|
<van-radio-group direction="horizontal" v-model="btn.btnHeight" checked-color="#345068">
|
|
|
|
direction="horizontal"
|
|
|
|
<van-radio name="sm" @click="btn.btnHeight = 'sm'">sm</van-radio>
|
|
|
|
v-model="btn.btnHeight"
|
|
|
|
<van-radio name="md" @click="btn.btnHeight = 'md'">md</van-radio>
|
|
|
|
checked-color="#345068"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<van-radio name="sm" @click="btn.btnHeight = 'sm'"
|
|
|
|
|
|
|
|
>sm</van-radio
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<van-radio name="md" @click="btn.btnHeight = 'md'"
|
|
|
|
|
|
|
|
>md</van-radio
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
</van-radio-group>
|
|
|
|
</van-radio-group>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</van-field>
|
|
|
|
</van-field>
|
|
|
|
@ -787,12 +622,35 @@ const handleSubmit = async () => {
|
|
|
|
</van-form>
|
|
|
|
</van-form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<van-overlay :show="crop.show" @click="crop.show = false" />
|
|
|
|
|
|
|
|
<div class="cropper-section" v-if="crop.show">
|
|
|
|
|
|
|
|
<div class="crop-area">
|
|
|
|
|
|
|
|
<cropper class="cropper" ref="myCrop" :src="crop.img" :stencil-props="{
|
|
|
|
|
|
|
|
aspectRatio: ratioToNumber,
|
|
|
|
|
|
|
|
}" :auto-zoom="true" />
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="crop-btn">
|
|
|
|
|
|
|
|
<div class="btn-group btn-group-sm" role="group" aria-label="Small button group">
|
|
|
|
|
|
|
|
<button type="button" class="btn btn-outline-success" @click="setRatio(1)"
|
|
|
|
|
|
|
|
:class="{ active: form.json5.cards[form.page - 1].ratio == '4:3' }">橫向4:3</button>
|
|
|
|
|
|
|
|
<button type="button" class="btn btn-outline-success" @click="setRatio(2)"
|
|
|
|
|
|
|
|
:class="{ active: form.json5.cards[form.page - 1].ratio == '1:1' }">方形1:1</button>
|
|
|
|
|
|
|
|
<button type="button" class="btn btn-outline-success" @click="setRatio(3)"
|
|
|
|
|
|
|
|
:class="{ active: form.json5.cards[form.page - 1].ratio == '4:5' }">直向4:5</button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
|
|
|
<van-button type="primary" size="small" plain @click="onClose">取消</van-button>
|
|
|
|
|
|
|
|
<van-button type="success" size="small" plain @click="onCrop">剪裁</van-button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
<style lang="less" scoped>
|
|
|
|
|
|
|
|
.edit {
|
|
|
|
|
|
|
|
|
|
|
|
.edit{
|
|
|
|
.colorCube,
|
|
|
|
.colorCube,.colorCube:valid {
|
|
|
|
.colorCube:valid {
|
|
|
|
appearance: none;
|
|
|
|
appearance: none;
|
|
|
|
background: 0 0;
|
|
|
|
background: 0 0;
|
|
|
|
border: 1px solid #ced4da;
|
|
|
|
border: 1px solid #ced4da;
|
|
|
|
@ -800,13 +658,17 @@ const handleSubmit = async () => {
|
|
|
|
padding: 0 2px;
|
|
|
|
padding: 0 2px;
|
|
|
|
border-radius: 5px;
|
|
|
|
border-radius: 5px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.flex-section {
|
|
|
|
.flex-section {
|
|
|
|
width: 100%;
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
:deep(.van-field__control){
|
|
|
|
|
|
|
|
|
|
|
|
:deep(.van-field__control) {
|
|
|
|
justify-content: center;
|
|
|
|
justify-content: center;
|
|
|
|
|
|
|
|
|
|
|
|
.upload-main {
|
|
|
|
.upload-main {
|
|
|
|
flex-direction: column;
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
|
|
|
|
.upload-img {
|
|
|
|
.upload-img {
|
|
|
|
margin: 5px 0;
|
|
|
|
margin: 5px 0;
|
|
|
|
width: 250px;
|
|
|
|
width: 250px;
|
|
|
|
@ -816,13 +678,14 @@ const handleSubmit = async () => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.nav-tabs{
|
|
|
|
.nav-tabs {
|
|
|
|
.nav-link{
|
|
|
|
.nav-link {
|
|
|
|
color: #4a677d;
|
|
|
|
color: #4a677d;
|
|
|
|
background-color: #fff;
|
|
|
|
background-color: #fff;
|
|
|
|
border-color: transparent;
|
|
|
|
border-color: transparent;
|
|
|
|
margin-right: 4px;
|
|
|
|
margin-right: 4px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.nav-item.show .nav-link,
|
|
|
|
.nav-item.show .nav-link,
|
|
|
|
.nav-link.active {
|
|
|
|
.nav-link.active {
|
|
|
|
color: #fff;
|
|
|
|
color: #fff;
|
|
|
|
@ -831,36 +694,73 @@ const handleSubmit = async () => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.previewCnt{
|
|
|
|
.previewCnt {
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
justify-content: center;
|
|
|
|
justify-content: center;
|
|
|
|
padding: 15px 0;
|
|
|
|
padding: 15px 0;
|
|
|
|
background-color: #333;
|
|
|
|
background-color: #333;
|
|
|
|
.card{
|
|
|
|
|
|
|
|
width:300px;
|
|
|
|
.card {
|
|
|
|
|
|
|
|
width: 300px;
|
|
|
|
border: none;
|
|
|
|
border: none;
|
|
|
|
// transform: scale(0.75);
|
|
|
|
// transform: scale(0.75);
|
|
|
|
overflow: hidden;
|
|
|
|
overflow: hidden;
|
|
|
|
.card-body{
|
|
|
|
|
|
|
|
|
|
|
|
.card-body {
|
|
|
|
padding: 15px;
|
|
|
|
padding: 15px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cardCnt{
|
|
|
|
.cardCnt {
|
|
|
|
padding: 15px;
|
|
|
|
padding: 15px;
|
|
|
|
.card{
|
|
|
|
|
|
|
|
|
|
|
|
.card {
|
|
|
|
margin-bottom: 20px;
|
|
|
|
margin-bottom: 20px;
|
|
|
|
.card-header{
|
|
|
|
|
|
|
|
|
|
|
|
.card-header {
|
|
|
|
padding: 0;
|
|
|
|
padding: 0;
|
|
|
|
background-color: #ddd ;
|
|
|
|
background-color: #ddd;
|
|
|
|
border: none;
|
|
|
|
border: none;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.card-body{
|
|
|
|
|
|
|
|
padding:10px 0;
|
|
|
|
.card-body {
|
|
|
|
|
|
|
|
padding: 10px 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.cropper {
|
|
|
|
|
|
|
|
height: 300px;
|
|
|
|
|
|
|
|
// width: 300px;
|
|
|
|
|
|
|
|
background: #ddd;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.cropper-section {
|
|
|
|
|
|
|
|
margin: 0 auto;
|
|
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
|
|
top: 50px;
|
|
|
|
|
|
|
|
// left: 0;
|
|
|
|
|
|
|
|
height: 350px;
|
|
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
max-width: 500px;
|
|
|
|
|
|
|
|
background: #ddd;
|
|
|
|
|
|
|
|
z-index: 8888;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.crop-area {
|
|
|
|
|
|
|
|
margin: 5 auto;
|
|
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
height: 330px;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.crop-btn {
|
|
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
</style>
|
|
|
|
</style>
|
|
|
|
|