<template> 
 | 
  <div class="app-container"> 
 | 
    <el-row :gutter="20"> 
 | 
      <!--用户数据--> 
 | 
      <el-col :span="24" :xs="24"> 
 | 
        <el-form 
 | 
          :model="queryParams" 
 | 
          ref="queryForm" 
 | 
          size="small" 
 | 
          :inline="true" 
 | 
          v-show="showSearch" 
 | 
          label-width="98px" 
 | 
        > 
 | 
          <el-form-item label="姓名" width="100" prop="name"> 
 | 
            <el-input 
 | 
              v-model="queryParams.patname" 
 | 
              placeholder="请输入姓名" 
 | 
              clearable 
 | 
              style="width: 200px" 
 | 
              @keyup.enter.native="handleQuery" 
 | 
            /> 
 | 
          </el-form-item> 
 | 
          <el-form-item label="诊断" width="100" prop="name"> 
 | 
            <el-input 
 | 
              v-model="queryParams.diagname" 
 | 
              placeholder="请输入诊断" 
 | 
              clearable 
 | 
              style="width: 200px" 
 | 
              @keyup.enter.native="handleQuery" 
 | 
            /> 
 | 
          </el-form-item> 
 | 
          <el-form-item label="科室" width="100" prop="name"> 
 | 
            <el-input 
 | 
              v-model="queryParams.deptname" 
 | 
              placeholder="请输入科室名称" 
 | 
              clearable 
 | 
              style="width: 200px" 
 | 
              @keyup.enter.native="handleQuery" 
 | 
            /> 
 | 
          </el-form-item> 
 | 
          <el-form-item label="医生" width="100" prop="name"> 
 | 
            <el-input 
 | 
              v-model="queryParams.drname" 
 | 
              placeholder="请输入医生姓名" 
 | 
              clearable 
 | 
              style="width: 200px" 
 | 
              @keyup.enter.native="handleQuery" 
 | 
            /> 
 | 
          </el-form-item> 
 | 
          <el-form-item label="病案号" prop="outhospno"> 
 | 
            <el-input 
 | 
              v-model="queryParams.outhospno" 
 | 
              placeholder="请输入病案号" 
 | 
              clearable 
 | 
              style="width: 250px" 
 | 
              @keyup.enter.native="handleQuery" 
 | 
            /> 
 | 
          </el-form-item> 
 | 
  
 | 
          <el-form-item label="患者范围" prop="status"> 
 | 
            <el-cascader 
 | 
              v-model="queryParams.scopetype" 
 | 
              placeholder="默认全部" 
 | 
              :options="sourcetype" 
 | 
              :props="{ expandTrigger: 'hover' }" 
 | 
              @change="handleChange" 
 | 
            ></el-cascader> 
 | 
          </el-form-item> 
 | 
          <el-form-item label="就诊日期"> 
 | 
            <el-date-picker 
 | 
              v-model="dateRange" 
 | 
              style="width: 240px" 
 | 
              value-format="yyyy-MM-dd" 
 | 
              type="daterange" 
 | 
              range-separator="-" 
 | 
              start-placeholder="开始日期" 
 | 
              end-placeholder="结束日期" 
 | 
            ></el-date-picker> 
 | 
            <!-- <el-date-picker 
 | 
                v-model="dateRange" 
 | 
                type="datetimerange" 
 | 
                value-format="yyyy-MM-dd HH:mm:ss" 
 | 
                start-placeholder="开始日期" 
 | 
                end-placeholder="结束日期" 
 | 
                :default-time="['12:00:00']" 
 | 
              > 
 | 
              </el-date-picker> --> 
 | 
          </el-form-item> 
 | 
          <el-row> 
 | 
            <!-- <el-form-item label=" 就诊日期 " prop="admitdate"> 
 | 
              <el-date-picker 
 | 
                clearable 
 | 
                v-model="queryParams.admitdate" 
 | 
                type="date" 
 | 
                value-format="yyyy-MM-dd" 
 | 
                placeholder="请选择 就诊日期 " 
 | 
              > 
 | 
              </el-date-picker> 
 | 
            </el-form-item> --> 
 | 
  
 | 
            <el-form-item> 
 | 
              <el-button 
 | 
                type="primary" 
 | 
                icon="el-icon-search" 
 | 
                size="medium" 
 | 
                @click="handleQuery" 
 | 
                >搜索</el-button 
 | 
              > 
 | 
              <el-button 
 | 
                icon="el-icon-refresh" 
 | 
                size="medium" 
 | 
                @click="resetQuery" 
 | 
                >重置</el-button 
 | 
              > 
 | 
            </el-form-item> 
 | 
          </el-row> 
 | 
        </el-form> 
 | 
  
 | 
        <el-row :gutter="10" class="mb8"> 
 | 
          <!-- <el-col :span="1.5"> 
 | 
            <el-button 
 | 
              type="primary" 
 | 
              plain 
 | 
              icon="el-icon-plus" 
 | 
              size="medium" 
 | 
              @click="handleAdd" 
 | 
              v-hasPermi="['system:user:add']" 
 | 
              >新增</el-button 
 | 
            > 
 | 
          </el-col> 
 | 
          <el-col :span="1.5"> 
 | 
            <el-button 
 | 
              type="success" 
 | 
              plain 
 | 
              icon="el-icon-edit" 
 | 
              size="medium" 
 | 
              :disabled="single" 
 | 
              @click="handleUpdate" 
 | 
              v-hasPermi="['system:user:edit']" 
 | 
              >修改</el-button 
 | 
            > 
 | 
          </el-col> --> 
 | 
          <el-col :span="1.5"> 
 | 
            <el-button 
 | 
              type="danger" 
 | 
              plain 
 | 
              icon="el-icon-delete" 
 | 
              size="medium" 
 | 
              :disabled="multiple" 
 | 
              @click="handleDelete" 
 | 
              v-hasPermi="['system:user:remove']" 
 | 
              >删除</el-button 
 | 
            > 
 | 
          </el-col> 
 | 
          <el-col :span="1.5"> 
 | 
            <el-button 
 | 
              type="warning" 
 | 
              plain 
 | 
              icon="el-icon-plus" 
 | 
              size="medium" 
 | 
              :disabled="multiple" 
 | 
              @click="handleBatchAddTask" 
 | 
            > 
 | 
              批量添加任务</el-button 
 | 
            > 
 | 
          </el-col> 
 | 
          <el-col :span="19"> 
 | 
            <div class="documentf"> 
 | 
              <div class="document"> 
 | 
                <el-button 
 | 
                  type="info" 
 | 
                  plain 
 | 
                  icon="el-icon-upload2" 
 | 
                  size="medium" 
 | 
                  @click="handleImport" 
 | 
                  v-hasPermi="['system:user:import']" 
 | 
                  >导入</el-button 
 | 
                > 
 | 
              </div> 
 | 
              <div class="document"> 
 | 
                <el-button 
 | 
                  type="warning" 
 | 
                  plain 
 | 
                  icon="el-icon-download" 
 | 
                  size="medium" 
 | 
                  @click="handleExport" 
 | 
                  v-hasPermi="['system:user:export']" 
 | 
                  >导出</el-button 
 | 
                > 
 | 
              </div> 
 | 
            </div> 
 | 
          </el-col> 
 | 
          <!-- <el-col :span="1.5"> </el-col> --> 
 | 
        </el-row> 
 | 
  
 | 
        <el-table 
 | 
          v-loading="loading" 
 | 
          :data="userList" 
 | 
          @selection-change="handleSelectionChange" 
 | 
        > 
 | 
          <el-table-column type="selection" width="50" align="center" /> 
 | 
          <!-- <el-table-column 
 | 
            label="序号" 
 | 
            fixed 
 | 
            align="center" 
 | 
            key="id" 
 | 
            prop="id" 
 | 
          /> --> 
 | 
          <el-table-column 
 | 
            label="就诊时间" 
 | 
            align="center" 
 | 
            key="admitdate" 
 | 
            prop="admitdate" 
 | 
            width="160" 
 | 
          > 
 | 
            <template slot-scope="scope"> 
 | 
              <span>{{ formatTime(scope.row.admitdate) }}</span> 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <!-- <el-table-column 
 | 
            label="病案号" 
 | 
            align="center" 
 | 
            key="patno" 
 | 
            prop="patno" 
 | 
          /> --> 
 | 
          <el-table-column 
 | 
            label="病案号" 
 | 
            align="center" 
 | 
            key="outhospno" 
 | 
            prop="outhospno" 
 | 
          /> 
 | 
          <el-table-column 
 | 
            label="姓名" 
 | 
            width="100" 
 | 
            align="center" 
 | 
            key="patname" 
 | 
            prop="patname" 
 | 
          > 
 | 
            <template slot-scope="scope"> 
 | 
              <el-button 
 | 
                size="medium" 
 | 
                type="text" 
 | 
                @click=" 
 | 
                  gettoken360( 
 | 
                    scope.row.idcardno, 
 | 
                    scope.row.drcode, 
 | 
                    scope.row.drname 
 | 
                  ) 
 | 
                " 
 | 
                ><span class="button-textsc">{{ 
 | 
                  scope.row.patname 
 | 
                }}</span></el-button 
 | 
              > 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column 
 | 
            label="性别" 
 | 
            width="100" 
 | 
            align="center" 
 | 
            key="sex" 
 | 
            prop="sex" 
 | 
          > 
 | 
            <template slot-scope="scope"> 
 | 
              <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span> 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column 
 | 
            label="年龄" 
 | 
            align="center" 
 | 
            key="age" 
 | 
            prop="age" 
 | 
            width="120" 
 | 
          /> 
 | 
          <el-table-column 
 | 
            label="联系电话" 
 | 
            align="center" 
 | 
            key="telcode" 
 | 
            prop="telcode" 
 | 
            width="120" 
 | 
          /> 
 | 
          <!-- <el-table-column 
 | 
            label="患者标签(缺)" 
 | 
            align="center" 
 | 
            key="tagList" 
 | 
            prop="tagList" 
 | 
            width="160" 
 | 
            :show-overflow-tooltip="true" 
 | 
          > 
 | 
            <template slot-scope="scope"> 
 | 
              <span v-for="item in scope.row.tagList">{{ item }} </span> 
 | 
            </template> 
 | 
          </el-table-column> --> 
 | 
  
 | 
          <el-table-column 
 | 
            label="诊断" 
 | 
            align="center" 
 | 
            key="diagname" 
 | 
            prop="diagname" 
 | 
            width="190" 
 | 
          /> 
 | 
          <!-- <el-table-column 
 | 
            label="主述" 
 | 
            align="center" 
 | 
            key="mainsuit" 
 | 
            prop="mainsuit" 
 | 
            width="120" 
 | 
          /> --> 
 | 
          <el-table-column 
 | 
            label="就诊科室" 
 | 
            align="center" 
 | 
            key="deptname" 
 | 
            prop="deptname" 
 | 
            width="120" 
 | 
          /> 
 | 
          <el-table-column 
 | 
            label="接诊医生" 
 | 
            align="center" 
 | 
            key="drname" 
 | 
            prop="drname" 
 | 
            width="120" 
 | 
          /> 
 | 
          <el-table-column 
 | 
            label="是否存在任务" 
 | 
            align="center" 
 | 
            key="serverState" 
 | 
            prop="serverState" 
 | 
            width="100" 
 | 
          > 
 | 
            <template slot-scope="scope"> 
 | 
              <span 
 | 
                :style="{ 
 | 
                  color: scope.row.serverState == 1 ? 'green' : 'gray', 
 | 
                }" 
 | 
              > 
 | 
                {{ scope.row.serverState == 1 ? "是" : "无" }} 
 | 
              </span> 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column 
 | 
            label="操作" 
 | 
            fixed="right" 
 | 
            align="center" 
 | 
            width="160" 
 | 
            class-name="small-padding fixed-width" 
 | 
          > 
 | 
            <template slot-scope="scope"> 
 | 
              <el-button 
 | 
                size="medium" 
 | 
                type="text" 
 | 
                @click=" 
 | 
                  $router.push({ 
 | 
                    path: '/patient/patient/profile/', 
 | 
                    query: { id: scope.row.patid }, 
 | 
                  }) 
 | 
                " 
 | 
                v-hasPermi="['system:user:edit']" 
 | 
                ><span class="button-textsc" 
 | 
                  ><i class="el-icon-zoom-in"></i>查看</span 
 | 
                ></el-button 
 | 
              > 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
        </el-table> 
 | 
  
 | 
        <pagination 
 | 
          v-show="total > 0" 
 | 
          :total="total" 
 | 
          :page.sync="queryParams.pageNum" 
 | 
          :limit.sync="queryParams.pageSize" 
 | 
          @pagination="getList" 
 | 
        /> 
 | 
      </el-col> 
 | 
    </el-row> 
 | 
    <el-dialog 
 | 
      title="批量添加任务" 
 | 
      :visible.sync="batchTaskVisible" 
 | 
      width="90%" 
 | 
      append-to-body 
 | 
    > 
 | 
      <el-row :gutter="20"> 
 | 
        <!-- 左侧:选中患者列表 --> 
 | 
        <el-col :span="12"> 
 | 
          <div class="batch-patient-section"> 
 | 
            <h4>选中患者({{ selectedPatients.length }}人)</h4> 
 | 
            <el-table 
 | 
              :data="selectedPatients" 
 | 
              border 
 | 
              style="width: 100%" 
 | 
              size="small" 
 | 
            > 
 | 
              <el-table-column prop="patname" label="姓名" width="100" /> 
 | 
              <el-table-column prop="sex" label="性别" width="80"> 
 | 
                <template slot-scope="scope"> 
 | 
                  {{ scope.row.sex === 1 ? "男" : "女" }} 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
              <el-table-column 
 | 
                label="就诊时间" 
 | 
                align="center" 
 | 
                key="admitdate" 
 | 
                prop="admitdate" 
 | 
              > 
 | 
                <template slot-scope="scope"> 
 | 
                  <span>{{ formatTime(scope.row.admitdate) }}</span> 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
              <el-table-column prop="outhospno" label="病案号" /> 
 | 
              <el-table-column prop="deptname" label="科室" /> 
 | 
            </el-table> 
 | 
          </div> 
 | 
        </el-col> 
 | 
  
 | 
        <!-- 右侧:任务列表 --> 
 | 
        <el-col :span="12"> 
 | 
          <div class="batch-task-section"> 
 | 
            <h4>任务列表(请选择1个任务)</h4> 
 | 
            <el-table 
 | 
              :data="taskList" 
 | 
              border 
 | 
              style="width: 100%" 
 | 
              size="small" 
 | 
              @current-change="handleTaskSelectionChange" 
 | 
              highlight-current-row 
 | 
            > 
 | 
              <el-table-column 
 | 
                label="任务名称" 
 | 
                fixed 
 | 
                align="center" 
 | 
                key="taskName" 
 | 
                prop="taskName" 
 | 
                :show-overflow-tooltip="true" 
 | 
              /> 
 | 
  
 | 
              <el-table-column 
 | 
                label="服务项目" 
 | 
                align="center" 
 | 
                key="templatename" 
 | 
                prop="templatename" 
 | 
                :show-overflow-tooltip="true" 
 | 
              /> 
 | 
  
 | 
              <el-table-column 
 | 
                label="创建人" 
 | 
                align="center" 
 | 
                key="createBy" 
 | 
                prop="createBy" 
 | 
                :show-overflow-tooltip="true" 
 | 
              /> 
 | 
              <el-table-column 
 | 
                label="创建时间" 
 | 
                sortable 
 | 
                align="center" 
 | 
                prop="createTime" 
 | 
              > 
 | 
                <template slot-scope="scope"> 
 | 
                  <span>{{ formatTime(scope.row.createTime) }}</span> 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
              <template #empty> 
 | 
                <div class="empty-message"> 
 | 
                  <i class="el-icon-warning"></i> 
 | 
                  <span>患者科室无匹配服务</span> 
 | 
                </div> 
 | 
              </template> 
 | 
            </el-table> 
 | 
          </div> 
 | 
        </el-col> 
 | 
      </el-row> 
 | 
  
 | 
      <!-- 底部按钮 --> 
 | 
      <div slot="footer" class="dialog-footer"> 
 | 
        <el-button @click="batchTaskVisible = false">取 消</el-button> 
 | 
        <el-button 
 | 
          type="primary" 
 | 
          :loading="batchLoading" 
 | 
          @click="submitBatchTask" 
 | 
          >创建任务</el-button 
 | 
        > 
 | 
      </div> 
 | 
    </el-dialog> 
 | 
    <!-- 用户导入对话框 --> 
 | 
    <el-dialog 
 | 
      :title="upload.title" 
 | 
      :visible.sync="upload.open" 
 | 
      width="70%" 
 | 
      append-to-body 
 | 
    > 
 | 
      <el-steps :active="dractive" simple> 
 | 
        <el-step title="上传导入文件" icon="el-icon-upload"></el-step> 
 | 
        <el-step title="导入检查" icon="el-icon-picture"></el-step> 
 | 
        <el-step title="导入结果" icon="el-icon-picture"></el-step> 
 | 
      </el-steps> 
 | 
      <!-- 上传导入文件 --> 
 | 
      <div class="download" v-if="dractive == 1"> 
 | 
        <el-upload 
 | 
          class="upload-demo" 
 | 
          ref="upload" 
 | 
          :limit="1" 
 | 
          accept=".xlsx, .xls" 
 | 
          :headers="upload.headers" 
 | 
          :action="upload.url + '?updateSupport=' + upload.updateSupport" 
 | 
          :disabled="upload.isUploading" 
 | 
          :on-progress="handleFileUploadProgress" 
 | 
          :on-success="handleFileSuccess" 
 | 
          :auto-upload="false" 
 | 
          drag 
 | 
        > 
 | 
          <i class="el-icon-upload"></i> 
 | 
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> 
 | 
          <div class="el-upload__tip text-center" slot="tip"> 
 | 
            <div class="el-upload__tip" slot="tip"> 
 | 
              <el-checkbox v-model="upload.updateSupport" /> 
 | 
              是否更新已经存在的用户数据 
 | 
            </div> 
 | 
            <span>仅允许导入xls、xlsx格式文件。</span> 
 | 
            <el-link 
 | 
              type="primary" 
 | 
              :underline="false" 
 | 
              style="font-size: 24px; vertical-align: baseline" 
 | 
              @click="importTemplate" 
 | 
              >下载模板</el-link 
 | 
            > 
 | 
          </div> 
 | 
        </el-upload> 
 | 
      </div> 
 | 
  
 | 
      <!-- 导入检查 --> 
 | 
      <div class="uploading" v-else-if="dractive == 2"> 
 | 
        <el-table :data="uploadingData" style="width: 100%"> 
 | 
          <el-table-column prop="serial" label="序号"> </el-table-column> 
 | 
          <el-table-column prop="name" label="姓名" width="100"> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="sex" label="性别" width="100"> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="certificate" label="证件类型"> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="certificatenum" label="证件号码"> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="goday" label="出生日期"> </el-table-column> 
 | 
          <el-table-column prop="menum" label="本人联系方式"> </el-table-column> 
 | 
          <el-table-column prop="younum" label="亲属联系方式"> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="tag" label="患者标签"> </el-table-column> 
 | 
          <el-table-column prop="erry" label="错误原因"> </el-table-column> 
 | 
        </el-table> 
 | 
        <pagination 
 | 
          v-show="total > 0" 
 | 
          :total="total" 
 | 
          :page.sync="queryParams.pageNum" 
 | 
          :limit.sync="queryParams.pageSize" 
 | 
          @pagination="geterryList" 
 | 
        /> 
 | 
      </div> 
 | 
      <!-- 完成 --> 
 | 
      <div class="drexamine" v-else-if="dractive == 3"> 
 | 
        <img 
 | 
          src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg" 
 | 
        /> 
 | 
        <p>导入患者成功!</p> 
 | 
        <p>本次共计导入{{ ImportQuantity }}位患者</p> 
 | 
      </div> 
 | 
  
 | 
      <div slot="footer" class="dialog-footer" v-if="dractive == 3"> 
 | 
        <!-- <el-button type="primary" @click="submitFileForm">下一步</el-button> --> 
 | 
        <el-button @click="submitclose">完成</el-button> 
 | 
      </div> 
 | 
      <div slot="footer" v-else> 
 | 
        <el-button type="primary" @click="submitFileForm">下一步</el-button> 
 | 
        <el-button @click="submitclose">取 消</el-button> 
 | 
      </div> 
 | 
    </el-dialog> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import { delUser } from "@/api/system/user"; 
 | 
  
 | 
