WXL (wul)
5 天以前 70e4d2c33cc2e3af590d1816c0c703da341538cf
src/views/followvisit/zysatisfaction/index.vue
@@ -1,10 +1,9 @@
<template>
  <div class="app-container">
     <statistics-cards
    <statistics-cards
      :cardlist="cardlist"
      :ycvalue="ycvalue"
      :jgvalue="jgvalue"
      :show-warning-condition="orgname == '省立同德翠苑院区'"
      :show-extra="false"
      :show-warning-condition="false"
    />
    <el-row :gutter="20">
      <!--用户数据-->
@@ -16,13 +15,6 @@
        v-show="showSearch"
        label-width="98px"
      >
        <el-form-item label="任务名称">
          <el-input
            v-model="topqueryParams.taskName"
            placeholder="请选择任务名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="出院时间">
          <el-date-picker
            v-model="dateRange"
@@ -41,31 +33,18 @@
            placeholder="请输入患者姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="诊断名称" prop="leavediagname">
          <el-input
            v-model="topqueryParams.leavediagname"
            placeholder="请输入诊断名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="随访人员" prop="updateBy">
        <el-form-item label="处理人员" prop="updateBy">
          <el-input
            v-model="topqueryParams.updateBy"
            placeholder="请输入随访人员"
            placeholder="请输入处理人员"
          ></el-input>
        </el-form-item>
        <el-form-item label="主治医生" prop="drname">
        <el-form-item label="接诊医生" prop="drname">
          <el-input
            v-model="topqueryParams.drname"
            placeholder="请输入主治医生"
            placeholder="请输入接诊医生"
          ></el-input>
        </el-form-item>
        <el-form-item label="经管医生" prop="managementDoctor">
          <el-input
            v-model="topqueryParams.managementDoctor"
            placeholder="请输入主治医生"
          ></el-input>
        </el-form-item>
        <el-form-item label="患者范围" prop="status">
          <el-cascader
            v-model="topqueryParams.scopetype"
@@ -78,7 +57,7 @@
          ></el-cascader>
        </el-form-item>
        <el-form-item label="服务状态" prop="status">
        <!-- <el-form-item label="服务状态" prop="status">
          <el-select
            v-model="topqueryParams.sendstateView"
            placeholder="请选择"
@@ -91,6 +70,16 @@
            >
            </el-option>
          </el-select>
        </el-form-item> -->
        <el-form-item label="处理状态" prop="status">
          <el-cascader
            v-model="serviceStatusValue"
            placeholder="请选择"
            :options="serviceStatusOptions"
            :props="cascaderProps"
            @change="handleServiceStatusChange"
            clearable
          ></el-cascader>
        </el-form-item>
        <el-form-item label="排序方式" prop="status">
          <el-select v-model="topqueryParams.sort" placeholder="请选择">
@@ -215,15 +204,6 @@
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="50" align="center" />
        <el-table-column
          label="任务名称"
          fixed
          width="150"
          show-overflow-tooltip
          align="center"
          key="taskName"
          prop="taskName"
        />
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
@@ -251,14 +231,14 @@
          </template>
        </el-table-column>
        <el-table-column
          label="随访状态"
          label="处理状态"
          align="center"
          key="sendstateView"
          prop="sendstateView"
          width="120"
        >
          <template slot-scope="scope">
             <el-tooltip
            <el-tooltip
              class="item"
              effect="dark"
              :content="scope.row.remark"
@@ -328,20 +308,13 @@
          </template></el-table-column
        >
        <el-table-column
          label="主治医生"
          label="接诊医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <el-table-column
          label="经管医生"
          align="center"
          key="managementDoctor"
          prop="managementDoctor"
          width="120"
        />
        <el-table-column
          label="出院天数"
          width="120"
@@ -405,16 +378,7 @@
        </el-table-column>
        <el-table-column
          label="诊断名称"
          align="center"
          key="leavediagname"
          prop="leavediagname"
          width="120"
          :show-overflow-tooltip="true"
        >
        </el-table-column>
        <el-table-column
          label="随访人员"
          label="处理人员"
          align="center"
          key="updateBy"
          prop="updateBy"
@@ -427,7 +391,7 @@
          prop="templatename"
          width="200"
        />
         <el-table-column
        <el-table-column
          label="任务状态"
          align="center"
          key="sendstate"
@@ -558,7 +522,7 @@
                size="medium"
                type="text"
                @click="handlestop(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"
                  ><i class="el-icon-remove-outline"></i>暂停服务</span
                ></el-button
