top of page

Wix 網頁設計 - deliveryDate_googlesheet

  • 作家相片: 作 振
    作 振
  • 2025年6月13日
  • 讀畢需時 3 分鐘
// backend/googleSheet.jsw
import { fetch } from 'wix-fetch';
import wixData from 'wix-data';

// 替換為你在 Apps Script 部署後獲得的 Web App URL
const GOOGLE_APPS_SCRIPT_WEB_APP_URL = '您google Apps Script API的地方'; 
// >>>>> 這是我們的新測試函式 <<<<<
// export function basicTestFunction() {
//   console.log("Hello from basicTestFunction in backend!");
//   return "Backend is reachable and function is callable!";
// }
// export async function syncDataFromGoogleSheetToCms() {
//     console.log("syncDataFromGoogleSheetToCms was called!"); // 新增這行來確認
//     return { success: true, message: "這是來自後端測試函式的成功訊息!" };
// }




// 從 Google Sheet 讀取資料並更新 Wix CMS Collection
export async function syncDataFromGoogleSheetToCms() {
  try {
    const response = await fetch(GOOGLE_APPS_SCRIPT_WEB_APP_URL, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json'
      }
    });
    console.log("我的response是: ", response)
    if (response.ok) {
      const result = await response.json();
      if (result.success && result.data) {
        const googleSheetData = result.data;
        console.log("從 Google Sheet 獲取的資料:", googleSheetData);

        // ====== 將資料同步到 Wix CMS Collection ======
        // 假設你的 CMS Collection 名稱是 'MyDataCollection'
        // 並且欄位名稱與 Google Sheet 標題一致 (日期, 數量, 備註)
        const collectionName = 'ShippingDates';

        // 清空現有 Collection (或根據需求更新/插入)
        // 這裡為了教學目的,簡單地清空並重新插入
        // 在實際應用中,你可能需要更複雜的邏輯來判斷是更新還是插入
        await deleteAllItemsFromCollection(collectionName); // 清空現有數據

        const itemsToInsert = googleSheetData.map(item => {
          const dateString = item['預約日期']; // 已經是 "yyyy/MM/dd" 格式的字串
          const numberValue = item['可預約數量']; // 已經是數字

          // 組合成你想要的文字串,賦值給 'title' 屬性
          const combinedTitle = `${dateString}, 尚餘預約數量 ${numberValue}`;

          return {
            // Wix CMS 的第一欄 (Title) 會自動顯示 'title' 屬性的值
            title: combinedTitle, 
            date: dateString,       // 保留原始的日期字串字段
            number: numberValue,     // 保留原始的數量字段
            Notes: item['備註']      // 保留備註字段
          };
        });

        console.log('從googlesheet與wix 對應的資料: ', itemsToInsert)

        const insertPromises = itemsToInsert.map(item => wixData.insert(collectionName, item));
        await Promise.all(insertPromises);

        console.log(`成功將 ${itemsToInsert.length} 條數據同步到 ${collectionName} Collection。`);
        return { success: true, message: `成功同步 ${itemsToInsert.length} 條數據。` };

      } else {
        console.error("Google Apps Script 返回錯誤或無數據:", result.error);
        return { success: false, message: result.error || '從 Google Apps Script 獲取數據失敗。' };
      }
    } else {
      console.error("從 Google Apps Script 獲取數據失敗,狀態碼:", response.status);
      return { success: false, message: `API 請求失敗,狀態碼:${response.status}` };
    }
  } catch (error) {
    console.error("同步數據時發生錯誤:", error);
    return { success: false, message: `同步錯誤:${error.message}` };
  }
}

// // 將資料從 Wix CMS Collection 寫入 Google Sheet (新增一條數據)
export async function addDataToGoogleSheet(itemData) {
  try {
    const response = await fetch(GOOGLE_APPS_SCRIPT_WEB_APP_URL, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(itemData) // 發送要寫入的數據
    });

    if (response.ok) {
      const result = await response.json();
      if (result.success) {
        console.log("成功將資料寫入 Google Sheet:", result.message);
        return { success: true, message: result.message };
      } else {
        console.error("Google Apps Script 返回錯誤:", result.error);
        return { success: false, message: result.error || '寫入 Google Sheet 失敗。' };
      }
    } else {
      console.error("寫入 Google Sheet 失敗,狀態碼:", response.status);
      return { success: false, message: `API 請求失敗,狀態碼:${response.status}` };
    }
  } catch (error) {
    console.error("寫入數據時發生錯誤:", error);
    return { success: false, message: `寫入錯誤:${error.message}` };
  }
}

// // 輔助函式:清空 Collection 中的所有項目
async function deleteAllItemsFromCollection(collectionName) {
  console.log(`正在清空 ${collectionName} Collection...`);
  let queryResult = await wixData.query(collectionName).limit(1000).find(); // 限制查詢結果數量
  while (queryResult.items.length > 0) {
    const deletePromises = queryResult.items.map(item => wixData.remove(collectionName, item._id));
    await Promise.all(deletePromises);
    queryResult = await wixData.query(collectionName).limit(1000).find(); // 再次查詢,直到沒有項目
  }
  console.log(`${collectionName} Collection 已清空。`);
}

最新文章

查看全部
Wix 網頁設計 - mailgunService.jsw

// backend/mailgunService.jsw // 導入 Wix Velo 內建的 fetch API,用於發送 HTTP 請求 import { fetch } from 'wix-fetch'; // 導入 Wix Secrets...

 
 
 
Wix 網頁設計 - event.js

// backend/events.jsw // 導入 Wix 資料庫模組,用於查詢和更新 CMS 集合 import wixData from 'wix-data'; // 從後端服務檔案導入您自定義的 Mailgun 郵件發送函數 import {...

 
 
 
Wix 網頁設計 - storeUtils

// backend/storeUtils.jsw import wixData from 'wix-data'; import { currentCart } from 'wix-ecom-backend'; import { authentication } from...

 
 
 

留言


創客爸爸.png

TRUNK DADDY

​歡迎訂閱

感謝你的訂閱,你將不會錯過任何一個最新的訊息

創客爸爸

© 2024 by TRUNKDADDY

bottom of page