import { 
 | 
  listPatouthosp, 
 | 
  getPatouthosp, 
 | 
  addPatouthosp, 
 | 
  updatePatouthosp, 
 | 
  delPatouthosp, 
 | 
} from "@/api/smartor/patouthosp"; 
 | 
import { particularpatient } from "@/api/patient/homepage"; 
 | 
import { listtag } from "@/api/system/label"; 
 | 
import { getToken } from "@/utils/auth"; 
 | 
import Treeselect from "@riophae/vue-treeselect"; 
 | 
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; 
 | 
import { query360PatInfo, getTasklist, addSubtask } from "@/api/AiCentre/index"; 
 | 
  
 | 
import store from "@/store"; 
 | 
  
 | 
export default { 
 | 
  name: "Userhuanze", 
 | 
  dicts: ["sys_normal_disable", "sys_user_sex"], 
 | 
  components: { Treeselect }, 
 | 
  data() { 
 | 
    return { 
 | 
      // 遮罩层 
 | 
      loading: true, 
 | 
      // 选中数组 
 | 
      ids: [], 
 | 
      // 非单个禁用 
 | 
      single: true, 
 | 
      // 非多个禁用 
 | 
      multiple: true, 
 | 
      // 显示搜索条件 
 | 
      showSearch: true, 
 | 
      // 总条数 
 | 
      total: 0, 
 | 
      // 用户表格数据 
 | 
      userList: null, 
 | 
      // 弹出层标题 
 | 
      title: "", 
 | 
      // 部门树选项 
 | 
      deptOptions: undefined, 
 | 
      // 是否显示弹出层 
 | 
      open: false, 
 | 
      // 部门名称 
 | 
      deptName: undefined, 
 | 
      // 默认密码 
 | 
      initPassword: undefined, 
 | 
      amendtag: false, //是否修改 
 | 
      // 日期范围 
 | 
      dateRange: [], 
 | 
      paperstypes: [ 
 | 
        { papersname: "身份证" }, 
 | 
        { papersname: "护照" }, 
 | 
        { papersname: "中国港澳居民身份证" }, 
 | 
        { papersname: "中国台湾居民身份证" }, 
 | 
      ], 
 | 
      // 表单参数 
 | 
      form: { 
 | 
        name: "", 
 | 
        age: "", 
 | 
        sex: "", 
 | 
        tagList: [], 
 | 
        idcardno: "", 
 | 
        telcode: "", 
 | 
        idcardtype: "", 
 | 
        relativetelcode: "", 
 | 
      }, 
 | 
      //导入进度 
 | 
      dractive: 1, 
 | 
      // 导入展示表单 
 | 
      uploadingData: {}, 
 | 
      total: 0, // 总条数 
 | 
      ImportQuantity: 999, //导入患者数量 
 | 
      Labelchange: false, //修改新增弹窗 
 | 
      propss: { multiple: true }, 
 | 
      optionstag: [], //标签列表 
 | 
      batchTaskVisible: false, // 弹窗可见性 
 | 
      selectedPatients: [], // 选中的患者列表 
 | 
      taskList: [], // 任务列表 
 | 
      selectedTask: null, // 选中的任务列表 
 | 
      batchLoading: false, // 批量提交加载状态 
 | 
      deptcode: "", 
 | 
      Patientrange: [ 
 | 
        { 
 | 
          name: "全部", 
 | 
          id: 999, 
 | 
        }, 
 | 
        { 
 | 
          name: "当前科室", 
 | 
          id: 1, 
 | 
        }, 
 | 
      ], 
 | 
      postData: { 
 | 
        XiaoXiTou: { 
 | 
          FaSongFCSJC: "ZJHES", 
 | 
          FaSongJGID: localStorage.getItem("orgid"), 
 | 
          FaSongJGMC: localStorage.getItem("orgname"), 
 | 
          FaSongSJ: "2025-01-09 17:29:36", 
 | 
          FaSongXTJC: "SUIFANGXT", 
 | 
          FaSongXTMC: "随访系统", 
 | 
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171", 
 | 
          XiaoXiLX: "SC_LC_360STCX", 
 | 
          XiaoXiMC: "360 视图查询", 
 | 
          ZuHuID: localStorage.getItem("ZuHuID"), 
 | 
          ZuHuMC: localStorage.getItem("orgname"), 
 | 
        }, 
 | 
        YeWuXX: { 
 | 
          BingRenXX: { 
 | 
            ZhengJianHM: "", 
 | 
            ZhengJianLXDM: "01", 
 | 
            ZhengJianLXMC: "居民身份证", 
 | 
            ZuZhiJGID: localStorage.getItem("orgid"), 
 | 
            ZuZhiJGMC: localStorage.getItem("orgname"), 
 | 
          }, 
 | 
          YongHuXX: { 
 | 
            XiTongID: "SUIFANGXT", 
 | 
            XiTongMC: "随访系统", 
 | 
            YongHuID: "1400466972205912064", 
 | 
            YongHuXM: "JNRMYY", 
 | 
            ZuZhiJGID: localStorage.getItem("orgid"), 
 | 
            ZuZhiJGMC: localStorage.getItem("orgname"), 
 | 
            idp: "lyra", 
 | 
          }, 
 | 
        }, 
 | 
      }, 
 | 
      defaultProps: { 
 | 
        children: "children", 
 | 
        label: "label", 
 | 
      }, 
 | 
      sourcetype: [ 
 | 
        { 
 | 
          value: 1, 
 | 
          label: "科室", 
 | 
          children: [], 
 | 
        }, 
 | 
        { 
 | 
          value: 2, 
 | 
          label: "病区", 
 | 
          children: [], 
 | 
        }, 
 | 
        { 
 | 
          value: 3, 
 | 
          label: "全部", 
 | 
        }, 
 | 
      ], 
 | 
      // 用户导入参数 
 | 
      upload: { 
 | 
        // 是否显示弹出层(用户导入) 
 | 
        open: false, 
 | 
        // 弹出层标题(用户导入) 
 | 
        title: "", 
 | 
        // 是否禁用上传 
 | 
        isUploading: false, 
 | 
        // 是否更新已经存在的用户数据 
 | 
        updateSupport: 0, 
 | 
        // 设置上传的请求头部 
 | 
        headers: { Authorization: "Bearer " + getToken() }, 
 | 
        // 上传的地址 
 | 
        url: process.env.VUE_APP_BASE_API + "/system/user/importData", 
 | 
      }, 
 | 
      // 查询参数 
 | 
      queryParams: { 
 | 
        pageNum: 1, 
 | 
        pageSize: 10, 
 | 
        searchscope: 3, 
 | 
        scopetype: [], 
 | 
        leaveldeptcodes: [], 
 | 
        leavehospitaldistrictcodes: [], 
 | 
      }, 
 | 
      // 表单校验 
 | 
      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", 
 | 
        //   }, 
 | 
        // ], 
 | 
      }, 
 | 
    }; 
 | 
  }, 
 | 
  watch: { 
 | 
    // 根据名称筛选部门树 
 | 
    deptName(val) { 
 | 
      this.$refs.tree.filter(val); 
 | 
    }, 
 | 
  }, 
 | 
  created() { 
 | 
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => { 
 | 
      return { 
 | 
        label: dept.deptName, 
 | 
        value: dept.deptCode, 
 | 
      }; 
 | 
    }); 
 | 
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => { 
 | 
      return { 
 | 
        label: dept.districtName, 
 | 
        value: dept.districtCode, 
 | 
      }; 
 | 
    }); 
 | 
    this.getList(); 
 | 
    this.gettabList(); 
 | 
  }, 
 | 
  methods: { 
 | 
    /** 查询患者列表 */ 
 | 
    getList() { 
 | 
      this.loading = true; 
 | 
      if (this.queryParams.searchscope == 3) { 
 | 
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map( 
 | 
          (obj) => obj.deptCode 
 | 
        ); 
 | 
        this.queryParams.leavehospitaldistrictcodes = 
 | 
          store.getters.belongWards.map((obj) => obj.districtCode); 
 | 
      } 
 | 
      if (this.dateRange) { 
 | 
        this.queryParams.beginTime = this.dateRange[0]; 
 | 
        this.queryParams.endTime = this.dateRange[1]; 
 | 
      } else { 
 | 
        this.queryParams.beginTime = ""; 
 | 
        this.queryParams.endTime = ""; 
 | 
      } 
 | 
      listPatouthosp(this.queryParams).then((response) => { 
 | 
        this.userList = response.rows; 
 | 
        this.total = response.total; 
 | 
        this.loading = false; 
 | 
      }); 
 | 
    }, 
 | 
    /** 查询标签列表 */ 
 | 
    gettabList() { 
 | 
      const tagqueryParams = { 
 | 
        pageNum: 1, 
 | 
        pageSize: 1000, 
 | 
        tagname: undefined, 
 | 
        tagdescription: undefined, 
 | 
        tagcategoryid: "0", 
 | 
      }; 
 | 
      listtag(tagqueryParams).then((response) => { 
 | 
        console.log(response); 
 | 
        this.optionstag = response.rows; 
 | 
      }); 
 | 
    }, 
 | 
    // 患者范围处理 
 | 
    handleChange(value) { 
 | 
      let type = value[0]; 
 | 
      let code = value.slice(-1)[0]; 
 | 
      this.queryParams.leavehospitaldistrictcodes = []; 
 | 
      this.queryParams.leaveldeptcodes = []; 
 | 
  
 | 
      if (type == 1) { 
 | 
        this.queryParams.leaveldeptcodes.push(code); 
 | 
        this.queryParams.leavehospitaldistrictcodes = []; 
 | 
        this.queryParams.searchscope = 1; 
 | 
      } else if (type == 2) { 
 | 
        this.queryParams.leavehospitaldistrictcodes.push(code); 
 | 
        this.queryParams.leaveldeptcodes = []; 
 | 
        this.queryParams.searchscope = 2; 
 | 
      } else { 
 | 
        this.queryParams.searchscope = 3; 
 | 
      } 
 | 
    }, 
 | 
    // 查询导入展示列表 
 | 
    geterryList() { 
 | 
      this.loading = true; 
 | 
      listJob(this.queryParams).then((response) => { 
 | 
        this.jobList = 1; 
 | 
        this.total = 1; 
 | 
        this.loading = false; 
 | 
      }); 
 | 
    }, 
 | 
    //患者360跳转 
 | 
    gettoken360(sfzh,drcode,drname) { 
 | 
      this.$modal.msgWarning('360功能暂未开通'); 
 | 
  return; // 阻止后续代码执行 
 | 
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh; 
 | 
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") { 
 | 
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728"; 
 | 
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY"; 
 | 
      } 
 | 
  
 | 
      query360PatInfo(this.postData).then((res) => { 
 | 
        if (res.data.url) { 
 | 
          window.open(res.data.url, "_blank"); 
 | 
          // this.linkUrl = res.data.url; 
 | 
        } else { 
 | 
          this.$modal.msgWarning("360查询无结果"); 
 | 
        } 
 | 
      }); 
 | 
    }, 
 | 
    // 筛选节点 
 | 
    filterNode(value, data) { 
 | 
      if (!value) return true; 
 | 
      return data.label.indexOf(value) !== -1; 
 | 
    }, 
 | 
    // 节点单击事件 
 | 
    handleNodeClick(data) { 
 | 
      this.queryParams.deptId = data.id; 
 | 
      this.handleQuery(); 
 | 
    }, 
 | 
  
 | 
    // 取消按钮 
 | 
    cancel() { 
 | 
      this.Labelchange = false; 
 | 
      this.reset(); 
 | 
    }, 
 | 
    // 表单重置 
 | 
    reset() { 
 | 
      this.form = { 
 | 
        name: "", 
 | 
        age: "", 
 | 
        sex: "", 
 | 
        tagList: [], 
 | 
        idcardno: "", 
 | 
        telcode: "", 
 | 
        idcardtype: "", 
 | 
        relativetelcode: "", 
 | 
      }; 
 | 
      // this.resetForm("form"); 
 | 
    }, 
 | 
    /** 搜索按钮操作 */ 
 | 
    handleQuery() { 
 | 
      this.queryParams.pageNum = 1; 
 | 
      this.getList(); 
 | 
    }, 
 | 
    /** 重置按钮操作 */ 
 | 
    resetQuery() { 
 | 
      this.dateRange = []; 
 | 
      this.resetForm("queryForm"); 
 | 
      this.queryParams = { 
 | 
        pageNum: 1, 
 | 
        pageSize: 10, 
 | 
        searchscope: 3, 
 | 
        scopetype: [], 
 | 
        leaveldeptcodes: [], 
 | 
        leavehospitaldistrictcodes: [], 
 | 
      }; 
 | 
      this.handleQuery(); 
 | 
    }, 
 | 
    // 多选框选中数据 
 | 
    handleSelectionChange(selection) { 
 | 
      this.ids = selection.map((item) => item.patid); 
 | 
      this.single = selection.length != 1; 
 | 
      this.multiple = !selection.length; 
 | 
    }, 
 | 
  
 | 
    /** 新增按钮操作 */ 
 | 
    handleAdd() { 
 | 
      this.reset(); 
 | 
      this.Labelchange = true; 
 | 
      this.amendtag = false; 
 | 
    }, 
 | 
    /** 修改按钮操作 */ 
 | 
    handleUpdate(row) { 
 | 
      console.log(row); 
 | 
      const userIds = row.patid || this.ids; 
 | 
      particularpatient(userIds).then((response) => { 
 | 
        console.log(response); 
 | 
        this.form = response.data; 
 | 
      }); 
 | 
      this.amendtag = true; 
 | 
      this.Labelchange = true; 
 | 
    }, 
 | 
  
 | 
    //修改/新增患者 
 | 
    submitForm() { 
 | 
      if (this.amendtag) { 
 | 
        console.log(22); 
 | 
        this.form.isoperation = 2; 
 | 
      } 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; 
 | 
    }, 
 | 
  
 | 
    /** 删除按钮操作 */ 
 | 
    handleDelete(row) { 
 | 
      const userIds = row.userId || this.ids; 
 | 
      this.$modal 
 | 
        .confirm('是否确认删除用户编号为"' + userIds + '"的数据项?') 
 | 
        .then(function () { 
 | 
          return deletepatient(userIds); 
 | 
        }) 
 | 
        .then(() => { 
 | 
          this.getList(); 
 | 
          this.$modal.msgSuccess("删除成功"); 
 | 
        }) 
 | 
        .catch(() => {}); 
 | 
    }, 
 | 
    /** 导出按钮操作 */ 
 | 
    handleExport() { 
 | 
      this.download( 
 | 
        "smartor/patarchive/export", 
 | 
        { 
 | 
          ...this.queryParams, 
 | 
        }, 
 | 
        `user_${new Date().getTime()}.xlsx` 
 | 
      ); 
 | 
    }, 
 | 
    /** 导入按钮操作 */ 
 | 
    handleImport() { 
 | 
      this.upload.title = "用户导入"; 
 | 
      this.upload.open = true; 
 | 
    }, 
 | 
    /** 下载模板操作 */ 
 | 
    importTemplate() { 
 | 
      this.download( 
 | 
        "smartor/import/getImportPatTemplate", 
 | 
        {}, 
 | 
        `user_template_${new Date().getTime()}.xlsx` 
 | 
      ); 
 | 
    }, 
 | 
    // 文件上传中处理 
 | 
    handleFileUploadProgress(event, file, fileList) { 
 | 
      this.upload.isUploading = true; 
 | 
    }, 
 | 
    // 文件上传成功处理 
 | 
    handleFileSuccess(response, file, fileList) { 
 | 
      this.upload.open = false; 
 | 
      this.upload.isUploading = false; 
 | 
      this.$refs.upload.clearFiles(); 
 | 
      this.$alert( 
 | 
        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + 
 | 
          response.msg + 
 | 
          "</div>", 
 | 
        "导入结果", 
 | 
        { dangerouslyUseHTMLString: true } 
 | 
      ); 
 | 
      this.getList(); 
 | 
    }, 
 | 
    // 提交上传文件 
 | 
    submitFileForm() { 
 | 
      // 上传 
 | 
      if (this.dractive == 1) { 
 | 
        this.$refs.upload.submit(); 
 | 
        this.dractive++; 
 | 
      } else { 
 | 
        this.dractive++; 
 | 
      } 
 | 
    }, 
 | 
    submitclose() { 
 | 
      this.upload.open = false; 
 | 
      this.dractive = 1; 
 | 
    }, 
 | 
    /** 批量添加任务按钮点击 */ 
 | 
    handleBatchAddTask() { 
 | 
      // 校验是否选中患者 
 | 
      if (this.ids.length === 0) { 
 | 
        this.$modal.msgWarning("请至少选中1名患者"); 
 | 
        return; 
 | 
      } 
 | 
      // 检查选中的患者中是否有已有任务的 
 | 
      const hasTaskPatients = this.userList.filter( 
 | 
        (item) => this.ids.includes(item.patid) && item.serverState == 1 
 | 
      ); 
 | 
  
 | 
      if (hasTaskPatients.length > 0) { 
 | 
        const patientNames = hasTaskPatients.map((p) => p.patname).join("、"); 
 | 
        this.$modal.msgError( 
 | 
          `选中的患者 ${patientNames} 已有任务,无法重复添加` 
 | 
        ); 
 | 
        return; 
 | 
      } 
 | 
      // 获取选中患者的科室信息(用于校验同一科室) 
 | 
      const patientDepts = new Set(); 
 | 
      let deptcode = ""; 
 | 
      this.ids.forEach((patId) => { 
 | 
        const patient = this.userList.find((item) => item.patid === patId); 
 | 
        if (patient) { 
 | 
          patientDepts.add(patient.deptname); 
 | 
          deptcode = patient.deptcode; 
 | 
        } 
 | 
      }); 
 | 
  
 | 
      // 校验是否同一科室 
 | 
      if (patientDepts.size > 1) { 
 | 
        this.$modal.msgError("选中的患者不属于同一科室,无法批量添加任务"); 
 | 
        return; 
 | 
      } 
 | 
  
 | 
      // 获取选中患者列表 
 | 
      this.selectedPatients = this.userList.filter((item) => 
 | 
        this.ids.includes(item.patid) 
 | 
      ); 
 | 
  
 | 
      // 显示弹窗 
 | 
      this.batchTaskVisible = true; 
 | 
  
 | 
      // 获取任务列表 
 | 
      this.loadTaskList(deptcode); 
 | 
    }, 
 | 
  
 | 
    /** 加载任务列表 */ 
 | 
    loadTaskList(deptcode) { 
 | 
      this.batchLoading = true; 
 | 
      let topqueryParams = { 
 | 
        pageNum: 1, 
 | 
        pageSize: 10, 
 | 
        serviceType: 3, 
 | 
        type: 2, 
 | 
        deptcode: deptcode, 
 | 
      }; 
 | 
      getTasklist(topqueryParams).then((response) => { 
 | 
        this.taskList = response.rows; 
 | 
        this.batchLoading = false; 
 | 
      }); 
 | 
    }, 
 | 
  
 | 
    /** 处理任务选择变化 */ 
 | 
    handleTaskSelectionChange(currentRow) { 
 | 
      this.selectedTask = currentRow; 
 | 
    }, 
 | 
  
 | 
    // 重写批量提交方法 
 | 
    async submitBatchTask() { 
 | 
      // 校验是否选中任务 
 | 
      if (!this.selectedTask) { 
 | 
        this.$modal.msgWarning("请选择1个任务"); 
 | 
        return; 
 | 
      } 
 | 
  
 | 
      this.batchLoading = true; 
 | 
      const successPatients = []; 
 | 
      const failedPatients = []; 
 | 
  
 | 
      try { 
 | 
        // 遍历选中的患者,逐个调用接口 
 | 
        for (const patient of this.selectedPatients) { 
 | 
          const params = { 
 | 
            taskid: this.selectedTask.taskid, 
 | 
            taskName: this.selectedTask.taskName, 
 | 
            serviceType: this.selectedTask.serviceType, 
 | 
            sendstate:2, 
 | 
            ...patient, 
 | 
            age: "", 
 | 
          }; 
 | 
  
 | 
          try { 
 | 
            await addSubtask(params); 
 | 
            successPatients.push(patient.patname); 
 | 
          } catch (error) { 
 | 
            failedPatients.push(patient.patname); 
 | 
          } 
 | 
        } 
 | 
  
 | 
        // 显示处理结果 
 | 
        let message = `成功为 ${successPatients.length} 名患者添加任务`; 
 | 
        if (failedPatients.length > 0) { 
 | 
          message += `,${failedPatients.length} 名患者添加失败`; 
 | 
        } 
 | 
        this.$modal.msgSuccess(message); 
 | 
  
 | 
        this.batchTaskVisible = false; 
 | 
        this.getList(); // 刷新患者列表 
 | 
      } catch (error) { 
 | 
        this.$modal.msgError("批量添加任务过程中出错"); 
 | 
      } finally { 
 | 
        this.batchLoading = false; 
 | 
      } 
 | 
    }, 
 | 
  
 | 
    /** 批量添加患者任务接口 */ 
 | 
    batchAddPatientTask(params) {}, 
 | 
  }, 
 | 
}; 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
.el-button--primary.is-plain { 
 | 
  color: #ffffff; 
 | 
  background: #409eff; 
 | 
  border-color: #4fabe9; 
 | 
} 
 | 
