From 9fd8b6d713fd000c8912c7a105724d1e6315ac94 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期三, 17 九月 2025 10:38:50 +0800
Subject: [PATCH] 缩放

---
 src/views/followvisit/record/detailpage/index.vue |  637 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 623 insertions(+), 14 deletions(-)

diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index e2ff50a..0f11d3e 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -18,7 +18,7 @@
                 >鍙睍绀烘湰娆℃湇鍔′俊鎭�</el-button
               >
             </div>
-            <div style="margin-left: 20px; color: #59a0f0">
+            <!-- <div style="margin-left: 20px; color: #59a0f0">
               <el-link
                 href="https://9.208.2.207:6060/search-homepage"
                 target="_blank"
@@ -26,6 +26,23 @@
               >
                 鍓嶅線CDSS鏌ヨ
               </el-link>
+            </div> -->
+            <div class="merge-controls" v-if="Whetherall">
+              <el-button
+                type="primary"
+                @click="toggleMergeMode"
+                :disabled="selectedServices.length < 2"
+              >
+                {{ isMergeMode ? "鍙栨秷鍚堝苟" : "鍚堝苟缂栬緫闂嵎" }}
+              </el-button>
+              <el-button
+                v-if="isMergeMode"
+                type="success"
+                @click="openMergeDialog"
+                :disabled="selectedServices.length < 2"
+              >
+                寮�濮嬪悎骞� (宸查�� {{ selectedServices.length }} 涓湇鍔�)
+              </el-button>
             </div>
           </div>
           <!-- <el-button type="success">闅忚鍚庣煭淇�</el-button> -->
@@ -36,7 +53,14 @@
           :data="logsheetlist"
           :row-class-name="tableRowClassName"
           style="width: 100%"
+          @selection-change="handleSelectionChange"
         >
+          <el-table-column
+            type="selection"
+            width="55"
+            :selectable="checkSelectable"
+            v-if="Whetherall"
+          ></el-table-column>
           <el-table-column
             prop="sendname"
             align="center"
@@ -213,8 +237,24 @@
         </el-table>
       </div>
     </div>
-
+    <!-- 娣诲姞鍚堝苟缂栬緫瀵硅瘽妗� -->
+    <el-dialog
+      title="鍚堝苟缂栬緫闂嵎"
+      :visible.sync="mergeDialogVisible"
+      width="80%"
+      top="5vh"
+      v-dialogDrag
+    >
+      <MergeAndModify
+        v-if="mergeDialogVisible"
+        :selected-services="selectedServices"
+        :patid="patid"
+        @save="handleMergeSave"
+        @cancel="mergeDialogVisible = false"
+      />
+    </el-dialog>
     <div class="action-container">
+      <!-- 闅忚鍐呭 -->
       <div class="call-action">
         <div class="call-container">
           <!-- <div class="call-header">
@@ -278,7 +318,7 @@
                           </el-radio-group>
                         </div>
                         <div
-                          v-if="item.showAppendInput"
+                          v-if="item.showAppendInput || item.answerps"
                           class="append-input-container"
                         >
                           <el-input
@@ -342,8 +382,18 @@
                           {{ index + 1 }}銆乕闂瓟]<span>{{
                             item.scriptContent
                           }}</span>
+                          <span v-if="item.valueType == 3">(鍙兘杈撳叆鏁板瓧)</span>
                         </div>
-                        <div class="dev-xx">
+                        <div class="dev-xx" v-if="item.valueType == 3">
+                          <el-input
+                            type="text"
+                            v-numeric-only
+                            placeholder="璇疯緭鍏ョ瓟妗�"
+                            v-model="item.scriptResult"
+                          >
+                          </el-input>
+                        </div>
+                        <div class="dev-xx" v-else>
                           <el-input
                             type="textarea"
                             :rows="2"
@@ -398,15 +448,25 @@
                       <div class="scriptTopic-dev" :key="index" v-else>
                         <div class="dev-text">
                           {{ index + 1 }}銆乕闂瓟]<span>{{
-                            item.questiontext
+                            item.scriptContent
                           }}</span>
+                          <span v-if="item.valueType == 3">(鍙兘杈撳叆鏁板瓧)</span>
                         </div>
