Showing source for: https://iamcuteegirl.pixnet.net/blog/posts/17346491535
Duration: 2.010654s
Server: nginx/1.24.0 (Ubuntu)

<!doctype html>
<html lang="zh-TW">
  <head>

    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="fb:app_id" content="101730233200171">

    <title>[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 | iamcuteegirl的部落格 | 不設分類分享 | 痞客邦 | PIXNET</title>
<meta name="title" content="[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 | iamcuteegirl的部落格 | 不設分類分享 | 痞客邦 | PIXNET">
<meta name="description" content="[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 屏東房屋翻修 屏東房屋翻修前 一定要做的事 想要在屏東購買新家,但大樓房價不斷屢創新高,讓許多年輕家庭望之卻步, 許多首次購房的屏東居民,退而考慮購買法拍屋、老房子或中古屋, 然而,購買二手房屋進行房屋翻修,也需要一筆龐大資金,費時費力且陷阱很多, 老...">
<meta name="author" content="iamcuteegirl的部落格">
<meta name="article:author" content="iamcuteegirl的部落格">
<meta name="robots" content="index, follow, max-image-preview:large, max-video-preview:-1, max-snippet:-1">
<meta property="og:title" content="[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 | iamcuteegirl的部落格 | 不設分類分享 | 痞客邦 | PIXNET">
<meta property="og:description" content="[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 屏東房屋翻修 屏東房屋翻修前 一定要做的事 想要在屏東購買新家,但大樓房價不斷屢創新高,讓許多年輕家庭望之卻步, 許多首次購房的屏東居民,退而考慮購買法拍屋、老房子或中古屋, 然而,購買二手房屋進行房屋翻修,也需要一筆龐大資金,費時費力且陷阱很多, 老...">
<meta property="og:image" content="https://fushi.yida-design.com.tw/serv1-1.webp">
<meta property="og:type" content="article">
<meta property="og:url" content="https://iamcuteegirl.pixnet.net/blog/posts/17346491535">
<meta property="og:article:published_time" content="2024-11-12T19:32:03+08:00">
<meta property="og:article:modified_time" content="2025-04-17T14:57:31+08:00">
<meta property="og:site_name" content="iamcuteegirl的部落格">
<meta property="og:locale" content="zh_TW">
<meta property="og:image:alt" content="[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你">
<meta property="og:updated_time" content="2025-04-17T14:57:31+08:00">
<meta property="twitter:title" content="[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 | iamcuteegirl的部落格 | 不設分類分享 | 痞客邦 | PIXNET">
<meta property="twitter:description" content="[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 屏東房屋翻修 屏東房屋翻修前 一定要做的事 想要在屏東購買新家,但大樓房價不斷屢創新高,讓許多年輕家庭望之卻步, 許多首次購房的屏東居民,退而考慮購買法拍屋、老房子或中古屋, 然而,購買二手房屋進行房屋翻修,也需要一筆龐大資金,費時費力且陷阱很多, 老...">
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:image" content="https://fushi.yida-design.com.tw/serv1-1.webp">
<link rel="canonical" href="https://iamcuteegirl.pixnet.net/blog/posts/17346491535">
<link rel="alternate" type="application/rss+xml" href="https://iamcuteegirl.pixnet.net/feed.rss">
<script type="application/ld+json">
    {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://iamcuteegirl.pixnet.net/blog/posts/17346491535#article",
    "url": "https://iamcuteegirl.pixnet.net/blog/posts/17346491535",
    "about": {
        "@type": "Thing",
        "name": "裝潢設計",
        "url": "https://www.pixnet.net/channel/interior-design"
    },
    "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://iamcuteegirl.pixnet.net/blog/posts/17346491535"
    },
    "headline": "[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你",
    "description": "[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 屏東房屋翻修 屏東房屋翻修前 一定要做的事 想要在屏東購買新家,但大樓房價不斷屢創新高,讓許多年輕家庭望之卻步, 許多首次購房的屏東居民,退而考慮購買法拍屋、老房子或中古屋, 然而,購買二手房屋進行房屋翻修,也需要一筆龐大資金,費時費力且陷阱很多, 老...",
    "articleBody": "[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你 屏東房屋翻修 屏東房屋翻修前 一定要做的事 想要在屏東購買新家,但大樓房價不斷屢創新高,讓許多年輕家庭望之卻步, 許多首次購房的屏東居民,退而考慮購買法拍屋、老房子或中古屋, 然而,購買二手房屋進行房屋翻修,也需要一筆龐大資金,費時費力且陷阱很多, 老房子無可避免的本身會存在一些問題,舉如房屋基礎結構、電線老舊、浴室漏水,或者前屋主忘記通知和故意隱瞞等, 這些問題都會增加房屋翻修的難度,因此在屏東房屋翻修前必須把房屋全面檢查並一次性解決, 否則幾年後翻修後的房屋若會出現問題,從而需要重新裝修, 造成巨大的損失。 20位師傅,幫你搞定房屋翻修大小事 我們是群擅長房屋翻修統包的老師傅, 團隊內有20位不同專業的師傅, 可以統包所有的房屋翻修工程, 無論是翻修前的房屋檢查, 或是翻修所需的法規和許可證、 空間設計規劃、結果驗收等,任何工程都一條龍完成,不用排時間外包其他師傅, 客戶預算只會直接花在師傅的工錢和房屋材料費, 用最小預算得到最滿意的結果, 如果您有房屋翻修的需求,歡迎和我們聯絡. 如何找對的房屋翻修團隊? 第一次進行房屋翻修,應該要找誰呢? 目前很多屏東房屋翻修的工程,都是水電師傅或鐵皮屋師傅,為了賺更多錢,半路出家去做的,造就很多品質不良的工程,需要我們去善後,其實泥作師傅才是房屋翻修的最主要核心,因為整個房屋翻修工程,泥作是最花時間的,幾乎佔了整理預算的60-70%, 怪不得多水電師傅接到案件,捨不得外包給泥作師傅去賺了, 反而要自己去進行. 且泥作又稱做美觀工程,對整體翻修的細節品質影響最大,只有選對師傅,才能造就出細膩且不出錯的翻修品質. 福喜泥作有10位以上的泥作師傅,以及各種不同專業的人員,彼此都有多年配合的默契和經驗, 能最大程度去控制並降低整個工程的預算,減少時間,為翻修做最細膩的調整,用最少的預算及時間, 為客戶打造出最好的夢想居家. 屏東服務地區 屏東市 潮州 東港 萬丹 長治 麟洛 九如 鹽埔 內埔 三地門 恆春 里港 高樹 萬巒 竹田 新埤 新園 崁頂 林邊 南州 佳冬 琉球 車城 枋山 枋寮 霧台 瑪家 泰武 來義 春日 獅子 牡丹 滿洲 透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修 旅館浴室翻修-乾溼分離-屏東房屋翻修 套房翻新裝潢-客製化櫥櫃-屏東房屋翻修...",
    "image": [
        {
            "@type": "ImageObject",
            "url": "https://fushi.yida-design.com.tw/serv1-1.webp"
        }
    ],
    "author": {
        "@id": "https://iamcuteegirl.pixnet.net#person"
    },
    "publisher": {
        "@type": "Organization",
        "name": "PIXNET",
        "url": "https://www.pixnet.net",
        "logo": {
            "@type": "ImageObject",
            "url": "https://static.1px.tw/pixnet-next/_next/static/media/pixnet-logo.692e9b3e.svg"
        }
    },
    "datePublished": "2024-11-12T19:32:03+08:00",
    "dateModified": "2025-04-17T14:57:31+08:00",
    "inLanguage": "zh-TW",
    "articleSection": "福喜泥作-網站文章",
    "keywords": [],
    "isPartOf": {
        "@type": "Blog",
        "@id": "https://iamcuteegirl.pixnet.net/blog#blog"
    }
}</script>
<script type="application/ld+json">
    {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "@id": "https://iamcuteegirl.pixnet.net/blog/posts/17346491535#BreadcrumbList",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "name": "首頁",
            "item": "https://iamcuteegirl.pixnet.net/blog"
        },
        {
            "@type": "ListItem",
            "position": 2,
            "name": "福喜泥作-網站文章",
            "item": "https://iamcuteegirl.pixnet.net/blog/categories/17003882277"
        },
        {
            "@type": "ListItem",
            "position": 3,
            "name": "[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你",
            "item": "https://iamcuteegirl.pixnet.net/blog/posts/17346491535"
        }
    ]
}</script>
<script type="text/javascript" id="pixnet-vars">
    window.PIXNET = {
    "post_id": "17346491535",
    "name": "iamcuteegirl",
    "user_id": "0",
    "blog_id": "7202835",
    "display_ads": true,
    "comscore_name": "Home",
    "part": 18,
    "options": {
        "AdultWarning": false,
        "DisplayAds": true,
        "BusinessTheme": false,
        "Label": "none"
    },
    "ad_options": {
        "chictrip": false
    }
};
</script>
    <link href="https://static.1px.tw/blog/v1p2/css/fix.css?v=1788288265" rel="stylesheet" type="text/css" />
    <link href="https://static.1px.tw/blog/v1p2/css/theme/style.min.css?v=1788288265" rel="stylesheet" type="text/css" />
    <link href="https://static.1px.tw/blog/v1p2/css/theme/main.min.css?v=1788288265" rel="stylesheet" type="text/css" />
    <link href="https://static.1px.tw/blog/v1p2/css/desktop.min.css?v=1788288265" rel="stylesheet" type="text/css" />
    <link href="https://static.1px.tw/blog/v1p2/css/components/desktop-navbar.min.css?v=1788288265" rel="stylesheet" type="text/css" />
    <link href="https://static.1px.tw/blog/v1p2/css/components/adult-warning.min.css?v=1788288265" rel="stylesheet" type="text/css" />
    <link href="https://static.1px.tw/blog/v1p2/css/components/post-comment.min.css?v=1788288265" rel="stylesheet" type="text/css" />
    <link href="https://static.1px.tw/blog/v1p2/css/components/post-recommend.min.css?v=1788288265" rel="stylesheet" type="text/css" />

    <!-- begin custom style -->
    <link href="https://pimg.1px.tw/iamcuteegirl/assets/iamcuteegirl.css" rel="stylesheet" type="text/css" />
    <!-- end custom style -->
    <link href="https://static.1px.tw/blog/v1p2/css/theme/author-info.css?v=1788288265" rel="stylesheet" type="text/css" />
    <link rel="icon" href="https://static.1px.tw/blog/v1p2/img/favicon.ico?v=1788288265"/>
    <script type="text/javascript" src="https://static.1px.tw/blog/v1p2/js/pixsdk.min.js?v=1788288265"></script>
    <script async type="text/javascript" src="https://static.1px.tw/blog/v1p2/lib/jquery-latest.min.js?v=1788288265"></script>
    <script type="text/javascript" src="https://static.1px.tw/blog/v1p2/lib/glightbox/js/glightbox.min.js?v=1788288265"></script>
    <link href="https://static.1px.tw/blog/v1p2/lib/glightbox/css/glightbox.min.css?v=1788288265" rel="stylesheet" type="text/css" />
    <script src="https://static.1px.tw/blog/v1p2/lib/alpinejs.min.js?v=1788288265" defer></script>

    <!-- Google Tag Manager -->
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-TRLQMPKX');</script>
    <!-- End Google Tag Manager -->
      </head>

  <body id="article-main">
     <div id="pix-navbar" class="navbar" x-data="pixNavbar()" x-init="init()" @keydown.escape.window="closeMenu">

    <!-- NAVBAR -->
    <nav class="pixnavbar">
        <div class="navbar-inner">

            <a href="https://www.pixnet.net">
                <img
                    alt="PIXNET Logo"
                    src="https://static.1px.tw/blog-next/public/logo_pixnet_ch.svg"
                />
            </a>

            <!-- LOGIN -->
            <a
                x-cloak
                x-show="!user"
                class="login-link"
                :href="loginUrl"
                rel="nofollow"
            >
                登入
            </a>

            <!-- AVATAR -->
            <span
                x-cloak
                x-show="user"
                class="avatar sidebar-trigger"
                @click="toggleMenu"
            >
                <img class="avatar-image" :src="avatar" />
            </span>

        </div>
    </nav>


    <!-- OVERLAY -->
    <div
        class="menu-overlay"
        x-show="menuOpen"
        x-transition.opacity
        @click="closeMenu"
    ></div>


    <!-- SIDEBAR -->
    <div
        id="menu-container"
        class="menu-wrapper"
        :class="{ active: menuOpen }"
    >

        <div class="menu-header">

            <span class="avatar">
                <img class="avatar-image" :src="avatar" />
            </span>

            <div class="profile">
                <span class="profile-title" x-text="user?.display_name"></span>
                <span class="profile-subtitle" x-text="user?.id"></span>
            </div>

        </div>

        <div class="menu-content">

            <!-- card -->
            <div class="menu-card">

                <a class="menu-item" :href="blogUrl">
                    <span class="menu-item-label">我的部落格</span>
                    <span class="menu-arrow"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span>
                </a>

                <a class="menu-item" href="https://panel.pixnet.tw/" rel="nofollow">
                    <span class="menu-item-label">我的部落格後台</span>
                    <span class="menu-arrow"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span>
                </a>

                <a class="menu-item" href="https://account.pixnet.tw/" rel="nofollow">
                    <span class="menu-item-label">我的帳號</span>
                    <span class="menu-arrow"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span>
                </a>

            </div>

        </div>


        <!-- logout bottom -->
        <div class="menu-footer">

            <a class="menu-item logout" :href="logoutUrl" rel="nofollow">
                <span class="menu-item-label">登出</span>
                <span class="menu-arrow"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span>
            </a>

        </div>

    </div>

