SyuanYu 1 gadu atpakaļ
vecāks
revīzija
0d40d30b4a
45 mainītis faili ar 441 papildinājumiem un 225 dzēšanām
  1. 2 1
      .env.development
  2. 2 1
      .env.production
  3. 1 1
      src/assets/css/style.css
  4. 0 0
      src/assets/css/style.css.map
  5. 1 1
      src/assets/css/style.scss
  6. 2 2
      src/components/ArticleCard.vue
  7. 4 4
      src/components/CourseCard.vue
  8. 6 7
      src/components/CraftsArticle.vue
  9. 1 1
      src/components/Map.vue
  10. 5 1
      src/components/Navbar.vue
  11. 1 1
      src/components/PDFViewer.vue
  12. 3 1
      src/router/index.js
  13. 14 13
      src/stores/store.js
  14. 11 5
      src/views/Article.vue
  15. 5 5
      src/views/ArticleDetail.vue
  16. 3 3
      src/views/CollegeGroup/Cfa.vue
  17. 5 5
      src/views/CollegeGroup/Craft.vue
  18. 1 1
      src/views/CollegeGroup/Cross.vue
  19. 3 3
      src/views/CollegeGroup/Future.vue
  20. 1 1
      src/views/CollegeGroup/Life.vue
  21. 1 1
      src/views/CollegeGroup/Life/Apprentice/Course.vue
  22. 5 2
      src/views/CollegeGroup/Life/Campus.vue
  23. 7 4
      src/views/CollegeGroup/Life/CraftJourney.vue
  24. 2 2
      src/views/CollegeGroup/Life/Shop.vue
  25. 1 1
      src/views/CollegeGroup/Main.vue
  26. 2 2
      src/views/CollegeGroup/Online.vue
  27. 1 1
      src/views/CollegeGroup/Proposal.vue
  28. 1 1
      src/views/CollegeGroup/Repair.vue
  29. 5 5
      src/views/CourseDetail.vue
  30. 2 2
      src/views/CourseList.vue
  31. 217 51
      src/views/Courses/Create.vue
  32. 7 7
      src/views/Courses/Proposal.vue
  33. 28 14
      src/views/Courses/SetUp.vue
  34. 12 12
      src/views/Crafts.vue
  35. 10 9
      src/views/Home.vue
  36. 3 6
      src/views/Login.vue
  37. 2 2
      src/views/News.vue
  38. 1 1
      src/views/NewsDetail.vue
  39. 29 27
      src/views/User/Courses.vue
  40. 16 8
      src/views/User/Dashboard.vue
  41. 1 1
      src/views/User/FavoriteClass.vue
  42. 11 3
      src/views/User/Passport.vue
  43. 4 4
      src/views/User/Profile.vue
  44. 1 1
      src/views/User/Proposal.vue
  45. 1 1
      src/views/User/Setting.vue

+ 2 - 1
.env.development

@@ -1 +1,2 @@
-VITE_API_URL=https://cmm.ai:8088
+VITE_API_URL=https://craftsplatform.ntcri.gov.tw
+VITE_API_IMG_URL=https://ntcri.org

+ 2 - 1
.env.production

@@ -1 +1,2 @@
-VITE_API_URL=http://127.0.0.1:8088
+VITE_API_URL=https://craftsplatform.ntcri.gov.tw
+VITE_API_IMG_URL=https://craftsplatform.ntcri.gov.tw

+ 1 - 1
src/assets/css/style.css

@@ -943,7 +943,7 @@ input:focus-visible {
   background-color: var(--purple);
 }
 .resume-content .main-table {
-  max-width: 100%;
+  width: 100%;
   margin: 0 0 3.125em;
   overflow-x: auto;
 }

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
src/assets/css/style.css.map


+ 1 - 1
src/assets/css/style.scss