-                        <div class="dev-xx">
+                        <div class="dev-xx" v-if="item.valueType == 3">
+                          <el-input
+                            type="text"
+                            v-numeric-only
+                            placeholder="璇疯緭鍏ョ瓟妗�"
+                            v-model="item.scriptResult"
+                          >
+                          </el-input>
+                        </div>
+                        <div class="dev-xx" v-else>
                           <el-input
                             type="textarea"
                             :rows="2"
                             placeholder="璇疯緭鍏ョ瓟妗�"
-                            v-model="item.matchedtext"
+                            v-model="item.scriptResult"
                             clearable
                           >
                           </el-input>
@@ -490,6 +550,7 @@
           </div>
         </div>
       </div>
+      <!-- 浜哄伐澶勭悊 -->
       <div class="manual-action">
         <div class="Followuserinfos">
           <div>
@@ -517,6 +578,46 @@
                     @click="sendAgain()"
                     >鍐嶆闅忚</el-button
                   >
+                </div>
+                <div class="tag-selector-container">
+                  <el-select
+                    v-model="selectedTag"
+                    placeholder="璇烽�夋嫨寮傚父鐘舵��"
+                    clearable
+                    style="width: 150px; margin-right: 10px"
+                  >
+                    <el-option
+                      v-for="item in tagOptions"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    >
+                      <span style="display: flex; align-items: center">
+                        <span
+                          class="color-indicator"
+                          :style="{ backgroundColor: item.color }"
+                        ></span>
+                        <span>{{ item.label }}</span>
+                      </span>
+                    </el-option>
+                  </el-select>
+
+                  <!-- 褰撳墠閫夋嫨鐨勯鑹叉寚绀哄櫒 -->
+                  <div
+                    v-if="selectedTag"
+                    class="color-indicator selected-indicator"
+                    :style="{ backgroundColor: getSelectedTagColor() }"
+                  ></div>
+
+                  <!-- 鏍囪璇存槑鎻愮ず -->
+                  <el-tooltip
+                    v-if="selectedTag"
+                    effect="light"
+                    :content="getSelectedDescription()"
+                    placement="top"
+                  >
+                    <i class="el-icon-info tag-info-icon"></i>
+                  </el-tooltip>
                 </div>
               </div>
               <el-row>
@@ -613,6 +714,9 @@
                   <el-button plain type="info" @click="Editsingletaskson('5')"
                     >涓績闅忚</el-button
                   >
+                  <el-button type="primary" round @click="sendAgainmsg"
+                    >鐭俊鍙戦��</el-button
+                  >
                 </div>
               </el-form-item>
             </el-form>
@@ -674,7 +778,53 @@
         </div>
       </div>
     </div>
-
+    <!-- 鐭俊鍙戦�佸璇濇 -->
+    <el-dialog title="鐭俊鍙戦��" :visible.sync="smsDialogVisible">
+      <!-- 娉ㄦ剰杩欓噷浣跨敤浜� smsDialogVisible 浠ュ尯鍒嗗凡鏈夌殑 dialogFormVisible -->
+      <el-form ref="smsForm" :model="form" label-width="80px">
+        <el-form-item label="鎮h�呭悕绉�">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="form.sendname"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="骞撮緞">
+          <el-input style="width: 400px" disabled v-model="form.age"></el-input>
+        </el-form-item>
+        <el-form-item label="鐢佃瘽">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="userform.telcode"
+          ></el-input>
+          <!-- 娉ㄦ剰杩欓噷鍙兘浣跨敤 userform.telcode -->
+        </el-form-item>
+        <el-form-item label="绉戝">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="form.deptname"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="鐥呭尯">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="form.leavehospitaldistrictname"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="鐭俊鍐呭">
+          <el-input type="textarea" v-model="smsContent"></el-input>
+          <!-- 寤鸿浣跨敤鐙珛鐨� smsContent 鍙橀噺 -->
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="smsDialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="sendSms">纭鍙戦��</el-button>
+        <!-- 娉ㄦ剰鏂规硶鍚嶆敼涓� sendSms -->
+      </div>
+    </el-dialog>
     <el-dialog
       title="鎮h�呭啀娆¢殢璁�"
       v-dialogDrags
