更改為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
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
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
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.vscode
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.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
```
npm install
```
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.
### Compiles and hot-reloads for development
```
npm run serve
```
## Recommended IDE Setup
### Compiles and minifies for production
```
npm run build
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
- [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).

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

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

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

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

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

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

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

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

@ -317,7 +317,7 @@ function genCard(vcard) {
"action": {
"type": "uri",
"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": {
"type": "uri",
"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";
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()){
liff.login({ redirectUri: window.location.href });
}

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

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

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

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

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

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

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

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

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

@ -17,7 +17,7 @@ import { useStore } from 'vuex'
import {Toast} from 'vant'
import Footer from '@/components/Footer'
import Footer from '@/components/Footer.vue'
import { setUserLevel } from '@/api'
@ -36,7 +36,7 @@ const shopContent = ref('')
if(res.code===200){
store.commit('setSiteConfig',res.data)
}else{
Toast('系統錯誤')
showToast('系統錯誤')
router.push('/home')
}
@ -45,7 +45,7 @@ const shopContent = ref('')
const setlevel = async (level)=>{
// let res = await setUserLevel(level)
// store.commit('user/setLevel',level)
// Toast('')
// showToast('')
// router.push('/')
// 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