feat(Details): 新增投票详情页管理功能和评论优化
- 添加投票详情页的管理功能,包括隐藏、推荐、精华和删除操作 - 优化评论组件,支持多图上传和显示 - 新增投币功能组件 - 更新API接口调用方式,适配新后端接口 - 完善用户权限管理逻辑 - 修复样式问题和交互体验
This commit is contained in:
@@ -11,22 +11,26 @@ export const detailsHttp = (query) => {
|
||||
|
||||
// 详情数据 - 获取评论数据
|
||||
export const commentListHttp = (params) => {
|
||||
return Http.post("/api/comment/lists", params);
|
||||
// return Http.post("/api/comment/lists", params);
|
||||
return Http.get("https://api.gter.net/v2/api/forum/getCommentList", params);
|
||||
};
|
||||
|
||||
// 评论相关 - 评论点赞
|
||||
export const detailsLikeCommentHttp = (query) => {
|
||||
return Http.post("/api/comment/like", query);
|
||||
// return Http.post("/api/comment/like", query);
|
||||
return Http.post("https://api.gter.net/v2/api/forum/likeComment", query);
|
||||
};
|
||||
|
||||
// 详情数据 - 获取子评论数据
|
||||
export const detailsChildCommentListHttp = (query) => {
|
||||
return Http.post("/api/comment/childrenList", query);
|
||||
// return Http.post("/api/comment/childrenList", query);
|
||||
return Http.post("https://api.gter.net/v2/api/forum/childrenList", query);
|
||||
};
|
||||
|
||||
// 详情数据 - 提交评论
|
||||
export const detailsSubmitommentListHttp = (query) => {
|
||||
return Http.post("/api/comment/submit", query);
|
||||
// return Http.post("/api/comment/submit", query);
|
||||
return Http.postV2("https://api.gter.net/v2/api/forum/postComment", query);
|
||||
};
|
||||
|
||||
// 详情数据 - 提交评论
|
||||
@@ -56,12 +60,14 @@ export const deleteHttp = (query) => {
|
||||
|
||||
// 操作-点赞
|
||||
export const operateLikeHttp = (query) => {
|
||||
return Http.post("/api/operate/like", query);
|
||||
// return Http.post("/api/operate/like", query);
|
||||
return Http.post("https://api.gter.net/v2/api/forum/postTopicLike", query);
|
||||
};
|
||||
|
||||
// 数据操作 - 收藏
|
||||
export const operateCollectHttp = (query) => {
|
||||
return Http.post("/api/operate/collect", query);
|
||||
// return Http.post("/api/operate/collect", query);
|
||||
return Http.post("https://api.gter.net/v2/api/forum/postTopicCollect", query);
|
||||
};
|
||||
|
||||
// 数据操作 - 投票操作
|
||||
@@ -101,7 +107,8 @@ export const MyUserCollectHttp = (query) => {
|
||||
|
||||
// 评论相关 - 举报 Comment related
|
||||
export const commentReportHttp = (query) => {
|
||||
return Http.post("/api/comment/report", query);
|
||||
// return Http.post("/api/comment/report", query);
|
||||
return Http.postV2("https://api.gter.net/v2/api/forum/postTopicReport", query);
|
||||
};
|
||||
|
||||
// 回应相关 - 回应列表
|
||||
@@ -130,3 +137,28 @@ export const commonUploadConfigHttp = (query) => {
|
||||
export const commentDeleteHttp = (query) => {
|
||||
return Http.post("/api/comment/commentDelete", query);
|
||||
};
|
||||
|
||||
// 详情数据 - 投票详情
|
||||
export const topicDetailHttp = (query) => {
|
||||
return Http.get("https://api.gter.net/v2/api/forum/getTopicDetails", query);
|
||||
};
|
||||
|
||||
export const topicRecommendHttp = (query) => {
|
||||
return Http.post("https://api.gter.net/v2/api/forum/setTopicRecommend", query);
|
||||
};
|
||||
|
||||
export const topicEssenceHttp = (query) => {
|
||||
return Http.post("https://api.gter.net/v2/api/forum/setTopicBest", query);
|
||||
};
|
||||
|
||||
export const topicDeleteHttp = (query) => {
|
||||
return Http.del("https://api.gter.net/v2/api/forum/deleteTopic", query);
|
||||
};
|
||||
|
||||
export const topicHideHttp = (query) => {
|
||||
return Http.post("https://api.gter.net/v2/api/forum/setTopicHide", query);
|
||||
};
|
||||
|
||||
export const topicgetOperationHttp = (query) => {
|
||||
return Http.post("https://api.gter.net/v2/api/forum/getTopicOperation", query);
|
||||
};
|
||||
|
||||
@@ -1,115 +1,256 @@
|
||||
// 处理时间
|
||||
export const handleDate = (dateTimeStamp = new Date()) => {
|
||||
dateTimeStamp = dateTimeStamp ? dateTimeStamp : null
|
||||
if (!dateTimeStamp) return '刚刚'
|
||||
var timestamp = new Date(dateTimeStamp)
|
||||
timestamp = timestamp.getTime()
|
||||
var minute = 1000 * 60
|
||||
var hour = minute * 60
|
||||
var day = hour * 24
|
||||
var now = new Date().getTime()
|
||||
var diffValue = now - timestamp
|
||||
var result
|
||||
if (diffValue < 0) return
|
||||
dateTimeStamp = dateTimeStamp ? dateTimeStamp : null;
|
||||
if (!dateTimeStamp) return "刚刚";
|
||||
var timestamp = new Date(dateTimeStamp);
|
||||
timestamp = timestamp.getTime();
|
||||
var minute = 1000 * 60;
|
||||
var hour = minute * 60;
|
||||
var day = hour * 24;
|
||||
var now = new Date().getTime();
|
||||
var diffValue = now - timestamp;
|
||||
var result;
|
||||
if (diffValue < 0) return;
|
||||
|
||||
var dayC = diffValue / day
|
||||
var hourC = diffValue / (hour + 1)
|
||||
var minC = diffValue / minute
|
||||
var dayC = diffValue / day;
|
||||
var hourC = diffValue / (hour + 1);
|
||||
var minC = diffValue / minute;
|
||||
if (dayC >= 7) {
|
||||
let date = new Date(timestamp)
|
||||
let Y = date.getFullYear() + "-"
|
||||
let M = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) + "-"
|
||||
let D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " "
|
||||
let date = new Date(timestamp);
|
||||
let Y = date.getFullYear() + "-";
|
||||
let M = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) + "-";
|
||||
let D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " ";
|
||||
// let h = (date.getHours() < 10 ? "0" + date.getHours() : date.getHours()) + ":"
|
||||
// let m = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()
|
||||
result = "" + Y + M + D
|
||||
} else if (dayC >= 1) result = "" + Math.round(dayC) + "天前"
|
||||
else if (hourC >= 1) result = "" + Math.round(hourC) + "小时前"
|
||||
else if (minC >= 1) result = "" + Math.round(minC) + "分钟前"
|
||||
else result = "刚刚"
|
||||
result = "" + Y + M + D;
|
||||
} else if (dayC >= 1) result = "" + Math.round(dayC) + "天前";
|
||||
else if (hourC >= 1) result = "" + Math.round(hourC) + "小时前";
|
||||
else if (minC >= 1) result = "" + Math.round(minC) + "分钟前";
|
||||
else result = "刚刚";
|
||||
|
||||
return result
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
// 处理 截止时间
|
||||
export const handleDeadline = (dateTimeStamp = new Date()) => {
|
||||
if (typeof dateTimeStamp == "number") dateTimeStamp = dateTimeStamp ? dateTimeStamp * 1000 : null
|
||||
if (typeof dateTimeStamp == "number") dateTimeStamp = dateTimeStamp ? dateTimeStamp * 1000 : null;
|
||||
if (typeof dateTimeStamp == "string" && dateTimeStamp.match(/^\d{4}-\d{2}-\d{2}$/)) dateTimeStamp += " 23:59:59";
|
||||
|
||||
var timestamp = new Date(dateTimeStamp);
|
||||
timestamp = timestamp.getTime();
|
||||
var minute = 1000 * 60;
|
||||
var hour = minute * 60;
|
||||
var day = hour * 24;
|
||||
var now = new Date().getTime();
|
||||
var diffValue = timestamp - now;
|
||||
var result;
|
||||
if (diffValue < 0) return "投票已";
|
||||
|
||||
var timestamp = new Date(dateTimeStamp)
|
||||
timestamp = timestamp.getTime()
|
||||
var minute = 1000 * 60
|
||||
var hour = minute * 60
|
||||
var day = hour * 24
|
||||
var now = new Date().getTime()
|
||||
var diffValue = timestamp - now
|
||||
var result
|
||||
if (diffValue < 0) return "投票已"
|
||||
var dayC = diffValue / day;
|
||||
var hourC = diffValue / (hour + 1);
|
||||
var minC = diffValue / minute;
|
||||
if (dayC >= 1) result = "" + Math.round(dayC) + "天后";
|
||||
else if (hourC >= 1) result = "" + Math.round(hourC) + "小时后";
|
||||
else if (minC >= 1) result = "" + Math.round(minC) + "分钟后";
|
||||
|
||||
var dayC = diffValue / day
|
||||
var hourC = diffValue / (hour + 1)
|
||||
var minC = diffValue / minute
|
||||
if (dayC >= 1) result = "" + Math.round(dayC) + "天后"
|
||||
else if (hourC >= 1) result = "" + Math.round(hourC) + "小时后"
|
||||
else if (minC >= 1) result = "" + Math.round(minC) + "分钟后"
|
||||
|
||||
return result
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
export const timestampToDate = (timestamp) => {
|
||||
var date = new Date(timestamp);
|
||||
var year = date.getFullYear();
|
||||
var month = ("0" + (date.getMonth() + 1)).slice(-2); // Months are zero based. Add leading 0.
|
||||
var day = ("0" + date.getDate()).slice(-2); // Add leading 0.
|
||||
var day = ("0" + date.getDate()).slice(-2); // Add leading 0.
|
||||
return `${year}-${month}-${day}`;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// isblank 是否需要 新标签页 默认是新标签页
|
||||
export const goToURL = (url, isblank = true) => {
|
||||
if (typeof document !== "object") return
|
||||
if (typeof document !== "object") return;
|
||||
|
||||
let aTab = document.createElement('a')
|
||||
document.body.appendChild(aTab)
|
||||
aTab.setAttribute('href', url)
|
||||
if (isblank) aTab.setAttribute('target', "_blank")
|
||||
aTab.click()
|
||||
}
|
||||
let aTab = document.createElement("a");
|
||||
document.body.appendChild(aTab);
|
||||
aTab.setAttribute("href", url);
|
||||
if (isblank) aTab.setAttribute("target", "_blank");
|
||||
aTab.click();
|
||||
};
|
||||
|
||||
export const colourValue = [{
|
||||
main: "rgba(44, 186, 230, 1)",
|
||||
bg: "rgba(234, 245, 248, 1)",
|
||||
bc: "rgba(213, 235, 242, 1)",
|
||||
}, {
|
||||
main: "rgba(49, 215, 46, 1)",
|
||||
bg: "rgba(244, 247, 244, 1)",
|
||||
bc: "rgba(225, 244, 225, 1)",
|
||||
}, {
|
||||
main: "rgba(106, 117, 217, 1)",
|
||||
bg: "rgba(237, 238, 247, 1)",
|
||||
bc: "rgba(227, 228, 246, 1)",
|
||||
}, {
|
||||
main: "rgba(172, 183, 46, 1)",
|
||||
bg: "rgba(245, 246, 228, 1)",
|
||||
bc: "rgba(238, 238, 215, 1)",
|
||||
}, {
|
||||
main: "rgba(38, 223, 190, 1)",
|
||||
bg: "rgba(237, 247, 245, 1)",
|
||||
bc: "rgba(220, 244, 239, 1)",
|
||||
}, {
|
||||
main: "rgba(242, 122, 71, 1)",
|
||||
bg: "rgba(255, 244, 239, 1)",
|
||||
bc: "rgba(249, 231, 224, 1)",
|
||||
}]
|
||||
export const colourValue = [
|
||||
{
|
||||
main: "rgba(44, 186, 230, 1)",
|
||||
bg: "rgba(234, 245, 248, 1)",
|
||||
bc: "rgba(213, 235, 242, 1)",
|
||||
},
|
||||
{
|
||||
main: "rgba(49, 215, 46, 1)",
|
||||
bg: "rgba(244, 247, 244, 1)",
|
||||
bc: "rgba(225, 244, 225, 1)",
|
||||
},
|
||||
{
|
||||
main: "rgba(106, 117, 217, 1)",
|
||||
bg: "rgba(237, 238, 247, 1)",
|
||||
bc: "rgba(227, 228, 246, 1)",
|
||||
},
|
||||
{
|
||||
main: "rgba(172, 183, 46, 1)",
|
||||
bg: "rgba(245, 246, 228, 1)",
|
||||
bc: "rgba(238, 238, 215, 1)",
|
||||
},
|
||||
{
|
||||
main: "rgba(38, 223, 190, 1)",
|
||||
bg: "rgba(237, 247, 245, 1)",
|
||||
bc: "rgba(220, 244, 239, 1)",
|
||||
},
|
||||
{
|
||||
main: "rgba(242, 122, 71, 1)",
|
||||
bg: "rgba(255, 244, 239, 1)",
|
||||
bc: "rgba(249, 231, 224, 1)",
|
||||
},
|
||||
];
|
||||
|
||||
export const base62ToDecimal = base62 => {
|
||||
const base = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
let decimal = 0
|
||||
export const base62ToDecimal = (base62) => {
|
||||
const base = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
let decimal = 0;
|
||||
|
||||
for (let i = 0; i < base62.length; i++) {
|
||||
decimal += base.indexOf(base62[i]) * Math.pow(62, base62.length - i - 1)
|
||||
decimal += base.indexOf(base62[i]) * Math.pow(62, base62.length - i - 1);
|
||||
}
|
||||
|
||||
return decimal
|
||||
}
|
||||
return decimal;
|
||||
};
|
||||
|
||||
export const managerHide = (token, state, type = "offer") => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const obj = {
|
||||
offer: "Offer",
|
||||
offer_summary: "总结",
|
||||
interviewexperience: "面经",
|
||||
thread: "帖子",
|
||||
question: "帖子",
|
||||
vote: "投票",
|
||||
};
|
||||
|
||||
const isConfirmed = confirm(`确定要${state == 0 ? "隐藏" : "显示"}该${obj[type]}吗?`);
|
||||
if (isConfirmed) {
|
||||
topicHideHttp({
|
||||
token,
|
||||
hidden: Number(state !== 1),
|
||||
}).then((res) => {
|
||||
const data = res.data;
|
||||
creationAlertBox("success", res.message || "");
|
||||
resolve(data.hidden);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 推荐
|
||||
export const managerRecommend = (token, state) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const post = () => {
|
||||
topicRecommendHttp({
|
||||
token,
|
||||
recommend: state == 1 ? 0 : 1,
|
||||
}).then((res) => {
|
||||
const data = res.data;
|
||||
creationAlertBox("success", res.message || "");
|
||||
resolve(data.recommend);
|
||||
});
|
||||
};
|
||||
|
||||
if (state == 1) {
|
||||
const isConfirmed = confirm(`确定要取消推荐吗?`);
|
||||
if (isConfirmed) post();
|
||||
else resolve(state);
|
||||
} else post();
|
||||
});
|
||||
};
|
||||
|
||||
// 精华
|
||||
export const managerEssence = (token, state) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const post = () => {
|
||||
topicEssenceHttp({
|
||||
token,
|
||||
best: state == 1 ? 0 : 1,
|
||||
}).then((res) => {
|
||||
const data = res.data;
|
||||
creationAlertBox("success", res.message || "");
|
||||
resolve(data.best);
|
||||
});
|
||||
};
|
||||
|
||||
if (state == 1) {
|
||||
const isConfirmed = confirm(`确定要取消精华吗?`);
|
||||
if (isConfirmed) post();
|
||||
else resolve(state);
|
||||
} else post();
|
||||
});
|
||||
};
|
||||
|
||||
// 删除
|
||||
export const managerDelete = (token) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const post = () => {
|
||||
topicDeleteHttp({
|
||||
token,
|
||||
}).then((res) => {
|
||||
creationAlertBox("success", res.message || "");
|
||||
resolve();
|
||||
});
|
||||
};
|
||||
|
||||
const isConfirmed = confirm(`确定要删除吗?`);
|
||||
if (!isConfirmed) reject();
|
||||
else post();
|
||||
});
|
||||
};
|
||||
|
||||
export const strtimeago = (dateStr, type = 1) => {
|
||||
dateStr = dateStr + ""; // 反之传入的不是字符串
|
||||
dateStr = dateStr.replaceAll("-", "/"); // 修改格式
|
||||
var minute = 1000 * 60; // 把分,时,天,周,半个月,一个月用毫秒表示
|
||||
var hour = minute * 60;
|
||||
var day = hour * 24;
|
||||
var now = new Date().getTime(); // 获取当前时间毫秒
|
||||
let objectTime = new Date(dateStr).getTime();
|
||||
var diffValue = now - objectTime; // 时间差
|
||||
if (diffValue < 0) return "刚刚";
|
||||
|
||||
var minC = diffValue / minute; // 计算时间差的分,时,天,周,月
|
||||
var hourC = diffValue / hour;
|
||||
var dayC = diffValue / day;
|
||||
|
||||
const diffInMilliseconds = now - objectTime;
|
||||
const diffInYears = diffInMilliseconds / (1000 * 60 * 60 * 24 * 365);
|
||||
const diffInMonths = diffInYears * 12;
|
||||
|
||||
let result = "";
|
||||
if (dayC >= 7) {
|
||||
var datetime = new Date(dateStr);
|
||||
var Nyear = datetime.getFullYear();
|
||||
var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
|
||||
var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
|
||||
var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
|
||||
var Nmin = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
|
||||
if (type == 4) {
|
||||
if (new Date().getFullYear() !== Nyear) result = `${Nyear}年${Nmonth}月${Ndate}日`;
|
||||
else result = `${Nmonth}月${Ndate}日 ${Nhour}:${Nmin}`;
|
||||
}
|
||||
if (type == 1) result = Nyear + "-" + Nmonth + "-" + Ndate;
|
||||
if (type == 2) {
|
||||
result = `${Nmonth}月${Ndate}日 ${Nhour}:${Nmin}`;
|
||||
if (new Date().getFullYear() !== Nyear) result = `${Nyear}年${result}`;
|
||||
}
|
||||
if (type == 3) {
|
||||
if (diffInYears >= 1) result = Math.floor(diffInYears) + "年前";
|
||||
else if (diffInMonths >= 1) result = Math.floor(diffInMonths) + "个月前";
|
||||
else result = parseInt(dayC) + "天前";
|
||||
}
|
||||
} else if (dayC >= 1) result = parseInt(dayC) + "天前";
|
||||
else if (hourC >= 1 && hourC <= 24) result = parseInt(hourC) + "小时前";
|
||||
else if (minC >= 1 && minC <= 60) result = parseInt(minC) + "分钟前";
|
||||
else result = "刚刚";
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user