@@ -814,22 +778,22 @@
            </el-form-item>
          </el-col>
        </el-row>
       <el-row>
  <el-col :span="24">
    <el-form-item label="过滤原因">
      <el-input
        v-model="form.notrequiredreason"
        type="textarea"
        placeholder="请输入过滤原因"
      ></el-input>
      <!-- 提醒文字 -->
      <div class="filter-warning">
        <i class="el-icon-warning-outline"></i>
        该功能适用于死亡、列入医院黑名单、明确拒绝随访等患者的过滤排除,过滤后该患者所有进行中任务全部停止且无法匹配新的随访任务,请谨慎操作!
      </div>
    </el-form-item>
  </el-col>
</el-row>
        <el-row>
          <el-col :span="24">
            <el-form-item label="过滤原因">
              <el-input
                v-model="form.notrequiredreason"
                type="textarea"
                placeholder="请输入过滤原因"
              ></el-input>
              <!-- 提醒文字 -->
              <div class="filter-warning">
                <i class="el-icon-warning-outline"></i>
                该功能适用于死亡、列入医院黑名单、明确拒绝随访等患者的过滤排除,过滤后该患者所有进行中任务全部停止且无法匹配新的随访任务,请谨慎操作!
              </div>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -940,7 +904,7 @@
export default {
  name: "Discharge",
  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
  components: { Treeselect,StatisticsCards },
  components: { Treeselect, StatisticsCards },
  data() {
    return {
      // 遮罩层
@@ -949,6 +913,8 @@
      ids: [],
      // 非单个禁用
      single: true,
      jgvalue: 0,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
@@ -979,7 +945,7 @@
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      Labelchange: false,
      ycvalue: "",
      ycvalue: 0,
      yfsvalue: "",
      inputValue: "",
      preachform: "",
@@ -1014,25 +980,59 @@
      loading: false,
      cardlist: [
        {
          name: "患者服务总量",
          value: 0,
        },
        {
          name: "无需随访",
          name: "住院总量",
          value: 0,
        },
        {
          name: "需随访",
          name: "发送任务量",
          value: 0,
        },
        {
          name: "待随访",
          name: "待完成",
          value: 0,
        },
        {
          name: "已完成",
          value: 0,
        },
        {
          name: "完成率",
          value: "0%",
        },
      ],
      // 级联选择器绑定值
      serviceStatusValue: null,
      cascaderProps: {
        expandTrigger: "hover", // 悬停展开
        checkStrictly: true, // ✅ 关键:允许选中任意一级
        emitPath: false, // ✅ 只返回选中的值,不返回路径数组
      },
      // 服务状态选项(一级和二级值不冲突)
      serviceStatusOptions: [
        {
          value: null,
          label: "全部",
        },
        {
          value: 10, // 一级:待随访
          label: "待随访",
          children: [
            { value: 1, label: "被领取" },
            { value: 2, label: "待发送" },
            { value: 3, label: "已发送" },
            { value: 5, label: "发送失败" },
            { value: 7, label: "超时" },
          ],
        },
        {
          value: 20, // 一级:已完成
          label: "已完成",
          children: [{ value: 6, label: "已完成" }],
        },
        {
          value: 30, // 一级:无需随访
          label: "无需随访",
          children: [{ value: 4, label: "不执行" }],
        },
      ],
      zcrules: {
@@ -1082,8 +1082,9 @@
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
         sendstateView:
          localStorage.getItem("orgname") == "南华大学附属第一医院" ? 1 : 2,
        sendstate: null,
        sendstateView: null,
        sort: localStorage.getItem("orgname") == "丽水市中医院" ? 8 : 2, //0 出院时间(正序)    1 出院时间(倒序)   2 发送时间(正序)    3 发送时间(倒序)  7应随访日期(倒序) 应随访日期(正序)
        serviceType: 6,
        searchscope: 3,
@@ -1095,7 +1096,7 @@
      propss: { multiple: true },
      options: [],
       topicoptions: [
      topicoptions: [
        {
          value: null,
          label: "全部",
@@ -1175,6 +1176,8 @@
          },
        },
      },
      orgname: "",
      amendtag: false,
      errtype: "",
      leavehospitaldistrictcode: "",
@@ -1189,6 +1192,8 @@
    this.serviceState = store.getters.serviceState;
    this.checkboxlist = store.getters.checkboxlist;
    this.errtype = this.$route.query.errtype;
    this.orgname = localStorage.getItem("orgname");
    this.leavehospitaldistrictcode =
      this.$route.query.leavehospitaldistrictcode;
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
@@ -1252,14 +1257,19 @@
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
          this.cardlist[0].value =
          // 住院总量:暂无字段,保持 0
          // 发送任务量 = 患者服务总量(无需随访 + 需随访)
          this.cardlist[1].value =
            Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].wxsf || 0;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[2].value = response.rows[0].xsf || 0;
          this.cardlist[3].value = response.rows[0].dsf || 0;
          this.cardlist[4].value = response.rows[0].ywc || 0;
          this.cardlist[2].value = response.rows[0].dsf || 0; // 待完成 = 待随访
          this.cardlist[3].value = response.rows[0].ywc || 0; // 已完成 = 已随访
          // 完成率 = 已完成 / (待完成 + 已完成)
          const dsf = Number(response.rows[0].dsf) || 0;
          const ywc = Number(response.rows[0].ywc) || 0;
          const doneTotal = dsf + ywc;
          this.cardlist[4].value =
            doneTotal > 0 ? ((ywc / doneTotal) * 100).toFixed(2) + "%" : "0%";
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
@@ -1287,6 +1297,37 @@
        });
        this.total = response.total;
      });
    },
    // 服务状态变更处理
    handleServiceStatusChange(value) {
      // 清空选择
      if (value === null || value === undefined || value === "") {
        this.topqueryParams.sendstateView = null;
        this.topqueryParams.sendstate = null;
        return;
      }
      console.log(value, "value");
      // 一级节点的值(大于等于10)
      if (value >= 10) {
        // 选中了一级
        switch (value) {
          case 10:
            this.topqueryParams.sendstateView = 1; // 待随访
            break;
          case 20:
            this.topqueryParams.sendstateView = 2; // 已完成
            break;
          case 30:
            this.topqueryParams.sendstateView = 3; // 无需随访
            break;
        }
        this.topqueryParams.sendstate = null;
      } else {
        // 选中了二级(具体状态)
        this.topqueryParams.sendstateView = null;
        this.topqueryParams.sendstate = value;
      }
    },
    affiliation() {
      this.topqueryParams.managementDoctorCode = store.getters.hisUserId;
@@ -1382,7 +1423,7 @@
        this.options = [];
      }
    },
    // 影像随访状态修改
    // 影像处理状态修改
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -1454,11 +1495,12 @@
    resetQuery() {
      this.dateRange = [];
      this.dateRangefs = [];
      this.serviceStatusValue = null;
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
          sendstateView:
          localStorage.getItem("orgname") == "南华大学附属第一医院" ? 1 : 2,
        sendstate: null,
        sendstateView: null,
        sort: 2, //0 出院时间(正序)    1 出院时间(倒序)   2 发送时间(正序)    3 发送时间(倒序)
        serviceType: 6,
        searchscope: 3,
@@ -1796,8 +1838,8 @@
<style lang="scss" scoped>
.el-button--primary.is-plain {
  color: #ffffff;
  background: #409eff;
  border-color: #4fabe9;
  background: #5b7cfa;
  border-color: #5b7cfa;
}
.document {
@@ -1993,4 +2035,75 @@
//     font-size: 24px;
//   }
// }
/* ================= 清新高级简约风 ================= */
.app-container {
  background: #f5f7fb;
  border-radius: 14px;
  padding: 20px;
}
/* 查询表单:白色圆角卡片 */
::v-deep .el-form--inline {
  background: #ffffff;
  border-radius: 14px;
  padding: 22px 22px 8px;
  margin-bottom: 18px;
  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
}
/* 隐藏分割线 */
::v-deep .el-divider {
  display: none;
}
/* 工具栏底部间距 */
.mb8 {
  margin-bottom: 18px;
}
/* 按钮:圆角 + 柔和过渡 */
::v-deep .el-button {
  border-radius: 8px;
  font-weight: 500;
  transition: all 0.25s ease;
}
/* 主按钮:清新靛蓝 */
::v-deep .el-button--primary:not(.is-plain) {
  background: #5b7cfa;
  border-color: #5b7cfa;
}
::v-deep .el-button--primary:not(.is-plain):hover,
::v-deep .el-button--primary:not(.is-plain):focus {
  background: #7593fb;
  border-color: #7593fb;
}
/* 表格:白色圆角卡片 + 柔和表头 */
::v-deep .el-table {
  border-radius: 14px;
  overflow: hidden;
  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
}
::v-deep .el-table::before {
  display: none;
}
::v-deep .el-table th {
  background: #f7f9fd !important;
  color: #3f4d63;
  font-weight: 600;
}
::v-deep .el-table td {
  padding: 12px 0;
}
/* 标签圆角 */
::v-deep .el-tag {
  border-radius: 6px;
}
/* 分页间距 */
::v-deep .pagination-container {
  padding-top: 18px;
}
</style>