</div>

<script>
document.addEventListener('alpine:init', () => {

    Alpine.data('pixNavbar', () => ({

        menuOpen: false,
        user: null,

        get avatar() {
            return this.user?.avatar
                || 'https://static.1px.tw/blog-next/public/default_avatar.png'
        },

        get blogUrl() {
            return this.user?.blog?.url || '/blog'
        },

        get loginUrl() {
            return '/auth/authorize?redirect_uri=' + encodeURIComponent(location.href)
        },

        get logoutUrl() {
            return '/auth/logout?redirect_uri=' + encodeURIComponent(location.href)
        },

        toggleMenu() {
            this.menuOpen = !this.menuOpen
            this.toggleScroll()
        },

        closeMenu() {
            this.menuOpen = false
            this.toggleScroll()
        },

        toggleScroll(){
            document.body.style.overflow =
                this.menuOpen ? 'hidden' : ''
        },

        async init(){

            const user = await PIXNET.init()

            if (user) {
                this.user = user
            }

            document.addEventListener("pixnet:user-ready",(e)=>{
                this.user = e.detail
            })

        }

    }))

})
</script>
 
    <!-- end of navbar -->

    <div class="main-container">
      <div id="pixnet-ad-before_header" class="pixnet-ad-placement"></div>
      <div id="body-div">
        <div id="container">
          <div id="container2">
            <div id="container3">
              <div id="header">
    <div id="banner">
        <h1>
            <a href="https://iamcuteegirl.pixnet.net/blog" title="iamcuteegirl的部落格 的部落格">
                iamcuteegirl的部落格
            </a>
        </h1>
        <p class="skiplink">
            <a href="#article-area" title="skip the page header to the main content">
                跳到主文
            </a>
        </p>
        <h2>
            歡迎光臨iamcuteegirl在痞客邦的小天地
        </h2>
        <p id="blog-category">
            部落格全站分類:
                            <a href="#" target="_blank">
                    不設分類
                </a>
                    </p>
    </div>
    <ul id="navigation">
        <li class="navigation-links" id="link-album">
            <a href="https://iamcuteegirl.pixnet.net/albums" title="iamcuteegirl的部落格 的相簿">
                相簿
            </a>
        </li>
        <li class="navigation-links" id="link-blog">
            <a href="https://iamcuteegirl.pixnet.net/blog" title="iamcuteegirl的部落格 的部落格">
                部落格
            </a>
        </li>
        <li class="navigation-links" id="link-guestbook" style="display: none;">
            <a id="guestbook" data-msg="尚未安裝留言板,無法進行留言" data-action="none" href="#"
                title="go to guestbook page of this user">
                留言
            </a>
        </li>
        <li class="navigation-links" id="link-profile">
            <a href="https://www.pixnet.net/pcard/iamcuteegirl" title="iamcuteegirl的部落格 的名片">
                名片
            </a>
        </li>
    </ul>
