// my-component.js // 引入全局 Vue 对象(因在 HTML 中通过 script 引入,Vue 已挂载到 window) const { defineComponent, ref, inject } = Vue; import { like } from "../like/like.js"; // 定义组件(直接使用模板) export const itemBottom = defineComponent({ name: "item-bottom", props: { itemdata: { type: Object, default: () => {}, }, }, setup(props) { let item = ref({ ...props.itemdata }); let isLogin = inject("isLogin"); let userInfoWin = inject("userInfoWin"); let realname = inject("realname"); let goLogin = inject("goLogin"); let openAttest = inject("openAttest"); let isLikeGif = ref(false); let cancelOperate = inject("cancelOperate"); const likeClick = () => { if (realname.value == 0 && userInfoWin.value?.uin > 0) { openAttest(); return; } if (!isLogin.value) { goLogin(); return; } const token = item.value.token || ""; if (["offer", "offer_summary", "interviewexperience"].includes(item.value["type"]) && item.value["is_like"]) { creationAlertBox("error", "不可取消点赞"); return; } ajax(`/v2/api/forum/postTopicLike`, { token, }) .then((res) => { if (res.code != 200) { creationAlertBox("error", res.message); return; } let data = res.data; creationAlertBox("success", res.message); item.value["is_like"] = data.status; item.value["likes"] = data.likes; if (data.status) { isLikeGif.value = true; setTimeout(() => (isLikeGif.value = false), 2000); } if (data.status == 0) cancelOperate("like", token); // wx.hideLoading(); }) .catch(() => {}); }; const collectClick = () => { if (!isLogin.value) { goLogin(); return; } const token = item.value.token || ""; ajax(`/v2/api/forum/postTopicCollect`, { token, }) .then((res) => { if (res.code != 200) { creationAlertBox("error", res.message); return; } const data = res.data || {}; item.value["is_collect"] = data.status; item.value["collections"] = data.collections; creationAlertBox("success", res.message); // 调用父组件的方法 if (data.status == 0) cancelOperate("collection", token); }) .catch((err) => { if (err?.code == 401) goLogin(); }); }; const copyLinkClick = () => { copyForumUid(`${location.origin}/details/${item.value.uniqid}`); }; let QRcode = ref(""); const showQRcode = () => { if (QRcode.value) return; // return ajaxGet(`/v2/api/forum/getQrcode?token=${item.value.token}`).then((res) => { if (res.code != 200) return; const data = res.data || {}; QRcode.value = data.url || ""; }); }; const share = () => { ajax(`/v2/api/forum/postTopicShare`, {token}); }; return { share, QRcode, showQRcode, copyLinkClick, collectClick, item, likeClick, isLogin, isLikeGif }; }, components: { like, }, template: `
{{ item?.commentreviews?.content || "[图]" }}
{{ item.likes || "赞" }}
{{ item.collections || "收藏" }}
{{ item.comments || "讨论" }}
{{ item.coins || "投币" }}
{{ item.shares || '转发'}}
`, });