WXL
2024-09-11 b5a56d53e44c426fa188ba3e4e1db3eb779e2fd9
src/views/patient/patient/index.vue
@@ -25,8 +25,11 @@
      <div>
        <el-row :gutter="10">
          <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index">
            <el-card shadow="hover">
              <div style="padding: 8px">
            <el-card
              shadow="hover"
              :body-style="item.router ? ' cursor: pointer' : 'cursor: default'"
            >
              <div style="padding: 8px" @click="$router.push(item.router)">
                <span>{{ item.name }}</span>
                <div
                  style="
@@ -55,7 +58,7 @@
              v-show="showSearch"
              label-width="98px"
            >
              <el-form-item label="院区" prop="userName">
              <!-- <el-form-item label="院区" prop="userName">
                <el-select v-model="queryParams.value1" placeholder="请选择">
                  <el-option
                    v-for="item in options"
@@ -65,8 +68,8 @@
                  >
                  </el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="科室/病区" prop="userName">
              </el-form-item> -->
              <!-- <el-form-item label="科室/病区" prop="userName">
                <el-select v-model="queryParams.value2" placeholder="请选择">
                  <el-option
                    v-for="item in options"
@@ -76,45 +79,26 @@
                  >
                  </el-option>
                </el-select>
              </el-form-item>
              </el-form-item> -->
              <el-form-item
                label-width="138px"
                label="主治医生"
                prop="userName"
              >
                <el-select v-model="queryParams.value3" placeholder="请选择">
                  <el-option
                    v-for="item in options"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  >
                  </el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="入院日期" prop="userName">
                <el-date-picker
                  v-model="queryParams.valuetime1"
                  align="right"
                  type="date"
                  placeholder="选择日期"
                >
                </el-date-picker>
              </el-form-item>
              <el-form-item label="出院日期" prop="departuretime">
                <el-date-picker
                  v-model="queryParams.departuretime"
                  align="right"
                  type="date"
                  placeholder="选择日期"
                >
                </el-date-picker>
              </el-form-item>
              <el-form-item label="就诊编号" prop="number">
                <el-input
                  v-model="queryParams.number"
                  v-model="queryParams.drname"
                  placeholder="请输入医生姓名"
                  maxlength="30"
                  @keyup.enter.native="handleQuery"
                />
              </el-form-item>
              <el-form-item label="门诊编号" prop="visitno">
                <el-input
                  v-model="queryParams.visitno"
                  placeholder="请输入编号"
                  maxlength="30"
                  @keyup.enter.native="handleQuery"
                />
              </el-form-item>
              <el-form-item label="姓名" prop="name">
@@ -122,6 +106,15 @@
                  v-model="queryParams.name"
                  placeholder="请输入姓名"
                  maxlength="30"
                  @keyup.enter.native="handleQuery"
                />
              </el-form-item>
              <el-form-item label="联系电话" prop="telcode">
                <el-input
                  v-model="queryParams.telcode"
                  placeholder="请输入联系电话"
                  maxlength="30"
                  @keyup.enter.native="handleQuery"
                />
              </el-form-item>
@@ -176,6 +169,16 @@
                  @click="handleDelete"
                  v-hasPermi="['system:user:remove']"
                  >删除</el-button
                >
              </el-col>
              <el-col :span="1.5">
                <el-button
                  type="primary"
                  plain
                  icon="el-icon-s-promotion"
                  size="medium"
                  @click="distribute"
                  >向任务派发患者</el-button
                >
              </el-col>
              <el-col :span="6">
@@ -295,6 +298,9 @@
                prop="createTime"
                width="160"
              >
              <template slot-scope="scope">
                  <span>{{ formatTime(scope.row.createTime) }}</span>
                </template>
              </el-table-column>
              <el-table-column
                label="更新日期"
@@ -303,7 +309,7 @@
                width="160"
              >
                <template slot-scope="scope">
                  <span>{{ parseTime(scope.row.createTime) }}</span>
                  <span>{{ formatTime(scope.row.archivetime) }}</span>
                </template>
              </el-table-column>
              <el-table-column
@@ -325,10 +331,10 @@
                    "
                    v-hasPermi="['system:user:edit']"
                    ><span class="button-textsc"
                      ><i class="el-icon-zoom-in"></i>查看</span
                      ><i class="el-icon-zoom-in"></i>详情编辑</span
                    ></el-button
                  >
                  <el-button
                  <!-- <el-button
                    size="medium"
                    type="text"
                    @click="handleUpdate(scope.row)"