</div>
              <div id="main">
    <div id="content">
        <div id="spotlight">
                    </div>

        <div id="article-area">
            <div id="article-box">
                <div class="article">
                    <!-- title -->
                    <ul class="article-head">
                        <li class="publish">
                            <span class="month">Nov</span>
                            <span class="date">12</span>
                            <span class="day">Tue</span>
                            <span class="year">2024</span>
                            <span class="time">19:32</span>
                        </li>
                        <li class="title">
                            <h2>
                                <a href="https://iamcuteegirl.pixnet.net/blog/posts/17346491535">[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你</a>
                            </h2>
                        </li>
                    </ul>

                    <!-- content -->
                    <div class="article-body">
                        <div class="article-content">
                                                        <div class="article-content-inner" id="article-content-inner">
                                  <h1>[附作品]如何找房屋翻修師傅不採雷!20位泥作師傅親自告訴你</h1>

<p><a rel="index,follow" href="https://www.fushi.com.tw/renovation1.htm">屏東房屋翻修</a></p>


<div class="divtext">
<h2>屏東房屋翻修前 一定要做的事</h2>

<p>想要在屏東購買新家,但大樓房價不斷屢創新高,讓許多年輕家庭望之卻步, 許多首次購房的屏東居民,退而考慮購買法拍屋、老房子或中古屋, 然而,購買二手房屋進行房屋翻修,也需要一筆龐大資金,費時費力且陷阱很多, 老房子無可避免的本身會存在一些問題,舉如房屋基礎結構、電線老舊、浴室漏水,或者前屋主忘記通知和故意隱瞞等, 這些問題都會增加房屋翻修的難度,<strong>因此在屏東房屋翻修前必須把房屋全面檢查並一次性解決</strong>, 否則幾年後翻修後的房屋若會出現問題,從而需要重新裝修, 造成巨大的損失。</p>

<div class="divspace_r1">&nbsp;</div>

<h3>20位師傅,幫你搞定房屋翻修大小事</h3>

<p>我們是群擅長房屋翻修統包的老師傅, <strong>團隊內有20位不同專業的師傅, 可以統包所有的房屋翻修工程,</strong> 無論是翻修前的房屋檢查, 或是翻修所需的法規和許可證、 空間設計規劃、結果驗收等,任何工程都一條龍完成,不用排時間外包其他師傅, <strong>客戶預算只會直接花在師傅的工錢和房屋材料費,</strong> 用最小預算得到最滿意的結果, 如果您有房屋翻修的需求,歡迎和我們聯絡.</p>

<div class="divspace_r1">&nbsp;</div>
<img alt="房屋翻修流程" src="https://fushi.yida-design.com.tw/serv1-1.webp" title="房屋翻修流程">
<div class="divspace_r1">&nbsp;</div>

<h2>如何找對的房屋翻修團隊?</h2>

<p>第一次進行房屋翻修,應該要找誰呢? 目前很多屏東房屋翻修的工程,都是水電師傅或鐵皮屋師傅,為了賺更多錢,半路出家去做的,造就很多品質不良的工程,需要我們去善後,其實泥作師傅才是房屋翻修的最主要核心,因為整個房屋翻修工程,<strong>泥作是最花時間的,幾乎佔了整理預算的60-70%, 怪不得多水電師傅接到案件,捨不得外包給泥作師傅去賺了</strong>, 反而要自己去進行. 且泥作又稱做美觀工程,對整體翻修的細節品質影響最大,只有選對師傅,才能造就出細膩且不出錯的翻修品質.<br>
<br>
福喜泥作有10位以上的泥作師傅,以及各種不同專業的人員,彼此都有多年配合的默契和經驗, 能最大程度去控制並降低整個工程的預算,減少時間,為翻修做最細膩的調整,用最少的預算及時間, 為客戶打造出最好的夢想居家.</p>

<div class="divspace_r1">&nbsp;</div>
<img alt="房屋翻修流程" src="https://fushi.yida-design.com.tw/serv1-2.webp?n1" title="房屋翻修流程">
<div class="divspace_r1">&nbsp;</div>

<h2>屏東服務地區</h2>
<span class="spr1">屏東市</span> <span class="spr1">潮州</span> <span class="spr1">東港</span> <span class="spr1">萬丹</span> <span class="spr1">長治</span> <span class="spr1">麟洛</span> <span class="spr1">九如</span> <span class="spr1">鹽埔</span> <span class="spr1">內埔</span> <span class="spr1">三地門</span> <span class="spr1">恆春</span> <span class="spr1">里港</span> <span class="spr1">高樹</span> <span class="spr1">萬巒</span> <span class="spr1">竹田</span> <span class="spr1">新埤</span> <span class="spr1">新園</span> <span class="spr1">崁頂</span> <span class="spr1">林邊</span> <span class="spr1">南州</span> <span class="spr1">佳冬</span> <span class="spr1">琉球</span> <span class="spr1">車城</span> <span class="spr1">枋山</span> <span class="spr1">枋寮</span> <span class="spr1">霧台</span> <span class="spr1">瑪家</span> <span class="spr1">泰武</span> <span class="spr1">來義</span> <span class="spr1">春日</span> <span class="spr1">獅子</span> <span class="spr1">牡丹</span> <span class="spr1">滿洲</span>

<div class="divspace_r1">&nbsp;</div>
</div>

<figure>
<figcaption class="pimg">透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修</figcaption>

<div class="divimg_rec">
<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/c/file6467872b7953c.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/2/file6467872b98db2.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/e/file6467872b2d32e.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/c/file64675a3d0360c.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/d/file6467872ac0c4d.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/f/file64675a3c5913f.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/b/file64675a3b8168b.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/7/file64675a3bbb4d7.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/0/file64675a3be6060.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/3/file64675a3c13da3.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/1/file64675a3c38bc1.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="divimg"><img alt="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修" src="https://fushi.yida-design.com.tw/2/file64675a3c73762.webp?n1=1" title="透天裝潢設計-大廳翻修-系統廚具-屏東房屋翻修"></div>

<div class="br1">&nbsp;</div>
</div>
</figure>

<figure>
<figcaption class="pimg">旅館浴室翻修-乾溼分離-屏東房屋翻修</figcaption>

<div class="divimg_rec">
<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/1/file64675b4bbbda1.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/e/file64675b4c39bfe.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/8/file64675b4c17758.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/5/file64675b4b70125.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/b/file64675b4b4516b.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/a/file64675b4b93eba.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/9/file64675b4b04359.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/7/file64675b4b27667.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/c/file64675b4bea87c.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="divimg"><img alt="旅館浴室翻修-乾溼分離-屏東房屋翻修" src="https://fushi.yida-design.com.tw/6/file64675b4c687a6.webp?n1=1" title="旅館浴室翻修-乾溼分離-屏東房屋翻修"></div>

<div class="br1">&nbsp;</div>
</div>
</figure>

<figure>
<figcaption class="pimg">套房翻新裝潢-客製化櫥櫃-屏東房屋翻修</figcaption>

<div class="divimg_rec">
<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/7/file646759b242f57.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/4/file646759b1db954.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/6/file646759b294046.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/8/file646759b100958.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/b/file646759b12682b.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/e/file646759b147b6e.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/2/file646759b1b1302.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/1/file646759b216041.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/d/file646759b2702ad.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="divimg"><img alt="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修" src="https://fushi.yida-design.com.tw/7/file646759b2caa07.webp?n1=1" title="套房翻新裝潢-客製化櫥櫃-屏東房屋翻修"></div>

<div class="br1">&nbsp;</div>
</div>
</figure>

                            </div>
                                                        <!-- /.article-content-inner -->

                            <div class="tag-container-parent">
                                <div class="tag-container article-keyword" data-version="a">
                                                                    </div>
                            </div>
                            <!-- /.tag-container-parent -->

                            <div class="author-profile">
                                <div class="author-profile__header">創作者介紹</div>

                                <div class="author-profile__main" id="mixpanel-author-box">
                                    <a>
                                        <img class="author-profile__avatar" src="https://s3.1px.tw/blog/common/avatar/blog_cover_dark.jpg" alt="創作者 iamcuteegirl的部落格 的頭像" loading="lazy" />
                                    </a>

                                    <div class="author-profile__content">
                                        <a href="https://www.pixnet.net/pcard/iamcuteegirl" class="author-profile__name">iamcuteegirl</a>
                                        <p class="author-profile__info">iamcuteegirl的部落格</p>
                                    </div>

                                    <div class="author-profile__subscribe hoverable">
                                        <button data-follow-state="關注" class="subscribe-btn member"></button>
                                    </div>
                                </div>
                            </div>
                            <!-- /.author-profile -->
                        </div>
                        <!-- /.article-content -->

                        <p class="author">
                            iamcuteegirl 發表在
                            <a href="https://www.pixnet.net">痞客邦</a>
                            <a href="#comments">留言</a>(0)
                                                        <span class="author-views">人氣(
                                <span id="BlogArticleCount" data-stats="single" data-post-id="17346491535">
                                    343
                                </span>
                                )
                            </span>
                                                    </p>
                        <!-- /.author -->

                        <div id="pixnet-ad-content-left-right-wrapper">
                            <div class="left"></div>
                            <div class="right"></div>
                        </div>
                        <!-- /#pixnet-ad-content-left-right-wrapper -->

                        <div class="article-footer">
                            <ul class="refer">
                                                                <li>
                                    全站分類: <a href="https://www.pixnet.net/channel/interior-design">裝潢設計</a>
                                </li>
                                
                                                                <li>
                                    個人分類: <a href="https://iamcuteegirl.pixnet.net/blog/categories/17003882277">福喜泥作-網站文章</a>
                                </li>
                                                            </ul>

                            <div class="back-to-top">
                                <a href="#top" title="back to the top of the page">▲top</a>
                            </div>

                                                         <div id="post-comment" class="comment-container" x-data="commentComponent({postId: '17346491535', blog_id: '7202835', allowComment: true})" x-init="init()">
  <div class="post-comment__header">
    <span x-text="meta.totalCount + ' 則留言'"></span>
  </div>
  <div class="post-comment__body">
    <ol class="post-comment__list">
      <template x-for="comment in comments" :key="comment.id">
        <li class="post-comment__item">
          <div class="comment-card">
            <a href="#" class="comment-card__avatar-link" :aria-label="'查看 ' + comment.commenter.display_name + ' 的個人頁'">
              <img class="comment-card__avatar" :src="comment.commenter.avatar" :alt="comment.commenter.display_name" loading="lazy" />
            </a>
            <div class="comment-card__main">
              <div class="comment-card__bubble">
                <div class="comment-card__author-row">
                  <a href="#" class="comment-card__author" x-text="comment.commenter.display_name"></a>
                  <span class="comment-card__badge comment-card__badge--author" x-show="comment.commenter.is_author">作者</span>
                </div>

                <div class="comment-card__content" x-html="comment.content"></div>
              </div>
              <!-- /.comment-card__bubble -->

              <div class="comment-card__meta">
                <time class="comment-card__time" :datetime="comment.datetime" x-text="comment.human_time"></time>
                <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="toggleReply(comment.id)">回覆</a>
                <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': comment.visibility == 1 }" @click.prevent="changeCommentVisibility(comment.id, 'show')">顯示</a>
                <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': comment.visibility == 2 }" @click.prevent="changeCommentVisibility(comment.id, 'hide')">隱藏</a>
                <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="deleteComment(comment.id)">刪除</a>
              </div>
              <!-- /.comment-card__meta -->

              <div class="comment-card__replies">
                <ol class="reply-list">
                  <template x-for="reply in comment.replies">
                    <li class="reply-list__item">
                      <div class="comment-card comment-card--reply" :class="{'comment-card--hidden': reply.visibility == 2 && isOwner()}">
                        <a href="#" class="comment-card__avatar-link" aria-label="查看 Eric 的個人頁">
                          <img class="comment-card__avatar" :src="reply.replyer.avatar" :alt="reply.replyer.display_name" loading="lazy" />
                        </a>

                        <div class="comment-card__main">
                          <div class="comment-card__bubble">
                            <div class="comment-card__author-row">
                              <a :href="reply.replyer.card_url" class="comment-card__author" x-text="reply.replyer.display_name"></a>
                              <span class="comment-card__badge comment-card__badge--author" x-show="reply.replyer.is_author">作者</span>
                            </div>

                            <div class="comment-card__content" x-html="reply.content"></div>
                          </div>

                          <div class="comment-card__meta">
                            <time class="comment-card__time" :datetime="reply.datetime" x-text="reply.human_time"></time>
                            <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': reply.visibility == 1 }" @click.prevent="changeReplyVisibility(comment.id, reply.id, 'show')">顯示</a>
                            <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': reply.visibility == 2 }" @click.prevent="changeReplyVisibility(comment.id, reply.id, 'hide')">隱藏</a>
                            <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="deleteReply(comment.id, reply.id)">刪除</a>
                          </div>
                          <!-- /.comment-card__meta -->
                        </div>
                      </div>
                    </li>
                  </template>
                </ol>
              </div>
              <!-- /.comment-card__replies -->

              <div class="comment-card__reply-editor" x-show="replyingTo === comment.id && isOwner()">

                <div class="reply-editor">

                  <div class="reply-editor__avatar">
                    <img  src="https://i.pravatar.cc/48?img=5">
                  </div>

                  <form class="reply-editor__form">

                    <div class="reply-editor__input-wrap">
                      <textarea class="reply-editor__textarea" placeholder="寫下你的回覆..." x-model="replyDraft[comment.id].content"></textarea>
                    </div>

                    <div class="reply-editor__footer">

                      <div class="reply-editor__visibility">

                        <label>
                          <input type="radio" name="reply_visibility" value="1" x-model="replyDraft[comment.id].visibility" checked>
                          公開回覆
                        </label>

                        <label>
                          <input type="radio" name="reply_visibility" value="2" x-model="replyDraft[comment.id].visibility">
                          私密回覆
                        </label>

                      </div>

                      <div class="reply-editor__actions">
                        <button type="button" class="reply-editor__cancel" @click="replyingTo = null">取消</button>
                        <button type="submit" class="reply-editor__submit" @click.prevent="submitReply(comment.id)">回覆</button>
                      </div>

                    </div>

                  </form>

                </div>

              </div>
              <!-- /.comment-card__reply-editor -->
            </div>
            <!-- /.comment-card__main -->
          </div>
        </li>
      </template>

      <template x-if="comments.length === 0">
        <li class="post-comment__item" style="text-align: center; color: #888; padding: 2rem 0;">
          沒有留言,快來搶沙發吧!
        </li>
      </template>
    </ol>
    <button class="btn-more" x-show="meta.page < meta.pageCount" @click="loadMore">載入更多</button>
  </div>
  <!-- /.post-comment__body -->

  <div class="post-comment__footer" x-show="allowComment">
    <div class="comment-editor" x-show="isLoggedIn">
      <a href="#" class="comment-editor__avatar-link" aria-label="我的個人頁">
        <img class="comment-editor__avatar" :src="user?.avatar" :alt="user?.display_name" loading="lazy" />
      </a>

      <form class="comment-editor__form" action="" method="post">
        <label for="comment-message" class="comment-editor__label" x-text="'以 ' + user?.display_name + ' 身份發表留言'"></label>

        <div class="comment-editor__input-wrap">
          <textarea id="comment-message" name="comment" class="comment-editor__textarea" rows="3" placeholder="寫下你的留言..." x-model="newComment.content"></textarea>
        </div>

        <div class="comment-editor__footer">
          <div class="comment-editor__visibility">
            <label class="comment-editor__visibility-option">
              <input type="radio" name="visibility" value="1" x-model="newComment.visibility" checked>
              <span>公開留言</span>
            </label>

            <label class="comment-editor__visibility-option">
              <input type="radio" name="visibility" value="2" x-model="newComment.visibility">
              <span>私密留言</span>
            </label>
          </div>
          <div class="comment-editor__actions">
            <button type="submit" class="comment-editor__button comment-editor__button--primary" @click.prevent="submitComment()">
              發佈留言
            </button>
          </div>
        </div>
      </form>
    </div>
    <div x-show="!isLoggedIn" style="text-align: center; padding: 2rem 0;">
      <p style="color: #555;">請先 <a :href="loginUrl" style="color: #007bff; text-decoration: underline;">登入</a> 以發表留言。</p>
    </div>
  </div>
  <!-- /.post-comment__footer -->
</div>

<script type="text/javascript">
function commentComponent({ postId, blog_id, allowComment }) {

  return {

    postId,
    blog_id,
    allowComment,
    /* -------------------------
       state
    -------------------------- */

    user: null,
    isLoggedIn: false,
    isOwner() {
      return this.isLoggedIn && this.user.is_blogger && this.user.blog.id === this.blog_id
    },

    comments: [],

    meta: {
      page: 1,
      pageSize: 10,
      pageCount: 1,
      totalCount: 0
    },

    loading: false,

    replyingTo: null,

    newComment: {
      content: "",
      visibility: 1
    },

    replyDraft: {},

    guest: {
      name: "",
      contact: ""
    },

    get loginUrl() {
        return '/auth/authorize?redirect_uri=' + encodeURIComponent(location.href)
    },

    /* -------------------------
       init
    -------------------------- */

    async init() {

      await this.fetchUser()

      await this.fetchComments()

    },

    /* -------------------------
       user
    -------------------------- */

    async fetchUser() {

      try {

        const res = await fetch("/auth/me")

        if (res.status === 401) {

          this.isLoggedIn = false
          return

        }

        const user = await res.json()

        this.user = user
        this.isLoggedIn = true

      } catch (e) {

        console.error("auth error", e)

      }

    },

    /* -------------------------
       comments
    -------------------------- */

    async fetchComments(page = 1) {

      this.loading = true

      const res = await fetch(
        `/blog/get-comments?postId=${this.postId}&page=${page}`
      )

      const json = await res.json()

      this.comments = json.data
      this.meta = json.meta

      this.comments.forEach(comment => {
        if (!this.replyDraft[comment.id]) {
          this.replyDraft[comment.id] = {
            content: "",
            visibility: "1"
          }
        }
      })

      this.loading = false

    },

    async loadMore() {

      if (this.meta.page >= this.meta.pageCount) return

      const nextPage = this.meta.page + 1

      const res = await fetch(
        `/blog/get-comments?postId=${this.postId}&page=${nextPage}`
      )

      const json = await res.json()

      this.comments = [...this.comments, ...json.data]

      this.meta = json.meta

    },

    /* -------------------------
       reply editor
    -------------------------- */

    toggleReply(commentId) {

      if (this.replyingTo === commentId) {

        this.replyingTo = null

      } else {

        this.replyingTo = commentId

        if (!this.replyDraft[commentId]) {

          this.replyDraft[commentId] = {
            content: "",
            visibility: "public"
          }

        }

      }

    },

    /* -------------------------
       submit comment
    -------------------------- */

    async submitComment() {

      if (!this.newComment.content.trim()) return

      const payload = {
        postId: this.postId,
        content: this.newComment.content,
        visibility: this.newComment.visibility,
        commenter: this.isLoggedIn ? this.user.display_name : this.guest.name,
        contact: this.isLoggedIn ? null : this.guest.contact
      }

      const res = await fetch("/blog/post-comment", {

        method: "POST",

        headers: {
          "Content-Type": "application/json"
        },

        body: JSON.stringify(payload)

      })

      if (!res.ok) {
        const errorData = await res.json()
        alert(errorData.message || "留言失敗,請稍後再試")
        return
      }

      const comment = await res.json()

      this.comments.push(comment)

      this.newComment.content = ""
    },

    /* -------------------------
       submit reply
    -------------------------- */

    async submitReply(commentId) {

      if (!this.isOwner()) return

      const draft = this.replyDraft[commentId]

      if (!draft || !draft.content.trim()) return

      const payload = {
        commentId: commentId,
        content: draft.content,
        visibility: draft.visibility
      }

      try {

        const res = await fetch("/blog/post-reply", {
          method: "POST",
          headers: {
            "Content-Type": "application/json"
          },
          body: JSON.stringify(payload)
        })

        if (!res.ok) {
          const errorData = await res.json()
          alert(errorData.message || "回覆失敗,請稍後再試")
          return
        }

        const reply = await res.json();

        const comment = this.comments.find(c => c.id === commentId)

        if (!comment.replies) {
          comment.replies = []
        }

        comment.replies.push(reply)

        draft.content = ""

        this.replyingTo = null

      } catch (e) {

        console.error("reply error", e)

      }

    },

    async changeCommentVisibility(commentId, visibility) {
      try {

        const res = await fetch("/blog/comments/visibility", {
          method: "PATCH",
          headers: {
            "Content-Type": "application/json"
          },
          body: JSON.stringify({ commentId, visibility: visibility == 'show' ? 1 : 2})
        })

        const data = await res.json()

        if (!res.ok) {

          alert(data.message || "操作失敗")

          return

        }

        const comment = this.comments.find(c => c.id === commentId)

        if (comment) {
          comment.visibility = visibility == 'show' ? 1 : 2;
        }

      } catch (e) {
        alert("系統錯誤,請稍後再試")
        console.error("show comment error", e)
      }

    },


    async deleteComment(commentId) {
      if (!confirm("確定要刪除此留言嗎?")) return

      try {

        const res = await fetch(`/blog/comments/${commentId}`, {
          method: "DELETE"
        })

        const data = await res.json()

        if (!res.ok) {

          alert(data.message || "操作失敗")

          return

        }

        this.comments = this.comments.filter(c => c.id !== commentId)

      } catch (e) {

        console.error("delete comment error", e)

      }

    },

    async changeReplyVisibility(commentId, replyId, visibility) {
      try {

        const res = await fetch("/blog/replies/visibility", {
          method: "PATCH",
          headers: {
            "Content-Type": "application/json"
          },
          body: JSON.stringify({ commentId, replyId, visibility: visibility == 'show' ? 1 : 2 })
        })

        const data = await res.json()

        if (!res.ok) {

          alert(data.message || "操作失敗")

          return

        }

        const comment = this.comments.find(c => c.id === commentId)

        const reply = comment.replies.find(r => r.id === replyId)

        if (reply) {
          reply.visibility = visibility == 'show' ? 1 : 2;
        }

      } catch (e) {

        console.error("change reply visibility error", e)

      }

    },

    async deleteReply(commentId, replyId) {

      if (!confirm("確定要刪除此回覆嗎?")) return

      try {

        const res = await fetch(`/blog/comments/${commentId}/replies/${replyId}`, {
          method: "DELETE"
        })

        const data = await res.json()

        if (!res.ok) {

          alert(data.message || "操作失敗")

          return

        }

        const comment = this.comments.find(c => c.id === commentId)

        comment.replies = comment.replies.filter(r => r.id !== replyId)

      } catch (e) {

        console.error("delete reply error", e)

      }

    },

    /* -------------------------
       guest avatar
    -------------------------- */

    guestAvatar() {

      const name = this.guest.name || "Guest"

      return `https://ui-avatars.com/api/?name=${encodeURIComponent(name)}`

    }

  }

}
</script>
 
                            
                             <section
  class="rcmd-related-posts"
  x-data="pixPostRecommendWidget({
    postId: '17346491535',
    limit: 3,
  })"