@@ -836,6 +986,7 @@
   updatePersonVoices,
   addPersonVoices,
   query360PatInfo,
+  sendMsg,
 } from "@/api/AiCentre/index";
 import {
   messagelistpatient,
@@ -843,11 +994,73 @@
   listcontactinformation,
 } from "@/api/patient/homepage";
 import CallButton from "@/components/CallButton";
+import MergeAndModify from "./MergeAndModify.vue";
 export default {
   components: {
     CallButton,
+    MergeAndModify,
   },
+  directives: {
+    numericOnly: {
+      bind(el, binding, vnode) {
+        // 灏濊瘯鑾峰彇瀹為檯鐨刬nput鍏冪礌
+        const input = el.tagName === "INPUT" ? el : el.querySelector("input");
+        if (!input) {
+          console.warn("v-numeric-only: 鏈壘鍒癷nput鍏冪礌");
+          return;
+        }
 
+        const handleInput = function (event) {
+          const oldValue = input.value;
+          const newValue = oldValue.replace(/[^\d]/g, "");
+          if (newValue !== oldValue) {
+            input.value = newValue;
+            // 瑙﹀彂input浜嬩欢锛岄�氱煡v-model鏇存柊
+            input.dispatchEvent(new Event("input", { bubbles: true })); // 娉ㄦ剰bubbles
+          }
+        };
+
+        const handlePaste = function (event) {
+          event.preventDefault();
+          const clipboardData = event.clipboardData || window.clipboardData;
+          const pastedData = clipboardData.getData("text");
+          const numericValue = pastedData.replace(/[^\d]/g, "");
+
+          // 妯℃嫙鍦ㄥ厜鏍囦綅缃彃鍏ョ函鏁板瓧鏂囨湰
+          const start = input.selectionStart;
+          const end = input.selectionEnd;
+          input.value =
+            input.value.substring(0, start) +
+            numericValue +
+            input.value.substring(end);
+          // 璋冩暣鍏夋爣浣嶇疆
+          const newCursorPos = start + numericValue.length;
+          input.setSelectionRange(newCursorPos, newCursorPos);
+
+          // 瑙﹀彂input浜嬩欢
+          input.dispatchEvent(new Event("input", { bubbles: true }));
+        };
+
+        input.addEventListener("input", handleInput);
+        input.addEventListener("paste", handlePaste);
+
+        // 瀛樺偍寮曠敤浠ヤ究瑙g粦
+        el._numericOnly = {
+          inputHandle: handleInput,
+          pasteHandle: handlePaste,
+          inputEl: input,
+        };
+      },
+      unbind(el) {
+        if (el._numericOnly) {
+          const { inputHandle, pasteHandle, inputEl } = el._numericOnly;
+          inputEl.removeEventListener("input", inputHandle);
+          inputEl.removeEventListener("paste", pasteHandle);
+          delete el._numericOnly;
+        }
+      },
+    },
+  },
   dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
   data() {
     const validatePhone = (rule, value, callback) => {
@@ -882,6 +1095,33 @@
       tableDatatop: [], //棰樼洰琛�
       voiceDatatop: [], //棰樼洰琛�
       dynamicTags: [],
+      isMergeMode: false,
+      mergeDialogVisible: false,
+      selectedServices: [], // 閫変腑鐨勬湇鍔″垪琛�
+      selectedTag: "",
+      tagOptions: [
+        {
+          value: "0",
+          label: "姝e父",
+          type: "normal",
+          color: "#7ff5e1",
+          description: "鎮h�呮儏鍐垫甯革紝鏃犻渶鐗瑰埆鍏虫敞",
+        },
+        {
+          value: "1",
+          label: "寮傚父",
+          type: "abnormal",
+          color: "#f75c5c",
+          description: "鎮h�呭瓨鍦ㄥ紓甯告儏鍐碉紝闇�瑕侀噸鐐瑰叧娉�",
+        },
+        {
+          value: "2",
+          label: "璀﹀憡",
+          type: "warning",
+          color: "#fbfb4a",
+          description: "鎮h�呮儏鍐甸渶瑕佽鍛婃敞鎰忥紝鍙兘瀛樺湪椋庨櫓",
+        },
+      ],
       zcrules: {
         resource: [
           { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" },
@@ -1009,6 +1249,8 @@
         },
       ],
       userform: {},
+      smsDialogVisible: false, // 鎺у埗鐭俊瀵硅瘽妗嗘樉绀�
+      smsContent: "", // 瀛樺偍鐭俊鍐呭
       Whetherall: true, //鏄惁鍏ㄩ儴璁板綍灞曠ず
       dialogFormVisible: false,
       Voicetype: 0, //鏄惁涓鸿闊虫湇鍔�
@@ -1097,6 +1339,8 @@
     },
     //鎮h��360璺宠浆
     gettoken360(sfzh, drcode, drname) {
+      this.$modal.msgWarning("360鍔熻兘鏆傛湭寮�閫�");
+      return; // 闃绘鍚庣画浠g爜鎵ц
       this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
       if (this.postData.XiaoXiTou.ZuHuMC == "涓芥按甯備腑鍖婚櫌") {
         this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
@@ -1115,7 +1359,7 @@
     getuserinfo() {
       const queryParams = {
         pid: Number(this.patid),
-        allhosp: "0",
+        allhosp: "0", //1浣忛櫌2闂ㄨ瘖3浣撴4鍑洪櫌
       };
       // 鎮h�呭熀纭�淇℃伅
       messagelistpatient(queryParams).then((response) => {
@@ -1222,6 +1466,13 @@
       let excep = "";
       const promises = [];
       this.tableDatatop.forEach((item) => {
+        if (item.valueType == 3 && item.scriptResult) {
+          // 楠岃瘉鏄惁涓烘湁鏁堟暟瀛�
+          if (!/^\d+$/.test(item.scriptResult)) {
+            this.$message.error(`闂 "${item.scriptContent}" 蹇呴』杈撳叆鏁板瓧`);
+            return;
+          }
+        }
         var objs = item.svyLibTemplateTargetoptions.find(
           (items) => items.optioncontent == item.scriptResult
         );
@@ -1252,6 +1503,7 @@
           promises.push(serviceSubtaskDetailadd(obj));
         }
       });
+
       // 浣跨敤 Promise.all 绛夊緟鎵�鏈夊紓姝ユ搷浣滃畬鎴�
       Promise.all(promises)
         .then((results) => {
@@ -1312,6 +1564,7 @@
           console.error("鍙戠敓閿欒锛�", error);
         });
     },
+    // 鐢佃瘽============================
     // 楠岃瘉鐢佃瘽鍙风爜鏍煎紡骞惰繑鍥為敊璇俊鎭�
     validatePhoneNumber(phone) {
       if (!phone) {
@@ -1343,7 +1596,6 @@
         };
       }
     },
-
     // 浣跨敤绀轰緥
     isValidPhone(phone) {
       return this.validatePhoneNumber(phone).isValid;
@@ -1367,7 +1619,6 @@
         });
       });
     },
-
     // 澶勭悊閫氳瘽鐘舵�佸彉鍖�
     handleCallStatusChange(status) {
       console.log(status, "status");
@@ -1389,7 +1640,6 @@
         this.$message.error(`鍛煎彨澶辫触: ${status.text}`);
       }
     },
