商務卡片頁製作

dev
DESKTOP-8UQ1PPR\09158 3 years ago
parent 672ca8652f
commit d3176e17c4

@ -10,7 +10,11 @@ export const bindCard = async (params) =>
export const checkLineId = async (lineid) =>
ajax(`/auth/checkLineId`, { lineid }, "GET");
export const getUserInfo = async () => ajax(`/user/getUserInfo`);
export const getUserInfo = async () =>
ajax(`/user/getUserInfo`);
export const updateUserInfo = async () =>
ajax(`/user/updateUserInfo`);
export const setUserLevel = async (level) =>
ajax(`/user/setUserLevel`, { level }, "POST");

@ -27,16 +27,16 @@
}
.text-moBlue {
color: #486499 !important;
color: #4a677d !important;
}
.bg-moBlue {
background-color: #486499 !important;
background-color: #4a677d !important;
}
.bd-moBlue {
border-style: solid;
border-color: #486499 !important;
border-color: #4a677d !important;
}
.text-darkBlue {
@ -339,13 +339,13 @@ h1, h2, h3, h4, h5, h6 {
}
.btn-moBlue {
border: 1px solid #486499 !important;
border: 1px solid #4a677d !important;
color: #fff;
background-color: #486499;
background-color: #4a677d;
}
.btn-moBlue:hover {
color: #fff;
background-color: #384d76;
background-color: #374d5d;
}
.btn-darkBlue {
@ -431,14 +431,14 @@ h1, h2, h3, h4, h5, h6 {
}
.btn-outline-moBlue {
border: 1px solid #486499;
color: #486499;
border: 1px solid #4a677d;
color: #4a677d;
background-color: transparent;
background-color: #fff;
}
.btn-outline-moBlue:hover {
color: #fff;
background-color: #486499;
background-color: #4a677d;
}
.btn-outline-darkBlue {
@ -639,6 +639,11 @@ h1, h2, h3, h4, h5, h6 {
}
/* ========================================= stage ============================================= */
.page {
min-height: 100vh;
background-color: #f1e6e2;
}
.content {
padding: 15px 0;
background-color: #b2c4ce;

@ -18,7 +18,7 @@ $radius: (
$basicColor: (
lightBlue:#b2c4ce,
skyBlue:#5b7b94,
moBlue:#486499,
moBlue:#4a677d,
darkBlue:#345068,
lightPink:#f1e6e2,
cherry:#E31D64,

@ -93,6 +93,11 @@
/* ========================================= stage ============================================= */
.page{
min-height:100vh;
background-color: #f1e6e2 ;
}
.content{
padding: 15px 0;
background-color: #b2c4ce;
@ -103,19 +108,19 @@
justify-content: center;
align-items: center;
.upload-img{
width: 100px;
aspect-ratio: 1/1;
border-radius: 50%;
border:1px #d8d8d8 solid;
width: 100px;
aspect-ratio: 1/1;
border-radius: 50%;
border:1px #d8d8d8 solid;
}
}
.cropper {
}
.cropper {
height: 300px;
background: #DDD;
}
.cropper-section{
}
.cropper-section{
margin: 0 auto;
position: fixed;
text-align: center;
@ -124,14 +129,14 @@
max-width: 500px;
z-index: 8888;
.crop-area{
margin: 5 auto;
width: 100%;
margin: 5 auto;
width: 100%;
}
.crop-btn{
background-color: #666;
text-align: center;
background-color: #666;
text-align: center;
}
}
}
/* ========================================= other ============================================= */

File diff suppressed because it is too large Load Diff

@ -1,73 +1,38 @@
<template>
<div>
<van-nav-bar
title="自製名片"
right-text="關閉"
@click-right="$router.push('/')"
/>
<div class="recommend">
<div style="text-align: center; line-height: 24px; font-weight: bold;">
<br />
<span style="font-size: 19px; color: #cc0000;">
您沒有設定自製名片權限<br />
請點選下方立即購買按鈕<br />
開通自製名片相關服務<br />
</span>
<br />
<ul>
<li><img src="./images/0001.png" width="100%"></li>
<li><img src="./images/0002.png" width="100%"></li>
<li><img src="./images/0003.png" width="100%"></li>
<li><img src="./images/0004.png" width="100%"></li>
</ul>
<form name="" class="fbqs" style="text-align: center;">
<input type="button" value="立即購買" class="submit" style="padding: 3%; width: 50%; margin-left: auto; margin-right: auto;"
@click="router.push('/shop')"
>
</form>
</div>
</div>
<Footer/>
</div>
</template>
<script setup>
import { useRouter} from 'vue-router'
import Footer from '@/components/Footer.vue'
import { useRouter} from 'vue-router'
const router = useRouter()
import Footer from '@/components/Footer.vue'
</script>
const router = useRouter()
</script>
<template>
<div class="level page">
<van-nav-bar class="bg-skyBlue py-1" left-arrow @click-left="$router.push('/')">
<template #title>
<h5 class="text-white mb-1"><strong>自製名片</strong></h5>
</template>
<template #left>
<h4><i class="fa-solid fa-angle-left text-white" :style="{opacity:0.5}"></i></h4>
</template>
</van-nav-bar>
<van-cell-group inset class="mt-3">
<div class="text-darkBlue text-center py-5">
<div class="text-tomatoRed text-center mb-4"><i class="fa-solid fa-triangle-exclamation fa-5x"></i></div>
<h5 class="text-darkBlue text-center mb-2"><strong>您沒有設定自製名片權限</strong></h5>
<h6 class="text-darkBlue text-center mb-5">請點選下方立即購買按鈕<br />開通自製名片相關服務</h6>
<van-button class="btn-darkBlue px-5" icon="balance-o" size="normal" @click="router.push('/shop')"></van-button>
</div>
</van-cell-group>
</div>
</template>
<style src="@/assets/css/main.css"></style>
<style lang="less" scoped>
.recommend {
width: 100%;
padding-top: 2%;
}
.recommend ul {
width: 80%;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin: 0 auto 5% auto;
}
.recommend ul li {
width: 21%;
display: flex;
flex-direction: column;
margin: 1%;
}
.recommend ul li p {
margin-top: 2%;
font-size: 15px;
color: #333;
}
.recommend ul li span {
font-size: 0.24rem;
color: #999;
padding-top: 0.15rem;
}
</style>

@ -199,7 +199,8 @@ const overdue = computed(() => {
});
const goCardEdit = () => {
if (userInfo.value.nc_type < 2) {
// if (userInfo.value.nc_type < 2) {
if (userInfo.value.level < 2) {
router.push("/card/notice");
} else {
router.push("/card/edit");
@ -225,6 +226,11 @@ const doCopyUid = () => {
showToast("已放入剪貼簿");
};
const doShare = () => {
toClipboard(`https://liff.line.me/${import.meta.env.VITE_APP_LINE_LIFF_ID}/?aid=${store.state.user.userInfo.agent_prefix}`)
showToast("已放入剪貼簿");
};
const bindTggo = () => {
console.log(userInfo.value);
let url = `https://www.tggo.com.tw/u.cgi?&mnm=mybinding&ncode=${userInfo.value.uniqid}&name=${userInfo.value.real_name}&openExternalBrowser=1`;
@ -243,7 +249,7 @@ const handleLogout = () => {
</script>
<template>
<div class="home bg-lightPink" v-cloak>
<div class="home page" v-cloak>
<van-nav-bar class="bg-darkBlue py-3">
<template #title>
<h4 class="text-white mb-1"><strong>UTEL電子名片系統</strong></h4>
@ -287,7 +293,7 @@ const handleLogout = () => {
</div>
</div>
<div class="right">
<div class="btn btn-sm text-darkBlue" @click="handleLogout">
<div class="btn btn-sm text-darkBlue" @click="doShare">
<h4><i class="fa fa-share-alt" aria-hidden="true"></i></h4>
</div>
<div class="btn btn-sm text-darkBlue" @click="handleLogout">
@ -475,115 +481,117 @@ const handleLogout = () => {
<style src="@/assets/css/main.css"></style>
<style lang="less" scoped>
.wrapper {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
height: 100%;
.clip {
position: absolute;
.home{
.wrapper {
display: flex;
justify-content: center;
align-items: center;
color: #ffffff;
background-color: rgba(#000000, 0.8);
top: 5px;
right: 5px;
margin-left: auto;
padding: 10px;
cursor: pointer;
z-index: 1005;
}
.top {
position: relative;
display: flex;
align-items: center;
width: 100%;
flex: 1 0 0;
}
.bottom {
position: relative;
width: 100%;
flex: 0 0 auto;
padding: 15px;
.title {
flex-direction: column;
height: 100%;
.clip {
position: absolute;
display: flex;
align-items: center;
color: #ffffff;
font-weight: bold;
margin-bottom: 15px;
background-color: rgba(#000000, 0.8);
top: 5px;
right: 5px;
margin-left: auto;
padding: 10px;
cursor: pointer;
z-index: 1005;
}
.desc {
color: #ffffff;
margin-bottom: 30px;
.top {
position: relative;
display: flex;
align-items: center;
width: 100%;
flex: 1 0 0;
}
.bottom {
position: relative;
width: 100%;
flex: 0 0 auto;
padding: 15px;
.title {
color: #ffffff;
font-weight: bold;
margin-bottom: 15px;
}
.desc {
color: #ffffff;
margin-bottom: 30px;
}
}
}
}
.my-account {
position: relative;
width: 100%;
.my-account {
position: relative;
width: 100%;
padding: 20px 25px;
.avatar{
display: flex;
justify-content: space-between;
align-items: center;
.left{
display: flex;
justify-content: space-between;
align-items: center;
.left{
display: flex;
align-items: center;
flex: 1 0 0;
.imgCnt{
width:80px;
height: 80px;
min-width: 80px;
border-radius: 50%;
border:2px #fff solid;
overflow: hidden;
margin-right: 15px;
img{
width:100%;
height: 100%;
object-fit: cover;
}
}
.info{
.name{
font-weight: bold;
color: #303a47;
}
.conpany{
margin-top: 5px;
}
}
}
.right{
flex: 0 0 auto;
}
flex: 1 0 0;
.imgCnt{
width:80px;
height: 80px;
min-width: 80px;
border-radius: 50%;
border:2px #fff solid;
overflow: hidden;
margin-right: 15px;
img{
width:100%;
height: 100%;
object-fit: cover;
}
}
.info{
.name{
font-weight: bold;
color: #303a47;
}
.conpany{
margin-top: 5px;
}
}
}
.right{
flex: 0 0 auto;
}
}
.recommend{
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 0 10px;
.btn{
display: flex;
justify-content: space-between;
justify-content: center;
align-items: center;
padding: 20px 0 10px;
.btn{
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width:30%;
height: 100px;
background-color: #fff;
border-radius: 0;
.img{
font-size: 35px;
line-height: 45px;
color: #345068;
}
.text{
font-size: 16px;
font-weight: bold;
color: #345068;
}
flex-direction: column;
width:30%;
height: 100px;
background-color: #fff;
border-radius: 0;
.img{
font-size: 35px;
line-height: 45px;
color: #345068;
}
.text{
font-size: 16px;
font-weight: bold;
color: #345068;
}
}
}
}
}
</style>

@ -14,7 +14,7 @@ import { useRouter } from 'vue-router'
import { showToast } from 'vant'
import { showLoadingToast,showSuccessToast } from 'vant';
import { getUserInfo , updateCard , searchConnection, addUserFavi, setUserNfcTpl} from '@/api'
import { getUserInfo, updateUserInfo, updateCard, searchConnection, addUserFavi, setUserNfcTpl} from '@/api'
const URL = window.URL || window.webkitURL;
@ -25,6 +25,7 @@ const form = ref({addon:[]})
const genderChecked = ref()
const resourceActive = ref('1');
const fileList = ref([]);
@ -71,6 +72,7 @@ const validatorTel = (val) => {
if (userRes.data.nfc_addon && (userRes.data.nfc_addon.length > 0)) {
form.value.addon = JSON.parse(userRes.data.nfc_addon)
}
console.log(form,"form")
const onCrop = () => {
const { canvas } = myCrop.value.getResult();
@ -150,11 +152,11 @@ const onSubmit = async () => {
message: '資料更新中...',
forbidClick: true,
});
// console.log(form.value,"test");
let res = await updateCard(form.value)
if(res.code===200){
showSuccessToast('更新成功')
store.commit('user/setUserInfo',form.value)
store.commit('user/setUserInfo',form.value)
router.push('/member')
}else{
showToast.fail('更新失敗')
@ -231,17 +233,17 @@ const tab2OnSearch = () => {
const tab3list = ref([]);
onBeforeMount(async () => {
let res = await setUserNfcTpl();
console.log(res);
if(res.code===200){
tab3list.value = res.data;
}
let res = await setUserNfcTpl();
console.log(res);
if(res.code===200){
tab3list.value = res.data;
}
});
</script>
<template>
<div class="member bg-lightPink">
<div class="member page">
<van-nav-bar class="bg-skyBlue py-1" left-arrow @click-left="$router.push('/')">
<template #title>
<h5 class="text-white mb-1"><strong>會員資料</strong></h5>
@ -284,7 +286,7 @@ onBeforeMount(async () => {
<p class="text-skyBlue mb-2">上傳圖片預設為Line頭像</p>
<van-button class="btn-darkBlue" icon="plus" block size="small">上傳檔案</van-button>
</div>
</div>
</div>
</van-uploader>
<van-field
v-model="form.mark"
@ -420,7 +422,7 @@ onBeforeMount(async () => {
</template>
</van-field>
<van-collapse accordion>
<van-collapse v-model="resourceActive" accordion>
<van-collapse-item name="1">
<template #title>
<i class="fa-regular fa-gem text-darkBlue"></i> 我能分享的資源
@ -438,7 +440,7 @@ onBeforeMount(async () => {
name="pattern"
placeholder="分享網址"
:rules="[
{ validator: validatorUrl, message: '網址格式不正確,Ex. http://' },
{ validator: validatorUrl, message: '網址格式不正確,Ex. http://' },
]"
/>
</van-collapse-item>
@ -635,7 +637,9 @@ onBeforeMount(async () => {
/>
</van-col>
</van-row>
</van-cell-group>
<van-cell-group inset>
<van-list
v-model:loading="loading"
:finished="finished"
@ -678,10 +682,11 @@ onBeforeMount(async () => {
<div class="bottom collapse" :id="`c${index}`" data-parent="#accordion">
<h6 class="text-darkBlue"><strong>我能分享的資源</strong></h6>
<div class="desc">{{item.supply}}</div>
<div class="url py-2">網址<a href=""></a></div>
<div class="url py-2">網址<a :href="item.supply_link" class="text-moBlue">{{item.supply_link}}</a></div>
<hr/>
<h6 class="text-darkBlue"><strong>我需要的資源</strong></h6>
<div class="desc">{{item.demand}}</div>
<div class="url py-2">網址<a :href="item.demand_link" class="text-moBlue">{{item.demand_link}}</a></div>
</div>
</div>
@ -701,10 +706,9 @@ onBeforeMount(async () => {
</template>
</van-cell>
<div class="text-center bg-dark px-5 pt-3">
<div class="block">
<van-image
width="100%"
height="500"
position="top"
fit="cover"
src="/src/assets/images/tp/tp_1.jpg"
@ -725,8 +729,8 @@ onBeforeMount(async () => {
<van-cell-group inset>
<van-row>
<van-col span="12" v-for="(item, index) in tab3list" :key="index">
<div class="imgBtn">
<div class="imgCnt">{{ item }}
<div class="imgBtn" :data-id="index">
<div class="imgCnt">
<van-image
src="/src/assets/images/tp/tp_1.jpg"
/>
@ -780,6 +784,7 @@ onBeforeMount(async () => {
align-items: center;
.avatar{
width: 55px;
min-width: 55px;
aspect-ratio: 1/1;
border-radius: 50%;
margin-right: 10px;
@ -814,6 +819,14 @@ onBeforeMount(async () => {
}
.cnt3{
.block{
height:500px;
text-align: center;
background-color: #000;
padding: 20px 35px;
overflow: hidden;
overflow-y: auto;
}
.imgBtn{
padding: 10px;
margin: 10px;

@ -152,7 +152,7 @@ const onSubmit = async () => {
</script>
<template>
<div class="reg-container bg-lightPink">
<div class="reg-container page">
<van-nav-bar class="bg-skyBlue py-2">
<template #title>
<h5 class="text-white mb-1"><strong>{{title}}</strong></h5>

Loading…
Cancel
Save