@@ -336,7 +342,7 @@
                    ><span class="button-textxga"
                      ><i class="el-icon-edit"></i>修改</span
                    ></el-button
                  >
                  > -->
                  <el-button
                    size="medium"
                    type="text"
@@ -361,6 +367,127 @@
        </el-row>
      </div>
    </div>
    <el-dialog title="选择任务" :visible.sync="distributeVisible" width="70%">
      <div class="preview-left">
        <el-form
          :model="queryParams"
          ref="queryForm"
          size="small"
          :inline="true"
          label-width="98px"
        >
          <el-select
            @change="distribute"
            v-model="tasktopic"
            placeholder="请选择任务类型"
          >
            <el-option
              v-for="item in taskoptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </el-form>
        <el-table v-loading="loading" :data="taskuserList">
          <el-table-column
            label="任务名称"
            fixed
            align="center"
            key="taskName"
            prop="taskName"
            width="140"
            :show-overflow-tooltip="true"
          />
          <el-table-column
            label="任务描述"
            align="center"
            key="taskDesc"
            prop="taskDesc"
            width="180"
            :show-overflow-tooltip="true"
          />
          <el-table-column
            label="服务项目"
            align="center"
            key="templatename"
            prop="templatename"
          />
          <el-table-column
            label="待执行/总任务"
            align="center"
            key="nickName"
            prop="nickName"
          >
            <template slot-scope="scope">
              <span>{{ scope.row.wfs }}/{{ scope.row.yfs }}</span>
            </template>
          </el-table-column>
          <el-table-column
            label="创建人"
            align="center"
            key="createBy"
            prop="createBy"
            width="120"
            :show-overflow-tooltip="true"
          />
          <el-table-column
            label="创建时间"
            sortable
            align="center"
            prop="createTime"
            width="160"
          >
            <template slot-scope="scope">
              <span>{{ formatTime(scope.row.createTime) }}</span>
            </template>
          </el-table-column>
          <el-table-column
            label="状态"
            fixed="right"
            align="center"
            key="sendState"
            prop="sendState"
            width="120"
          >
            <template slot-scope="scope">
              <dict-tag
                :options="dict.type.task_status"
                :value="scope.row.sendState"
              />
            </template>
          </el-table-column>
          <el-table-column
            label="任务详情"
            fixed="right"
            align="center"
            width="200"
            class-name="small-padding fixed-width"
          >
            <template slot-scope="scope">
              <el-button
                size="medium"
                type="text"
                @click="handleUpdate(scope.row)"
                ><span class="button-xq"
                  ><i class="el-icon-s-data"></i>选择派发</span
                ></el-button
              >
            </template>
          </el-table-column>
        </el-table>
        <pagination
          v-show="tasktotal > 0"
          :total="tasktotal"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="distribute"
        />
      </div>
    </el-dialog>
    <!-- 添加或修改用户配置对话框 -->
    <el-dialog
@@ -553,7 +680,7 @@
              href="http://m.qpic.cn/psc?/V50ZTolo1AIhq00dqrJP2169QM2VHGTU/ruAMsa53pVQWN7FLK88i5qfmCJclyMduqqL6kjE4h7TXDAjimVtmLmTyGVfF4qlkyOISsYQ4Mxx705X2tkXEIUPrfCS4L4yK.f11SmO8Tq0!/b&bo=twb0AgAAAAADB2U!&rf=viewer_4"
              target="_blank"
            >
              查看模版</el-link
              查看模板</el-link
            >
          </div>
        </el-upload>
