app.$http = axios; Can LOGIN now

This commit is contained in:
Cindy Chang
2024-07-09 14:53:21 +08:00
parent 8b99a230d7
commit a2703bef6e
2 changed files with 42 additions and 30 deletions

View File

@@ -1,8 +1,8 @@
import { createApp } from 'vue'; import { createApp, markRaw } from "vue";
import App from './App.vue';
import router from './router'; import App from "./App.vue";
import pinia from '@/stores/main'; import router from "./router";
import myPiniaPlugin from './plugins/myPiniaPlugin'; import pinia from '@/stores/main.js';
import axios from 'axios'; import axios from 'axios';
import VueAxios from 'vue-axios'; import VueAxios from 'vue-axios';
import moment from 'moment'; import moment from 'moment';
@@ -14,15 +14,16 @@ import popper from 'cytoscape-popper';
import draggable from 'vuedraggable'; import draggable from 'vuedraggable';
import VueSweetalert2 from 'vue-sweetalert2'; import VueSweetalert2 from 'vue-sweetalert2';
// Import CSS // import CSS
import './assets/main.css'; import "./assets/main.css";
import 'vue-toast-notification/dist/theme-sugar.css'; import 'vue-toast-notification/dist/theme-sugar.css';
import 'sweetalert2/dist/sweetalert2.min.css'; import 'sweetalert2/dist/sweetalert2.min.css';
// Import PrimeVue // import PrimeVue
import PrimeVue from 'primevue/config'; import PrimeVue from 'primevue/config';
import 'primevue/resources/themes/saga-blue/theme.css'; import 'primevue/resources/themes/saga-blue/theme.css'; //theme
import 'primeicons/primeicons.css'; // import 'primevue/resources/primevue.min.css'; //core css 官網更新 3.40 後移除基礎樣式
import 'primeicons/primeicons.css'; //icons
import Sidebar from 'primevue/sidebar'; import Sidebar from 'primevue/sidebar';
import Button from 'primevue/button'; import Button from 'primevue/button';
import Dropdown from 'primevue/dropdown'; import Dropdown from 'primevue/dropdown';
@@ -32,8 +33,8 @@ import TabView from 'primevue/tabview';
import TabPanel from 'primevue/tabpanel'; import TabPanel from 'primevue/tabpanel';
import DataTable from 'primevue/datatable'; import DataTable from 'primevue/datatable';
import Column from 'primevue/column'; import Column from 'primevue/column';
import ColumnGroup from 'primevue/columngroup'; import ColumnGroup from 'primevue/columngroup'; // optional
import Row from 'primevue/row'; import Row from 'primevue/row'; // optional
import RadioButton from 'primevue/radiobutton'; import RadioButton from 'primevue/radiobutton';
import PickList from 'primevue/picklist'; import PickList from 'primevue/picklist';
import Timeline from 'primevue/timeline'; import Timeline from 'primevue/timeline';
@@ -47,26 +48,27 @@ import Tooltip from 'primevue/tooltip';
import Checkbox from 'primevue/checkbox'; import Checkbox from 'primevue/checkbox';
import Dialog from 'primevue/dialog'; import Dialog from 'primevue/dialog';
import ContextMenu from 'primevue/contextmenu'; import ContextMenu from 'primevue/contextmenu';
console.log('TODO: hello wolrld')
const emitter = mitt(); const emitter = mitt();
const app = createApp(App); const app = createApp(App);
// Axios setting // Axios 實例添加到 Vue 的應用實例中
app.config.globalProperties.$axios = axios; app.config.globalProperties.$http = axios;
app.$http = axios; // 將 $http 添加到 Vue 實例中
// Pinia Set
pinia.use(myPiniaPlugin);
// Pinia Set // Pinia Set
pinia.use(({ store }) => { pinia.use(({ store }) => {
store.$axios = axios; store.$router = markRaw(router);
store.$axios = markRaw(axios);
store.$toast = markRaw(ToastPlugin);
store.$http = app.$http;
}); });
// Global properties // can use `this.$moment` in Vue.js
app.config.globalProperties.$axios = axios;
app.config.globalProperties.$moment = moment; app.config.globalProperties.$moment = moment;
app.config.globalProperties.$emitter = emitter; app.config.globalProperties.$emitter = emitter;
app.config.globalProperties.$cytoscape = cytoscape; app.config.globalProperties.$cytoscape = cytoscape;
// Cytoscape.js's style // Cytoscape.js's style
cytoscape.use( dagre ); cytoscape.use( dagre );
cytoscape.use( popper ); cytoscape.use( popper );
@@ -75,13 +77,11 @@ app.use(pinia);
app.use(router); app.use(router);
app.use(VueAxios, axios); app.use(VueAxios, axios);
app.use(VueSweetalert2); app.use(VueSweetalert2);
app.use(ToastPlugin, { app.use(ToastPlugin, { // use `this.$toast` in Vue.js
position: 'bottom', position: 'bottom',
duration: 5000, duration: 5000,
}); });
app.use(PrimeVue); app.use(PrimeVue);
// Register PrimeVue components
app.component('Sidebar', Sidebar); app.component('Sidebar', Sidebar);
app.component('Button', Button); app.component('Button', Button);
app.component('Dropdown', Dropdown); app.component('Dropdown', Dropdown);
@@ -105,9 +105,7 @@ app.component('Calendar', Calendar);
app.component('Checkbox', Checkbox); app.component('Checkbox', Checkbox);
app.component('Dialog', Dialog); app.component('Dialog', Dialog);
app.component('ContextMenu', ContextMenu); app.component('ContextMenu', ContextMenu);
app.component('Draggable', draggable); app.component('Draggable', draggable); // 拖曳
app.directive('tooltip', Tooltip); app.directive('tooltip', Tooltip);
console.log('hello from main.ts'); app.mount("#app");
app.mount('#app');

14
src/types/vue.d.ts vendored Normal file
View File

@@ -0,0 +1,14 @@
import { AxiosInstance } from 'axios';
import { App } from 'vue';
declare module '@vue/runtime-core' {
interface ComponentCustomProperties {
$http: AxiosInstance;
}
}
// 將類型擴展到 Vue 應用實例
declare module 'vue' {
interface App {
$http: AxiosInstance;
}