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 已清空。`);
}
留言