feat: 添加新图片资源及更新组件样式与功能
style: 调整CSS样式及优化布局 refactor: 重构组件逻辑及API调用 fix: 修复路径引用及图片加载问题 docs: 更新注释及文档内容
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// my-component.js
|
||||
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入,Vue 已挂载到 window)
|
||||
const { defineComponent, ref, provide, onMounted } = Vue;
|
||||
const { defineComponent, ref, provide, onMounted, inject } = Vue;
|
||||
import { report } from "../report/report.js";
|
||||
|
||||
// 定义组件(直接使用模板)
|
||||
@@ -11,6 +11,11 @@ export const itemHead = defineComponent({
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
|
||||
page: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
},
|
||||
|
||||
setup(props) {
|
||||
@@ -89,20 +94,24 @@ export const itemHead = defineComponent({
|
||||
});
|
||||
};
|
||||
|
||||
// let cancelOperate = inject("cancelOperate");
|
||||
|
||||
// let handleDelete = inject("handleDelete");
|
||||
let itemHead = ref(null);
|
||||
// 删除
|
||||
const deleteItem = () => {
|
||||
const target = item.value;
|
||||
console.log("deleteItem");
|
||||
console.log("deleteItem", target, target.token);
|
||||
managerDelete(target.token)
|
||||
.then(() => {
|
||||
const targetNode = itemHead.value;
|
||||
if (!targetNode) return;
|
||||
|
||||
// managerDelete(target.token)
|
||||
// .then(() => {
|
||||
// cancelOperate("like", token);
|
||||
// })
|
||||
// .finally(() => {
|
||||
// cutShow();
|
||||
// });
|
||||
const parentItemBox = targetNode.parentElement;
|
||||
if (parentItemBox?.classList.contains("item-box")) parentItemBox.style.display = "none";
|
||||
|
||||
})
|
||||
.finally(() => {
|
||||
cutShow();
|
||||
});
|
||||
};
|
||||
|
||||
// 编辑
|
||||
@@ -116,12 +125,44 @@ export const itemHead = defineComponent({
|
||||
redirectToExternalWebsite(`/space?uin=${uin}&uid=${uid}`);
|
||||
};
|
||||
|
||||
return { edit, deleteItem, goPersonalHomepage, reportState, cutShow, show, item, timestamp, sectionn, tags, ismanager, report, hide, recommend, essence };
|
||||
const openedit = (type) => {
|
||||
let url = ``;
|
||||
if (type == "offer") url = `https://offer.gter.net/post/modify?id=${item.value.token}`;
|
||||
else if (type == "offer_summary") url = `https://offer.gter.net/post/summary`;
|
||||
redirectToExternalWebsite(url);
|
||||
};
|
||||
|
||||
const anonymousState = ref(false);
|
||||
const cutAnonymous = () => {
|
||||
anonymousState.value = !anonymousState.value;
|
||||
};
|
||||
|
||||
const cutAnonymousState = (state) => {
|
||||
console.log("state", state);
|
||||
const target = item.value;
|
||||
ajax("/v2/api/forum/postTopicAnonymousStatus", {
|
||||
token: target.token,
|
||||
anonymous: state,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log("res", res);
|
||||
if (res.code != 200) return;
|
||||
const data = res.data || {};
|
||||
target.anonymous = data.anonymous || 0;
|
||||
item.value = target;
|
||||
creationAlertBox("success", res.message || "操作成功");
|
||||
})
|
||||
.finally(() => {
|
||||
cutAnonymous();
|
||||
});
|
||||
};
|
||||
|
||||
return { itemHead, cutAnonymousState, cutAnonymous, anonymousState, openedit, edit, deleteItem, goPersonalHomepage, reportState, cutShow, show, item, timestamp, sectionn, tags, ismanager, report, hide, recommend, essence };
|
||||
},
|
||||
|
||||
components: {
|
||||
report,
|
||||
},
|
||||
|
||||
template: `<div class="item-head flexacenter"> <div class="user-box flexacenter" @click="goPersonalHomepage(item?.user?.uin, item?.user?.uid)"> <img class="avatar" :src="item?.user?.avatar || item.avatar" /> <div class="name">{{ item?.user?.nickname || item.nickname || "匿名用户" }}</div> <img class="group" v-if="info?.group?.image" :src="info?.group?.image" /> </div> <div class="time">{{ timestamp }}</div> <div class="flex1"></div> <div class="view flexacenter"> <img class="icon" src="/img/eye-icon.svg" /> <div class="text">{{ item.views }}</div> </div> <div v-if="item.type != 'tenement'" class="btn flexcenter" @click.stop="cutShow"> <img class="icon" src="/img/dot-dot-dot-gray.png" /> </div> <div v-if="show"> <div class="mask" @click.stop="cutShow"></div> <div class="operate"> <div class="item" @click.stop="report">举报</div> <template v-if="ismanager"> <div class="item" @click.stop="hide">{{ item.hidden == 0 ? "隐藏" : "显示" }}</div> <div class="item" @click.stop="recommend">{{ item.recommend == 1 ? "取消" : "" }}推荐</div> <div class="item" @click.stop="essence">{{ item.best == 1 ? "取消" : "" }}精华</div> </template> <template v-if="item.type == 'thread' && item.ismyself"> <div class="item" @click.stop="edit">编辑</div> <div class="item" @click.stop="deleteItem">删除</div> </template> </div> </div></div><div class="label flexflex" v-if="sectionn?.length || tags?.length || item.recommend == 1 || item.best == 1"> <img class="item icon" v-if="item.recommend == 1 && item.best != 1" src="/img/recommend-icon.png" /> <img class="item icon" v-if="item.best == 1" src="/img/essence-icon.png" /> <a class="item blue" v-for="(item, index) in sectionn" :key="item" :href="'/section/' + item.uniqid" target="_blank">{{ item.name }}</a> <a class="item" v-for="(item, index) in tags" :key="item" :href="'/tag/' + item" target="_blank">{{ item }}</a></div><report v-if="reportState" :itemdata="item"></report>`,
|
||||
template: `<div class="item-head flexacenter" ref="itemHead"> <div class="user-box flexacenter" @click="goPersonalHomepage(item?.user?.uin, item?.user?.uid)"> <img class="avatar" :src="item?.user?.avatar || item.avatar" /> <div class="name">{{ item?.user?.nickname || item.nickname || "匿名用户" }}</div> <img class="group" v-if="info?.group?.image" :src="info?.group?.image" /> </div> <div class="time">{{ timestamp }}</div> <div class="flex1"></div> <div class="circlePen flexcenter" @click="openedit(item.type)" v-if="page == 'edit' && (item.type == 'offer' || item.type == 'offer_summary')"> <img class="icon" src="/img/pen-icon.png" /> </div> <div class="flexacenter" style="position: relative;"> <div class="anonymous-box flexcenter" @click.stop="cutAnonymous" v-if="page == 'edit' && (item.type == 'vote' || item.type == 'interviewexperience')"> <span v-if="item.anonymous == 0">公开</span> <span v-else>匿名</span> </div> <!-- 是否 公开发表 --> <template v-if="anonymousState"> <div class="mask" @click.stop="cutAnonymous"></div> <div class="isPublicityBox"> <div class="isPublicity-item" :class="{'green': item.anonymous == 0}" @click.stop="cutAnonymousState(0)">公开发表 <img v-if="item.anonymous == 0" class="isPublicityIcon" src="/img/u1829.svg"></image> </div> <div class="isPublicity-item" :class="{'green': item.anonymous != 0}" @click.stop="cutAnonymousState(1)">匿名发表 <img v-if="item.anonymous != 0" class="isPublicityIcon" src="/img/u1829.svg"></image> </div> </div> </template> </div> <div class="view flexacenter"> <img class="icon" src="/img/eye-icon.svg" /> <div class="text">{{ item.views }}</div> </div> <div v-if="item.type != 'tenement'" class="btn flexcenter" @click.stop="cutShow"> <img class="icon" src="/img/dot-dot-dot-gray.png" /> </div> <div v-if="show"> <div class="mask" @click.stop="cutShow"></div> <div class="operate"> <div class="item" @click.stop="report">举报</div> <template v-if="ismanager"> <div class="item" @click.stop="hide">{{ item.hidden == 0 ? "隐藏" : "显示" }}</div> <div class="item" @click.stop="recommend">{{ item.recommend == 1 ? "取消" : "" }}推荐</div> <div class="item" @click.stop="essence">{{ item.best == 1 ? "取消" : "" }}精华</div> </template> <template v-if="item.type == 'thread' && item.ismyself"> <div class="item" @click.stop="edit">编辑</div> <div class="item" @click.stop="deleteItem">删除</div> </template> <div class="item" v-if="page == 'edit' && item.type == 'vote'" @click.stop="deleteItem">删除</div> </div> </div></div><div class="label flexflex" v-if="sectionn?.length || tags?.length || item.recommend == 1 || item.best == 1"> <img class="item icon" v-if="item.recommend == 1 && item.best != 1" src="/img/recommend-icon.png" /> <img class="item icon" v-if="item.best == 1" src="/img/essence-icon.png" /> <a class="item blue" v-for="(item, index) in sectionn" :key="item" :href="'/section/' + item.uniqid" target="_blank">{{ item.name }}</a> <a class="item" v-for="(item, index) in tags" :key="item" :href="'/tag/' + item" target="_blank">{{ item }}</a></div><report v-if="reportState" :itemdata="item"></report>`,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user