WXL (wul)
4 天以前 bc9538a9e071259ca8bbb6de52c60c9d7a55a03b
src/views/followvisit/record/detailpage/index.vue
@@ -127,6 +127,29 @@
              </el-tooltip>
            </template>
          </el-table-column>
                <el-table-column
            v-if="
              orgname == '景宁畲族自治县人民医院' ||
              orgname == '丽水市中医院'
            "
            label="拨号状态"
            width="120"
            align="center"
            key="isManuallyCalled"
            prop="isManuallyCalled"
          >
            <template slot-scope="scope">
              <el-tag
                v-if="Number(scope.row.isManuallyCalled) > 0"
                type="success"
                :disable-transitions="false"
                >拨通{{ scope.row.isManuallyCalled }}次</el-tag
              >
              <el-tag v-else type="info" :disable-transitions="false"
                >未拨通</el-tag
              >
            </template>
          </el-table-column>
          <el-table-column
            prop="finishtime"
            align="center"
@@ -283,6 +306,8 @@
          >
          </el-table-column>
          <el-table-column
            prop="bankcardno"
            align="center"
@@ -336,7 +361,8 @@
            v-if="
              (orgname == '南华大学附属第一医院' ||
                orgname == '丽水市第二人民医院' ||
                orgname == '缙云县人民医院'||
                orgname == '缙云县人民医院' ||
                orgname == '丽水市妇幼保健院' ||
                orgname == '松阳县中医医院') &&
              !Voicetype
            "
@@ -389,7 +415,7 @@
                    </span>
                  </div>
                  <div class="preview-left" v-if="!Voicetype">
                  <div class="preview-left" v-if="showQuestionnaireForm">
                    <div
                      class="topic-dev"
                      v-for="(item, index) in tableDatatop"
@@ -600,12 +626,12 @@
                    </div>
                  </div>
                  <el-button
                    v-if="Voicetype"
                    v-if="showQuestionnaireForm"
                    type="primary"
                    @click="yuyingetdetail"
                    @click="getdetail"
                    >保存问卷详情</el-button
                  >
                  <el-button v-else type="primary" @click="getdetail"
                  <el-button v-else type="primary" @click="yuyingetdetail"
                    >保存问卷详情</el-button
                  >
                </div>
@@ -705,6 +731,15 @@
                  v-if="(form.isVisitAgain == 1) & (visitAgain == 2)"
                >
                  再次随访
                </el-button>
                <!-- 超时服务:管理员可将完成时间改为应随访时间、状态改为已完成 -->
                <el-button
                  type="danger"
                  plain
                  @click="handleTimeoutComplete"
                  v-if="form.sendstate == 7 && isAdmin"
                >
                  超时标记已完成
                </el-button>
              </div>
@@ -989,16 +1024,29 @@
          <div class="collapse-section">
            <el-collapse v-model="collapseActive" accordion>
              <el-collapse-item title="患者档案信息" name="patient">
                <el-form ref="userform2" :model="userform" label-width="90px" size="small">
                <el-form
                  ref="userform2"
                  :model="userform"
                  label-width="90px"
                  size="small"
                >
                  <el-row :gutter="16">
                    <el-col :span="12">
                      <el-form-item label="患者姓名">
                        <el-input v-model="userform.name" placeholder="请输入姓名" maxlength="30"></el-input>
                        <el-input
                          v-model="userform.name"
                          placeholder="请输入姓名"
                          maxlength="30"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                    <el-col :span="12">
                      <el-form-item label="性别">
                        <el-select v-model="userform.sex" placeholder="请选择" style="width: 100%">
                        <el-select
                          v-model="userform.sex"
                          placeholder="请选择"
                          style="width: 100%"
                        >
                          <el-option label="男" :value="1"></el-option>
                          <el-option label="女" :value="2"></el-option>
                        </el-select>
