更改為vite建構

dev
Wayne 3 years ago
parent a8cf39e835
commit 4a97ec60fa

@ -0,0 +1,13 @@
NODE_ENV = development
VITE_ENV = development
VITE_APP_BASE_URL = https://utel.zltest.com.tw
VITE_APP_LINE_LIFF_ID = 1656907652-p38ddKzQ
VITE_APP_SEND_URL = https://liff.line.me/1656907652-VJq33Pdg
VITE_APP_API_URL = https://utel.zltest.com.tw/appapi/v1
VITE_APP_IMAGE_URL = https://utel.vip/storage

@ -1,13 +1,13 @@
NODE_ENV = production NODE_ENV = production
VUE_ENV = production VITE_ENV = production
VUE_APP_BASE_URL = https://utel.vip VITE_APP_BASE_URL = https://utel.vip
VUE_APP_LINE_LIFF_ID = 1656969446-nQYlz77R VITE_APP_LINE_LIFF_ID = 1656969446-nQYlz77R
VUE_APP_SEND_URL = https://liff.line.me/1656969446-mg36Maav VITE_APP_SEND_URL = https://liff.line.me/1656969446-mg36Maav
VUE_APP_API_URL = https://utel.vip/appapi/v1 VITE_APP_API_URL = https://utel.vip/appapi/v1
VUE_APP_IMAGE_URL = https://utel.vip/storage VITE_APP_IMAGE_URL = https://utel.vip/storage

@ -1,13 +1,13 @@
NODE_ENV = production NODE_ENV = production
VUE_ENV = stage VITE_ENV = stage
VUE_APP_BASE_URL = https://utel.zltest.com.tw VITE_APP_BASE_URL = https://utel.zltest.com.tw
VUE_APP_LINE_LIFF_ID = 1656948609-xMp7dWAz VITE_APP_LINE_LIFF_ID = 1656948609-xMp7dWAz
VUE_APP_SEND_URL = https://liff.line.me/1656948609-BYr8Nynp VITE_APP_SEND_URL = https://liff.line.me/1656948609-BYr8Nynp
VUE_APP_API_URL = https://utel.zltest.com.tw/appapi/v1 VITE_APP_API_URL = https://utel.zltest.com.tw/appapi/v1
VUE_APP_IMAGE_URL = https://utel.zltest.com.tw/storage VITE_APP_IMAGE_URL = https://utel.zltest.com.tw/storage

@ -1,11 +1,11 @@
NODE_ENV = production NODEproduction_ENV = production
VUE_ENV = production VITE_ENV = production
VUE_APP_LINE_LIFF_ID = 1657184427-8bq9debn VITE_APP_LINE_LIFF_ID = 1657184427-8bq9debn
VUE_APP_SEND_URL = https://liff.line.me/1657184427-9GayRMQl VITE_APP_SEND_URL = https://liff.line.me/1657184427-9GayRMQl
VUE_APP_API_URL = https://card.u168.vip/appapi/v1 VITE_APP_API_URL = https://card.u168.vip/appapi/v1
VUE_APP_IMAGE_URL = https://card.u168.vip/storage VITE_APP_IMAGE_URL = https://card.u168.vip/storage

25
.gitignore vendored

@ -1,25 +1,24 @@
.DS_Store # Logs
node_modules logs
/dist *.log
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
pnpm-debug.log* pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files # Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea .idea
.vscode .DS_Store
*.suo *.suo
*.ntvs* *.ntvs*
*.njsproj *.njsproj
*.sln *.sln
*.sw? *.sw?
.env.development

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
}