>
  <div class="rcmd-related-posts__inner">
    <div class="rcmd-related-posts__header">
      <div class="rcmd-related-posts__title-wrap">
        <span class="rcmd-related-posts__eyebrow">Recommended</span>
        <h2 class="rcmd-related-posts__title">你可能也喜歡</h2>
        <p class="rcmd-related-posts__desc">為你精選 3 篇值得延伸閱讀的內容</p>
      </div>
    </div>

    <!-- loading -->
    <div class="rcmd-related-posts__state" x-show="loading" x-cloak>
      <div class="rcmd-related-posts__loading">載入推薦文章中...</div>
    </div>

    <!-- error -->
    <div class="rcmd-related-posts__state" x-show="!loading && error" x-cloak>
      <div class="rcmd-related-posts__error" x-text="error"></div>
    </div>

    <!-- empty -->
    <div class="rcmd-related-posts__state" x-show="!loading && !error && posts.length === 0" x-cloak>
      <div class="rcmd-related-posts__empty">目前沒有推薦文章</div>
    </div>

    <!-- list -->
    <div class="rcmd-related-posts__grid" x-show="!loading && !error && posts.length > 0" x-cloak>
      <template x-for="post in posts" :key="post.id">
        <article class="rcmd-post-card">
          <a class="rcmd-post-card__link" :href="post.url">
            <div class="rcmd-post-card__image-wrap">
              <img
                class="rcmd-post-card__image"
                :src="getImage(post)"
                :alt="post.title"
                loading="lazy"
              >
            </div>

            <div class="rcmd-post-card__body">
              <div class="rcmd-post-card__meta">
                <time :datetime="post.date" x-text="formatDate(post)"></time>
              </div>

              <h3 class="rcmd-post-card__title" x-text="post.title"></h3>

              <p
                class="rcmd-post-card__summary"
                x-show="post.summary"
                x-text="post.summary"
              ></p>

              <div class="rcmd-post-card__footer">
                <span class="rcmd-post-card__readmore">閱讀文章</span>
              </div>
            </div>
          </a>
        </article>
      </template>
    </div>
  </div>