@@ -1075,7 +1075,7 @@ input:focus-visible {
   }
 
   .main-table {
-    max-width: 100%;
+    width: 100%;
     margin: 0 0 3.125em;
     overflow-x: auto;
 

+ 2 - 2
src/components/ArticleCard.vue

@@ -33,8 +33,8 @@ const props = defineProps({
           <v-img
             cover
             class="mx-auto cover-img"
-            :lazy-src="`https://ntcri.org/${data.cover_img}`"
-            :src="`https://ntcri.org/${data.cover_img}`"
+            :lazy-src="`${store.imgUrl}/${data.cover_img}`"
+            :src="`${store.imgUrl}/${data.cover_img}`"
             alt="臺灣工藝學校全球學習共享平台"
           >
             <template v-slot:placeholder>

+ 4 - 4
src/components/CourseCard.vue

@@ -28,7 +28,7 @@ async function setFavoriteClass(classId) {
 
   progress.value = true;
 
-  const url = `https://cmm.ai:8088/api/add_favorite_class?class_name_id=${classId}&access_token=${token}`;
+  const url = `${store.apiUrl}/api/add_favorite_class?class_name_id=${classId}&access_token=${token}`;
   try {
     const response = await axios.post(url);
     getFavoriteClass();
@@ -42,7 +42,7 @@ async function setFavoriteClass(classId) {
 async function getFavoriteClass() {
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_favorite_class?access_token=${token}`
+      `${store.apiUrl}/api/get_favorite_class?access_token=${token}`
     );
     favorites.list = response.data.favorite_courses;
   } catch (error) {
@@ -57,7 +57,7 @@ async function deleteFavoriteClass(classId) {
   progress.value = true;
   try {
     const response = await axios.post(
-      `https://cmm.ai:8088/api/delete_favorite_class?class_name_id=${classId}&access_token=${token}`
+      `${store.apiUrl}/api/delete_favorite_class?class_name_id=${classId}&access_token=${token}`
     );
     progress.value = false;
     getFavoriteClass();
@@ -86,7 +86,7 @@ function isClassFavorite(classId) {
 //   } else if (data.org === "Udemy") {
 //     return data.cover_img;
 //   } else {
-//     return `https://ntcri.org/${data.cover_img}`;
+//     return `${store.imgUrl}/${data.cover_img}`;
 //   }
 // }
 </script>

+ 6 - 7
src/components/CraftsArticle.vue

@@ -1,12 +1,11 @@
 <script setup>
 import { ref, reactive } from "vue";
 import axios from "axios";
-// import { useMainStore } from "@/stores/store";
+import { useMainStore } from "@/stores/store";
 // import { useI18n } from "vue-i18n";
 
 // const { t } = useI18n();
-// const store = useMainStore();
-
+const store = useMainStore();
 let loading = ref(false);
 let data = reactive({
   list: [],
@@ -17,7 +16,7 @@ let data = reactive({
   loading.value = true;
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_article?group_sort=國際專欄"
+      `${store.apiUrl}/api/get_article?group_sort=國際專欄`
     );
     data.list = response.data.articles;
     loading.value = false;
@@ -39,13 +38,13 @@ let data = reactive({
   <v-row v-else class="list">
     <v-col cols="12" sm="6" v-for="(item, index) in data.list" :key="index">
       <a :href="item.url" target="_blank">
-        <!-- <img :src="`https://ntcri.org/${item.cover_img}`" alt="臺灣工藝學校全球學習共享平台" /> -->
+        <!-- <img :src="`${store.imgUrl}/${item.cover_img}`" alt="臺灣工藝學校全球學習共享平台" /> -->
         <div class="overflow-hidden">
           <v-img
             class="mx-auto cover-img"
-            :lazy-src="`https://ntcri.org/${item.cover_img}`"
+            :lazy-src="`${store.imgUrl}/${item.cover_img}`"
             cover
-            :src="`https://ntcri.org/${item.cover_img}`"
+            :src="`${store.imgUrl}/${item.cover_img}`"
             alt="臺灣工藝學校全球學習共享平台"
           >
             <template v-slot:placeholder>

+ 1 - 1
src/components/Map.vue

@@ -37,7 +37,7 @@ onMounted(() => {
 
   (async function getData() {
     try {
-      const response = await axios.get("https://cmm.ai:8088/api/get_school");
+      const response = await axios.get(`${store.apiUrl}/api/get_school`);
       mapData.data = response.data.schools;
       console.log("data", mapData.data);
       console.log("response.data", response.data);

+ 5 - 1
src/components/Navbar.vue

@@ -247,7 +247,11 @@ function handleLogout() {
           <Login @close="handleClose" />
         </v-dialog> -->
 
-        <a v-if="!store.loginState" href="https://member.moc.gov.tw/MOCMC/A0001/list?SYS_ID=CRAFT_NTCRI">會員登入</a>
+        <a
+          v-if="!store.loginState"
+          href="https://member.moc.gov.tw/MOCMC/A0001/list?SYS_ID=CRAFT_NTCRI"
+          >會員登入</a
+        >
 
         <div v-else>
           <router-link

+ 1 - 1
src/components/PDFViewer.vue

@@ -21,7 +21,7 @@ watch(
 
 function setPDFUrl(pdf) {
   console.log('pdf',pdf);
-  // let url = `https://ntcri.org/pdf/${name}.pdf`;
+  // let url = `${store.imgUrl}/pdf/${name}.pdf`;
   let json = pdf.replace(/'/g, '"');
   let file = JSON.parse(json);
   let url = file.file1;

+ 3 - 1
src/router/index.js

@@ -367,6 +367,7 @@ router.beforeEach((to, from, next) => {
 
   // 檢查目標路由是否需要驗證權限
   if (to.meta.requiresAuth) {
+    console.log('檢查目標路由');
     const haveToken = store.loginState;
     console.log('router store token', store.token);
     // let isTokenExpired = store.checkTokenExpiration(); // 檢查 Token 是否過期
@@ -382,8 +383,9 @@ router.beforeEach((to, from, next) => {
       // }
       // next();
     } else {
+      console.log('>> 沒有token');
       store.loginDialog = true; // 開啟登入視窗
-      next('/'); // 若無 token 直接輸入網址前往時,將重定向至首頁
+      next(); // 若無 token 直接輸入網址前往時,將重定向至首頁
     }
   }
   //  else if (to.meta.checkToken) {

+ 14 - 13
src/stores/store.js

@@ -1,10 +1,10 @@
 import { defineStore, } from 'pinia';
-import { useRoute } from "vue-router";
 import axios from "axios";
 
 export const useMainStore = defineStore('mainStore', {
   state: () => ({
     apiUrl: import.meta.env.VITE_API_URL,
+    imgUrl: import.meta.env.VITE_API_IMG_URL,
     count: 0,
     token: "",
     authToken: "", // 藝文中心 Token
@@ -83,7 +83,7 @@ export const useMainStore = defineStore('mainStore', {
     async getAuthToken(authCode) {
       console.log('getAuthToken 測試');
       // let url = `https://craftsplatform.ntcri.gov.tw/api/get_authtoken?authCode=${authCode}`;
-      let url = `https://210.69.147.32/api/get_authtoken?authCode=${authCode}`;
+      let url = `${this.apiUrl}/api/get_authtoken?authCode=${authCode}`;
 
       try {
         const response = await axios.post(url);
@@ -106,7 +106,7 @@ export const useMainStore = defineStore('mainStore', {
       const authToken = localStorage.getItem("AuthToken");
       console.log('authToken', authToken);
 
-      let url = `https://210.69.147.32/api/get_user_data_from_MOC?AuthToken=${authToken}`;
+      let url = `${this.apiUrl}/api/get_user_data_from_MOC?AuthToken=${authToken}`;
 
       try {
         const response = await axios.post(url);
@@ -130,7 +130,7 @@ export const useMainStore = defineStore('mainStore', {
     async getToken() {
       const authToken = localStorage.getItem("AuthToken");
 
-      let url = `https://cmm.ai:8088/api/get_token?authToken=${authToken}&email=${this.mocProfile.EMAIL}`;
+      let url = `${this.apiUrl}/api/get_token?authToken=${authToken}&email=${this.mocProfile.EMAIL}`;
 
       try {
         const response = await axios.get(url);
@@ -163,8 +163,8 @@ export const useMainStore = defineStore('mainStore', {
       this.loginState = false;
       localStorage.removeItem("token");
       localStorage.removeItem("AuthToken");
-      console.log('logout');
-      return this.router.push("/");
+      console.log('logout(不導向首頁)');
+      // return this.router.push("/");
     },
     getImageUrl(name) {
       return new URL(`/src/assets/img/${name}`, import.meta.url).href;
@@ -178,9 +178,9 @@ export const useMainStore = defineStore('mainStore', {
     async getProfile() {
       try {
         const response = await axios.get(
-          `https://cmm.ai:8088/api/information?token=${this.token}`
+          `${this.apiUrl}/api/information?token=${this.token}`
         );
-        console.log('response', response);
+        console.log('getProfile', response);
         if (response.data.msg === "no access" || !response.data.msg) {
           console.log('getProfile logout');
           this.logout();
@@ -198,7 +198,7 @@ export const useMainStore = defineStore('mainStore', {
       if (token) {
         try {
           const response = await axios.get(
-            `https://cmm.ai:8088/api/get_user_information?access_token=${token}`
+            `${this.apiUrl}/api/get_user_information?access_token=${token}`
           );
 
           console.log('getUserInfo response', response);
@@ -207,9 +207,10 @@ export const useMainStore = defineStore('mainStore', {
         } catch (error) {
           console.error(error);
         }
-      } else {
-        this.logout();
       }
+      // else {
+      //   this.logout();
+      // }
     },
     // 將日期格式轉成純字串
     formatDate(date) {
@@ -264,7 +265,7 @@ export const useMainStore = defineStore('mainStore', {
       return `${year1}${month1}${day1}` === `${year2}${month2}${day2}`;
     },
     getPDF(name) {
-      return `https://ntcri.org/pdf/${name}.pdf`;
+      return `${this.imgUrl}/pdf/${name}.pdf`;
     },
     // 過濾圖片標籤
     removeHtmlImages(value) {
@@ -304,7 +305,7 @@ export const useMainStore = defineStore('mainStore', {
       } else if (regex.test(data.cover_img)) {
         return data.cover_img;
       } else {
-        return `https://ntcri.org/${data.cover_img}`;
+        return `${this.imgUrl}/${data.cover_img}`;
       }
     },
     setAlert(title) {

+ 11 - 5
src/views/Article.vue

@@ -35,7 +35,7 @@ const newsData = reactive({
 
 (async function getData() {
   try {
-    const response = await axios.get("https://cmm.ai:8088/api/get_news");
+    const response = await axios.get(`${store.apiUrl}/api/get_news`);
     console.log("response", response.data.news);
     newsAll.list = response.data.news;
     newsData.list = response.data.news;
@@ -52,7 +52,7 @@ async function search() {
   if (keyword !== "") {
     try {
       const response = await axios.get(
-        `https://cmm.ai:8088/api/search_news_like?keyword=${keyword}`
+        `${store.apiUrl}/api/search_news_like?keyword=${keyword}`
       );
       if (response.data.news.length !== 0) {
         newsData.list = response.data.news;
@@ -169,7 +169,7 @@ const tagList = reactive([
 // ]);
 
 // function getPDF(name) {
-//   return `https://ntcri.org/pdf/${name}.pdf`;
+//   return `${store.imgUrl}/pdf/${name}.pdf`;
 // }
 
 let fileName = ref(""); // PDFViewer Props
@@ -237,7 +237,10 @@ function isAnchorLink(url) {
               placeholder="關鍵字搜尋"
             />
             <button @click="search()">
-              <img src="@/assets/img/news/news-search-icon.png" alt="臺灣工藝學校全球學習共享平台" />
+              <img
+                src="@/assets/img/news/news-search-icon.png"
+                alt="臺灣工藝學校全球學習共享平台"
+              />
             </button>
           </span>
           <div
@@ -317,7 +320,10 @@ function isAnchorLink(url) {
               placeholder="關鍵字搜尋"
             />
             <button @click="search()">
-              <img src="@/assets/img/news/news-search-icon.png" alt="臺灣工藝學校全球學習共享平台" />
+              <img
+                src="@/assets/img/news/news-search-icon.png"
+                alt="臺灣工藝學校全球學習共享平台"
+              />
             </button>
           </span>
           <div

+ 5 - 5
src/views/ArticleDetail.vue

@@ -29,7 +29,7 @@ let list = reactive({
 async function getArticle() {
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_article?article_id=${articleId}`
+      `${store.apiUrl}/api/get_article?article_id=${articleId}`
     );
     console.log("response", response.data.articles[0]);
     list.data = response.data.articles[0];
@@ -84,8 +84,8 @@ getArticle();
               <h2 class="text-center">{{ list.data.title }}</h2>
               <!-- <v-img
                 class="cover-img my-10"
-                :lazy-src="`https://ntcri.org/${list.data.cover_img}`"
-                :src="`https://ntcri.org/${list.data.cover_img}`"
+                :lazy-src="`${store.imgUrl}/${list.data.cover_img}`"
+                :src="`${store.imgUrl}/${list.data.cover_img}`"
                 alt="臺灣工藝學校全球學習共享平台"
               >
                 <template v-slot:placeholder>
@@ -130,7 +130,7 @@ getArticle();
                       class="me-2"
                     ></v-icon>
                     <a
-                      :href="`https://ntcri.org/${item.url}`"
+                      :href="`${store.imgUrl}/${item.url}`"
                       download
                       target="_blank"
                       >{{ item.name }}</a
@@ -138,7 +138,7 @@ getArticle();
                   </li>
                 </ul>
               </div>
-              <!-- <a :href="`https://ntcri.org/${filePath}`" download class="download-link">附件下載</a> -->
+              <!-- <a :href="`${store.imgUrl}/${filePath}`" download class="download-link">附件下載</a> -->
             </v-col>
           </v-row>
         </div>

+ 3 - 3
src/views/CollegeGroup/Cfa.vue

@@ -80,7 +80,7 @@ const tgcImg = reactive({
 // 獲取活動現場資料
 async function getClasses() {
   loading.value = true;
-  let url = `https://cmm.ai:8088/api/get_tgc_img?page_num=${activityPageNum.value}&page_amount=${activityPageAmount.value}`;
+  let url = `${store.apiUrl}/api/get_tgc_img?page_num=${activityPageNum.value}&page_amount=${activityPageAmount.value}`;
 
   try {
     const response = await axios.get(url);
@@ -102,7 +102,7 @@ const tgcReport = reactive({
 // 獲取媒體報導資料
 async function getTgcReport() {
   loading.value = true;
-  let url = `https://cmm.ai:8088/api/get_tgc_report?page_num=${mediaPageNum.value}&page_amount=${mediaPageAmount.value}`;
+  let url = `${store.apiUrl}/api/get_tgc_report?page_num=${mediaPageNum.value}&page_amount=${mediaPageAmount.value}`;
 
   try {
     const response = await axios.get(url);
@@ -141,7 +141,7 @@ async function getClass() {
 
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_class_name?group_id=9&is_check=1&page_num=${coursePageNum.value}&page_amount=${coursePageAmount.value}`
+      `${store.apiUrl}/api/get_class_name?group_id=9&is_check=1&page_num=${coursePageNum.value}&page_amount=${coursePageAmount.value}`
     );
     courseTotalPages.value = store.getTotalPages(response.data.total_num, 6);
     courseData.classes = response.data.classes;

+ 5 - 5
src/views/CollegeGroup/Craft.vue

@@ -63,7 +63,7 @@ async function getClasses(group_sort, page_num) {
   loadingToggle(group_sort, true);
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_class_name?group_id=2&group_sort=${group_sort}&page_num=${page_num}&page_amount=${pageAmount.value}`
+      `${store.apiUrl}/api/get_class_name?group_id=2&group_sort=${group_sort}&page_num=${page_num}&page_amount=${pageAmount.value}`
     );
 
     if (group_sort === "校園扎根") {
@@ -147,9 +147,9 @@ const articles = reactive({
 });
 
 (async () => {
-  // let url = `https://cmm.ai:8088/api/get_group_classes_and_articles?group_id=6`;
-  let classUrl = "https://cmm.ai:8088/api/get_class_name?group_id=6";
-  let articlesUrl = "https://cmm.ai:8088/api/get_article?group_id=6";
+  // let url = `${store.apiUrl}/api/get_group_classes_and_articles?group_id=6`;
+  let classUrl = `${store.apiUrl}/api/get_class_name?group_id=6`;
+  let articlesUrl = `${store.apiUrl}/api/get_article?group_id=6`;
 
   try {
     const classData = await axios.get(classUrl);
@@ -265,7 +265,7 @@ const articles = reactive({
               "
             >
               <img
-                :src="`https://ntcri.org/${item.cover_img}`"
+                :src="`${store.imgUrl}/${item.cover_img}`"
                 alt="臺灣工藝學校全球學習共享平台"
               />
             </a>

+ 1 - 1
src/views/CollegeGroup/Cross.vue

@@ -47,7 +47,7 @@ const courese = reactive({
 
 async function getClass() {
   loading.value = true;
-  let url = `https://cmm.ai:8088/api/get_online_courese?no_org=udemy&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
+  let url = `${store.apiUrl}/api/get_online_courese?no_org=udemy&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
 
   // 篩選類別
   if (isFilter.value) {

+ 3 - 3
src/views/CollegeGroup/Future.vue

@@ -29,7 +29,7 @@ let read = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_article?category=研究計畫"
+      `${store.apiUrl}/api/get_article?category=研究計畫`
     );
     read.list = response.data.articles;
     console.log("線上閱讀", read.list);
@@ -115,7 +115,7 @@ let read = reactive({
           class="cover-img"
         >
           <img
-            :src="`https://ntcri.org/${item.cover_img}`"
+            :src="`${store.imgUrl}/${item.cover_img}`"
             alt="臺灣工藝學校全球學習共享平台"
           />
           <button class="read-btn">點我閱讀</button>
@@ -128,7 +128,7 @@ let read = reactive({
           class="cover-img"
         >
           <img
-            :src="`https://ntcri.org/${item.cover_img}`"
+            :src="`${store.imgUrl}/${item.cover_img}`"
             alt="臺灣工藝學校全球學習共享平台"
           />
           <button class="read-btn">點我閱讀</button>

+ 1 - 1
src/views/CollegeGroup/Life.vue

@@ -13,7 +13,7 @@ let articles = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_article?group_id=3"
+      `${store.apiUrl}/api/get_article?group_id=3`
     );
     console.log("response", response);
     articles.list = response.data.articles;

+ 1 - 1
src/views/CollegeGroup/Life/Apprentice/Course.vue

@@ -25,7 +25,7 @@ async function getClasses() {
   loading.value = true;
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_class_name?group_id=2&group_sort=pinkoi&page_num=${pageNum.value}&page_amount=${pageAmount.value}`
+      `${store.apiUrl}/api/get_class_name?group_id=2&group_sort=pinkoi&page_num=${pageNum.value}&page_amount=${pageAmount.value}`
     );
     totalPages.value = store.getTotalPages(
       response.data.total_num,

+ 5 - 2
src/views/CollegeGroup/Life/Campus.vue

@@ -1,6 +1,9 @@
 <script setup>
 import { ref, reactive } from "vue";
 import axios from "axios";
+import { useMainStore } from "@/stores/store";
+
+const store = useMainStore();
 
 let campus = reactive({
   list: [],
@@ -9,7 +12,7 @@ let campus = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_group_classes_and_articles?group_id=3"
+      `${store.apiUrl}/api/get_group_classes_and_articles?group_id=3`
     );
 
     campus.list = response.data.articles.filter(
@@ -75,7 +78,7 @@ const breadcrumbs = reactive([
           $router.resolve(`/article-detail/${item.article_id}`).href
         "
       >
-        <img :src="`https://ntcri.org/${item.cover_img}`" alt="臺灣工藝學校全球學習共享平台" />
+        <img :src="`${store.imgUrl}/${item.cover_img}`" alt="臺灣工藝學校全球學習共享平台" />
       </a>
       <section class="mt-4">
         <h3>{{ item.title }}</h3>

+ 7 - 4
src/views/CollegeGroup/Life/CraftJourney.vue

@@ -1,6 +1,9 @@
 <script setup>
 import { reactive } from "vue";
 import axios from "axios";
+import { useMainStore } from "@/stores/store";
+
+const store = useMainStore();
 
 let travel = reactive({
   list: [],
@@ -9,7 +12,7 @@ let travel = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_article?group_id=3"
+      `${store.apiUrl}/api/get_article?group_id=3`
     );
 
     travel.list = response.data.articles.filter(
@@ -73,8 +76,8 @@ const breadcrumbs = reactive([
         "
       >
         <v-img
-          :lazy-src="`https://ntcri.org/${item.cover_img}`"
-          :src="`https://ntcri.org/${item.cover_img}`"
+          :lazy-src="`${store.imgUrl}/${item.cover_img}`"
+          :src="`${store.imgUrl}/${item.cover_img}`"
           cover
           alt="臺灣工藝學校全球學習共享平台"
         >
@@ -87,7 +90,7 @@ const breadcrumbs = reactive([
             </div>
           </template>
         </v-img>
-        <!-- <img :src="`https://ntcri.org/${item.cover_img}`" alt="臺灣工藝學校全球學習共享平台" /> -->
+        <!-- <img :src="`${store.imgUrl}/${item.cover_img}`" alt="臺灣工藝學校全球學習共享平台" /> -->
         <section>
           <h3>{{ item.title }}</h3>
           <p>{{ item.depiction }}</p>

+ 2 - 2
src/views/CollegeGroup/Life/Shop.vue

@@ -29,7 +29,7 @@ let article = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_article?group_sort=旅物SHOP"
+      `${store.apiUrl}/api/get_article?group_sort=旅物SHOP`
     );
     article.list = response.data.articles;
     console.log("旅物 SHOP", article.list);
@@ -169,7 +169,7 @@ const shopImgs = [
           <h3 class="block-title mb-7">{{ item.title }}</h3>
           <img
             v-if="item.cover_img !== ''"
-            :src="`https://ntcri.org/${item.cover_img}`"
+            :src="`${store.imgUrl}/${item.cover_img}`"
             alt="臺灣工藝學校全球學習共享平台"
             class="mb-7"
           />

+ 1 - 1
src/views/CollegeGroup/Main.vue

@@ -52,7 +52,7 @@ async function getGroup(id) {
 
   try {
     let response = await axios.get(
-      `https://cmm.ai:8088/api/get_group_name?id=${id}`
+      `${store.apiUrl}/api/get_group_name?id=${id}`
     );
     groupDescribe.value = response.data.school_groups[0].describe;
     console.log("學群介紹", response.data.school_groups);

+ 2 - 2
src/views/CollegeGroup/Online.vue

@@ -56,7 +56,7 @@ const courese = reactive({
 
 async function getClass() {
   loading.value = true;
-  let url = `https://cmm.ai:8088/api/get_online_courese?org=udemy&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
+  let url = `${store.apiUrl}/api/get_online_courese?org=udemy&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
 
   // 判斷篩選
   if (isFilter.value) {
@@ -116,7 +116,7 @@ let imedia = reactive({
 });
 
 async function getImediaVideo() {
-  let url = `https://210.69.147.32/api/get_media_data?media_categories_id=1256&page=1&page_size=8`;
+  let url = `${store.apiUrl}/api/get_media_data?media_categories_id=1256&page=1&page_size=8`;
 
   try {
     const response = await axios.post(url);

+ 1 - 1
src/views/CollegeGroup/Proposal.vue

@@ -47,7 +47,7 @@ let buyWay = reactive({
   console.log("courseId", courseId);
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_article?category=研究計畫&article_id=${courseId}`
+      `${store.apiUrl}/api/get_article?category=研究計畫&article_id=${courseId}`
     );
     articlesAll.list = response.data.articles;
     articles.list = response.data.articles[0];

+ 1 - 1
src/views/CollegeGroup/Repair.vue

@@ -15,7 +15,7 @@ let searchInput = ref("");
 let searchError = ref(false);
 
 (async () => {
-  let url = `https://cmm.ai:8088/api/get_group_classes_and_articles?group_id=6`;
+  let url = `${store.apiUrl}/api/get_group_classes_and_articles?group_id=6`;
 
   try {
     const response = await axios.get(url);

+ 5 - 5
src/views/CourseDetail.vue

@@ -55,7 +55,7 @@ let courseNameId = ref(null);
 (async () => {
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_class_name?class_name_id=${courseId}`
+      `${store.apiUrl}/api/get_class_name?class_name_id=${courseId}`
     );
     course.data = response.data.classes[0];
     isInner.value = course.data.is_inner;
@@ -96,7 +96,7 @@ let session = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_event?class_name_id=${courseId}`
+      `${store.apiUrl}/api/get_event?class_name_id=${courseId}`
     );
     session.data = response.data.classes;
     console.log("session.data", session.data);
@@ -116,7 +116,7 @@ async function getOtherClass() {
   // let number = Math.floor(Math.random() * 300) + 1; // 在 1-300 間取一個隨機正整數
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_class_name?is_check=1&category=${course.data.category}&page_num=1&page_amount=4`
+      `${store.apiUrl}/api/get_class_name?is_check=1&category=${course.data.category}&page_num=1&page_amount=4`
     );
     console.log("其他 response", response);
     other.classes = response.data.classes.filter(
@@ -159,7 +159,7 @@ async function signUp(index) {
   if (isLogin && token) {
     signUpDialog[index] = true;
     let response = await axios.get(
-      `https://cmm.ai:8088/api/get_user_information?get_all=0&get_detail_information=1&access_token=${token}`
+      `${store.apiUrl}/api/get_user_information?get_all=0&get_detail_information=1&access_token=${token}`
     );
     console.log("response.data user_inform", response.data);
     Object.keys(response.data.user_inform[0]).forEach((key) => {
@@ -219,7 +219,7 @@ async function signUpSubmit(id) {
 
   try {
     const response = await axios.post(
-      `https://cmm.ai:8088/api/input_registration?access_token=${token}`,
+      `${store.apiUrl}/api/input_registration?access_token=${token}`,
       formData
     );
     console.log("確認報名", response);

+ 2 - 2
src/views/CourseList.vue

@@ -37,7 +37,7 @@ watch(pageNum, () => {
 
 async function getClass() {
   loading.value = true;
-  let url = `https://cmm.ai:8088/api/get_class_name?is_check=1&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
+  let url = `${store.apiUrl}/api/get_class_name?is_check=1&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
   console.log("isFilter", isFilter.value);
 
   // 排除外部課程
@@ -86,7 +86,7 @@ async function search() {
   try {
     loading.value = true;
     const response = await axios.get(
-      `https://cmm.ai:8088/api/search_class_like?keyword=${searchInput.value}`
+      `${store.apiUrl}/api/search_class_like?keyword=${searchInput.value}`
     );
     totalPages.value = store.getTotalPages(response.data.total_num, 18);
     courseData.classes = response.data.classes;

+ 217 - 51
src/views/Courses/Create.vue

@@ -191,7 +191,7 @@ async function insertResume() {
 
 //   try {
 //     const response = await axios.post(
-//       `https://cmm.ai:8088/api/input_user_resume?access_token=${token}&old_file=${oldFile}`,
+//       `${store.apiUrl}/api/input_user_resume?access_token=${token}&old_file=${oldFile}`,
 //       formData
 //     );
 //     console.log("新增履歷 response", response);
@@ -257,12 +257,18 @@ async function insertClassName() {
 
   try {
     const response = await axios.post(
-      "https://cmm.ai:8088/api/insert_class_name",
+      `${store.apiUrl}/api/insert_class_name`,
       formData
     );
 
     console.log("新增課程 response", response);
-    classNameId.value = response.data.new_class_name_id;
+
+    if (response.data.code === 200) {
+      classNameId.value = response.data.new_class_name_id;
+    } else {
+      return;
+    }
+    // classNameId.value = response.data.new_class_name_id;
   } catch (error) {
     console.error(error);
   }
@@ -286,6 +292,7 @@ let event = reactive({
   registration_start: "", // 報名起始日
   registration_end: "", // 報名截止日
   number_limit: "", // 課程名額
+  number_minimum: "", // 最低開課人數
   remark: "", // 備註
   ATM_address: "", // 匯款帳號(銀行代碼+帳號)
   access_token: token,
@@ -353,7 +360,7 @@ function addEventData() {
   if (
     event.event === "" || // 場次名稱
     event.contact === "" || // 聯絡資訊
-    event.lecturer === "" || // 課程講師
+    // event.lecturer === "" || // 課程講師
     event.people === "" || // 對象
     event.fee_method === "" || // 課程價格
     event.fee_payment === "" || // 收費方式
@@ -365,9 +372,12 @@ function addEventData() {
     eventFieldValidate.value = true;
   }
 
-  // event.location = location.address;
-  // console.log("location.address", location.address);
-  console.log("event.location", event.location);
+  // 帶入指派講師姓名
+  event.lecturer = assignTeachers.list
+    .map((item) => item.teacher_name)
+    .join("、");
+
+  console.log("event", event);
 
   // 處理時間格式
   event.start_time = store.mergeAndFormatDateTime(
@@ -406,12 +416,12 @@ async function insertEvent() {
     event.name_id = classNameId.value;
   }
 
-  event.start_time = convertDateFormat(event.start_time);
-  event.end_time = convertDateFormat(event.end_time);
-  event.registration_start = convertDateFormat(event.registration_start);
-  event.registration_end = convertDateFormat(event.registration_end);
+  // event.start_time = convertDateFormat(event.start_time);
+  // event.end_time = convertDateFormat(event.end_time);
+  // event.registration_start = convertDateFormat(event.registration_start);
+  // event.registration_end = convertDateFormat(event.registration_end);
 
-  console.log("檢查日期格式", event);
+  // console.log("檢查日期格式", event);
 
   const formData = new FormData();
   for (const key in event) {
@@ -420,12 +430,16 @@ async function insertEvent() {
 
   try {
     const response = await axios.post(
-      "https://cmm.ai:8088/api/insert_event",
+      `${store.apiUrl}/api/insert_event`,
       formData
     );
     eventId.value = response.data.class_id;
     console.log("eventId.value", eventId.value);
     console.log("新增場次 response", response);
+
+    if (response.data.code !== 200) {
+      return;
+    }
   } catch (error) {
     console.error(error);
   }
@@ -652,7 +666,7 @@ async function insertSession() {
 
       // 一日課程
       const response = await axios.post(
-        "https://cmm.ai:8088/api/insert_session",
+        `${store.apiUrl}/api/insert_session`,
         oneDayFormData
       );
       console.log("新增課堂(一日) response", response);
@@ -664,7 +678,7 @@ async function insertSession() {
 
       // 週期課程
       const response = await axios.post(
-        "https://cmm.ai:8088/api/auto_create_session",
+        `${store.apiUrl}/api/auto_create_session`,
         formData
       );
       console.log("新增課堂(週期) response", response);
@@ -690,7 +704,7 @@ let schoolId = ref("");
   let token = store.token;
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_school?&access_token=${token}`
+      `${store.apiUrl}/api/get_school?&access_token=${token}`
     );
 
     schoolSelect.list = response.data.schools;
@@ -718,7 +732,7 @@ async function handleSchoolData(id) {
   console.log("handleSchoolData", id);
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_school?location_id=${id}`
+      `${store.apiUrl}/api/get_school?location_id=${id}`
     );
 
     schools.list = response.data.schools;
@@ -805,7 +819,7 @@ async function getSchool(id) {
 
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_school?location_id=${id}`
+      `${store.apiUrl}/api/get_school?location_id=${id}`
     );
 
     console.log("取得據點", response);
@@ -1682,11 +1696,12 @@ async function assignTeacher(item, index) {
                                       </v-label>
                                     </v-col>
 
-                                    <v-col cols="12" sm="6" class="py-0">
+                                    <!-- <v-col cols="12" sm="6" class="py-0">
                                       <v-label class="d-flex align-center py-2">
                                         <p class="pb-5 pe-3">
                                           課程講師<span class="mark">*</span>
                                         </p>
+
                                         <v-text-field
                                           v-model="event.lecturer"
                                           :rules="[requiredRule]"
@@ -1694,7 +1709,7 @@ async function assignTeacher(item, index) {
                                           variant="outlined"
                                         ></v-text-field>
                                       </v-label>
-                                    </v-col>
+                                    </v-col> -->
 
                                     <v-col cols="12" sm="6" class="py-0">
                                       <v-label class="d-flex align-center py-2">
@@ -1712,11 +1727,16 @@ async function assignTeacher(item, index) {
 
                                     <v-col cols="12" sm="6" class="py-0">
                                       <v-label class="d-flex align-center py-2">
-                                        <p class="pb-5 pe-3">課程教室</p>
+                                        <p class="pb-5 pe-3">
+                                          課程名額<span class="mark">*</span>
+                                        </p>
                                         <v-text-field
-                                          v-model="event.location"
+                                          v-model="event.number_limit"
+                                          :rules="[requiredRule]"
                                           density="compact"
                                           variant="outlined"
+                                          type="number"
+                                          placeholder="請設定報名人數上限"
                                         ></v-text-field>
                                       </v-label>
                                     </v-col>
@@ -1724,15 +1744,27 @@ async function assignTeacher(item, index) {
                                     <v-col cols="12" sm="6" class="py-0">
                                       <v-label class="d-flex align-center py-2">
                                         <p class="pb-5 pe-3">
-                                          課程名額<span class="mark">*</span>
+                                          最低開課人數<span class="mark"
+                                            >*</span
+                                          >
                                         </p>
                                         <v-text-field
-                                          v-model="event.number_limit"
-                                          :rules="[requiredRule]"
+                                          v-model="event.number_minimum"
                                           density="compact"
                                           variant="outlined"
                                           type="number"
-                                          placeholder="請設定報名人數上限"
+                                          placeholder="請輸入開課門檻人數"
+                                        ></v-text-field>
+                                      </v-label>
+                                    </v-col>
+
+                                    <v-col cols="12" sm="6" class="py-0">
+                                      <v-label class="d-flex align-center py-2">
+                                        <p class="pb-5 pe-5">課程教室</p>
+                                        <v-text-field
+                                          v-model="event.location"
+                                          density="compact"
+                                          variant="outlined"
                                         ></v-text-field>
                                       </v-label>
                                     </v-col>
@@ -1740,15 +1772,14 @@ async function assignTeacher(item, index) {
                                     <v-col cols="12" sm="6" class="py-0">
                                       <v-label class="d-flex align-center py-2">
                                         <p class="pb-5 pe-3">
-                                          最低開課人數<span class="mark"
-                                            >*</span
-                                          >
+                                          課程價格<span class="mark">*</span>
                                         </p>
                                         <v-text-field
+                                          v-model="event.fee_method"
+                                          :rules="[requiredRule]"
                                           density="compact"
                                           variant="outlined"
                                           type="number"
-                                          placeholder="請輸入開課門檻人數"
                                         ></v-text-field>
                                       </v-label>
                                     </v-col>
@@ -1801,7 +1832,7 @@ async function assignTeacher(item, index) {
                                       </v-label>
                                     </v-col>
 
-                                    <v-col cols="12" class="py-0">
+                                    <!-- <v-col cols="12" class="py-0">
                                       <v-label class="d-flex align-center py-2">
                                         <p class="pb-5 pe-3">
                                           課程價格<span class="mark">*</span>
@@ -1814,7 +1845,7 @@ async function assignTeacher(item, index) {
                                           type="number"
                                         ></v-text-field>
                                       </v-label>
-                                    </v-col>
+                                    </v-col> -->
 
                                     <v-col cols="12" class="py-0">
                                       <v-label class="d-flex align-center py-2">
@@ -2113,9 +2144,7 @@ async function assignTeacher(item, index) {
                             <thead>
                               <tr>
                                 <th>名稱</th>
-                                <th>日期</th>
-                                <th width="20%">課程講師</th>
-                                <th width="20%">收費方式</th>
+                                <th></th>
                               </tr>
                             </thead>
                             <tbody>
@@ -2125,22 +2154,142 @@ async function assignTeacher(item, index) {
                               >
                                 <td>{{ item.event }}</td>
                                 <td>
-                                  {{
-                                    moment(`${item.start_time}`).format(
-                                      "YYYY/MM/DD"
-                                    )
-                                  }}
-                                  <br />
-                                  ~
-                                  <br />
-                                  {{
-                                    moment(`${item.end_time}`).format(
-                                      "YYYY/MM/DD"
-                                    )
-                                  }}
+                                  <v-dialog width="auto">
+                                    <template v-slot:activator="{ props }">
+                                      <v-btn
+                                        v-bind="props"
+                                        text="查看"
+                                        variant="tonal"
+                                        color="purple"
+                                        rounded="xl"
+                                      >
+                                      </v-btn>
+                                    </template>
+
+                                    <template v-slot:default="{ isActive }">
+                                      <v-card
+                                        :title="`場次:${item.event}`"
+                                        class="pa-3"
+                                      >
+                                        <v-card-text
+                                          style="
+                                            letter-spacing: 1px;
+                                            line-height: 1.5;
+                                          "
+                                        >
+                                          <!-- {{ item.introduction }} -->
+                                          <table class="mt-5 event-table">
+                                            <tbody>
+                                              <tr>
+                                                <td>場次日期</td>
+                                                <td>
+                                                  {{
+                                                    item.start_time.split(
+                                                      "T"
+                                                    )[0]
+                                                  }}
+                                                  <span class="ps-1">{{
+                                                    item.start_time
+                                                      .split("T")[1]
+                                                      .substring(0, 5)
+                                                  }}</span>
+                                                  <span class="ms-2 me-1"
+                                                    >~</span
+                                                  >
+                                                  {{
+                                                    item.end_time.split("T")[0]
+                                                  }}
+                                                  <span class="ps-1">{{
+                                                    item.end_time
+                                                      .split("T")[1]
+                                                      .substring(0, 5)
+                                                  }}</span>
+                                                </td>
+                                              </tr>
+
+                                              <tr>
+                                                <td>報名時間</td>
+                                                <td>
+                                                  {{
+                                                    item.registration_start.split(
+                                                      "T"
+                                                    )[0]
+                                                  }}
+                                                  <span class="ps-1">{{
+                                                    item.registration_start
+                                                      .split("T")[1]
+                                                      .substring(0, 5)
+                                                  }}</span>
+                                                  <span class="ms-2 me-1"
+                                                    >~</span
+                                                  >
+                                                  {{
+                                                    item.registration_end.split(
+                                                      "T"
+                                                    )[0]
+                                                  }}
+                                                  <span class="ps-1">{{
+                                                    item.registration_end
+                                                      .split("T")[1]
+                                                      .substring(0, 5)
+                                                  }}</span>
+                                                </td>
+                                              </tr>
+
+                                              <tr>
+                                                <td>課程名額</td>
+                                                <td>{{ item.number_limit }}</td>
+                                              </tr>
+
+                                              <tr>
+                                                <td>開課人數</td>
+                                                <td>
+                                                  {{ item.number_minimum }}
+                                                </td>
+                                              </tr>
+
+                                              <tr>
+                                                <td>課程價格</td>
+                                                <td>{{ item.fee_method }}</td>
+                                              </tr>
+
+                                              <tr>
+                                                <td>收費方式</td>
+                                                <td>{{ item.fee_payment }}</td>
+                                              </tr>
+
+                                              <tr
+                                                v-if="item.ATM_address !== ''"
+                                              >
+                                                <td>匯款帳號</td>
+                                                <td>{{ item.ATM_address }}</td>
+                                              </tr>
+
+                                              <tr>
+                                                <td>聯絡資訊</td>
+                                                <td>{{ item.contact }}</td>
+                                              </tr>
+
+                                              <tr>
+                                                <td>適合對象</td>
+                                                <td>{{ item.people }}</td>
+                                              </tr>
+                                            </tbody>
+                                          </table>
+                                        </v-card-text>
+
+                                        <v-card-actions class="justify-end">
+                                          <v-spacer></v-spacer>
+
+                                          <v-btn
+                                            text="關閉"
+                                            @click="isActive.value = false"
+                                          ></v-btn>
+                                        </v-card-actions>
+                                      </v-card>
+                                    </template>
+                                  </v-dialog>
                                 </td>
-                                <td>{{ item.lecturer }}</td>
-                                <td>{{ item.fee_method }}</td>
                               </tr>
                             </tbody>
                           </table>
@@ -2474,7 +2623,7 @@ async function assignTeacher(item, index) {
   </v-container>
 </template>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .step-title {
   text-align: center;
   h5 {
@@ -2536,6 +2685,22 @@ async function assignTeacher(item, index) {
   }
 }
 
+.event-table {
+  &,
+  tr,
+  td {
+    padding: 10px 20px;
+    border: 1px solid #d7d7d7;
+    border-collapse: collapse;
+  }
+
+  tr {
+    td:first-child {
+      text-align: center;
+    }
+  }
+}
+
 .sessions-card {
   border-radius: 1.875em 0.3125em 0.3125em 1.875em !important;
 
@@ -2570,6 +2735,7 @@ async function assignTeacher(item, index) {
 .main-table {
   margin: 3.125em 0;
   .table-title {
+    width: auto !important;
     background-color: var(--purple);
   }
 

+ 7 - 7
src/views/Courses/Proposal.vue

@@ -216,7 +216,7 @@ function insertSchool() {
     formData.append(key, location[key]);
   }
 
-  return axios.post("https://cmm.ai:8088/api/insert_school", formData);
+  return axios.post(`${store.apiUrl}/api/insert_school`, formData);
 }
 
 let proposal = reactive({
@@ -268,7 +268,7 @@ function insertProposal(id) {
     // formData.append(key, proposal[key]);
   }
 
-  return axios.post("https://cmm.ai:8088/api/insert_proposal", formData);
+  return axios.post(`${store.apiUrl}/api/insert_proposal`, formData);
 }
 
 function insertClassName(id) {
@@ -283,7 +283,7 @@ function insertClassName(id) {
     formData.append(key, course[key]);
   }
 
-  return axios.post("https://cmm.ai:8088/api/insert_class_name", formData);
+  return axios.post(`${store.apiUrl}/api/insert_class_name`, formData);
 }
 
 function insertEvent(id) {
@@ -305,7 +305,7 @@ function insertEvent(id) {
     }
   }
 
-  return axios.post("https://cmm.ai:8088/api/insert_event", formData);
+  return axios.post(`${store.apiUrl}/api/insert_event`, formData);
 }
 
 async function create() {
@@ -422,7 +422,7 @@ let schoolId = ref("");
   let token = store.token;
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_school?access_token=${token}`
+      `${store.apiUrl}/api/get_school?access_token=${token}`
     );
 
     schoolSelect.list = response.data.schools;
@@ -448,7 +448,7 @@ async function handleSchoolData(id) {
   console.log("handleSchoolData", id);
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_school?location_id=${id}`
+      `${store.apiUrl}/api/get_school?location_id=${id}`
     );
 
     schools.list = response.data.schools;
@@ -561,7 +561,7 @@ function handleResponse(show, color, text) {
 //   } else {
 //     try {
 //       const response = await axios.post(
-//         `https://cmm.ai:8088/api/check_is_user?email=${teacherName.value}`
+//         `${store.apiUrl}/api/check_is_user?email=${teacherName.value}`
 //       );
 
 //       if (response.data.msg === "success") {

+ 28 - 14
src/views/Courses/SetUp.vue

@@ -21,24 +21,32 @@ let isCrafts = ref(false); // 身份是否為工藝教育者
 onMounted(async () => {
   let response = await store.getUserInfo();
   console.log(response);
-  console.log("response.data.msg", response.data.msg);
-  if (response.data.msg !== "no access") {
-    userInfo.value = response.data.user_inform[0];
-
-    let position = userInfo.value.position;
-    console.log("position", position);
-    if (position) {
-      if (position["開課工藝家"]) {
-        isCrafts.value = true;
-        isLoading.value = false;
-        console.log("isCrafts.value", isCrafts.value);
+  if (response) {
+    if (response.data.msg !== "no access") {
+      userInfo.value = response.data.user_inform[0];
+
+      let position = userInfo.value.position;
+      console.log("position", position);
+      if (position) {
+        if (position["開課工藝家"]) {
+          isCrafts.value = true;
+          isLoading.value = false;
+          console.log("isCrafts.value", isCrafts.value);
+        } else {
+          isCrafts.value = false;
+          isLoading.value = false;
+        }
       } else {
         isCrafts.value = false;
         isLoading.value = false;
       }
+
+      console.log("userInfo.value", userInfo.value);
     } else {
+      console.log('"no access"');
       isCrafts.value = false;
       isLoading.value = false;
+      console.log("isCrafts.value = false", isCrafts.value);
     }
   } else {
     isCrafts.value = false;
@@ -46,10 +54,14 @@ onMounted(async () => {
     console.log("尚未登入");
     // store.openLoginDialog();
   }
-  // userInfo.value = response.data.user_inform[0];
 
-  console.log("userInfo.value", userInfo.value);
+  console.log("isCrafts.value = false", isCrafts.value);
 });
+
+// 導向藝文中心登入頁面
+async function login() {
+  window.location.href = `https://member.moc.gov.tw/MOCMC/A0001/list?SYS_ID=CRAFT_NTCRI`;
+}
 </script>
 
 <template>
@@ -73,13 +85,15 @@ onMounted(async () => {
           <router-link to="/setup-courses/tutorial">觀看開課教學</router-link>
         </div>
       </v-col>
+
       <v-col cols="12" md="6" class="mt-16 mt-md-0">
         <div v-if="!isLogin" class="options">
           <img
             src="@/assets/img/setup-courses/素材-02.png"
             alt="臺灣工藝學校全球學習共享平台"
           />
-          <button @click="store.openLoginDialog()">登入會員開課</button>
+          <button @click="login()">登入會員開課</button>
+          <!-- <button @click="store.openLoginDialog()">登入會員開課</button> -->
         </div>
         <div v-else-if="isCrafts" class="options">
           <img

+ 12 - 12
src/views/Crafts.vue

@@ -47,7 +47,7 @@ const newsData = reactive({
 
 (async function getData() {
   try {
-    const response = await axios.get("https://cmm.ai:8088/api/get_news");
+    const response = await axios.get(`${store.apiUrl}/api/get_news`);
     console.log("response", response.data.news);
     newsAll.list = response.data.news;
     newsData.list = response.data.news;
@@ -64,7 +64,7 @@ let thesis = reactive({
 (async function getArticle() {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_article?group_sort=論文補助"
+      `${store.apiUrl}/api/get_article?group_sort=論文補助`
     );
     thesis.list = response.data.articles;
     console.log("response", response.data.articles);
@@ -80,7 +80,7 @@ async function search() {
   if (keyword !== "") {
     try {
       const response = await axios.get(
-        `https://cmm.ai:8088/api/search_news_like?keyword=${keyword}`
+        `${store.apiUrl}/api/search_news_like?keyword=${keyword}`
       );
       if (response.data.news.length !== 0) {
         newsData.list = response.data.news;
@@ -173,7 +173,7 @@ let read = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_article?group_sort=線上閱讀"
+      `${store.apiUrl}/api/get_article?group_sort=線上閱讀`
     );
     read.list = response.data.articles;
     console.log("線上閱讀", read.list);
@@ -190,7 +190,7 @@ let book = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_article?group_sort=工藝書單"
+      `${store.apiUrl}/api/get_article?group_sort=工藝書單`
     );
     book.list = response.data.articles;
     console.log("工藝書單", response.data.articles);
@@ -289,8 +289,8 @@ function handlePdfUrl(pdf) {
             >
               <v-img
                 class="mx-auto cover-img"
-                :lazy-src="`https://ntcri.org/${item.cover_img}`"
-                :src="`https://ntcri.org/${item.cover_img}`"
+                :lazy-src="`${store.imgUrl}/${item.cover_img}`"
+                :src="`${store.imgUrl}/${item.cover_img}`"
                 alt="臺灣工藝學校全球學習共享平台"
               >
                 <template v-slot:placeholder>
@@ -315,8 +315,8 @@ function handlePdfUrl(pdf) {
             <v-img
               v-else
               class="mx-auto cover-img"
-              :lazy-src="`https://ntcri.org/${item.cover_img}`"
-              :src="`https://ntcri.org/${item.cover_img}`"
+              :lazy-src="`${store.imgUrl}/${item.cover_img}`"
+              :src="`${store.imgUrl}/${item.cover_img}`"
               @click="updatePDF(item.files)"
               alt="臺灣工藝學校全球學習共享平台"
             >
@@ -382,9 +382,9 @@ function handlePdfUrl(pdf) {
               <div class="overflow-hidden">
                 <v-img
                   class="mx-auto cover-img"
-                  :lazy-src="`https://ntcri.org/${item.cover_img}`"
+                  :lazy-src="`${store.imgUrl}/${item.cover_img}`"
                   cover
-                  :src="`https://ntcri.org/${item.cover_img}`"
+                  :src="`${store.imgUrl}/${item.cover_img}`"
                   alt="臺灣工藝學校全球學習共享平台"
                 >
                   <template v-slot:placeholder>
@@ -459,7 +459,7 @@ function handlePdfUrl(pdf) {
                   keywords:{{ item.en_keywords }}
                 </p>
                 <a
-                  :href="`https://ntcri.org/pdf/crafts/${item.fileName}.pdf`"
+                  :href="`${store.imgUrl}/pdf/crafts/${item.fileName}.pdf`"
                   download
                 >
                   <span>

+ 10 - 9
src/views/Home.vue

@@ -27,6 +27,8 @@ onMounted(() => {
 
   setTimeout(() => {
     loading.value = false;
+    console.log("VITE_API_URL", import.meta.env.VITE_API_URL);
+    console.log("apiUrl", store.apiUrl);
   }, 300);
 });
 
@@ -68,7 +70,7 @@ async function searchSchool() {
   schoolState.value = true;
   locationSearchId.list.length = 0;
 
-  let url = `https://cmm.ai:8088/api/get_school?is_check=1`;
+  let url = `${store.apiUrl}/api/get_school?is_check=1`;
   let location = "";
 
   if (selectedCounty.value && selectedDistrict.value) {
@@ -130,9 +132,9 @@ let schoolState = ref(false); // 搜尋狀態
 
 async function getClass() {
   console.log("get_class_name");
-  let url = `https://cmm.ai:8088/api/get_class_name?is_check=1&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
+  let url = `${store.apiUrl}/api/get_class_name?is_check=1&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
 
-  let assignUrl = `https://cmm.ai:8088/api/get_class_name?is_check=1&page_num=${pageNum.value}&page_amount=${pageAmount.value}&location_id=${assignLocationId.value}`;
+  let assignUrl = `${store.apiUrl}/api/get_class_name?is_check=1&page_num=${pageNum.value}&page_amount=${pageAmount.value}&location_id=${assignLocationId.value}`;
 
   if (schoolState.value) {
     const list = `[${locationSearchId.list.join(",")}]`;
@@ -187,7 +189,7 @@ const getClassList = async (locationId) => {
 
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_class_name?location_id=${locationId}`
+      `${store.apiUrl}/api/get_class_name?location_id=${locationId}`
     );
     getClass();
     pageNum.value = 1;
@@ -205,7 +207,7 @@ let recommend = reactive({
 (async () => {
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_class_name?recommend=1"
+      `${store.apiUrl}/api/get_class_name?recommend=1`
     );
     console.log("推薦課程", response);
     recommend.list = response.data.classes;
@@ -250,7 +252,6 @@ async function getNews() {
   try {
     const response = await axios.get(
       `${store.apiUrl}/api/get_news?page_num=1&page_amount=2`
-      // "https://cmm.ai:8088/api/get_news?page_num=1&page_amount=2"
     );
     news.list = response.data.news;
     console.log("重要訊息(新聞)", news.list);
@@ -270,7 +271,7 @@ async function getExhibit() {
   // 取得最新兩篇
   try {
     const response = await axios.get(
-      "https://cmm.ai:8088/api/get_class_name?category=展覽&page_num=1&page_amount=2"
+      `${store.apiUrl}/api/get_class_name?category=展覽&page_num=1&page_amount=2`
     );
     exhibit.list = response.data.classes;
     console.log("重要訊息(展覽)", exhibit.list);
@@ -667,7 +668,7 @@ let closeBanner = ref(false);
                           ? item.cover_img
                           : item.special_class_list_name === 'one_day_class'
                           ? store.getImageUrl('default.webp')
-                          : `https://ntcri.org/${item.cover_img}`
+                          : `${store.imgUrl}/${item.cover_img}`
                       "
                       cover
                       :src="
@@ -675,7 +676,7 @@ let closeBanner = ref(false);
                           ? item.cover_img
                           : item.special_class_list_name === 'one_day_class'
                           ? store.getImageUrl('default.webp')
-                          : `https://ntcri.org/${item.cover_img}`
+                          : `${store.imgUrl}/${item.cover_img}`
                       "
                       alt="臺灣工藝學校全球學習共享平台"
                     >

+ 3 - 6
src/views/Login.vue

@@ -45,7 +45,7 @@ const handleSignIn = async (response) => {
 
     try {
       const response = await axios.post(
-        "https://cmm.ai:8088/api/login/google/access-token",
+        `${store.apiUrl}/api/login/google/access-token`,
         formData
       );
       console.log("response", response);
@@ -92,10 +92,7 @@ async function login() {
 
   try {
     isLoading.value = true;
-    const response = await axios.post(
-      "https://cmm.ai:8088/api/login",
-      formData
-    );
+    const response = await axios.post(`${store.apiUrl}/api/login`, formData);
     console.log("登入 response", response);
 
     if (response.data.message === "查無此人") {
@@ -151,7 +148,7 @@ async function register() {
 
   try {
     isLoading.value = true;
-    const response = await axios.post("https://cmm.ai:8088/api/add", formData);
+    const response = await axios.post(`${store.apiUrl}/api/add`, formData);
     console.log("response", response);
     if (response.data.msg) {
       alertText.value = response.data.msg;

+ 2 - 2
src/views/News.vue

@@ -29,7 +29,7 @@ function filterCategory(item) {
 
 async function getData() {
   loading.value = true;
-  let url = `https://cmm.ai:8088/api/get_news`;
+  let url = `${store.apiUrl}/api/get_news`;
 
   if (categoryVal.value !== "") {
     url += `?category=${categoryVal.value}`;
@@ -66,7 +66,7 @@ async function search() {
   if (keyword !== "") {
     try {
       const response = await axios.get(
-        `https://cmm.ai:8088/api/search_news_like?keyword=${keyword}`
+        `${store.apiUrl}/api/search_news_like?keyword=${keyword}`
       );
       if (response.data.news.length !== 0) {
         newsData.list = response.data.news;

+ 1 - 1
src/views/NewsDetail.vue

@@ -16,7 +16,7 @@ let loading = ref(false);
   loading.value = true;
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_news?news_id=${newsId}`
+      `${store.apiUrl}/api/get_news?news_id=${newsId}`
     );
     news.data = response.data.news[0];
     loading.value = false;

+ 29 - 27
src/views/User/Courses.vue

@@ -37,7 +37,7 @@ async function getClass() {
   console.log("getClass");
   loading.value = true;
   let token = store.token;
-  let url = `https://cmm.ai:8088/api/get_class_name?access_token=${token}&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
+  let url = `${store.apiUrl}/api/get_class_name?access_token=${token}&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
 
   if (isCheck.value) {
     url += `&is_check=${isCheck.value}`;
@@ -163,8 +163,8 @@ async function getSchool(id) {
 
   try {
     const response = await axios.get(
-      // `https://cmm.ai:8088/api/get_school?location_id=${id}&access_token=${token}` // 暫時不帶 token
-      `https://cmm.ai:8088/api/get_school?location_id=${id}`
+      // `${store.apiUrl}/api/get_school?location_id=${id}&access_token=${token}` // 暫時不帶 token
+      `${store.apiUrl}/api/get_school?location_id=${id}`
     );
     schoolData = response.data.schools[0];
     console.log("據點", schoolData);
@@ -214,7 +214,7 @@ async function saveLocation() {
   }
 
   try {
-    await axios.post("https://cmm.ai:8088/api/update_school", formData);
+    await axios.post(`${store.apiUrl}/api/update_school`, formData);
 
     setTimeout(() => {
       saveLoading.value = false;
@@ -262,7 +262,7 @@ async function getCourse(id) {
 
   try {
     let response = await axios.get(
-      `https://cmm.ai:8088/api/get_class_name?class_name_id=${id}&access_token=${token}`
+      `${store.apiUrl}/api/get_class_name?class_name_id=${id}&access_token=${token}`
     );
 
     // console.log('課程資料',response);
@@ -281,7 +281,7 @@ async function getCourse(id) {
 
       if (coursesData["cover_img"] !== "") {
         coverImgLoading.value = true;
-        coverImgUrl.value = `https://ntcri.org/${coursesData["cover_img"]}`;
+        coverImgUrl.value = `${store.imgUrl}/${coursesData["cover_img"]}`;
 
         setTimeout(() => {
           coverImgLoading.value = false;
@@ -317,7 +317,7 @@ async function saveCourse() {
   }
 
   try {
-    await axios.post("https://cmm.ai:8088/api/update_class_name", formData);
+    await axios.post(`${store.apiUrl}/api/update_class_name`, formData);
 
     setTimeout(() => {
       saveLoading.value = false;
@@ -361,7 +361,7 @@ async function getAllSession(id) {
 
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_session?event_id=${id}`
+      `${store.apiUrl}/api/get_session?event_id=${id}`
     );
     session.list = response.data.classe_sessions;
     console.log("課堂資料", session.list);
@@ -376,7 +376,7 @@ async function getEvent(id) {
 
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_event?class_name_id=${id}`
+      `${store.apiUrl}/api/get_event?class_name_id=${id}`
     );
     // event_id
     console.log("場次資料", response);
@@ -413,10 +413,10 @@ async function getEnrolledData(eventId) {
 
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_registration_class?event_id=${eventId}&access_token=${token}`
+      `${store.apiUrl}/api/get_registration_class?event_id=${eventId}&access_token=${token}`
     );
     const recordResponse = await axios.post(
-      `https://cmm.ai:8088/api/add_attend_record_by_event`,
+      `${store.apiUrl}/api/add_attend_record_by_event`,
       formData
     );
     console.log("取得報名", response);
@@ -481,7 +481,7 @@ async function updateEnrolledData(item, index) {
 
   try {
     const response = await axios.post(
-      `https://cmm.ai:8088/api/update_registration_class?event_id=${item.event_id}&user_id=${item.user_id}&access_token=${token}`,
+      `${store.apiUrl}/api/update_registration_class?event_id=${item.event_id}&user_id=${item.user_id}&access_token=${token}`,
       formData
     );
     console.log("更新", response);
@@ -573,7 +573,7 @@ async function editEvent(id) {
   console.log("editEvent", id);
   event.name_id = id;
 
-  let url = `https://cmm.ai:8088/api/get_event?class_name_id=${id}`;
+  let url = `${store.apiUrl}/api/get_event?class_name_id=${id}`;
 
   try {
     const response = await axios.get(url);
@@ -597,7 +597,6 @@ async function editEvent(id) {
         console.log("date.end_date !!!", date.end_date);
         date.end_time = dateToObject(classes[key]);
         date.end_date = store.convertUTCtoTaiwanTime(classes[key]);
-        console.log("date.end_date >>>", date.end_date);
       }
 
       if (key === "registration_start") {
@@ -663,7 +662,7 @@ let sessionEndTimeList = ref(["", "", "", "", "", "", ""]);
 async function getAssignSession(eventId) {
   console.log("getAssignSession", eventId);
 
-  let url = `https://cmm.ai:8088/api/get_session?event_id=${eventId}`;
+  let url = `${store.apiUrl}/api/get_session?event_id=${eventId}`;
 
   try {
     const response = await axios.get(url);
@@ -782,7 +781,7 @@ async function updateSession() {
 
       // 一日課程
       const response = await axios.post(
-        "https://cmm.ai:8088/api/insert_session",
+        `${store.apiUrl}/api/insert_session`,
         oneDayFormData
       );
       console.log("新增課堂(一日) response", response);
@@ -794,7 +793,7 @@ async function updateSession() {
 
       // 週期課程
       const response = await axios.post(
-        "https://cmm.ai:8088/api/auto_create_session",
+        `${store.apiUrl}/api/auto_create_session`,
         formData
       );
       console.log("新增課堂(週期) response", response);
@@ -839,7 +838,7 @@ async function updateEvent() {
   console.log("event.registration_end", event.registration_end);
   console.log("event", event);
 
-  let url = "https://cmm.ai:8088/api/update_event";
+  let url = `${store.apiUrl}/api/update_event`;
 
   const formData = new FormData();
   for (const key in event) {
@@ -867,7 +866,7 @@ async function getAttendRecord() {
 
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_attend_record?class_detail_id=${sessionId.value}`
+      `${store.apiUrl}/api/get_attend_record?class_detail_id=${sessionId.value}`
     );
 
     // 排除未審核學習者 reg_confirm = false
@@ -876,7 +875,7 @@ async function getAttendRecord() {
     // );
 
     record.list = response.data.attend_record_list;
-    console.log("報名清單 >>>", record.list);
+    console.log("報名清單", record.list);
 
     record.list.map((item) => {
       console.log("item.is_attend", item, item.is_attend);
@@ -909,7 +908,7 @@ async function saveAttendRecord(item) {
 
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/update_attend_record?id=${data.id}&class_detail_id=${data.class_detail_id}&user_id=${data.user_id}&is_attend=${data.is_attend}`
+      `${store.apiUrl}/api/update_attend_record?id=${data.id}&class_detail_id=${data.class_detail_id}&user_id=${data.user_id}&is_attend=${data.is_attend}`
     );
 
     console.log("更新報名清單", response);
@@ -925,7 +924,9 @@ let session = reactive({
 
 // 選擇日期後顯示出席名單
 watch(sessionId, (val) => {
-  getAttendRecord();
+  if (val) {
+    getAttendRecord();
+  }
 });
 
 let tab = ref(2);
@@ -947,12 +948,13 @@ async function updateRegConfirm(item) {
 
   try {
     const response = await axios.post(
-      `https://cmm.ai:8088/api/update_registration_class?event_id=${item.event_id}&user_id=${item.user_id}&access_token=${token}`,
+      `${store.apiUrl}/api/update_registration_class?event_id=${item.event_id}&user_id=${item.user_id}&access_token=${token}`,
       formData
     );
 
     console.log("更新審核", response);
-
+    sessionId.value = null; // 審核後需重新選擇出席管理日期
+    record.list = []; // 清空出席名單
     getEnrolledData(item.event_id);
   } catch (error) {
     console.error(error);
@@ -1043,7 +1045,7 @@ async function search() {
 
   searchState.value = true;
 
-  let url = `https://cmm.ai:8088/api/get_class_name?access_token=${token}&page_num=1&page_amount=${pageAmount.value}&keyword=${searchInput.value}`;
+  let url = `${store.apiUrl}/api/get_class_name?access_token=${token}&page_num=1&page_amount=${pageAmount.value}&keyword=${searchInput.value}`;
 
   if (isCheck.value) {
     url += `&is_check=${isCheck.value}`;
@@ -1076,7 +1078,7 @@ async function resubmit(index) {
   course["class_name_id"] = index;
   console.log("resubmit course", course);
 
-  let url = "https://cmm.ai:8088/api/update_class_name";
+  let url = `${store.apiUrl}/api/update_class_name`;
 
   const formData = new FormData();
   for (const key in course) {
@@ -1099,7 +1101,7 @@ async function closeClass(id) {
   console.log("close id", id);
   console.log("token", token);
 
-  let url = `https://cmm.ai:8088/api/close_class?class_name_id=${id}&access_token=${token}`;
+  let url = `${store.apiUrl}/api/close_class?class_name_id=${id}&access_token=${token}`;
 
   try {
     const response = await axios.post(url);

+ 16 - 8
src/views/User/Dashboard.vue

@@ -1,29 +1,37 @@
 <script setup>
-import { ref, reactive, computed, onMounted } from "vue";
+import { ref, computed, onMounted } from "vue";
+import { useRouter } from "vue-router";
 import { useMainStore } from "@/stores/store";
 // import axios from "axios";
 import Navbar from "@/components/Navbar.vue";
 
+const router = useRouter();
 const store = useMainStore();
-// let token = localStorage.getItem("token");
 let username = ref("");
 
 onMounted(async () => {
   // await store.getProfile();
   // username.value = store.profile.username;
 
-  // console.log("MOCProfile:", store.mocProfile);
-
-    await store.getMocProfile();
-    console.log("MOCProfile:", store.mocProfile);
+  await store.getMocProfile();
+  if (Object.keys(store.mocProfile).length === 0) {
+    console.log("無 MocProfile");
+    router.push("/");
+  } else {
     username.value = store.mocProfile.NAME;
-
+  }
+  console.log(
+    "Object.keys(store.mocProfile).length",
+    Object.keys(store.mocProfile).length
+  );
+  console.log("MOCProfile:", store.mocProfile);
+  // username.value = store.mocProfile.NAME;
 });
 
 // (async () => {
 //   try {
 //     const response = await axios.get(
-//       `https://cmm.ai:8088/api/information?token=${token}`
+//       `${store.apiUrl}/api/information?token=${token}`
 //     );
 //     console.log("response", response.data.msg);
 //     if (!response.data.msg) {

+ 1 - 1
src/views/User/FavoriteClass.vue

@@ -20,7 +20,7 @@ async function getFavoriteClass() {
   try {
     const response = await axios.get(
       // `${store.apiUrl}/api/get_favorite_class?access_token=${token}`
-      `https://cmm.ai:8088/api/get_favorite_class?access_token=${token}`
+      `${store.apiUrl}/api/get_favorite_class?access_token=${token}`
     );
     console.log(
       "response.data.favorite_courses",

+ 11 - 3
src/views/User/Passport.vue

@@ -29,7 +29,7 @@ console.log("profile", store.profile);
 async function getRegistration() {
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_registration?access_token=${token}`
+      `${store.apiUrl}/api/get_registration?access_token=${token}`
     );
     data.list = response.data.registrations;
     register.list = response.data.registrations;
@@ -42,11 +42,15 @@ async function getRegistration() {
 getRegistration();
 
 async function getRecord() {
+  await store.getProfile();
+  let userId = store.profile.id;
+  console.log("store.profile", store.profile);
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_attend_record?user_id=${userId}`
+      `${store.apiUrl}/api/get_attend_record?user_id=${userId}`
     );
     records.list = response.data.attend_record_list;
+    records.list.reverse();
     console.log("上課紀錄", records.list);
   } catch (error) {
     console.error(error);
@@ -199,7 +203,11 @@ function selectTag(btn) {
               </tr> -->
               <tr v-for="(item, index) in data.list" :key="index">
                 <td v-if="item.create_time">
-                  {{ moment(`${item.create_time}`).format("YYYY/MM/DD") }}
+                  {{
+                    moment(`${item.create_time}`)
+                      .utcOffset(0)
+                      .format("YYYY/MM/DD")
+                  }}
                 </td>
                 <td>{{ item.class_name }}</td>
                 <td>

+ 4 - 4
src/views/User/Profile.vue

@@ -62,7 +62,7 @@ async function saveUserInfo() {
 async function addUserInfo(formData) {
   try {
     const response = await axios.post(
-      `https://cmm.ai:8088/api/input_information?access_token=${token}`,
+      `${store.apiUrl}/api/input_information?access_token=${token}`,
       formData
     );
     console.log("新增 response", response);
@@ -89,7 +89,7 @@ async function updateUserInfo(formData) {
   try {
     console.log("try");
     const response = await axios.post(
-      `https://cmm.ai:8088/api/update_information?access_token=${token}`,
+      `${store.apiUrl}/api/update_information?access_token=${token}`,
       formData
     );
     console.log("更新 response", response);
@@ -179,7 +179,7 @@ async function getUserInfo() {
     // console.log("取得使用者資料", response);
 
     // const response = await axios.get(
-    //   `https://cmm.ai:8088/api/get_user_information?access_token=${token}`
+    //   `${store.apiUrl}/api/get_user_information?access_token=${token}`
     // );
     // console.log("getUserInfo response", response);
     // console.log("response.data.msg", response.data.msg);
@@ -224,7 +224,7 @@ let resume = reactive({
   let token = localStorage.getItem("token");
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_user_resume?access_token=${token}`
+      `${store.apiUrl}/api/get_user_resume?access_token=${token}`
     );
     console.log("工藝教育者", response.data.user_resume);
 

+ 1 - 1
src/views/User/Proposal.vue

@@ -35,7 +35,7 @@ watch(pageNum, () => {
 // 取得提案
 async function getSchool() {
   let token = store.token;
-  let url = `https://cmm.ai:8088/api/get_school?access_token=${token}&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
+  let url = `${store.apiUrl}/api/get_school?access_token=${token}&page_num=${pageNum.value}&page_amount=${pageAmount.value}`;
   try {
     let response = await axios.get(url);
     proposal.list = response.data.schools;

+ 1 - 1
src/views/User/Setting.vue

@@ -18,7 +18,7 @@ let token = store.token;
 async function getFavoriteClass() {
   try {
     const response = await axios.get(
-      `https://cmm.ai:8088/api/get_favorite_class?access_token=${token}`
+      `${store.apiUrl}/api/get_favorite_class?access_token=${token}`
     );
     console.log(
       "response.data.favorite_courses",

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels