125 lines
6.3 KiB
JavaScript
125 lines
6.3 KiB
JavaScript
// 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(`https://api.gter.net/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
|
||
ajaxGet(`/v2/api/forum/getQrcode?token=${item.value.token}`).then((res) => {
|
||
if (res.code != 200) return;
|
||
const data = res.data || {};
|
||
QRcode.value = data.url || "";
|
||
});
|
||
};
|
||
|
||
return { QRcode, showQRcode, copyLinkClick, collectClick, item, likeClick, isLogin, isLikeGif };
|
||
},
|
||
|
||
components: {
|
||
like,
|
||
},
|
||
|
||
template: `<div class="comment flexacenter" v-if="item?.commentreviews && !Array.isArray(item?.commentreviews)"> <img class="icon" :src="item?.commentreviews?.avatar" /> <div class="text one-line-display">{{ item?.commentreviews?.content || "[图]" }}</div></div><template v-if="item.comment_list?.length != 0"> <div class="comment flexacenter" style="margin-bottom: 15px" v-for="(item, index) in item.comment_list" :key="index"> <img class="icon" :src="item.avatar" /> <div class="text one-line-display">{{ item.content || "[图]" }}</div> </div></template><div class="bottom flexacenter"> <div class="bottom-item like flexacenter" @click="likeClick()" v-if="item?.type != 'tenement'"> <img v-if="item.is_like" class="icon" src="/img/like-red-icon.png" /> <img v-else class="icon" src="/img/like-icon.png" /> <div class="text">{{ item.likes || "赞" }}</div> </div> <div class="bottom-item flexacenter" @click="collectClick()"> <img v-if="item.is_collect" class="icon" src="/img/collect-golden.svg" /> <img v-else class="icon" src="/img/collect-gray.png" /> <div class="text">{{ item.collections || "收藏" }}</div> </div> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" src="/img/discuss-icon.png" /> <div class="text">{{ item.comments || "讨论" }}</div> </a> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" src="/img/bi-copper-icon.png" /> <div class="text">{{ item.coins || "投币" }}</div> </a> <div class="bottom-item share flexacenter"> <img class="icon" src="/img/share-gray.png" /> <div class="text">转发</div> <div class="share-box flexcenter"> <div class="share-item flexcenter" @click="copyLinkClick()"> <img class="share-icon" src="/img/copy-black-icon.png" /> <div class="text">复制链接</div> </div> <!-- 鼠标移入 加载二维码 --> <div class="share-item wenxin flexcenter" @mouseenter="showQRcode"> <img class="share-icon" src="/img/weixin-icon.png" /> <div class="text">微信转发</div> <div v-if="QRcode" class="QRcode-box flexcenter"> <img class="QRcode" :src="QRcode" /> <div class="text">微信扫码</div> </div> </div> </div> </div></div><like v-if="isLikeGif"></like>`,
|
||
});
|