</section>
<script>
  function pixPostRecommendWidget(config = {}) {
    return {
      postId: config.postId || '',
      limit: Number(config.limit || 6),
      endpoint: '/blog/get-widget-data?name=pixPostRecommend&postId=',
      loading: false,
      error: '',
      posts: [],
      fallbackImage: 'https://picsum.photos/seed/pixpostrecommend/800/500',

      async init() {
        if (!this.postId) {
          this.error = '缺少 postId';
          return;
        }

        this.loading = true;
        this.error = '';

        try {
          const response = await fetch(`${this.endpoint}${encodeURIComponent(this.postId)}`, {
            method: 'GET',
            headers: {
              'Accept': 'application/json'
            }
          });

          if (!response.ok) {
            throw new Error(`HTTP ${response.status}`);
          }

          const result = await response.json();

          if (!result || Number(result.code) !== 0 || !Array.isArray(result.data)) {
            throw new Error('API 回傳格式不正確');
          }

          this.posts = result.data
            .slice(0, this.limit)
            .map(item => ({
              id: item.id,
              title: item.title || '',
              url: item.url || '#',
              published_at: item.published_at || '',
              date: item.date || '',
              time: item.time || '',
              timestamp: item.timestamp || 0,
              views: item.views || '',
              feature_image: item.feature_image || null,
              summary: item.summary || '',
            }));
        } catch (err) {
          console.error('[pixPostRecommendWidget]', err);
          this.error = '推薦文章載入失敗';
        } finally {
          this.loading = false;
        }
      },

      getImage(post) {
        return post.feature_image || this.fallbackImage;
      },

      formatDate(post) {
        if (post.date) {
          return post.date.replace(/-/g, '/');
        }
        return post.published_at || '';
      }
    };
  }
