123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524 |
- <template>
- <el-container>
- <el-aside width="195px">
- <HuoQuMuBan @selectionFeiYong="xuanZeXiangMuTable"></HuoQuMuBan>
- </el-aside>
- <el-main>
- <el-button icon="StarOff" type="warning" @click="baoCunMuBanDialog = true">存模板</el-button>
- <el-button icon="Upload" type="primary" @click="shangChuanXiangMu">保存</el-button>
- <el-button icon="Plus" type="success" @click="xinZhengXiangMuDialog = true">新增</el-button>
- <el-select v-model="zhiXingKeShi" filterable style="width: 120px; margin: 0px 10px 0px 10px">
- <el-option v-for="item in deptData" :key="item.code" :label="item.name" :value="item.code">
- <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
- <el-divider direction="vertical"></el-divider>
- <span>{{ item.name }}</span></el-option
- >
- </el-select>
- <el-button icon="Edit" type="warning" @click="xieGaiZhiXingKeShi">修改执行科室</el-button>
- <span v-if="panDuanSFWeiShouShuShi()">
- 病区:
- <el-select v-model="queryWard" filterable style="width: 120px" @change="getBingQuDuiYingKeShiChange">
- <el-option v-for="item in wardData" :key="item.code" :label="item.name" :value="item.code">
- <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
- <el-divider direction="vertical"></el-divider>
- <span>{{ item.name }}</span></el-option
- > </el-select
- >小科室:
- <el-select v-model="queryDept" filterable style="width: 120px">
- <el-option v-for="item in xiaoKeShiList" :key="item.code" :label="item.name" :value="item.code">
- <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
- <el-divider direction="vertical"></el-divider>
- <span>{{ item.name }}</span></el-option
- >
- </el-select>
- 手术编码:
- <el-input v-model="ssCode" clearable placeholder="请输入手术编码" style="width: 120px"></el-input>
- </span>
- <el-tag type="danger"> 项目总价:{{ xiangMuZongJia }}</el-tag>
- <el-table :data="feiYongShuJu" :height="tableHeight - 27" highlight-current-row stripe style="margin-top: 10px">
- <el-table-column label="录入信息">
- <el-table-column label="是否自费" width="130">
- <template #default="scope">
- <el-switch
- v-model="scope.row.ybSelfFlag"
- :active-value="1"
- :inactive-value="0"
- active-color="#ff4949"
- active-text="自费"
- inactive-color="#13ce66"
- inactive-text="医保"
- ></el-switch>
- </template>
- </el-table-column>
- <el-table-column label="医生" width="70px">
- <template #default="scope">
- <el-select v-model="scope.row.doctorCode" :remote-method="remoteMethodRenYuan" clearable filterable remote
- style="width: 100px">
- <el-option v-for="item in renYuanList" :key="item.code" :label="item.name" :value="item.code">
- <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
- <el-divider direction="vertical"></el-divider>
- <span>{{ item.name }}</span>
- </el-option>
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
- <el-table-column label="名称" prop="chargeName"></el-table-column>
- <el-table-column label="执行科室" prop="deptCode">
- <template #default="scope">
- <el-select v-model="scope.row.deptCode" filterable style="width: 90%">
- <el-option v-for="item in deptData" :key="item.code" :label="item.name" :value="item.code">
- <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
- <el-divider direction="vertical"></el-divider>
- <span>{{ item.name }}</span></el-option
- >
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="单价" prop="chargeAmount"></el-table-column>
- <el-table-column label="数量" prop="amount" width="130">
- <template #default="scope">
- <!--precision 限制输入的精度 0 就是不带任何一位小数点 -->
- <el-input-number v-model="scope.row.amount" :min="0" :precision="1"
- style="width: 120px"></el-input-number>
- </template>
- </el-table-column>
- </el-table-column>
- <el-table-column label="金额">
- <template #default="scope">
- {{ (scope.row.chargeAmount * scope.row.amount).toFixed(2) }}
- </template>
- </el-table-column>
- <el-table-column label="账单码" prop="billItemName"></el-table-column>
- <el-table-column label="操作">
- <template #default="scope">
- <el-button type="danger" @click="shanChuXiangMuClick(scope.$index)">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- </el-main>
- <el-dialog v-model="xinZhengXiangMuDialog" :width="1500" title="新增">
- 搜索:
- <el-input v-model="chargeCodePy" style="width: 140px" @keyup.enter="rmChargePyCode"></el-input>
- <el-divider direction="vertical"></el-divider>
- <el-button type="primary" @click="rmChargePyCode">查询</el-button>
- <el-divider direction="vertical"></el-divider>
- <el-switch
- v-model="xiangMuHuoYaoPinFlag"
- :active-value="1"
- :inactive-value="0"
- active-color="#409EFF"
- active-text="药品"
- inactive-color="#13ce66"
- inactive-text="项目"
- ></el-switch>
- <el-divider direction="vertical"></el-divider>
- <el-table
- :data="
- xiangMuHuoYaoPinShuJu.data.slice(
- (xiangMuHuoYaoPinShuJu.currentPage - 1) * xiangMuHuoYaoPinShuJu.pageSize,
- xiangMuHuoYaoPinShuJu.currentPage * xiangMuHuoYaoPinShuJu.pageSize
- )
- "
- :height="tableHeight / 1.2"
- >
- <el-table-column label="操作" width="40">
- <template #default="scope">
- <el-button text @click="danGeXiangMuBaoCun(scope.row)" type="primary">添加</el-button>
- </template>
- </el-table-column>
- <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
- <el-table-column label="项目名称" prop="chargeName"></el-table-column>
- <el-table-column label="国家编码" prop="nationalCode"></el-table-column>
- <el-table-column label="国家名称" prop="nationalName"></el-table-column>
- <el-table-column label="单位" prop="spec"></el-table-column>
- <el-table-column label="执行科室" prop="deptCode">
- <template #default="scope">
- <el-select v-model="scope.row.deptCode" filterable style="width: 90%">
- <el-option v-for="item in deptData" :key="item.code" :label="item.name" :value="item.code">
- <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
- <el-divider direction="vertical"></el-divider>
- <span>{{ item.name }}</span></el-option
- >
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="单价" prop="chargeAmount"></el-table-column>
- <el-table-column label="数量" prop="amount">
- <template #default="scope">
- <el-input-number v-model="scope.row.amount" :min="1" :precision="1"></el-input-number>
- </template>
- </el-table-column>
- <el-table-column label="金额">
- <template #default="scope">
- {{ (scope.row.chargeAmount * scope.row.amount).toFixed(2) }}
- </template>
- </el-table-column>
- <el-table-column label="账单码" prop="billItemName"></el-table-column>
- <el-table-column label="规格" prop="descriptions" show-overflow-tooltip></el-table-column>
- <el-table-column v-if="xiangMuHuoYaoPinFlag === 1" label="库存" prop="stockAmount"></el-table-column>
- <el-table-column v-if="xiangMuHuoYaoPinFlag === 1" label="医保类型" prop="yblx"></el-table-column>
- </el-table>
- <el-pagination
- :current-page="xiangMuHuoYaoPinShuJu.currentPage"
- :page-size="xiangMuHuoYaoPinShuJu.pageSize"
- :total="xiangMuHuoYaoPinShuJu.data.length"
- background
- layout="total, sizes, prev, pager, next, jumper"
- @size-change="xinZhengSizeChange"
- @current-change="xinZhengCurrentChange"
- >
- </el-pagination>
- </el-dialog>
- <el-dialog v-model="baoCunMuBanDialog" title="保存模板">
- <el-row>
- <el-col :span="24">
- 模板名称:
- <el-input v-model="cunMuBanPojo.name" maxlength="15" show-word-limit @blur="zhuanPinYin"></el-input>
- </el-col>
- <el-col :span="12">
- 拼音码:
- <el-input v-model="cunMuBanPojo.pyCode" maxlength="8" show-word-limit></el-input>
- </el-col>
- <el-col :span="12">
- 五笔码:
- <el-input v-model="cunMuBanPojo.dcode" maxlength="8" show-word-limit></el-input>
- </el-col>
- <!-- <el-col :span="12"> 排序码:<el-input v-model="cunMuBanPojo.paiXu" maxlength="7" show-word-limit></el-input> </el-col> -->
- <el-col :span="12">
- <el-button icon="Upload" style="margin-top: 10px" type="primary" @click="baoCunMuBan">保存</el-button>
- </el-col>
- </el-row>
- </el-dialog>
- </el-container>
- </template>
- <script>
- import {computed, onMounted, ref, watch} from 'vue'
- import {
- getBingQuDuiYingKeShi,
- getDept,
- getMuBanXinXi,
- getPyCode,
- getWard,
- queryDanGeXiangMu,
- shangChuanMuBan,
- xiangMuFeiYongShangChuan
- } from '@/api/inpatient/xiang-mu-lu-ru'
- import {getRenYuan} from '../../api/public-api.js'
- import store from '@/store'
- import {getDatetime} from '@/utils/date'
- import {ElMessage, ElMessageBox} from 'element-plus'
- import {clone} from '@/utils/clone'
- import HuoQuMuBan from './HuoQuMuBan.vue'
- export default {
- components: {
- HuoQuMuBan,
- },
- props: {
- patient: {
- type: Object,
- },
- },
- setup(props, cxt) {
- const windowSize = store.state.app.windowSize
- const tableHeight = windowSize.h - 170
- const deptData = ref([])
- const wardData = ref([])
- // 手术编码
- const ssCode = ref('')
- const muBanCurrentPage = ref(1)
- const muBanPageSize = ref(10)
- const queryDept = ref('')
- const queryWard = ref('')
- const xiaoKeShiList = ref([])
- const muBanHandleCurrentChange = (val) => {
- muBanCurrentPage.value = val
- }
- // 获取模板信息
- const getMuBanXinXiClick = (row) => {
- getMuBanXinXi(row.name, row.opIdCode).then((res) => {
- muBanXiangQing.value = res
- })
- }
- // 获取模板的详情
- const muBanXiangQing = ref([])
- // 获取选择的数据
- const xuanZeXiangMuTable = (param) => {
- let val = param.val
- for (let i = 0; i < val.length; i++) {
- if (chargeCode.value.indexOf(val[i].chargeCodeMx) === -1) {
- chargeCode.value.push(val[i].chargeCodeMx)
- val[i].deptCode = store.state.user.info.deptCode
- feiYongShuJu.value.push(val[i])
- }
- }
- }
- const chargeCode = ref([])
- onMounted(() => {
- // 获取科室
- getDept().then((res) => {
- deptData.value = res
- })
- getWard().then((res) => {
- wardData.value = res
- })
- })
- const feiYongShuJu = ref([])
- const shangChuanXiangMu = () => {
- let shangChuanFeiYong = {
- // 这里又要反回来 就尼玛坑爹 我也不知道为什么
- dept: queryWard.value,
- ward: queryDept.value,
- inpatientNo: props.patient.inpatientNo,
- admissTimes: props.patient.admissTimes,
- zySerialNo: props.patient.zySerialNo,
- ssCode: ssCode.value,
- referPhysician: props.patient.referPhysician,
- list: feiYongShuJu.value,
- orderNo: 3,
- ledgerSn: props.patient.ledgerSn,
- }
- if (feiYongShuJu.value.length === 0) {
- return ElMessage.error('请先选择上传数据。')
- }
- //在此处上传
- ElMessageBox.confirm('共上传【' + feiYongShuJu.value.length + '】条', '请认真核对', {
- cancelButtonText: '取消',
- confirmButtonText: '确定',
- })
- .then(() => {
- xiangMuFeiYongShangChuan(shangChuanFeiYong).then(() => {
- feiYongShuJu.value = []
- chargeCode.value = []
- })
- })
- .catch(() => {
- })
- }
- const shanChuXiangMuClick = (val) => {
- feiYongShuJu.value.splice(val, 1)
- chargeCode.value.splice(val, 1)
- }
- // 新增项目或者药品
- const xinZhengXiangMuDialog = ref(false)
- // 判断查询药品还是项目
- const xiangMuHuoYaoPinFlag = ref(0)
- // 这个是远程查询数据后 保存
- const xiangMuHuoYaoPinShuJu = ref({
- currentPage: 1,
- pageSize: 20,
- data: [],
- })
- // 远程查询的
- const chargeCodePy = ref('')
- /**
- * 远程搜索
- */
- const rmChargePyCode = () => {
- if (chargeCodePy.value.length >= 2) {
- queryDanGeXiangMu(chargeCodePy.value, xiangMuHuoYaoPinFlag.value).then((res) => {
- xiangMuHuoYaoPinShuJu.value.data = res
- })
- }
- }
- // 单个费用
- const danGeFeiYong = ref([])
- const danGeXiangMuBaoCun = (val) => {
- let key
- if (xiangMuHuoYaoPinFlag.value === 1) {
- key = val.chargeCodeMx + val.serial
- } else {
- key = val.chargeCodeMx
- }
- if (chargeCode.value.indexOf(key) > -1) {
- return ElMessage.warning({
- message: '请勿重复录入',
- showClose: true,
- })
- } else {
- if (typeof val.deptCode === 'undefined') {
- val.deptCode = store.state.user.info.deptCode
- }
- feiYongShuJu.value.push(val)
- chargeCode.value.push(key)
- ElMessage.success({
- message: '添加成功',
- showClose: true,
- })
- }
- }
- const xiangMuZongJia = computed(() => {
- let sum = 0
- for (let i = 0; i < feiYongShuJu.value.length; i++) {
- sum += feiYongShuJu.value[i].chargeAmount * feiYongShuJu.value[i].amount
- }
- return sum.toFixed(2)
- })
- watch(
- () => props.patient,
- () => {
- // 这里刚好是反着的
- setTimeout(() => {
- queryWard.value = props.patient.admissDept
- getBingQuDuiYingKeShiChange()
- queryDept.value = props.patient.zkWard
- }, 200)
- }
- )
- // 以下是保存模板
- const baoCunMuBanDialog = ref(false)
- const cunMuBanPojo = ref({
- pyCode: '',
- dcode: '',
- name: '',
- paiXu: '',
- dept: '',
- deptCode: store.state.user.info.deptCode,
- list: [],
- })
- // 获取到保存模板的拼音码和五笔码
- const zhuanPinYin = () => {
- if (cunMuBanPojo.value.name !== '') {
- getPyCode(cunMuBanPojo.value.name).then((res) => {
- cunMuBanPojo.value.pyCode = res.pyCode
- cunMuBanPojo.value.dcode = res.wbCode
- })
- }
- }
- const baoCunMuBan = () => {
- if (feiYongShuJu.value.length === 0) {
- ElMessage.error({
- message: '请先选择项目',
- showClose: true,
- })
- return
- }
- if (cunMuBanPojo.value.name === '' || cunMuBanPojo.value.pyCode === '' || cunMuBanPojo.value.dcode === '') {
- ElMessage.error({
- message: '模板名称,拼音码,五笔码不能为空',
- showClose: true,
- })
- return
- }
- cunMuBanPojo.value.list = clone(feiYongShuJu.value)
- // 开始上传
- shangChuanMuBan(cunMuBanPojo.value).then(() => {
- cunMuBanPojo.value = {}
- })
- }
- // 根据病人的科室来获取
- const getBingQuDuiYingKeShiChange = () => {
- getBingQuDuiYingKeShi(queryWard.value).then((res) => {
- xiaoKeShiList.value = res
- queryDept.value = ''
- })
- }
- const zhiXingKeShi = ref(store.state.user.info.deptCode)
- const xieGaiZhiXingKeShi = () => {
- for (let i = 0; i < feiYongShuJu.value.length; i++) {
- feiYongShuJu.value[i].deptCode = zhiXingKeShi.value
- }
- }
- // 新增中的分页 事件
- const xinZhengSizeChange = (val) => {
- xiangMuHuoYaoPinShuJu.value.pageSize = val
- }
- const xinZhengCurrentChange = (val) => {
- xiangMuHuoYaoPinShuJu.value.currentPage = val
- }
- watch(
- () => xiangMuHuoYaoPinFlag.value,
- () => {
- xiangMuHuoYaoPinShuJu.value.data = []
- }
- )
- const renYuanList = ref([])
- // 搜索 医生工号
- const remoteMethodRenYuan = (val) => {
- if (val.length >= 2)
- getRenYuan(val).then((res) => {
- renYuanList.value = res
- })
- }
- return {
- tableHeight,
- muBanCurrentPage,
- muBanHandleCurrentChange,
- muBanPageSize,
- getMuBanXinXiClick,
- muBanXiangQing,
- xuanZeXiangMuTable,
- deptData,
- feiYongShuJu,
- getDatetime,
- shangChuanXiangMu,
- shanChuXiangMuClick,
- xinZhengXiangMuDialog,
- xiangMuHuoYaoPinFlag,
- xiangMuHuoYaoPinShuJu,
- chargeCodePy,
- rmChargePyCode,
- danGeFeiYong,
- danGeXiangMuBaoCun,
- wardData,
- queryWard,
- queryDept,
- ssCode,
- xiangMuZongJia,
- baoCunMuBanDialog,
- cunMuBanPojo,
- zhuanPinYin,
- baoCunMuBan,
- getBingQuDuiYingKeShiChange,
- panDuanSFWeiShouShuShi,
- zhiXingKeShi,
- xieGaiZhiXingKeShi,
- xiaoKeShiList,
- xinZhengCurrentChange,
- xinZhengSizeChange,
- remoteMethodRenYuan,
- renYuanList,
- }
- },
- }
- function panDuanSFWeiShouShuShi() {
- let dept = store.state.user.info.deptCode
- if (dept === '1300000' || dept === '3100000' || dept === '1300010') {
- return true
- }
- return false
- }
- </script>
- <style></style>
|