修改密码、管理员删帖、促销、退出登录
Change-Id: I2cc0e211ac5a04f9e89d0736fadd25541a5fccb9
diff --git a/src/pages/PromotionsPage/PromotionsPage.jsx b/src/pages/PromotionsPage/PromotionsPage.jsx
index 834ad73..ff01ef3 100644
--- a/src/pages/PromotionsPage/PromotionsPage.jsx
+++ b/src/pages/PromotionsPage/PromotionsPage.jsx
@@ -1,435 +1,435 @@
-import React, { useState, useEffect } from 'react';
-import './PromotionsPage.css';
+// 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);
+// 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 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()
- });
+// 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('获取促销活动失败');
- }
+// 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 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()
- });
+// const fetchPromotionDetails = async (promoId) => {
+// setIsLoading(true);
+// try {
+// const response = await fetch(`/promotions/${promoId}`, {
+// headers: getAuthHeaders()
+// });
- if (!response.ok) {
- throw new Error('获取促销详情失败');
- }
+// 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 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;
- }
+// const createPromotion = async () => {
+// if (!formData.name || !formData.pStartTime || !formData.pEndTime) {
+// alert('请填写完整活动信息');
+// return;
+// }
- if (new Date(formData.pStartTime) >= new Date(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)
- });
+// setIsLoading(true);
+// try {
+// const response = await fetch('/promotions/add', {
+// method: 'POST',
+// headers: getAuthHeaders(),
+// body: JSON.stringify(formData)
+// });
- if (!response.ok) {
- throw new Error('创建促销活动失败');
- }
+// 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 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;
- }
+// const deletePromotion = async (promoId) => {
+// if (!window.confirm('确定要删除这个促销活动吗?')) {
+// return;
+// }
- setIsLoading(true);
- try {
- const response = await fetch(`/promotions/delete/${promoId}`, {
- method: 'DELETE',
- headers: getAuthHeaders()
- });
+// setIsLoading(true);
+// try {
+// const response = await fetch(`/promotions/delete/${promoId}`, {
+// method: 'DELETE',
+// headers: getAuthHeaders()
+// });
- if (!response.ok) {
- throw new Error('删除促销活动失败');
- }
+// 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 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');
- };
+// const checkAdminStatus = () => {
+// const role = localStorage.getItem('role');
+// setIsAdmin(role === 'admin');
+// };
- useEffect(() => {
- checkAdminStatus();
- fetchPromotions();
- }, []);
+// 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 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 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 '普通';
- };
+// 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>
+// 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>
- )}
+// {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>
+// {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-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-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-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-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-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>
+// <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>
- )}
+// <button
+// className="submit-button"
+// onClick={createPromotion}
+// disabled={isLoading}
+// >
+// {isLoading ? '创建中...' : '提交创建'}
+// </button>
+// </div>
+// )}
- {error && <div className="error-message">{error}</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>
- )}
+// <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>
+// {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>
- );
-}
+// {/* 促销活动详情 */}
+// <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;
\ No newline at end of file
+// export default PromotionsPage;
\ No newline at end of file