-
     // 缁撴潫褰撳墠閫氳瘽
     endCurrentCall() {
       if (!this.currentCall) return;
@@ -1497,6 +1747,7 @@
 
           this.logsheetlist = res.rows[0].serviceSubtaskList;
           this.templateid = this.logsheetlist[0].templateid;
+          this.selectedTag = this.logsheetlist[0].excep;
           const targetDate = new Date(this.form.longSendTime); // 鐩爣鏃ユ湡
           const now = new Date(); // 褰撳墠鏃堕棿
           if (now < targetDate && this.form.sendstate == 2) {
@@ -1516,6 +1767,34 @@
           this.getsearchrResults();
         }
       });
+    },
+    // 璋冭捣鐭俊鍙戦�佸璇濇
+    sendAgainmsg() {
+      this.smsDialogVisible = true;
+      // 鍙互鍦ㄨ繖閲屽垵濮嬪寲 smsContent锛屼緥濡� this.smsContent = '';
+    },
+
+    // 鍙戦�佺煭淇$殑鏂规硶
+    sendSms() {
+      // 杩欓噷璋冪敤浣犵殑鐭俊鍙戦�� API
+      // 鍋囪 API 涓� sendMsg锛屽弬鏁板彲鑳介渶瑕佹牴鎹疄闄呮儏鍐佃皟鏁�
+      sendMsg({
+        phone: this.userform.telcode, // 纭繚鐢佃瘽鍙风爜瀛楁姝g‘
+        content: this.smsContent,
+      })
+        .then((res) => {
+          if (res.code == 200) {
+            this.$modal.msgSuccess("鍙戦�佹垚鍔�");
+            this.smsDialogVisible = false; // 鍏抽棴瀵硅瘽妗�
+            this.smsContent = ""; // 娓呯┖鍐呭
+          } else {
+            this.$modal.msgError("鍙戦�佸け璐�");
+          }
+        })
+        .catch((error) => {
+          console.error("鍙戦�佺煭淇″け璐�:", error);
+          this.$modal.msgError("鍙戦�佸け璐�");
+        });
     },
     Editsingletaskson(son) {
       let objson = {};
@@ -1546,6 +1825,7 @@
             (item) => item.id == this.id
           );
           objson.remark = this.form.remark;
