Compare commits

..

No commits in common. '39b5bd0ab564998042c7f6007c7f093e946d9a63' and '4ba596edca2b93abb904a1c57ddc9575dd9b7b0c' have entirely different histories.

@ -2,9 +2,4 @@ import ajax from "./ajax";
export const getCardData = async () => export const getCardData = async () =>
ajax(`/Card/getCardData`); ajax(`/Card/getCardData`);
export const updateRemark = async (params) =>
ajax(`/card/updateRemark`, params, "POST");
export const updateIsSend = async (params) =>
ajax(`/card/updateIsSend`, params, "POST");

@ -100,3 +100,4 @@ export const getUserCateList = async () =>
export const updateUserCate = async (params) => export const updateUserCate = async (params) =>
ajax(`/UserCate/updateUserCate`, params, "POST"); ajax(`/UserCate/updateUserCate`, params, "POST");

@ -96,9 +96,9 @@ function genCard1(ctx) {
altText: vcard.altText, altText: vcard.altText,
contents: { contents: {
type: "carousel", type: "carousel",
contents: vcard.cards contents: _.map(vcard.cards, (card, cardIdx) =>
.filter(card => card.isSend === true) renderCard({ ...ctx, card, cardIdx })
.map((card, cardIdx) => renderCard({ ...ctx, card, cardIdx })) ),
}, },
}; };
} }

