diff --git a/api/homeService.js b/api/homeService.js index 553af1e9..17fabfdf 100644 --- a/api/homeService.js +++ b/api/homeService.js @@ -1,6 +1,7 @@ export const apiArr = { // 到家服务 categoryList: "/api/v2/wechat/service/category/list", // 服务分类列表 + categorySubList: "/api/v2/wechat/service/category/sub-list", // 全部小类(到家+家政两大类合并,供金刚区) serviceList: "/api/v2/wechat/service/list", // 服务商品列表 serviceInfo: "/api/v2/wechat/service/info", // 服务详情(含SKU+师傅) orderCreate: "/api/v2/wechat/service/order/create", // 下单(定金单) diff --git a/components/nav/nav.vue b/components/nav/nav.vue index 1648dbc1..37aad0b5 100644 --- a/components/nav/nav.vue +++ b/components/nav/nav.vue @@ -47,7 +47,7 @@ export default { photoAc: "https://static.hshuishang.com/property-img-file/footer_homeAc.png", nav_name: "智慧首页", - url: "/pages/index/index", + url: "/pages/index2/index2", }, { photo: @@ -55,7 +55,7 @@ export default { photoAc: "https://static.hshuishang.com/property-img-file/footer_facilityAc.png", nav_name: "智能设备", - url: "/packages/smartDevice/index/index", + url: "/packages/smartDevice/home/index", }, { photo: @@ -70,7 +70,7 @@ export default { "https://static.hshuishang.com/property-img-file/footer_community.png", photoAc: "https://static.hshuishang.com/property-img-file/footer_communityAc.png", - nav_name: "我的小区", + nav_name: "我的社区", url: "/packages/community/index/index", }, // { @@ -200,9 +200,10 @@ export default { const ctoken = uni.getStorageSync("ctoken"); const authen = [ + "/pages/index2/index2", "/pages/index/index", "/pages/user/index", - "/packages/smartDevice/index/index", + "/packages/smartDevice/home/index", ]; // 除首页及个人中心页不需要鉴定ctoken, 其他tab页均需存在登录态才可访问 if (authen.includes(url)) { diff --git a/packages/community/addCommunity/index.vue b/packages/community/addCommunity/index.vue index d4c2b9c8..7a937dfa 100644 --- a/packages/community/addCommunity/index.vue +++ b/packages/community/addCommunity/index.vue @@ -138,9 +138,9 @@ export default { icon: "none", duration: 1500, }); - // 提示显示后延迟跳转 + // 提示显示后清空页面栈,直接回到个人中心(避免逐层返回多次) setTimeout(() => { - NavgateTo("/packages/community/myCommunity/index"); + uni.reLaunch({ url: "/pages/user/index" }); }, 1500); }); }, diff --git a/packages/community/index/index.css b/packages/community/index/index.css index ffb47fa3..2ea12c15 100644 --- a/packages/community/index/index.css +++ b/packages/community/index/index.css @@ -53,14 +53,21 @@ image { min-height: calc(100vh - 120rpx); width: 100%; position: relative; + /* 去掉渐变续色,页面纯白底 */ } .searchBox { display: flex; align-items: center; - position: absolute; - left: 0; - z-index: 2; + /* 不要红头,保持页面白底 */ + background: #ffffff; +} + +.back-btn { + display: flex; + align-items: center; + padding-left: 20rpx; + padding-right: 4rpx; } .searchBox_add { @@ -73,7 +80,7 @@ image { width: auto; height: 44rpx; padding: 5rpx 15rpx; - background: rgba(255, 255, 255, 0.8); + background: #f4f5f7; border-radius: 100rpx 100rpx 100rpx 100rpx; display: flex; align-items: center; @@ -103,7 +110,11 @@ image { .swiperBox1 { height: 500rpx; - width: 750rpx; + width: 710rpx; + /* 与首页 banner 一致:内缩圆角卡片,两侧留白让 .container 续色透出 */ + margin: 20rpx auto 0; + border-radius: 16rpx; + overflow: hidden; position: relative; } @@ -111,8 +122,8 @@ image { height: 300rpx; width: 710rpx; position: relative; - margin-top: 170rpx; - margin: 170rpx auto 0; + /* 头区已改普通流,去掉原为绝对定位 searchBox 预留的 170rpx 顶部空隙 */ + margin: 20rpx auto 0; } .swiperBox_no_img{ @@ -123,15 +134,9 @@ image { height: 100%; } +/* B方案:去掉 banner 底部的半透明→白 遮罩(会截断红色续色、造成不连续) */ .swiperBox1::after { - content: ''; - width: 100%; - position: absolute; - left: 0; - bottom: 0; - height: 120rpx; - /* 从上到下 透明渐变成白色 */ - background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%); + content: none; } .dot { @@ -163,14 +168,14 @@ image { .swiperBox2 { height: 150rpx; width: 710rpx; - margin: 0 auto; - margin-top: -96rpx; + /* 与金刚区互换后位于其下方,去掉原上叠 banner 的 -96rpx,改正常上间距 */ + margin: 30rpx auto 0; } .swiperBox_no2 { height: 150rpx; width: 710rpx; - margin: 0 auto;; + margin: 30rpx auto 0; } .funcList { @@ -284,6 +289,55 @@ image { overflow: hidden; } +/* 宣传栏:图左 + 右侧标题与内容预览 */ +.newsItemL { + display: flex; + align-items: center; + padding: 30rpx 0; + margin: 0 20rpx; + box-sizing: border-box; + border-bottom: 1rpx solid #EBEBEB; +} + +.newsItemL:last-child { + border-bottom: none; +} + +.newsItemL_pic { + width: 220rpx; + height: 160rpx; + border-radius: 16rpx; + overflow: hidden; + flex-shrink: 0; + margin-right: 24rpx; +} + +.newsItemL_body { + flex: 1; + min-width: 0; + align-self: stretch; + display: flex; + flex-direction: column; + justify-content: center; +} + +.newsItemL_tit { + font-size: 32rpx; + font-weight: 600; + color: #222222; + margin-bottom: 14rpx; +} + +.newsItemL_desc { + font-size: 26rpx; + color: #999999; + line-height: 1.5; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; +} + .tips { font-size: 26rpx; color: #999999; diff --git a/packages/community/index/index.vue b/packages/community/index/index.vue index 406b7477..1bfd7b1d 100644 --- a/packages/community/index/index.vue +++ b/packages/community/index/index.vue @@ -8,6 +8,9 @@ + + + {{ communityVal }} @@ -28,13 +31,7 @@ - - - - - - + @@ -44,6 +41,13 @@ + + + + + + @@ -51,21 +55,25 @@ + - - - {{ item.title }} - {{ item.author }} - - + + + + {{ item.title }} + {{ contentPreview(item.id) }} + + + + {{ communityVal }} @@ -100,6 +108,16 @@ + + + + + + {{ item.nav_name }} + + + + @@ -115,15 +133,6 @@ - - - - - {{ item.nav_name }} - - - - @@ -143,27 +152,28 @@ + - - - {{ item.title }} - {{ item.author }} - - + + + + {{ item.title }} + {{ noticePreview(item) }} + - - - {{ item.title }} - {{ item.author }} - - + + + + {{ item.title }} + {{ contentPreview(item.id) }} + @@ -227,6 +237,7 @@ export default { picUrl, top: "", localHeight: "", + showBack: false, // 有上级页面时(如从未来社区「我的房屋」跳入)显示返回按钮;作为底部tab进入时不显示 queryPage: { page_num: 1, page_size: 10, @@ -308,6 +319,7 @@ export default { // 从JSON文件中获取默认数据 defaultCategoryList: dataJson.defaultCategoryList, defaultInfoList: dataJson.defaultInfoList, + defaultNoticeList: dataJson.defaultNoticeList, // 含正文,用于宣传栏内容预览 // 用于存储原始的defaultInfoList数据 originalDefaultInfoList: null }; @@ -330,6 +342,7 @@ export default { this.top = meun.top; // this.top = meun.height + meun.top; this.localHeight = meun.height; + this.showBack = getCurrentPages().length > 1; this.defaultFunctionList = [ { create_time: "", @@ -514,6 +527,9 @@ export default { addCommunity() { NavgateTo("/packages/community/myCommunity/index"); }, + goBack() { + uni.navigateBack({ delta: 1 }); + }, swipers(event) { // 获取当前轮播图索引 @@ -826,6 +842,39 @@ export default { console.log(e); NavgateTo("../defaultNotice/index?id=" + e.id); }, + + // 静态默认宣传栏内容预览:按 id 取对应正文,去掉换行/空白占位/标签,截取一段 + contentPreview(id) { + const n = (this.defaultNoticeList || []).find((x) => x.id === id); + if (!n || !n.content) return ""; + const text = n.content + .replace(/ /g, " ") + .replace(/<[^>]+>/g, "") + .replace(/\s+/g, " ") + .trim(); + return text.length > 50 ? text.slice(0, 50) + "…" : text; + }, + + // 已绑定:临时通知列表项内容预览(接口数据),字段兜底 + 去标签截取 + noticePreview(item) { + if (!item) return ""; + const raw = + item.content || + item.summary || + item.describe || + item.intro || + item.sub_title || + ""; + if (raw) { + const text = String(raw) + .replace(/ /g, " ") + .replace(/<[^>]+>/g, "") + .replace(/\s+/g, " ") + .trim(); + if (text) return text.length > 50 ? text.slice(0, 50) + "…" : text; + } + return item.author || ""; + }, }, }; diff --git a/packages/futureCommunity/activityDetail/index.vue b/packages/futureCommunity/activityDetail/index.vue new file mode 100644 index 00000000..9f8c4118 --- /dev/null +++ b/packages/futureCommunity/activityDetail/index.vue @@ -0,0 +1,144 @@ + + + + + + diff --git a/packages/futureCommunity/activityList/index.vue b/packages/futureCommunity/activityList/index.vue new file mode 100644 index 00000000..b6987e25 --- /dev/null +++ b/packages/futureCommunity/activityList/index.vue @@ -0,0 +1,99 @@ + + + + + + diff --git a/packages/futureCommunity/conveniencePhone/index.vue b/packages/futureCommunity/conveniencePhone/index.vue new file mode 100644 index 00000000..9384741e --- /dev/null +++ b/packages/futureCommunity/conveniencePhone/index.vue @@ -0,0 +1,66 @@ + + + + + + diff --git a/packages/futureCommunity/data.js b/packages/futureCommunity/data.js new file mode 100644 index 00000000..13ac948c --- /dev/null +++ b/packages/futureCommunity/data.js @@ -0,0 +1,194 @@ +/** + * 未来社区(九九社区)静态内容数据 —— 1:1 还原设计稿 mock + * 来源:liuyuanxitong-yidong/src/config/community-data.js、community-content-data.js、convenience-phone-data.js + * 全部为固定数据;关注/报名等可变状态用本地存储维护。 + * 图标名为 uview u-icon 名称(已由 Vant 名映射而来)。 + */ + +/** 顶部定位 */ +export const locationInfo = { community: '上河坊·九九社区' } +export const searchPlaceholder = '搜索公告、活动、便民信息' + +/** 5 个快捷入口(彩色渐变圆形图标) */ +export const shortcuts = [ + { key: 'notice', label: '社区公告', icon: 'volume', bg: 'linear-gradient(135deg, #FF9A12 0%, #FF7900 100%)' }, + { key: 'activity', label: '社区活动', icon: 'calendar', bg: 'linear-gradient(135deg, #FF4752 0%, #EF2231 100%)' }, + { key: 'phone', label: '便民电话', icon: 'phone', bg: 'linear-gradient(135deg, #21C86A 0%, #08A84E 100%)' }, + { key: 'house', label: '我的房屋', icon: 'home', bg: 'linear-gradient(135deg, #3C82FF 0%, #2164F0 100%)' }, + { key: 'goodshop', label: '周边好店', icon: 'shopping-cart', bg: 'linear-gradient(135deg, #B04AFF 0%, #913EE7 100%)' } +] + +/** 顶部轮播(用渐变+文案,不依赖外链图片) */ +export const heroSlides = [ + { key: 'community-life', title: '九九社区美好生活', subtitle: '邻里相伴,生活更暖心', bg: 'linear-gradient(120deg, #ff4752 0%, #ff8a3d 100%)' }, + { key: 'community-activity', title: '邻里活动精彩不断', subtitle: '一起参与,共享社区好时光', bg: 'linear-gradient(120deg, #ff6a3d 0%, #ffb14a 100%)' }, + { key: 'community-service', title: '便民服务就在身边', subtitle: '公告、报修、生活服务一站直达', bg: 'linear-gradient(120deg, #2164f0 0%, #4aa8ff 100%)' } +] + +/** 公告分类标签样式 */ +export const NOTICE_TAG_META = { + announcement: { label: '公告', color: '#ffffff', bg: '#df3c3f' }, + urgent: { label: '紧急', color: '#ffffff', bg: '#e9272d' }, + notice: { label: '通知', color: '#e46d25', bg: '#ffe3cb' }, + service: { label: '服务', color: '#1f8a4c', bg: '#dcf5e5' }, + activity: { label: '活动', color: '#2164f0', bg: '#e2ecff' } +} +export const NOTICE_TABS = [ + { key: 'all', label: '全部' }, + { key: 'urgent', label: '紧急' }, + { key: 'notice', label: '通知' }, + { key: 'service', label: '服务' } +] + +/** 活动状态样式 */ +export const ACTIVITY_STATUS_META = { + upcoming: { label: '即将开始', color: '#e46d25', bg: '#ffe9d6' }, + ongoing: { label: '进行中', color: '#ffffff', bg: '#e9272d' }, + ended: { label: '已结束', color: '#9aa0a8', bg: '#eef0f3' } +} +export const ACTIVITY_TABS = [ + { key: 'all', label: '全部' }, + { key: 'upcoming', label: '即将开始' }, + { key: 'ongoing', label: '进行中' }, + { key: 'ended', label: '已结束' } +] +export const ACTIVITY_REGISTER_NOTICE = [ + '请准时到场,活动开始后 15 分钟未到视为放弃名额', + '如需取消报名,请提前 1 天在「邻里关注」中操作', + '活动现场请听从工作人员安排,注意自身与财物安全', + '亲子类活动需家长全程陪同,确保儿童安全' +] +/** 活动场景 → 兜底渐变(无封面图时用) */ +export const ACTIVITY_SCENE_BG = { + handicraft: 'linear-gradient(135deg, #ffd9c0 0%, #ffb088 100%)', + market: 'linear-gradient(135deg, #ffe6a3 0%, #ffc24d 100%)', + garden: 'linear-gradient(135deg, #c8efb0 0%, #7cc36a 100%)', + fitness: 'linear-gradient(135deg, #bfe3ff 0%, #6db4f0 100%)', + festival: 'linear-gradient(135deg, #ffc1bb 0%, #f37c6e 100%)' +} + +/** 社区公告 */ +export const notices = [ + { + id: 'n1', icon: 'volume', tag: 'announcement', title: '关于五一劳动节期间服务安排的通知', + summary: '五一期间物业服务中心值班安排及服务时间调整…', date: '2025-04-28', source: '物业服务中心', + readCount: 1286, pinned: true, + content: '

尊敬的业主:

五一劳动节期间,物业服务中心将安排工作人员轮值。前台服务时间调整为每日 9:00-17:00,24 小时报修及应急电话保持畅通。

如需办理装修登记、门禁卡等业务,建议提前预约。祝各位业主节日愉快。

' + }, + { + id: 'n2', icon: 'bell', tag: 'notice', title: '电梯例行维护保养通知', + summary: '本周将对小区部分楼栋电梯进行例行维护保养…', date: '2025-04-27', source: '物业服务中心', + readCount: 942, pinned: false, + content: '

尊敬的业主:

本周将对小区部分楼栋电梯进行例行维护保养。维护期间电梯将分时段暂停运行,请根据现场提示错峰出行。

给您带来的不便敬请谅解,感谢您的理解与配合。

' + }, + { + id: 'n3', icon: 'account', tag: 'notice', title: '物业服务中心工作时间调整', + summary: '自5月1日起,物业服务中心工作时间调整如下…', date: '2025-04-25', source: '社区服务站', + readCount: 658, pinned: false, + content: '

自 5 月 1 日起,物业服务中心工作时间调整为周一至周日 8:30-18:00,午间照常提供咨询服务。

非工作时间如遇紧急情况,请拨打物业 24 小时值班电话。

' + }, + { + id: 'n4', icon: 'account', tag: 'activity', title: '邻里议事会:小区充电桩加装意见征集', + summary: '诚邀业主代表参与议事会,就充电桩选址与方案建言。', date: '2026-06-12', source: '社区居委会', + readCount: 473, pinned: false, + content: '

为缓解小区新能源车充电难题,社区拟在地面停车区加装公共充电桩。现面向全体业主征集选址与方案意见,欢迎参加本月邻里议事会,共同决定社区事务。

' + }, + { + id: 'n5', icon: 'gift', tag: 'notice', title: '端午粽香·社区敬老慰问活动回顾', + summary: '社区联合志愿者为高龄独居老人送上粽子与节日问候。', date: '2026-06-09', source: '社区志愿队', + readCount: 805, pinned: false, + content: '

端午节前夕,社区志愿者走访慰问了 30 余位高龄独居老人,送上亲手包的粽子与节日祝福。邻里互助、守望相助,是九九社区一直倡导的温暖底色。

' + } +] + +/** 社区活动(image 为本地封面,空串则用 sceneBg 渐变兜底) */ +export const activities = [ + { + id: 'a6', scene: 'festival', status: 'ended', title: '端午竹编小龙舟手工活动', subtitle: '粽香艾草间,一起把龙舟装进端午记忆', + image: 'https://static.hshuishang.com/static/act-dragonboat.jpg', time: '2026-06-18 14:30 至 16:00', + place: '五常街道海汇社区党群服务中心', address: '五常街道海汇社区党群服务中心一楼活动室', distance: '4.08km', + quota: '限 25 人', enrolled: '25/25人', signupRange: '2026-06-16 10:00 至 2026-06-18 14:00', deadline: '2026-06-18 14:00', + fee: '免费', phone: '0571-8888 0618', organizer: '海汇社区联合九九社区', + points: ['认识端午节、龙舟与竹编手作的传统文化', '在老师指导下完成竹编龙舟骨架与端午挂饰', '活动材料由社区统一提供,成品可带回家留念'], + content: '

五月五,过端午。粽子香、艾草芳,龙舟划进手掌上。

本次活动将传统端午文化与亲子手作结合,老师会从竹编基础、龙舟结构和端午纹样讲起,带领居民一步步完成属于自己的竹编小龙舟。

活动现场提供竹篾、彩绳、粽子挂饰等材料,完成作品后还可参与社区端午作品展示与合影。

' + }, + { + id: 'a1', scene: 'handicraft', status: 'upcoming', title: '亲子手工课堂', subtitle: '一起动手,创意无限', + image: 'https://static.hshuishang.com/static/act-handicraft.jpg', time: '2025-05-10 10:00', + place: '橘园社区活动室', address: '橘园社区党群服务中心二楼手工教室', distance: '320m', + quota: '限 20 人', enrolled: '12/20人', signupRange: '2025-05-01 09:00 至 2025-05-09 18:00', deadline: '2025-05-09 18:00', + fee: '免费', phone: '021-5666 0510', organizer: '橘园社区', + points: ['亲子协作完成手工制作,增进亲子感情', '培养孩子动手能力与创造力,激发想象力', '作品展示与分享,收获成就感与快乐'], + content: '

本周末邀请专业老师带领小朋友们体验黏土手工,材料由社区免费提供。完成的作品可带回家,也可参与社区作品展。

适合 3-10 岁儿童及家长共同参与,名额有限,报满即止。

' + }, + { + id: 'a2', scene: 'market', status: 'upcoming', title: '邻里集市 · 乐享生活', subtitle: '好物共享,邻里更亲', + image: 'https://static.hshuishang.com/static/act-market.jpg', time: '2025-05-17 09:00', + place: '小区中心广场', address: '上河坊小区中心广场东侧', distance: '560m', + quota: '限 50 人', enrolled: '31/50人', signupRange: '2025-05-08 09:00 至 2025-05-16 20:00', deadline: '2025-05-16 20:00', + fee: '免费', phone: '021-5666 0517', organizer: '九九社区邻里中心', + points: ['闲置好物以物换物或低价转让', '现场分区:儿童玩具 / 二手书 / 生活用品', '报名后可领取专属摊位号'], + content: '

把家里的闲置好物带到市集,与邻居以物换物或低价转让。现场设有儿童玩具区、二手书区、生活用品区,欢迎全家一起来逛。

报名后可领取专属摊位号。

' + }, + { + id: 'a3', scene: 'garden', status: 'ongoing', title: '社区花园认养计划', subtitle: '一平米花园,邻里共养', + image: '', time: '2026-06-01 至 2026-08-31', place: '小区中央花园', address: '', distance: '', + quota: '剩余 8 个地块', enrolled: '16/24人', signupRange: '', deadline: '认养至 2026-08-31', + fee: '免费', phone: '', organizer: '', + points: ['认养小块菜地,自由种植花草蔬果', '社区统一提供工具与水源', '共建绿意社区,结识园艺邻居'], + content: '

社区中央花园开放小块菜地认养,认养后可自行种植花草蔬果,社区提供工具与水源。让我们一起把社区装扮得更绿意盎然。

' + }, + { + id: 'a4', scene: 'fitness', status: 'ongoing', title: '清晨广场健身操', subtitle: '动起来,遇见更好的邻居', + image: '', time: '每日 07:00 · 长期', place: '中心广场', address: '', distance: '', + quota: '无需报名亦可参加', enrolled: '不限人数', signupRange: '', deadline: '长期开放', + fee: '免费', phone: '', organizer: '', + points: ['专业志愿者带操,节奏舒缓适合各年龄', '报名后加入晨练群,接收每日提醒', '坚持打卡有机会获得社区健康好礼'], + content: '

社区健身志愿者每天清晨带操,舒缓的有氧节奏适合各年龄段邻居。报名后可加入晨练群,接收每日提醒。

' + }, + { + id: 'a5', scene: 'festival', status: 'ended', title: '端午包粽子邻里大赛', subtitle: '巧手包粽,温情端午', + image: '', time: '2026-06-08 周日 10:00', place: '社区活动中心', address: '', distance: '', + quota: '活动已结束', enrolled: '40/40人', signupRange: '', deadline: '报名已截止', + fee: '免费', phone: '', organizer: '', + points: ['邻里比拼包粽手艺,现场欢声笑语', '本次共 40 组家庭参与', '感谢参与,下次活动再见'], + content: '

端午佳节,邻里齐聚一堂比拼包粽手艺,现场欢声笑语不断。本次活动共有 40 组家庭参与,感谢大家的热情参与,我们下次活动再见。

' + } +] + +/** 便民电话 */ +export const phoneTip = '社区常用便民电话,点击即可一键拨打' +export const phoneList = [ + { id: 'P01', name: '物业服务中心', phone: '021-8266 1234', time: '服务时间 08:00-20:00', icon: 'server-man', iconBg: '#f53d42' }, + { id: 'P02', name: '社区卫生服务站', phone: '021-8266 5678', time: '服务时间 08:30-17:30', icon: 'plus', iconBg: '#24bd6c' }, + { id: 'P03', name: '社区警务室', phone: '021-8266 0110', time: '24 小时值班', icon: 'account', iconBg: '#397eef' }, + { id: 'P04', name: '水电报修热线', phone: '021-8266 9000', time: '服务时间 07:00-22:00', icon: 'home', iconBg: '#ff8a24' }, + { id: 'P05', name: '社区便民服务台', phone: '021-8266 2233', time: '服务时间 09:00-18:00', icon: 'server-man', iconBg: '#ff4164' } +] + +// ===== 查找辅助 ===== +export function findNotice(id) { return notices.find(n => n.id === id) } +export function findActivity(id) { return activities.find(a => a.id === id) } + +// ===== 关注 / 报名状态(本地存储,初始种子与设计稿一致)===== +const K_FN = 'fc_followed_notices' +const K_JA = 'fc_joined_acts' +const K_FA = 'fc_followed_acts' +function getArr(key, seed) { + const v = uni.getStorageSync(key) + if (v === '' || v === undefined || v === null) { uni.setStorageSync(key, seed); return seed.slice() } + return Array.isArray(v) ? v : seed.slice() +} +function toggle(key, seed, id) { + const arr = getArr(key, seed) + const i = arr.indexOf(id) + if (i >= 0) arr.splice(i, 1); else arr.push(id) + uni.setStorageSync(key, arr) + return i < 0 +} +export function isNoticeFollowed(id) { return getArr(K_FN, ['n1']).includes(id) } +export function toggleNoticeFollow(id) { return toggle(K_FN, ['n1'], id) } +export function isActivityJoined(id) { return getArr(K_JA, ['a3', 'a6']).includes(id) } +export function toggleActivityJoin(id) { return toggle(K_JA, ['a3', 'a6'], id) } +export function isActivityFollowed(id) { return getArr(K_FA, ['a1']).includes(id) } +export function toggleActivityFollow(id) { return toggle(K_FA, ['a1'], id) } diff --git a/packages/futureCommunity/index/index.vue b/packages/futureCommunity/index/index.vue new file mode 100644 index 00000000..1b68811d --- /dev/null +++ b/packages/futureCommunity/index/index.vue @@ -0,0 +1,218 @@ + + + + + + diff --git a/packages/futureCommunity/noticeDetail/index.vue b/packages/futureCommunity/noticeDetail/index.vue new file mode 100644 index 00000000..8fdf4e3c --- /dev/null +++ b/packages/futureCommunity/noticeDetail/index.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/packages/futureCommunity/noticeList/index.vue b/packages/futureCommunity/noticeList/index.vue new file mode 100644 index 00000000..3c59455c --- /dev/null +++ b/packages/futureCommunity/noticeList/index.vue @@ -0,0 +1,109 @@ + + + + + + diff --git a/packages/homeService/catalog/index.vue b/packages/homeService/catalog/index.vue new file mode 100644 index 00000000..a1f3717d --- /dev/null +++ b/packages/homeService/catalog/index.vue @@ -0,0 +1,157 @@ + + + + + + diff --git a/packages/homeService/detail/index.vue b/packages/homeService/detail/index.vue index 3633c762..cf830094 100644 --- a/packages/homeService/detail/index.vue +++ b/packages/homeService/detail/index.vue @@ -2,10 +2,10 @@ - + - + {{ info.service_name }} @@ -38,10 +38,10 @@ - - - 服务详情 - + + + 服务流程 + @@ -70,6 +70,7 @@ export default { info: {}, carousel: [], detailPics: [], + flowChartList: [], skuList: [], workerList: [], currentSku: null, @@ -90,8 +91,12 @@ export default { loadInfo() { request(apiArr.serviceInfo, 'POST', { id: this.id }, {}, false).then(res => { this.info = res || {} - this.carousel = (res.carousel ? res.carousel.split(',') : []).filter(Boolean).map(p => p.startsWith('http') ? p : this.picUrl + p) - this.detailPics = (res.detail_pic ? res.detail_pic.split(',') : []).filter(Boolean).map(p => p.startsWith('http') ? p : this.picUrl + p) + const toUrls = (str) => (str ? String(str).split(',') : []).filter(Boolean).map(p => p.startsWith('http') ? p : this.picUrl + p) + // 轮播优先用封面图(后台维护的多图);无则兜底用历史 carousel 字段 + const coverArr = toUrls(res.cover_pic) + this.carousel = coverArr.length ? coverArr : toUrls(res.carousel) + this.detailPics = toUrls(res.detail_pic) + this.flowChartList = toUrls(res.flow_chart) // 服务流程图,可多张 this.skuList = res.sku_list || [] this.workerList = res.worker_list || [] if (this.skuList.length) this.currentSku = this.skuList[0] @@ -128,7 +133,8 @@ export default { diff --git a/packages/smartDevice/home/index.css b/packages/smartDevice/home/index.css new file mode 100644 index 00000000..4573a0c9 --- /dev/null +++ b/packages/smartDevice/home/index.css @@ -0,0 +1,323 @@ +/* ============ 智能设备聚合首页 样式(还原设计稿 device 页) ============ */ +page { + background: #f5f6f7; +} + +.device-page { + min-height: 100vh; + background: #f5f6f7; +} + +/* 内容体:去掉渐变续色;保留 12rpx 顶部间距(Hero 与页头之间的空隙,纯页面底色)。 */ +.device-body { + padding-top: 12rpx; +} + +/* ===== 头部:居中标题 ===== */ +.device-header { + padding-left: 30rpx; + padding-right: 30rpx; + /* 不要红头,保持页面底色 */ + background: #f5f6f7; +} + +.title-bar { + display: flex; + align-items: center; + justify-content: center; + height: 88rpx; +} + +.page-title { + font-size: 36rpx; + font-weight: 700; + color: #1a1a1a; + letter-spacing: 1rpx; +} + +/* ===== Hero:红橙渐变底 + 叠加文案 ===== */ +.device-hero { + position: relative; + /* margin-top 移到 .device-body 的 padding-top,避免 margin 塌陷露出灰底白条 */ + margin: 0 30rpx; + height: 360rpx; + border-radius: 24rpx; + overflow: hidden; + /* 图片加载失败时露出的红橙渐变兜底 */ + background: linear-gradient(120deg, #f4141c 0%, #ff8758 100%); + box-shadow: 0 12rpx 30rpx rgba(244, 20, 28, 0.18); +} + +/* 轮播底图 */ +.hero-swiper { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 0; +} + +.hero-img { + width: 100%; + height: 100%; + display: block; +} + +/* 文字可读性遮罩:左深右透 */ +.hero-mask { + position: absolute; + inset: 0; + z-index: 1; + background: linear-gradient(100deg, rgba(120, 20, 14, 0.7) 0%, rgba(180, 40, 24, 0.34) 52%, rgba(255, 135, 88, 0.06) 100%); +} + +.hero-overlay { + position: relative; + z-index: 2; + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 40rpx 32rpx; +} + +.hero-greeting { + font-size: 30rpx; + font-weight: 700; + color: #fff; +} + +.hero-greeting-sub { + margin-top: 6rpx; + font-size: 22rpx; + color: rgba(255, 255, 255, 0.85); +} + +.hero-title { + margin-top: 12rpx; + font-size: 46rpx; + font-weight: 800; + color: #fff; + letter-spacing: -1rpx; +} + +.hero-sub { + margin-top: 12rpx; + font-size: 24rpx; + color: rgba(255, 255, 255, 0.9); +} + +/* 登录前双按钮 */ +.hero-actions { + display: flex; + margin-top: 28rpx; +} + +.hero-btn { + height: 64rpx; + padding: 0 36rpx; + border-radius: 999rpx; + font-size: 26rpx; + font-weight: 700; + display: flex; + align-items: center; + justify-content: center; +} + +.hero-btn.primary { + background: #fff; + color: #ef111b; +} + +.hero-btn.ghost { + margin-left: 20rpx; + border: 2rpx solid rgba(255, 255, 255, 0.9); + color: #fff; +} + +/* 登录后 4 特性标签 */ +.hero-tags { + display: flex; + margin-top: 28rpx; +} + +.hero-tag { + display: flex; + flex-direction: column; + align-items: center; + margin-right: 36rpx; +} + +.hero-tag-icon { + width: 56rpx; + height: 56rpx; + border-radius: 50%; + background: rgba(255, 255, 255, 0.22); + display: flex; + align-items: center; + justify-content: center; +} + +.hero-tag-label { + margin-top: 10rpx; + font-size: 20rpx; + color: #fff; +} + +/* ===== 设备分类卡:2 列网格 ===== */ +.cat-grid { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + padding: 24rpx 30rpx 0; +} + +.cat-card { + position: relative; + overflow: hidden; + width: 336rpx; + height: 240rpx; + margin-bottom: 18rpx; + border-radius: 20rpx; + padding: 24rpx; + background: linear-gradient(135deg, #fbf2f0 0%, #fdf8f7 100%); + box-shadow: 0 6rpx 18rpx rgba(0, 0, 0, 0.04); + box-sizing: border-box; +} + +/* 右下角产品几何块 */ +.cat-pic { + position: absolute; + right: 14rpx; + bottom: 14rpx; + width: 130rpx; + height: 130rpx; + z-index: 0; + border-radius: 16rpx; + overflow: hidden; +} + +.cat-pic-img { + width: 100%; + height: 100%; + display: block; +} + +.illust-access { background: linear-gradient(180deg, #2c3440 0%, #4a5566 100%); } +.illust-parking { background: linear-gradient(180deg, #9ee7cf 0%, #62c99b 100%); } +.illust-guard { background: linear-gradient(180deg, #eef1f4 0%, #c9d2dc 100%); } +.illust-environment { background: linear-gradient(180deg, #2a2f3a 0%, #525a6b 100%); } +.illust-monitor { background: linear-gradient(180deg, #f0f2f5 0%, #cdd4dd 100%); } +.illust-water { background: linear-gradient(180deg, #eaf4ff 0%, #bcd8f5 100%); } +.illust-lighting { background: linear-gradient(180deg, #ffe9b0 0%, #f4c45a 100%); } +.illust-scene { background: linear-gradient(180deg, #ffe2e0 0%, #ffb9b3 100%); } + +.cat-text { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + max-width: 220rpx; +} + +.cat-title { + font-size: 30rpx; + font-weight: 700; + color: #1a1a1a; + letter-spacing: 1rpx; +} + +.cat-desc { + margin-top: 8rpx; + font-size: 22rpx; + line-height: 1.4; + color: #9a9a9a; +} + +/* 底部行:锁 / 链接 */ +.cat-foot { + position: absolute; + left: 24rpx; + bottom: 24rpx; + z-index: 1; + display: flex; + align-items: center; +} + +.foot-lock { + margin-left: 6rpx; + font-size: 21rpx; + color: #b8b8b8; +} + +.foot-action { + margin-left: 6rpx; + font-size: 22rpx; + font-weight: 600; + color: #ef111b; +} + +/* ===== 登录后底部统计条 ===== */ +.stat-bar { + display: flex; + align-items: center; + margin: 24rpx 30rpx 0; + padding: 24rpx 28rpx; + border-radius: 20rpx; + background: linear-gradient(135deg, #fff3f1 0%, #fff9f8 100%); + box-shadow: 0 6rpx 18rpx rgba(0, 0, 0, 0.04); +} + +.stat-icon { + flex-shrink: 0; + width: 56rpx; + height: 56rpx; + border-radius: 50%; + background: linear-gradient(135deg, #ff5e61 0%, #ef111b 100%); + display: flex; + align-items: center; + justify-content: center; +} + +.stat-text { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + margin-left: 18rpx; +} + +.stat-title { + font-size: 26rpx; + font-weight: 700; + color: #1a1a1a; +} + +.stat-sub { + margin-top: 6rpx; + font-size: 20rpx; + color: #999; +} + +.stat-num { + flex-shrink: 0; + display: flex; + align-items: baseline; +} + +.stat-value { + font-size: 48rpx; + font-weight: 800; + color: #ef111b; +} + +.stat-unit { + margin-left: 6rpx; + font-size: 20rpx; + color: #999; +} + +/* 底栏占位 */ +.tabbar-spacer { + height: 160rpx; +} diff --git a/packages/smartDevice/home/index.vue b/packages/smartDevice/home/index.vue new file mode 100644 index 00000000..ad621554 --- /dev/null +++ b/packages/smartDevice/home/index.vue @@ -0,0 +1,193 @@ + + + + + + diff --git a/pages.json b/pages.json index 8d767e57..56ef813d 100644 --- a/pages.json +++ b/pages.json @@ -1,5 +1,16 @@ { "pages": [ + { + "path": "pages/index2/index2", + "style": { + "navigationStyle": "custom", + "navigationBarBackgroundColor": "#FFF", + "enablePullDownRefresh": true, + "usingComponents": { + "nav-footer": "/components/nav/nav" + } + } + }, { "path": "pages/index/index", "style": { @@ -139,7 +150,11 @@ "pages": [ { "path": "index/index", - "style": { "navigationBarTitleText": "到家服务", "navigationBarBackgroundColor": "#fff" } + "style": { "navigationBarTitleText": "未来到家", "navigationStyle": "custom", "navigationBarBackgroundColor": "#ff3838", "enablePullDownRefresh": true } + }, + { + "path": "catalog/index", + "style": { "navigationBarTitleText": "服务", "navigationStyle": "custom" } }, { "path": "detail/index", @@ -1194,6 +1209,17 @@ { "root": "packages/smartDevice", "pages": [ + { + "path": "home/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "智能设备", + "navigationBarBackgroundColor": "#f5f6f7", + "usingComponents": { + "nav-footer": "/components/nav/nav" + } + } + }, { "path": "index/index", "style": { @@ -1206,6 +1232,35 @@ } ] }, + { + "root": "packages/futureCommunity", + "pages": [ + { + "path": "index/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "九九社区", "enablePullDownRefresh": false } + }, + { + "path": "noticeList/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "社区公告" } + }, + { + "path": "noticeDetail/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "公告详情" } + }, + { + "path": "activityList/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "社区活动" } + }, + { + "path": "activityDetail/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "活动详情" } + }, + { + "path": "conveniencePhone/index", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "便民电话" } + } + ] + }, { "root": "packages/advertising", "pages": [ diff --git a/pages/index/index.vue b/pages/index/index.vue index 803b06e6..1a001b78 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -102,11 +102,11 @@ - 定位错误 未知区域 + diff --git a/pages/index2/index2.css b/pages/index2/index2.css new file mode 100644 index 00000000..3bf0b313 --- /dev/null +++ b/pages/index2/index2.css @@ -0,0 +1,382 @@ +/* ============ 新首页 index2 样式 ============ */ +page { + background: #f5f6f8; +} + +.home2 { + min-height: 100vh; +} + +/* ===== 顶部红色头区(吸顶固定:滚动/切 tab 时搜索栏与分类条保持不变) ===== */ +.hd { + position: sticky; + top: 0; + z-index: 100; + /* 不要红头,保持页面底色 */ + background: #f5f6f8; + padding: 0 24rpx 20rpx; +} + +.hd-loc { + display: flex; + align-items: center; + height: 64rpx; + color: #333; +} + +.hd-loc-icon { + width: 30rpx; + margin-right: 6rpx; +} + +.hd-loc-txt { + font-size: 30rpx; + font-weight: 600; + max-width: 420rpx; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.hd-loc-arrow { + font-size: 24rpx; + margin-left: 6rpx; +} + +/* 搜索框 */ +.hd-search { + display: flex; + align-items: center; + height: 72rpx; + background: #fff; + border: 2rpx solid #ef111b; + border-radius: 40rpx; + padding: 0 8rpx 0 24rpx; + margin-top: 8rpx; +} + +.hd-search-icon { + width: 32rpx; + height: 32rpx; + margin-right: 12rpx; + flex-shrink: 0; +} + +.hd-search-input { + flex: 1; + font-size: 26rpx; + color: #333; +} + +.hd-search-input::-webkit-input-placeholder { + color: #b0b3b8; +} + +.hd-search-btn { + flex-shrink: 0; + height: 56rpx; + line-height: 56rpx; + padding: 0 28rpx; + /* 与源码搜索按钮一致:纯红 #ff2b2f */ + background: #ff2b2f; + color: #fff; + font-size: 26rpx; + border-radius: 32rpx; +} + +/* 分类条:移到瀑布上方并吸顶(top 由内联样式给页头高度);仅瀑布在其下滚动 */ +.hd-cate { + position: sticky; + z-index: 50; + white-space: nowrap; + /* 抵消 .bd 的 20rpx 左右内边距,吸顶时整宽铺满、盖住下方瀑布 */ + margin: 0 -20rpx; + padding: 16rpx 20rpx; + background: #f5f6f8; +} + +.hd-cate-item { + display: inline-block; + color: #666; + font-size: 28rpx; + padding: 6rpx 4rpx; + margin-right: 34rpx; + position: relative; +} + +.hd-cate-item.on { + color: #ff4848; + font-weight: 700; + font-size: 30rpx; +} + +.hd-cate-item.on::after { + content: ''; + position: absolute; + left: 50%; + bottom: -4rpx; + transform: translateX(-50%); + width: 36rpx; + height: 6rpx; + border-radius: 3rpx; + background: #ff4848; +} + +/* ===== 主体 ===== */ +.bd { + position: relative; + margin-top: -8rpx; + background: #f5f6f8; + border-radius: 24rpx 24rpx 0 0; + padding: 20rpx 20rpx 180rpx; +} + +/* 轮播 */ +.banner { + position: relative; + border-radius: 20rpx; + overflow: hidden; +} + +.banner-swiper { + width: 100%; + height: 300rpx; +} + +.banner-img { + width: 100%; + height: 300rpx; + display: block; +} + +.banner-dots { + position: absolute; + right: 20rpx; + bottom: 16rpx; + display: flex; +} + +.banner-dots .dot { + width: 12rpx; + height: 12rpx; + border-radius: 50%; + background: rgba(255, 255, 255, 0.5); + margin-left: 8rpx; +} + +.banner-dots .dot.on { + width: 24rpx; + border-radius: 6rpx; + background: #fff; +} + +/* 金刚区(自绘 flex,上下留白 = .grid 的 margin,各 24rpx,无组件内建空间) */ +.grid { + display: flex; + flex-wrap: wrap; + padding: 0; + margin: 24rpx 0; +} + +.grid-item { + display: flex; + flex-direction: column; + align-items: center; +} + +.grid-icon { + width: 84rpx; + height: 84rpx; + border-radius: 24rpx; + display: block; +} + +.grid-txt { + display: block; + margin-top: 8rpx; + font-size: 24rpx; + line-height: 1; + color: #333; + text-align: center; +} + +/* 广告栏 */ +.ads { + display: flex; + /* 与金刚区间距由 .grid 的 padding-bottom 5px 控制 */ + margin-top: 0; + /* 按原主页广告位尺寸放大:整体约 450rpx 高 */ + height: 450rpx; +} + +.ads-left { + width: 50%; + margin-right: 16rpx; + border-radius: 20rpx; + overflow: hidden; +} + +.ads-left image { + width: 100%; + height: 450rpx; + display: block; +} + +.ads-right { + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.ads-right-item { + height: 217rpx; + border-radius: 20rpx; + overflow: hidden; +} + +.ads-right-item image { + width: 100%; + height: 217rpx; + display: block; +} + +/* 空广告位占位(招商中) */ +.ad-ph { + width: 100%; + height: 100%; + min-height: 217rpx; + display: flex; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, #fff3ee, #ffe9e0); + color: #ff9a76; + font-size: 24rpx; + letter-spacing: 2rpx; +} + +.ads-left .ad-ph { + height: 450rpx; +} + +/* 好店标题 */ +.wf-title { + display: flex; + align-items: center; + /* 内容已注释为空,去掉多余留白 */ + margin: 0; +} + +.wf-title-main { + font-size: 34rpx; + font-weight: 700; + color: #222; +} + +.wf-title-loc { + color: #ff4d4f; +} + +.wf-title-tag { + margin-left: 16rpx; + font-size: 22rpx; + color: #ff7a45; + background: #fff0e8; + border-radius: 20rpx; + padding: 4rpx 16rpx; +} + +/* 瀑布 */ +.wf { + display: flex; + align-items: flex-start; +} + +.wf-col { + width: 345rpx; +} + +.wf-col:first-child { + margin-right: 20rpx; +} + +.wf-card { + background: #fff; + border-radius: 20rpx; + overflow: hidden; + margin-bottom: 20rpx; +} + +.wf-img { + width: 345rpx; + display: block; + background: #eee; +} + +.wf-meta { + padding: 16rpx; +} + +.wf-name { + font-size: 28rpx; + font-weight: 600; + color: #222; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.wf-sub { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 10rpx; +} + +.wf-stars { + display: flex; +} + +.wf-stars image { + width: 22rpx; + height: 22rpx; + margin-right: 2rpx; +} + +.wf-dist { + font-size: 22rpx; + color: #999; +} + +.wf-tags { + display: flex; + flex-wrap: wrap; + margin-top: 10rpx; +} + +.wf-tag { + font-size: 20rpx; + color: #ff6a3d; + border: 1rpx solid #ffcbb3; + background: #fff5f0; + border-radius: 8rpx; + padding: 2rpx 10rpx; + margin-right: 8rpx; + margin-bottom: 6rpx; +} + +.wf-addr { + margin-top: 8rpx; + font-size: 22rpx; + color: #999; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.wf-more { + text-align: center; + color: #999; + font-size: 24rpx; + padding: 24rpx 0 40rpx; +} diff --git a/pages/index2/index2.vue b/pages/index2/index2.vue new file mode 100644 index 00000000..235b5a99 --- /dev/null +++ b/pages/index2/index2.vue @@ -0,0 +1,691 @@ + + + + + diff --git a/pages/user/index.css b/pages/user/index.css index cb3efff5..1537d980 100644 --- a/pages/user/index.css +++ b/pages/user/index.css @@ -7,8 +7,13 @@ page { /* height: 578rpx; */ /* background: linear-gradient(to bottom, #FFE7E1, #FFFFFF); */ /* background: linear-gradient( 359deg, rgba(255,255,255,0) 0%, #FDD9CA 100%); */ - background: url('https://static.hshuishang.com/property-img-file/page_user_Group_1584.png'); - background-size: contain; + /* 与设计稿个人中心一致:顶部柔和五彩渐变(薄荷绿/粉/淡紫低饱和叠加)向下淡出到灰底 */ + background: + radial-gradient(120% 56% at 12% 0%, rgba(150, 222, 210, 0.62) 0%, rgba(150, 222, 210, 0) 52%), + radial-gradient(110% 52% at 52% 2%, rgba(255, 188, 210, 0.55) 0%, rgba(255, 188, 210, 0) 56%), + radial-gradient(120% 58% at 96% 0%, rgba(200, 176, 242, 0.6) 0%, rgba(200, 176, 242, 0) 56%), + linear-gradient(180deg, rgba(244, 244, 246, 0) 0%, #f4f4f6 540rpx), + #f4f4f6; background-repeat: no-repeat; background-attachment: fixed; } @@ -85,10 +90,12 @@ page { .login-btn { font-size: 36rpx; pointer-events: auto; + color: #1a1a1a; } .avater_mobile { margin-top: 10rpx; + color: #666; } .center { diff --git a/pages/user/index.vue b/pages/user/index.vue index db1e3570..c339bcc3 100644 --- a/pages/user/index.vue +++ b/pages/user/index.vue @@ -192,17 +192,17 @@ export default { ], visitList: [{ image: "https://static.hshuishang.com/property-img-file/page_user_Group_1572.png", - name: "到家服务订单", + name: "服务订单", url: "/packages/homeService/myOrders/index", }, { image: "https://static.hshuishang.com/property-img-file/page_user_Group_1573.png", - name: "我的月账单", + name: "月账单", url: "/packages/homeService/myMonthlyBills/index", }, { image: "https://static.hshuishang.com/property-img-file/page_user_Group_1574.png", - name: "我的家政合同", + name: "家政合同", url: "/packages/homeService/myContracts/index", } ], diff --git a/static/smartDevice/cat-access.jpg b/static/smartDevice/cat-access.jpg new file mode 100644 index 00000000..4072c439 Binary files /dev/null and b/static/smartDevice/cat-access.jpg differ diff --git a/static/smartDevice/cat-environment.jpg b/static/smartDevice/cat-environment.jpg new file mode 100644 index 00000000..0aa6badd Binary files /dev/null and b/static/smartDevice/cat-environment.jpg differ diff --git a/static/smartDevice/cat-guard.jpg b/static/smartDevice/cat-guard.jpg new file mode 100644 index 00000000..81be167d Binary files /dev/null and b/static/smartDevice/cat-guard.jpg differ diff --git a/static/smartDevice/cat-lighting.jpg b/static/smartDevice/cat-lighting.jpg new file mode 100644 index 00000000..13343d84 Binary files /dev/null and b/static/smartDevice/cat-lighting.jpg differ diff --git a/static/smartDevice/cat-monitor.jpg b/static/smartDevice/cat-monitor.jpg new file mode 100644 index 00000000..3e2be8fa Binary files /dev/null and b/static/smartDevice/cat-monitor.jpg differ diff --git a/static/smartDevice/cat-parking.jpg b/static/smartDevice/cat-parking.jpg new file mode 100644 index 00000000..96204031 Binary files /dev/null and b/static/smartDevice/cat-parking.jpg differ diff --git a/static/smartDevice/cat-scene.jpg b/static/smartDevice/cat-scene.jpg new file mode 100644 index 00000000..4564c4fa Binary files /dev/null and b/static/smartDevice/cat-scene.jpg differ diff --git a/static/smartDevice/cat-water.jpg b/static/smartDevice/cat-water.jpg new file mode 100644 index 00000000..234ea957 Binary files /dev/null and b/static/smartDevice/cat-water.jpg differ diff --git a/static/smartDevice/hero1.jpg b/static/smartDevice/hero1.jpg new file mode 100644 index 00000000..3cb37e53 Binary files /dev/null and b/static/smartDevice/hero1.jpg differ diff --git a/static/smartDevice/hero2.jpg b/static/smartDevice/hero2.jpg new file mode 100644 index 00000000..25395733 Binary files /dev/null and b/static/smartDevice/hero2.jpg differ diff --git a/static/smartDevice/hero3.jpg b/static/smartDevice/hero3.jpg new file mode 100644 index 00000000..50c605df Binary files /dev/null and b/static/smartDevice/hero3.jpg differ diff --git a/static/smartDevice/hero4.jpg b/static/smartDevice/hero4.jpg new file mode 100644 index 00000000..fabac993 Binary files /dev/null and b/static/smartDevice/hero4.jpg differ