+          objson.excep = this.selectedTag;
           if (sendstate) objson.sendstate = sendstate;
           Editsingletaskson(objson).then((res) => {
             if (res.code) {
@@ -1570,6 +1850,30 @@
       }
       return "";
     },
+    getSelectedTagType() {
+      if (!this.selectedTag) return "";
+      const tag = this.tagOptions.find(
+        (item) => item.value === this.selectedTag
+      );
+      return tag ? tag.type : "";
+    },
+
+    getSelectedTagColor() {
+      if (!this.selectedTag) return "";
+      const tag = this.tagOptions.find(
+        (item) => item.value === this.selectedTag
+      );
+      return tag ? tag.color : "";
+    },
+
+    getSelectedDescription() {
+      if (!this.selectedTag) return "";
+      const tag = this.tagOptions.find(
+        (item) => item.value === this.selectedTag
+      );
+      return tag ? tag.description : "";
+    },
+
     // 璋冭捣鍐嶆鍙戦��
     sendAgain() {
       document.querySelector("#app").scrollTo(0, 0);
@@ -1642,7 +1946,7 @@
 
       this.tableDatatop[questionIndex].showAppendInput =
         selectedOptionObj.appendflag == 1;
-        console.log(this.tableDatatop);
+      console.log(this.tableDatatop);
 
       // if (!this.tableDatatop[questionIndex].showAppendInput) {
       //   this.tableDatatop[questionIndex].answerps = ""; // 娓呴櫎闄勫姞淇℃伅
@@ -1793,6 +2097,60 @@
       return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
     },
     updateScore(a, b, c) {},
+    // 鍚堝苟淇敼鐩稿叧=============================
+    toggleMergeMode() {
+      this.isMergeMode = !this.isMergeMode;
+      if (!this.isMergeMode) {
+        this.selectedServices = [];
+      }
+    },
+
+    handleSelectionChange(selection) {
+      this.selectedServices = selection
+        .filter(
+          (item) => !item.preachformson || !item.preachformson.includes("3")
+        )
+        .map((item) => ({
+          id: item.id,
+          taskid: item.taskid,
+          taskName: item.taskName,
+          sendname: item.sendname,
+        }));
+    },
+    checkSelectable(row, index) {
+      // 褰� sendstate 涓� 6 鏃朵笉鍙��
+      return row.sendstate !== 6;
+    },
+    openMergeDialog() {
+      if (this.selectedServices.length < 2) {
+        this.$message.warning("璇疯嚦灏戦�夋嫨2涓棶鍗锋湇鍔¤繘琛屽悎骞�");
+        return;
+      }
+      this.mergeDialogVisible = true;
+    },
+
+    handleMergeSave(mergedData) {
+      // 澶勭悊鍚堝苟淇濆瓨閫昏緫
+      this.mergeDialogVisible = false;
+      this.isMergeMode = false;
+      this.selectedServices = [];
+
+      // 鏄剧ず淇濆瓨缁撴灉
+      if (mergedData.successCount == mergedData.totalCount) {
+        this.$message.success(`鎴愬姛淇濆瓨 ${mergedData.successCount} 涓棶鍗穈);
+      } else if (mergedData.successCount > 0) {
+        this.$message.warning(
+          `鎴愬姛淇濆瓨 ${mergedData.successCount} 涓棶鍗凤紝澶辫触 ${
+            mergedData.totalCount - mergedData.successCount
+          } 涓猔
+        );
+      } else {
+        this.$message.error("鎵�鏈夐棶鍗蜂繚瀛樺け璐�");
+      }
+
+      // 鍒锋柊鏁版嵁
+      this.getTaskservelist();
+    },
   },
 };
 </script>
