mirror of
https://github.com/KarolChang/jm-expense-vue-ts.git
synced 2024-12-25 19:28:35 +00:00
Compare commits
3 Commits
0d24a3b730
...
0d8c7476d9
Author | SHA1 | Date | |
---|---|---|---|
0d8c7476d9 | |||
6127f45298 | |||
fa4af5adef |
14
.gitlab-ci.yml
Normal file
14
.gitlab-ci.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# image: alpine:latest
|
||||||
|
# pages:
|
||||||
|
# stage: deploy
|
||||||
|
# script:
|
||||||
|
# - mkdir public
|
||||||
|
# - ls -al
|
||||||
|
# - mv -f ./assets public
|
||||||
|
# - mv -f ./index.html public
|
||||||
|
# - echo "Release Complete"
|
||||||
|
# artifacts:
|
||||||
|
# paths:
|
||||||
|
# - public
|
||||||
|
# only:
|
||||||
|
# - gh-pages
|
8
404.html
8
404.html
@ -1,12 +1,14 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
|
<!-- <link rel="icon" href="<%= BASE_URL %>favicon.ico" /> -->
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
|
|
||||||
<!-- <meta http-equiv="X-UA-Compatible" content="IE=edge"> -->
|
<!-- <meta http-equiv="X-UA-Compatible" content="IE=edge"> -->
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
|
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
|
||||||
<!-- <link rel="icon" href="<%= BASE_URL %>favicon.ico" /> -->
|
|
||||||
<link rel="icon" href="/favicon.ico" />
|
|
||||||
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
|
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
|
||||||
<title>JM Expense</title>
|
<title>JM Expense</title>
|
||||||
<script src="https://kit.fontawesome.com/ccfd93e9a7.js" crossorigin="anonymous"></script>
|
<script src="https://kit.fontawesome.com/ccfd93e9a7.js" crossorigin="anonymous"></script>
|
||||||
|
@ -14,7 +14,7 @@ cd dist
|
|||||||
|
|
||||||
git init
|
git init
|
||||||
git add -A
|
git add -A
|
||||||
git commit -m 'deploy'
|
git commit -m 'deploy: config & view'
|
||||||
|
|
||||||
# if you are deploying to https://<USERNAME>.github.io
|
# if you are deploying to https://<USERNAME>.github.io
|
||||||
# git push -f https://github.com/<USERNAME>/<USERNAME>.GitHub.io.git master
|
# git push -f https://github.com/<USERNAME>/<USERNAME>.GitHub.io.git master
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
|
<!-- <link rel="icon" href="<%= BASE_URL %>favicon.ico" /> -->
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
<!-- <meta http-equiv="X-UA-Compatible" content="IE=edge"> -->
|
<!-- <meta http-equiv="X-UA-Compatible" content="IE=edge"> -->
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
|
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
|
||||||
<!-- <link rel="icon" href="<%= BASE_URL %>favicon.ico" /> -->
|
|
||||||
<link rel="icon" href="/favicon.ico" />
|
|
||||||
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
|
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
|
||||||
<title>JM Expense</title>
|
<title>JM Expense</title>
|
||||||
<script src="https://kit.fontawesome.com/ccfd93e9a7.js" crossorigin="anonymous"></script>
|
<script src="https://kit.fontawesome.com/ccfd93e9a7.js" crossorigin="anonymous"></script>
|
||||||
|
14
postcss.config.js
Normal file
14
postcss.config.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
module.exports = {
|
||||||
|
plugins: [
|
||||||
|
{
|
||||||
|
postcssPlugin: 'internal:charset-removal',
|
||||||
|
AtRule: {
|
||||||
|
charset: (atRule) => {
|
||||||
|
if (atRule.name === 'charset') {
|
||||||
|
atRule.remove()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -98,13 +98,13 @@ const openUserRP = () => {
|
|||||||
aria-expanded="false"
|
aria-expanded="false"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
:src="store.firebaseUser?.photoURL || '../assets/capoo.gif'"
|
:src="store.currentUser.photoURL || '../assets/capoo.gif'"
|
||||||
alt="photo"
|
alt="photo"
|
||||||
width="55"
|
width="55"
|
||||||
height="55"
|
height="55"
|
||||||
class="rounded-circle me-2"
|
class="rounded-circle me-2"
|
||||||
/>
|
/>
|
||||||
<strong>{{ store.firebaseUser?.displayName }}</strong>
|
<strong>{{ store.currentUser.displayName }}</strong>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="dropdownUser1">
|
<ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="dropdownUser1">
|
||||||
<!-- <li><hr class="dropdown-divider" /></li> -->
|
<!-- <li><hr class="dropdown-divider" /></li> -->
|
||||||
|
@ -156,6 +156,158 @@ export const routes: RouteRecordRaw[] = [
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
// new
|
||||||
|
// export const routes: RouteRecordRaw[] = [
|
||||||
|
// // {
|
||||||
|
// // path: '/',
|
||||||
|
// // redirect: `${root}/`
|
||||||
|
// // },
|
||||||
|
// {
|
||||||
|
// path: '/register',
|
||||||
|
// name: 'Register',
|
||||||
|
// component: () => import('../views/Register.vue'),
|
||||||
|
// meta: {
|
||||||
|
// pageTitle: '註冊頁',
|
||||||
|
// show: false
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/login',
|
||||||
|
// name: 'Login',
|
||||||
|
// component: () => import('../views/Login.vue'),
|
||||||
|
// meta: {
|
||||||
|
// pageTitle: '登入頁',
|
||||||
|
// show: false
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/',
|
||||||
|
// name: 'Home',
|
||||||
|
// component: () => import('../views/Home.vue'),
|
||||||
|
// meta: {
|
||||||
|
// pageTitle: '首頁',
|
||||||
|
// show: true
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/record',
|
||||||
|
// name: 'Record',
|
||||||
|
// component: () => import('../views/Record.vue'),
|
||||||
|
// meta: {
|
||||||
|
// pageTitle: '未結算紀錄',
|
||||||
|
// show: true
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/closedRecord',
|
||||||
|
// name: 'ClosedRecord',
|
||||||
|
// component: () => import('../views/ClosedRecord.vue'),
|
||||||
|
// meta: {
|
||||||
|
// pageTitle: '已結算紀錄',
|
||||||
|
// show: true
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/logs',
|
||||||
|
// name: 'Logs',
|
||||||
|
// component: () => import('../views/Logs.vue'),
|
||||||
|
// meta: {
|
||||||
|
// pageTitle: '更動紀錄',
|
||||||
|
// show: true
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/expense',
|
||||||
|
// name: 'Expense',
|
||||||
|
// component: () => import('../views/Expense.vue'),
|
||||||
|
// meta: {
|
||||||
|
// pageTitle: '豬涵記帳',
|
||||||
|
// show: true
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// // {
|
||||||
|
// // path: '/tools',
|
||||||
|
// // name: 'Tools',
|
||||||
|
// // component: () => import('../views/Tools.vue'),
|
||||||
|
// // meta: {
|
||||||
|
// // pageTitle: '小工具',
|
||||||
|
// // show: true
|
||||||
|
// // }
|
||||||
|
// // },
|
||||||
|
// {
|
||||||
|
// path: '/game',
|
||||||
|
// name: 'Game',
|
||||||
|
// component: () => import('../views/Game.vue'),
|
||||||
|
// meta: {
|
||||||
|
// pageTitle: '小遊戲',
|
||||||
|
// show: true
|
||||||
|
// // auth: ['root', 'admin', 'member']
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// // {
|
||||||
|
// // path: `${root}/admin`,
|
||||||
|
// // name: 'Admin',
|
||||||
|
// // redirect: { name: 'Admin-Role' },
|
||||||
|
// // component: AppLayout,
|
||||||
|
// // meta: {
|
||||||
|
// // pageTitle: '管理面板',
|
||||||
|
// // show: true
|
||||||
|
// // },
|
||||||
|
// // children: [
|
||||||
|
// // {
|
||||||
|
// // path: 'role',
|
||||||
|
// // name: 'Admin-Role',
|
||||||
|
// // component: () => import('../views/Role.vue'),
|
||||||
|
// // meta: {
|
||||||
|
// // pageTitle: '角色管理',
|
||||||
|
// // show: true
|
||||||
|
// // }
|
||||||
|
// // },
|
||||||
|
// // {
|
||||||
|
// // path: 'permission',
|
||||||
|
// // name: 'Admin-Permission',
|
||||||
|
// // component: () => import('../views/Permission.vue'),
|
||||||
|
// // meta: {
|
||||||
|
// // pageTitle: '權限管理',
|
||||||
|
// // show: true
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // ]
|
||||||
|
// // },
|
||||||
|
// // {
|
||||||
|
// // path: `${root}/admin/role`,
|
||||||
|
// // name: 'Admin-Role',
|
||||||
|
// // component: () => import('@/views/Role.vue'),
|
||||||
|
// // meta: {
|
||||||
|
// // pageTitle: '角色管理',
|
||||||
|
// // show: true
|
||||||
|
// // }
|
||||||
|
// // },
|
||||||
|
// // {
|
||||||
|
// // path: '/admin/role/:id/access',
|
||||||
|
// // name: 'Admin-Role-Access',
|
||||||
|
// // component: () => import('@/views/Access.vue'),
|
||||||
|
// // meta: {
|
||||||
|
// // pageTitle: '角色管理 / 設置權限[角色名稱]',
|
||||||
|
// // show: false
|
||||||
|
// // }
|
||||||
|
// // },
|
||||||
|
// // {
|
||||||
|
// // path: '/admin/permission',
|
||||||
|
// // name: 'Admin-Permission',
|
||||||
|
// // component: () => import('../views/Permission.vue'),
|
||||||
|
// // meta: {
|
||||||
|
// // pageTitle: '權限管理',
|
||||||
|
// // show: true
|
||||||
|
// // }
|
||||||
|
// // },
|
||||||
|
// {
|
||||||
|
// path: '/:pathMatch(.*)*',
|
||||||
|
// name: 'NotFound',
|
||||||
|
// component: () => import('../views/NotFound.vue')
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(),
|
history: createWebHistory(),
|
||||||
routes
|
routes
|
||||||
|
@ -2,7 +2,7 @@ import lineBotAPI from '@/apis/lineBot'
|
|||||||
|
|
||||||
export const pushMsgToBoth = async (text: string) => {
|
export const pushMsgToBoth = async (text: string) => {
|
||||||
try {
|
try {
|
||||||
const input = {
|
const input: any = {
|
||||||
to: [import.meta.env.VITE_KAROL_USERID, import.meta.env.VITE_JIANMIAU_USERID],
|
to: [import.meta.env.VITE_KAROL_USERID, import.meta.env.VITE_JIANMIAU_USERID],
|
||||||
messages: {
|
messages: {
|
||||||
type: 'text',
|
type: 'text',
|
||||||
|
@ -5,7 +5,7 @@ import { useRoute } from 'vue-router'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
// created
|
// created
|
||||||
if (import.meta.env.NODE_ENV === 'production') {
|
if (import.meta.env.MODE === 'production') {
|
||||||
onLoad()
|
onLoad()
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -4,6 +4,7 @@ import recordAPI from '@/apis/record'
|
|||||||
import lineBotAPI from '@/apis/lineBot'
|
import lineBotAPI from '@/apis/lineBot'
|
||||||
import { Record } from '@/models'
|
import { Record } from '@/models'
|
||||||
import { CallParent } from '@/cocos/config'
|
import { CallParent } from '@/cocos/config'
|
||||||
|
import { useStore } from '../store/index'
|
||||||
// components
|
// components
|
||||||
import Spinner from '@/components/Spinner.vue'
|
import Spinner from '@/components/Spinner.vue'
|
||||||
import CreateRecordModalButton from '@/components/ModalButton/Record/CreateRecordModalButton.vue'
|
import CreateRecordModalButton from '@/components/ModalButton/Record/CreateRecordModalButton.vue'
|
||||||
@ -16,6 +17,7 @@ class MonthData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// data
|
// data
|
||||||
|
const store = useStore()
|
||||||
const isLoading = ref<boolean>(true)
|
const isLoading = ref<boolean>(true)
|
||||||
const records = ref<Record[]>([])
|
const records = ref<Record[]>([])
|
||||||
const thisMonthData = ref<MonthData>(new MonthData())
|
const thisMonthData = ref<MonthData>(new MonthData())
|
||||||
@ -72,7 +74,7 @@ fetchRecords()
|
|||||||
// 笨蛋才按我
|
// 笨蛋才按我
|
||||||
const handle = async () => {
|
const handle = async () => {
|
||||||
try {
|
try {
|
||||||
const input = {
|
const input: any = {
|
||||||
to: [import.meta.env.VITE_KAROL_USERID, import.meta.env.VITE_JIANMIAU_USERID],
|
to: [import.meta.env.VITE_KAROL_USERID, import.meta.env.VITE_JIANMIAU_USERID],
|
||||||
messages: { type: 'text', text: '卡比覺得促咪!' }
|
messages: { type: 'text', text: '卡比覺得促咪!' }
|
||||||
}
|
}
|
||||||
@ -82,6 +84,19 @@ const handle = async () => {
|
|||||||
console.error('error', error)
|
console.error('error', error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 呼叫xx 聽到請回答
|
||||||
|
const call = async () => {
|
||||||
|
try {
|
||||||
|
const input: any = {
|
||||||
|
to: [import.meta.env.VITE_KAROL_USERID, import.meta.env.VITE_JIANMIAU_USERID],
|
||||||
|
messages: { type: 'text', text: '呼叫呆喵! 聽到請回答!' }
|
||||||
|
}
|
||||||
|
await lineBotAPI.push(input)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('error', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -89,6 +104,7 @@ const handle = async () => {
|
|||||||
<div class="d-flex mb-3" style="width: 100vw">
|
<div class="d-flex mb-3" style="width: 100vw">
|
||||||
<CreateRecordModalButton view="Home" class="me-3" />
|
<CreateRecordModalButton view="Home" class="me-3" />
|
||||||
<button type="button" class="btn btn-danger me-3" @click="handle">笨蛋才按我</button>
|
<button type="button" class="btn btn-danger me-3" @click="handle">笨蛋才按我</button>
|
||||||
|
<button type="button" class="btn btn-primary me-3" @click="call">哈囉</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="list-group list-group-checkable">
|
<div class="list-group list-group-checkable">
|
||||||
<label class="list-group-item py-3 mb-3">
|
<label class="list-group-item py-3 mb-3">
|
||||||
|
@ -14,5 +14,8 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
server: {
|
server: {
|
||||||
port: 8080
|
port: 8080
|
||||||
}
|
},
|
||||||
|
// base: import.meta.env.DEV ? '/' : '/jm-expense-vue-ts/'
|
||||||
|
base: '/jm-expense-vue-ts/'
|
||||||
|
// base: './'
|
||||||
})
|
})
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
// publicPath: process.env.NODE_ENV === 'production' ? '/jm-expense-vue-ts/' : '/'
|
|
||||||
publicPath: import.meta.env.NODE_ENV === 'production' ? '/jm-expense-vue-ts/' : '/'
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user