</script>
 

                            <div id="pixnet-ad-after-footer"></div>
                        </div>
                        <!-- /.article-footer -->
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div id="links">
        <div id="sidebar__inner">
            <div id="links-row-1">
                                     <div id="user-info" class="hslice box">
    <h4 class="box-title entry-title"></h4>
    <div class="box-text entry-content">
    <a class="user-img" href="#">
        <img
        src="https://s3.1px.tw/blog/common/avatar/blog_cover_dark.jpg"
        alt=""
        loading="lazy"
        style="width: 90px; height: 90px;"
        />
    </a>
    <div class="user-action hoverable">
        <button
        data-follow-state="關注"
        class="subscribe-btn member"
        ></button>
    </div>

    <dl>
        <dt>暱稱:</dt>
        <dd>iamcuteegirl</dd>
        <dt>分類:</dt>
        <dd>
            <a href="#">不設分類</a>
        </dd>

        <dt>好友:</dt>
        <dd>
        累積中
        <!-- 共75位{" "}
        <a href="#" id="user-info-open-friends-iframe">
            (看全部)
        </a> -->
        </dd>
        <dt>地區:</dt>
        <dd> </dd>
    </dl>
    </div>
</div>
 
                                     <div class="hslice box" data-identifier="pixHotArticle" id="hot-article">
    <h4 class="box-title entry-title"></h4>
    <div class="box-text entry-content">
        <ul id="hotArtUl">
        </ul>
    </div>

    <script>
        (function () {
            async function loadHotArticle() {

                const box = document.querySelector('.box[data-identifier="pixHotArticle"]');
                if (!box) return;

                const ul = box.querySelector("#hotArtUl");
                if (!ul) return;

                if (ul.dataset.loaded) return;
                ul.dataset.loaded = "1";

                try {

                const res = await fetch("/blog/get-widget-data?name=pixHotArticle", {
                    method: "GET",
                    headers: {
                    "Accept": "application/json"
                    }
                });

                const json = await res.json();

                if (json.code !== 0 || !Array.isArray(json.data)) return;

                const data = json.data;

                const fragment = document.createDocumentFragment();

                data.forEach(item => {

                    const li = document.createElement("li");

                    const a = document.createElement("a");
                    a.href = item.url;

                    const span = document.createElement("span");
                    span.textContent = "(" + item.views + ") ";

                    a.appendChild(span);
                    a.appendChild(document.createTextNode(item.title));

                    li.appendChild(a);
                    fragment.appendChild(li);

                });

                ul.appendChild(fragment);

                } catch (err) {
                console.error("pixHotArticle load failed", err);
                }
            }

            if (document.readyState === "loading") {
                document.addEventListener("DOMContentLoaded", loadHotArticle);
            } else {
                loadHotArticle();
            }

            })();
    </script>
