Przeglądaj źródła

益寿缘医生端-更新用户电话展示

cgp 1 miesiąc temu
rodzic
commit
04a444ec8b
1 zmienionych plików z 41 dodań i 155 usunięć
  1. 41 155
      src/views/his/doctorTask/index.vue

+ 41 - 155
src/views/his/doctorTask/index.vue

@@ -59,7 +59,30 @@
     <el-table border v-loading="loading" :data="doctorTaskList">
       <el-table-column label="销售" align="center" prop="companyUserName"/>
       <el-table-column label="客户" align="center" prop="name"/>
-      <el-table-column label="电话" align="center" prop="phone"/>
+      <el-table-column label="电话" align="center" prop="phone">
+        <template slot-scope="scope">
+          <div style="display: flex; align-items: center; gap: 8px;">
+            <!-- 显示解密后的电话,或原始加密电话,或占位符 -->
+            <span class="detail-value">
+        {{ scope.row._decryptedPhone !== undefined
+              ? (scope.row._decryptedPhone || '—')
+              : (scope.row.phone ? '******' : '—') }}
+      </span>
+
+            <!-- 放大镜图标按钮 -->
+            <el-button
+              v-if="scope.row.id"
+              type="text"
+              icon="el-icon-search"
+              size="mini"
+              :loading="scope.row._phoneLoading"
+              @click="fetchDecryptedPhoneForRow(scope.row)"
+              title="点击查看真实号码"
+              style="padding: 0; margin-left: 0;"
+            ></el-button>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="客户头像" align="center" width="100px">
         <template slot-scope="scope">
           <div v-if="scope.row.avatar">
@@ -118,141 +141,6 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-
-    <!-- 详情对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
-      <el-form :model="form" label-width="100px" size="small">
-        <el-row :gutter="20">
-
-          <el-col :span="12">
-            <el-form-item label="客户:">
-              <span class="detail-value">{{ form.name || '—' }}</span>
-            </el-form-item>
-          </el-col>
-
-
-          <el-col :span="12">
-            <el-form-item label="客户电话:">
-              <div style="display: flex; align-items: center; gap: 8px;">
-                <span class="detail-value">
-                  {{form.phone ? form.phone : '—' }}
-                </span>
-              </div>
-              <!--              <el-button-->
-              <!--                v-if="form.id"-->
-              <!--                type="text"-->
-              <!--                icon="el-icon-search"-->
-              <!--                size="mini"-->
-              <!--                @click="fetchDecryptedPhone(form.id)"-->
-              <!--                :loading="phoneLoading"-->
-              <!--                title="点击查看真实号码"-->
-              <!--                class="phone-decrypt-btn"-->
-              <!--              ></el-button>-->
-            </el-form-item>
-          </el-col>
-
-          <el-col :span="12">
-            <el-form-item label="销售:">
-              <span class="detail-value">{{ form.companyUserName || '—' }}</span>
-            </el-form-item>
-          </el-col>
-
-          <el-col :span="12">
-            <el-form-item label="订单号:">
-              <span class="detail-value">{{ form.orderCode || '—' }}</span>
-            </el-form-item>
-          </el-col>
-
-
-          <el-col :span="24">
-            <el-form-item label="套餐包:">
-              <span class="detail-value">{{ form.packageName || '—' }}</span>
-            </el-form-item>
-          </el-col>
-
-
-          <el-form-item label="处理状态:">
-            <el-tag
-              v-if="form.status === 0"
-              type="danger"
-              size="small"
-            >待处理</el-tag>
-            <el-tag
-              v-else-if="form.status === 1"
-              type="success"
-              size="small"
-            >已处理</el-tag>
-            <span v-else>—</span>
-          </el-form-item>
-
-          <el-col :span="24">
-            <el-form-item label="备注:">
-              <span class="detail-value">{{ form.remark || '—' }}</span>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancel">关 闭</el-button>
-      </div>
-    </el-dialog>
-
-
-    <!-- 销售处理sop任务详情对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
-      <el-form :model="form" label-width="100px" size="small">
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="医生:">
-              <span class="detail-value">{{ form.doctorName || '—' }}</span>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="客户:">
-              <span class="detail-value">{{ form.name || '—' }}</span>
-            </el-form-item>
-          </el-col>
-
-          <el-col :span="12">
-            <el-form-item label="客户电话:">
-              <div style="display: flex; align-items: center; gap: 8px;">
-                <span class="detail-value">
-                  {{ decryptedPhone || (form.phone ? '******' : '—') }}
-                </span>
-                <el-button
-                  v-if="form.id"
-                  type="text"
-                  icon="el-icon-search"
-                  size="mini"
-                  @click="fetchDecryptedPhone(form.id)"
-                  :loading="phoneLoading"
-                  title="点击查看真实号码"
-                  style="padding: 0; margin-left: 0;"
-                ></el-button>
-              </div>
-            </el-form-item>
-          </el-col>
-
-          <el-col :span="12">
-            <el-form-item label="处理状态:">
-              <dict-tag :options="statusOptions" :value="form.status"/>
-            </el-form-item>
-          </el-col>
-
-          <el-col :span="24">
-            <el-form-item label="备注:">
-              <span class="detail-value">{{ form.remark || '—' }}</span>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancel">关 闭</el-button>
-      </div>
-    </el-dialog>
-
     <!-- 会员详情抽屉 -->
     <el-drawer
       :title="show.title"
@@ -289,8 +177,6 @@ export default {
       title: "",
       open: false,
       statusOptions: [],
-      decryptedPhone: '',
-      phoneLoading: false,
       show: {
         title: "会员详情",
         open: false,
@@ -327,8 +213,11 @@ export default {
     getList() {
       this.loading = true;
       listDoctorTask(this.queryParams).then(response => {
-
-        this.doctorTaskList = response.rows;
+        // 清理每行的临时解密字段(避免旧数据显示)
+        this.doctorTaskList = (response.rows || []).map(row => {
+          const { _decryptedPhone, _phoneLoading, ...cleanRow } = row; // 移除临时字段
+          return { ...cleanRow };
+        });
         this.total = response.total;
         this.loading = false;
       });
@@ -349,14 +238,6 @@ export default {
       this.$refs["queryForm"].resetFields();
       this.handleQuery();
     },
-    handleView(row) {
-      getDoctorTask(row.id).then(response => {
-        this.form = response.data || {};
-        this.decryptedPhone = '';
-        this.open = true;
-        this.title = "任务详情";
-      });
-    },
     handleUpdate(row) {
       const id = row.id;
       if (!id) {
@@ -385,17 +266,22 @@ export default {
       this.queryParams.pageNum = 1;
       this.getList();
     },
-    async fetchDecryptedPhone(id) {
-      if (!id) return;
-      this.phoneLoading = true;
+    /** 获取并显示当前行解密后的电话 */
+    async fetchDecryptedPhoneForRow(row) {
+      if (!row.id || row._phoneLoading) return;
+
+      // 避免重复请求
+      this.$set(row, '_phoneLoading', true);
+
       try {
-        const response = await getUserPhone(id);
-        this.decryptedPhone = response.userPhone || '—';
+        const response = await getUserPhone(row.id);
+        const phone = response.userPhone || '—';
+        this.$set(row, '_decryptedPhone', phone);
       } catch (error) {
         this.$message.error('获取电话失败');
-        this.decryptedPhone = '获取失败';
+        this.$set(row, '_decryptedPhone', '获取失败');
       } finally {
-        this.phoneLoading = false;
+        this.$set(row, '_phoneLoading', false);
       }
     },
     /** 会员详情按钮操作 */