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

This commit is contained in:
ChenQiuYu 2025-04-29 16:27:46 +08:00
commit 062df7714d
7 changed files with 181 additions and 334 deletions

View File

@ -4,34 +4,29 @@ import {onMounted, ref} from "vue";
import {getThisWeek} from "@/utils/dateUtils.ts"; import {getThisWeek} from "@/utils/dateUtils.ts";
import {post} from "@/utils/request.ts"; import {post} from "@/utils/request.ts";
// onMounted(() => { onMounted(() => {
// getRevenueOverview() getRevenueOverview()
// }) })
const payTypeRevenue = ref<any>([ const payTypeRevenue = ref<any>([
{ {
name: '医保支付', name: '医保支付',
totalRevenue: 0, totalRevenue: 0,
background: '#F0F4FD'
}, },
{ {
name: '微信支付', name: '微信支付',
totalRevenue: 0, totalRevenue: 0,
background: '#ECF8FE'
}, },
{ {
name: '支付宝', name: '支付宝',
totalRevenue: 0, totalRevenue: 0,
background: '#FFF5EC'
}, },
{ {
name: '现金支付', name: '现金支付',
totalRevenue: 0, totalRevenue: 0,
background: '#FFEEEE'
}, },
{ {
name: '其他支付', name: '其他支付',
totalRevenue: 0, totalRevenue: 0,
background: '#E5F9FF'
} }
]); ]);
const background = ref<any>([ const background = ref<any>([
@ -41,14 +36,14 @@ const background = ref<any>([
'#FFEEEE', '#FFEEEE',
'#E5F9FF' '#E5F9FF'
]); ]);
// const getRevenueOverview = () => { const getRevenueOverview = () => {
// const thisWeek = getThisWeek(); const thisWeek = getThisWeek();
// post("statistics/getRevenueOverview", {beginTime: thisWeek.start, endTime: thisWeek.end}).then((res: any) => { post("statistics/getRevenueOverview", {beginTime: thisWeek.start, endTime: thisWeek.end}).then((res: any) => {
// if (res.payTypeRevenue.length === 0) return if (res.payTypeRevenue.length === 0) return
// payTypeRevenue.value = res.payTypeRevenue payTypeRevenue.value = res.payTypeRevenue
// }) })
//
// } }
</script> </script>
<template> <template>

View File

@ -62,14 +62,14 @@
</div> </div>
</template> </template>
</Mask> </Mask>
<Search ref="createSearchRef" @confirm="createConfirm"/> <ItemSearch ref="createSearchRef" @confirm="createConfirm"/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {defineProps, defineEmits, ref, nextTick, onMounted} from 'vue' import {defineProps, defineEmits, ref, nextTick, onMounted} from 'vue'
import {post} from "@/utils/request.ts"; import {post} from "@/utils/request.ts";
import Search from "./Search.vue";
import {ElMessage} from "element-plus"; import {ElMessage} from "element-plus";
import Mask from "@/components/common/Mask.vue"; import Mask from "@/components/common/Mask.vue";
import ItemSearch from "@/components/settings/ItemSearch.vue";
const props = defineProps({ const props = defineProps({
id: { id: {
@ -143,7 +143,7 @@ const createConfirm = (data: any) => {
console.log(data, 'data') console.log(data, 'data')
form.value = data form.value = data
form.value.itemName = data.name form.value.itemName = data.name
form.value.itemSocialCode = data.hilistCode form.value.itemSocialCode = data.code
} }
const deleteDetail = () => { const deleteDetail = () => {
post("item/delete", {id: props.id}).then((res: any) => { post("item/delete", {id: props.id}).then((res: any) => {

View File

@ -2,13 +2,13 @@
<div class="container"> <div class="container">
<div class="content"> <div class="content">
<div class="title"> <div class="title">
<el-date-picker <!-- <el-date-picker-->
v-model="dateArray" <!-- v-model="dateArray"-->
type="daterange" <!-- type="daterange"-->
range-separator="~" <!-- range-separator="~"-->
start-placeholder="开始日期" <!-- start-placeholder="开始日期"-->
end-placeholder="结束日期" <!-- end-placeholder="结束日期"-->
/> <!-- />-->
</div> </div>
<div class="content-box"> <div class="content-box">
<el-table :data="list" style="width: 100%" :summary-method="getSummaries" show-summary> <el-table :data="list" style="width: 100%" :summary-method="getSummaries" show-summary>

View File

@ -2,262 +2,129 @@
<div class="container"> <div class="container">
<div class="content"> <div class="content">
<div class="title"> <div class="title">
<el-date-picker <!-- <el-date-picker-->
v-model="value2" <!-- v-model="date"-->
type="daterange" <!-- type="daterange"-->
range-separator="~" <!-- range-separator="~"-->
start-placeholder="开始日期" <!-- start-placeholder="开始日期"-->
end-placeholder="结束日期" <!-- end-placeholder="结束日期"-->
/> <!-- />-->
<el-select <!-- <el-select-->
v-model="salesPerson" <!-- v-model="salesPerson"-->
placeholder="销售人" <!-- placeholder="销售人"-->
style="width: 100px;margin: 0 10px" <!-- style="width: 100px;margin: 0 10px"-->
> <!-- >-->
<el-option <!-- <el-option-->
v-for="item in salesPersonOptions" <!-- v-for="item in salesPersonOptions"-->
:key="item.value" <!-- :key="item.value"-->
:label="item.label" <!-- :label="item.label"-->
:value="item.value" <!-- :value="item.value"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
<el-select v-model="type" placeholder="类型" style="width: 100px"> <!-- <el-select v-model="type" placeholder="类型" style="width: 100px">-->
<el-option <!-- <el-option-->
v-for="item in typeOptions" <!-- v-for="item in typeOptions"-->
:key="item.value" <!-- :key="item.value"-->
:label="item.label" <!-- :label="item.label"-->
:value="item.value" <!-- :value="item.value"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
<el-select v-model="source" placeholder="开单来源" style="width: 100px;margin-left: 10px"> <!-- <el-select v-model="source" placeholder="开单来源" style="width: 100px;margin-left: 10px">-->
<el-option <!-- <el-option-->
v-for="item in sourceOptions" <!-- v-for="item in sourceOptions"-->
:key="item.value" <!-- :key="item.value"-->
:label="item.label" <!-- :label="item.label"-->
:value="item.value" <!-- :value="item.value"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
<el-select <!-- <el-select-->
v-model="chargeMan" <!-- v-model="chargeMan"-->
placeholder="收费员" <!-- placeholder="收费员"-->
style="width: 100px;margin-left: 10px" <!-- style="width: 100px;margin-left: 10px"-->
> <!-- >-->
<el-option <!-- <el-option-->
v-for="item in chargeManOptions" <!-- v-for="item in chargeManOptions"-->
:key="item.value" <!-- :key="item.value"-->
:label="item.label" <!-- :label="item.label"-->
:value="item.value" <!-- :value="item.value"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
<el-select <!-- <el-select-->
v-model="pay" <!-- v-model="pay"-->
placeholder="支付方式" <!-- placeholder="支付方式"-->
style="width: 100px;margin-left: 10px" <!-- style="width: 100px;margin-left: 10px"-->
> <!-- >-->
<el-option <!-- <el-option-->
v-for="item in payOptions" <!-- v-for="item in payOptions"-->
:key="item.value" <!-- :key="item.value"-->
:label="item.label" <!-- :label="item.label"-->
:value="item.value" <!-- :value="item.value"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
</div> </div>
<div class="content-box"> <div class="content-box">
<el-table :data="tableData" style="width: 100%"> <el-table :data="tableData" style="width: 100%">
<el-table-column prop="name" label="收费时间" align="center"/> <el-table-column prop="chargeTime" label="收费时间" align="center" show-overflow-tooltip/>
<el-table-column label="销售单号" align="center"></el-table-column> <el-table-column label="销售单号" prop="projectCode" show-overflow-tooltip></el-table-column>
<el-table-column label="患者姓名" align="center"></el-table-column> <el-table-column label="患者姓名" prop="customer"></el-table-column>
<el-table-column prop="name" label="性别" align="center"/> <el-table-column prop="source" label="开单来源" />
<el-table-column prop="zip" label="年龄" align="center"></el-table-column> <el-table-column prop="type" label="收费/退费" align="center"></el-table-column>
<el-table-column label="手机号" align="center"></el-table-column> <el-table-column prop="originalPrice" label="原价" align="center"></el-table-column>
<el-table-column prop="name" label="开单来源" align="center"/> <el-table-column prop="discount" label="优惠" align="center"></el-table-column>
<el-table-column prop="zip" label="患者等级" align="center"></el-table-column> <el-table-column prop="receivable" label="应收" align="center"></el-table-column>
<el-table-column prop="zip" label="顾客来源" align="center"></el-table-column>
<el-table-column prop="zip" label="类型" align="center"></el-table-column> <el-table-column prop="netReceipts" label="实收" align="center"></el-table-column>
<el-table-column prop="zip" label="原价" align="center"></el-table-column> <el-table-column prop="payType" label="支付类型" align="center"></el-table-column>
<el-table-column prop="zip" label="单项改价" align="center"></el-table-column> <el-table-column label="销售人" prop="salePersonId"></el-table-column>
<el-table-column label="优惠" align="center"></el-table-column>
<el-table-column label="整单改价" align="center"></el-table-column>
<el-table-column label="应收" align="center"></el-table-column>
<el-table-column label="实收" align="center"></el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue' import {onMounted, ref} from 'vue'
const tableData = [ import {post} from "@/utils/request.ts";
{ const tableData = ref<any[]>([])
date: '2016-05-03', const date = ref<any>([])
name: 'Tom', const salesPerson = ref<any>('')
state: 'California', const salesPersonOptions = [{}
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036',
}
] ]
const value2 = ref([]) const type = ref<any>('')
const shortcuts = [ const typeOptions = [{
{
text: '今天',
value() {
const end = new Date()
const start = new Date()
return [start, end]
},
},
{
text: '昨天',
value() {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 1)
return [start, end]
}
},
{
text: '本周',
value: () => {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 7)
return [start, end]
},
},
{
text: '上个月',
value: () => {
const end = new Date()
const start = new Date()
start.setMonth(start.getMonth() - 1)
return [start, end]
},
},
{
text: '前三个月',
value: () => {
const end = new Date()
const start = new Date()
start.setMonth(start.getMonth() - 3)
return [start, end]
},
},
]
const options = [
{
value: '选项1',
label: '黄金糕',
},
{
value: '选项2',
label: '双皮奶',
},
{
value: '选项3',
label: '蚵仔煎',
},
{
value: '选项4',
label: '龙须面',
},
{
value: '选项5',
label: '北京烤鸭',
},
]
const value = ref('')
const salesPerson = ref('')
const salesPersonOptions = [
{
value: '1', value: '1',
label: '医保卡', label: '全部'
}, }
{
value: '2',
label: '微信',
},
{
value: '3',
label: '支付宝',
},
{
value: '4',
label: '现金',
},
{
value: '5',
label: '其他',
},
] ]
const type = ref('') const source = ref<any>('')
const typeOptions = [ const sourceOptions = [{
{
value: '1', value: '1',
label: '中西成药', label: '全部'
}, }
{
value: '2',
label: '中药饮片',
},
{
value: '3',
label: '医疗器械',
},
{
value: '4',
label: '其他商品',
}
] ]
const source = ref('')
const sourceOptions = [
{
value: '1',
label: '门诊',
},
{
value: '2',
label: '住院',
},
{
value: '3',
label: '体检',
} const chargeMan = ref<any>('')
] const chargeManOptions = [{
const chargeMan = ref('')
const chargeManOptions = [
{
value: '1', value: '1',
label: '张三', label: '全部'
}, }
{
value: '2',
label: '李四',
},
{
value: '3',
label: '王五',
},
{
value: '4',
label: '赵六',
}
] ]
const pay = ref('')
const payOptions = [ const pay = ref<any>('')
{ const payOptions = [{
value: '1', value: '1',
label: '现金', label: '全部'
}, }
{
value: '2',
label: '微信',
},
{
value: '3',
}
] ]
const getDate = () => {
post("charge/getChargeRecord").then((res:any)=>{
tableData.value = res.list
})
}
onMounted(()=>{
getDate();
})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.title{ .title{

View File

@ -2,37 +2,37 @@
<div class="container"> <div class="container">
<div class="content"> <div class="content">
<div class="title"> <div class="title">
<el-date-picker <!-- <el-date-picker-->
v-model="value2" <!-- v-model="date"-->
type="daterange" <!-- type="daterange"-->
range-separator="~" <!-- range-separator="~"-->
start-placeholder="开始日期" <!-- start-placeholder="开始日期"-->
end-placeholder="结束日期" <!-- end-placeholder="结束日期"-->
/> <!-- />-->
<el-select <!-- <el-select-->
v-model="chargeMan" <!-- v-model="chargeMan"-->
placeholder="收费员" <!-- placeholder="收费员"-->
style="width: 100px;margin-left: 10px" <!-- style="width: 100px;margin-left: 10px"-->
> <!-- >-->
<el-option <!-- <el-option-->
v-for="item in chargeManOptions" <!-- v-for="item in chargeManOptions"-->
:key="item.value" <!-- :key="item.value"-->
:label="item.label" <!-- :label="item.label"-->
:value="item.value" <!-- :value="item.value"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
</div> </div>
<div class="content-box"> <div class="content-box">
<el-table :data="tableData" style="width: 100%"> <el-table :data="tableData" style="width: 100%">
<el-table-column prop="name" label="收费员" align="center"/> <el-table-column prop="salePersonName" label="收费员" align="center"/>
<el-table-column label="营业收入/总金额" align="center"> <el-table-column prop="totalIncome" label="营业收入/总金额" align="center">
</el-table-column> </el-table-column>
<el-table-column label="支付方式" align="center"> <el-table-column label="支付方式" align="center">
<el-table-column prop="name" label="医保" align="center"/> <el-table-column prop="socialIncome" label="医保" align="center"/>
<el-table-column prop="name" label="微信" align="center"/> <el-table-column prop="wechatIncome" label="微信" align="center"/>
<el-table-column prop="name" label="支付宝" align="center"/> <el-table-column prop="aliPayIncome" label="支付宝" align="center"/>
<el-table-column prop="name" label="现金" align="center"/> <el-table-column prop="cashIncome" label="现金" align="center"/>
<el-table-column prop="name" label="其他" align="center"/> <el-table-column prop="otherIncome" label="其他" align="center"/>
</el-table-column> </el-table-column>
<el-table-column label="收费人次" align="center"> <el-table-column label="收费人次" align="center">
</el-table-column> </el-table-column>
@ -42,38 +42,26 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {ref} from 'vue' import {onMounted, ref} from 'vue'
import {dateEquals} from "element-plus";
import {post} from "@/utils/request.ts";
const tableData = ref<any>([]);
const date = ref<any>([]);
const chargeMan = ref<any>('');
const chargeManOptions = ref<any>([]);
const getSalePersonCharge = () => {
post("statistics/salePerson").then((res:any)=>{
tableData.value = res
})
}
onMounted(()=>{
getSalePersonCharge()
})
const tableData = [
{
date: '2016-05-03',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036',
}
]
const value2 = ref([])
const chargeMan = ref('')
const chargeManOptions = [
{
value: '1',
label: '张三',
},
{
value: '2',
label: '李四',
},
{
value: '3',
label: '王五',
},
{
value: '4',
label: '赵六',
}
]
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.title { .title {

View File

@ -36,24 +36,24 @@
<div class="revenue-content-item-text"> <div class="revenue-content-item-text">
<div class="num">{{ data.totalOrderCount || 0 }}<span class="unit color1"></span></div> <div class="num">{{ data.totalOrderCount || 0 }}<span class="unit color1"></span></div>
<div class="name color1">消费人次</div> <div class="name color1">消费人次</div>
<div class="text">日均{{ (data.totalOrderCount / averageNum).toFixed(0) || 0 }}</div> <div class="text">日均{{ (data.totalOrderCount / averageNum).toFixed(0) || 0 }}</div>
</div> </div>
<img class="image" src="/static/images/overView/2.png" alt=""> <img class="image" src="/static/images/overView/2.png" alt="">
</div> </div>
<div class="revenue-content-item"> <div class="revenue-content-item">
<div class="revenue-content-item-text"> <div class="revenue-content-item-text">
<div class="num">{{ data.vipRevenue || 0 }}<span class="unit color2"></span></div> <div class="num">{{ data.socialRevenue || 0 }}<span class="unit color2"></span></div>
<div class="name color2">患者贡献收入</div> <div class="name color2">医保收入</div>
<div class="text">日均{{ (data.vipRevenue / averageNum).toFixed(2) || 0 }}</div> <div class="text">日均{{ (data.socialRevenue / averageNum).toFixed(2) || 0 }}</div>
<div class="text"><span>本金0.00&nbsp;&nbsp;赠金0.00</span></div> <div class="text"><span>本金0.00&nbsp;&nbsp;赠金0.00</span></div>
</div> </div>
<img class="image" src="/static/images/overView/3.png" alt=""> <img class="image" src="/static/images/overView/3.png" alt="">
</div> </div>
<div class="revenue-content-item"> <div class="revenue-content-item">
<div class="revenue-content-item-text"> <div class="revenue-content-item-text">
<div class="num">{{ data.vipOrderCount || 0 }}<span class="unit color3"></span></div> <div class="num">{{ data.socialOrderCount || 0 }}<span class="unit color3"></span></div>
<div class="name color3">患者消费人次</div> <div class="name color3">医保消费人次</div>
<div class="text">日均{{ (data.vipOrderCount / averageNum).toFixed(0) || 0 }}</div> <div class="text">日均{{ (data.socialOrderCount / averageNum).toFixed(0) || 0 }}</div>
</div> </div>
<img class="image" src="/static/images/overView/4.png" alt=""> <img class="image" src="/static/images/overView/4.png" alt="">
</div> </div>

View File

@ -17,9 +17,6 @@
<el-tab-pane label="收费明细" name="fourth"> <el-tab-pane label="收费明细" name="fourth">
<ChargeDetail></ChargeDetail> <ChargeDetail></ChargeDetail>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="收费分类统计" name="fifth">
<Retail></Retail>
</el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>