@@ -1008,53 +1056,78 @@
                  <el-row :gutter="16">
                    <el-col :span="12">
                      <el-form-item label="年龄">
                        <el-input v-model="userform.age" placeholder="请输入年龄" maxlength="20"></el-input>
                        <el-input
                          v-model="userform.age"
                          placeholder="请输入年龄"
                          maxlength="20"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                    <el-col :span="12">
                      <el-form-item label="联系方式">
                        <el-input v-model="userform.telcode" placeholder="请输入联系方式" maxlength="20"></el-input>
                        <el-input
                          v-model="userform.telcode"
                          placeholder="请输入联系方式"
                          maxlength="20"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                  <el-row :gutter="16">
                    <el-col :span="24">
                      <el-form-item label="亲属电话">
                        <el-input v-model="userform.relativetelcode" placeholder="请输入亲属联系方式" maxlength="20"></el-input>
                        <el-input
                          v-model="userform.relativetelcode"
                          placeholder="请输入亲属联系方式"
                          maxlength="20"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                  <el-row :gutter="16">
                    <el-col :span="24">
                      <el-form-item label="诊断名称">
                        <el-input v-model="form.leavediagname" placeholder="请输入诊断" maxlength="50"></el-input>
                        <el-input
                          v-model="form.leavediagname"
                          placeholder="请输入诊断"
                          maxlength="50"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                  <el-row :gutter="16">
                    <el-col :span="24">
                      <el-form-item label="出生地">
                        <el-input v-model="userform.birthplace" placeholder="国、省、地市、区县、街道等" maxlength="50"></el-input>
                        <el-input
                          v-model="userform.birthplace"
                          placeholder="国、省、地市、区县、街道等"
                          maxlength="50"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                  <el-row :gutter="16">
                    <el-col :span="24">
                      <el-form-item label="居住地">
                        <el-input v-model="userform.placeOfResidence" placeholder="国、省、地市、区县、街道等" maxlength="50"></el-input>
                        <el-input
                          v-model="userform.placeOfResidence"
                          placeholder="国、省、地市、区县、街道等"
                          maxlength="50"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </el-form>
              </el-collapse-item>
              <el-collapse-item title="投诉建议" name="advice" v-if="orgname=='缙云县人民医院'">
              <el-collapse-item
                title="投诉建议"
                name="advice"
                v-if="orgname == '缙云县人民医院'"
              >
                <AdviceList :subid="taskid" :taskid="id" :patid="patid" />
              </el-collapse-item>
            </el-collapse>
          </div>
        </div>
      </div>
    </div>
@@ -1264,7 +1337,11 @@
        :visible.sync="CaldialogVisible"
        width="60%"
      >
        <CallCenterLs ref="CallCenterLs" :initial-phone="currentPhoneNumber" />
        <CallCenterLs
          ref="CallCenterLs"
          :initial-phone="currentPhoneNumber"
          @call-connected="recordCallConnected"
        />
      </el-dialog>
    </div>
  </div>
@@ -1658,6 +1735,15 @@
      };
      return typeMap[this.callStatus];
    },
    // 是否以问卷形式展示(非语音服务,或语音服务但无完整语音数据需手动填报)
    showQuestionnaireForm() {
      return !this.Voicetype;
    },
    // 是否为管理员角色
    isAdmin() {
      const roles = this.$store.getters.roles || [];
      return roles.includes("admin") || roles.includes("sysadmin");
    },
  },
  created() {
    this.taskid = this.$route.query.taskid;
@@ -1992,7 +2078,7 @@
        if (res.code == 200) {
          this.voiceDatatop = res.data.serviceSubtaskDetails;
          this.voice = res.data.voice;
          this.activeName = "yy";
          this.activeName = this.voice ? "yy" : "wj";
          this.taskname = res.data.taskName;
          // 问卷展示数据处理
          this.tableDatatop = res.data.filteredDetails;
@@ -2027,9 +2113,12 @@
                .map((obj) => obj.targetvalue)
                .join("&");
            }
            console.log(item.targetvalue, "item.targetvalue");
            if (item.targetvalue) {
              item.scriptResult = item.targetvalue.split("&");
            }
            console.log(item.scriptResult);
          });
        }
      });
