Merge branch 'main' of ssh://git.jizhiweb.cn:2222/clinic-v2/web

This commit is contained in:
LiJianZhao 2025-05-27 14:18:28 +08:00
commit 819c242b8f
57 changed files with 1401 additions and 996 deletions

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<link rel="stylesheet" href="@/assets/iconfont/iconfont.css">
<link rel="stylesheet" href="/static/iconfont/iconfont.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>药慧精灵智慧诊所</title>
</head>

View File

@ -0,0 +1,38 @@
@font-face {
font-family: "iconfont"; /* Project id 4921806 */
src: url('iconfont.woff?t=1748312335696') format('woff'),
url('iconfont.ttf?t=1748312335696') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-yuyueh:before {
content: "\e60d";
}
.icon-yuyue:before {
content: "\e606";
}
.icon-qunzutaozhuang:before {
content: "\eac9";
}
.icon-jia:before {
content: "\e6a9";
}
.icon-RectangleCopy:before {
content: "\e6a2";
}
.icon-RectangleCopy1:before {
content: "\e6a4";
}

Binary file not shown.

Binary file not shown.

296
src/assets/config/API.ts Normal file
View File

@ -0,0 +1,296 @@
export namespace API {
export namespace Charge {
export namespace Log {
export const List = 'charge/log/list'//收费记录;
export const ReportWithDays = 'charge/log/reportWithDays'//每日收费报表;
export const ListByPatientId = 'charge/log/listByPatientId'//病人付费记录;
export const ListByDatetime = 'charge/log/listByDatetime'//获取收退费记录;
}
export namespace Order {
export const List = 'charge/order/list'//查询list 只有订单信息;
export const Save = 'charge/order/save'//保存收费订单;
export const Complete = 'charge/order/complete'//完成订单;
export const GetPrintInfoByCode = 'charge/order/getPrintInfoByCode'//根据订单号获取订单详情,小票打印用;
export const GetByCode = 'charge/order/getByCode'//根据code查询订单详情;
export const Refund = 'charge/order/refund';
export const ListWithDetail = 'charge/order/listWithDetail'//查询list 带详情;
export const GetByDiagnosisCode = 'charge/order/getByDiagnosisCode'//根据诊断code和状态获取诊断信息;
}
export namespace Social {
export const PrePay = 'charge/social/prePay'//医保预支付;
export const RealPay = 'charge/social/realPay'//医保真实支付;
export const Upload = 'charge/social/upload'//医保上传支付明细;
}
}
export namespace Common {
export namespace Auth {
export const Get = 'common/auth/get'//获取认证信息;
export const Set = 'common/auth/set'//设置认证信息;
export const Check = 'common/auth/check';
}
export namespace Config {
export const Get = 'common/config/get'//根据key获取配置信息;
export const List = 'common/config/list'//查询配置信息;
export const GetAll = 'common/config/getAll'//查询所有配置信息;
export const SavePrinter = 'common/config/savePrinter'//保存打印机配置;
export const Edit = 'common/config/edit'//修改配置信息;
export const GetPrintConfig = 'common/config/getPrintConfig'//获取打印机配置;
}
export namespace Log {
export const List = 'common/log/list'//查询操作日志;
}
export namespace File {
export const GetImage = 'common/file/getImage'//获取图片;
export const Download = 'common/file/download'//下载文件;
export const Upload = 'common/file/upload'//上传文件;
export const UploadToTemp = 'common/file/uploadToTemp'//上传临时文件;
}
export namespace ManagerUser {
export const List = 'common/ManagerUser/list'//所有人员信息;
export const Verify = 'common/ManagerUser/verify'//验证token;
export const Login = 'common/ManagerUser/login'//登录;
}
export namespace Sign {
export const SignOut = 'common/sign/signOut'//医保签退;
export const SignIn = 'common/sign/signIn'//医保签到;
}
}
export namespace Diagnosis {
export namespace Base {
export const Save = 'diagnosis/base/save'//保存诊断;
export const GetByDiagnosisCode = 'diagnosis/base/getByDiagnosisCode'//获取诊断信息;
export const GetByRegisId = 'diagnosis/base/getByRegisId'//根据挂单号回显病历详情;
export const ChargeQueueList = 'diagnosis/base/ChargeQueueList'//获取收费队列;
export const ListByPatient = 'diagnosis/base/listByPatient'//查询患者病历;
export const GetRegistrationDetail = 'diagnosis/base/getRegistrationDetail'//获取挂号信息;
}
}
export namespace Goods {
export namespace Cate {
export const List = 'goods/cate/list'//根据type获取商品二级分类列表;
export const Save = 'goods/cate/save'//保存二级分类;
export const Del = 'goods/cate/del'//删除二级分类;
export const GetAllList = 'goods/cate/getAllList'//获取所有分类;
}
export namespace Base {
export const Get = 'goods/base/get'//根据商品id获取商品;
export const Save = 'goods/base/save'//商品建档或修改;
export const Search = 'goods/base/search'//商品搜索一键建档内的搜索;
export const ReturnInit = 'goods/base/returnInit'//商品重新初始化医保库存;
export const DetailWithSearch = 'goods/base/DetailWithSearch'//商品搜索;
export const EnableSale = 'goods/base/enableSale'//起售商品;
export const DisableSale = 'goods/base/disableSale'//停售商品;
export const AddIdCode = 'goods/base/addIdCode'//商品添加标识码;
export const GetByCateId = 'goods/base/getByCateId'//获取二级分类绑定的商品数量;
}
}
export namespace Inventory {
export namespace Apply {
export const List = 'inventory/apply/list'//分页查询领用单;
export const Create = 'inventory/apply/create'//创建领用单并领用;
export const GetDetail = 'inventory/apply/getDetail'//获取领用单详情;
}
export namespace Check {
export const List = 'inventory/check/list'//盘点列表分页查询;
export const Save = 'inventory/check/save'//保存盘点记录;
export const GetDetail = 'inventory/check/getDetail'//获取盘点单详情;
}
export namespace Goods {
export const Log = 'inventory/goods/log'//获取库存日志;
export const Update = 'inventory/goods/update'//修改库存采购信息;
export const Statistics = 'inventory/goods/statistics'//库存统计;
export const GetByGoodsId = 'inventory/goods/getByGoodsId'//获取商品库存信息 根据goodsId;
export const ListByOrderCode = 'inventory/goods/listByOrderCode'//获取采购单信息 根据code;
export const ListByIds = 'inventory/goods/listByIds'//根据库存id集合获取库存信息;
export const ListByGoodsId = 'inventory/goods/listByGoodsId'//获取商品库存信息 根据goodsId;
}
export namespace Order {
export const Update = 'inventory/order/update'//更新采购单基本信息;
export const List = 'inventory/order/list'//分页查询采购单;
export const Create = 'inventory/order/create'//创建采购单;
export const Refund = 'inventory/order/refund'//采购单退货;
export const Detail = 'inventory/order/detail'//获取采购单详情;
export const ToExcel = 'inventory/order/toExcel'//采购一键导入生成excel;
export const FromExcel = 'inventory/order/fromExcel'//采购一键导入解析excel;
export const AddGoods = 'inventory/order/addGoods'//采购单修改时 添加采购的商品;
}
export namespace Supplier {
export const List = 'inventory/supplier/list'//分页查询供货商;
export const Save = 'inventory/supplier/save'//保存供货商;
}
}
export namespace Item {
export const Get = 'item/get'//获取项目详情;
export const Search = 'item/search'//搜索项目;
export const Del = 'item/del'//删除项目;
export const Edit = 'item/edit'//修改项目;
export const GroupList = 'item/groupList'//获取组套列表;
export const GetGroup = 'item/getGroup'//获取组套;
export const Add = 'item/add'//添加项目;
export const DeleteGroup = 'item/deleteGroup'//删除组套;
export const SaveGroup = 'item/saveGroup'//保存组套;
export const List = 'item/list'//获取非组套列表;
}
export namespace Organization {
export namespace Member {
export const Get = 'organization/member/get'//获取成员信息;
export const List = 'organization/member/list'//分页查询成员列表;
export const Save = 'organization/member/save'//保存成员信息;
export const Search = 'organization/member/search'//搜索成员;
export const Del = 'organization/member/del'//删除成员;
export const ListBySectionId = 'organization/member/listBySectionId'//获取当前科室的所有医生;
}
export namespace Section {
export const Add = 'organization/section/add'//添加科室;
export const Get = 'organization/section/get'//获取科室信息;
export const List = 'organization/section/list';
export const AllList = 'organization/section/allList'//获取所有科室;
export const Del = 'organization/section/del'//删除科室;
export const Edit = 'organization/section/edit'//修改科室信息;
export const ListByMemberId = 'organization/section/listByMemberId'//获取当前成员的所属科室;
}
}
export namespace Patient {
export namespace Base {
export const Get = 'patient/base/get'//获取患者信息;
export const Update = 'patient/base/update'//修改患者信息;
export const Create = 'patient/base/create'//创建患者;
export const Search = 'patient/base/search'//搜索患者;
export const Del = 'patient/base/del'//删除患者;
export const List = 'patient/base/list'//分页查询患者列表;
export const ChangeLevel = 'patient/base/changeLevel'//改变会员等级;
}
export namespace Integral {
export const Add = 'patient/integral/add'//添加会员积分;
export const List = 'patient/integral/list'//分页查询会员积分记录;
}
export namespace LevelConfig {
export const Get = 'patient/levelConfig/get'//根据leveId获取会员等级配置;
export const Save = 'patient/levelConfig/save'//保存会员等级配置;
export const Create = 'patient/levelConfig/create'//新增会员等级配置;
export const Del = 'patient/levelConfig/del'//删除一个会员等级配置;
export const Edit = 'patient/levelConfig/edit'//修改会员等级配置;
export const List = 'patient/levelConfig/list'//分页查询会员等级配置;
}
export namespace Registration {
export const Add = 'patient/registration/add'//挂号;
export const Get = 'patient/registration/get'//获取挂号信息 根据挂号id;
export const List = 'patient/registration/list'//分页查询挂号列表;
export const Cancel = 'patient/registration/cancel'//取消挂号;
export const AllList = 'patient/registration/allList'//获取挂号信息列表;
export const Del = 'patient/registration/del'//删除挂号信息;
export const Edit = 'patient/registration/edit'//修改挂号信息;
export const ListByType = 'patient/registration/listByType'//挂号信息分页搜索;
export const ChangeStatus = 'patient/registration/changeStatus'//更改挂号单状态;
export const GetWithPatient = 'patient/registration/getWithPatient'//根据id返回挂号详细信息 包含患者信息;
}
}
export namespace Social {
export namespace Recipe {
export const Download = 'social/recipe/download'//下载中药颗粒;
}
export namespace Disease {
export const Download = 'social/disease/download';
}
export namespace Diagnose {
export const Search = 'social/diagnose/search'//诊断搜索;
}
export namespace Directory {
export const Search = 'social/directory/search'//搜索目录信息;
export const GetByCode = 'social/directory/getByCode'//根据医保码,获取医保商品信息;
export const Download = 'social/directory/download'//下载目录;
export const SearchProducer = 'social/directory/searchProducer'//搜索企业信息;
export const Column_list = 'social/directory/column_list'//获取目录列 列表;
export const GetItemByCode = 'social/directory/getItemByCode'//根据医保码,获取医保服务项目信息;
export const ItemSearch = 'social/directory/itemSearch'//服务项目搜索;
export const Get_doc_list = 'social/directory/get_doc_list'//获取目录列表;
export const SyncToMongo = 'social/directory/syncToMongo'//同步到MongoDB;
}
export namespace Directory_limit {
export const Get_page = 'social/directory_limit/get_page'//分页查询目录限制信息;
}
export namespace Directory_self {
export const Get_page = 'social/directory_self/get_page'//分页查询自付比例信息;
}
export namespace Directory_upinfo {
export const Get_page = 'social/directory_upinfo/get_page'//分页查询更新信息;
}
export namespace Directory_version {
export const List = 'social/directory_version/list'//获取医保目录版本列表;
export const Get_current = 'social/directory_version/get_current'//获取当前医保目录版本;
}
export namespace Person {
export const GetCustomSocialInfo = 'social/person/getCustomSocialInfo'//获取社保人员信息;
export const GetSocialInfoByPsnNo = 'social/person/getSocialInfoByPsnNo'//根据社保人员编号获取医保人员信息 redis;
}
export namespace Reconciliation {
export const List = 'social/reconciliation/list'//医保-对账列表;
export const DoTotal = 'social/reconciliation/doTotal'//对总账;
export const HistoryList = 'social/reconciliation/historyList'//自动对账历史记录列表;
export const Reversal = 'social/reconciliation/reversal'//冲正;
export const DoDetail = 'social/reconciliation/doDetail'//明细对账;
}
export namespace Upload {
export const Get3501List = 'social/upload/get3501List'//分页查询 商品初始化数据;
export const Get3502List = 'social/upload/get3502List'//分页查询 商品库存变更记录;
export const Get3505List = 'social/upload/get3505List'//获取3505列表;
export const QuickUpload = 'social/upload/quickUpload'//进销存一键上报接口;
export const Get3503List = 'social/upload/get3503List'//分页查询 库存采购数据;
export const GetNotDoNumber = 'social/upload/getNotDoNumber'//获取进销存 3501-3506 未上报数量;
}
}
export namespace Statistics {
export const GetSalesVolumeOverview = 'statistics/getSalesVolumeOverview'//销售人次趋势;
export const ExpiryDateWarning = 'statistics/expiryDateWarning'//有效期预警;
export const GoodsStatistics = 'statistics/goodsStatistics'//商品统计;
export const NumberEarlyWarning = 'statistics/numberEarlyWarning'//库存预警;
export const GetRevenueOverview = 'statistics/getRevenueOverview'//营收概况;
export const SalePerson = 'statistics/salePerson'//销售人员统计;
export const GetQueueCount = 'statistics/getQueueCount'//获取收费队列 就诊队列数量;
export const GetPayOverview = 'statistics/getPayOverview'//经营概况;
}
}

View File

@ -1,38 +1,47 @@
export enum apiConfig{
export enum apiConfig {
/**
*
*/
"ManagerUserLogin"="manager/user/login",//登录
"signIn"="sign/in",//签到
"signOut"="sign/out",//签退
"managerUserVerify"="manager/user/verify",//获取用户信息
"ManagerUserLogin" = "manager/user/login",//登录
"signIn" = "sign/in",//签到
"signOut" = "sign/out",//签退
"managerUserVerify" = "manager/user/verify",//获取用户信息
/**
*
*/
"RegistrationList" = "registration/list",//挂号列表
"RegistrationAdd" = "registration/add",//添加挂号
"RegistrationEdit" = "registration/edit",//修改挂号
/**
*
*/
"RegistrationDetail" ="medical/record/getDetailByRegisId",//详情
"RegistrationList" ="registration/getListByType",//患者列表
"RegistrationChangeStatus"="registration/changeStatus",
"RegistrationChangeStatus" = "registration/changeStatus",//挂号状态
"MedicalDetailByRegisId" = "medical/record/getDetailByRegisId",//患者详情
"RegistrationListByType" = "registration/getListByType",//患者列表
"StatisticsGetTipCount" = "statistics/getTipCount",//患者状态数量
"MedicalRecordSave" = "medical/record/save",//保存接诊信息
"SocialDiagnoseSearch" = "social/diagnose/search",//接诊详情
/**
*
*/
"OrganizationMemberSave"="organization/member/save",//添加 编辑成员信息
"OrganizationMemberSearch"="organization/member/search",//搜索成员
"OrganizationSectionAllList"="organization/section/allList",//获取所有科室列表
"OrganizationSectionListByMemberId"="organization/section/listByMemberId",//获取当前成员所属科室列表
"OrganizationMemberListBySectionId"="organization/member/listBySectionId",//获取当前科室的所有医生列表
"OrganizationMemberSave" = "organization/member/save",//添加 编辑成员信息
"OrganizationMemberSearch" = "organization/member/search",//搜索成员
"OrganizationSectionAllList" = "organization/section/allList",//获取所有科室列表
"OrganizationSectionListByMemberId" = "organization/section/listByMemberId",//获取当前成员所属科室列表
"OrganizationMemberListBySectionId" = "organization/member/listBySectionId",//获取当前科室的所有医生列表
/**
*
*/
"GoodsDisableSale"="goods/goods/disableSale",
"GoodsEnableSale"="goods/goods/enableSale",
"GoodsDisableSale" = "goods/goods/disableSale",
"GoodsEnableSale" = "goods/goods/enableSale",
/**
*
*/
"ChargeListChargeLog"="charge/listChargeLog",//查询收费记录
"RecordGetChargeQueue"="medical/record/getChargeQueue"//查询收费记录
"ChargeListChargeLog" = "charge/listChargeLog",//查询收费记录
"RecordGetChargeQueue" = "medical/record/getChargeQueue"//查询收费记录
}

View File

@ -0,0 +1,26 @@
{
"1": "口服",
"2": "直肠给药",
"3": "舌下给药",
"4": "注射给药",
"401": "皮下注射",
"402": "皮内注射",
"403": "肌肉注射",
"404": "静脉注射或静脉滴注",
"5": "吸入给药",
"6": "局部用药",
"601": "椎管内用药",
"602": "关节腔内用药",
"603": "胸膜腔用药",
"604": "腹腔用药",
"605": "阴道用药",
"606": "气管内用药",
"607": "滴眼",
"608": "滴鼻",
"609": "喷喉",
"610": "含化",
"611": "敷伤口",
"612": "擦皮肤",
"699": "其他局部给药途径",
"9": "其他给药途径"
}

View File

@ -1,22 +0,0 @@
@font-face {
font-family: "iconfont"; /* Project id 4921806 */
src: url('iconfont.woff?t=1747274949107') format('woff'),
url('iconfont.ttf?t=1747274949107') format('truetype');
}
.iconfont {
font-family: "iconfont", serif !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-RectangleCopy:before {
content: "\e6a2";
}
.icon-RectangleCopy1:before {
content: "\e6a4";
}

Binary file not shown.

Binary file not shown.

View File

@ -143,23 +143,77 @@ $lighter-color: rgba(#4D6DE4, 0.5);
color: #FFF;
font-size: 16px;
text-align: center;
margin-left: 9px;
&:hover{
background: $lighter-color;
}
}
.small-btn{
display: inline-block;
width: 72px;
height: 24px;
line-height: 24px;
background: $btn-color;
border-radius: 3px;
color: #FFF;
font-size: 12px;
text-align: center;
.default-close-btn{
cursor: pointer;
display: inline-block;
width: 119px;
height: 42px;
line-height: 42px;
background: #fff;
border-radius: 6px;
color: #333333;
font-size: 16px;
text-align: center;
margin-left: 9px;
border:1px solid #D8D8D8;
&:hover{
background: $lighter-color;
color: #fff;
border:none;
}
}
.small-btn{
cursor: pointer;
display: inline-block;
line-height: 1;
background: $btn-color;
border-radius: 4px;
color: #FFF;
font-size: 14px;
text-align: center;
margin-left: 9px;
padding: 8px 15px;
&:hover{
background: $lighter-color;
}
}
.danger-btn{
cursor: pointer;
display: inline-block;
line-height: 1;
background: #EB5757;
border-radius: 4px;
color: #FFF;
font-size: 14px;
text-align: center;
margin-left: 9px;
padding: 8px 15px;
&:hover{
background: rgba(#EB5757, 0.5);
}
}
.close-btn{
cursor: pointer;
display: inline-block;
line-height: 1;
background: #fff;
border-radius: 4px;
color: #333;
font-size: 14px;
text-align: center;
margin-left: 9px;
padding: 7px 14px;
border:1px solid #D8D8D8;
&:hover{
background: rgba(#4D6DE4, 0.5);
color: #fff;
border:1px solid rgba(#4D6DE4, 0.5);
}
}

View File

@ -17,47 +17,25 @@
@click="changeInput"
/>
</template>
<div class="container" style="height: 300px">
<el-scrollbar style="max-height: 300px;width: 100%">
<table class="table" style="width: 100%; border-collapse: collapse;max-height: 50px">
<!-- 表头 -->
<thead>
<tr class="table-title">
<th
v-for="item in showConfig"
:key="item.prop"
style="background-color: #f5f7fa; padding: 8px;"
>
{{ item.label }}
</th>
</tr>
</thead>
<!-- 表体 -->
<tbody>
<tr class="table-body"
v-for="(item, index) in searchList"
<div class="container" style="max-height: 300px">
<el-table :data="searchList" max-height="300" @row-click="clickRow" :header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column
v-for="(conf, index) in props.showConfig"
:key="index"
@click="clickRow(item)"
style="cursor: pointer; transition: background-color 0.2s;"
:label="conf.label"
:prop="conf.prop"
show-overflow-tooltip
>
<td
v-for="showItem in showConfig"
:key="showItem.prop"
style="vertical-align: middle; padding: 8px;"
>
{{ item[showItem.prop] }}
</td>
</tr>
</tbody>
</table>
</el-scrollbar>
</el-table-column>
/>
</el-table>
</div>
</el-popover>
</template>
<script setup lang="ts">
import {ref, unref} from "vue";
import {ref, unref, computed, onMounted} from "vue";
import {post} from "@/utils/request.ts";
import {Plus} from "@element-plus/icons-vue";
@ -97,7 +75,7 @@ const props = defineProps({
}
});
const searchList = ref([]);
const searchList = ref<any>([]);
const changeInput = (inputStr: string) => {
unref(popoverRef).popperRef?.delayHide?.()
@ -105,11 +83,10 @@ const changeInput = (inputStr: string) => {
return;
}
post(props.requestApi, {keyword: keyword.value}).then((res: any) => {
searchList.value = res;
searchList.value = res
});
};
const emit = defineEmits(['selectedCallBack', 'focus']);
const clickRow = (row: any) => {
@ -150,62 +127,8 @@ const handlerBlur = () => {
border: 1px solid #409eff !important;
}
}
.table {
th {
background: none !important;
}
.table-title {
height: 52px;
font-weight: 500;
font-size: 14px;
color: #333333;
font-style: normal;
th {
text-align: left;
&:nth-child(1) {
width: 200px;
text-align: left;
border-radius: 8px 8px 0 0;
padding-left: 24px !important;
}
}
}
.table-body {
height: 52px;
font-weight: 500;
font-size: 14px;
color: #666666;
font-style: normal;
td {
&:nth-child(1) {
width: 200px;
text-align: left;
padding-left: 30px !important;
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏溢出的文本 */
text-overflow: ellipsis; /* 显示省略号 */
}
}
&:last-child {
border-radius: 0 0 8px 8px;
}
&:hover {
background-color: #4D6DE4;
color: #fff;
}
}
}
table thead tr {
background: #F5FAFF;;
:deep(.el-table__cell) {
padding: 0 4px;
height: 36px;
}
</style>

View File

@ -1,9 +1,8 @@
<template>
<div class="box">
<ul class="item-list">
<div v-for="(item, index) in units" :class="['item',(index+1)%4 == 0 ? 'last-item' : '',item==curItem?'active':'']" @click="selectItem(item)">{{item}}</div>
<div v-for="(item, index) in props.units" :class="['item',(index+1)%4 == 0 ? 'last-item' : '',item==curItem?'active':'']" @click="selectItem(item)">{{item}}</div>
</ul>
</div>

View File

@ -6,43 +6,37 @@
请勾选该追溯码关联的发药项目商品
</div>
<div class="code">
<div class="before-code">
<span class="before-code">
{{ traceabilityCode.slice(0, 7) }}
</div>
<div class="after-code">
</span>
<span class="after-code">
{{ traceabilityCode.slice(7, traceabilityCode.length) }}
</div>
</span>
</div>
</div>
<div style="padding: 0 24px;flex: 1; min-height: 0;">
<div class="list">
<table class="table" style="border-spacing: 0">
<thead style="background:#F1F5FB">
<tr class="table-title" style="background: #f1f5fb">
<th>选择</th>
<th>发药项目</th>
<th>产品标识码</th>
<th>系统处理</th>
</tr>
</thead>
<tbody class="table-body" style="height: 52px">
<tr v-for="(item,index) in tableData">
<td>
<input class="blue-radio" type="radio" :value="item.id" v-model="selected" @click="closeModal"/>
</td>
<td>{{ item.name }}</td>
<td>
<IdCodeListShow :idCodeList="item.idCode" v-if="item.idCode && item.idCode.length > 0"/>
<div v-else>未关联</div>
</td>
<td style="width: 300px;">
<template v-if="selected === item.id">
关联产品标识码采集追溯码自动识别商品
<el-table :data="tableData" :header-cell-style="{backgroundColor: '#F1F5FB'}">
<el-table-column label="选择" width="60">
<template #default="scope">
<input class="blue-radio" type="radio" :value="scope.row.id" v-model="selected" @click="closeModal"/>
</template>
</td>
</tr>
</tbody>
</table>
</el-table-column>
<el-table-column prop="name" label="发药项目" show-overflow-tooltip/>
<el-table-column prop="idCode" label="产品标识码" width="140" show-overflow-tooltip>
<template #default="scope">
<IdCodeListShow :idCodeList="scope.row.idCode" v-if="scope.row.idCode && scope.row.idCode.length > 0"/>
<div v-else>未关联</div>
</template>
</el-table-column>
<el-table-column label="系统处理" width="160" show-overflow-tooltip>
<template #default="scope">
<div v-if="selected === scope.row.id">
关联产品标识码采集追溯码自动识别商品
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -93,7 +87,6 @@ const addIdCode = () => {
}
let idCode = traceabilityCode.value.slice(0, 7);
post("goods/goods/addIdCode", {goodsId: selected.value, idCode: idCode}).then((res: any) => {
show.value = false;
for (let subItem of tableData.value) {
if (subItem.id === selected.value) {
if (subItem.idCode == null) {
@ -102,6 +95,7 @@ const addIdCode = () => {
subItem.idCode?.push(idCode);
break
}
close()
}
})
const selectedItem = tableData.value.find((item: any) => item.id === selected.value);
@ -109,30 +103,32 @@ const addIdCode = () => {
return
}
addTraceabilityCodeDo(selectedItem)
}
const emit = defineEmits(["addIdCode", "addTraceabilityCode"])
const addTraceabilityCodeDo = (item: any) => {
emit("addTraceabilityCode", item, traceabilityCode.value)
}
const showRadio=ref<any>(false)
const showRadio = ref<any>(false)
const closeModal = () => {
showRadio.value = false
selected.value=null
selected.value = null
}
const close = () => {
show.value= false
show.value = false
closeModal()
}
</script>
<style scoped lang="scss">
.panel {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.title {
width: 100%;
height: 126px;
font-size: 24px;
display: flex;
@ -140,6 +136,7 @@ const close = () => {
justify-content: center;
align-items: center;
background: #F9FAFC;
padding: 24px;
margin-bottom: 24px;
.title-content {
@ -150,34 +147,43 @@ const close = () => {
}
.code {
width: 100%;
flex: 1;
min-height: 0;
font-weight: 800;
font-size: 30px;
color: #333333;
font-style: normal;
display: flex;
justify-content: center;
.before-code {
color: #999999;
}
.after-code {
min-width: 0;
margin-left: 10px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
}
.list {
height: 100%;
border-radius: 8px 8px 0 0;
width: 100%;
border: 1px solid #EAEAEC;
border-bottom: none;
.table {
th {
background: none !important;
}
.table-title {
width: 100%;
height: 52px;
@ -210,18 +216,22 @@ const close = () => {
}
}
}
.table-body {
height: 52px;
font-weight: 500;
font-size: 14px;
color: #666666;
font-style: normal;
tr{
tr {
height: 52px;
font-size: 14px;
color: #333333;
td {
height: 52px;
&:first-child {
width: 132px;
padding-left: 35px;
@ -236,6 +246,7 @@ const close = () => {
}
}
}
table, tbody, td {
border-bottom: 1px solid #EAEAEC; /* 明确设置边框 */
}
@ -243,6 +254,7 @@ table, tbody, td {
table {
border: none;
}
.bottom {
height: 100%;
display: flex;

View File

@ -16,34 +16,31 @@
</template>
</el-input>
<div class="list">
<el-scrollbar>
<table class="table" style="border-spacing: 0">
<thead style="background:#F1F5FB">
<tr class="table-title" style="background: #f1f5fb">
<th>发药项目</th>
<th>产品标识码</th>
<th>发药数量</th>
<th>已采/应采</th>
<th>追溯码</th>
</tr>
</thead>
<tbody class="table-body">
<tr v-for="(item,index) in list" :key="index">
<td>{{ item.name }}</td>
<td>
<IdCodeListShow :idCodeList="item.idCode" v-if="item.idCode&&item.idCode.length>0"
<el-table :data="list" :header-cell-style="{backgroundColor: '#F1F5FB'}">
<el-table-column prop="name" label="发药项目" width="300" show-overflow-tooltip></el-table-column>
<el-table-column label="产品标识码" show-overflow-tooltip>
<template #default="scope">
<IdCodeListShow :idCodeList="scope.row.idCode" v-if="scope.row.idCode&&scope.row.idCode.length>0"
@addTraceabilityCode="addTraceAbilityCodeHandler"/>
<div v-else>未关联</div>
</td>
<td>{{ item.selectedNum }}{{ item.selectedUnit }}</td>
<td>{{ item.traceAbilityCodeList ? item.traceAbilityCodeList.length : 0 }}/{{ item.shouldNumber }}</td>
<td>
<TraceabilityCodeAdd :item="item" @addTraceabilityCode="addTraceAbilityCodeHandler"/>
</td>
</tr>
</tbody>
</table>
</el-scrollbar>
</template>
</el-table-column>
<el-table-column label="发药数量" show-overflow-tooltip>
<template #default="scope">
{{scope.row.selectedNum}}{{scope.row.selectedUnit}}
</template>
</el-table-column>
<el-table-column label="已采/应采" show-overflow-tooltip>
<template #default="scope">
{{ scope.row.traceAbilityCodeList ? scope.row.traceAbilityCodeList.length : 0 }}/{{ scope.row.shouldNumber }}
</template>
</el-table-column>
<el-table-column label="追溯码" width="300">
<template #default="scope">
<TraceabilityCodeAdd :item="scope.row" @addTraceabilityCode="addTraceAbilityCodeHandler"/>
</template>
</el-table-column>
</el-table>
</div>
</div>
</template>

View File

@ -89,6 +89,7 @@ const props = defineProps({
const init = async (code: any, psnNo: any) => {
if (props.disabled) {
selectedIndex.value = 0
payType.value = 1
}
retailOrder.value = await post("charge/getByCode", {code: code});
if (psnNo != null) {

View File

@ -204,16 +204,17 @@ const handleDateClick = (day: number) => {
align-items: center;
span {
margin: auto;
height: 34px;
width: 34px;
height: 28px;
width: 28px;
display: flex;
justify-content: center;
align-items: center;
font-weight: bold;
font-size: 16px;
font-size: 14px;
color: #666666;
font-style: normal;
border-radius:17px;
border-radius:14px;
cursor: pointer;
}
.currentDay {
background: #1677FE;

View File

@ -43,6 +43,21 @@
<span v-else>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column label="使用方法" width="200">
<template #default="scope">
<el-input v-model="usage" placeholder="请输入使用方法" style="width: 100px"></el-input>
<el-popover
placement="bottom"
title="Title"
:width="200"
trigger="click"
>
<template #default>
<Usage></Usage>
</template>
</el-popover>
</template>
</el-table-column>
<el-table-column prop="selectedPrice" label="单价" width="200">
<template #default="scope">
{{ scope.row.selectedPrice }}
@ -51,8 +66,9 @@
<el-table-column prop="number" label="数量" width="250">
<template #default="scope">
<div v-if="props.status">
<el-input-number v-model="scope.row.selectedNum" :min="0" @change="handleNumChange(scope.row)"
style="margin-right: 5px"></el-input-number>
<el-input-number v-model="scope.row.selectedNum" ref="inputRef" :min="0"
@change="handleNumChange(scope.row)"
style="margin-right: 5px" size="small"></el-input-number>
<el-dropdown v-if="scope.row.trdnFlag == 1">
<span style="line-height: 30px;margin-left: 10px;cursor: pointer">{{ scope.row.selectedUnit }}</span>
<template #dropdown>
@ -111,10 +127,12 @@
<script setup lang="ts">
import SearchInput from "@/components/SearchInput.vue";
import Panel from "@/components/common/Panel.vue";
import {onMounted, ref} from "vue";
import {nextTick, onMounted, ref} from "vue";
import {post} from "@/utils/request.ts";
import {ElMessage} from "element-plus";
import {Delete} from "@element-plus/icons-vue";
import Usage from "./goodsDetail/Usage.vue"
import usageList from "@/assets/config/directory/drugMedcWayCode.json"
const props = defineProps({
status: {
@ -126,11 +144,11 @@ const props = defineProps({
default: false
}
})
const usage = ref('')
const showTooltip = ref(false);
const goodsDetail = defineModel<any>();
const delGoods = (item: any) => {
goodsDetail.value = goodsDetail.value.filter((i: any) => i.id != item.id)
}
const goodsSearchApi = "goods/goods/search";
@ -168,6 +186,7 @@ const goodsShowConfig = [
prop: "limit",
}
]
const inputRef = ref<any>()
const goodsSelect = (row: any) => {
row.selectedNum = 1
row.selectedUnit = row.packagingUnit
@ -175,7 +194,6 @@ const goodsSelect = (row: any) => {
row.shouldNumber = 1;
row.idCode = row.idCode ? row.idCode == "" ? null : row.idCode.split(",") : null
if (goodsDetail.value.find((i: any) => i.id == row.id)) {
ElMessage.warning("数据已存在,只能加数量")
goodsDetail.value.find((i: any) => i.id == row.id).selectedNum += 1
@ -225,10 +243,9 @@ const focus = (e: any) => {
}
const hilistInfo = ref<any>({})
const getHilistInfo = (item: any) => {
console.log("item", item)
if (item.hilistCode != null) {
post("social/directory/getByCode", {code: item.hilistCode}).then((res: any) => {
if (!res){
if (!res) {
hilistInfo.value = {}
return
}
@ -243,18 +260,16 @@ const colosInfo = () => {
}
</script>
<style scoped lang="scss">
:deep(.el-table tr) {
font-size: 16px;
font-weight: 500;
color: #333333;
height: 60px;
:deep(.el-table__cell) {
padding: 0 4px;
height: 36px;
}
.bottom {
text-align: right;
border-top: 1px solid #EAEAEC;
display: flex;
height: 58px;
height: 36px;
align-items: center;
.search {

View File

@ -0,0 +1,11 @@
<script setup lang="ts">
</script>
<template>
<div>11111111</div>
</template>
<style scoped lang="scss">
</style>

View File

@ -37,7 +37,7 @@
<el-table-column label="数量" width="250">
<template #default="scope">
<el-input-number v-if="props.status" v-model="scope.row.selectedNum" :min="0"
@change="handleNumChange" style="margin-right: 5px"></el-input-number>
@change="handleNumChange" style="margin-right: 5px" size="small"></el-input-number>
<span v-else>{{ scope.row.selectedNum }}</span>
{{ scope.row.selectedUnit }}
</template>
@ -168,18 +168,16 @@ const hide = () => {
}
</script>
<style scoped lang="scss">
:deep(.el-table tr) {
font-size: 16px;
font-weight: 500;
color: #333333;
height: 60px;
:deep(.el-table__cell) {
padding: 0 4px;
height: 36px;
}
.bottom {
text-align: right;
border-top: 1px solid #EAEAEC;
display: flex;
height: 58px;
height: 36px;
align-items: center;
.search {

View File

@ -27,6 +27,10 @@
<span>领用药品</span>
<div class="search">
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch>
<span class="default-btn" @click="goodsSelectCallBack">
<span class="iconfont icon-RectangleCopy"></span>
搜索
</span>
</div>
</div>
<table class="simple-table" style="margin-top: 15px;width: 100% ;height:300px ;max-height:550px">
@ -127,8 +131,8 @@
</div>
<template #footer>
<div class="bottom">
<el-button type="primary" @click="save">保存</el-button>
<el-button type="primary" @click="exit">关闭</el-button>
<span class="small-btn" @click="exit">关闭</span>
<span class="small-btn" @click="save">保存</span>
</div>
</template>
</Mask>
@ -187,9 +191,7 @@ const findIndexForTableList = (goodId: any) => {
return tableList.value.findIndex((item: any) => item.goodId === goodId);
}
const goodsSelectCallBack = (inventory: any) => {
if (findIndexForTableList(inventory.goodId) != -1) {
return
}
if (findIndexForTableList(inventory.goodId) != -1) return
post("inventory/goods/getByGoodsId", {goodsId: inventory.goodId,isZero:false}).then((res: any) => {
inventory.batchList = res.inventoryGoodsList
inventory.minPackagingUnit = res.minPackagingUnit
@ -398,7 +400,8 @@ defineExpose({init})
font-style: normal;
.search {
width: 50%;
display: flex;
align-items: center;
}
}

View File

@ -425,12 +425,13 @@
<template #footer>
<div class="footer">
<span class="default-btn" @click="returnInit" v-if="edit_data.id != null">医保库存重新初始化</span>
<span class="default-btn" v-if="edit_data.saleStatus" @click="disableSale" style="margin: 0 24px">停售</span>
<span class="default-btn" v-else @click="enableSale">起售</span>
<span class="default-btn" @click="save(true)" style="margin: 0 24px">保存</span>
<span class="default-btn" @click="save(false)" v-if="edit_data.id == null">保存并继续</span>
<span class="default-btn" @click="exit" style="margin-left: 24px">关闭</span>
<span class="small-btn" @click="returnInit"
v-if="edit_data.id != null">医保库存重新初始化</span>
<span class="danger-btn" v-if="edit_data.saleStatus" @click="disableSale">停售</span>
<span class="danger-btn" v-else @click="enableSale">起售</span>
<span class="small-btn" @click="save(true)">保存</span>
<span class="small-btn" @click="save(false)" v-if="edit_data.id == null">保存并继续</span>
<span class="small-btn" @click="exit">关闭</span>
</div>
</template>
</Mask>
@ -450,7 +451,7 @@ import {post} from "@/utils/request.ts";
import Cate from "@/components/inventory/goods/Cate.vue";
import {ElMessage, ElMessageBox} from "element-plus";
import Divider from "@/components/Divider.vue";
import UnitSelector from "@/components/inventory/UnitSelector.vue";
import UnitSelector from "@/components/UnitSelector.vue";
import SocialInfo from "@/components/inventory/goods/SocialInfo.vue";
import {apiConfig} from "@/assets/config/apiConfig.ts";
@ -689,7 +690,8 @@ const contrastCodeConfirm = (data: any) => {
}
let save = async (isClose: Boolean) => {
try {
await formRef.value.validate()
const isOk = await formRef.value.validate()
if (!isOk) return
if (!edit_data.value.purchaseUnitPrice || edit_data.value.purchaseUnitPrice < 1) {
ElMessage.error('参考进价不能为空或小于1');
return
@ -915,11 +917,6 @@ const enableSale = () => {
justify-content: flex-end;
align-items: center;
padding: 0 24px;
.default-btn{
&:nth-child(1){
width: 200px;
}
}
}
</style>

View File

@ -8,7 +8,7 @@
<div v-if="hilistInfo" class="hilist-detail">
<div class="name">
{{ hilistInfo.name }}
{{ hilistInfo.json?.category ? '[' + hilistInfo.json.category + ']' : '-' }}
{{ hilistInfo.json?.category ? '[' + hilistInfo.json.category + ']' : '' }}
</div>
<div>
{{ hilistInfo.code }}
@ -86,17 +86,16 @@ onMounted(() => {
.hilist-code {
cursor: pointer;
width: 100%;
height: 25px;
border: 1px #ddd solid;
height: 38px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px;
border-radius: 10px;
padding: 16px;
border-radius: 6px;
border: 1px solid #EAEAEC;
.name {
display: flex;
}
.code {
@ -107,14 +106,15 @@ onMounted(() => {
}
.hilist-detail {
padding: base.$padding-base;
margin-top: 3px;;
padding: 16px;
margin-top: 8px;
width: 100%;
height: 250px;
border: 1px base.$border-color-base solid;
font-size: 12px;
border-radius: 8px;
background: #F5F6F7;
border-radius: 6px;
border: 1px solid #EAEAEC;
display: flex;
flex-direction: column;
justify-content: space-between;
}
</style>

View File

@ -1,25 +1,24 @@
<template>
<Mask :is-show="isShow" :height="600" :width="800" @close="close" title="采集相同追溯码" :show-footer="true">
<div class="tips">
<Mask :is-show="isShow" :height="321" :width="818" @close="close" title="采集相同追溯码">
<div class="content">
<div class="top">
<div class="tip">
入库单位包装无追溯码时可重复采集上层包装的追溯码
</div>
<div class="content">
<div class="code">
<div class="before-code">
<span class="before-code">
{{ data.code.slice(0, 7) }}
</div>
<div class="after-code">
</span>
<span class="after-code">
{{ data.code.slice(7) }}
</span>
</div>
</div>
<div class="number">
<span class="text">
采集
</span>
<el-input-number v-model="data.num" min="1" size="large" ref="inputRef" @keydown.enter="close"></el-input-number>
<span class="text">
</span>
<div class="body">
<span class="text">采集</span>
<el-input-number v-model="data.num" min="1" size="large" ref="inputRef"
@keydown.enter="close"></el-input-number>
<span class="text"></span>
</div>
</div>
</Mask>
@ -29,14 +28,14 @@ import Mask from "@/components/common/Mask.vue";
import {nextTick, ref} from "vue";
const data = ref<any>()
const emit = defineEmits(['close'])
const emit = defineEmits(['close', 'save'])
const inputRef = ref<any>()
const init = (codeInfo: any) => {
isShow.value = true
data.value = codeInfo
nextTick(()=>{
nextTick(() => {
inputRef.value?.focus()
const inputElement = inputRef.value?.$el?.querySelector('input');
if (inputElement) {
@ -51,45 +50,77 @@ const close = () => {
emit('close')
isShow.value = false
}
const save = () => {
emit('save', data.value)
isShow.value = false
}
</script>
<style scoped lang="scss">
.tips{
.content {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.top {
width: 100%;
height: 126px;
background: #F9FAFC;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-weight: 500;
font-size: 20px;
color: #666666;
font-style: normal;
padding: 24px;
}
.content{
border: 1px solid #ddd;
margin: 40px;
border-radius: 10px;
.code {
width: 100%;
display: flex;
justify-content: center;
font-weight: 800;
font-size: 30px;
color: #333333;
padding: 40px 0;
font-style: normal;
display: flex;
justify-content: center;
border-bottom: 1px solid #ddd;
.before-code {
color: #999999;
}
font-style: normal;
.after-code {
color: #333;
margin-left: 10px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
.number{
padding: 40px 0;
width: 100%;
.body {
flex: 1;
min-height: 0;
display: flex;
justify-content: center;
.text{
font-size: 24px;
line-height: 40px;
text-align: center;
align-items: center;
.text {
margin: 0 16px;
}
}
}
.footer {
height: 100%;
padding: 24px;
display: flex;
justify-content: flex-end;
align-items: center;
.default-btn, .btn {
width: 60px;
height: 32px;
line-height: 32px;
margin-left: 10px;
font-size: 14px;
}
}
</style>

View File

@ -11,7 +11,7 @@
{{ row.code.slice(0, 7) }}&nbsp;{{ row.code.slice(7) }}
</template>
</el-table-column>
<el-table-column label="数量" prop="num" width="70">
<el-table-column label="数量" prop="num" width="70" show-overflow-tooltip>
<template #default="{row}">
<span class="edit" @click="openCodeNumEdit(row)">
{{ row.num }}
@ -83,9 +83,7 @@ const openCodeNumEdit = (row: any) => {
</script>
<style scoped lang="scss">
.code-popo {
.edit{
cursor: pointer;
}
.remove {
cursor: pointer;
@ -94,4 +92,13 @@ const openCodeNumEdit = (row: any) => {
}
}
}
:deep(.el-table td.el-table__cell) {
.edit {
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
color: #4d6de4;
}
}
</style>

View File

@ -48,8 +48,8 @@
</div>
<template #footer>
<div class="bottom">
<span class="default-btn" @click="save">确定</span>
<span class="default-btn" @click="close" style="margin-left: 24px">取消</span>
<span class="small-btn" @click="close">取消</span>
<span class="small-btn" @click="save">确定</span>
</div>
</template>
</Mask>

View File

@ -48,8 +48,8 @@
<el-checkbox v-model="printReceipt">同时打印凭证</el-checkbox>
</div>
<div style="display:flex;">
<div class="default-btn" @click="reduceIntegral">兑换</div>
<div class="default-btn" style="margin-left: 24px" @click="close">取消</div>
<div class="small-btn" @click="close">取消</div>
<div class="small-btn" @click="reduceIntegral">兑换</div>
</div>
</div>
</template>
@ -122,6 +122,7 @@ const reduceIntegral = () => {
flex-direction: column;
justify-content: center;
margin-left: 16px;
.name {
font-weight: bold;
font-size: 24px;

View File

@ -45,8 +45,8 @@
</template>
<template #footer>
<div class="footer">
<div class="default-btn" @click="grant()">发放</div>
<div class="default-btn" style="margin-left: 24px" @click="close">取消</div>
<div class="small-btn" @click="close">取消</div>
<div class="small-btn" @click="grant()">发放</div>
</div>
</template>
</Mask>

View File

@ -186,10 +186,8 @@
退出医保
</div>
<div class="bottom-right">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="submitForm">
保存
</el-button>
<span class="default-btn" @click="close">取消</span>
<span class="default-btn" @click="submitForm">保存</span>
</div>
</div>
</template>

View File

@ -40,7 +40,7 @@
<PopoverInput :disabled="props.disabled" v-model="formDate.allergyHistory" :list="allergyHistoryList"/>
</el-form-item>
<el-form-item label="体格检查:" v-if="!props.isShowFrom">
<PhysiqueExamInuput :disabled="props.disabled" v-model="formDate.exam" :list="physiqueExamList"/>
<PhysiqueExamInput :disabled="props.disabled" v-model="formDate.exam" :list="physiqueExamList"/>
</el-form-item>
<el-form-item label="望闻问切:" v-if="formDate.diagType==1&&!props.isShowFrom">
<PopoverInput :disabled="props.disabled" v-model="formDate.chinaAdjunctCheck" :list="chinaAdjunctCheckList"/>
@ -75,7 +75,8 @@ import {
import Panel from "@/components/common/Panel.vue";
import PopoverInput from "@/components/PopoverInput.vue";
import DiagnosisSearchInput from "@/components/outpatient/DiagnosisSearchInput.vue";
import PhysiqueExamInuput from "@/components/outpatient/PhysiqueExamInuput.vue";
import PhysiqueExamInput from "@/components/outpatient/PhysiqueExamInput.vue";
import {apiConfig} from "@/assets/config/apiConfig.ts";
const props = defineProps({
disabled: {
@ -94,7 +95,7 @@ interface ShowConfig {
prop: string;
}
const diagnosisSearchApi = "social/diagnose/search"
const diagnosisSearchApi = apiConfig.SocialDiagnoseSearch
const diagnosisShowConfig: ShowConfig[] = [
{
label: "诊断名称",

View File

@ -34,7 +34,6 @@ const props = defineProps({
default: 0
}
})
console.log(props.status)
const list = ref<any>([])
const init = (patientId: any) => {
post("medical/record/listByPatient", {patientId: patientId}).then((res: any) => {

View File

@ -30,15 +30,16 @@
<el-scrollbar style="height: 100%">
<li class="list-item" :class="curItem?.id == item.id ? 'active' : ''" v-for="(item, index) in list"
:key="index" @click="clickLi(item)">
<span class="item-avatar">
<div class="item-avatar">
<img v-if="item.gender==1" class="avatar" src="/static/images/outpatient/man.png"
alt="头像"/>
<img v-if="item.gender==2" class="avatar" src="/static/images/outpatient/women.png"
alt="头像"/>
</span>
<i v-if="item.isAppointment" class="iconfont icon-yuyueh yuYueIcon"></i>
</div>
<span class="item-name">{{ item.name }}</span>
<span class="item-time">
{{ formatListTime(item.createDatetime)}}
{{ formatListTime(item.appointmentTime) }}
</span>
<span class="item-type">{{ item.type == 2 ? '医保' : '自费' }}</span>
</li>
@ -104,7 +105,7 @@ onMounted(() => {
//
refreshInterval = setInterval(() => {
initList()
}, 60*1000); // 10001
}, 60 * 1000); // 10001
})
onUnmounted(() => {
//
@ -143,7 +144,7 @@ const init = async () => {
clickLi(null)
loading.value = true
try {
let data: any = await post(apiConfig.RegistrationList, {
let data: any = await post(apiConfig.RegistrationListByType, {
query: {
status: curStatus.value,
beginTime: selectedDate.value,
@ -167,7 +168,7 @@ const init = async () => {
initStatusList()
}
const initStatusList = () => {
post('statistics/getTipCount', {
post(apiConfig.StatisticsGetTipCount, {
beginTime: selectedDate.value,
endTime: getEndOfDay(new Date(selectedDate.value))
}).then((res: any) => {
@ -191,11 +192,12 @@ const clickLi = (item: any, showBox: any = true) => {
return
}
if (action == "confirm") {
post('registration/changeStatus', {id: item.id, status: 2}).then((res: any) => {
post(apiConfig.RegistrationChangeStatus, {id: item.id, status: 2}).then((res: any) => {
curStatus.value = 2
curItem.value = res
initStatusList()
emit('clickItem', curItem.value)
selectedDate.value = getCurrentDate()
})
}
},
@ -206,16 +208,28 @@ const clickLi = (item: any, showBox: any = true) => {
}
const changeCurItemOrStatus = (item: any, status: any) => {
clickLi(item, false)
if (curStatus != null) {
curStatus.value = status
curItem.value = item
clickTab({status: status})
if (status == 1) {
// selectedDate.value = formatDate(item.appointmentTime)
init()
return
}
if (item != null && status != 1) {
clickLi(item);
}
init()
}
defineExpose({changeCurItemOrStatus})
watch(() => curStatus.value, () => {
init() //
})
const formatDate = (isoStr: any) => {
if (!isoStr) return ''
const date = new Date(isoStr);
return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
}
const setDateTip = () => {
const seletctedDateObj = new Date(selectedDate.value);
//
@ -234,7 +248,7 @@ const setDateTip = () => {
}
watch(() => selectedDate.value, (newValue, oldValue) => {
curItem.value=null
curItem.value = null
emit('clickItem', curItem.value)
if (newValue == oldValue) {
init()
@ -329,6 +343,21 @@ watch(() => selectedDate.value, (newValue, oldValue) => {
.item-avatar {
width: 26px;
margin-right: 10px;
position: relative;
.yuYueIcon {
display: inline-block;
width: 12px;
height: 12px;
position: absolute;
bottom: 11px;
right: -1px;
color: #31e3ca;
font-size: 12px;
z-index: 99;
background: #fff;
border-radius: 12px;
}
.avatar {
margin-top: 11px;
@ -403,5 +432,4 @@ watch(() => selectedDate.value, (newValue, oldValue) => {
right: 0;
top: 50px;
}
</style>

View File

@ -20,7 +20,7 @@ const editItem= () => {
<div class="footer">
<div>总金额<span class="text icon"></span><span class="text">{{ totalAmount || '0' }}</span></div>
<div class="btn-group">
<span class="default-btn" v-if="status" @click="deleteItem">取消接诊</span>
<span class="default-close-btn" v-if="status" @click="deleteItem">取消接诊</span>
<span class="default-btn" v-if="status" @click="save">完成接诊</span>
<!-- <el-button v-if="status == 3" type="primary" @click="editItem">修改</el-button>-->
</div>

View File

@ -2,7 +2,8 @@
<Mask :is-show="isShow" width="800" :height="height" title="挂号" @close="close"
:show-footer="true">
<template #default>
<div style="padding:0 24px;height: 100%;display: flex;flex-direction: column">
<div style="padding:0 24px 24px;height: 100%;display: flex;flex-direction: column">
<el-scrollbar>
<el-form
v-loading="loading"
:model="edit_data"
@ -118,12 +119,9 @@
label="时间">
<div style=" display: flex;justify-content: space-between">
<el-form-item style="flex: 1;min-width: 0" v-if="!isBtnShow&&dateName!='预约'">
<div style="width: 100%">现在</div>
</el-form-item>
<el-form-item v-else style="flex: 1;min-width: 0" prop="date">
<div style="display: flex">
<div style=" display: flex;">
<div style="flex: 1;min-width: 0" v-if="!isBtnShow&&dateName!='预约'">现在</div>
<div v-else style="flex:1;min-width:0;display: flex;align-items: center">
<el-date-picker
v-model="edit_data.date"
type="date"
@ -134,17 +132,18 @@
:disabledDate="disabledDate"
/>
<el-time-select
v-model="time"
start="00:00"
v-model="edit_data.time"
start="08:00"
step="00:15"
end="23:45"
end="22:00"
:min-time="getCurrentTime(edit_data.date)"
placeholder="选择时间"
style="width: 50%"
/>
</div>
</el-form-item>
<span v-if="dateName!='预约'" class="small-btn" @click="changeBtn">{{
<span v-if="dateName!='预约'"
:class="{disabled:edit_data.status==1||edit_data.status==3||edit_data.status==0}"
class="small-btn" @click="changeBtn">{{
isBtnShow ? '挂号' : '预约'
}}</span>
</div>
@ -181,6 +180,7 @@
</template>
</el-table-column>
</el-table>
</el-scrollbar>
</div>
</template>
<template #footer>
@ -204,9 +204,9 @@
退出医保
</div>
<div class="bottom-right">
<span class="default-btn" type="primary" @click="save">保存</span>
<span class="default-btn" @click="close" style="margin: 0 24px">取消</span>
<span class="default-btn" v-if="edit_data.status==1" @click="registrationCancel">退号</span>
<span class="close-btn" @click="close">取消</span>
<span class="danger-btn" v-if="edit_data.status==1" @click="registrationCancel">退号</span>
<span class="small-btn" @click="save">保存</span>
</div>
</div>
</template>
@ -227,11 +227,7 @@ import Quick from "@/components/charge/RecordsLog/Quick.vue";
import {getCurrentTime, getToday} from "@/utils/dateUtils.ts";
const height = ref(570)
const certTypeList = ref<any>(
Object.entries(psnCertTypes)
.map(([id, name]) => ({id: Number(id), name}))
.sort((a, b) => a.id - b.id)
)
const certTypeList = ref<any>([])
const edit_data = ref<any>({
timeList: []
})
@ -252,11 +248,11 @@ const rules = ref<any>({
phone: [
{required: true, message: '请输入手机号', trigger: 'blur'},
],
organzationDoctorId: [
{required: true, message: '请选择医生', trigger: 'blur'},
organizationDoctorId: [
{required: true, message: '请选择医生', trigger: 'change'},
],
certType: [
{required: true, message: '请选择证件类型', trigger: 'blur'},
{required: true, message: '请选择证件类型', trigger: 'change'},
],
certNo: [
{required: true, message: '请输入证件码', trigger: 'blur'},
@ -278,9 +274,7 @@ const close = () => {
isBtnShow.value = true
time.value = ''
edit_data.value = {
timeList: [],
insutype: '',
appointmentTime: ''
}
isShowCard.value = true
nextTick(() => {
@ -297,26 +291,27 @@ const disabledDate = (date: Date) => {
today.setHours(0, 0, 0, 0); // 00:00:00
return date < today; //
};
const timeList = ref<any>([])
const dateName = defineModel()
const save = () => {
if (dateName.value == '现在') {
edit_data.value.timeList = ''
edit_data.value.appointmentTime = ''
form.value.validate((v: any) => {
if (v) {
let combinedDateTime = ''
if (edit_data.value.date == undefined || edit_data.value.time == undefined) {
combinedDateTime = ''
} else {
edit_data.value.timeList.push(edit_data.value.date, time.value)
edit_data.value.appointmentTime = edit_data.value.timeList.join(' ')
combinedDateTime = `${edit_data.value.date} ${edit_data.value.time}`
}
let data = {
...edit_data.value,
appointmentTime: combinedDateTime || '',
psnNo: socialCard.value?.data?.baseinfo.psn_no,
insutype: edit_data.value.insutype || socialCard.value?.data?.insuinfo[0].insutype,
insuBalance: socialCard.value?.data?.insuinfo[0].balc,
}
form.value.validate((v: any) => {
if (v) {
if (edit_data.value.id) {
post('registration/edit', {
post(apiConfig.RegistrationEdit, {
data: data, mdtrtCertNo: socialCard.value?.mdtrtCertNo,
mdtrtCertType: socialCard.value?.mdtrtCertType
}).then(() => {
@ -324,7 +319,7 @@ const save = () => {
close()
})
} else {
post('registration/add', {
post(apiConfig.RegistrationAdd, {
data: data,
mdtrtCertNo: socialCard.value?.mdtrtCertNo,
mdtrtCertType: socialCard.value?.mdtrtCertType
@ -368,6 +363,9 @@ const socialCard: any = ref({
})
const quickShow = ref<any>(false)
const init = (doctorId: any = "", id: any = null, show: any = false) => {
certTypeList.value = Object.entries(psnCertTypes)
.map(([id, name]) => ({id, name}))
.sort((a, b) => Number(a.id) - Number(b.id))
isShow.value = true
quickShow.value = show
edit_data.value.organizationDoctorId = doctorId || ""
@ -376,7 +374,6 @@ const init = (doctorId: any = "", id: any = null, show: any = false) => {
if (id) {
post('registration/getById', {id: id}).then((res: any) => {
edit_data.value = res
edit_data.value.certType = Number(edit_data.value.certType)
time.value = edit_data.value.timeList[edit_data.value.timeList.length - 1]
})
}
@ -388,31 +385,24 @@ const tableData = ref<any>([])
const multipleTable = ref<any>()
const socialCardUpdate = (e: any) => {
isShowCard.value = false
if (e) {
if (!e) return;
isShowCard.value = false
edit_data.value.gender = Number(e.data.baseinfo.gend)
edit_data.value.name = e.data.baseinfo.psn_name
edit_data.value.certType = Number(e.data.baseinfo.psn_cert_type)
edit_data.value.certType = e.data.baseinfo.psn_cert_type
edit_data.value.certNo = e.data.baseinfo.certno
edit_data.value.age = Math.floor(e.data.baseinfo.age)
tableData.value = e.data.insuinfo
edit_data.value.type = 2
if (edit_data.value.certNo) {
if (!edit_data.value.certNo) return;
post('vip/vip/list', {
keyword: edit_data.value.certNo,
page: 1,
pageSize: 50
}).then((res: any) => {
edit_data.value.name = res.list[0].name
edit_data.value.gender = res.list[0].sex
edit_data.value.phone = res.list[0].phone
edit_data.value.certType = Number(res.list[0].certType)
edit_data.value.certNo = res.list[0].certNo
edit_data.value.memo = res.list[0].remark
edit_data.value.visitType = 1
})
}
}
nextTick(() => {
if (tableData.value.length > 0) {
height.value = 820
@ -464,7 +454,12 @@ const changeLoading = (e: any) => {
}
const isBtnShow = ref(true)
const changeBtn = () => {
if (edit_data.value.status == 1 || edit_data.value.status == 3 || edit_data.value.status == 0) return
isBtnShow.value = !isBtnShow.value
if (isBtnShow.value) {
time.value = ''
timeList.value = []
}
}
const handleCurrentChange = (val: any) => {
edit_data.value.insutype = val.insutype
@ -556,10 +551,8 @@ defineExpose({init})
margin-bottom: 2px !important;
}
.small-btn {
width: 51px;
height: 32px;
line-height: 32px;
margin-left: 5px;
.disabled {
cursor: not-allowed;
background: rgba(#4D6DE4,.5);
}
</style>

View File

@ -7,10 +7,11 @@
>
<el-table-column prop="name" label="姓名" show-overflow-tooltip>
<template #default="scope">
<div style="display: flex;align-items: center;">
<div style="display: flex;align-items: center;position: relative">
<img style="width: 25px;height: 25px;margin-right: 10px"
:src="scope.row.gender === 1 ? '/static/images/member/man.png' :scope.row.gender === 2 ? '/static/images/member/women.png':'无'"
alt="" srcset="">
<span>{{ scope.row.name }}</span>
</div>
</template>

View File

@ -120,9 +120,9 @@
</el-scrollbar>
<template #footer>
<div class="bottom">
<span class="default-btn" @click="save()">保存</span>
<span class="default-btn" style="margin: 0 24px">取消</span>
<span class="default-btn" v-if="memberInfo.id" @click="deleteDetail">删除</span>
<span class="small-btn" @click="save()">保存</span>
<span class="small-btn" @click="exit()">取消</span>
<span class="danger-btn" v-if="memberInfo.id" @click="deleteDetail">删除</span>
</div>
</template>
</Mask>

View File

@ -115,9 +115,9 @@
</template>
<template #footer>
<div class="bottom">
<span class="default-btn" @click="save()">保存</span>
<span class="default-btn" v-if="props.id" @click="deleteDetail" style="margin-left: 24px">删除</span>
<span class="default-btn" @click="exit" style="margin-left: 24px">取消</span>
<span class="small-btn" @click="exit">取消</span>
<span class="small-btn" @click="save()">保存</span>
<span class="danger-btn" v-if="props.id" @click="deleteDetail">删除</span>
</div>
</template>
</Mask>

View File

@ -5,10 +5,7 @@
<el-scrollbar>
<div style="padding: 0 24px">
<div class="header" style="width: 100%;display: flex;justify-content: center;margin-bottom: 10px">
<el-button type="primary" style="margin-top:10px" round class="btn" @click="openCreateSearch"
plain>
一键建档
</el-button>
<span style="margin-top:10px" class="btn small-btn" @click="openCreateSearch">一键建档</span>
</div>
<el-form :model="form" label-width="auto" :rules="formRules" ref="formRef">
<el-descriptions
@ -63,9 +60,9 @@
</template>
<template #footer>
<div class="bottom">
<el-button type="primary" @click="save()">保存</el-button>
<el-button @click="close">取消</el-button>
<el-button v-if="props.id" @click="deleteDetail" type="danger">删除</el-button>
<span class="small-btn" @click="save()">保存</span>
<span class="small-btn" @click="close">取消</span>
<span class="danger-btn" v-if="props.id" @click="deleteDetail">删除</span>
</div>
</template>
</Mask>
@ -77,7 +74,7 @@ import {post} from "@/utils/request.ts";
import {ElMessage} from "element-plus";
import Mask from "@/components/common/Mask.vue";
import ItemSearch from "@/components/settings/item/ItemSearch.vue";
import UnitSelector from "@/components/inventory/UnitSelector.vue";
import UnitSelector from "@/components/UnitSelector.vue";
import {itemUnitList} from "@/utils/unitList.ts"
const props = defineProps({

View File

@ -10,7 +10,7 @@
placeholder="请输入药品名称或者编号"
@keydown.enter="searchSocialItem"
clearable/>
<span class="default-btn" @click="searchSocialItem">搜索</span>
<span class="small-btn" @click="searchSocialItem">搜索</span>
</div>
<div class="search_result" style="width: 100%;padding: 0 12px">
<div class="result_table" style="width: 100%;height: 100%;box-sizing: border-box;padding-bottom: 20px">
@ -34,8 +34,8 @@
v-model:current-page="searchResult.pageNum" @current-change="changePage"/>
</div>
<div class="btn">
<span class="default-btn" @click="confirm">确认</span>
<span class="default-btn" @click="close">关闭</span>
<span class="small-btn" @click="confirm">确认</span>
<span class="small-btn" @click="close">关闭</span>
</div>
</div>
</template>
@ -137,15 +137,15 @@ const close = () => {
display: flex;
margin-bottom: 24px;
span {
line-height: 42px;
}
.input {
display: block;
flex: 1;
}
span {
line-height: 1;
}
.default-btn {
margin-left: 24px;
}
@ -181,7 +181,6 @@ const close = () => {
:deep(.el-input__wrapper) {
width: 100%;
height: 42px;
}
.btn {

View File

@ -76,7 +76,7 @@
</el-table-column>
<el-table-column label="操作" width="80">
<template #default="scope">
<span @click="removeTableRow(scope.row)" class="small-btn">删除</span>
<span @click="removeTableRow(scope.row)" style="color: #ff0000">删除</span>
</template>
</el-table-column>
</el-table>
@ -101,7 +101,7 @@ import ItemSearch from "@/components/settings/item/ItemSearch.vue";
const createSearchRef = ref<any>('')
import {itemUnitList} from "@/utils/unitList.ts"
import UnitSelector from "@/components/inventory/UnitSelector.vue";
import UnitSelector from "@/components/UnitSelector.vue";
import {post} from "@/utils/request.ts";
const isShow = ref<any>(false)
@ -225,7 +225,4 @@ defineExpose({init})
padding: 0 24px;
}
.small-btn {
width: 50px;
}
</style>

View File

@ -3,10 +3,13 @@
<template #default>
<div class="search_content_wrapper">
<div class="search_wrapper">
<span class="default-btn" @click="add">添加组套</span>
<span class="default-btn" @click="add">
<span class="iconfont icon-jia"></span>
添加组套
</span>
</div>
<div class="content">
<el-table :data="tableList">
<el-table border style="height: 100%" :data="tableList" :header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column
prop="itemName"
label="组套名称">
@ -21,8 +24,8 @@
</el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" link @click="editGroup(scope.row)">编辑</el-button>
<el-button type="primary" link @click="deleteGroup(scope.row)">删除</el-button>
<span class="edit" @click="editGroup(scope.row)">编辑</span>
<span class="delete" @click="deleteGroup(scope.row)">删除</span>
</template>
</el-table-column>
</el-table>
@ -50,10 +53,11 @@ import {post} from '@/utils/request.ts'
import Mask from "@/components/common/Mask.vue";
import GroupAdd from "@/components/settings/item/group/GroupAdd.vue";
import {ElMessage, ElMessageBox} from "element-plus";
let current_page = ref(1)
const show = ref(false);
const emit = defineEmits(["confirm"])
const deleteGroup=(row: any)=>{
const deleteGroup = (row: any) => {
ElMessageBox.confirm('确定删除该组套?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
@ -110,41 +114,28 @@ const handleCurrentChange = (val: any) => {
<style scoped lang="scss">
.search_bottom {
display: block;
margin-top: 10px;
}
.search_content_wrapper {
background-color: #FFF;
width: 100%;
height: 100%;
overflow: hidden;
margin: auto;
margin-top: 20px;
display: flex;
flex-direction: column;
border-radius: 10px;
box-sizing: border-box;
padding: 10px;
}
.search_wrapper {
position: relative;
padding: 24px;
.search_wrapper {
width: 100%;
display: flex;
margin: 0 auto;
height: 60px;
span {
position: relative;
display: block;
width: 100px;
line-height: 40px;
}
.input {
display: block;
flex: 1;
}
button {
width: 80px;
line-height: 40px;
@ -154,13 +145,13 @@ const handleCurrentChange = (val: any) => {
background-color: #409EFF;
border: none;
}
}
}
.content {
.content {
display: block;
width: 100%;
flex: 1;
//min-height: 0;
min-height: 0;
table {
//border-collapse: collapse;
@ -183,8 +174,10 @@ const handleCurrentChange = (val: any) => {
tr:hover {
//background-color: #f5f5f5;
}
}
}
:deep(.invalid) {
color: #409EFF;
}
@ -193,11 +186,21 @@ const handleCurrentChange = (val: any) => {
width: 100%;
height: 400px;
}
.bottom{
.bottom {
height: 100%;
display: flex;
justify-content: flex-end;
align-items: center;
padding: 0 24px;
}
.edit{
cursor: pointer;
color: #4d6de4;
margin-right: 10px
}
.delete{
cursor: pointer;
color: #ff0000;
}
</style>

View File

@ -3,7 +3,7 @@ import './assets/scss/main.scss'
import {createApp} from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import '../src/assets/iconfont/iconfont.css'
import '../public/static/iconfont/iconfont.css'
import {createPinia} from 'pinia'
import App from './App.vue'

View File

@ -8,6 +8,7 @@ import Auth from "@/components/manger/Auth.vue";
import {apiConfig} from "@/assets/config/apiConfig";
import type {Request, Response} from "@/utils/ws.ts";
import {useWsStore} from "@/stores/wsStore.ts";
import {API} from "@/assets/config/API.ts";
const username = ref('')
const password = ref('')
@ -40,7 +41,7 @@ const handleLogin = async () => {
}
const loginCore=async ()=>{
let token:any=await post(apiConfig.ManagerUserLogin, {username: username.value, password: password.value},{catch_error: true})
let token:any=await post(API.Common.ManagerUser.Login, {username: username.value, password: password.value},{catch_error: true})
localStorage.setItem('token', token)
try{
await post(apiConfig.signIn, {mac: netWork.value.mac, ip: netWork.value.ip}, {catch_error: true})

View File

@ -1,4 +1,4 @@
<template xmlns="http://www.w3.org/1999/html">
<template>
<div class="container">
<div class="left">
<chargeQueue @clickItem="clickItem" @getStatus="getStatus" ref="chargeQueueRef"></ChargeQueue>
@ -338,13 +338,11 @@ const list = () => {
}
const getStatus = (status: any) => {
statusDisabled.value = status
formData.value = {
patientInfo: {},
diagnosisMedicalRecord: {},
goodsDetail: [],
itemDetail: [],
patientRegistration: {}
}
initFormData()
nextTick(() => {
patientCardRef.value?.clear()
recordsConsumptionRef.value?.clearList();
})
}
//退
const refund = async () => {

View File

@ -21,7 +21,7 @@
<span class="iconfont icon-RectangleCopy1"></span>
重置
</div>
<div class="default-btn" @click="getList" style="margin-left: 24px">
<div class="default-btn" @click="getList">
<span class="iconfont icon-RectangleCopy"></span>
搜索
</div>
@ -91,12 +91,10 @@
</div>
</template>
<script setup lang="ts">
import Mask from "@/components/common/Mask.vue";
import AddApply from "@/components/inventory/apply/AddApply.vue";
import {nextTick, onMounted, ref} from "vue";
import {post} from "@/utils/request.ts";
import DetailApply from "@/components/inventory/apply/DetailApply.vue";
import {Refresh,Search} from "@element-plus/icons-vue";
import {formatDateArray, getEndOfDay} from "@/utils/dateUtils.ts";
const is_add = ref(false)
@ -175,36 +173,16 @@ const resetSearch= () => {
@use "@/assets/scss/base.scss";
.container-wrapper {
box-sizing: border-box;
padding: 24px;
padding: 24px 24px 0;
overflow: hidden;
display: flex;
flex-direction: column;
height: 100%;
.content {
width: 100%;
flex: 1;
overflow: hidden;
margin-top: base.$margin-base;
}
.bottom {
width: 100%;
height: 60px;
background-color: #FFF;
box-sizing: border-box;
padding: 10px;
position: relative;
border-top: 1px solid #EEE;
display: flex;
justify-content: flex-end;
align-items: center;
}
}
.top {
height: 110px;
border-radius: 8px;
.top {
background: #fff;
display: flex;
flex-direction: column;
margin-bottom: 24px;
.search {
display: flex;
@ -243,10 +221,32 @@ const resetSearch= () => {
.addBtn {
span {
display: inline-block;
&:first-child{
margin-left: 0;
}
}
}
}
.content {
width: 100%;
flex: 1;
overflow: hidden;
}
.bottom {
width: 100%;
height: 60px;
background-color: #FFF;
box-sizing: border-box;
padding: 10px;
position: relative;
border-top: 1px solid #EEE;
display: flex;
justify-content: flex-end;
align-items: center;
}
}
:deep(.el-input__wrapper){
height: 42px;
}

View File

@ -21,7 +21,7 @@
<span class="iconfont icon-RectangleCopy1"></span>
重置
</div>
<div class="default-btn" @click="getCheck" style="margin-left: 24px">
<div class="default-btn" @click="getCheck">
<span class="iconfont icon-RectangleCopy"></span>
搜索
</div>
@ -175,11 +175,11 @@ const resetSearch = () => {
display: flex;
flex-direction: column;
height: 100%;
padding: 24px;
padding: 24px 24px 0;
border-radius: 8px;
.content_list {
flex: 1;
margin-top: base.$margin-base;
min-height: 0;
}
@ -197,10 +197,10 @@ const resetSearch = () => {
}
.top {
height: 110px;
background: #fff;
display: flex;
flex-direction: column;
margin-bottom: 24px;
.search {
display: flex;
@ -244,8 +244,9 @@ const resetSearch = () => {
.addBtn {
span {
display: inline-block;
margin-right: 24px;
&:first-child{
margin-left: 0;
}
}
}
}

View File

@ -67,7 +67,7 @@
<span class="iconfont icon-RectangleCopy1"></span>
重置
</div>
<div class="default-btn" @click="searchGoods" style="margin-left: 24px">
<div class="default-btn" @click="searchGoods">
<span class="iconfont icon-RectangleCopy"></span>
搜索
</div>
@ -81,7 +81,7 @@
</div>
</div>
<div class="content_goods">
<el-table :data="tableData" style="height: 100%;padding: 0 24px;" @row-click="openMack"
<el-table :data="tableData" style="height: 100%;" @row-click="openMack"
:header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column fixed prop="name" label="名称" width="200" show-overflow-tooltip>
<template #default="scope">
@ -433,13 +433,13 @@ const props = {multiple: true}
height: 100%;
display: flex;
flex-direction: column;
.top {
height: 144px;
border-radius: 8px;
padding: 24px 24px 0;
.top {
background: #fff;
display: flex;
flex-direction: column;
margin-bottom: 24px;
.search {
display: flex;
@ -447,21 +447,18 @@ const props = {multiple: true}
.left {
flex: 1;
min-width: 0;
display: flex;
justify-content: space-between;
margin-right: 24px;
.el-form-item {
margin-right: 5px;
}
}
}
.addBtn {
span {
display: inline-block;
margin-right: 24px;
&:first-child {
margin-left: 0;
}
}
}
}
@ -514,24 +511,5 @@ const props = {multiple: true}
.btn-group {
display: flex;
.btn {
width: 120px;
height: 42px;
background: #FFFFFF;
border-radius: 6px;
border: 1px solid #979797;
display: flex;
justify-content: center;
align-items: center;
margin-left: 24px;
cursor: pointer;
&:hover {
background: #4D6DE4;
color: #fff;
border: none;
}
}
}
</style>

View File

@ -66,7 +66,7 @@
<span class="iconfont icon-RectangleCopy1"></span>
重置
</div>
<div class="default-btn" @click="init" style="margin-left: 24px">
<div class="default-btn" @click="init">
<span class="iconfont icon-RectangleCopy"></span>
搜索
</div>
@ -124,7 +124,7 @@
</div>
<AddOrder ref="addOrderRef" @close="closeAddOrder"/>
<EditOrder ref="editOrderRef" @close="closeEditOrder" @updateOrderDetail="init"/>
<UpLoad v-model="show" @initAddOrderData =initAddOrderData></UpLoad>
<UpLoad v-model="show" @initAddOrderData=initAddOrderData></UpLoad>
</div>
</template>
@ -240,37 +240,37 @@ const resetSearch = () => {
init()
}
const show = ref(false)
const openUpload= ()=>{
show.value=true
const openUpload = () => {
show.value = true
}
const initAddOrderData = (initData:any)=>{
const initAddOrderData = (initData: any) => {
const data = {
invoiceCode:initData.tag.invoice_code,
shippingCode:initData.tag.shipping_code,
remark:initData.tag.remark,
invoiceCode: initData.tag.invoice_code,
shippingCode: initData.tag.shipping_code,
remark: initData.tag.remark,
purchaseDate: initData.tag.purchase_date,
}
let goodsList = []
for (let i=0;i<initData.list.length;i++){
for (let i = 0; i < initData.list.length; i++) {
let item = initData.list[i]
let goodsInfo = {
productionBatchCode:item.info.production_batch_code,
wholeNumber:item.info.whole_number,
productionDate:item.info.production_date,
expiryDate:item.info.expiry_date,
purchaseUnitPrice:item.info.purchase_unit_price,
goodId:item.id,
name:item.goods.name,
packagingUnit:item.goods.packagingUnit,
unitPrice:item.goods.unitPrice,
productionBatchCode: item.info.production_batch_code,
wholeNumber: item.info.whole_number,
productionDate: item.info.production_date,
expiryDate: item.info.expiry_date,
purchaseUnitPrice: item.info.purchase_unit_price,
goodId: item.id,
name: item.goods.name,
packagingUnit: item.goods.packagingUnit,
unitPrice: item.goods.unitPrice,
}
goodsList.push(goodsInfo)
}
nextTick(()=>{
addOrderRef.value?.init(data,goodsList)
nextTick(() => {
addOrderRef.value?.init(data, goodsList)
})
}
</script>
@ -279,17 +279,53 @@ const initAddOrderData = (initData:any)=>{
.container-wrapper {
box-sizing: border-box;
padding: 24px;
padding: 24px 24px 0;
overflow: hidden;
display: flex;
flex-direction: column;
height: 100%;
border-radius: 8px;
.top {
background: #fff;
display: flex;
flex-direction: column;
margin-bottom: 24px;
.search {
display: flex;
justify-content: space-between;
.left {
flex: 1;
display: flex;
justify-content: space-between;
margin-right: 24px;
.el-form-item {
margin-right: 5px;
}
}
.right {
display: flex;
}
}
.addBtn {
span {
&:first-child {
margin-left: 0;
}
}
}
}
.content_list {
width: 100%;
flex: 1;
overflow: hidden;
margin-top: base.$margin-base;
}
.bottom {
@ -361,63 +397,11 @@ const initAddOrderData = (initData:any)=>{
}
.top {
height: 110px;
background: #fff;
display: flex;
flex-direction: column;
.search {
display: flex;
justify-content: space-between;
.left {
flex: 1;
display: flex;
justify-content: space-between;
margin-right: 24px;
.el-form-item {
margin-right: 5px;
}
}
.right {
display: flex;
.btn {
width: 120px;
height: 42px;
background: #FFFFFF;
border-radius: 6px;
border: 1px solid #979797;
display: flex;
justify-content: center;
align-items: center;
margin-left: 24px;
cursor: pointer;
&:hover {
background: #4D6DE4;
color: #fff;
border: none;
}
}
}
}
.addBtn {
span{
display: inline-block;
margin-right: 24px;
}
}
}
:deep(.el-input__wrapper) {
height: 42px;
width: 200px;
}
:deep(.el-range-editor.el-input__wrapper) {
height: 42px;
}

View File

@ -21,7 +21,7 @@
<span class="iconfont icon-RectangleCopy1"></span>
重置
</div>
<div class="default-btn" @click="getSupplier" style="margin-left: 24px">
<div class="default-btn" @click="getSupplier">
<span class="iconfont icon-RectangleCopy"></span>
搜索
</div>
@ -33,18 +33,18 @@
</div>
<div class="content">
<el-table :data="tableData" style="width: 100%;height: 100%" @row-click="editSupplier" :header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column label="供应商名称" prop="name" width="250">
<el-table-column label="供应商名称" prop="name" show-overflow-tooltip>
</el-table-column>
<el-table-column label="启用状态" prop="turn" width="150">
<el-table-column label="启用状态" prop="turn" width="150" show-overflow-tooltip>
<template #default="scope">
<el-tag type="success" v-if="scope.row.turn ==1">启用中</el-tag>
<el-tag type="info" v-else>已禁用</el-tag>
</template>
</el-table-column>
<el-table-column label="许可证号" prop="licenseCode"></el-table-column>
<el-table-column label="联系人" prop="contactName" width="100"></el-table-column>
<el-table-column label="联系方式" prop="contactTel" width="150"></el-table-column>
<el-table-column label="备注" prop="remark"/>
<el-table-column label="许可证号" prop="licenseCode" show-overflow-tooltip></el-table-column>
<el-table-column label="联系人" prop="contactName" width="100" show-overflow-tooltip></el-table-column>
<el-table-column label="联系方式" prop="contactTel" width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="备注" prop="remark" show-overflow-tooltip/>
</el-table>
</div>
<div class="bottom">
@ -122,15 +122,15 @@ const resetSearch = () => {
@use "@/assets/scss/base.scss";
.container-wrapper {
box-sizing: border-box;
padding: 24px;
padding: 24px 24px 0;
overflow: hidden;
display: flex;
flex-direction: column;
height: 100%;
border-radius: 8px;
.content {
width: 100%;
flex: 1;
margin-top: base.$margin-base;
}
.bottom {
width: 100%;
@ -147,10 +147,10 @@ const resetSearch = () => {
}
.top {
height: 110px;
background: #fff;
display: flex;
flex-direction: column;
margin-bottom: 24px;
.search {
display: flex;
@ -189,7 +189,9 @@ const resetSearch = () => {
.addBtn {
span {
display: inline-block;
&:first-child{
margin-left: 0;
}
}
}
}

View File

@ -407,7 +407,7 @@ const openFlowingWater = () => {
.left {
height: 100%;
width: 430px;
width: 320px;
margin-right: 24px;
.search {

View File

@ -40,10 +40,10 @@
import MedicalQueue from "@/components/outpatient/MedicalQueue.vue";
import MedicalHistory from "@/components/outpatient/MedicalHistory.vue";
import Case from "@/components/outpatient/Case.vue";
import {ref, watch, nextTick, onMounted} from "vue";
import {ref, watch, nextTick} from "vue";
import Settlement from "@/components/outpatient/Settlement.vue";
import {post} from "@/utils/request.ts";
import {type Action, ElMessage, ElMessageBox} from "element-plus";
import {ElMessage} from "element-plus";
import {apiConfig} from "@/assets/config/apiConfig.ts";
import PatientCard from "@/components/charge/PatientCard.vue";
import ServiceDetail from "@/components/common/service/ServiceDetail.vue";
@ -52,8 +52,6 @@ import GoodsDetail from "@/components/common/goods/GoodsDetail.vue";
const curRegister = ref<any>()
const registerId = ref()
const patientId = ref()
const itemDetail = ref([])
const goodsList = ref([])
const formData = ref<any>({
diagType: 0,
itemDetail: [],
@ -102,18 +100,18 @@ const save = () => {
if (!formData.value.diagnosisDetail || JSON.parse(formData.value.diagnosisDetail).length == 0) {
ElMessage.error("请填写诊断信息")
} else {
post('medical/record/save', {data: data}).then((res: any) => {
post(apiConfig.MedicalRecordSave, {data: data}).then((res: any) => {
ElMessage.success("接诊完毕,请到收费页面收费")
medicalQueueRef.value?.changeCurItemOrStatus(null, 2);
debugger
medicalQueueRef.value?.changeCurItemOrStatus(res, 3);
})
}
}
const totalAmount = ref(0)
const medicalHistoryRef = ref()
const patientCardRef = ref()
const patientRegistration = ref<any>({})//
const clickItem = (item: any) => {
initFormData()
if (!item) {
medicalHistoryRef.value?.clearList();
return
@ -126,7 +124,7 @@ const clickItem = (item: any) => {
initFormData()
}
if (item.status == 3) {
post(apiConfig.RegistrationDetail, {
post(apiConfig.MedicalDetailByRegisId, {
regisId: item.id
}).then((res: any) => {
formData.value = res.diagnosisMedicalRecord
@ -141,9 +139,7 @@ const clickItem = (item: any) => {
})
}
nextTick(() => {
medicalHistoryRef.value?.init(patientId.value);
patientCardRef.value?.init(curRegister.value?.id)
})
@ -152,7 +148,12 @@ const clickItem = (item: any) => {
const medicalQueueRef = ref();
const cancelReception = () => {
post(apiConfig.RegistrationChangeStatus, {id: registerId.value, status: 1}).then((res: any) => {
nextTick(() => {
medicalQueueRef.value?.changeCurItemOrStatus(res, 1);
initFormData()
medicalHistoryRef.value?.clearList();
patientCardRef.value?.clear();
})
})
}
const changeTab = (e: any) => {

View File

@ -67,7 +67,7 @@
/>
</div>
</div>
<div class="middle">
<div class="middle" v-loading="listLoading">
<List :patientList="patientList" @rowClick="rowClick"></List>
</div>
<div class="bottom">
@ -91,8 +91,6 @@
</template>
<script setup lang="ts">
import {nextTick, onMounted, ref} from 'vue'
import Picker from "@/components/Picker.vue";
import Mask from "@/components/common/Mask.vue";
import Edit from "@/components/registration/Edit.vue";
import List from "@/components/registration/List.vue";
import {post} from "@/utils/request";
@ -104,7 +102,6 @@ import {Search} from "@element-plus/icons-vue";
const dateName = ref<any>('挂号')
const selectDate = (date: any) => {
console.log(date, 'date')
dateName.value = getActionText(date)
}
const getActionText = (date: string) => {
@ -156,18 +153,26 @@ const handleDateChange = (date: any[]) => {
}
getPatientList()
}
const getPatientList = () => {
const listLoading = ref(false)
const getPatientList = async () => {
listLoading.value = true
id.value = null
post('registration/list', {
try {
const data: any = await post(apiConfig.RegistrationList, {
page: page.value,
size: size.value,
startDate: selectedDate.value[0],
endDate: selectedDate.value[1],
doctorId: doctorId.value,
}).then((res: any) => {
patientList.value = res.list
total.value = res.total_count
})
}, {catch_error:true})
patientList.value = data.list
total.value = data.total_count
}
catch (e:any) {
}
finally {
listLoading.value = false
}
}
const total = ref(0)
const size = ref(20)
@ -209,9 +214,9 @@ const reset = () => {
const doctorId = ref(null)
const changeRole = (item: any, index: any) => {
isShowNum.value = index
if(index==-1){
if (index == -1) {
allList()
}else{
} else {
doctorId.value = item.id
getPatientList()
}
@ -236,12 +241,12 @@ const allList = () => {
.left {
height: 100%;
width: 382px;
width: 320px;
display: flex;
flex-direction: column;
.left-top {
height: 399px;
height: 299px;
background: #FFFFFF;
border-radius: 8px;
}
@ -289,6 +294,7 @@ const allList = () => {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-right: 5px;
}
.section_name {
@ -298,6 +304,7 @@ const allList = () => {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-right: 5px;
}
.btn {

View File

@ -17,21 +17,41 @@
</el-form>
</div>
<div class="title-btn">
<span class="default-btn" @click="initData()">查询</span>
<span class="default-btn" @click="resetSearch">重置</span>
<span class="default-btn" @click="openDialog">新建项目</span>
<span class="default-btn" @click="openGroupDialog">组套</span>
<span class="default-btn" @click="initData()">
<span class="iconfont icon-RectangleCopy1"></span>
查询
</span>
<span class="default-btn" @click="resetSearch">
<span class="iconfont icon-RectangleCopy"></span>
重置
</span>
<span class="default-btn" @click="openDialog">
<span class="iconfont icon-jia"></span>
新建项目
</span>
<span class="default-btn" @click="openGroupDialog">
<span class="iconfont icon-qunzutaozhuang"></span>
组套
</span>
</div>
</div>
<div class="table">
<el-scrollbar>
<el-table :data="tableData" @row-click="rowClick">
<el-table :data="tableData" @row-click="rowClick" :header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column prop="itemSocialCode" label="医保码编码" width="200"
show-overflow-tooltip></el-table-column>
<el-table-column prop="itemName" label="项目名称" show-overflow-tooltip></el-table-column>
<el-table-column prop="unit" label="单位" show-overflow-tooltip></el-table-column>
<el-table-column prop="purchaseUnitPrice" label="原价" show-overflow-tooltip></el-table-column>
<el-table-column prop="unitPrice" label="售价" show-overflow-tooltip></el-table-column>
<el-table-column prop="purchaseUnitPrice" label="原价" show-overflow-tooltip>
<template #default="scope">
{{ scope.row.purchaseUnitPrice ? scope.row.purchaseUnitPrice + '元' : '' }}
</template>
</el-table-column>
<el-table-column prop="unitPrice" label="售价" show-overflow-tooltip>
<template #default="scope">
{{ scope.row.unitPrice ? scope.row.unitPrice + '元' : '' }}
</template>
</el-table-column>
<el-table-column prop="createDatetime" label="创建时间" show-overflow-tooltip>
<template #default="scope">
{{ formatDate(scope.row.createDatetime) }}
@ -119,27 +139,14 @@ const loading= ref(true)
background: #fff;
display: flex;
flex-direction: column;
.title-btn{
.default-btn{
margin-right: 24px;
&:last-child{
margin-right: 0;
}
}
}
.title {
display: flex;
height: 60px;
align-items: center;
justify-content: space-between;
.title-search {
padding: 10px;
border-radius: 10px;
box-sizing: border-box;
margin-top: 10px;
margin-bottom: 10px;
display: flex;
}

View File

@ -1,7 +1,6 @@
<template>
<div class="container-wrapper" style="padding: 24px">
<div class="container-wrapper" style="padding: 24px 24px 0">
<div class="title">
<div class="left">
<el-form :inline="true" :model="searchModel">
<el-date-picker
v-model="selectedDate"
@ -13,23 +12,24 @@
/>
<el-input placeholder="请输入内容" v-model="searchModel.managerName" style="width: 180px;"></el-input>
<el-input placeholder="请输入内容" v-model="searchModel.message" style="width: 180px;"></el-input>
<span class="default-btn" @click="getData">查询</span>
<span class="default-btn" @click="getData">
<span class="iconfont icon-RectangleCopy"></span>
查询
</span>
</el-form>
</div>
<div class="right">
</div>
</div>
<div class="content">
<el-table
:data="tableData"
style="width: 100%;height: 100%"
:header-cell-style="{backgroundColor: '#F1F5FB'}"
>
<el-table-column prop="managerName" label="用户名" width="100"></el-table-column>
<el-table-column prop="managerUsername" label="用户名" width="100"></el-table-column>
<el-table-column prop="message" label="操作" width="200"></el-table-column>
<el-table-column prop="createDatetime" label="时间" width="200"></el-table-column>
<el-table-column prop="params" label="请求参数">
<el-table-column prop="managerName" label="用户名" width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="managerUsername" label="用户名" width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="message" label="操作" width="200" show-overflow-tooltip></el-table-column>
<el-table-column prop="createDatetime" label="时间" width="200" show-overflow-tooltip></el-table-column>
<el-table-column prop="params" label="请求参数" show-overflow-tooltip>
<template #default="scope">
<el-input v-model="scope.row.params" class="input-with-select" disabled>
<template #prepend>
@ -111,18 +111,9 @@ const copy = (text: any) => {
.title {
font-size: 20px;
height: 60px;
line-height: 60px;
background: #fff;
font-weight: 500;
.left {
flex: 1;
display: flex;
justify-content: space-between;
margin-right: 24px;
}
margin-bottom: 24px;
}
.content {

View File

@ -25,13 +25,22 @@
</el-form>
</div>
<div class="title-btn">
<span class="default-btn" @click="init()">查询</span>
<span class="default-btn" @click="resetSearch" style="margin: 0 24px">重置</span>
<span class="default-btn" @click="openDialog(null)">新增</span>
<span class="default-btn" @click="resetSearch">
<span class="iconfont icon-RectangleCopy1"></span>
重置
</span>
<span class="default-btn" @click="init()">
<span class="iconfont icon-RectangleCopy"></span>
查询
</span>
<span class="default-btn" @click="openDialog(null)">
<span class="iconfont icon-jia"></span>
新增
</span>
</div>
</div>
<div class="table">
<el-table :data="tableData" style="width: 100%;height: 100%" @row-click="rowClick">
<el-table :data="tableData" style="width: 100%;height: 100%" @row-click="rowClick" :header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column prop="date" label="日期" width="180" show-overflow-tooltip>
<template #default="scope">
{{ formatDate(scope.row.memberInfo.createDatetime) }}
@ -49,7 +58,7 @@
</el-table-column>
<el-table-column prop="sectionNames" label="科室" show-overflow-tooltip>
<template #default="scope">
{{scope.row.memberInfo.sectionNames}}
{{ scope.row.memberInfo.sectionNames }}
</template>
</el-table-column>
<el-table-column prop="memo" label="备注" show-overflow-tooltip>
@ -79,7 +88,6 @@ import {onMounted, ref, nextTick} from "vue"
import MemberEdit from "@/components/settings/MemberEdit.vue";
import {post} from "@/utils/request.ts";
import {formatDate} from "@/utils/dateUtils.ts";
import {Plus} from "@element-plus/icons-vue";
import {apiConfig} from "@/assets/config/apiConfig.ts";
const isShow = ref(false)
@ -88,7 +96,7 @@ const memberEditRef = ref<any>(null)
const rowClick = (row: any) => {
openDialog(row.memberInfo.id)
}
const openDialog= (id:any) => {
const openDialog = (id: any) => {
nextTick(() => {
memberEditRef.value?.init(id)
})
@ -190,10 +198,12 @@ const resetSearch = () => {
justify-content: flex-end;
}
}
:deep(.el-input__wrapper){
:deep(.el-input__wrapper) {
height: 42px;
}
:deep(.el-select__wrapper){
:deep(.el-select__wrapper) {
height: 42px;
}
</style>

View File

@ -18,15 +18,28 @@
</el-form>
</div>
<div class="title-btn">
<span class="default-btn" @click="init()">查询</span>
<span class="default-btn" @click="resetSearch" style="margin: 0 24px">重置</span>
<span class="default-btn" @click="openDialog">新增</span>
<span class="default-btn" @click="resetSearch">
<span class="iconfont icon-RectangleCopy1"></span>
重置
</span>
<span class="default-btn" @click="init()">
<span class="iconfont icon-RectangleCopy"></span>
查询
</span>
<span class="default-btn" @click="openDialog">
<span class="iconfont icon-jia"></span>
新增
</span>
</div>
</div>
<div class="table">
<el-table :data="tableData" style="width: 100%" @row-click="rowClick">
<el-table :data="tableData" style="width: 100%" @row-click="rowClick" :header-cell-style="{ backgroundColor: '#F1F5FB' }">
<el-table-column prop="name" label="科室类型" width="120" show-overflow-tooltip/>
<el-table-column prop="bedCnt" label="病床数量" width="80" show-overflow-tooltip/>
<el-table-column prop="bedCnt" label="病床数量" width="80" show-overflow-tooltip align="center">
<template #default="scope">
{{ scope.row.bedCnt?scope.row.bedCnt+'个':'' }}
</template>
</el-table-column>
<el-table-column prop="beginDate" label="开始日期" width="120" show-overflow-tooltip/>
<el-table-column prop="caty" label="类别" show-overflow-tooltip width="150">
<template #default="scope">
@ -35,17 +48,17 @@
</el-table-column>
<el-table-column prop="code" label="编码" width="180" show-overflow-tooltip/>
<el-table-column prop="creationDate" label="创建日期" width="120" show-overflow-tooltip/>
<el-table-column prop="drPsncnt" label="医生人数" show-overflow-tooltip/>
<el-table-column prop="drPsncnt" label="医生人数" show-overflow-tooltip align="center"/>
<el-table-column prop="endDate" label="结束日期" width="120" show-overflow-tooltip/>
<el-table-column prop="info" label="信息" show-overflow-tooltip/>
<el-table-column prop="medServScp" label="医疗服务范围" width="150" show-overflow-tooltip/>
<el-table-column prop="memo" label="备注" show-overflow-tooltip/>
<el-table-column prop="nursPsncnt" label="护士人数" show-overflow-tooltip/>
<el-table-column prop="pharPsncnt" label="药剂师人数" width="100" show-overflow-tooltip/>
<el-table-column prop="nursPsncnt" label="护士人数" show-overflow-tooltip align="center"/>
<el-table-column prop="pharPsncnt" label="药剂师人数" width="100" show-overflow-tooltip align="center"/>
<el-table-column prop="resperName" label="负责人姓名" width="100" show-overflow-tooltip/>
<el-table-column prop="resperTel" label="负责人电话" width="200" show-overflow-tooltip/>
<el-table-column prop="socialBedCnt" label="社会病床数量" width="200" show-overflow-tooltip/>
<el-table-column prop="tecnPsncnt" label="技术人员人数" width="200" show-overflow-tooltip/>
<el-table-column prop="socialBedCnt" label="社会病床数量" width="200" show-overflow-tooltip align="center"/>
<el-table-column prop="tecnPsncnt" label="技术人员人数" width="200" show-overflow-tooltip align="center"/>
</el-table>
</div>
<div class="bottom">
@ -191,7 +204,6 @@ const getDeptDisplayName = (code: string): string => {
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
}
.table {