@@ -637,14 +764,16 @@
    </el-dialog>
    <!-- 跳转服务对话框 -->
    <el-dialog title="选择服务类型" :visible.sync="serviceVisible">
      <el-radio-group v-model="serviceradio">
        <el-radio :label="1">宣教随访</el-radio>
        <el-radio :label="2">门诊服务</el-radio>
        <el-radio :label="3">出院服务</el-radio>
        <el-radio :label="4">复诊服务</el-radio>
        <el-radio :label="5">体检通知</el-radio>
        <el-radio :label="6">问卷服务</el-radio>
      </el-radio-group>
      <el-card class="box-card">
        <el-radio-group v-model="serviceradio">
          <el-radio :label="1">宣教随访</el-radio>
          <el-radio :label="2">门诊服务</el-radio>
          <el-radio :label="3">出院服务</el-radio>
          <el-radio :label="4">复诊服务</el-radio>
          <el-radio :label="5">体检通知</el-radio>
          <el-radio :label="6">问卷服务</el-radio>
        </el-radio-group>
      </el-card>
      <div slot="footer" class="dialog-footer">
        <el-button @click="serviceVisible = false">取 消</el-button>
        <el-button type="primary" @click="CreateService">创建服务</el-button>
@@ -665,14 +794,16 @@
  Exporterrorpatient,
  toleadpatient,
} from "@/api/patient/homepage";
import { getTasklist } from "@/api/AiCentre/index";
import { listtag } from "@/api/system/label";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
  name: "Userhuanze",
  dicts: ["sys_normal_disable", "sys_user_sex"],
  name: "Patient",
  dicts: ["sys_normal_disable", "task_status", "sys_user_sex"],
  components: { Treeselect },
  data() {
    return {
@@ -688,8 +819,10 @@
      showSearch: true,
      // 总条数
      total: 0,
      tasktotal: 0,
      // 用户表格数据
      userList: null,
      taskuserList: null,
      // 弹出层标题
      title: "",
      // 部门树选项
@@ -704,8 +837,19 @@
      amendtag: false, //是否修改
      serviceVisible: false,
      serviceradio: 1,
      distributeVisible: false,
      tasktopic: "5", //新增类型
      // 查询参数
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        userName: undefined,
        tagid: undefined,
        topic: undefined,
      },
      // 日期范围
      dateRange: [],
      taskoptions: [],
      paperstypes: [
        { papersname: "身份证" },
        { papersname: "护照" },
@@ -715,7 +859,7 @@
      Patienttype: [
        {
          value: "1",
          label: "住院患者",
          label: "在院患者",
        },
        {
          value: "2",
@@ -724,6 +868,10 @@
        {
          value: "3",
          label: "体检患者",
        },
        {
          value: "4",
          label: "出院患者",
        },
      ],
@@ -735,14 +883,17 @@
        {
          name: "在院患者",
          value: 23,
          router: "/patient/inpatient",
        },
        {
          name: "离院患者",
          name: "出院患者",
          value: 41,
          router: "/patient/hospital",
        },
        {
          name: "诊疗患者",
          name: "门诊患者",
          value: 56,
          router: "/patient/outpatient",
        },
        {
          name: "离世患者",
@@ -802,49 +953,42 @@
      },
      // 表单校验
      rules: {
        // userName: [
        //   { required: true, message: "用户名称不能为空", trigger: "blur" },
        //   {
        //     min: 2,
        //     max: 20,
        //     message: "用户名称长度必须介于 2 和 20 之间",
        //     trigger: "blur",
        //   },
        // ],
        // nickName: [
        //   { required: true, message: "用户昵称不能为空", trigger: "blur" },
        // ],
        // password: [
        //   { required: true, message: "用户密码不能为空", trigger: "blur" },
        //   {
        //     min: 5,
        //     max: 20,
        //     message: "用户密码长度必须介于 5 和 20 之间",
        //     trigger: "blur",
        //   },
        // ],
        // email: [
        //   {
        //     type: "email",
        //     message: "请输入正确的邮箱地址",
        //     trigger: ["blur", "change"],
        //   },
        // ],
        // phonenumber: [
        //   {
        //     pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
        //     message: "请输入正确的手机号码",
        //     trigger: "blur",
        //   },
        // ],
        // IDnumber: [
        //   {
        //     pattern:
        //       /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/,
        //     message: "请输入正确的身份证号码",
        //     trigger: "blur",
        //   },
        // ],
        name: [
          { required: true, message: "用户名称不能为空", trigger: "blur" },
          {
            min: 2,
            max: 20,
            message: "用户名称长度必须介于 2 和 20 之间",
            trigger: "blur",
          },
        ],
        sex: [{ required: true, message: "性别不能为空", trigger: "blur" }],
        age: [{ required: true, message: "年龄不能为空", trigger: "blur" }],
        nation: [{ required: true, message: "民族不能为空", trigger: "blur" }],
        telcode: [
          { required: true, message: "联系方式不能为空", trigger: "blur" },
          {
            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
            message: "请输入正确的手机号码",
            trigger: "blur",
          },
        ],
        idcardtype: [
          { required: true, message: "证件类型不能为空", trigger: "blur" },
        ],
        idcardno: [
          { required: true, message: "证件号能为空", trigger: "blur" },
          {
            pattern:
              /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/,
            message: "请输入正确的身份证号码",
            trigger: "blur",
          },
        ],
        placeOfResidence: [
          { required: true, message: "居住地不能为空", trigger: "blur" },
        ],
      },
    };
  },
@@ -857,6 +1001,8 @@
  created() {
    this.getList();
    this.gettabList();
    //获取已筛选后的可选任务类型
    this.taskoptions = store.getters.Serviceauthority;
  },
  methods: {
    /** 查询患者列表 */
@@ -872,6 +1018,10 @@
    },
    handleClick() {
      this.getList();
    },
    findLabelByValue(data, value) {
      const item = data.find((item) => item.value === value);
      return item ? item.label : null;
    },
    /** 查询标签列表 */
    gettabList() {
@@ -955,31 +1105,36 @@
      this.amendtag = true;
      this.Labelchange = true;
    },
    //修改/新增患者
    submitForm() {
      if (this.amendtag) {
        alterpatient(this.form)
          .then((response) => {
            console.log(response);
          })
          .then(() => {
            this.getList();
            this.$modal.msgSuccess("修改成功");
          });
      } else {
        addpatient(this.form)
          .then((response) => {
            console.log(response);
          })
          .then(() => {
            this.getList();
            this.$modal.msgSuccess("添加成功");
          });
      }
      this.reset();
      // this.idds = "";
      this.Labelchange = false;
      this.$refs["form"].validate((valid) => {
        if (valid) {
          if (this.amendtag) {
            this.form.isoperation = 2;
            alterpatient(this.form)
              .then((response) => {
                console.log(response);
              })
              .then(() => {
                this.getList();
                this.$modal.msgSuccess("修改成功");
              });
          } else {
            this.form.isoperation = 1;
            alterpatient(this.form)
              .then((response) => {
                console.log(response);
              })
              .then(() => {
                this.getList();
                this.$modal.msgSuccess("添加成功");
              });
          }
          this.reset();
          // this.idds = "";
          this.Labelchange = false;
        }
      });
    },
    /** 删除按钮操作 */
@@ -1001,6 +1156,31 @@
      this.$router.push({
        path: "/followvisit/particty",
        query: { type: this.serviceradio },
      });
    },
    distribute() {
      this.distributeVisible = true;
      if (this.tasktopic == 1) {
        this.topqueryParams.type = 3;
      } else if (this.tasktopic == 2) {
        this.topqueryParams.type = 1;
      } else if (this.tasktopic == 3) {
        this.topqueryParams.type = 1;
      } else if (this.tasktopic == 4) {
        this.topqueryParams.type = 1;
      } else if (this.tasktopic == 5) {
        this.topqueryParams.type = 1;
      } else if (this.tasktopic == 6) {
        this.topqueryParams.type = 2;
      }
      this.topqueryParams.typename = this.findLabelByValue(
        this.taskoptions,
        this.tasktopic
      );
      getTasklist(this.topqueryParams).then((response) => {
        this.taskuserList = response.rows;
        this.tasktotal = response.total;
        this.$forceUpdate();
      });
    },
    /** 导出按钮操作 */
@@ -1102,6 +1282,22 @@
    display: center !important;
  }
}
.preview-left {
  margin: 20px;
  //   margin: 20px;
  padding: 30px;
  background: #ffff;
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
    0 0 6px 0 rgba(0, 0, 0, 0.04);
  .scriptTopic-dev {
    margin-bottom: 25px;
    font-size: 20px !important;
    .dev-text {
      margin-bottom: 10px;
    }
  }
}
::v-deep.el-tabs--left,
.el-tabs--right {
  overflow: hidden;
@@ -1126,6 +1322,7 @@
}
::v-deep.leftvlue .el-card__body:hover {
  background: #8dc8f8;
  cursor: pointer; /* 鼠标悬浮时变为手形 */
}
.leftvlue {
  width: 80%;