.document { 
 | 
  width: 100px; 
 | 
  height: 50px; 
 | 
} 
 | 
.documentf { 
 | 
  display: flex; 
 | 
  justify-content: flex-end; 
 | 
} 
 | 
.download { 
 | 
  text-align: center; 
 | 
  .el-upload__tip { 
 | 
    font-size: 23px; 
 | 
  } 
 | 
  .el-upload__text { 
 | 
    font-size: 23px; 
 | 
  } 
 | 
} 
 | 
.uploading { 
 | 
  margin-top: 20px; 
 | 
  margin: 20px; 
 | 
  padding: 30px; 
 | 
  background: #ffffff; 
 | 
  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); 
 | 
} 
 | 
.drexamine { 
 | 
  display: flex; 
 | 
  align-items: center; 
 | 
  justify-content: center; 
 | 
  padding: 30px; 
 | 
  background: #daeaf5; 
 | 
  img { 
 | 
    width: 100px; 
 | 
    height: 100px; 
 | 
  } 
 | 
} 
 | 
.button-textsc { 
 | 
  color: #3664D9; 
 | 
} 
 | 
.batch-patient-section, 
 | 
.batch-task-section { 
 | 
  padding: 15px; 
 | 
  border: 1px solid #ebeef5; 
 | 
  border-radius: 4px; 
 | 
  margin-bottom: 15px; 
 | 
} 
 | 
  
 | 
.el-table--enable-row-hover .el-table__body tr:hover > td { 
 | 
  background-color: #f5f7fa; 
 | 
} 
 | 
.el-table__body tr.current-row > td { 
 | 
  background-color: #e6f7ff; 
 | 
} 
 | 
  
 | 
/* 禁用状态下按钮样式 */ 
 | 
.el-button.is-disabled { 
 | 
  cursor: not-allowed; 
 | 
} 
 | 
.batch-patient-section h4, 
 | 
.batch-task-section h4 { 
 | 
  margin-top: 0; 
 | 
  margin-bottom: 15px; 
 | 
  color: #303133; 
 | 
  font-size: 16px; 
 | 
} 
 | 
  
 | 
/* 表格样式优化 */ 
 | 
.el-table { 
 | 
  margin-bottom: 10px; 
 | 
} 
 | 
  
 | 
/* 弹窗底部按钮间距 */ 
 | 
.dialog-footer { 
 | 
  text-align: right; 
 | 
  padding: 10px 20px 20px; 
 | 
} 
 | 
</style> 
 |