@@ -2095,8 +2184,11 @@
          this.$modal.msgSuccess("服务保存成功");
          this.Editsingletasksonyic(this.serviceStates);
          const orgName = localStorage.getItem("orgname");
          if (this.form.isVisitAgain != 1 || this.visitAgain == 1) {
          if (
            this.form.isVisitAgain != 1 ||
            orgName == "丽水市中医院" ||
            this.visitAgain == 1
          ) {
            this.Torouter();
            return;
          }
@@ -2286,7 +2378,7 @@
        this.CaldialogVisible = true;
        return;
      }
      // 下方是中医院呼叫
      // 下方是丽水市中医院
      if (this.isSipRegistering) {
        this.$message.warning("系统正在初始化,请稍候...");
        return;
@@ -2316,11 +2408,15 @@
      this.callStatus = status.type;
      if (status.type === "connected") {
        this.currentCall = {
          phone: this.currentPhoneNumber,
          type: this.callType,
          startTime: new Date(),
        };
        if (!this.currentCall) {
          this.currentCall = {
            phone: this.currentPhoneNumber,
            type: this.callType,
            startTime: new Date(),
          };
          // 丽水市中医院:电话接通后记录拨打成功次数
          this.recordCallConnected();
        }
      } else if (status.type === "ended" || status.type === "failed") {
        this.currentCall = null;
      }
@@ -2329,6 +2425,39 @@
      if (status.type === "failed") {
        this.$message.error(`呼叫失败: ${status.text}`);
      }
    },
    // 电话拨打成功后(接通)次数 +1,并通过 Editsingletaskson 更新服务数据
    // 仅限景宁畲族自治县人民医院与丽水市中医院
    recordCallConnected() {
      const allowedOrgs = ["景宁畲族自治县人民医院", "丽水市中医院"];
      if (!allowedOrgs.includes(this.orgname)) return;
      getTaskservelist({
        patid: this.patid,
        subId: this.id,
      }).then((res) => {
        if (res.code == 200) {
          const objson = res.rows[0].serviceSubtaskList.find(
            (item) => item.id == this.id
          );
          if (!objson) return;
          objson.isManuallyCalled = (Number(objson.isManuallyCalled) || 0) + 1;
          Editsingletaskson(objson).then((r) => {
            if (r.code == 200) {
              // 及时更新顶部服务列表与表单中的拨号状态
              const localRow = (this.logsheetlist || []).find(
                (item) => item.id == this.id
              );
              if (localRow) {
                localRow.isManuallyCalled = objson.isManuallyCalled;
              }
              if (this.form && this.form.id == this.id) {
                this.form.isManuallyCalled = objson.isManuallyCalled;
              }
            }
          });
        }
      });
    },
    // 结束当前通话
    endCurrentCall() {
@@ -2384,7 +2513,7 @@
      savequestiondetail(obj).then((res) => {
        if (res.code == 200) {
          this.$modal.msgSuccess("服务保存成功");
          // this.Torouter();
          if (
            this.form.isVisitAgain != 1 ||
            orgName == "丽水市中医院" ||
@@ -2395,6 +2524,7 @@
            this.Torouter();
            return;
          }
          this.$modal
            .confirm(
              '任务保存成功是否针对患者:"' +
@@ -2576,6 +2706,36 @@
        }
      });
    },
    // 超时服务:管理员将完成时间改为应随访时间、状态改为已完成
    handleTimeoutComplete() {
      this.$modal
        .confirm(
          "是否将该超时服务的随访完成时间调整为应随访时间,并将随访状态改为已完成?"
        )
        .then(() => {
          getTaskservelist({
            patid: this.patid,
            subId: this.id,
          }).then((res) => {
            if (res.code == 200) {
              const objson = res.rows[0].serviceSubtaskList.find(
                (item) => item.id == this.id
              );
              if (objson) {
                objson.finishtime = objson.visitTime;
                objson.sendstate = 6;
                Editsingletaskson(objson).then((res) => {
                  if (res.code) {
                    this.$modal.msgSuccess("操作成功");
                    this.getTaskservelist();
                  }
                });
              }
            }
          });
        })
        .catch(() => {});
    },
    alterpatient(sendstate) {
      this.Editsingletasksonyic(this.serviceStates);
      // alterpatient(this.userform).then((res) => {
@@ -2697,6 +2857,7 @@
        // 同时重置与选项相关的状态
        // questionItem.isabnormal = false;
        questionItem.showAppendInput = false;
        questionItem.score = null; // 取消选中后清空题目分数
        // 注意:取消选中时,我们通常不希望触发题目跳转逻辑,所以直接返回
        // 如果需要,可以在这里添加取消选中后的特定逻辑,例如重置题目序列
      } else {
@@ -2734,6 +2895,9 @@
      // 处理异常状态高亮
      this.tableDatatop[questionIndex].isabnormal =
        selectedOptionObj.isabnormal;
      // 处理分数:把选中选项的 score 带到题目 score 上
      this.tableDatatop[questionIndex].score = selectedOptionObj.score;
      // 处理附加输入框显示
@@ -2828,6 +2992,10 @@
          if (obj.isabnormal) {
            this.tableDatatop[index].isabnormal = obj.isabnormal;
          }
          // 回显单选题目分数:把已选中选项的 score 带到题目 score 上
          if (obj.score !== undefined && obj.score !== null) {
            this.tableDatatop[index].score = obj.score;
          }
          this.$forceUpdate();
        }
      });
@@ -2899,7 +3067,18 @@
      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    },
    updateScore(a, b, c) {},
    // 多选:把选中选项的分数累加到题目 score 上
    updateScore(selectedValues, questionIndex, question) {
      const options = question.svyTaskTemplateTargetoptions || [];
      const score = options.reduce((sum, opt) => {
        if (selectedValues && selectedValues.includes(opt.optioncontent)) {
          return sum + (Number(opt.score) || 0);
        }
        return sum;
      }, 0);
      question.score = score;
      this.$forceUpdate();
    },
    // 合并修改相关=============================
    toggleMergeMode() {
      this.isMergeMode = !this.isMergeMode;