| // import React, { useState, useEffect } from 'react'; |
| // import './PromotionsPage.css'; |
| |
| |
| // function PromotionsPage() { |
| // const [promotions, setPromotions] = useState([]); |
| // const [currentPromotion, setCurrentPromotion] = useState(null); |
| // const [isAdmin, setIsAdmin] = useState(false); |
| // const [isLoading, setIsLoading] = useState(false); |
| // const [error, setError] = useState(null); |
| // const [formData, setFormData] = useState({ |
| // name: '', |
| // uploadCoeff: 1, |
| // downloadCoeff: 1, |
| // timeRange: 0, |
| // criteria: 1, |
| // pStartTime: '', |
| // pEndTime: '' |
| // }); |
| // const [isCreating, setIsCreating] = useState(false); |
| // const [currentPage, setCurrentPage] = useState(1); |
| // const [perPage] = useState(10); |
| // const [totalPromotions, setTotalPromotions] = useState(0); |
| |
| // const getAuthHeaders = () => { |
| // const token = localStorage.getItem('token'); |
| // return { |
| // 'Authorization': token ? `Bearer ${token}` : '', |
| // 'Content-Type': 'application/json' |
| // }; |
| // }; |
| |
| // const fetchPromotions = async (page = 1) => { |
| // setIsLoading(true); |
| // try { |
| // const response = await fetch(`/promotions/list?page=${page}&per_page=${perPage}`, { |
| // headers: getAuthHeaders() |
| // }); |
| |
| // if (!response.ok) { |
| // throw new Error('获取促销活动失败'); |
| // } |
| |
| // const data = await response.json(); |
| // if (data.code === 0 && data.result) { |
| // setPromotions(data.rows || []); |
| // setTotalPromotions(data.total || 0); |
| // } else { |
| // throw new Error(data.msg || '获取促销活动失败'); |
| // } |
| // } catch (err) { |
| // console.error('获取促销活动错误:', err); |
| // setError(err.message); |
| // } finally { |
| // setIsLoading(false); |
| // } |
| // }; |
| |
| // const fetchPromotionDetails = async (promoId) => { |
| // setIsLoading(true); |
| // try { |
| // const response = await fetch(`/promotions/${promoId}`, { |
| // headers: getAuthHeaders() |
| // }); |
| |
| // if (!response.ok) { |
| // throw new Error('获取促销详情失败'); |
| // } |
| |
| // const data = await response.json(); |
| // if (data.code === 0 && data.result) { |
| // setCurrentPromotion(data.rows); |
| // } else { |
| // throw new Error(data.msg || '获取促销详情失败'); |
| // } |
| // } catch (err) { |
| // console.error('获取促销详情错误:', err); |
| // setError(err.message); |
| // } finally { |
| // setIsLoading(false); |
| // } |
| // }; |
| |
| // const createPromotion = async () => { |
| // if (!formData.name || !formData.pStartTime || !formData.pEndTime) { |
| // alert('请填写完整活动信息'); |
| // return; |
| // } |
| |
| // if (new Date(formData.pStartTime) >= new Date(formData.pEndTime)) { |
| // alert('活动时间设置不正确,请重新设定'); |
| // return; |
| // } |
| |
| // setIsLoading(true); |
| // try { |
| // const response = await fetch('/promotions/add', { |
| // method: 'POST', |
| // headers: getAuthHeaders(), |
| // body: JSON.stringify(formData) |
| // }); |
| |
| // if (!response.ok) { |
| // throw new Error('创建促销活动失败'); |
| // } |
| |
| // const data = await response.json(); |
| // if (data.code === 0 && data.result) { |
| // alert(`活动创建成功!活动ID: ${data.msg}`); |
| // setIsCreating(false); |
| // setFormData({ |
| // name: '', |
| // uploadCoeff: 1, |
| // downloadCoeff: 1, |
| // timeRange: 0, |
| // criteria: 1, |
| // pStartTime: '', |
| // pEndTime: '' |
| // }); |
| // fetchPromotions(); |
| // } else { |
| // throw new Error(data.msg || '创建促销活动失败'); |
| // } |
| // } catch (err) { |
| // console.error('创建促销活动错误:', err); |
| // alert(err.message); |
| // } finally { |
| // setIsLoading(false); |
| // } |
| // }; |
| |
| // const deletePromotion = async (promoId) => { |
| // if (!window.confirm('确定要删除这个促销活动吗?')) { |
| // return; |
| // } |
| |
| // setIsLoading(true); |
| // try { |
| // const response = await fetch(`/promotions/delete/${promoId}`, { |
| // method: 'DELETE', |
| // headers: getAuthHeaders() |
| // }); |
| |
| // if (!response.ok) { |
| // throw new Error('删除促销活动失败'); |
| // } |
| |
| // const data = await response.json(); |
| // if (data.code === 0 && data.result) { |
| // alert('促销活动删除成功'); |
| // fetchPromotions(); |
| // if (currentPromotion && currentPromotion.promoId === promoId) { |
| // setCurrentPromotion(null); |
| // } |
| // } else { |
| // throw new Error(data.msg || '删除促销活动失败'); |
| // } |
| // } catch (err) { |
| // console.error('删除促销活动错误:', err); |
| // alert(err.message); |
| // } finally { |
| // setIsLoading(false); |
| // } |
| // }; |
| |
| // const checkAdminStatus = () => { |
| // const role = localStorage.getItem('role'); |
| // setIsAdmin(role === 'admin'); |
| // }; |
| |
| // useEffect(() => { |
| // checkAdminStatus(); |
| // fetchPromotions(); |
| // }, []); |
| |
| // const handleInputChange = (e) => { |
| // const { name, value } = e.target; |
| // setFormData(prev => ({ |
| // ...prev, |
| // [name]: name === 'uploadCoeff' || name === 'downloadCoeff' || name === 'timeRange' || name === 'criteria' |
| // ? parseFloat(value) |
| // : value |
| // })); |
| // }; |
| |
| // const handlePageChange = (newPage) => { |
| // setCurrentPage(newPage); |
| // fetchPromotions(newPage); |
| // }; |
| |
| // const getPromotionType = (promo) => { |
| // if (promo.downloadCoeff === 0 && promo.uploadCoeff > 1) { |
| // return '免费'; |
| // } else if (promo.downloadCoeff < 1 && promo.uploadCoeff > 1) { |
| // return '折扣+上传奖励'; |
| // } else if (promo.downloadCoeff < 1) { |
| // return '折扣'; |
| // } else if (promo.uploadCoeff > 1) { |
| // return '上传奖励'; |
| // } |
| // return '普通'; |
| // }; |
| |
| // return ( |
| // <div className="promotions-page"> |
| // <div className="promotions-container"> |
| // <h1>促销活动</h1> |
| |
| // {isAdmin && ( |
| // <div className="admin-actions"> |
| // <button |
| // className="create-button" |
| // onClick={() => setIsCreating(!isCreating)} |
| // > |
| // {isCreating ? '取消创建' : '创建新活动'} |
| // </button> |
| // </div> |
| // )} |
| |
| // {isCreating && isAdmin && ( |
| // <div className="create-promotion-form"> |
| // <h2>创建新促销活动</h2> |
| // <div className="form-group"> |
| // <label>活动名称</label> |
| // <input |
| // type="text" |
| // name="name" |
| // value={formData.name} |
| // onChange={handleInputChange} |
| // placeholder="例如: 春节特惠" |
| // /> |
| // </div> |
| |
| // <div className="form-row"> |
| // <div className="form-group"> |
| // <label>上传量系数</label> |
| // <input |
| // type="number" |
| // name="uploadCoeff" |
| // min="0" |
| // step="0.1" |
| // value={formData.uploadCoeff} |
| // onChange={handleInputChange} |
| // /> |
| // </div> |
| |
| // <div className="form-group"> |
| // <label>下载量系数</label> |
| // <input |
| // type="number" |
| // name="downloadCoeff" |
| // min="0" |
| // step="0.1" |
| // value={formData.downloadCoeff} |
| // onChange={handleInputChange} |
| // /> |
| // </div> |
| // </div> |
| |
| // <div className="form-row"> |
| // <div className="form-group"> |
| // <label>资源时间范围</label> |
| // <select |
| // name="timeRange" |
| // value={formData.timeRange} |
| // onChange={handleInputChange} |
| // > |
| // <option value="0">全站资源</option> |
| // <option value="1">当天上传</option> |
| // <option value="2">最近两天</option> |
| // <option value="7">最近一周</option> |
| // <option value="30">最近一个月</option> |
| // </select> |
| // </div> |
| |
| // <div className="form-group"> |
| // <label>最低用户等级</label> |
| // <input |
| // type="number" |
| // name="criteria" |
| // min="1" |
| // value={formData.criteria} |
| // onChange={handleInputChange} |
| // /> |
| // </div> |
| // </div> |
| |
| // <div className="form-row"> |
| // <div className="form-group"> |
| // <label>开始时间</label> |
| // <input |
| // type="datetime-local" |
| // name="pStartTime" |
| // value={formData.pStartTime} |
| // onChange={handleInputChange} |
| // /> |
| // </div> |
| |
| // <div className="form-group"> |
| // <label>结束时间</label> |
| // <input |
| // type="datetime-local" |
| // name="pEndTime" |
| // value={formData.pEndTime} |
| // onChange={handleInputChange} |
| // /> |
| // </div> |
| // </div> |
| |
| // <button |
| // className="submit-button" |
| // onClick={createPromotion} |
| // disabled={isLoading} |
| // > |
| // {isLoading ? '创建中...' : '提交创建'} |
| // </button> |
| // </div> |
| // )} |
| |
| // {error && <div className="error-message">{error}</div>} |
| |
| // <div className="promotions-grid"> |
| // {/* 促销活动列表 */} |
| // <div className="promotions-list"> |
| // <h2>当前促销活动</h2> |
| // {isLoading && promotions.length === 0 ? ( |
| // <div className="loading">加载中...</div> |
| // ) : promotions.length === 0 ? ( |
| // <div className="no-promotions">暂无促销活动</div> |
| // ) : ( |
| // <div className="promotion-items"> |
| // {promotions.map(promo => ( |
| // <div |
| // key={promo.promoId} |
| // className={`promotion-item ${currentPromotion && currentPromotion.promoId === promo.promoId ? 'active' : ''}`} |
| // onClick={() => fetchPromotionDetails(promo.promoId)} |
| // > |
| // <div className="promotion-header"> |
| // <h3>{promo.name}</h3> |
| // <span className="promotion-type">{getPromotionType(promo)}</span> |
| // </div> |
| // <div className="promotion-dates"> |
| // {new Date(promo.pStartTime).toLocaleString()} - {new Date(promo.pEndTime).toLocaleString()} |
| // </div> |
| // <div className="promotion-coeffs"> |
| // <span>上传: {promo.uploadCoeff}x</span> |
| // <span>下载: {promo.downloadCoeff}x</span> |
| // </div> |
| // {isAdmin && ( |
| // <button |
| // className="delete-button" |
| // onClick={(e) => { |
| // e.stopPropagation(); |
| // deletePromotion(promo.promoId); |
| // }} |
| // disabled={isLoading} |
| // > |
| // 删除 |
| // </button> |
| // )} |
| // </div> |
| // ))} |
| // </div> |
| // )} |
| |
| // {totalPromotions > perPage && ( |
| // <div className="pagination"> |
| // <button |
| // disabled={currentPage === 1} |
| // onClick={() => handlePageChange(currentPage - 1)} |
| // > |
| // 上一页 |
| // </button> |
| // <span>第 {currentPage} 页</span> |
| // <button |
| // disabled={currentPage * perPage >= totalPromotions} |
| // onClick={() => handlePageChange(currentPage + 1)} |
| // > |
| // 下一页 |
| // </button> |
| // </div> |
| // )} |
| // </div> |
| |
| // {/* 促销活动详情 */} |
| // <div className="promotion-details"> |
| // {currentPromotion ? ( |
| // <> |
| // <h2>{currentPromotion.name}</h2> |
| // <div className="detail-item"> |
| // <label>活动ID:</label> |
| // <span>{currentPromotion.promoId}</span> |
| // </div> |
| // <div className="detail-item"> |
| // <label>活动时间:</label> |
| // <span> |
| // {new Date(currentPromotion.pStartTime).toLocaleString()} - {new Date(currentPromotion.pEndTime).toLocaleString()} |
| // </span> |
| // </div> |
| // <div className="detail-item"> |
| // <label>促销类型:</label> |
| // <span>{getPromotionType(currentPromotion)}</span> |
| // </div> |
| // <div className="detail-item"> |
| // <label>上传量系数:</label> |
| // <span>{currentPromotion.uploadCoeff}x</span> |
| // </div> |
| // <div className="detail-item"> |
| // <label>下载量系数:</label> |
| // <span>{currentPromotion.downloadCoeff}x</span> |
| // </div> |
| // <div className="detail-item"> |
| // <label>适用资源:</label> |
| // <span> |
| // {currentPromotion.timeRange === 0 |
| // ? '全站资源' |
| // : `最近${currentPromotion.timeRange}天内上传的资源`} |
| // </span> |
| // </div> |
| // <div className="detail-item"> |
| // <label>参与条件:</label> |
| // <span>用户等级 ≥ {currentPromotion.criteria}</span> |
| // </div> |
| // </> |
| // ) : ( |
| // <div className="no-selection">请从左侧选择一个促销活动查看详情</div> |
| // )} |
| // </div> |
| // </div> |
| // </div> |
| // </div> |
| // ); |
| // } |
| |
| // export default PromotionsPage; |