@@ -1822,7 +2180,22 @@
     height: 100%; /* 纭繚楂樺害缁ф壙 */
   }
 }
+.numeric-input {
+  position: relative;
+}
 
+.numeric-input::after {
+  content: "鍙兘杈撳叆鏁板瓧";
+  position: absolute;
+  right: 8px;
+  top: 50%;
+  transform: translateY(-50%);
+  font-size: 12px;
+  color: #999;
+  background: #f5f5f5;
+  padding: 2px 6px;
+  border-radius: 4px;
+}
 .call-container {
   padding: 20px;
   background: #fff;
@@ -1852,7 +2225,11 @@
     margin-top: 20px;
   }
 }
-
+.merge-controls {
+  background: #f5f7fa;
+  border-radius: 4px;
+  margin-left: 20px;
+}
 .Followuserinfo {
   margin: 10px 10px 0 10px;
   align-items: center;
@@ -2061,7 +2438,54 @@
     top: 0;
   }
 }
+.tag-selector-container {
+  display: flex;
+  align-items: center;
+  margin: 0 30px;
+}
 
+.color-indicator {
+  width: 16px;
+  height: 16px;
+  border-radius: 3px;
+  margin-right: 8px;
+  display: inline-block;
+}
+
+.selected-indicator {
+  margin-left: 10px;
+  width: 20px;
+  height: 20px;
+}
+
+.tag-info-icon {
+  margin-left: 10px;
+  color: #909399;
+  cursor: pointer;
+  font-size: 16px;
+}
+
+/* 纭繚閫夋嫨鍣ㄩ�夐」涓篃鏄剧ず棰滆壊鍧� */
+.el-select-dropdown__item {
+  display: flex;
+  align-items: center;
+}
+
+.tag-normal {
+  background-color: #7ff5e1;
+}
+.tag-abnormal {
+  background-color: #f75c5c;
+}
+.tag-warning {
+  background-color: #fbfb4a;
+}
+
+.tag-info {
+  margin-left: 10px;
+  color: #909399;
+  cursor: pointer;
+}
 ::v-deep.offside-value .el-radio__label {
   color: #fff;
 }
@@ -2111,4 +2535,189 @@
   color: #080808 !important;
   cursor: not-allowed;
 }