</div>
 
                                     <div class="hslice box" data-identifier="pixCategory" id="category">
  <h4 class="box-title entry-title">
    
  </h4>

  <div class="box-text entry-content">
    <div class="box-more"></div>
  </div>

  <script type="text/javascript">
    (function () {

      function formatNumber(num) {
        return new Intl.NumberFormat().format(num || 0);
      }

      function renderFolder(item) {
        const wrapper = document.createElement("div");
        wrapper.className = "inner-box";

        const h6 = document.createElement("h6");
        h6.style.cursor = "pointer";

        const img = document.createElement("img");
        img.src = "//pixfs.1px.tw/blog/images/choc/plus.gif";
        img.width = 11;
        img.height = 11;
        img.alt = "toggle";

        const ul = document.createElement("ul");
        ul.className = "category-" + item.id;
        ul.style.display = "none";

        h6.appendChild(img);
        h6.appendChild(document.createTextNode(" " + item.name + " (" + (item.children?.length || 0) + ")"));

        h6.addEventListener("click", function () {
          const isHidden = ul.style.display === "none";
          ul.style.display = isHidden ? "block" : "none";
          img.src = isHidden
            ? "//pixfs.1px.tw/blog/images/choc/minus.gif"
            : "//pixfs.1px.tw/blog/images/choc/plus.gif";
        });

        (item.children || []).forEach(child => {

          const li = document.createElement("li");

          const a = document.createElement("a");
          a.href = child.url;
          a.textContent = child.name + " (" + formatNumber(child.post_count) + ")";

          li.appendChild(a);
          ul.appendChild(li);
        });

        wrapper.appendChild(h6);
        wrapper.appendChild(ul);

        return wrapper;
      }

      function renderCategoryList(data) {

        const ul = document.createElement("ul");

        data
          .filter(item => item.type === "category")
          .forEach(item => {

            const li = document.createElement("li");

            const a = document.createElement("a");
            a.href = item.url;
            a.textContent = item.name + " (" + formatNumber(item.post_count) + ")";

            li.appendChild(a);
            ul.appendChild(li);

          });

        return ul;
      }

      async function loadPixCategory() {

        const box = document.querySelector('.box[data-identifier="pixCategory"]');
        if (!box) return;

        const content = box.querySelector(".box-text.entry-content");

        try {

          const res = await fetch("/blog/get-widget-data?name=pixCategory");

          const json = await res.json();

          if (json.code !== 0) return;

          const data = json.data;

          data.forEach(item => {

            if (item.type === "folder") {
              content.appendChild(renderFolder(item));
            }

          });

          const categoryList = renderCategoryList(data);

          content.appendChild(categoryList);

        } catch (err) {
          console.error("pixCategory load failed", err);
        }
      }

      if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", loadPixCategory);
      } else {
        loadPixCategory();
      }

    })();
    </script>
</div>
 
                                     <div class="hslice box" data-identifier="pixLatestArticle" id="latest-article">
  <h4 class="box-title entry-title">
    
  </h4>

  <div class="box-text entry-content">
    <ul id="last-article-box">
    </ul>
  </div>

  <script>
    (function () {

      async function loadLatestArticle() {

        const box = document.querySelector('.box[data-identifier="pixLatestArticle"]');
        if (!box) return;

        const ul = box.querySelector("#last-article-box");
        if (!ul) return;

        try {

          const res = await fetch("/blog/get-widget-data?name=pixLatestArticle", {
            method: "GET",
            headers: {
              "Accept": "application/json"
            }
          });

          const json = await res.json();

          if (json.code !== 0 || !Array.isArray(json.data)) return;

          const data = json.data;

          const fragment = document.createDocumentFragment();

          data.forEach(item => {

            const li = document.createElement("li");

            const a = document.createElement("a");
            a.href = item.url;
            a.textContent = item.title;

            li.appendChild(a);
            fragment.appendChild(li);

          });

          ul.appendChild(fragment);

        } catch (err) {
          console.error("pixLatestArticle load failed", err);
        }
      }

      if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", loadLatestArticle);
      } else {
        loadLatestArticle();
      }

    })();
    </script>