@ -2,11 +2,11 @@
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, onMounted, watch, computed, nextTick } from "vue"; import { ref, onMounted , watch, computed, nextTick } from "vue";
import { useCardStore } from '@/store/card' import { useCardStore } from '@/store/card'
import { useRouter, useRoute } from "vue-router"; import { useRouter,useRoute } from "vue-router";
import axios from "axios"; import axios from "axios";
import _ from "lodash"; import _ from "lodash";
@ -54,8 +54,6 @@ const form = ref({
titleSize: "xl", titleSize: "xl",
cards: [ cards: [
{ {
isSend: false,
aIsSend: false,
bgColor: "#ffffff", bgColor: "#ffffff",
desc: "", desc: "",
descColor: "#000000", descColor: "#000000",
@ -82,9 +80,7 @@ const defaultTheme = {
descSize: "sm", descSize: "sm",
titleColor: "#000000", titleColor: "#000000",
ratio: "4:3", ratio: "4:3",
isShow: true, isShow: true
isSend: false,
aIsSend: false,
} }
const userid = ref(route.query.user_id || null) const userid = ref(route.query.user_id || null)
@ -92,17 +88,17 @@ const userid = ref(route.query.user_id || null)
onMounted(async () => { onMounted(async () => {
// queryuserid // queryuserid
if (userid.value) { if(userid.value){
let res = await getCusCard({ userid: userid.value }) let res = await getCusCard( {userid: userid.value} )
if (res.code === 200) { if(res.code===200){
if (res.data.cus_card && res.data.cus_card.length > 0) { if(res.data.cus_card && res.data.cus_card.length>0){
form.value = JSON.parse(res.data.cus_card) form.value = JSON.parse(res.data.cus_card)
} }
} }
} else { }else{
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);
} }
} }
@ -236,15 +232,6 @@ const moveBtn = (type, index) => {
} }
}; };
const handleChangeIsSend = () => {
// form.json5.cards,isSendtrue10
let isSendCount = form.value.json5.cards.filter(card => card.isSend).length
if (isSendCount > 10) {
showFailToast('最多只能設定10張卡片為發送')
form.value.json5.cards[form.value.page - 1].isSend = false
}
}
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
@ -364,7 +351,6 @@ const handleDelete = () => {
}; };
const handlePreview = () => { const handlePreview = () => {
router.push({ router.push({
name: "CardPreview", name: "CardPreview",
state: { content: JSON.stringify(form.value) }, state: { content: JSON.stringify(form.value) },
@ -384,13 +370,13 @@ const onDescSizeConfirm = ({ selectedOptions }) => {
}; };
const handleSubmit = async () => { const handleSubmit = async () => {
let user_id; let user_id;
if (!userid.value) { if(!userid.value){
user_id = sessionStorage.getItem("uid"); user_id= sessionStorage.getItem("uid");
} else { }else{
user_id = userid.value; user_id = userid.value;
} }
showLoadingToast({ showLoadingToast({
duration: 0, duration: 0,
@ -405,21 +391,21 @@ const handleSubmit = async () => {
user_id: user_id, user_id: user_id,
}; };
if (!userid.value) { if(!userid.value){
let res = cardStore.updateCusCard(cusCard); let res = cardStore.updateCusCard(cusCard);
if (res) { if (res) {
showSuccessToast("建立成功"); showSuccessToast("建立成功");
} else { } else {
showFailToast("建立失敗"); showFailToast("建立失敗");
} }
router.push("/card"); router.push("/card");
} else { }else{
let res = await updateCusCard(cusCard); let res = await updateCusCard(cusCard);
if (res.code === 200) { if (res.code === 200) {
showSuccessToast("建立成功"); showSuccessToast("建立成功");
} else { } else {
showFailToast("建立失敗"); showFailToast("建立失敗");
} }
router.push("/auth/getauth"); router.push("/auth/getauth");
} }
@ -427,9 +413,9 @@ const handleSubmit = async () => {
}; };
const goBack = () => { const goBack = () => {
if (!userid.value) { if(!userid.value){
router.push('/') router.push('/')
} else { }else{
router.push('/auth/getauth') router.push('/auth/getauth')
} }
}; };
@ -458,7 +444,7 @@ const goBack = () => {
<h6 class="text-darkBlue"><strong>卡片設定</strong></h6> <h6 class="text-darkBlue"><strong>卡片設定</strong></h6>
</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 size="small" class="ml-1 btn-skyBlue" icon="tv-o" hairline <van-button size="small" class="ml-1 btn-skyBlue" icon="tv-o" hairline
@click="showMovie = true">教學影片</van-button> @click="showMovie = true">教學影片</van-button>
<van-button size="small" class="ml-1 btn-skyBlue" icon="eye-o" hairline <van-button size="small" class="ml-1 btn-skyBlue" icon="eye-o" hairline
@ -472,8 +458,7 @@ const goBack = () => {
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen></iframe> allowfullscreen></iframe>
</van-popup> </van-popup>
<van-field v-model="userid" label="會員編號" name="" input-align="right" :placeholder="userid" readonly <van-field v-model="userid" label="會員編號" name="" input-align="right" :placeholder="userid" readonly v-if="userid"/>
v-if="userid" />
<van-field v-model="form.title" label="標題文字" name="" input-align="right" error-message-align="right" <van-field v-model="form.title" label="標題文字" name="" input-align="right" error-message-align="right"
placeholder="請輸入您在名片切換時顯示的文字" :rules="[{ required: true, message: '標題文字必填' }]" /> placeholder="請輸入您在名片切換時顯示的文字" :rules="[{ required: true, message: '標題文字必填' }]" />
<van-field label="是否顯示於感應名片" class="longText" input-align="right"> <van-field label="是否顯示於感應名片" class="longText" input-align="right">
@ -491,11 +476,11 @@ const goBack = () => {
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li class="nav-item" v-for="(card, index) in form.json5.cards" :key="index" <li class="nav-item" v-for="(card, index) in form.json5.cards" :key="index"
@click="form.page = index + 1"> @click="form.page = index + 1">
<button type="button" class="nav-link" :class="{ active: form.page === index + 1,send: card.isSend === true && 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 class="nav-item" @click="addCard"> <li 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>
@ -519,12 +504,6 @@ const goBack = () => {
@click="delCard(form.page)"></van-button> @click="delCard(form.page)"></van-button>
</template> </template>
</van-field> </van-field>
<van-field label="是否發送" class="longText" input-align="right">
<template #input>
<van-switch v-model="form.json5.cards[form.page - 1].isSend" size="18px" active-color="#345068"
inactive-color="#888888" @change="handleChangeIsSend" />
</template>
</van-field>
<van-field v-model="form.json5.cards[form.page - 1].bgColor" label="卡片底色" id="vcard-bgColor" <van-field v-model="form.json5.cards[form.page - 1].bgColor" label="卡片底色" id="vcard-bgColor"
input-align="right" placeholder="請輸入卡片底色的色碼,如:#333333" :border="false" input-align="right" placeholder="請輸入卡片底色的色碼,如:#333333" :border="false"
@ -563,8 +542,12 @@ const goBack = () => {
</template> </template>
</van-field> </van-field>
<van-field label="圖片網址連結" v-model="form.json5.cards[form.page - 1].link" :border="false" <van-field
placeholder="需輸入完整網址,http://..,https://..." /> label="圖片網址連結"
v-model="form.json5.cards[form.page - 1].link"
:border="false"
placeholder="需輸入完整網址,http://..,https://..."
/>
<van-divider :style="{ <van-divider :style="{
color: '#345068', color: '#345068',
@ -572,15 +555,14 @@ const goBack = () => {
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" <van-field v-model="form.json5.cards[form.page - 1].title" label="標題文字" id="vcard-title" input-align="right"
input-align="right" placeholder="請填寫卡片標題文字" :rules="[{ required: true, message: '請填寫卡片標題文字' }]" /> placeholder="請填寫卡片標題文字" :rules="[{ required: true, message: '請填寫卡片標題文字' }]" />
<van-field v-model="form.json5.cards[form.page - 1].titleSize" is-link readonly label="標題文字大小" <van-field v-model="form.json5.cards[form.page - 1].titleSize" is-link readonly label="標題文字大小"
id="vcard-titleSize" input-align="right" placeholder="請輸入標題文字的色碼,如:#333333" id="vcard-titleSize" input-align="right" placeholder="請輸入標題文字的色碼,如:#333333"
@click="showTitleSizePicker = true" /> @click="showTitleSizePicker = true" />
<van-popup v-model:show="showTitleSizePicker" round position="bottom"> <van-popup v-model:show="showTitleSizePicker" round position="bottom">
<van-picker :columns="sizeColumns" @cancel="showTitleSizePicker = false" <van-picker :columns="sizeColumns" @cancel="showTitleSizePicker = false" @confirm="onTitleSizeConfirm" />
@confirm="onTitleSizeConfirm" />
</van-popup> </van-popup>
<van-field v-model="form.json5.cards[form.page - 1].titleColor" label="標題文字顏色" id="vcard-titleColor" <van-field v-model="form.json5.cards[form.page - 1].titleColor" label="標題文字顏色" id="vcard-titleColor"
@ -609,8 +591,7 @@ const goBack = () => {
</van-popup> </van-popup>
<van-field v-model="form.json5.cards[form.page - 1].descColor" label="說明文字顏色" id="vcard-descColor" <van-field v-model="form.json5.cards[form.page - 1].descColor" label="說明文字顏色" id="vcard-descColor"
input-align="right" placeholder="請輸入說明文字的色碼,如:#333333" input-align="right" placeholder="請輸入說明文字的色碼,如:#333333" :rules="[{ required: true, message: '說明文字色碼必填' }]">
:rules="[{ required: true, message: '說明文字色碼必填' }]">
<template #button> <template #button>
<input v-model="form.json5.cards[form.page - 1].descColor" type="color" class="form-control-color" /> <input v-model="form.json5.cards[form.page - 1].descColor" type="color" class="form-control-color" />
</template> </template>
@ -639,11 +620,9 @@ const goBack = () => {
<van-field :label="`控制按鈕 ${index + 1}`" :border="false" class="bg-transparent"> <van-field :label="`控制按鈕 ${index + 1}`" :border="false" class="bg-transparent">
<template #button> <template #button>
<van-button size="small" class="bg-transparent border-0" icon="arrow-up" <van-button size="small" class="bg-transparent border-0" icon="arrow-up"
@click="moveBtn(0, index)" @click="moveBtn(0, index)" v-if="form.json5.cards[form.page - 1].btns.length > 1"></van-button>
v-if="form.json5.cards[form.page - 1].btns.length > 1"></van-button>
<van-button size="small" class="bg-transparent border-0" icon="arrow-down" <van-button size="small" class="bg-transparent border-0" icon="arrow-down"
@click="moveBtn(1, index)" @click="moveBtn(1, index)" v-if="form.json5.cards[form.page - 1].btns.length > 1"></van-button>
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" <van-button size="small" class="bg-transparent border-0" icon="delete-o"
@click="delBtn(index)"></van-button> @click="delBtn(index)"></van-button>
</template> </template>
@ -713,8 +692,9 @@ const goBack = () => {
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>
.edit { .edit {
:deep(.van-van-field__control--min-height) { :deep(.van-van-field__control--min-height){
min-height: 100px; min-height: 100px;
} }
@ -762,12 +742,6 @@ const goBack = () => {
background-color: #4a677d; background-color: #4a677d;
border-color: #4a677d #4a677d #4a677d; border-color: #4a677d #4a677d #4a677d;
} }
.nav-link.send {
background-color: #ccc;
border-color: #ccc #ccc #ccc;
}
} }
.previewCnt { .previewCnt {
@ -838,4 +812,5 @@ const goBack = () => {
background-color: #fff; background-color: #fff;
} }
} }
</style> </style>

@ -7,8 +7,6 @@ import { onMounted, ref, computed, watch } from 'vue'
import { getCard, getCusCard, getVipCard, updateSendCount, getFlexcard } from '@/api' import { getCard, getCusCard, getVipCard, updateSendCount, getFlexcard } from '@/api'
import { updateRemark, updateIsSend } from '@/api/card.js'
import { cardFactory } from '@/utils/card' import { cardFactory } from '@/utils/card'
import { genCard1 } from '@/utils/card2' import { genCard1 } from '@/utils/card2'
@ -31,10 +29,7 @@ const state = ref({
flexContent: {}, flexContent: {},
}) })
const activeName = ref('0') const activeName = ref('0');
const is_send = ref(0)
const remark = ref('')
let flexRef = ref(null) let flexRef = ref(null)
@ -68,10 +63,6 @@ onMounted(async () => {
watch(() => activeName.value, function (newVal, oldVal) { watch(() => activeName.value, function (newVal, oldVal) {
if (newVal !== oldVal) { if (newVal !== oldVal) {
showFlex(newVal) showFlex(newVal)
if(parseInt(newVal) < 2){
is_send.value = 0
remark.value = ''
}
} }
}, { immediate: true }) }, { immediate: true })
@ -102,7 +93,7 @@ async function showFlex(id) {
let data = res2.data; let data = res2.data;
data.ad_image = imageUrl.value + data.ad_image; data.ad_image = imageUrl.value + data.ad_image;
state.value.flexContent = genAdCard(JSON.parse(card), data); state.value.flexContent = genAdCard(JSON.parse(card), data);
} else { }else{
state.value.flexContent = JSON.parse(card) state.value.flexContent = JSON.parse(card)
} }
} }
@ -142,9 +133,6 @@ async function showFlex(id) {
flexRef.value.innerHTML = '' flexRef.value.innerHTML = ''
flex2html("flex", state.value.flexContent) flex2html("flex", state.value.flexContent)
} }
is_send.value = res.is_send
remark.value = res.remark
// if( card2Res.code === 200){ // if( card2Res.code === 200){
// if(card2Res.data.cus_card){ // if(card2Res.data.cus_card){
// state.flexContent = genCard1(JSON.parse(card2Res.data.cus_card)) // state.flexContent = genCard1(JSON.parse(card2Res.data.cus_card))
@ -159,29 +147,14 @@ async function showFlex(id) {
} }
} }
const handleOnChange = async () => {
//
let res = await updateIsSend({is_send:is_send.value,id:activeName.value})
if(res.code !== 200){
showToast('更新失敗')
}
}
const handleOnBlur = async () => {
//
let res = await updateRemark({remark:remark.value,id:activeName.value})
if(res.code !== 200){
showToast('更新失敗')
}
}
const sendEcard = async () => { const sendEcard = async () => {
if (!liff.isLoggedIn()) { if (!liff.isLoggedIn()) {
liff.login({ redirectUri: window.location.href }) liff.login({ redirectUri: window.location.href })
} }
let content = JSON.parse(JSON.stringify(state.value.flexContent)) let content = JSON.parse(JSON.stringify(state.value.flexContent))
// console.log('content', JSON.stringify(state.value.flexContent))
let res let res
if (activeName.value === '0') { if (activeName.value === '0') {
@ -191,15 +164,7 @@ const sendEcard = async () => {
'text': '名片的文字、數字,都可連結,請多多指教!' 'text': '名片的文字、數字,都可連結,請多多指教!'
}]) }])
} else { } else {
if(is_send.value === 1){ res = await liff.shareTargetPicker([content])
res = await liff.shareTargetPicker([content,
{
'type': 'text',
'text': remark.value
}])
}else{
res = await liff.shareTargetPicker([content])
}
} }
if (res.status === 'success') { if (res.status === 'success') {
@ -301,16 +266,6 @@ const changeTpl = async (val) => {
</div> </div>
<van-sticky position="bottom"> <van-sticky position="bottom">
<div v-if="parseInt(activeName) > 1" style="padding-top: 20px;">
<van-cell-group inset>
<van-cell center title="是否發送">
<template #right-icon>
<van-switch :active-value="1" :inactive-value="0" v-model="is_send" @change="handleOnChange"/>
</template>
</van-cell>
<van-field v-model="remark" label="分享內容附帶說明" label-width="120" nplaceholder="" @blur="handleOnBlur"/>
</van-cell-group>
</div>
<div class="bottomBtnCnt d-flex"> <div class="bottomBtnCnt d-flex">
<van-button block class="btn-skyBlue m-2" @click="sendEcard"> <van-button block class="btn-skyBlue m-2" @click="sendEcard">
<h6><i class="fa-solid fa-share-from-square"></i> 分享好友</h6> <h6><i class="fa-solid fa-share-from-square"></i> 分享好友</h6>

Loading…
Cancel
Save