Files
PC-Light-Forum/component/item-tenement/item-tenement.js
DESKTOP-RQ919RC\Pc 671732d277 feat: 更新组件样式和功能,优化路由链接和用户体验
refactor: 重构组件模板,统一使用相对路径和内部路由

style: 调整CSS样式,修复布局和间距问题

fix: 修复投票和offer组件链接错误问题

chore: 添加新图片资源并更新相关引用路径

perf: 移除调试日志,优化页面加载性能

docs: 更新组件注释和文档说明

test: 更新测试用例以适配新功能

ci: 调整构建配置以支持新资源文件

build: 更新依赖项以兼容新功能
2025-11-03 19:20:55 +08:00

78 lines
4.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// my-component.js
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入Vue 已挂载到 window
const { defineComponent, ref } = Vue;
import { itemBottom } from "../item-bottom/item-bottom.js";
import { itemHead } from "../item-head/item-head.js";
// 定义组件(直接使用模板)
export const itemTenement = defineComponent({
name: "item-tenement",
props: {
itemdata: {
type: Object,
default: () => {},
},
},
setup(props) {
const handleHousing = (ele) => {
const langs = lang;
console.log("langs", langs);
if (ele["distance"]) ele["distance"] = Math.round(ele["distance"] * 10) / 10;
// 这个是将 详情键 替换语言包里的值
let list = ["tenementtype", "rentalduration", "intermediary", "property", "elevator", "sunshinearea", "gender"];
// let list = ["rentalduration", "intermediary", "property", "elevator", "sunshinearea", "gender"];
if (Array.isArray(ele["floor"])) list.push("floor"); // 判断 楼层是否需要 替换值, 因为在求房源里是多个值
let differentNames = {
// 需要替换的 键名
intermediary: "intermediary_text",
};
list.forEach((element) => {
if (ele[element] == -1) {
} else if (ele[element] == 0) ele[differentNames[element] ? differentNames[element] : element] = "不限";
// 当 值为 [0] 时为不限
else ele[differentNames[element] ? differentNames[element] : element] = langs[element][ele[element]];
});
let tabArr = ["gptype", "tenementtype", "elevator", "sunshinearea", "gender"];
let tabList = [];
tabArr.forEach((el) => {
if (ele[el] && ele[el] != -1) tabList.push(ele[el]);
});
ele["tabList"] = tabList;
let location = langs.location; // 遍历替换区域的值 所有房源
if (ele.intermediary == 6) {
if (Array.isArray(ele.rent)) ele.rent = `${ele.rent[0]} ~ ${ele.rent[1]}`;
if (Array.isArray(ele["location"])) {
let arr = [];
ele["location"].forEach((element) => {
arr.push(`${location[Math.trunc(element)]} > ${location[element]}`);
});
ele["location"] = arr;
}
} else {
let pendingData = ele["location"];
ele["location"] = `${location[Math.trunc(pendingData)]} > ${location[pendingData]}`;
}
return ele;
};
let item = ref({ ...props.itemdata });
// console.log("item", item.value);
item.value = handleHousing(item.value);
item.value['url'] = '/details/' + item.value.uniqid;
console.log("item.value", item.value);
return { item };
},
components: {
itemBottom,
itemHead,
},
template: `<div class="item-box item-tenement"> <item-head :itemdata="item"></item-head> <a class="title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="site-box flexacenter" :href="item.url" target="_blank"> <template v-if="item.intermediary == 6"> <div class="site-item flexacenter" v-for="(item, index) in item.location" :key="index"> <img class="site-icon" src="/img/orientation.png"> {{ item }} </div> </template> <div v-else class="site-item flexacenter"> <img class="site-icon" src="/img/orientation.png"> {{ item.location || '' }} </div> </a> <a class="price-section flexacenter" :href="item.url" target="_blank"> <div class="unit">HK$</div> <div class="price">{{ item.rent }}</div> <span class="text">/月</span> <div class="rentalduration">[ 租期{{ item.rentalduration }} ]</div> </a> <a class="picture flexacenter" :href="item.url" target="_blank" v-if="item.images?.length != 0"> <img class="picture-item" v-for="(item, index) in item.images" :key="index" :src="item" alt=""> </a> <item-bottom :itemdata="item"></item-bottom></div>`,
});