</div>
 
                                     <div class="hslice box" data-identifier="pixLatestComment" id="last-comment">
  <h4 class="box-title entry-title">
    
  </h4>

  <div class="box-text entry-content">
    <div class="box-more"></div>
    <ul id="last-comment-box">
    </ul>
  </div>

  <script>
    (function () {

      function truncate(str, len = 30) {
        if (!str) return "";
        return str.length > len ? str.slice(0, len) + "..." : str;
      }

      async function loadLatestComment() {

        const box = document.querySelector('.box[data-identifier="pixLatestComment"]');
        if (!box) return;

        const ul = box.querySelector("#last-comment-box");
        if (!ul) return;

        if (ul.dataset.loaded) return;
        ul.dataset.loaded = "1";

        try {

          const res = await fetch("/blog/get-widget-data?name=pixLatestComment");
          const json = await res.json();

          if (json.code !== 0 || !Array.isArray(json.data)) return;

          const fragment = document.createDocumentFragment();

          json.data.forEach(item => {

            const li = document.createElement("li");

            const a = document.createElement("a");
            a.href = item.url;

            const title = truncate(item.post_title, 25);

            a.textContent =
              `[${item.time}] ${item.commenter} 於文章「${title}」`;

            li.appendChild(a);

            if (item.visibility === "public") {

              li.appendChild(document.createTextNode("留言:"));

              const br = document.createElement("br");
              li.appendChild(br);

              li.appendChild(document.createTextNode(item.content));

            } else {

              li.appendChild(
                document.createTextNode("發表了一則私密留言")
              );

            }

            fragment.appendChild(li);

          });

          ul.appendChild(fragment);

        } catch (err) {
          console.error("pixLatestComment load failed", err);
        }

      }

      if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", loadLatestComment);
      } else {
        loadLatestComment();
      }

    })();
    </script>
</div>
 
                                                      
                                                                     <div class="hslice box" data-identifier="pixHits" id="counter">
  <h4 class="box-title entry-title">參觀人氣</h4>
  <div class="box-text entry-content">
    <ul>
      <li>本日人氣:<span id="blog_hit_daily"></span></li>
      <li>累積人氣:<span id="blog_hit_total"></span></li>
    </ul>
  </div>

  <script>
    (function () {

      async function loadPixHits() {

        const box = document.querySelector("#counter");
        if (!box) return;

        const dailyEl = box.querySelector("#blog_hit_daily");
        const totalEl = box.querySelector("#blog_hit_total");

        if (!dailyEl || !totalEl) return;

        // 避免重複載入
        if (box.dataset.loaded) return;
        box.dataset.loaded = "1";

        try {

          const res = await fetch("/blog/get-widget-data?name=pixHits", {
            method: "GET",
            headers: {
              "Accept": "application/json"
            }
          });

          const json = await res.json();

          if (json.code !== 0 || !json.data) return;

          const data = json.data;

          dailyEl.textContent = data.views_today ?? "0";
          totalEl.textContent = data.views_total ?? "0";

        } catch (err) {
          console.error("pixHits load failed", err);
        }

      }

      if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", loadPixHits);
      } else {
        loadPixHits();
      }

    })();
    </script>
</div>
 
                             
                            </div>
            <div id="links-row-2">
                                <div id="sticky-sidebar-ad"></div>
            </div>
        </div>
    </div>
</div>
              <div id="footer">
    </div>

<img src="/api/track/pv?postId=17346491535" alt="Blog Stats" width="1" height="1" style="display:none;" />
<script type="text/javascript" async src="https://static.1px.tw/blog/v1p2/js/stats.min.js?v=1788288265"></script>
            </div>
            <div id="extradiv11"></div>
            <div id="extradiv10"></div>
            <div id="extradiv9"></div>
            <div id="extradiv8"></div>
          </div>
          <div id="extradiv7"></div>
          <div id="extradiv6"></div>
          <div id="extradiv5"></div>
          <div id="extradiv4"></div>
        </div>
        <div id="extradiv3"></div>
        <div id="extradiv2"></div>
        <div id="extradiv1"></div>
        <div id="extradiv0"></div>
      </div>
    </div>

     <footer
  style="
    padding: 16px;
    color: #777;
    font-size: 13px;
    line-height: 1.6;
    text-align: center;
  "
>
  <span>© 2026 <a href="https://www.pixnet.net" style="color: inherit; text-decoration: none;">PIXNET</a></span>
  <span aria-hidden="true">|</span>
  <span>文章與圖片權利屬原作者所有</span>
  <span aria-hidden="true">|</span>
  <a href="https://account.pixnet.tw/privacy" style="color: inherit; text-decoration: none;">隱私權政策</a>
  <span aria-hidden="true">|</span>
  <a href="https://account.pixnet.tw/regulation" style="color: inherit; text-decoration: none;">服務聲明</a>
</footer>
 

    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TRLQMPKX"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->

    <!-- Pixnet SDK -->
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function () {
            // datalayer push event
            window.dataLayer = window.dataLayer || [];
            window.dataLayer.push({
                'event': 'hydration_complete'
            })
        });
    </script>
    <!-- End Pixnet SDK -->

     <div
    x-data="adultWarning()"
    x-init="init()"
    x-show="visible"
    x-cloak
    class="aw-overlay"
    :class="{ 'mobile': isMobile }"
>
    <div class="aw-modal">

        <div class="aw-icon">
            ⚠️
        </div>

        <h2 class="aw-title">成人內容提醒</h2>

        <p class="aw-desc">
            本部落格內容僅限年滿十八歲者瀏覽。<br>
            若您未滿十八歲,請立即離開。
        </p>

        <p class="aw-sub">
            已滿十八歲者,亦請勿將內容提供給未成年人士。
        </p>

        <div class="aw-actions">
            <button class="aw-btn primary" @click="accept()">我已滿18歲</button>
            <button class="aw-btn secondary" @click="decline()">離開</button>
        </div>

    </div>
</div>

<script>
document.addEventListener('alpine:init', () => {
    Alpine.data('adultWarning', () => ({
        visible: false,
        isMobile: false,
        storageKey: 'adult_warning_accepted_at',

        init() {
            this.isMobile = window.innerWidth < 768;

            if (!window.PIXNET?.options?.AdultWarning) return;

            const ts = localStorage.getItem(this.storageKey);
            if (ts && Date.now() - parseInt(ts) < 4 * 60 * 60 * 1000) return;

            this.visible = true;

            // 🔒 防止背景滾動
            document.body.classList.add('modal-open');
        },

        accept() {
            localStorage.setItem(this.storageKey, Date.now().toString());
            this.close();
        },

        decline() {
            window.location.href = 'https://www.pixnet.net/'; // 或其他安全的網站
        },

        close() {
            this.visible = false;
            document.body.classList.remove('modal-open');
        }
    }))
})
</script>
 
    <!-- end of adult warning -->

    <!-- PIXNET Tracking -->
    <script async type="text/javascript" src="https://static.1px.tw/blog/v1p2/lib/tracking.min.js?v=1788288265"></script>
    <!-- End PIXNET Tracking -->
  </body>
</html>

Latest requests

# Url Url Source Date
1 https://iamcuteegirl.pixnet.net/bl… 2026-10-19 11:29:33
2 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:32
3 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:31
4 https://www.lysegarden.se/errorpag… 2026-10-19 11:29:29
5 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:28
6 https://www.thebolditalic.com/?gi=… 2026-10-19 11:29:26
7 https://auth.mediacorp.sg/u/login?… 2026-10-19 11:29:26
8 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:26
9 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:25
10 https://auth.acog.org/OAuth/SignIn… 2026-10-19 11:29:25
11 https://www.thebolditalic.com/?gi=… 2026-10-19 11:29:25
12 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:25
13 https://www.thebolditalic.com/?gi=… 2026-10-19 11:29:24
14 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:24
15 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:23
16 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:22
17 https://auth.mediacorp.sg/u/login?… 2026-10-19 11:29:22
18 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:20
19 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:19
20 https://www.texarkanatwins.com/%25… 2026-10-19 11:29:18