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

This commit is contained in:
LiJianZhao 2025-05-09 15:03:41 +08:00
commit 2b15353bda
7 changed files with 88 additions and 60 deletions

View File

@ -25,12 +25,17 @@
</span> </span>
</div> </div>
<div class="search"> <div class="search">
<el-input v-model="query.keyword" style="height: 100%;width: 100%" placeholder="根据姓名搜索"/> <el-input
v-model="query.keyword"
style="height: 100%;width: 100%"
placeholder="根据姓名搜索"
@input="search"
/>
<!-- <el-button type="success" @click="addChargeOrder" size="small">+收费</el-button>--> <!-- <el-button type="success" @click="addChargeOrder" size="small">+收费</el-button>-->
</div> </div>
<div class="list"> <div class="list" v-loading="loading">
<el-scrollbar> <el-scrollbar>
<ul v-loading="loading"> <ul >
<li class="list-item" :class="curItem.id == item.id ? 'active' : ''" <li class="list-item" :class="curItem.id == item.id ? 'active' : ''"
v-for="(item, index) in ChargeQueueList" v-for="(item, index) in ChargeQueueList"
:key="index" @click="clickItem(item)"> :key="index" @click="clickItem(item)">
@ -50,7 +55,6 @@
</li> </li>
</ul> </ul>
</el-scrollbar> </el-scrollbar>
</div> </div>
</div> </div>
</template> </template>
@ -71,7 +75,7 @@ const clickItem = (item: any) => {
curItem.value = item curItem.value = item
emit('clickItem', item, query.value.status); emit('clickItem', item, query.value.status);
} }
const loading= ref(false) const loading = ref(false)
const ChargeQueueList = ref<any>([]); const ChargeQueueList = ref<any>([]);
const addChargeOrder = () => { const addChargeOrder = () => {
@ -104,16 +108,15 @@ const init = async () => {
query.value.endTime = getEndOfDay(selectedDate.value) query.value.endTime = getEndOfDay(selectedDate.value)
loading.value = true loading.value = true
try { try {
let data:any = await post(apiConfig.recordGetChargeQueue, {query: query.value}, {catch_error: true}) let data: any = await post(apiConfig.recordGetChargeQueue, {query: query.value}, {catch_error: true})
ChargeQueueList.value = data.list ChargeQueueList.value = data.list
} }
catch { catch {
} ChargeQueueList.value = []
finally { } finally {
loading.value = false loading.value = false
} }
getTipCount() getTipCount()
} }
const delDraft = () => { const delDraft = () => {
ChargeQueueList.value.shift(); ChargeQueueList.value.shift();
@ -183,6 +186,11 @@ watch(() => selectedDate.value, (newValue, oldValue) => {
} }
init() init()
}) })
const search = (v: any) => {
console.log(v)
query.value.keyword = v
init()
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.container { .container {

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import Panel from "@/components/common/Panel.vue"; import Panel from "@/components/common/Panel.vue";
import {onMounted, ref} from "vue"; import {onMounted, ref} from "vue";
import {formatDateArray, getThisMonth, getThisWeek, getToday, getYesterday} from "@/utils/dateUtils.ts"; import {formatDateArray, getEndOfDay, getThisMonth, getThisWeek, getToday, getYesterday} from "@/utils/dateUtils.ts";
import {post} from "@/utils/request.ts"; import {post} from "@/utils/request.ts";
onMounted(() => { onMounted(() => {
@ -48,6 +48,9 @@ const getDateRange = () => {
beginTime = date.start beginTime = date.start
endTime = date.end endTime = date.end
} }
if (beginTime==endTime){
endTime=getEndOfDay(endTime)
}
return {begin: beginTime, end: endTime} return {begin: beginTime, end: endTime}
} }
const getRevenueOverview = () => { const getRevenueOverview = () => {

View File

@ -300,7 +300,7 @@
</div> </div>
</el-aside> </el-aside>
<el-aside width="350px" style="border-left: 1px #ddd solid"> <el-aside width="350px" style="border-left: 1px #ddd solid">
<el-form style="width: 100%;" label-width="100px"> <el-form style="width: 100%;" :rules="rules" ref="formRef" label-width="100px">
<el-descriptions title="定价" border direction="vertical" :column="2" style="margin-left: 5px"> <el-descriptions title="定价" border direction="vertical" :column="2" style="margin-left: 5px">
<el-descriptions-item label="定价模式" width="180"> <el-descriptions-item label="定价模式" width="180">
<el-select v-model="edit_data.pricingModel" placeholder="请选择"> <el-select v-model="edit_data.pricingModel" placeholder="请选择">
@ -310,23 +310,24 @@
:label="item.label" :label="item.label"
:value="item.value"> :value="item.value">
</el-option> </el-option>
</el-select> </el-select>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="加成率" v-if="edit_data.pricingModel==1"> <el-descriptions-item label="加成率" v-if="edit_data.pricingModel==1">
<el-input v-model="edit_data.makeUp" type="number"> <el-form-item prop="makeUp">
<template #append>%</template> <el-input v-model="edit_data.makeUp" type="number">
</el-input> <template #append>%</template>
</el-input>
</el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="零售价格" v-if="edit_data.pricingModel==2"> <el-descriptions-item label="零售价格" v-else>
<el-input v-model="edit_data.unitPrice" type="number" <el-form-item prop="unitPrice">
> <el-input v-model="edit_data.unitPrice" type="number"
<template #prefix></template> >
<template #append>/{{ edit_data.packagingUnit }}</template> <template #prefix></template>
</el-input> <template #append>/{{ edit_data.packagingUnit }}</template>
</el-input>
</el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template #label> <template #label>
<el-checkbox v-model="edit_data.trdnFlag" label="是否允许拆零" size="large"/> <el-checkbox v-model="edit_data.trdnFlag" label="是否允许拆零" size="large"/>
@ -390,7 +391,7 @@ const pricingModelOptions = [
value: 1, value: 1,
}, { }, {
label: '固定售价', label: '固定售价',
value: 2, value: 0,
} }
] ]
const maintainOptions = [ const maintainOptions = [
@ -431,7 +432,7 @@ const storageConditionsOptions =
} }
] ]
const emit = defineEmits(['close']) const emit = defineEmits(['close'])
let edit_data: any = ref({trdnFlag: false, extra: {}, minPackagingUnit: "只", packagingUnit: "盒", pricingModel: 2}); let edit_data: any = ref({trdnFlag: false, extra: {}, minPackagingUnit: "只", packagingUnit: "盒", pricingModel: 0});
const idCode = ref(""); const idCode = ref("");
const showPopover = ref(false); const showPopover = ref(false);
const idCodeList = ref<string[]>([]); const idCodeList = ref<string[]>([]);
@ -469,6 +470,7 @@ const removeIdCode = (item: string) => {
showPopover.value = idCodeList.value.length > 0; showPopover.value = idCodeList.value.length > 0;
} }
const init = (type: number, id: number) => { const init = (type: number, id: number) => {
isShow.value = true isShow.value = true
_type.value = type; _type.value = type;
if (id != null && id != 0) { if (id != null && id != 0) {
@ -494,7 +496,10 @@ const openCreateSearch = () => {
}); });
} }
const createConfirm = (data: any) => { const createConfirm = (data: any) => {
let id = edit_data.value.id
edit_data.value = data edit_data.value = data
edit_data.value.id = id
} }
const contrastCodeSearch = ref() const contrastCodeSearch = ref()
const openContrastCodeSearch = () => { const openContrastCodeSearch = () => {
@ -538,6 +543,7 @@ const cateCloseCallBack = () => {
let exit = () => { let exit = () => {
document.addEventListener("click", handleClickOutside); document.addEventListener("click", handleClickOutside);
isShow.value = false isShow.value = false
edit_data.value = {}
emit('close'); emit('close');
} }
const handleClickOutside = (event: MouseEvent) => { const handleClickOutside = (event: MouseEvent) => {
@ -581,6 +587,12 @@ const rules = ref({
producer: [ producer: [
{required: true, message: '生产企业不能为空', trigger: 'blur'} {required: true, message: '生产企业不能为空', trigger: 'blur'}
], ],
makeUp: [
{required: true, message: '不能为空', trigger: 'blur'}
],
unitPrice: [
{type: 'number', message: '不能为空', trigger: 'blur'},
]
}) })
// //
const formRef = ref() const formRef = ref()
@ -617,8 +629,6 @@ const drugCategoryOptions = [
value: 1304 value: 1304
} }
] ]
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.header { .header {

View File

@ -107,7 +107,7 @@ function init_search_data() {
} }
let confirm = () => { let confirm = () => {
let jsondata = current_search_data; let jsondata = JSON.parse(current_search_data.data);
let data = { let data = {
id: null, id: null,
type: null, type: null,
@ -129,13 +129,10 @@ let confirm = () => {
regType: jsondata.reg_type, regType: jsondata.reg_type,
approvalNumber: jsondata.approval_number, approvalNumber: jsondata.approval_number,
category: jsondata.category category: jsondata.category
} }
} }
emit('confirm', data) emit('confirm', data)
show.value = false; show.value = false;
} }
let isloading = ref(false); let isloading = ref(false);
let search_social = () => { let search_social = () => {
@ -174,6 +171,7 @@ let search_social = () => {
} }
const close = () => { const close = () => {
show.value = false; show.value = false;
keyword.value=''
} }
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

View File

@ -1,12 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import {getKey} from "@/utils/discrotyUtil.ts";
import gends from "@/assets/config/directory/gends.json";
import natys from "@/assets/config/directory/antys.json";
import psnCertTypes from "@/assets/config/directory/psnCertTypes.json";
import insutypes from "@/assets/config/directory/insutypes.json";
import {onMounted, onUnmounted, ref} from "vue"; import {onMounted, onUnmounted, ref} from "vue";
import {ElMessage, ElMessageBox} from "element-plus"; import {ElMessage} from "element-plus";
import {post} from "@/utils/request.ts"; import {post} from "@/utils/request.ts";
import type {Request, Response} from "@/utils/ws.ts"; import type {Request, Response} from "@/utils/ws.ts";
import {useWsStore} from "@/stores/wsStore.ts"; import {useWsStore} from "@/stores/wsStore.ts";
@ -15,8 +9,8 @@ const wsStore = useWsStore();
const isReading = ref(false) const isReading = ref(false)
const socialCard: any = defineModel(); const socialCard: any = defineModel();
const ReadSocialCard = async (readType: string) => { const ReadSocialCard = async (readType: string) => {
emit("changeLoading",true)
socialCard.value.lastUse = "CardDefault" socialCard.value.lastUse = "CardDefault"
emit("changeLoading", true)
isReading.value = true; isReading.value = true;
let config_db: any = await post('common/config/getall'); let config_db: any = await post('common/config/getall');
let config: any = {} let config: any = {}
@ -41,7 +35,6 @@ const ReadSocialCard = async (readType: string) => {
}; };
const reciceMessage = (response: Response) => { const reciceMessage = (response: Response) => {
emit('changeLoading',false)
if (socialCard.value.lastUse != "CardDefault") { if (socialCard.value.lastUse != "CardDefault") {
return; return;
} }
@ -52,6 +45,7 @@ const reciceMessage = (response: Response) => {
type: 'warning', type: 'warning',
}); });
isReading.value = false; isReading.value = false;
emit('changeLoading', false)
return; return;
} }
let readType = response.Data.readType; let readType = response.Data.readType;
@ -68,19 +62,18 @@ const reciceMessage = (response: Response) => {
cardSn: response.Data.card_sn ? response.Data.card_sn : "", cardSn: response.Data.card_sn ? response.Data.card_sn : "",
} }
getInfoFor1101(params) getInfoFor1101(params)
} }
const emit = defineEmits(['socialCardUpdate', 'close','changeLoading']) const emit = defineEmits(['socialCardUpdate', 'close', 'changeLoading'])
const getInfoFor1101 = (params: any) => { const getInfoFor1101 = (params: any) => {
emit('changeLoading',true) emit('changeLoading', true)
ElMessage({ ElMessage({
message: "正在读取中,请稍后......", message: "正在读取中,请稍后......",
duration: 500, duration: 500,
type: 'info', type: 'info',
}); });
post("social/person/getCustomSocialInfo", {data: params},{catch_error: true}).then((res: any) => { post("social/person/getCustomSocialInfo", {data: params}, {catch_error: true}).then((res: any) => {
emit('changeLoading',false) emit('changeLoading', false)
socialCard.value.data = res; socialCard.value.data = res;
socialCard.value.mdtrtCertType = params.mdtrtCertType; socialCard.value.mdtrtCertType = params.mdtrtCertType;
socialCard.value.mdtrtCertNo = params.mdtrtCertNo; socialCard.value.mdtrtCertNo = params.mdtrtCertNo;
@ -91,14 +84,14 @@ const getInfoFor1101 = (params: any) => {
}); });
emit('socialCardUpdate', socialCard.value) emit('socialCardUpdate', socialCard.value)
}).catch(()=>{ }).catch(() => {
isReading.value = false; isReading.value = false;
emit('changeLoading',false) emit('changeLoading', false)
ElMessage({ ElMessage({
message: "读取失败", message: "读取失败",
duration: 1000, duration: 1000,
type: 'error', type: 'error',
}); });
}) })
} }
@ -106,8 +99,9 @@ onMounted(async () => {
wsStore.setMessageCallback(reciceMessage) wsStore.setMessageCallback(reciceMessage)
}); });
onUnmounted(() => { onUnmounted(() => {
emit('changeLoading', false)
wsStore.removeAllMessageCallback() wsStore.removeAllMessageCallback()
emit('changeLoading',false)
}) })
const close = () => { const close = () => {
socialCard.value = null socialCard.value = null

View File

@ -26,7 +26,8 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="性别"> <el-descriptions-item label="性别">
<el-form-item prop="gender"> <el-form-item prop="gender">
<el-radio-group v-model="edit_data.gender" :disabled="edit_data.status==1||edit_data.status==3||edit_data.status==0"> <el-radio-group v-model="edit_data.gender"
:disabled="edit_data.status==1||edit_data.status==3||edit_data.status==0">
<el-radio :value="1"></el-radio> <el-radio :value="1"></el-radio>
<el-radio :value="2"></el-radio> <el-radio :value="2"></el-radio>
</el-radio-group> </el-radio-group>
@ -40,7 +41,8 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="手机号"> <el-descriptions-item label="手机号">
<el-form-item prop="phone"> <el-form-item prop="phone">
<el-input v-model="edit_data.phone" placeholder="手机号" :disabled="edit_data.status==3||edit_data.status==0"></el-input> <el-input v-model="edit_data.phone" placeholder="手机号"
:disabled="edit_data.status==3||edit_data.status==0"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="医生"> <el-descriptions-item label="医生">
@ -143,10 +145,12 @@
<template #footer> <template #footer>
<div class="bottom"> <div class="bottom">
<el-dropdown v-if="isShowCard" placement="top-start" @show="showCardBtn" @hide="hide" :disabled="edit_data.status==0"> <el-dropdown v-if="isShowCard" placement="top-start" @show="showCardBtn" @hide="hide"
:disabled="edit_data.status==0">
<div class="left" style="outline: none;"> <div class="left" style="outline: none;">
<span class="btnCard" type="primary"> <span class="btnCard" type="primary">
<img class="image" src="/static/images/registration/card.png" alt="" srcset="">{{edit_data.status==0?'不能读卡':'进行读卡'}} <img class="image" src="/static/images/registration/card.png" alt=""
srcset="">{{ edit_data.status == 0 ? '不能读卡' : '进行读卡' }}
<img class="image1" :src="'/static/images/registration/'+(showBtn?2:1)+'.png'" alt="" srcset=""> <img class="image1" :src="'/static/images/registration/'+(showBtn?2:1)+'.png'" alt="" srcset="">
</span> </span>
</div> </div>
@ -300,7 +304,7 @@ const init = (doctorId: any, id: any) => {
const isShowCard = ref<any>(true) const isShowCard = ref<any>(true)
const tableData = ref<any>([]) const tableData = ref<any>([])
const socialCardUpdate = (e: any) => { const socialCardUpdate = (e: any) => {
loading.value = true isShowCard.value = false
if (e) { if (e) {
isShowCard.value = false isShowCard.value = false
edit_data.value.gender = Number(e.data.baseinfo.gend) edit_data.value.gender = Number(e.data.baseinfo.gend)
@ -357,7 +361,6 @@ const deleteCard = () => {
const showBtn = ref(false) const showBtn = ref(false)
const showCardBtn = () => { const showCardBtn = () => {
showBtn.value = true showBtn.value = true
} }
const hide = () => { const hide = () => {
showBtn.value = false showBtn.value = false
@ -374,6 +377,7 @@ const getSectionList = () => {
const loading = ref(false) const loading = ref(false)
const changeLoading = (e: any) => { const changeLoading = (e: any) => {
loading.value = e loading.value = e
console.log(e,'e')
} }
defineExpose({init}) defineExpose({init})
</script> </script>

View File

@ -99,7 +99,15 @@ import {ref, onMounted} from 'vue'
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import {post} from "@/utils/request.ts"; import {post} from "@/utils/request.ts";
import Panel from "@/components/common/Panel.vue"; import Panel from "@/components/common/Panel.vue";
import {getYesterday, getToday, getTomorrow, getThisWeek, getThisMonth, formatDateArray} from "@/utils/dateUtils.ts" import {
getYesterday,
getToday,
getTomorrow,
getThisWeek,
getThisMonth,
formatDateArray,
getEndOfDay
} from "@/utils/dateUtils.ts"
const changeNum = ref(0) const changeNum = ref(0)
const data = ref<any>({ const data = ref<any>({
@ -147,6 +155,9 @@ const getDateRange = () => {
beginTime = date.start beginTime = date.start
endTime = date.end endTime = date.end
} }
if (beginTime==endTime){
endTime=getEndOfDay(endTime)
}
return {begin: beginTime, end: endTime} return {begin: beginTime, end: endTime}
} }
const initChart = () => { const initChart = () => {