| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 | <template>  <page-layer>    <template #header>      <el-date-picker          v-model="dateRange"          :shortcuts="shortcuts"          end-placeholder="结束日期"          range-separator="至"          start-placeholder="开始日期"          style="width: 220px"          type="daterange"      />        病房:      <el-select v-model="queryParam.ward" clearable filterable style="width: 120px">        <el-option v-for="item in wardList" :key="item.code" :label="item.name" :value="item.code"></el-option>      </el-select>        住院号:      <el-input v-model="queryParam.patNo" clearable style="width: 100px"></el-input>        状态:      <el-select v-model="queryParam.status" style="width: 80px">        <el-option v-for="item in statusList" :key="item.code" :label="item.name" :value="item.code"></el-option>      </el-select>      <el-divider direction="vertical" />      <el-checkbox v-model="queryParam.jzFlag">急诊</el-checkbox>      <el-divider direction="vertical" />      <el-button icon="Search" type="primary" @click="clickQuery">查询</el-button>    </template>    <template #main>      <el-tag effect="dark" size="small" type="danger">急诊:{{ emergencyCount }}条</el-tag>      <el-tag effect="dark" size="small">普通:{{ surgeryList.length - emergencyCount }}条</el-tag>      <el-table :data="surgeryList.slice((currentPage - 1) * pageSize, currentPage * pageSize)"                :height="window.h - 60" border :row-class-name="differChargedRows"                header-cell-class-name="cell-border" cell-class-name="cell-border">        <el-table-column label="手术编号" prop="recordId" width="60">          <template #default="scope">            <el-tag :type="scope.row.urgentClinicFlag === '1' ? 'danger' : ''" effect="dark" @click="clickToModifyTime(scope.row)">              {{ scope.row.recordId }}            </el-tag>          </template>        </el-table-column>        <el-table-column label="日期" prop="opDatetime"></el-table-column>        <el-table-column label="送出时间" prop="applyDate"></el-table-column>        <el-table-column label="手术间" prop="roomName" width="80">          <template #default="scope">            <el-select v-model="scope.row.roomCode" @focus="handleSelectionFocus(scope.row, 'roomCode')"                       @change="(roomCode) => handleSelectionChange(scope.row.recordId, 'room_code', roomCode)">              <el-option v-for="item in allRooms" :value="item.code" :label="item.name" :disabled="item.statusFlag === 2"></el-option>            </el-select>          </template>        </el-table-column>        <el-table-column label="病房" prop="wardName"></el-table-column>        <el-table-column label="床号" prop="bedNo" width="45"></el-table-column>        <el-table-column label="住院号" prop="inpatientNo" width="60"></el-table-column>        <el-table-column label="姓名" prop="patientName" width="60"></el-table-column>        <el-table-column label="年龄" prop="age" width="45"></el-table-column>        <el-table-column label="性别" prop="sex" width="45"></el-table-column>        <el-table-column label="手术名称" prop="opName"></el-table-column>        <el-table-column label="麻醉方式" prop="hocusName" width="60"></el-table-column>        <el-table-column label="麻醉医生" prop="doctorMzYsName" width="60"></el-table-column>        <el-table-column label="手术医生" width="60">          <template #default="scope">            <div style="width: 100%; min-height: 30px;" @click="beforeSearch(scope.row)">{{ scope.row.doctorZdName }}</div>          </template>        </el-table-column>        <el-table-column label="器械护士" width="60">          <template #default="scope">            <el-select v-model="scope.row.nurseQx" filterable @focus="handleSelectionFocus(scope.row, 'nurseQx')"                       @change="(nurseQx) => handleSelectionChange(scope.row.recordId, 'nurse_qx', nurseQx)">              <el-option v-for="item in allStaffs" :value="item.code" :label="item.name"></el-option>            </el-select>          </template>        </el-table-column>        <el-table-column label="巡回护士" width="60">          <template #default="scope">            <el-select v-model="scope.row.nurseXh" filterable @focus="handleSelectionFocus(scope.row, 'nurseXh')"                       @change="(nurseXh) => handleSelectionChange(scope.row.recordId, 'nurse_xh', nurseXh)">              <el-option v-for="item in allStaffs" :value="item.code" :label="item.name"></el-option>            </el-select>          </template>        </el-table-column>        <el-table-column label="申请医生" prop="applyDocName" width="60"></el-table-column>        <el-table-column label="诊断" prop="diagBeforeOp"></el-table-column>        <el-table-column label="分类" width="70">          <template #default="scope">            <el-select v-model="scope.row.urgentClinicFlag">              <el-option label="普通" value="0"></el-option>              <el-option label="急诊" value="1"></el-option>              <el-option label="择期" value="2"></el-option>              <el-option label="限期" value="3"></el-option>            </el-select>          </template>        </el-table-column>        <el-table-column label="手术班次" width="70">          <template #default="scope">            <el-select v-model="scope.row.ssbc">              <el-option label="正常" value="1"></el-option>              <el-option label="加班" value="2"></el-option>            </el-select>          </template>        </el-table-column>        <el-table-column label="级别" width="95">          <template #default="scope">            <el-select v-model="scope.row.opScale">              <el-option label="一级手术" value="4"></el-option>              <el-option label="二级手术" value="3"></el-option>              <el-option label="三级手术" value="2"></el-option>              <el-option label="四级手术" value="1"></el-option>            </el-select>          </template>        </el-table-column>        <el-table-column label="体外标志">          <template #default="scope">            <el-select v-model="scope.row.twFlag" @focus="handleSelectionFocus(scope.row, 'twFlag')"                       @change="(twFlag) => handleSelectionChange(scope.row.recordId, 'tw_flag', twFlag)">              <el-option label="否" value="0"></el-option>              <el-option label="是" value="1"></el-option>            </el-select>          </template>        </el-table-column>        <el-table-column label="手术台次" prop="sstc"></el-table-column>        <el-table-column label="备注" prop="remark"></el-table-column>        <el-table-column label="手术开始时间" prop="opStartDate"></el-table-column>        <el-table-column label="手术结束时间" prop="opEndDate"></el-table-column>        <el-table-column label="麻醉开始时间" prop="anstStartDate"></el-table-column>        <el-table-column label="麻醉结束时间" prop="anstEndDate"></el-table-column>        <el-table-column fixed="right" label="操作" width="110">          <template #default="scope">            <el-button link type="danger" icon="Delete" @click.prevent="beforeCancelSurgery(scope.row)">取消</el-button>            <el-button link type="primary" icon="Document" @click.prevent="doctorAdvise(scope.row)" style="margin-left: 0">医嘱</el-button>          </template>        </el-table-column>      </el-table>      <el-pagination          :current-page="currentPage"          :page-size="pageSize"          :total="surgeryList.length"          layout="total,prev, pager, next"          @current-change="handleCurrentChange"      ></el-pagination>    </template>  </page-layer>  <search v-if="showSearch" :title="titleOfSearch" target="physician" show-emp-dept @close="showSearch = false" @click-item="handleClickSearchResult"></search></template><script name="SurgeryArrangement" setup>import {  getDicList,  huoQuShouShuAnPaiXinXi,  cancelSurgery,  updateArrangement} from '@/api/surgical-management/surgery-arrangement'import { shortcuts } from '@/data/shortcuts.js'import { getDateRangeFormatDate, getDateRangeFormatDateTime } from '@/utils/date'import { listIsBlank, stringIsBlank, stringNotBlank } from '@/utils/blank-utils'import store from '@/store'import {ElMessage, ElMessageBox} from 'element-plus'import PageLayer from '@/layout/PageLayer.vue'import Search from '@/components/search/Index.vue'import router from '@/router'const window = computed(() => {  return store.state.app.windowSize})let currentPage = $ref(1)let pageSize = $ref(30)let emergencyCount = $ref(0)let wardList = $ref([])let allRooms = $ref([])let allStaffs = $ref([])let statusList = $ref([  { code: '0', name: '全部'},  { code: '1', name: '申请' },  { code: '2', name: '安排' },  { code: '3', name: '确认' },  { code: 'd', name: '取消' },])let dateRange = $ref([shortcuts[0].value[0], shortcuts[0].value[1]])let queryParam = $ref({  ward: '',  patNo: '',  status: '0',  startTime: '',  endTime: '',  jzFlag: false,})let surgeryList = $ref([])const clickQuery = () => {  if (listIsBlank(dateRange)) {    ElMessage.error('请先输入日期')    return  }  let dateS = getDateRangeFormatDate(dateRange)  queryParam.startTime = dateS.startTime  queryParam.endTime = dateS.endTime  huoQuShouShuAnPaiXinXi(queryParam).then((res) => {    surgeryList = res    emergencyCount = 0    surgeryList.forEach((item) => {      if (stringNotBlank(item.urgentClinicFlag)) {        if (item.urgentClinicFlag === '1') {          emergencyCount++        }      }    })  })}const handleCurrentChange = (val) => {  currentPage = val}const differChargedRows = ({ row }) => {  if (row.chargeSum && row.chargeSum > 0) {    return 'charged-row'  }}const beforeCancelSurgery = (row) => {  if (row.status === '3') {    ElMessage({      message: '已完成的手术不可取消。',      type: 'error',      duration: 2500,      showClose: true    })    return  }  ElMessageBox.confirm("是否确认取消该手术?", "提示", {    type: 'warning'  }).then(() => {    cancelSurgery(row.recordId).then(res => {      ElMessage({        message: res,        type: 'success',        duration: 2500,        showClose: true      })    })  })}let showSearch = $ref(false)let titleOfSearch = $ref('')let currentRow = $ref({})let currentKey = $ref('')const beforeSearch = (row) => {  currentRow = row  currentKey = 'doctor_zd'  titleOfSearch = '手术医生';  showSearch = true}const handleClickSearchResult = (item) => {  showSearch = false  handleArrangementChange(currentRow.recordId, currentKey, item.code).then(() => {    currentRow.doctorZd = item.code    currentRow.doctorZdName = item.name  })}const oldSelection = reactive({  key: '',  val: ''})const handleSelectionFocus = (row, key) => {  currentRow = row  oldSelection.key = key  oldSelection.val = row[key]}const handleSelectionChange = (orderId, key, value) => {  handleArrangementChange(orderId, key, value).then(() => {  }).catch(() => {    currentRow[oldSelection.key] = oldSelection.val  })}const handleArrangementChange = (orderId, key, value) => {  return new Promise((resolve, reject) => {    updateArrangement(orderId, key, value).then(() => {      resolve()    }).catch(() => {      reject()    })  })}const doctorAdvise = (row) => {  router.push({    name: 'yiZhuLuRu',    params: {      inpatientNo: row.inpatientNo,      admissTimes: row.admissTimes    }  })}onMounted(() => {  getDicList().then((res) => {    wardList = res.allWards    allRooms = res.allRooms    allStaffs = res.allStaffs  })  clickQuery()})</script><style scoped>:deep(.el-table tbody tr:hover>td) {  background-color: unset !important;}:deep(.el-table .el-table-fixed-column--right .cell) {  width: 100%;  background: white;  position: absolute;  top: 0;  bottom: 0;  display: flex;  align-items: center;}:deep(.el-table .charged-row) {  background: rgba(142, 252, 142, 0.8);}:deep(.el-table .cell-border) {  border: 1px solid #555;  color: black;  padding: 0;}:deep(.el-input__inner) {  color: black !important;}:deep(.el-input--small .el-input__wrapper) {  padding: 1px 4px;}:deep(.el-table .el-input__suffix) {  display: none;}</style>
 |