@ -1,19 +1,7 @@
# ecard2 # Vue 3 + Vite
## Project setup This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
```
npm install
```
### Compiles and hot-reloads for development ## Recommended IDE Setup
```
npm run serve
```
### Compiles and minifies for production - [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
```
npm run build
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

Binary file not shown.

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="zh_TW">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
/>
<link rel="icon" href="favicon.ico" />
<link rel="stylesheet" href="/css/flex2html.css" />
<link
rel="stylesheet"
href="https://at.alicdn.com/t/font_3193091_nixfhsddmnl.css"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"
integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn"
crossorigin="anonymous"
/>
<title>UTel電子名片</title>
</head>
<body>
<div id="app"></div>
<script src="/js/flex2html.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"
integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF"
crossorigin="anonymous"
></script>
<script type="module" src="/src/main.js"></script>
</body>
</html>

@ -1,48 +1,40 @@
{ {
"name": "utel", "name": "utel_h5_vite",
"version": "0.1.0",
"private": true, "private": true,
"version": "0.0.0",
"type": "module",
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "dev": "vite",
"build": "vue-cli-service build", "build": "vite build",
"build:u168": "vue-cli-service build --mode u168", "preview": "vite preview"
"build:dev": "vue-cli-service build --mode development",
"build:slash": "vue-cli-service build --mode slash",
"build:sta": "vue-cli-service build --mode stage",
"build:h888": "vue-cli-service build --mode h888"
}, },
"dependencies": { "dependencies": {
"@line/liff": "^2.22.4", "@line/liff": "^2.22.4",
"@soerenmartius/vue3-clipboard": "^0.1.2", "@soerenmartius/vue3-clipboard": "^0.1.2",
"axios": "^1.3.3", "axios": "^1.5.1",
"colorthief": "^2.3.2", "colorthief": "^2.4.0",
"core-js": "^3.6.5",
"ismobilejs": "^1.1.1", "ismobilejs": "^1.1.1",
"js-cookie": "^3.0.1", "js-cookie": "^3.0.5",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"moment": "^2.29.1", "moment": "^2.29.4",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pwacompat": "^2.0.17", "pwacompat": "^2.0.17",
"qrcode.vue": "^3.3.3", "qrcode.vue": "^3.4.1",
"register-service-worker": "^1.7.1", "register-service-worker": "^1.7.2",
"secure-ls": "^1.2.6", "secure-ls": "^1.2.6",
"vant": "^3.4.5", "vant": "^4.7.1",
"vue": "3.2.41", "vue": "^3.3.4",
"vue-advanced-cropper": "^2.8.1", "vue-advanced-cropper": "^2.8.8",
"vue-cropper": "^1.0.3", "vue-cropper": "^0.6.4",
"vue-router": "^4.0.0-0", "vue-router": "^4.2.5",
"vuex": "^4.0.0-0", "vuex": "^4.1.0",
"vuex-persistedstate": "^4.1.0" "vuex-persistedstate": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.5.15", "@vant/auto-import-resolver": "^1.0.1",
"@vue/cli-plugin-pwa": "~4.5.15", "@vitejs/plugin-vue": "^4.2.3",
"@vue/cli-plugin-router": "~4.5.15", "less": "^4.2.0",
"@vue/cli-plugin-vuex": "~4.5.15", "unplugin-vue-components": "^0.25.2",
"@vue/cli-service": "~4.5.15", "vite": "^4.4.5"
"@vue/compiler-sfc": "3.2.41",
"babel-plugin-import": "^1.13.3",
"less": "^3.0.4",
"less-loader": "^5.0.0"
} }
} }

@ -1,25 +1,26 @@
<template> <template>
<Suspense> <Suspense>
<template #default> <template #default>
<router-view/> <router-view/>
</template>
<template #fallback>
Loading
</template>
</Suspense>
</template> </template>
<template #fallback>
Loading <script setup>
</template> import { getSiteConfig } from './api'
</Suspense>
</template> import { useStore } from 'vuex'
<script setup> const store = useStore()
import { getSiteConfig } from './api'
import { useStore } from 'vuex' </script>
<style lang="less">
const store = useStore() #app{
margin-bottom: 40px;
}
</script> </style>
<style lang="less">
#app{
margin-bottom: 40px;
}
</style>

@ -2,7 +2,7 @@ import axios from 'axios'
import store from '../store' import store from '../store'
const instance = axios.create({ const instance = axios.create({
baseURL: process.env.VUE_APP_API_URL, baseURL: import.meta.env.VITE_APP_API_URL,
timeout: 5000, timeout: 5000,
withCredentials: true withCredentials: true
}) })

@ -37,7 +37,7 @@
<script> <script>
import { computed, ref } from 'vue'; import { computed, ref } from 'vue';
import { Toast } from 'vant'; import { showToast } from 'vant';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
@ -52,7 +52,7 @@ export default {
const showShareQrcode = ref(false) const showShareQrcode = ref(false)
const imageUrl = ref(process.env.VUE_APP_IMAGE_URL) const imageUrl = ref(import.meta.env.VITE_APP_IMAGE_URL)
const options = [ const options = [
{ name: '二维码', icon: 'qrcode', key: 'qrcode' }, { name: '二维码', icon: 'qrcode', key: 'qrcode' },
@ -63,8 +63,8 @@ export default {
if (option.key === 'qrcode') { if (option.key === 'qrcode') {
showShareQrcode.value = true showShareQrcode.value = true
} else if (option.key === 'link') { } else if (option.key === 'link') {
toClipboard(`https://liff.line.me/${process.env.VUE_APP_LINE_LIFF_ID}/?aid=${store.state.user.userInfo.agent_prefix}`) toClipboard(`https://liff.line.me/${import.meta.env.VITE_APP_LINE_LIFF_ID}/?aid=${store.state.user.userInfo.agent_prefix}`)
Toast('已放入剪貼簿') showToast('已放入剪貼簿')
} }
showShare.value = false showShare.value = false
}; };
@ -149,39 +149,39 @@ export default {
} }
.footerMenu ul li a em.home { .footerMenu ul li a em.home {
background-image: url(~@/assets/images/f01-1.png); background-image: url(@/assets/images/f01-1.png);
} }
.footerMenu ul li a.active em.home { .footerMenu ul li a.active em.home {
background-image: url(~@/assets/images/f01-2.png); background-image: url(@/assets/images/f01-2.png);
} }
.footerMenu ul li a em.my { .footerMenu ul li a em.my {
background-image: url(~@/assets/images/f02-1.png); background-image: url(@/assets/images/f02-1.png);
} }
.footerMenu ul li a.active em.my { .footerMenu ul li a.active em.my {
background-image: url(~@/assets/images/f02-2.png); background-image: url(@/assets/images/f02-2.png);
} }
.footerMenu ul li a em.back { .footerMenu ul li a em.back {
background-image: url(~@/assets/images/f04.png); background-image: url(@/assets/images/f04.png);
} }
.footerMenu ul li a em.act { .footerMenu ul li a em.act {
background-image: url(~@/assets/images/f05-1.png); background-image: url(@/assets/images/f05-1.png);
} }
.footerMenu ul li a.active em.act { .footerMenu ul li a.active em.act {
background-image: url(~@/assets/images/f05-2.png); background-image: url(@/assets/images/f05-2.png);
} }
.footerMenu ul li a em.buy { .footerMenu ul li a em.buy {
background-image: url(~@/assets/images/f06-1.png); background-image: url(@/assets/images/f06-1.png);
} }
.footerMenu ul li a.active em.buy { .footerMenu ul li a.active em.buy {
background-image: url(~@/assets/images/f06-2.png); background-image: url(@/assets/images/f06-2.png);
} }
.footerMenu ul li a p { .footerMenu ul li a p {

@ -4,7 +4,6 @@ import router from "./router";
import store from "./store"; import store from "./store";
import liff from '@line/liff'; import liff from '@line/liff';
import { vant } from "@/plugins/vant";
import { VueClipboard } from "@soerenmartius/vue3-clipboard"; import { VueClipboard } from "@soerenmartius/vue3-clipboard";
import "@/assets/css/normalize.css"; import "@/assets/css/normalize.css";
@ -12,7 +11,7 @@ import "@/assets/css/common.less";
// import './registerServiceWorker' // import './registerServiceWorker'
liff.init({ liff.init({
liffId: process.env.VUE_APP_LINE_LIFF_ID liffId: import.meta.env.VITE_APP_LINE_LIFF_ID
}).then(() => { }).then(() => {
window.liff = liff; window.liff = liff;
@ -20,7 +19,6 @@ liff.init({
const vue = createApp(App); const vue = createApp(App);
// 將LIFF實例提供給應用 // 將LIFF實例提供給應用
vant(vue);
vue.use(VueClipboard); vue.use(VueClipboard);
vue.use(store).use(router).mount("#app"); vue.use(store).use(router).mount("#app");

@ -1,7 +1,7 @@
import { import {
Locale, Locale,
Button, Button,
Toast, showToast,
ShareSheet, ShareSheet,
NavBar, NavBar,
Tab, Tab,

@ -2,8 +2,8 @@
import { register } from 'register-service-worker' import { register } from 'register-service-worker'
// if (process.env.NODE_ENV === 'production') { // if (import.meta.env.NODE_ENV === 'production') {
register(`${process.env.BASE_URL}service-worker.js`, { register(`${import.meta.env.BASE_URL}service-worker.js`, {
ready () { ready () {
console.log( console.log(
'App is being served from cache by a service worker.\n' + 'App is being served from cache by a service worker.\n' +

@ -19,25 +19,25 @@ const routes = [
path: "/send", path: "/send",
name: "Send", name: "Send",
component: () => component: () =>
import(/* webpackChunkName: "send" */ "../views/Send/index.vue"), import("../views/Send/index.vue"),
}, },
{ {
path: "/shop", path: "/shop",
name: "Shop", name: "Shop",
component: () => component: () =>
import(/* webpackChunkName: "shop" */ "../views/Shop/index.vue"), import("../views/Shop/index.vue"),
}, },
{ {
path: "/shop/inputsn", path: "/shop/inputsn",
name: "InputSN", name: "InputSN",
component: () => component: () =>
import(/* webpackChunkName: "user" */ "../views/Shop/Inputsn.vue"), import("../views/Shop/Inputsn.vue"),
}, },
{ {
path: "/member", path: "/member",
name: "Member", name: "Member",
component: () => component: () =>
import(/* webpackChunkName: "user" */ "../views/Member/index.vue"), import("../views/Member/index.vue"),
}, },
{ {
path: "/card", path: "/card",
@ -48,27 +48,27 @@ const routes = [
path: "/card/edit", path: "/card/edit",
name: "CardEdit", name: "CardEdit",
component: () => component: () =>
import(/* webpackChunkName: "card" */ "../views/Card/Edit"), import("../views/Card/Edit.vue"),
meta: { keepAlive: true }, meta: { keepAlive: true },
}, },
{ {
path: "/card/notice", path: "/card/notice",
name: "CardNotice", name: "CardNotice",
component: () => component: () =>
import(/* webpackChunkName: "card" */ "../views/Card/Notice"), import("../views/Card/Notice.vue"),
}, },
{ {
path: "/card/video", path: "/card/video",
name: "CardVideo", name: "CardVideo",
component: () => component: () =>
import(/* webpackChunkName: "card" */ "../views/Card/Video"), import("../views/Card/Video.vue"),
meta: { keepAlive: true }, meta: { keepAlive: true },
}, },
{ {
path: "/card/preview", path: "/card/preview",
name: "CardPreview", name: "CardPreview",
component: () => component: () =>
import(/* webpackChunkName: "card" */ "@/components/Preview"), import("@/components/Preview.vue"),
meta: { keepAlive: true }, meta: { keepAlive: true },
}, },
], ],
@ -99,7 +99,7 @@ const routes = [
path: "/auth/preview", path: "/auth/preview",
name: "AuthPreview", name: "AuthPreview",
component: () => component: () =>
import(/* webpackChunkName: "card" */ "@/components/Preview"), import("@/components/Preview.vue"),
meta: { keepAlive: true }, meta: { keepAlive: true },
}, },
], ],
@ -108,24 +108,24 @@ const routes = [
path: "/register", path: "/register",
name: "Register", name: "Register",
component: () => component: () =>
import(/* webpackChunkName: "auth" */ "../views/Register/index.vue"), import("../views/Register/index.vue"),
// component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') // component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
}, },
{ {
path: "/login", path: "/login",
name: "Login", name: "Login",
component: () => component: () =>
import(/* webpackChunkName: "auth" */ "../views/Login/index.vue"), import("../views/Login/index.vue"),
}, },
{ {
path: "/test", path: "/test",
name: "Test", name: "Test",
component: () => import(/* webpackChunkName: "auth" */ "../views/Test.vue"), component: () => import("../views/Test.vue"),
}, },
]; ];
const router = createRouter({ const router = createRouter({
history: createWebHistory(process.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
routes, routes,
}); });

@ -317,7 +317,7 @@ function genCard(vcard) {
"action": { "action": {
"type": "uri", "type": "uri",
"label": "action", "label": "action",
"uri": "${process.env.VUE_APP_SEND_URL}/?userid=${vcard.user_id}&cardid=1" "uri": "${import.meta.env.VITE_APP_SEND_URL}/?userid=${vcard.user_id}&cardid=1"
} }
} }
], ],

@ -346,7 +346,7 @@ function genCard(vcard) {
"action": { "action": {
"type": "uri", "type": "uri",
"label": "action", "label": "action",
"uri": "${process.env.VUE_APP_SEND_URL}/?userid=${vcard.user_id}&cardid=1" "uri": "${import.meta.env.VITE_APP_SEND_URL}/?userid=${vcard.user_id}&cardid=1"
} }
} }
], ],

@ -1,7 +1,7 @@
import liff from "@line/liff"; import liff from "@line/liff";
async function initLiff(app) { async function initLiff(app) {
await liff.init({ liffId: process.env.VUE_APP_LINE_LIFF_ID }); await liff.init({ liffId: import.meta.env.VITE_APP_LINE_LIFF_ID });
if (!liff.isLoggedIn()){ if (!liff.isLoggedIn()){
liff.login({ redirectUri: window.location.href }); liff.login({ redirectUri: window.location.href });
} }

@ -44,7 +44,7 @@
<script setup> <script setup>
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import { Toast } from 'vant'; import { showToast,showSuccessToast } from 'vant';
import { setAuthUser , delAuthUser , getAuthUsers } from '@/api' import { setAuthUser , delAuthUser , getAuthUsers } from '@/api'
@ -57,12 +57,12 @@ const onSubmit = async () =>{
let res = await setAuthUser(form.value); let res = await setAuthUser(form.value);
if(res.code!==200){ if(res.code!==200){
return Toast.fail('授權失敗,'+res.data); return showToast.fail('授權失敗,'+res.data);
} }
genAuthList(); genAuthList();
return Toast.success('授權成功'); return showSuccessToast('授權成功');
} }
// //
@ -84,12 +84,12 @@ const handleDelete = async (id)=>{
console.log(res) console.log(res)
if(res.code!==200){ if(res.code!==200){
return Toast.fail('刪除失敗'); return showToast.fail('刪除失敗');
} }
genAuthList(); genAuthList();
return Toast.success('刪除成功'); return showSuccessToast('刪除成功');
} }

@ -545,8 +545,8 @@
</template> </template>
<script> <script>
import Footer from "@/components/Footer"; import Footer from "@/components/Footer.vue";
import FlexView from "@/components/FlexView"; import FlexView from "@/components/FlexView.vue";
import { import {
ref, ref,
@ -565,7 +565,7 @@ import { useRouter ,useRoute} from "vue-router";
import axios from "axios"; import axios from "axios";
import _ from "lodash"; import _ from "lodash";
import { Toast } from "vant"; import { showToast,showLoadingToast,showSuccessToast } from "vant";
import { Cropper } from "vue-advanced-cropper"; import { Cropper } from "vue-advanced-cropper";
import "vue-advanced-cropper/dist/style.css"; import "vue-advanced-cropper/dist/style.css";
@ -664,14 +664,14 @@ export default defineComponent({
crop.value.show = false; crop.value.show = false;
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: "圖片上傳中...", message: "圖片上傳中...",
forbidClick: true, forbidClick: true,
}); });
let res = await axios.post( let res = await axios.post(
`${process.env.VUE_APP_API_URL}/card/uploadfile`, `${import.meta.env.VITE_APP_API_URL}/card/uploadfile`,
imgFile, imgFile,
{} {}
); );
@ -679,9 +679,9 @@ export default defineComponent({
if (res.data.code == 200) { if (res.data.code == 200) {
state.form.json5.cards[state.form.page - 1].image = res.data.data; state.form.json5.cards[state.form.page - 1].image = res.data.data;
Toast.success("上傳成功"); showSuccessToast("上傳成功");
} else { } else {
Toast.fail("上傳失敗"); showToast.fail("上傳失敗");
} }
}, "image/jpeg"); }, "image/jpeg");
} }
@ -737,7 +737,7 @@ export default defineComponent({
state.form.json5.cards[page - 1].btns.push({ state.form.json5.cards[page - 1].btns.push({
color: "#42659a", color: "#42659a",
link: `${process.env.VUE_APP_SEND_URL}?userid=${userid}&cardid=2`, link: `${import.meta.env.VITE_APP_SEND_URL}?userid=${userid}&cardid=2`,
style: "primary", style: "primary",
text: "分享好友", text: "分享好友",
btnHeight: "md" btnHeight: "md"
@ -809,14 +809,14 @@ export default defineComponent({
imgFile.append("fileType", "IMAGE"); imgFile.append("fileType", "IMAGE");
imgFile.append("file", file.file); imgFile.append("file", file.file);
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: "圖片上傳中...", message: "圖片上傳中...",
forbidClick: true, forbidClick: true,
}); });
let res = await axios.post( let res = await axios.post(
`${process.env.VUE_APP_API_URL}/card/uploadfile`, `${import.meta.env.VITE_APP_API_URL}/card/uploadfile`,
imgFile, imgFile,
{} {}
); );
@ -824,9 +824,9 @@ export default defineComponent({
if (res.data.code == 200) { if (res.data.code == 200) {
state.form.json5.cards[state.form.page - 1].image = res.data.data; state.form.json5.cards[state.form.page - 1].image = res.data.data;
Toast.success("上傳成功"); showSuccessToast("上傳成功");
} else { } else {
Toast.fail("上傳失敗"); showToast.fail("上傳失敗");
} }
return; return;
@ -859,13 +859,13 @@ export default defineComponent({
const handleSubmit = async () => { const handleSubmit = async () => {
if (!validateForm(state.form.json5.cards)) { if (!validateForm(state.form.json5.cards)) {
Toast("商務卡片欄位錯誤,紅色錯誤欄位請重新檢查!!"); showToast("商務卡片欄位錯誤,紅色錯誤欄位請重新檢查!!");
return; return;
} }
let user_id = userid; let user_id = userid;
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: "名片上傳中...", message: "名片上傳中...",
forbidClick: true, forbidClick: true,
@ -879,9 +879,9 @@ export default defineComponent({
}); });
if (res.code === 200) { if (res.code === 200) {
store.commit("user/setCusCard", JSON.stringify(state.form)); store.commit("user/setCusCard", JSON.stringify(state.form));
Toast.success("建立成功"); showSuccessToast("建立成功");
} else { } else {
Toast.fail("建立失敗"); showToast.fail("建立失敗");
} }
router.push("/auth/getauth"); router.push("/auth/getauth");
}; };

@ -549,8 +549,8 @@
</template> </template>
<script> <script>
import Footer from "@/components/Footer"; import Footer from "@/components/Footer.vue";
import FlexView from "@/components/FlexView"; import FlexView from "@/components/FlexView.vue";
import { import {
ref, ref,
@ -568,7 +568,9 @@ import { useRouter } from "vue-router";
import axios from "axios"; import axios from "axios";
import _ from "lodash"; import _ from "lodash";
import { Toast } from "vant"; import { showToast } from "vant";
import { showLoadingToast,showSuccessToast } from 'vant';
import { Cropper } from "vue-advanced-cropper"; import { Cropper } from "vue-advanced-cropper";
import "vue-advanced-cropper/dist/style.css"; import "vue-advanced-cropper/dist/style.css";
@ -665,14 +667,14 @@ export default defineComponent({
crop.value.show = false; crop.value.show = false;
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: "圖片上傳中...", message: "圖片上傳中...",
forbidClick: true, forbidClick: true,
}); });
let res = await axios.post( let res = await axios.post(
`${process.env.VUE_APP_API_URL}/card/uploadfile`, `${import.meta.env.VITE_APP_API_URL}/card/uploadfile`,
imgFile, imgFile,
{} {}
); );
@ -680,9 +682,9 @@ export default defineComponent({
if (res.data.code == 200) { if (res.data.code == 200) {
state.form.json5.cards[state.form.page - 1].image = res.data.data; state.form.json5.cards[state.form.page - 1].image = res.data.data;
Toast.success("上傳成功"); showSuccessToast("上傳成功");
} else { } else {
Toast.fail("上傳失敗"); showToast.fail("上傳失敗");
} }
}, "image/jpeg"); }, "image/jpeg");
} }
@ -738,7 +740,7 @@ export default defineComponent({
state.form.json5.cards[page - 1].btns.push({ state.form.json5.cards[page - 1].btns.push({
color: "#42659a", color: "#42659a",
link: `${process.env.VUE_APP_SEND_URL}?userid=${sessionStorage.getItem( link: `${import.meta.env.VITE_APP_SEND_URL}?userid=${sessionStorage.getItem(
"uid" "uid"
)}&cardid=2`, )}&cardid=2`,
style: "primary", style: "primary",
@ -812,14 +814,14 @@ export default defineComponent({
imgFile.append("fileType", "IMAGE"); imgFile.append("fileType", "IMAGE");
imgFile.append("file", file.file); imgFile.append("file", file.file);
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: "圖片上傳中...", message: "圖片上傳中...",
forbidClick: true, forbidClick: true,
}); });
let res = await axios.post( let res = await axios.post(
`${process.env.VUE_APP_API_URL}/card/uploadfile`, `${import.meta.env.VITE_APP_API_URL}/card/uploadfile`,
imgFile, imgFile,
{} {}
); );
@ -827,9 +829,9 @@ export default defineComponent({
if (res.data.code == 200) { if (res.data.code == 200) {
state.form.json5.cards[state.form.page - 1].image = res.data.data; state.form.json5.cards[state.form.page - 1].image = res.data.data;
Toast.success("上傳成功"); showSuccessToast("上傳成功");
} else { } else {
Toast.fail("上傳失敗"); showToast.fail("上傳失敗");
} }
return; return;
@ -862,7 +864,7 @@ export default defineComponent({
const handleSubmit = async () => { const handleSubmit = async () => {
if (!validateForm(state.form.json5.cards)) { if (!validateForm(state.form.json5.cards)) {
Toast("商務卡片欄位錯誤,紅色錯誤欄位請重新檢查!!"); showToast("商務卡片欄位錯誤,紅色錯誤欄位請重新檢查!!");
return; return;
} }
@ -871,7 +873,7 @@ export default defineComponent({
let user_id = sessionStorage.getItem("uid"); let user_id = sessionStorage.getItem("uid");
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: "名片上傳中...", message: "名片上傳中...",
forbidClick: true, forbidClick: true,
@ -885,9 +887,9 @@ export default defineComponent({
}); });
if (res.code === 200) { if (res.code === 200) {
store.commit("user/setCusCard", JSON.stringify(state.form)); store.commit("user/setCusCard", JSON.stringify(state.form));
Toast.success("建立成功"); showSuccessToast("建立成功");
} else { } else {
Toast.fail("建立失敗"); showToast.fail("建立失敗");
} }
router.push("/"); router.push("/");
}; };

@ -35,7 +35,7 @@
import { useRouter} from 'vue-router' import { useRouter} from 'vue-router'
import Footer from '@/components/Footer' import Footer from '@/components/Footer.vue'
const router = useRouter() const router = useRouter()

@ -8,10 +8,11 @@ import { ref, computed, onBeforeMount, nextTick, inject } from "vue";
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import { Toast } from 'vant' import { showToast,showSuccessToast } from 'vant';
import { Dialog } from 'vant'; import { Dialog } from 'vant';
import Footer from '@/components/Footer' import Footer from '@/components/Footer.vue'
import { login, bindCard } from '@/api' import { login, bindCard } from '@/api'
@ -23,7 +24,7 @@ const popShow = ref(true)
const showShare = ref(false) const showShare = ref(false)
const showNfcQrcode = ref(false) const showNfcQrcode = ref(false)
const imageUrl = ref(process.env.VUE_APP_IMAGE_URL) const imageUrl = ref(import.meta.env.VITE_APP_IMAGE_URL)
const userLevel = { const userLevel = {
0: '基礎款', 0: '基礎款',
@ -35,7 +36,7 @@ const userLevel = {
const is_due = ref(false) const is_due = ref(false)
// 使useCountDown // 使useCountDown
const countDown = useCountDown({time: 10 * 1000}); const countDown = useCountDown({time: 1 * 1000});
const current = countDown.current; const current = countDown.current;
countDown.start(); countDown.start();
@ -46,7 +47,7 @@ onBeforeMount(async () => {
liff.login({ redirectUri: window.location.href }); liff.login({ redirectUri: window.location.href });
} catch (err) { } catch (err) {
console.log(`liff.state init error ${err}`); console.log(`liff.state init error ${err}`);
Toast('登入失敗。請聯絡管理員') showToast('登入失敗。請聯絡管理員')
router.push('/login') router.push('/login')
} }
@ -59,7 +60,7 @@ onBeforeMount(async () => {
if (loginRes.code === 200) { if (loginRes.code === 200) {
if (route.query.act === 'openright') { if (route.query.act === 'openright') {
Toast('您已經是本站會員') showToast('您已經是本站會員')
} }
sessionStorage.setItem('token', loginRes.data.token) sessionStorage.setItem('token', loginRes.data.token)
sessionStorage.setItem('uid', loginRes.data.uid) sessionStorage.setItem('uid', loginRes.data.uid)
@ -75,9 +76,9 @@ onBeforeMount(async () => {
// //
let bindRes = await bindCard({ uid: loginRes.data.uid, verify: route.query.verify }) let bindRes = await bindCard({ uid: loginRes.data.uid, verify: route.query.verify })
if (bindRes.code === 200) { if (bindRes.code === 200) {
Toast.success('綁定成功') showSuccessToast('綁定成功')
} else { } else {
Toast.fail('綁定失敗') showToast.fail('綁定失敗')
} }
}).catch(() => { }).catch(() => {
@ -109,7 +110,7 @@ onBeforeMount(async () => {
}) })
return return
} else { } else {
Toast('請先註冊成為本站會員') showToast('請先註冊成為本站會員')
return router.push({ return router.push({
path: '/register', path: '/register',
query: { refer: route.query.refer } query: { refer: route.query.refer }
@ -119,7 +120,7 @@ onBeforeMount(async () => {
} else { } else {
Toast('登入失敗。請聯絡管理員') showToast('登入失敗。請聯絡管理員')
router.push('/login') router.push('/login')
} }
} }
@ -130,7 +131,7 @@ onBeforeMount(async () => {
nextTick(() => { nextTick(() => {
// if(userInfo.value.level===0 && userInfo.value.nc_type===0){ // if(userInfo.value.level===0 && userInfo.value.nc_type===0){
// Toast('') // showToast('')
// return router.push('/shop/inputsn') // return router.push('/shop/inputsn')
// } // }
}) })
@ -162,7 +163,7 @@ const goCardEdit = () => {
} }
const onSelect = (option) => { const onSelect = (option) => {
Toast(option.name); showToast(option.name);
showShare.value = false; showShare.value = false;
}; };
@ -172,12 +173,12 @@ const handleShowNfc = () => {
const doCopy = () => { const doCopy = () => {
toClipboard(userInfo.value.nfcurl) toClipboard(userInfo.value.nfcurl)
Toast('已放入剪貼簿') showToast('已放入剪貼簿')
} }
const doCopyUid = () => { const doCopyUid = () => {
toClipboard(userInfo.value.user_id) toClipboard(userInfo.value.user_id)
Toast('已放入剪貼簿') showToast('已放入剪貼簿')
} }
const bindTggo = () => { const bindTggo = () => {
@ -393,22 +394,22 @@ const handleLogout = () => {
} }
.recommend ul li:nth-child(1) { .recommend ul li:nth-child(1) {
background: url(~@/assets/images/icon-001.png) right 0.3rem center no-repeat #fff !important; background: url(@/assets/images/icon-001.png) right 0.3rem center no-repeat #fff !important;
background-size: 30px !important; background-size: 30px !important;
} }
.recommend ul li:nth-child(2) { .recommend ul li:nth-child(2) {
background: url(~@/assets/images/icon-002.png) right 0.3rem center no-repeat #fff !important; background: url(@/assets/images/icon-002.png) right 0.3rem center no-repeat #fff !important;
background-size: 30px !important; background-size: 30px !important;
} }
.recommend ul li:nth-child(3) { .recommend ul li:nth-child(3) {
background: url(~@/assets/images/icon-003.png) right 0.3rem center no-repeat #fff !important; background: url(@/assets/images/icon-003.png) right 0.3rem center no-repeat #fff !important;
background-size: 30px !important; background-size: 30px !important;
} }
.recommend ul li:nth-child(4) { .recommend ul li:nth-child(4) {
background: url(~@/assets/images/icon-004.png) right 0.3rem center no-repeat #fff !important; background: url(@/assets/images/icon-004.png) right 0.3rem center no-repeat #fff !important;
background-size: 30px !important; background-size: 30px !important;
} }

@ -19,7 +19,7 @@ import store from '@/store'
import router from '@/router' import router from '@/router'
import { Toast } from 'vant' import { showToast } from 'vant'
import { login } from '@/api' import { login } from '@/api'
@ -50,14 +50,14 @@ const handleLogin1 = async()=>{
// console.log('data',loginRes.data) // console.log('data',loginRes.data)
sessionStorage.setItem('token',loginRes.data.token) sessionStorage.setItem('token',loginRes.data.token)
sessionStorage.setItem('uid',loginRes.data.uid) sessionStorage.setItem('uid',loginRes.data.uid)
Toast('登入成功') showToast('登入成功')
// return router.push('/') // return router.push('/')
}else if(loginRes.code===201){ }else if(loginRes.code===201){
Toast('請先註冊成為本站會員') showToast('請先註冊成為本站會員')
return router.push('/register') return router.push('/register')
} }
Toast('登入失敗。請聯絡管理員') showToast('登入失敗。請聯絡管理員')
// console.log(loginRes) // console.log(loginRes)
// let checkLine = await checkLineId(profile.userId) // let checkLine = await checkLineId(profile.userId)

@ -203,11 +203,13 @@ import { ref , nextTick} from 'vue'
import { Cropper } from 'vue-advanced-cropper'; import { Cropper } from 'vue-advanced-cropper';
import 'vue-advanced-cropper/dist/style.css'; import 'vue-advanced-cropper/dist/style.css';
import Footer from '@/components/Footer' import Footer from '@/components/Footer.vue'
import { useStore } from 'vuex' import { useStore } from 'vuex'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { Toast } from 'vant' import { showToast } from 'vant'
import { showLoadingToast,showSuccessToast } from 'vant';
import { getUserInfo , updateCard } from '@/api' import { getUserInfo , updateCard } from '@/api'
const URL = window.URL || window.webkitURL; const URL = window.URL || window.webkitURL;
@ -278,14 +280,14 @@ export default {
crop.value.show = false crop.value.show = false
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: '圖片上傳中...', message: '圖片上傳中...',
forbidClick: true, forbidClick: true,
}); });
let res = await axios.post( let res = await axios.post(
`${process.env.VUE_APP_API_URL}/user/uploadAvatar`, `${import.meta.env.VITE_APP_API_URL}/user/uploadAvatar`,
imgFile, imgFile,
{ {
} }
@ -293,9 +295,9 @@ export default {
if (res.data.code == 200) { if (res.data.code == 200) {
form.value.avatar = res.data.data form.value.avatar = res.data.data
Toast.success('上傳成功'); showSuccessToast('上傳成功');
}else{ }else{
Toast.fail('上傳失敗'); showToast.fail('上傳失敗');
} }
}, 'image/jpeg'); }, 'image/jpeg');
@ -343,7 +345,7 @@ export default {
} }
const onSubmit = async () => { const onSubmit = async () => {
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: '資料更新中...', message: '資料更新中...',
forbidClick: true, forbidClick: true,
@ -351,11 +353,11 @@ export default {
let res = await updateCard(form.value) let res = await updateCard(form.value)
if(res.code===200){ if(res.code===200){
Toast.success('更新成功') showSuccessToast('更新成功')
store.commit('user/setUserInfo',form.value) store.commit('user/setUserInfo',form.value)
router.push('/') router.push('/')
}else{ }else{
Toast.fail('更新失敗') showToast.fail('更新失敗')
} }
}; };

@ -157,7 +157,8 @@ import store from "@/store";
import router from "@/router"; import router from "@/router";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import { Toast } from "vant"; import { showToast } from "vant";
import { showLoadingToast,showSuccessToast } from 'vant';
import { Cropper } from "vue-advanced-cropper"; import { Cropper } from "vue-advanced-cropper";
import "vue-advanced-cropper/dist/style.css"; import "vue-advanced-cropper/dist/style.css";
@ -210,23 +211,23 @@ const onCrop = () => {
crop.value.show = false; crop.value.show = false;
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: "圖片上傳中...", message: "圖片上傳中...",
forbidClick: true, forbidClick: true,
}); });
let res = await axios.post( let res = await axios.post(
`${process.env.VUE_APP_API_URL}/user/uploadAvatar`, `${import.meta.env.VITE_APP_API_URL}/user/uploadAvatar`,
imgFile, imgFile,
{} {}
); );
if (res.data.code == 200) { if (res.data.code == 200) {
form.value.avatar = res.data.data; form.value.avatar = res.data.data;
Toast.success("上傳成功"); showSuccessToast("上傳成功");
} else { } else {
Toast.fail("上傳失敗"); showToast.fail("上傳失敗");
} }
}, "image/jpeg"); }, "image/jpeg");
} }
@ -253,7 +254,7 @@ const onSubmit = async () => {
if (!liff.isLoggedIn()) liff.login({ redirectUri: window.location.href }); if (!liff.isLoggedIn()) liff.login({ redirectUri: window.location.href });
} catch (err) { } catch (err) {
console.log(`liff.state init error ${err}`); console.log(`liff.state init error ${err}`);
Toast("登入失敗。請聯絡管理員"); showToast("登入失敗。請聯絡管理員");
router.push("/login"); router.push("/login");
} }
@ -262,13 +263,13 @@ const onSubmit = async () => {
let checkRes = await checkLineId(profile.userId); let checkRes = await checkLineId(profile.userId);
if (checkRes.code !== 200) { if (checkRes.code !== 200) {
Toast("您已是我們的會員,請直接登入"); showToast("您已是我們的會員,請直接登入");
router.push("/login"); router.push("/login");
} }
const id_token = liff.getIDToken(); const id_token = liff.getIDToken();
Toast.loading({ showLoadingToast({
duration: 0, duration: 0,
message: "資料傳送中...", message: "資料傳送中...",
forbidClick: true, forbidClick: true,
@ -286,15 +287,15 @@ const onSubmit = async () => {
if (liff.isLoggedIn()) { if (liff.isLoggedIn()) {
liff.logout(); liff.logout();
} }
Toast("line 登入已過期"); showToast("line 登入已過期");
return; return;
} else if (regRes.code === 200) { } else if (regRes.code === 200) {
Toast("註冊成功"); showToast("註冊成功");
sessionStorage.setItem("token", regRes.data.token); sessionStorage.setItem("token", regRes.data.token);
sessionStorage.setItem("uid", regRes.data.uid); sessionStorage.setItem("uid", regRes.data.uid);
return router.push("/"); return router.push("/");
} else { } else {
Toast("註冊失敗"); showToast("註冊失敗");
return; return;
} }
}; };

@ -50,7 +50,7 @@
<script setup> <script setup>
import liff from "@line/liff"; import liff from "@line/liff";
import { Toast } from 'vant'; import { showToast,showSuccessToast } from 'vant';
import { onMounted, reactive, ref, toRefs, computed, watch } from 'vue' import { onMounted, reactive, ref, toRefs, computed, watch } from 'vue'
@ -63,7 +63,7 @@ import { genVipCard } from '@/utils/vipcard'
import { useStore } from 'vuex' import { useStore } from 'vuex'
import Footer from '@/components/Footer' import Footer from '@/components/Footer.vue'
const store = useStore() const store = useStore()
@ -85,7 +85,7 @@ const userInfo = computed(() => {
onMounted(async () => { onMounted(async () => {
// console.log('liff',liff) // console.log('liff',liff)
await liff.init({ liffId: process.env.VUE_APP_LINE_LIFF_ID }); await liff.init({ liffId: import.meta.env.VITE_APP_LINE_LIFF_ID });
if (userInfo.value.nc_type > 2) { if (userInfo.value.nc_type > 2) {
let vipCardRes = await getVipCard({ userid: sessionStorage.getItem('uid') }) let vipCardRes = await getVipCard({ userid: sessionStorage.getItem('uid') })
@ -189,7 +189,7 @@ const sendEcard = async () => {
if (res.status === 'success') { if (res.status === 'success') {
let result = await updateSendCount(userInfo.value.user_id) let result = await updateSendCount(userInfo.value.user_id)
Toast.success('傳送成功') showSuccessToast('傳送成功')
// .then(() => { // .then(() => {
// // on confirm // // on confirm
// }) // })
@ -197,7 +197,7 @@ const sendEcard = async () => {
// // on cancel // // on cancel
// }) // })
} else { } else {
Toast.fail('傳送失敗') showToast.fail('傳送失敗')
} }
} }

@ -17,7 +17,7 @@ import { useStore } from 'vuex'
import {Toast} from 'vant' import {Toast} from 'vant'
import Footer from '@/components/Footer' import Footer from '@/components/Footer.vue'
import { setUserLevel } from '@/api' import { setUserLevel } from '@/api'
@ -36,7 +36,7 @@ const shopContent = ref('')
if(res.code===200){ if(res.code===200){
store.commit('setSiteConfig',res.data) store.commit('setSiteConfig',res.data)
}else{ }else{
Toast('系統錯誤') showToast('系統錯誤')
router.push('/home') router.push('/home')
} }
@ -45,7 +45,7 @@ const shopContent = ref('')
const setlevel = async (level)=>{ const setlevel = async (level)=>{
// let res = await setUserLevel(level) // let res = await setUserLevel(level)
// store.commit('user/setLevel',level) // store.commit('user/setLevel',level)
// Toast('') // showToast('')
// router.push('/') // router.push('/')
// window.location.href = 'http://www.tggo.com.tw/book.cgi?user=omo' // window.location.href = 'http://www.tggo.com.tw/book.cgi?user=omo'
} }

@ -0,0 +1,29 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from '@vant/auto-import-resolver';
import { resolve } from 'path';
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
return {
base: '/home',
server: {
host: '0.0.0.0',
port: 5173,
},
plugins: [
vue(),
Components({
resolvers: [
VantResolver(),
],
})
],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
},
}
})

11093
yarn.lock

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save