+/* 鍘熸湁鐨勬牱寮忎繚鎸佷笉鍙橈紝娣诲姞浠ヤ笅鍝嶅簲寮忎唬鐮� */
+
+.Followupdetailspage {
+  margin: 10px;
+  display: flex;
+  flex-direction: column;
+  gap: 20px;
+}
+
+.action-container {
+  display: flex;
+  flex-direction: row; /* 榛樿妯悜鎺掑垪 */
+  gap: 20px;
+  margin: 0 10px 20px 10px;
+
+  /* 褰撶缉鏀炬瘮渚嬪ぇ浜�100%鎴栧睆骞曞搴﹁緝灏忔椂鏀逛负涓婁笅鎺掑垪 */
+  @media screen and (max-width: 1200px), (min-resolution: 1.1dppx) {
+    flex-direction: column;
+
+    .call-action, .manual-action {
+      width: 100% !important;
+    }
+  }
+}
+
+.call-action {
+  width: 65%;
+  min-width: 0;
+}
+
+.manual-action {
+  flex: 1;
+  min-width: 0;
+}
+
+/* 璋冩暣鍐呴儴鍏冪礌鐨勫搷搴斿紡甯冨眬 */
+.Followuserinfos {
+  .el-form {
+    /* 琛ㄥ崟鍝嶅簲寮忚皟鏁� */
+    .el-row {
+      margin: 0 -10px;
+    }
+
+    .el-col {
+      padding: 0 10px;
+    }
+
+    @media screen and (max-width: 768px) {
+      .el-col {
+        width: 100%;
+        margin-bottom: 15px;
+
+        &:last-child {
+          margin-bottom: 0;
+        }
+      }
+    }
+  }
+}
+
+/* 璋冩暣琛ㄦ牸鐨勫搷搴斿紡琛ㄧ幇 */
+.el-table {
+  ::v-deep .el-table__body-wrapper {
+    overflow-x: auto;
+  }
+
+  /* 鍦ㄥ皬灞忓箷涓婅皟鏁磋〃鏍煎垪瀹� */
+  @media screen and (max-width: 992px) {
+    .el-table-column {
+      min-width: 120px;
+    }
+  }
+}
+
+/* 璋冩暣鏍囩閫夋嫨鍣ㄧ殑鍝嶅簲寮忓竷灞� */
+.tag-selector-container {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  gap: 10px;
+
+  @media screen and (max-width: 576px) {
+    flex-direction: column;
+    align-items: flex-start;
+
+    .el-select {
+      width: 100%;
+      margin-right: 0 !important;
+    }
+  }
+}
+
+/* 璋冩暣鎸夐挳缁勭殑鍝嶅簲寮忓竷灞� */
+.el-form-item.label-processing-opinion {
+  .el-button-group {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 10px;
+
+    .el-button {
+      flex: 1;
+      min-width: 120px;
+    }
+  }
+}
+
+/* 璋冩暣閫夐」鍗$殑鍝嶅簲寮忚〃鐜� */
+.el-tabs {
+  ::v-deep .el-tabs__nav-wrap {
+    overflow-x: auto;
+    white-space: nowrap;
+
+    &::after {
+      display: none;
+    }
+  }
+}
+
+/* 璋冩暣棰勮鍖哄煙鐨勫搷搴斿紡琛ㄧ幇 */
+.preview-left {
+  @media screen and (max-width: 768px) {
+    margin: 10px;
+    padding: 15px;
+
+    .topic-dev, .scriptTopic-dev {
+      margin-bottom: 15px;
+    }
+  }
+}
+
+/* 璋冩暣瀵硅瘽妗嗙殑鍝嶅簲寮忚〃鐜� */
+.el-dialog {
+  @media screen and (max-width: 992px) {
+    width: 90% !important;
+    margin-top: 5vh !important;
+
+    .el-dialog__body {
+      padding: 15px;
+    }
+  }
+
+  @media screen and (max-width: 576px) {
+    width: 95% !important;
+
+    .el-form-item {
+      margin-bottom: 15px;
+    }
+  }
+}
+
+/* 纭繚鍐呭鍦ㄧ缉鏀炬椂淇濇寔鍙鎬� */
+.headline {
+  font-size: clamp(18px, 2vw, 24px); /* 浣跨敤clamp鍑芥暟纭繚瀛椾綋澶у皬鍦ㄥ悎鐞嗚寖鍥村唴 */
+}
+
+/* 涓虹Щ鍔ㄨ澶囦紭鍖栨粴鍔ㄤ綋楠� */
+@media screen and (max-width: 768px) {
+  .Followuserinfo, .Followuserinfos {
+    padding: 15px;
+    margin: 5px;
+  }
+
+  .CONTENT {
+    min-height: auto;
+    padding: 5px;
+  }
+}
+
+/* 缂╂斁妫�娴嬫牱寮� */
+@media screen and (min-resolution: 1.1dppx),
+       screen and (-webkit-min-device-pixel-ratio: 1.1),
+       screen and (max-width: 1200px) {
+  .action-container {
+    flex-direction: column;
+  }
+
+  .call-action, .manual-action {
+    width: 100%;
+  }
+
+  /* 璋冩暣鍐呴儴鍏冪礌闂磋窛 */
+  .call-container, .Followuserinfos {
+    margin-bottom: 20px;
+  }
+}
 </style>

--
Gitblit v1.9.3