Merge branch 'main' of ssh://git.jizhiweb.cn:2222/clinic-v2/web
This commit is contained in:
commit
4cd71ef10c
|
|
@ -6,6 +6,7 @@ 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";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const wsStore = useWsStore();
|
const wsStore = useWsStore();
|
||||||
const isReading = ref(false)
|
const isReading = ref(false)
|
||||||
|
|
@ -13,7 +14,7 @@ const socialCard: any = defineModel();
|
||||||
const ReadSocialCard = async (readType: string) => {
|
const ReadSocialCard = async (readType: string) => {
|
||||||
socialCard.value.lastUse = "cardPay"
|
socialCard.value.lastUse = "cardPay"
|
||||||
isReading.value = true;
|
isReading.value = true;
|
||||||
let config_db: any = await post('common/config/getall');
|
let config_db: any = await post(API.Common.Config.GetAll);
|
||||||
let config: any = {}
|
let config: any = {}
|
||||||
config.ACCESS_KEY = config_db.social_ACCESS_KEY;
|
config.ACCESS_KEY = config_db.social_ACCESS_KEY;
|
||||||
config.SECRETKEY = config_db.social_SECRETKEY;
|
config.SECRETKEY = config_db.social_SECRETKEY;
|
||||||
|
|
@ -63,7 +64,7 @@ const reciceMessage = (response: Response) => {
|
||||||
getInfoFor1101(params)
|
getInfoFor1101(params)
|
||||||
}
|
}
|
||||||
const getInfoFor1101 = (params: any) => {
|
const getInfoFor1101 = (params: any) => {
|
||||||
post("social/person/getCustomSocialInfo", {data: params}).then((res: any) => {
|
post(API.Social.Person.GetCustomSocialInfo, {data: params}).then((res: any) => {
|
||||||
socialCard.value.data = res;
|
socialCard.value.data = res;
|
||||||
socialCard.value.mdtrtCertType = res.mdtrtCertType;
|
socialCard.value.mdtrtCertType = res.mdtrtCertType;
|
||||||
socialCard.value.mdtrtCertNo = res.mdtrtCertNo;
|
socialCard.value.mdtrtCertNo = res.mdtrtCertNo;
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,7 @@ import {formatListTime, getCurrentDate, getEndOfDay, getToday} from "@/utils/dat
|
||||||
import {Search, Calendar} from "@element-plus/icons-vue";
|
import {Search, Calendar} from "@element-plus/icons-vue";
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import Edit from "@/components/registration/Edit.vue";
|
import Edit from "@/components/registration/Edit.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const curItem = ref<any>({});
|
const curItem = ref<any>({});
|
||||||
const emit = defineEmits(['clickItem', 'getStatus'])
|
const emit = defineEmits(['clickItem', 'getStatus'])
|
||||||
|
|
@ -119,7 +120,7 @@ const init = async () => {
|
||||||
query.value.endTime = getEndOfDay(selectedDate.value[1])
|
query.value.endTime = getEndOfDay(selectedDate.value[1])
|
||||||
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(API.Charge.Order.ListWithDetail, {query: query.value}, {catch_error: true})
|
||||||
ChargeQueueList.value = data.list
|
ChargeQueueList.value = data.list
|
||||||
} catch {
|
} catch {
|
||||||
ChargeQueueList.value = []
|
ChargeQueueList.value = []
|
||||||
|
|
@ -162,7 +163,7 @@ const tab = (item: any) => {
|
||||||
init()
|
init()
|
||||||
}
|
}
|
||||||
const getTipCount = () => {
|
const getTipCount = () => {
|
||||||
post('statistics/getTipCount', {
|
post(API.Statistics.GetQueueCount, {
|
||||||
beginTime: query.value.beginTime,
|
beginTime: query.value.beginTime,
|
||||||
endTime: query.value.endTime
|
endTime: query.value.endTime
|
||||||
}).then((res: any) => {
|
}).then((res: any) => {
|
||||||
|
|
|
||||||
|
|
@ -30,19 +30,20 @@ import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import {getEndOfDay} from "@/utils/dateUtils.ts";
|
import {getEndOfDay} from "@/utils/dateUtils.ts";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const is_show = ref(false);
|
const is_show = ref(false);
|
||||||
const init = async () => {
|
const init = async () => {
|
||||||
is_show.value = true
|
is_show.value = true
|
||||||
try {
|
try {
|
||||||
let data: any = await post(apiConfig.RegistrationList, {
|
let data: any = await post(API.Patient.Registration.List, {
|
||||||
query: {
|
query: {
|
||||||
status: 1,
|
status: 1,
|
||||||
beginTime: new Date(),
|
beginTime: new Date(),
|
||||||
endTime: getEndOfDay(new Date())
|
endTime: getEndOfDay(new Date())
|
||||||
}
|
}
|
||||||
}, {catch_error: true});
|
}, {catch_error: true});
|
||||||
post('registration/changeStatus', {id: data.list[0].id, status: 2}).then((res: any) => {
|
post(API.Patient.Registration.ChangeStatus, {id: data.list[0].id, status: 2}).then((res: any) => {
|
||||||
registerId.value = res.id
|
registerId.value = res.id
|
||||||
patientId.value = res.patientInfoId
|
patientId.value = res.patientInfoId
|
||||||
})
|
})
|
||||||
|
|
@ -50,7 +51,7 @@ const init = async () => {
|
||||||
is_show.value = false
|
is_show.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const diagnosisSearchApi = "social/diagnose/search"
|
const diagnosisSearchApi = API.Social.Diagnose.Search
|
||||||
|
|
||||||
interface ShowConfig {
|
interface ShowConfig {
|
||||||
label: string;
|
label: string;
|
||||||
|
|
@ -84,7 +85,7 @@ const save = () => {
|
||||||
itemList: [],
|
itemList: [],
|
||||||
goodsList: [],
|
goodsList: [],
|
||||||
}
|
}
|
||||||
post('medical/record/save', {data: data}).then((res: any) => {
|
post(API.Diagnosis.Base.Save, {data: data}).then((res: any) => {
|
||||||
ElMessage.success("快速接诊成功")
|
ElMessage.success("快速接诊成功")
|
||||||
is_show.value = false
|
is_show.value = false
|
||||||
emit('close')
|
emit('close')
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ import {medTypeJson, priceBtnList} from "@/assets/config/constants.ts"
|
||||||
import {useWsStore} from "@/stores/wsStore.ts";
|
import {useWsStore} from "@/stores/wsStore.ts";
|
||||||
import PersonalPayment from "@/components/charge/PersonalPayment.vue";
|
import PersonalPayment from "@/components/charge/PersonalPayment.vue";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const wsStore = useWsStore();
|
const wsStore = useWsStore();
|
||||||
const socialCard = ref<any>({
|
const socialCard = ref<any>({
|
||||||
|
|
@ -91,9 +92,9 @@ const init = async (code: any, psnNo: any) => {
|
||||||
selectedIndex.value = 0
|
selectedIndex.value = 0
|
||||||
payType.value = 1
|
payType.value = 1
|
||||||
}
|
}
|
||||||
retailOrder.value = await post("charge/getByCode", {code: code});
|
retailOrder.value = await post(API.Charge.Order.GetByCode, {code: code});
|
||||||
if (psnNo != null) {
|
if (psnNo != null) {
|
||||||
let result: any = await post("social/person/getSocialInfoByPsnNo", {psnNo: psnNo});
|
let result: any = await post(API.Social.Person.GetSocialInfoByPsnNo, {psnNo: psnNo});
|
||||||
if (result) {
|
if (result) {
|
||||||
socialCard.value.data = result;
|
socialCard.value.data = result;
|
||||||
socialCard.value.mdtrtCertType = result.mdtrtCertType;
|
socialCard.value.mdtrtCertType = result.mdtrtCertType;
|
||||||
|
|
@ -126,7 +127,7 @@ const completeSettlement = () => {
|
||||||
} else {
|
} else {
|
||||||
//其他结算
|
//其他结算
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
post('charge/completeOrder', {
|
post(API.Charge.Order.Complete, {
|
||||||
id: retailOrder.value.id,
|
id: retailOrder.value.id,
|
||||||
payType: payType.value
|
payType: payType.value
|
||||||
}, {catch_error: true}).then((res: any) => {
|
}, {catch_error: true}).then((res: any) => {
|
||||||
|
|
@ -175,9 +176,9 @@ const socialSettlement = () => {
|
||||||
insutype: socialCard.value.payInfo.selfpay_prop_type,
|
insutype: socialCard.value.payInfo.selfpay_prop_type,
|
||||||
changeOrderCode: retailOrder.value.code,
|
changeOrderCode: retailOrder.value.code,
|
||||||
}
|
}
|
||||||
post("charge/uploadCostDetails", {changeOrderCode: retailOrder.value.code}).then((res: any) => {
|
post(API.Charge.Social.Upload, {changeOrderCode: retailOrder.value.code}).then((res: any) => {
|
||||||
//预结算
|
//预结算
|
||||||
post("charge/socialPrePay", {...params}).then((res: any) => {
|
post(API.Charge.Social.PrePay, {...params}).then((res: any) => {
|
||||||
openPsnPayment(res, params)
|
openPsnPayment(res, params)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -197,6 +197,7 @@ import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import {post} from "@/utils/request";
|
import {post} from "@/utils/request";
|
||||||
import {Right} from "@element-plus/icons-vue";
|
import {Right} from "@element-plus/icons-vue";
|
||||||
import {onMounted, ref} from "vue";
|
import {onMounted, ref} from "vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
|
|
||||||
let logout = function () {
|
let logout = function () {
|
||||||
|
|
@ -211,7 +212,7 @@ let logout = function () {
|
||||||
)
|
)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
localStorage.removeItem('token')
|
localStorage.removeItem('token')
|
||||||
post(apiConfig.signOut).then((res: any) => {
|
post(API.Common.Sign.SignOut).then((res: any) => {
|
||||||
useRouter().push("/manager/login")
|
useRouter().push("/manager/login")
|
||||||
})
|
})
|
||||||
ElMessage({
|
ElMessage({
|
||||||
|
|
@ -228,7 +229,7 @@ onMounted(() => {
|
||||||
})
|
})
|
||||||
const username = ref<any>('')
|
const username = ref<any>('')
|
||||||
const getInfo = () => {
|
const getInfo = () => {
|
||||||
post(apiConfig.managerUserVerify).then((res: any) => {
|
post(API.Common.ManagerUser.Verify).then((res: any) => {
|
||||||
username.value = res.username
|
username.value = res.username
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,16 +45,16 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="使用方法" width="200">
|
<el-table-column label="使用方法" width="200">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-input v-model="usage" placeholder="请输入使用方法" style="width: 100px"></el-input>
|
|
||||||
<el-popover
|
<el-popover
|
||||||
placement="bottom"
|
placement="bottom"
|
||||||
title="Title"
|
title=""
|
||||||
:width="200"
|
:width="200"
|
||||||
trigger="click"
|
trigger="click"
|
||||||
>
|
>
|
||||||
<template #default>
|
<template #reference>
|
||||||
<Usage></Usage>
|
<el-input v-model="usage" placeholder="使用方法" style="width: 100px"></el-input>
|
||||||
</template>
|
</template>
|
||||||
|
<Usage :usageObj="usageObj"></Usage>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -132,7 +132,8 @@ import {post} from "@/utils/request.ts";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
import {Delete} from "@element-plus/icons-vue";
|
import {Delete} from "@element-plus/icons-vue";
|
||||||
import Usage from "./goodsDetail/Usage.vue"
|
import Usage from "./goodsDetail/Usage.vue"
|
||||||
import usageList from "@/assets/config/directory/drugMedcWayCode.json"
|
import usageObj from "@/assets/config/directory/drugMedcWayCode.json"
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
status: {
|
status: {
|
||||||
|
|
@ -244,7 +245,7 @@ const focus = (e: any) => {
|
||||||
const hilistInfo = ref<any>({})
|
const hilistInfo = ref<any>({})
|
||||||
const getHilistInfo = (item: any) => {
|
const getHilistInfo = (item: any) => {
|
||||||
if (item.hilistCode != null) {
|
if (item.hilistCode != null) {
|
||||||
post("social/directory/getByCode", {code: item.hilistCode}).then((res: any) => {
|
post(API.Social.Directory.GetByCode, {code: item.hilistCode}).then((res: any) => {
|
||||||
if (!res) {
|
if (!res) {
|
||||||
hilistInfo.value = {}
|
hilistInfo.value = {}
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,20 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import {defineProps, onMounted} from "vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
usageObj: {
|
||||||
|
type: Object,
|
||||||
|
default: () => []
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>11111111</div>
|
<div v-for="(item, index) in Object.entries(props.usageObj)" :key="index">
|
||||||
|
<div class="item">
|
||||||
|
<div class="item-title">{{ item }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ import {post} from "@/utils/request.ts";
|
||||||
import chrgitm_lv from "@/assets/config/directory/chrgitmLv.json"
|
import chrgitm_lv from "@/assets/config/directory/chrgitmLv.json"
|
||||||
import {ElMessage} from "element-plus"
|
import {ElMessage} from "element-plus"
|
||||||
import {Delete} from "@element-plus/icons-vue";
|
import {Delete} from "@element-plus/icons-vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
status: {
|
status: {
|
||||||
|
|
@ -159,7 +160,7 @@ const popoverRef = ref<any>(null);
|
||||||
const itemInfo = ref<any>({});
|
const itemInfo = ref<any>({});
|
||||||
const show = (item: any) => {
|
const show = (item: any) => {
|
||||||
if (!item.itemSocialCode) return
|
if (!item.itemSocialCode) return
|
||||||
post('social/directory/getItemByCode', {code: item.itemSocialCode}).then((res: any) => {
|
post(API.Social.Directory.GetItemByCode, {code: item.itemSocialCode}).then((res: any) => {
|
||||||
itemInfo.value = res
|
itemInfo.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import {onMounted, onUnmounted, ref} from "vue";
|
||||||
import * as echarts from "echarts";
|
import * as echarts from "echarts";
|
||||||
import {getThisWeek} from "@/utils/dateUtils.ts";
|
import {getThisWeek} from "@/utils/dateUtils.ts";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
const echart = ref<HTMLElement | null>(null)
|
const echart = ref<HTMLElement | null>(null)
|
||||||
let myChart: echarts.ECharts | null = null;
|
let myChart: echarts.ECharts | null = null;
|
||||||
onMounted(()=>{
|
onMounted(()=>{
|
||||||
|
|
@ -22,7 +23,7 @@ const handleResize = () => {
|
||||||
};
|
};
|
||||||
const getPersonPayOverview = () => {
|
const getPersonPayOverview = () => {
|
||||||
const thisWeek = getThisWeek();
|
const thisWeek = getThisWeek();
|
||||||
post("statistics/getPersonPayOverview", {beginTime: thisWeek.start, endTime: thisWeek.end}).then((res: any) => {
|
post(API.Statistics.GetPayOverview, {beginTime: thisWeek.start, endTime: thisWeek.end}).then((res: any) => {
|
||||||
dateList.value = res.dateList
|
dateList.value = res.dateList
|
||||||
commonData.value = res.commonPrice
|
commonData.value = res.commonPrice
|
||||||
initEcharts(dateList.value, vipData.value, commonData.value)
|
initEcharts(dateList.value, vipData.value, commonData.value)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import Panel from "@/components/common/Panel.vue";
|
||||||
import InventoryWarnDetail from "@/components/home/index/Dialog/InventoryWarnDetail.vue";
|
import InventoryWarnDetail from "@/components/home/index/Dialog/InventoryWarnDetail.vue";
|
||||||
import {nextTick, onMounted, ref} from "vue";
|
import {nextTick, onMounted, ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getInventoryWarning()
|
getInventoryWarning()
|
||||||
|
|
@ -16,7 +17,7 @@ const openInventoryWarnDetail = () => {
|
||||||
|
|
||||||
}
|
}
|
||||||
const getInventoryWarning = () => {
|
const getInventoryWarning = () => {
|
||||||
post("statistics/numberEarlyWarning", {pageNum: 1, pageSize: 20}).then((res: any) => {
|
post(API.Statistics.NumberEarlyWarning, {pageNum: 1, pageSize: 20}).then((res: any) => {
|
||||||
inventoryWarnList.value = res.list.slice(0, 4)
|
inventoryWarnList.value = res.list.slice(0, 4)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import Panel from "@/components/common/Panel.vue";
|
||||||
import {onMounted, ref} from "vue";
|
import {onMounted, ref} from "vue";
|
||||||
import {formatDateArray, getEndOfDay, 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";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getRevenueOverview()
|
getRevenueOverview()
|
||||||
|
|
@ -55,7 +56,7 @@ const getDateRange = () => {
|
||||||
}
|
}
|
||||||
const getRevenueOverview = () => {
|
const getRevenueOverview = () => {
|
||||||
let date=getDateRange()
|
let date=getDateRange()
|
||||||
post("statistics/getRevenueOverview", {
|
post(API.Statistics.GetRevenueOverview, {
|
||||||
beginTime: date.begin,
|
beginTime: date.begin,
|
||||||
endTime: date.end}).then((res: any) => {
|
endTime: date.end}).then((res: any) => {
|
||||||
if (res.payTypeRevenue.length === 0) return
|
if (res.payTypeRevenue.length === 0) return
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import Panel from "@/components/common/Panel.vue";
|
||||||
import {nextTick, onMounted, ref} from "vue";
|
import {nextTick, onMounted, ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import ExpireWarnDetail from "@/components/home/index/Dialog/ExpireWarnDetail.vue";
|
import ExpireWarnDetail from "@/components/home/index/Dialog/ExpireWarnDetail.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const expireWarnDetailRef = ref()
|
const expireWarnDetailRef = ref()
|
||||||
const openExpireWarnDetail = () => {
|
const openExpireWarnDetail = () => {
|
||||||
|
|
@ -18,7 +19,7 @@ const expireDateWarningListSrc = ref<any>([]);
|
||||||
const expireDateWarningList = ref<any>([]);
|
const expireDateWarningList = ref<any>([]);
|
||||||
|
|
||||||
const getExpiryDateWarning = () => {
|
const getExpiryDateWarning = () => {
|
||||||
post("statistics/expiryDateWarning", {pageNum: 1, pageSize: 20}).then((res: any) => {
|
post(API.Statistics.ExpiryDateWarning, {pageNum: 1, pageSize: 20}).then((res: any) => {
|
||||||
expireDateWarningList.value = res.list.slice(0, 4)
|
expireDateWarningList.value = res.list.slice(0, 4)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const state = ref([])
|
const state = ref([])
|
||||||
const options = ref([])
|
const options = ref([])
|
||||||
const selectRef = ref();
|
const selectRef = ref();
|
||||||
const querySearchAsync = (queryString: string, cb: (arg: any) => void) => {
|
const querySearchAsync = (queryString: string, cb: (arg: any) => void) => {
|
||||||
post("goods/goods/search", {keyword: queryString}).then((res: any) => {
|
post(API.Goods.Base.Search, {keyword: queryString}).then((res: any) => {
|
||||||
options.value = res;
|
options.value = res;
|
||||||
let list = res;
|
let list = res;
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
|
|
||||||
|
|
@ -139,11 +139,11 @@
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, ref, unref} from "vue";
|
import {ref} from "vue";
|
||||||
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const isShow = ref<any>(false)
|
const isShow = ref<any>(false)
|
||||||
const emit = defineEmits(['close'])
|
const emit = defineEmits(['close'])
|
||||||
|
|
@ -192,7 +192,7 @@ const findIndexForTableList = (goodId: any) => {
|
||||||
}
|
}
|
||||||
const goodsSelectCallBack = (inventory: any) => {
|
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) => {
|
post(API.Inventory.Goods.GetByGoodsId, {goodsId: inventory.goodId,isZero:false}).then((res: any) => {
|
||||||
inventory.batchList = res.inventoryGoodsList
|
inventory.batchList = res.inventoryGoodsList
|
||||||
inventory.minPackagingUnit = res.minPackagingUnit
|
inventory.minPackagingUnit = res.minPackagingUnit
|
||||||
inventory.trdnFlag = res.trdnFlag
|
inventory.trdnFlag = res.trdnFlag
|
||||||
|
|
@ -271,7 +271,7 @@ const changeOutNumber = (row: any) => {
|
||||||
row.totalFragmentNumber = totalOutFragmentNumber;
|
row.totalFragmentNumber = totalOutFragmentNumber;
|
||||||
}
|
}
|
||||||
const save = () => {
|
const save = () => {
|
||||||
post("inventory/apply/create", {useInfo: formData.value, data: tableList.value}).then((res: any) => {
|
post(API.Inventory.Apply.Create, {useInfo: formData.value, data: tableList.value}).then((res: any) => {
|
||||||
exit()
|
exit()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -283,13 +283,13 @@ const init = () => {
|
||||||
getUserInfo()
|
getUserInfo()
|
||||||
}
|
}
|
||||||
const getUserInfo = () => {
|
const getUserInfo = () => {
|
||||||
post("manager/user/verify", null).then((res: any) => {
|
post(API.Common.ManagerUser.Verify, null).then((res: any) => {
|
||||||
formData.value.useUserId = res.id;
|
formData.value.useUserId = res.id;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const managerUserList: any = ref([])
|
const managerUserList: any = ref([])
|
||||||
const getManagerUserList = () => {
|
const getManagerUserList = () => {
|
||||||
post("manager/user/list", {}).then((res: any) => {
|
post(API.Common.ManagerUser.List, {}).then((res: any) => {
|
||||||
managerUserList.value = res
|
managerUserList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,7 @@ import {onMounted, ref, defineProps} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
|
|
@ -207,7 +208,7 @@ const addLine = (row: any) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const getUserInfo = () => {
|
const getUserInfo = () => {
|
||||||
post("manager/user/verify").then((res: any) => {
|
post(API.Common.ManagerUser.Verify).then((res: any) => {
|
||||||
formData.value.useUserId = res.id;
|
formData.value.useUserId = res.id;
|
||||||
formData.value.name = res.name;
|
formData.value.name = res.name;
|
||||||
formData.value.username = res.username;
|
formData.value.username = res.username;
|
||||||
|
|
@ -215,7 +216,7 @@ const getUserInfo = () => {
|
||||||
}
|
}
|
||||||
const detail = (id: any) => {
|
const detail = (id: any) => {
|
||||||
isShow.value = true
|
isShow.value = true
|
||||||
post("inventory/apply/getApplyDetail", {id}).then((res: any) => {
|
post(API.Inventory.Apply.GetDetail, {id}).then((res: any) => {
|
||||||
tableList.value = JSON.parse(res);
|
tableList.value = JSON.parse(res);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,7 @@ import {ref} from "vue";
|
||||||
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const form = ref<any>({
|
const form = ref<any>({
|
||||||
remark: ""
|
remark: ""
|
||||||
|
|
@ -237,7 +238,7 @@ let setChange = function (row: any) {
|
||||||
row.change.fragmentNumber = diff % row.minPackagingNumber
|
row.change.fragmentNumber = diff % row.minPackagingNumber
|
||||||
}
|
}
|
||||||
let addLine = (row: any) => {
|
let addLine = (row: any) => {
|
||||||
post("inventory/goods/getListByIds", {idList: row.childIdList}).then((list: any) => {
|
post(API.Inventory.Goods.ListByIds, {idList: row.childIdList}).then((list: any) => {
|
||||||
let children = [];
|
let children = [];
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
let inventoryGoods = list[i];
|
let inventoryGoods = list[i];
|
||||||
|
|
@ -271,7 +272,7 @@ let addLine = (row: any) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
let addRow = (goodsId: number) => {
|
let addRow = (goodsId: number) => {
|
||||||
post("inventory/goods/getByGoodsId", {goodsId, isZero: true}).then((res: any) => {
|
post(API.Inventory.Goods.GetByGoodsId, {goodsId, isZero: true}).then((res: any) => {
|
||||||
let check: Check = {
|
let check: Check = {
|
||||||
goodsId: res.id,
|
goodsId: res.id,
|
||||||
name: res.name,
|
name: res.name,
|
||||||
|
|
@ -315,7 +316,7 @@ let addRow = (goodsId: number) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
let save = () => {
|
let save = () => {
|
||||||
post("inventory/check/save", {list: list.value, remark: form.value.remark,checkUserId: form.value.checkUserId}).then((res: any) => {
|
post(API.Inventory.Check.Save, {list: list.value, remark: form.value.remark,checkUserId: form.value.checkUserId}).then((res: any) => {
|
||||||
ElMessage.success('保存成功')
|
ElMessage.success('保存成功')
|
||||||
exit()
|
exit()
|
||||||
})
|
})
|
||||||
|
|
@ -339,12 +340,12 @@ defineExpose({init})
|
||||||
|
|
||||||
const managerUserList: any = ref([])
|
const managerUserList: any = ref([])
|
||||||
const getManagerUserList = () => {
|
const getManagerUserList = () => {
|
||||||
post("manager/user/list", {}).then((res: any) => {
|
post(API.Common.ManagerUser.List, {}).then((res: any) => {
|
||||||
managerUserList.value = res
|
managerUserList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const getUserInfo = () => {
|
const getUserInfo = () => {
|
||||||
post("manager/user/verify", null).then((res: any) => {
|
post(API.Common.ManagerUser.Verify, null).then((res: any) => {
|
||||||
form.value.useUserId = res.id;
|
form.value.useUserId = res.id;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,7 @@ import {onMounted,defineProps} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
|
|
@ -205,7 +206,7 @@ let exit = () => {
|
||||||
}
|
}
|
||||||
const detail = (id: any) => {
|
const detail = (id: any) => {
|
||||||
isShow.value = true
|
isShow.value = true
|
||||||
post("inventory/check/getCheckDetail",{id}).then((res: any) => {
|
post(API.Inventory.Check.GetDetail,{id}).then((res: any) => {
|
||||||
list.value = JSON.parse(res);
|
list.value = JSON.parse(res);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ import {post} from "@/utils/request.ts";
|
||||||
import {ElMessageBox} from "element-plus";
|
import {ElMessageBox} from "element-plus";
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
import {ArrowUpBold, ArrowDownBold, Delete, Edit} from "@element-plus/icons-vue";
|
import {ArrowUpBold, ArrowDownBold, Delete, Edit} from "@element-plus/icons-vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
|
|
@ -61,7 +62,7 @@ interface CateItem {
|
||||||
|
|
||||||
const cateList = ref<CateItem[]>([]);
|
const cateList = ref<CateItem[]>([]);
|
||||||
const getCateList = () => {
|
const getCateList = () => {
|
||||||
post("goods/cate/list", {type: props.type}).then((res: any) => {
|
post(API.Goods.Cate.List, {type: props.type}).then((res: any) => {
|
||||||
cateList.value = res
|
cateList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -88,7 +89,7 @@ const close = () => {
|
||||||
const isShow = ref<any>(false)
|
const isShow = ref<any>(false)
|
||||||
const getCountByCateId = (cateId: any) => {
|
const getCountByCateId = (cateId: any) => {
|
||||||
let count = 0;
|
let count = 0;
|
||||||
post("goods/goods/getByCateId", {cateId: cateId}).then((res: any) => {
|
post(API.Goods.Base.GetByCateId, {cateId: cateId}).then((res: any) => {
|
||||||
count = res
|
count = res
|
||||||
ElMessageBox.confirm(
|
ElMessageBox.confirm(
|
||||||
`有${count}个西药属于该二级分类,删除后将一同清空西药的分类。是否确定删除?`,
|
`有${count}个西药属于该二级分类,删除后将一同清空西药的分类。是否确定删除?`,
|
||||||
|
|
@ -106,7 +107,7 @@ const getCountByCateId = (cateId: any) => {
|
||||||
|
|
||||||
}
|
}
|
||||||
const del = async (id: any) => {
|
const del = async (id: any) => {
|
||||||
await post("goods/cate/del", {id})
|
await post(API.Goods.Cate.Del, {id})
|
||||||
getCateList()
|
getCateList()
|
||||||
}
|
}
|
||||||
const saveDo = async () => {
|
const saveDo = async () => {
|
||||||
|
|
@ -118,7 +119,7 @@ const saveDo = async () => {
|
||||||
|
|
||||||
})
|
})
|
||||||
if (cateList.value.length === 0) return
|
if (cateList.value.length === 0) return
|
||||||
await post("goods/cate/save", {cateList: cateList.value})
|
await post(API.Goods.Cate.Save, {cateList: cateList.value})
|
||||||
getCateList()
|
getCateList()
|
||||||
}
|
}
|
||||||
const init = () => {
|
const init = () => {
|
||||||
|
|
@ -135,10 +136,6 @@ const removeItemByIndex = (index: number) => {
|
||||||
cateList.value.splice(index, 1);
|
cateList.value.splice(index, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// const save = async ()=>{
|
|
||||||
// await post("goods/cate/save",cateList.value)
|
|
||||||
// getCateList()
|
|
||||||
// }
|
|
||||||
|
|
||||||
const add = () => {
|
const add = () => {
|
||||||
const newCate: CateItem = {
|
const newCate: CateItem = {
|
||||||
|
|
|
||||||
|
|
@ -454,6 +454,7 @@ import Divider from "@/components/Divider.vue";
|
||||||
import UnitSelector from "@/components/UnitSelector.vue";
|
import UnitSelector from "@/components/UnitSelector.vue";
|
||||||
import SocialInfo from "@/components/inventory/goods/SocialInfo.vue";
|
import SocialInfo from "@/components/inventory/goods/SocialInfo.vue";
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
|
|
||||||
let _type = ref(0);
|
let _type = ref(0);
|
||||||
|
|
@ -624,7 +625,7 @@ 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) {
|
||||||
post("goods/goods/get", {id: id}).then((res: any) => {
|
post(API.Goods.Base.Get, {id: id}).then((res: any) => {
|
||||||
edit_data.value = res;
|
edit_data.value = res;
|
||||||
edit_data.value.tags = edit_data.value.tags ? edit_data.value.tags.split(",") : null;
|
edit_data.value.tags = edit_data.value.tags ? edit_data.value.tags.split(",") : null;
|
||||||
edit_data.value.extra = JSON.parse(edit_data.value.extra);
|
edit_data.value.extra = JSON.parse(edit_data.value.extra);
|
||||||
|
|
@ -700,7 +701,7 @@ let save = async (isClose: Boolean) => {
|
||||||
data.tags = data.tags ? data.tags.join(",") : null;
|
data.tags = data.tags ? data.tags.join(",") : null;
|
||||||
data.idCode = idCodeList.value.join(",");
|
data.idCode = idCodeList.value.join(",");
|
||||||
data.type = _type.value;
|
data.type = _type.value;
|
||||||
post("goods/goods/save", data).then((res: any) => {
|
post(API.Goods.Base.Save, data).then((res: any) => {
|
||||||
ElMessage.success('保存成功')
|
ElMessage.success('保存成功')
|
||||||
if (isClose) {
|
if (isClose) {
|
||||||
//关闭该页面
|
//关闭该页面
|
||||||
|
|
@ -721,7 +722,7 @@ let save = async (isClose: Boolean) => {
|
||||||
//获取分类列表
|
//获取分类列表
|
||||||
const cate_list: any = ref([]);
|
const cate_list: any = ref([]);
|
||||||
const getCateList = () => {
|
const getCateList = () => {
|
||||||
post("goods/cate/list", {type: _type.value}).then((res: any) => {
|
post(API.Goods.Cate.List, {type: _type.value}).then((res: any) => {
|
||||||
cate_list.value = res
|
cate_list.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -758,7 +759,7 @@ const returnInit = () => {
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
post("goods/goods/returnInit", {id: edit_data.value.id})
|
post(API.Goods.Base.ReturnInit, {id: edit_data.value.id})
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -791,7 +792,7 @@ const formRef = ref()
|
||||||
const hilistInfo = ref<any>({})
|
const hilistInfo = ref<any>({})
|
||||||
const getHilistInfo = () => {
|
const getHilistInfo = () => {
|
||||||
if (edit_data.value.hilistCode) {
|
if (edit_data.value.hilistCode) {
|
||||||
post("social/directory/getByCode", {code: edit_data.value.hilistCode}).then((res: any) => {
|
post(API.Social.Directory.GetByCode, {code: edit_data.value.hilistCode}).then((res: any) => {
|
||||||
hilistInfo.value = res
|
hilistInfo.value = res
|
||||||
type.value = res.type
|
type.value = res.type
|
||||||
})
|
})
|
||||||
|
|
@ -824,7 +825,7 @@ const disableSale = () => {
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
post(apiConfig.GoodsDisableSale, {id: edit_data.value.id}).then((res: any) => {
|
post(API.Goods.Base.DisableSale, {id: edit_data.value.id}).then((res: any) => {
|
||||||
ElMessage.success("下架成功")
|
ElMessage.success("下架成功")
|
||||||
exit()
|
exit()
|
||||||
})
|
})
|
||||||
|
|
@ -839,7 +840,7 @@ const enableSale = () => {
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
post(apiConfig.GoodsEnableSale, {id: edit_data.value.id}).then((res: any) => {
|
post(API.Goods.Base.EnableSale, {id: edit_data.value.id}).then((res: any) => {
|
||||||
ElMessage.success("启用成功")
|
ElMessage.success("启用成功")
|
||||||
exit()
|
exit()
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -30,12 +30,13 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
const packagingUnit = ref();
|
const packagingUnit = ref();
|
||||||
const minPackagingUnit = ref();
|
const minPackagingUnit = ref();
|
||||||
const show = ref(false)
|
const show = ref(false)
|
||||||
const list = ref()
|
const list = ref()
|
||||||
const init = (goodId: any) => {
|
const init = (goodId: any) => {
|
||||||
post("inventory/goods/getListByGoodsId", {goodsId: goodId}).then((res) => {
|
post(API.Inventory.Goods.ListByGoodsId, {goodsId: goodId}).then((res) => {
|
||||||
list.value = res
|
list.value = res
|
||||||
if (list.value.length == 0) return
|
if (list.value.length == 0) return
|
||||||
packagingUnit.value = list.value[0].packagingUnit
|
packagingUnit.value = list.value[0].packagingUnit
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {onMounted, ref, defineProps} from "vue";
|
import {onMounted, ref, defineProps} from "vue";
|
||||||
import {Minus, Plus, Setting} from "@element-plus/icons-vue";
|
import {Minus, Plus, Setting} from "@element-plus/icons-vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
|
|
@ -126,7 +127,7 @@ onMounted(() => {
|
||||||
})
|
})
|
||||||
const init = () => {
|
const init = () => {
|
||||||
if (!props.id) return
|
if (!props.id) return
|
||||||
post("inventory/goods/getInventoryStatistics", {
|
post(API.Inventory.Goods.Statistics, {
|
||||||
goodsId: props.id,
|
goodsId: props.id,
|
||||||
startDate: formatDate(dateList.value[0]),
|
startDate: formatDate(dateList.value[0]),
|
||||||
endDate: formatDate(dateList.value[1])
|
endDate: formatDate(dateList.value[1])
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@
|
||||||
import {onMounted, ref, defineProps} from "vue";
|
import {onMounted, ref, defineProps} from "vue";
|
||||||
import {post} from '@/utils/request.ts'
|
import {post} from '@/utils/request.ts'
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
let current_search_data: any = null;
|
let current_search_data: any = null;
|
||||||
let keyword = ref('');
|
let keyword = ref('');
|
||||||
|
|
@ -146,7 +147,7 @@ let confirm = () => {
|
||||||
let isloading = ref(false);
|
let isloading = ref(false);
|
||||||
let search_social = () => {
|
let search_social = () => {
|
||||||
isloading.value = true;
|
isloading.value = true;
|
||||||
post("social/directory/search", {
|
post(API.Social.Directory.Search, {
|
||||||
keyword: keyword.value,
|
keyword: keyword.value,
|
||||||
produce: produce.value,
|
produce: produce.value,
|
||||||
page: current_page.value,
|
page: current_page.value,
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, ref, watch} from "vue";
|
import {onMounted, ref, watch} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
interface HilistInfo {
|
interface HilistInfo {
|
||||||
type?: number;
|
type?: number;
|
||||||
|
|
@ -61,7 +62,7 @@ const hilistCode = defineModel<string>();
|
||||||
const hilistInfo = ref<HilistInfo>({});
|
const hilistInfo = ref<HilistInfo>({});
|
||||||
const getHilistInfo = () => {
|
const getHilistInfo = () => {
|
||||||
if (hilistCode.value) {
|
if (hilistCode.value) {
|
||||||
post("social/directory/getByCode", {code: hilistCode.value}).then((res: any) => {
|
post(API.Social.Directory.GetByCode, {code: hilistCode.value}).then((res: any) => {
|
||||||
hilistInfo.value = res
|
hilistInfo.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -220,6 +220,7 @@ import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
||||||
import CheckoutDetail from "@/components/inventory/CheckoutDetail.vue";
|
import CheckoutDetail from "@/components/inventory/CheckoutDetail.vue";
|
||||||
import TraceabilityCodeInput from "@/components/inventory/purchase/TraceabilityCodeInput.vue";
|
import TraceabilityCodeInput from "@/components/inventory/purchase/TraceabilityCodeInput.vue";
|
||||||
import {Plus, Delete} from "@element-plus/icons-vue";
|
import {Plus, Delete} from "@element-plus/icons-vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const orderForm = ref()
|
const orderForm = ref()
|
||||||
const checkoutDetailRef = ref<any>(false);
|
const checkoutDetailRef = ref<any>(false);
|
||||||
|
|
@ -355,7 +356,7 @@ let confirm = async () => {
|
||||||
inventoryOrderGoodsList: JSON.parse(JSON.stringify(table_list.value))
|
inventoryOrderGoodsList: JSON.parse(JSON.stringify(table_list.value))
|
||||||
}
|
}
|
||||||
isLoading.value = true
|
isLoading.value = true
|
||||||
post("inventory/order/create", data).then((res: any) => {
|
post(API.Inventory.Order.Create, data).then((res: any) => {
|
||||||
isLoading.value = false
|
isLoading.value = false
|
||||||
exit()
|
exit()
|
||||||
})
|
})
|
||||||
|
|
@ -393,13 +394,13 @@ const getSupplierList = () => {
|
||||||
const query = {
|
const query = {
|
||||||
turn: 1
|
turn: 1
|
||||||
}
|
}
|
||||||
post("inventory/supplier/list", {query: query}).then((res: any) => {
|
post(API.Inventory.Supplier.List, {query: query}).then((res: any) => {
|
||||||
supplier_list.value = res.list
|
supplier_list.value = res.list
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const userInfo = ref<any>({})
|
const userInfo = ref<any>({})
|
||||||
const getUserInfo = () => {
|
const getUserInfo = () => {
|
||||||
post("manager/user/verify", null).then((res: any) => {
|
post(API.Common.ManagerUser.Verify, null).then((res: any) => {
|
||||||
userInfo.value = res
|
userInfo.value = res
|
||||||
inventory_order_data.value.managerUserId = res.id
|
inventory_order_data.value.managerUserId = res.id
|
||||||
})
|
})
|
||||||
|
|
@ -428,7 +429,7 @@ const init = (orderInfo: any,goodList: any) => {
|
||||||
}
|
}
|
||||||
const managerUserList: any = ref([])
|
const managerUserList: any = ref([])
|
||||||
const getManagerUserList = () => {
|
const getManagerUserList = () => {
|
||||||
post("manager/user/list", {}).then((res: any) => {
|
post(API.Common.ManagerUser.List, {}).then((res: any) => {
|
||||||
managerUserList.value = res
|
managerUserList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,7 @@ import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
import AddSupplier from "@/components/inventory/supplier/AddSupplier.vue";
|
import AddSupplier from "@/components/inventory/supplier/AddSupplier.vue";
|
||||||
import {Plus} from "@element-plus/icons-vue"
|
import {Plus} from "@element-plus/icons-vue"
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
code: {
|
code: {
|
||||||
|
|
@ -265,7 +266,7 @@ const saveGoodEdit = (row: any) => {
|
||||||
const list = [];
|
const list = [];
|
||||||
list.push(row);
|
list.push(row);
|
||||||
isLoading.value = true
|
isLoading.value = true
|
||||||
post("inventory/goods/update", {list: list})
|
post(API.Inventory.Goods.Update, {list: list})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
row.isEdit = false
|
row.isEdit = false
|
||||||
getOrderDetail()
|
getOrderDetail()
|
||||||
|
|
@ -307,7 +308,7 @@ const returnableAll = () => {
|
||||||
}
|
}
|
||||||
const returnableDo = (idList: any) => {
|
const returnableDo = (idList: any) => {
|
||||||
isLoading.value = true
|
isLoading.value = true
|
||||||
post("inventory/order/returnable", {idList: idList}).then((res) => {
|
post(API.Inventory.Order.Refund, {idList: idList}).then((res) => {
|
||||||
getOrderDetail()
|
getOrderDetail()
|
||||||
emit('updateOrderDetail')
|
emit('updateOrderDetail')
|
||||||
isLoading.value = false
|
isLoading.value = false
|
||||||
|
|
@ -315,7 +316,7 @@ const returnableDo = (idList: any) => {
|
||||||
}
|
}
|
||||||
const saveOrderEdit = () => {
|
const saveOrderEdit = () => {
|
||||||
isLoading.value = true
|
isLoading.value = true
|
||||||
post("inventory/order/update", {inventoryOrder: inventory_order_data.value}).then((res) => {
|
post(API.Inventory.Order.Update, {inventoryOrder: inventory_order_data.value}).then((res) => {
|
||||||
orderInfoIsEdit.value = false
|
orderInfoIsEdit.value = false
|
||||||
getOrderDetail()
|
getOrderDetail()
|
||||||
emit('updateOrderDetail')
|
emit('updateOrderDetail')
|
||||||
|
|
@ -365,12 +366,12 @@ const getSupplierList = () => {
|
||||||
const query = {
|
const query = {
|
||||||
turn: 1
|
turn: 1
|
||||||
}
|
}
|
||||||
post("inventory/supplier/list", {query: query}).then((res: any) => {
|
post(API.Inventory.Supplier.List, {query: query}).then((res: any) => {
|
||||||
supplier_list.value = res.list
|
supplier_list.value = res.list
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const getOrderDetail = () => {
|
const getOrderDetail = () => {
|
||||||
post("inventory/order/detail", {code: code.value}).then((res: any) => {
|
post(API.Inventory.Order.Detail, {code: code.value}).then((res: any) => {
|
||||||
inventory_order_data.value = res.inventoryOrder
|
inventory_order_data.value = res.inventoryOrder
|
||||||
table_list.value = res.inventoryOrderGoodsList
|
table_list.value = res.inventoryOrderGoodsList
|
||||||
})
|
})
|
||||||
|
|
@ -382,7 +383,7 @@ const addOneGoods = (row: any) => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
isLoading.value = true
|
isLoading.value = true
|
||||||
post("inventory/order/addOneGoods", {data: data}).then(
|
post(API.Inventory.Order.AddGoods, {data: data}).then(
|
||||||
(res: any) => {
|
(res: any) => {
|
||||||
getOrderDetail()
|
getOrderDetail()
|
||||||
emit('updateOrderDetail')
|
emit('updateOrderDetail')
|
||||||
|
|
@ -392,7 +393,7 @@ const addOneGoods = (row: any) => {
|
||||||
}
|
}
|
||||||
const managerUserList: any = ref([])
|
const managerUserList: any = ref([])
|
||||||
const getManagerUserList = () => {
|
const getManagerUserList = () => {
|
||||||
post("manager/user/list", {}).then((res: any) => {
|
post(API.Common.ManagerUser.List, {}).then((res: any) => {
|
||||||
managerUserList.value = res
|
managerUserList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ import {ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
name: null,
|
name: null,
|
||||||
|
|
@ -78,7 +79,7 @@ const save = () => {
|
||||||
errorMsg.value = '供货商名称不能为空'
|
errorMsg.value = '供货商名称不能为空'
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
post("inventory/supplier/save", {inventorySupplier: formData.value}).then((res: any) => {
|
post(API.Inventory.Supplier.Save, {inventorySupplier: formData.value}).then((res: any) => {
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ import {ref, defineEmits, defineProps} from 'vue'
|
||||||
import {ElFormItem} from "element-plus";
|
import {ElFormItem} from "element-plus";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const isExchange = defineModel()
|
const isExchange = defineModel()
|
||||||
const emit = defineEmits(['close'])
|
const emit = defineEmits(['close'])
|
||||||
|
|
@ -95,7 +96,7 @@ const reduceIntegral = () => {
|
||||||
// 如果验证通过,发送请求
|
// 如果验证通过,发送请求
|
||||||
data.value.integral = data.value.integral * -1
|
data.value.integral = data.value.integral * -1
|
||||||
data.value.vipId = props.info.id
|
data.value.vipId = props.info.id
|
||||||
post("vip/integral/add", data.value).then((res: any) => {
|
post(API.Patient.Integral.Add, data.value).then((res: any) => {
|
||||||
formDataRef.value?.resetFields();
|
formDataRef.value?.resetFields();
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@
|
||||||
import {ref, defineEmits, defineProps, onMounted} from 'vue'
|
import {ref, defineEmits, defineProps, onMounted} from 'vue'
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const isFlowingWater = defineModel()
|
const isFlowingWater = defineModel()
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
@ -80,7 +81,7 @@ const changePage = (page: any) => {
|
||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
vipId: id.value
|
vipId: id.value
|
||||||
}
|
}
|
||||||
post('vip/integral/list', {query: query}).then((res: any) => {
|
post(API.Patient.Integral.List, {query: query}).then((res: any) => {
|
||||||
tableData.value.splice(0, tableData.length, ...res.list)
|
tableData.value.splice(0, tableData.length, ...res.list)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -92,7 +93,7 @@ const init = (id: any) => {
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
vipId: id
|
vipId: id
|
||||||
}
|
}
|
||||||
post('vip/integral/list', {query: query}).then((res: any) => {
|
post(API.Patient.Base.List, {query: query}).then((res: any) => {
|
||||||
tableData.value.splice(0, tableData.length, ...res.list)
|
tableData.value.splice(0, tableData.length, ...res.list)
|
||||||
total.value = res.total_count
|
total.value = res.total_count
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -215,6 +215,7 @@ import {formatDate} from "@/utils/dateUtils.ts";
|
||||||
import CardDefault from "@/components/registration/CardDefault.vue";
|
import CardDefault from "@/components/registration/CardDefault.vue";
|
||||||
import {getKey} from "@/utils/discrotyUtil.ts";
|
import {getKey} from "@/utils/discrotyUtil.ts";
|
||||||
import insutypes from "@/assets/config/directory/insutypes.json";
|
import insutypes from "@/assets/config/directory/insutypes.json";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
|
|
||||||
const ruleFormRef = ref<FormInstance>()
|
const ruleFormRef = ref<FormInstance>()
|
||||||
|
|
@ -354,11 +355,11 @@ const submitForm = async () => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
ruleForm.value.birthday = formatDate(ruleForm.value.birthday)
|
ruleForm.value.birthday = formatDate(ruleForm.value.birthday)
|
||||||
if (ruleForm.value.id) {
|
if (ruleForm.value.id) {
|
||||||
post("vip/vip/update", {vipInfo: ruleForm.value}).then(() => {
|
post(API.Patient.Base.Update, {vipInfo: ruleForm.value}).then(() => {
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
post("vip/vip/create", {vipInfo: ruleForm.value}).then(() => {
|
post(API.Patient.Base.Create, {vipInfo: ruleForm.value}).then(() => {
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -399,14 +400,14 @@ const init = (_id: any) => {
|
||||||
ruleForm.value = {}
|
ruleForm.value = {}
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
post("vip/vip/get", {id: _id}).then((res: any) => {
|
post(API.Patient.Base.Get, {id: _id}).then((res: any) => {
|
||||||
ruleForm.value = res
|
ruleForm.value = res
|
||||||
ruleForm.value.area = JSON.parse(ruleForm.value.area)
|
ruleForm.value.area = JSON.parse(ruleForm.value.area)
|
||||||
ruleForm.value.levelId = ruleForm.value.levelId == 0 ? null : ruleForm.value.levelId
|
ruleForm.value.levelId = ruleForm.value.levelId == 0 ? null : ruleForm.value.levelId
|
||||||
ruleForm.value.certType=Number(ruleForm.value.certType)
|
ruleForm.value.certType=Number(ruleForm.value.certType)
|
||||||
ruleForm.value.nation=Number(ruleForm.value.nation)||''
|
ruleForm.value.nation=Number(ruleForm.value.nation)||''
|
||||||
if (!res.levelId) return
|
if (!res.levelId) return
|
||||||
post("vip/vipLevel/get", {levelId: res.levelId}).then((res: any) => {
|
post(API.Patient.LevelConfig.Get, {levelId: res.levelId}).then((res: any) => {
|
||||||
levelName.value = res.name
|
levelName.value = res.name
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -416,7 +417,7 @@ const init = (_id: any) => {
|
||||||
}
|
}
|
||||||
const levelList = ref<any>([])
|
const levelList = ref<any>([])
|
||||||
const getLevelConfig = () => {
|
const getLevelConfig = () => {
|
||||||
post("vip/vipLevel/list").then((res: any) => {
|
post(API.Patient.LevelConfig.List).then((res: any) => {
|
||||||
levelList.value = res
|
levelList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,18 +18,19 @@
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
import {onMounted, ref} from "vue";
|
import {onMounted, ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
const show = ref(false);
|
const show = ref(false);
|
||||||
const options = ref<any>([])
|
const options = ref<any>([])
|
||||||
const levelId = ref(0);
|
const levelId = ref(0);
|
||||||
const curVip =ref<any>({})
|
const curVip =ref<any>({})
|
||||||
const getLevelConfig = () => {
|
const getLevelConfig = () => {
|
||||||
post("vip/vipLevel/list").then((res: any) => {
|
post(API.Patient.LevelConfig.List).then((res: any) => {
|
||||||
options.value = res
|
options.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const emit = defineEmits(['close'])
|
const emit = defineEmits(['close'])
|
||||||
const save = () => {
|
const save = () => {
|
||||||
post("vip/vip/changeLevel",{vipId:curVip.value.id,levelId:levelId.value}).then((res:any)=>{
|
post(API.Patient.LevelConfig.Edit,{vipId:curVip.value.id,levelId:levelId.value}).then((res:any)=>{
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ interface ShowConfig {
|
||||||
prop: string;
|
prop: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const diagnosisSearchApi = apiConfig.SocialDiagnoseSearch
|
const diagnosisSearchApi = API.Social.Diagnose.Search
|
||||||
const diagnosisShowConfig: ShowConfig[] = [
|
const diagnosisShowConfig: ShowConfig[] = [
|
||||||
{
|
{
|
||||||
label: "诊断名称",
|
label: "诊断名称",
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import DiseaseDetails from './DiseaseDetails.vue';
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import {formatListTime} from "@/utils/dateUtils.ts";
|
import {formatListTime} from "@/utils/dateUtils.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
status: {
|
status: {
|
||||||
|
|
@ -36,7 +37,7 @@ const props = defineProps({
|
||||||
})
|
})
|
||||||
const list = ref<any>([])
|
const list = ref<any>([])
|
||||||
const init = (patientId: any) => {
|
const init = (patientId: any) => {
|
||||||
post("medical/record/listByPatient", {patientId: patientId}).then((res: any) => {
|
post(API.Diagnosis.ListByPatient, {patientId: patientId}).then((res: any) => {
|
||||||
list.value = res
|
list.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ import {formatListTime, getToday, getThisMonth, getCurrentDate, getEndOfDay} fro
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import {ElMessageBox} from "element-plus";
|
import {ElMessageBox} from "element-plus";
|
||||||
import {Calendar} from '@element-plus/icons-vue'
|
import {Calendar} from '@element-plus/icons-vue'
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const curStatus = ref(1)
|
const curStatus = ref(1)
|
||||||
const search = ref('')
|
const search = ref('')
|
||||||
|
|
@ -117,7 +118,7 @@ onUnmounted(() => {
|
||||||
const initList = async () => {
|
const initList = async () => {
|
||||||
selectedDateStr.value = setDateTip()
|
selectedDateStr.value = setDateTip()
|
||||||
try {
|
try {
|
||||||
let data: any = await post(apiConfig.RegistrationList, {
|
let data: any = await post(API.Patient.Registration.AllList, {
|
||||||
query: {
|
query: {
|
||||||
status: curStatus.value,
|
status: curStatus.value,
|
||||||
beginTime: selectedDate.value,
|
beginTime: selectedDate.value,
|
||||||
|
|
@ -144,7 +145,7 @@ const init = async () => {
|
||||||
clickLi(null)
|
clickLi(null)
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
let data: any = await post(apiConfig.RegistrationListByType, {
|
let data: any = await post(API.Patient.Registration.ListByType, {
|
||||||
query: {
|
query: {
|
||||||
status: curStatus.value,
|
status: curStatus.value,
|
||||||
beginTime: selectedDate.value,
|
beginTime: selectedDate.value,
|
||||||
|
|
@ -168,7 +169,7 @@ const init = async () => {
|
||||||
initStatusList()
|
initStatusList()
|
||||||
}
|
}
|
||||||
const initStatusList = () => {
|
const initStatusList = () => {
|
||||||
post(apiConfig.StatisticsGetTipCount, {
|
post(API.Patient.Registration.ChangeStatus, {
|
||||||
beginTime: selectedDate.value,
|
beginTime: selectedDate.value,
|
||||||
endTime: getEndOfDay(new Date(selectedDate.value))
|
endTime: getEndOfDay(new Date(selectedDate.value))
|
||||||
}).then((res: any) => {
|
}).then((res: any) => {
|
||||||
|
|
@ -192,7 +193,7 @@ const clickLi = (item: any, showBox: any = true) => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (action == "confirm") {
|
if (action == "confirm") {
|
||||||
post(apiConfig.RegistrationChangeStatus, {id: item.id, status: 2}).then((res: any) => {
|
post(API.Patient.Registration.ChangeStatus, {id: item.id, status: 2}).then((res: any) => {
|
||||||
curStatus.value = 2
|
curStatus.value = 2
|
||||||
curItem.value = res
|
curItem.value = res
|
||||||
initStatusList()
|
initStatusList()
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ 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";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const wsStore = useWsStore();
|
const wsStore = useWsStore();
|
||||||
const isReading = ref(false)
|
const isReading = ref(false)
|
||||||
|
|
@ -76,7 +77,7 @@ const getInfoFor1101 = (params: any) => {
|
||||||
duration: 500,
|
duration: 500,
|
||||||
type: 'info',
|
type: 'info',
|
||||||
});
|
});
|
||||||
post("social/person/getCustomSocialInfo", {data: params}, {catch_error: true}).then((res: any) => {
|
post(API.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;
|
||||||
|
|
|
||||||
|
|
@ -225,6 +225,7 @@ import insutypes from "@/assets/config/directory/insutypes.json"
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import Quick from "@/components/charge/RecordsLog/Quick.vue";
|
import Quick from "@/components/charge/RecordsLog/Quick.vue";
|
||||||
import {getCurrentTime, getToday} from "@/utils/dateUtils.ts";
|
import {getCurrentTime, getToday} from "@/utils/dateUtils.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const height = ref(570)
|
const height = ref(570)
|
||||||
const certTypeList = ref<any>([])
|
const certTypeList = ref<any>([])
|
||||||
|
|
@ -311,7 +312,7 @@ const save = () => {
|
||||||
|
|
||||||
}
|
}
|
||||||
if (edit_data.value.id) {
|
if (edit_data.value.id) {
|
||||||
post(apiConfig.RegistrationEdit, {
|
post(API.Patient.Base.Update, {
|
||||||
data: data, mdtrtCertNo: socialCard.value?.mdtrtCertNo,
|
data: data, mdtrtCertNo: socialCard.value?.mdtrtCertNo,
|
||||||
mdtrtCertType: socialCard.value?.mdtrtCertType
|
mdtrtCertType: socialCard.value?.mdtrtCertType
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
|
|
@ -319,7 +320,7 @@ const save = () => {
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
post(apiConfig.RegistrationAdd, {
|
post(API.Patient.Base.Create, {
|
||||||
data: data,
|
data: data,
|
||||||
mdtrtCertNo: socialCard.value?.mdtrtCertNo,
|
mdtrtCertNo: socialCard.value?.mdtrtCertNo,
|
||||||
mdtrtCertType: socialCard.value?.mdtrtCertType
|
mdtrtCertType: socialCard.value?.mdtrtCertType
|
||||||
|
|
@ -341,7 +342,7 @@ const save = () => {
|
||||||
}
|
}
|
||||||
//退出挂号
|
//退出挂号
|
||||||
const registrationCancel = () => {
|
const registrationCancel = () => {
|
||||||
post(apiConfig.RegistrationChangeStatus, {id: edit_data.value.id, status: 0}).then(() => {
|
post(API.Patient.Base.Del, {id: edit_data.value.id, status: 0}).then(() => {
|
||||||
ElMessage.success('退号成功')
|
ElMessage.success('退号成功')
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
|
|
@ -441,7 +442,7 @@ const hide = () => {
|
||||||
const sectionList = ref<any>([])
|
const sectionList = ref<any>([])
|
||||||
const getSectionList = () => {
|
const getSectionList = () => {
|
||||||
if (!edit_data.value.organizationDoctorId) return
|
if (!edit_data.value.organizationDoctorId) return
|
||||||
post(apiConfig.OrganizationSectionListByMemberId, {memberId: edit_data.value.organizationDoctorId}).then((res: any) => {
|
post(API.Organization.Member.List, {memberId: edit_data.value.organizationDoctorId}).then((res: any) => {
|
||||||
sectionList.value = res
|
sectionList.value = res
|
||||||
if (res.length > 0) {
|
if (res.length > 0) {
|
||||||
edit_data.value.organizationSectionId = res[0].id
|
edit_data.value.organizationSectionId = res[0].id
|
||||||
|
|
|
||||||
|
|
@ -1,152 +0,0 @@
|
||||||
<template>
|
|
||||||
<Mask :height="600" :width="700" :is-show="show">
|
|
||||||
<CloseBtn @click="show = false"></CloseBtn>
|
|
||||||
<el-card>
|
|
||||||
<div class="panel">
|
|
||||||
<div class="header">
|
|
||||||
请勾选该追溯码关联的发药项目商品
|
|
||||||
</div>
|
|
||||||
<div class="code">
|
|
||||||
<div class="before-code">
|
|
||||||
{{ traceabilityCode.slice(0, 7) }}
|
|
||||||
</div>
|
|
||||||
<div class="after-code">
|
|
||||||
{{ traceabilityCode.slice(7, traceabilityCode.length) }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="table">
|
|
||||||
<table class="simple-table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>选择</th>
|
|
||||||
<th>发药项目</th>
|
|
||||||
<th>产品标识码</th>
|
|
||||||
<th>系统处理</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
<tr v-for="(item,index) in tableData">
|
|
||||||
<td><input class="blue-radio" type="radio" :value="item.id" v-model="selected"/></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">
|
|
||||||
关联产品标识码,采集追溯码自动识别商品
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<template #footer>
|
|
||||||
<el-button @click="addIdCode" type="primary">确定</el-button>
|
|
||||||
<el-button @click="show = false" type="primary">关闭</el-button>
|
|
||||||
</template>
|
|
||||||
</el-card>
|
|
||||||
</Mask>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
|
|
||||||
import Mask from "@/components/Mask.vue";
|
|
||||||
import {ref} from "vue"
|
|
||||||
import IdCodeListShow from "@/components/retail/IdCodeListShow.vue";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import {ElMessage} from "element-plus";
|
|
||||||
|
|
||||||
interface TableItem {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
idCode?: string[] | undefined; // 可选属性,默认为 undefined
|
|
||||||
gatherNumber?: number;
|
|
||||||
retailNumber?: number;
|
|
||||||
packagingUnit?: string;
|
|
||||||
minPackagingUnit?: string;
|
|
||||||
selectedUnit?: string;
|
|
||||||
minPackagingNumber?: number;
|
|
||||||
traceAbilityCodeList?: { code: string; number: number }[];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const show = ref(false);
|
|
||||||
const traceabilityCode = ref("");
|
|
||||||
const tableData = ref<TableItem[]>([]);
|
|
||||||
const init = (newIdCode: any, newTableDate: any) => {
|
|
||||||
traceabilityCode.value = newIdCode;
|
|
||||||
tableData.value = newTableDate;
|
|
||||||
show.value = true;
|
|
||||||
}
|
|
||||||
const selected = ref()
|
|
||||||
defineExpose({init})
|
|
||||||
const addIdCode = ()=>{
|
|
||||||
if (traceabilityCode.value ==""){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
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){
|
|
||||||
subItem.idCode?.push(idCode);
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const selectedItem = tableData.value.find((item: any) => item.id === selected.value);
|
|
||||||
if(!selectedItem){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
addTraceabilityCode(selectedItem)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const emit = defineEmits(["addIdCode","addTraceabilityCode"])
|
|
||||||
const addTraceabilityCode = (item: any) => {
|
|
||||||
emit("addTraceabilityCode",traceabilityCode)
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.panel {
|
|
||||||
height: 400px;
|
|
||||||
.header {
|
|
||||||
margin-top: 20px;
|
|
||||||
font-size: 24px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.code {
|
|
||||||
height: 50px;
|
|
||||||
display: flex;
|
|
||||||
font-size: 24px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.before-code {
|
|
||||||
color: #7a8794;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.after-code {
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.table {
|
|
||||||
.simple-table {
|
|
||||||
.blue-radio {
|
|
||||||
accent-color: #28addd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,128 +0,0 @@
|
||||||
<template>
|
|
||||||
<Mask :height="600" :width="900" :is-show="show">
|
|
||||||
<CloseBtn @click="show = false"></CloseBtn>
|
|
||||||
<el-card>
|
|
||||||
<template #header>
|
|
||||||
<div class="card-header">
|
|
||||||
<div class="header">选择批次</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<div class="detail">
|
|
||||||
<div class="total">
|
|
||||||
<div class="name">{{ item.name }}</div>
|
|
||||||
<div class="number">总量
|
|
||||||
<el-input-number v-model="item.retailNumber" @change="changeTotalNumber()"></el-input-number>
|
|
||||||
{{ item.selectedUnit }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="batch">
|
|
||||||
<table class="simple-table table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>生产批号</th>
|
|
||||||
<th>效期</th>
|
|
||||||
<th>生产日期</th>
|
|
||||||
<th>进价</th>
|
|
||||||
<th>入库日期</th>
|
|
||||||
<th>库存</th>
|
|
||||||
<th>数量</th>
|
|
||||||
<th>单位</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr v-for="(subItem,index) in item.retailOrderList">
|
|
||||||
<td>{{ subItem.inventory.purchaseUnitPrice }}</td>
|
|
||||||
<td>{{ subItem.inventory.expiryDate }}</td>
|
|
||||||
<td>{{ subItem.inventory.productionDate }}</td>
|
|
||||||
<td>¥{{ subItem.inventory.purchaseUnitPrice.toFixed(2) }}</td>
|
|
||||||
<td>{{ subItem.inventory.createDatetime }}</td>
|
|
||||||
<td>{{ subItem.inventory.wholeNumber }}{{ subItem.inventory.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag ==1">
|
|
||||||
{{ subItem.inventory.fragmentNumber }}{{ subItem.inventory.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<template v-if="item.selectedUnit == item.packagingUnit">
|
|
||||||
<el-input-number v-model="subItem.deductWhole" @click="changeBatchNumber()"></el-input-number>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
<el-input-number v-model="subItem.deductFragment" @click="changeBatchNumber()"></el-input-number>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
</td>
|
|
||||||
<td>{{ item.selectedUnit }}</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<template #footer>
|
|
||||||
<div>
|
|
||||||
<el-button @click="show = false" type="primary">确定</el-button>
|
|
||||||
<el-button @click="show = false">关闭</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-card>
|
|
||||||
|
|
||||||
|
|
||||||
</Mask>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import Mask from "@/components/Mask.vue";
|
|
||||||
import {ref} from "vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
|
|
||||||
const item = ref();
|
|
||||||
const show = ref(false);
|
|
||||||
const init = (data: any) => {
|
|
||||||
item.value = data;
|
|
||||||
show.value = true;
|
|
||||||
}
|
|
||||||
defineExpose({init});
|
|
||||||
|
|
||||||
const getPreout = (item: any) => {
|
|
||||||
post("retail/preout", {id: item.value.id, wholeNumber: item.value.retailNumber}).then((res: any) => {
|
|
||||||
item.value.retailOrderList = res;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const changeBatchNumber = () => {
|
|
||||||
item.value.retailNumber = 0;
|
|
||||||
item.value.retailOrderList.forEach((subItem: any) => {
|
|
||||||
item.value.retailNumber += subItem.deductWhole;
|
|
||||||
})
|
|
||||||
item.value.totalPrice = Number(item.value.retailNumber) * Number(item.value.unitPrice)
|
|
||||||
}
|
|
||||||
|
|
||||||
const changeTotalNumber = () => {
|
|
||||||
item.value.totalPrice = Number(item.value.retailNumber) * Number(item.value.unitPrice)
|
|
||||||
getPreout(item);
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.header {
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail {
|
|
||||||
margin-top: 10px;
|
|
||||||
height: 350px;
|
|
||||||
.total {
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
.name {
|
|
||||||
width: 70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.number {
|
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,236 +0,0 @@
|
||||||
<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 {ElMessage} from "element-plus";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import type {Request, Response} from "@/utils/ws.ts";
|
|
||||||
import {useWsStore} from "@/stores/wsStore.ts";
|
|
||||||
|
|
||||||
const wsStore = useWsStore();
|
|
||||||
const isReading = ref(false)
|
|
||||||
const socialCard: any = defineModel();
|
|
||||||
const ReadSocialCard = async (readType: string) => {
|
|
||||||
socialCard.value.lastUse = "CardDefault"
|
|
||||||
isReading.value = true;
|
|
||||||
let config_db: any = await post('common/config/getall');
|
|
||||||
let config: any = {}
|
|
||||||
config.ACCESS_KEY = config_db.social_ACCESS_KEY;
|
|
||||||
config.SECRETKEY = config_db.social_SECRETKEY;
|
|
||||||
config.IP = config_db.social_IP;
|
|
||||||
config.PORT = config_db.social_PORT;
|
|
||||||
config.ORGID = config_db.social_fixmedinsCode;
|
|
||||||
config.EC_URL = config_db.social_EC_URL;
|
|
||||||
let data: any = {}
|
|
||||||
data.officeId = "1"
|
|
||||||
data.officeName = "内科";
|
|
||||||
data.operatorId = "1";
|
|
||||||
data.operatorName = "陈庭荣";
|
|
||||||
data.readType = readType;
|
|
||||||
let request: Request = {
|
|
||||||
type: "ReadCard",
|
|
||||||
config: config,
|
|
||||||
data: data
|
|
||||||
}
|
|
||||||
wsStore.sendMessage(request);
|
|
||||||
};
|
|
||||||
|
|
||||||
const reciceMessage = (response: Response) => {
|
|
||||||
if (socialCard.value.lastUse != "CardDefault") {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (response.Code == 301) {
|
|
||||||
let msg = response.Message;
|
|
||||||
ElMessage({
|
|
||||||
message: msg,
|
|
||||||
type: 'warning',
|
|
||||||
});
|
|
||||||
isReading.value = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let readType = response.Data.readType;
|
|
||||||
if (!readType) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const params = {
|
|
||||||
mdtrtCertType: readType,
|
|
||||||
mdtrtCertNo: response.Data.mdtrt_cert_no,
|
|
||||||
certno: response.Data.certno,
|
|
||||||
psnName: response.Data.psn_name,
|
|
||||||
psnCertType: "01",
|
|
||||||
cardSn: response.Data.card_sn ? response.Data.card_sn : "",
|
|
||||||
}
|
|
||||||
getInfoFor1101(params)
|
|
||||||
}
|
|
||||||
const emit = defineEmits(['socialCardUpdate'])
|
|
||||||
const getInfoFor1101 = (params: any) => {
|
|
||||||
post("social/person/getCustomSocialInfo", {data: params}).then((res: any) => {
|
|
||||||
socialCard.value.data = res;
|
|
||||||
socialCard.value.mdtrtCertType = params.mdtrtCertType;
|
|
||||||
socialCard.value.mdtrtCertNo = params.mdtrtCertNo;
|
|
||||||
emit('socialCardUpdate')
|
|
||||||
}).finally(() => {
|
|
||||||
isReading.value = false;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
onMounted(async () => {
|
|
||||||
wsStore.setMessageCallback(reciceMessage)
|
|
||||||
});
|
|
||||||
onUnmounted(() => {
|
|
||||||
wsStore.removeAllMessageCallback()
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="card-default">
|
|
||||||
<div class="info" v-if="socialCard.data">
|
|
||||||
<el-descriptions title="医保卡信息" column="2" border>
|
|
||||||
<el-descriptions-item label="姓名">{{ socialCard.data.baseinfo.psn_name }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="性别">{{ getKey(gends, socialCard.data.baseinfo.gend) }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="年龄">{{ Math.floor(socialCard.data.baseinfo.age) }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="民族">{{ getKey(natys, socialCard.data.baseinfo.naty) }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="证件类型" span="2">{{
|
|
||||||
getKey(psnCertTypes, socialCard.data.baseinfo.psn_cert_type)
|
|
||||||
}}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="证件号码" span="2">{{ socialCard.data.baseinfo.certno }}</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
|
||||||
<div class="btn-wrapper">
|
|
||||||
<el-button text bg @click="socialCard.data = null">退出医保卡</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="insuinfo" v-if="socialCard.data.insuinfo">
|
|
||||||
<el-scrollbar max-height="180">
|
|
||||||
<div class="item" v-for="(item,index) in socialCard.data.insuinfo"><span
|
|
||||||
class="name">账户余额({{ getKey(insutypes, item.insutype) }})</span><span
|
|
||||||
class="value">{{ item.balc.toFixed(2) }}</span></div>
|
|
||||||
</el-scrollbar>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="empty" v-else>
|
|
||||||
<div class="tip" v-loading="isReading">
|
|
||||||
<img style="width: 100%;height: 226px" src="/static/images/retail/null.png" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="btn-wrapper">
|
|
||||||
<div class="btn" @click="ReadSocialCard('03')" @keydown.enter.prevent tabindex="-1">医保卡</div>
|
|
||||||
<div class="btn" @click="ReadSocialCard('01')" @keydown.enter.prevent tabindex="-1">电子凭证</div>
|
|
||||||
<div class="btn" @click="ReadSocialCard('02')" @keydown.enter.prevent tabindex="-1">身份证</div>
|
|
||||||
<div class="btn" @click="ReadSocialCard('04')" @keydown.enter.prevent tabindex="-1">人脸识别</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.card-default {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
.insuinfo {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
box-sizing: border-box;
|
|
||||||
border-radius: 5px;
|
|
||||||
padding: 10px;
|
|
||||||
background: #EEE;
|
|
||||||
max-height: 200px;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 30px;
|
|
||||||
line-height: 30px;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #666;
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
.name {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.value {
|
|
||||||
width: 80px;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.empty {
|
|
||||||
padding: 0 24px;
|
|
||||||
|
|
||||||
.tip {
|
|
||||||
height: 100%;
|
|
||||||
background: linear-gradient(157deg, #FAFCFF 0%, #F2F5FC 100%);
|
|
||||||
border-radius: 8px 8px 8px 8px;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #AAAAAA;
|
|
||||||
line-height: 17px;
|
|
||||||
text-align: left;
|
|
||||||
font-style: normal;
|
|
||||||
text-transform: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-wrapper {
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
margin-top: 24px;
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
flex: 1;
|
|
||||||
height: 40px;
|
|
||||||
background: #FFFFFF;
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 1px solid #4D6DE4;
|
|
||||||
cursor: pointer;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #4D6DE4;
|
|
||||||
font-style: normal;
|
|
||||||
line-height: 40px;
|
|
||||||
text-align: center;
|
|
||||||
&:hover {
|
|
||||||
background: #4D6DE4;
|
|
||||||
color: #FFFFFF;
|
|
||||||
|
|
||||||
}
|
|
||||||
&:nth-child(2n) {
|
|
||||||
margin:0 8px;
|
|
||||||
}
|
|
||||||
&:last-child{
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.top {
|
|
||||||
margin: 20px 0 8px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.info {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
.btn-wrapper {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 60px;
|
|
||||||
line-height: 60px;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,197 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
|
|
||||||
import {getKey} from "@/utils/discrotyUtil.ts";
|
|
||||||
import insutypes from "@/assets/config/directory/insutypes.json";
|
|
||||||
import {onMounted, onUnmounted, ref} from "vue";
|
|
||||||
import {ElMessage} from "element-plus";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import type {Request, Response} from "@/utils/ws.ts";
|
|
||||||
import {useWsStore} from "@/stores/wsStore.ts";
|
|
||||||
|
|
||||||
const wsStore = useWsStore();
|
|
||||||
const isReading = ref(false)
|
|
||||||
const socialCard:any = defineModel();
|
|
||||||
const ReadSocialCard = async (readType: string) => {
|
|
||||||
socialCard.value.lastUse="cardPay"
|
|
||||||
isReading.value = true;
|
|
||||||
let config_db: any = await post('common/config/getall');
|
|
||||||
let config: any = {}
|
|
||||||
config.ACCESS_KEY = config_db.social_ACCESS_KEY;
|
|
||||||
config.SECRETKEY = config_db.social_SECRETKEY;
|
|
||||||
config.IP = config_db.social_IP;
|
|
||||||
config.PORT = config_db.social_PORT;
|
|
||||||
config.ORGID = config_db.social_fixmedinsCode;
|
|
||||||
config.EC_URL = config_db.social_EC_URL;
|
|
||||||
let data: any = {}
|
|
||||||
data.officeId = "1"
|
|
||||||
data.officeName = "内科";
|
|
||||||
data.operatorId = "1";
|
|
||||||
data.operatorName = "陈庭荣";
|
|
||||||
data.readType = readType;
|
|
||||||
let request: Request = {
|
|
||||||
type: "ReadCard",
|
|
||||||
config: config,
|
|
||||||
data: data
|
|
||||||
}
|
|
||||||
wsStore.sendMessage(request);
|
|
||||||
};
|
|
||||||
const reciceMessage = (response: Response) => {
|
|
||||||
if(socialCard.value.lastUse!="cardPay"){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (response.Code == 301) {
|
|
||||||
let msg = response.Message;
|
|
||||||
ElMessage({
|
|
||||||
message: msg,
|
|
||||||
type: 'warning',
|
|
||||||
});
|
|
||||||
isReading.value = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let readType = response.Data.readType;
|
|
||||||
if (!readType) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const params = {
|
|
||||||
mdtrtCertType: readType,
|
|
||||||
mdtrtCertNo: response.Data.mdtrt_cert_no,
|
|
||||||
certno: response.Data.certno,
|
|
||||||
psnName: response.Data.psn_name,
|
|
||||||
psnCertType: "01",
|
|
||||||
cardSn: response.Data.card_sn ? response.Data.card_sn : "",
|
|
||||||
}
|
|
||||||
getInfoFor1101(params)
|
|
||||||
}
|
|
||||||
const getInfoFor1101 = (params: any) => {
|
|
||||||
post("social/person/getCustomSocialInfo", {data: params}).then((res: any) => {
|
|
||||||
socialCard.value.data = res;
|
|
||||||
socialCard.value.mdtrtCertType = params.mdtrtCertType;
|
|
||||||
socialCard.value.mdtrtCertNo = params.mdtrtCertNo;
|
|
||||||
socialCard.value.payInfo.selfpay_prop_type = socialCard.value.data.insuinfo[0].insutype;
|
|
||||||
}).finally(() => {
|
|
||||||
isReading.value = false;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
onMounted(async () => {
|
|
||||||
wsStore.setMessageCallback(reciceMessage)
|
|
||||||
});
|
|
||||||
onUnmounted(()=>{
|
|
||||||
wsStore.removeAllMessageCallback()
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="card-pay">
|
|
||||||
<div class="left">医保<br/>信息</div>
|
|
||||||
<div class="right">
|
|
||||||
<div class="insuinfo" v-if="socialCard.data">
|
|
||||||
<div class="line">
|
|
||||||
<div class="label">姓名</div>
|
|
||||||
<div class="info">{{ socialCard.data.baseinfo.psn_name }}</div>
|
|
||||||
<div class="btn" @click="socialCard.data=null">退出</div>
|
|
||||||
</div>
|
|
||||||
<div class="line">
|
|
||||||
<div class="label">险种</div>
|
|
||||||
<div class="info">
|
|
||||||
<el-select v-model="socialCard.payInfo.selfpay_prop_type" placeholder="请选择" style="width: 100%">
|
|
||||||
<el-option
|
|
||||||
v-for="(item,index) in socialCard.data.insuinfo"
|
|
||||||
:key="item.insutype"
|
|
||||||
:label="'账户余额'+getKey(insutypes, item.insutype)+'('+item.balc.toFixed(2)+')'"
|
|
||||||
:value="item.insutype"
|
|
||||||
>
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="card-empty" v-else>
|
|
||||||
<div class="tip" v-loading="isReading">暂无医保信息</div>
|
|
||||||
<div class="btn-wrapper"> <div class="btn" @click="ReadSocialCard('03')" tabindex="-1">医保卡</div>
|
|
||||||
<div class="btn" @click="ReadSocialCard('01')" tabindex="-1">电子码</div>
|
|
||||||
<div class="btn" @click="ReadSocialCard('02')" tabindex="-1">身份证</div>
|
|
||||||
<div class="btn" @click="ReadSocialCard('04')" tabindex="-1">人脸识别</div></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.card-pay {
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
.left {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
background: #DDD;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
font-size: 24px;
|
|
||||||
color: #666;
|
|
||||||
padding: 20px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
border-radius: 10px 0 0 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.right {
|
|
||||||
position: relative;
|
|
||||||
flex: 1;
|
|
||||||
background: #EEE;
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 10px;
|
|
||||||
border-radius: 0 10px 10px 0;
|
|
||||||
.line{
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
height: 40px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-right: 10px;
|
|
||||||
line-height: 40px;
|
|
||||||
.label{
|
|
||||||
position: relative;
|
|
||||||
width: 40px;
|
|
||||||
}
|
|
||||||
.info{
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.card-empty{
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
.tip{
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 50px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
.btn-wrapper{
|
|
||||||
position: relative;
|
|
||||||
height: 30px;
|
|
||||||
display: flex;
|
|
||||||
.btn{
|
|
||||||
flex: 1;
|
|
||||||
margin-left: 5px;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.btn{
|
|
||||||
text-align: center;
|
|
||||||
line-height: 30px;
|
|
||||||
outline: none;
|
|
||||||
color: #409EFF;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,213 +0,0 @@
|
||||||
<template>
|
|
||||||
<Mask :height="650" :width="900" :is-show="show">
|
|
||||||
<CloseBtn @click="show = false"></CloseBtn>
|
|
||||||
<el-card>
|
|
||||||
<template #header>
|
|
||||||
<div class="header">追溯码采集</div>
|
|
||||||
</template>
|
|
||||||
<div class="detail">
|
|
||||||
<el-input placeholder="请输入追溯码" v-model="inputIdCode" clearable @keydown.enter="openAssociationIdCode()">
|
|
||||||
<template #prefix>
|
|
||||||
<el-icon>
|
|
||||||
<Monitor/>
|
|
||||||
</el-icon>
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
<div class="list">
|
|
||||||
<table class="simple-table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>发药项目</th>
|
|
||||||
<th>产品标识码</th>
|
|
||||||
<th>发药数量</th>
|
|
||||||
<th>已采/应采</th>
|
|
||||||
<th>追溯码</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr v-for="(item,index) in list" :key="index">
|
|
||||||
<td>{{ item.name }}</td>
|
|
||||||
<td>
|
|
||||||
<IdCodeListShow :idCodeList="item.idCode" v-if="item.idCode.length>0"/>
|
|
||||||
<div v-else>未关联</div>
|
|
||||||
</td>
|
|
||||||
<td>{{ item.retailNumber }}{{ item.selectedUnit }}</td>
|
|
||||||
<td>{{ item.gatherNumber }}/{{ item.retailNumber }}</td>
|
|
||||||
<td>
|
|
||||||
<TraceabilityCodeAdd :item="item"/>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<template #footer>
|
|
||||||
<div class="bottom-btn">
|
|
||||||
<el-button @click="saveRetail()" type="primary">确定</el-button>
|
|
||||||
<el-button @click="show = false">关闭</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-card>
|
|
||||||
<AssociationIdCode ref="associationIdCodeRef" @addIdCode="cleanInputIdCode"></AssociationIdCode>
|
|
||||||
</Mask>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import Mask from "@/components/Mask.vue";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
import {nextTick, ref} from "vue";
|
|
||||||
import IdCodeListShow from "@/components/retail/IdCodeListShow.vue";
|
|
||||||
import AssociationIdCode from "@/components/retail/AssociationIdCode.vue";
|
|
||||||
import TraceabilityCodeAdd from "@/components/retail/TraceabilityCodeAdd.vue";
|
|
||||||
import {ElMessage, ElMessageBox} from "element-plus";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
|
|
||||||
|
|
||||||
const show = ref(false)
|
|
||||||
const list = ref()
|
|
||||||
const orderInfo = ref()
|
|
||||||
const init = (data: any) => {
|
|
||||||
list.value = data
|
|
||||||
show.value = true
|
|
||||||
}
|
|
||||||
const close = () => {
|
|
||||||
show.value = false
|
|
||||||
}
|
|
||||||
defineExpose({init, close})
|
|
||||||
const emit = defineEmits(['confirm'])
|
|
||||||
const saveRetail = () => {
|
|
||||||
if (!checkTraceCode()) {
|
|
||||||
ElMessageBox.confirm(
|
|
||||||
`追溯码采集未完成是否继续?`,
|
|
||||||
'Warning',
|
|
||||||
{
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning',
|
|
||||||
}).then(() => {
|
|
||||||
emit('confirm')
|
|
||||||
})
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
emit('confirm')
|
|
||||||
}
|
|
||||||
const checkTraceCode = () => {
|
|
||||||
for (let i = 0; i < list.value.length; i++) {
|
|
||||||
const item = list.value[i];
|
|
||||||
if (item.gatherNumber !== item.retailNumber) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
const inputIdCode = ref()
|
|
||||||
const associationIdCodeRef = ref()
|
|
||||||
const openAssociationIdCode = () => {
|
|
||||||
if (addTraceAbilityCode()) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
nextTick(() => {
|
|
||||||
associationIdCodeRef.value.init(inputIdCode.value, list.value)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const addTraceAbilityCode = () => {
|
|
||||||
for (let i = 0; i < list.value.length; i++) {
|
|
||||||
let item = list.value[i];
|
|
||||||
let idCode = inputIdCode.value.slice(0, 7);
|
|
||||||
if (item.idCode.includes(idCode)) {
|
|
||||||
addTraceabilityCodeDo(item);
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const addTraceabilityCodeDo = (item: any) => {
|
|
||||||
if (!item.traceAbilityCodeList) {
|
|
||||||
item.traceAbilityCodeList = []
|
|
||||||
}
|
|
||||||
if (item.retailNumber == item.gatherNumber) {
|
|
||||||
ElMessage({
|
|
||||||
message: '采集数量已满',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const index = item.traceAbilityCodeList.findIndex((codeObj: any) => codeObj.code === inputIdCode.value);
|
|
||||||
if (index == -1 && item.selectedUnit == item.packagingUnit) {
|
|
||||||
item.traceAbilityCodeList.push({
|
|
||||||
code: inputIdCode.value,
|
|
||||||
number: 1
|
|
||||||
})
|
|
||||||
cleanInputIdCode()
|
|
||||||
getGatherNumber(item)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (index == -1 && item.selectedUnit == item.minPackagingUnit) {
|
|
||||||
|
|
||||||
let needCodeCount = item.retailNumber - item.gatherNumber;
|
|
||||||
let number = 1;
|
|
||||||
if (needCodeCount >= item.minPackagingNumber) {
|
|
||||||
number = item.minPackagingNumber;
|
|
||||||
}
|
|
||||||
if (needCodeCount < item.minPackagingNumber) {
|
|
||||||
number = needCodeCount;
|
|
||||||
}
|
|
||||||
item.traceAbilityCodeList.push({
|
|
||||||
code: inputIdCode.value,
|
|
||||||
number: number
|
|
||||||
})
|
|
||||||
cleanInputIdCode()
|
|
||||||
getGatherNumber(item)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (item.selectedUnit == item.packagingUnit) {
|
|
||||||
//没拆零 追溯码只能用一次
|
|
||||||
ElMessage({
|
|
||||||
message: '该追溯码已达到最大使用限制',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
//拆零每一个追溯码最多使用minPackagingNumber次
|
|
||||||
if (item.traceAbilityCodeList[index].number == item.minPackagingNumber) {
|
|
||||||
ElMessage({
|
|
||||||
message: '该追溯码已达到最大使用限制',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
item.traceAbilityCodeList[index].number += 1;
|
|
||||||
}
|
|
||||||
cleanInputIdCode()
|
|
||||||
getGatherNumber(item)
|
|
||||||
}
|
|
||||||
const getGatherNumber = (item: any) => {
|
|
||||||
let gatherNumber = 0;
|
|
||||||
for (let subItem of item.traceAbilityCodeList) {
|
|
||||||
gatherNumber += subItem.number;
|
|
||||||
}
|
|
||||||
item.gatherNumber = gatherNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
const cleanInputIdCode = () => {
|
|
||||||
inputIdCode.value = ''
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.header {
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail {
|
|
||||||
.list {
|
|
||||||
height: 400px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
const props = defineProps({
|
|
||||||
idCodeList: {
|
|
||||||
type: Array,
|
|
||||||
default: () => []
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<el-popover
|
|
||||||
title="已关联的追溯码产品标识码:"
|
|
||||||
placement="bottom-start"
|
|
||||||
trigger="hover"
|
|
||||||
width="250px"
|
|
||||||
popper-class="id-code-popper"
|
|
||||||
>
|
|
||||||
<template #reference>
|
|
||||||
<div class="id-code-panel">
|
|
||||||
<div class="code" v-if="props.idCodeList.length >0">{{props.idCodeList[0]}}</div>
|
|
||||||
<div class="number" v-if="props.idCodeList.length >1">
|
|
||||||
+{{props.idCodeList.length-1}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template #default>
|
|
||||||
<div class="id-code-detail">
|
|
||||||
<div class="item" v-for="(item,index) in props.idCodeList" :key="index">
|
|
||||||
{{index+1}}.{{item}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-popover>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.id-code-panel{
|
|
||||||
display: flex;
|
|
||||||
.number{
|
|
||||||
margin-left: 10px;
|
|
||||||
color: #4D6DE4;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.id-code-detail{
|
|
||||||
.item{
|
|
||||||
height: 35px;
|
|
||||||
line-height: 35px;
|
|
||||||
border-bottom: 1px solid #DCDFE6;
|
|
||||||
padding-left: 24px;
|
|
||||||
&:last-child{
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<Mask :width="800" :height="600" :is-show="show">
|
|
||||||
<CloseBtn @click="show = false"></CloseBtn>
|
|
||||||
<div class="table">
|
|
||||||
<el-table :data="tableData" style="width: 100%">
|
|
||||||
<el-table-column prop="createTime" label="创建时间"></el-table-column>
|
|
||||||
<el-table-column prop="goodsName" label="商品"></el-table-column>
|
|
||||||
<el-table-column prop="totalPrice" label="应收金额"></el-table-column>
|
|
||||||
<el-table-column label="操作">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button type="primary" @click="ladingBill(scope.row)">提单</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</Mask>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
|
|
||||||
import Mask from "@/components/Mask.vue";
|
|
||||||
import {ref} from "vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
const show = ref(false)
|
|
||||||
const tableData = ref<any>([])
|
|
||||||
const emit = defineEmits(['ladingBill'])
|
|
||||||
const getBillList = () => {
|
|
||||||
post("retail/regis/list").then((res: any) => {
|
|
||||||
tableData.value = res
|
|
||||||
tableData.value.forEach((item:any)=>{
|
|
||||||
item.data = JSON.parse(item.data)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const ladingBill = (row:any)=>{
|
|
||||||
emit('ladingBill',row)
|
|
||||||
show.value = false
|
|
||||||
}
|
|
||||||
const init = () => {
|
|
||||||
show.value = true
|
|
||||||
getBillList()
|
|
||||||
}
|
|
||||||
defineExpose({init})
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.table{
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,386 +0,0 @@
|
||||||
<template>
|
|
||||||
<Mask :width="1000" :height="560" :is-show="show" @close="show = false" title="订单详情">
|
|
||||||
<div class="container">
|
|
||||||
<div class="title">
|
|
||||||
<CloseBtn @click="show = false"></CloseBtn>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div class="left">
|
|
||||||
<div class="goods-detail">
|
|
||||||
<div class="title">药品详情</div>
|
|
||||||
<el-table border :header-cell-style="{ backgroundColor: '#f5f7fa' }" :data="orderInfo.goodsDetail" style="height: 100%">
|
|
||||||
<el-table-column label="商品" prop="name" width="100" show-overflow-tooltip></el-table-column>
|
|
||||||
<el-table-column label="数量" prop="number" width="100" show-overflow-tooltip></el-table-column>
|
|
||||||
<el-table-column label="单位" prop="unit" width="100" show-overflow-tooltip></el-table-column>
|
|
||||||
<el-table-column label="单价" width="100" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.preUnitPrice }}元
|
|
||||||
</template>
|
|
||||||
</el-table-column >
|
|
||||||
<el-table-column label="实价" width="100" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.unitPrice }}元
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="小计" width="100" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.subTotalPrice }}元
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="追溯码" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.traceabilityCode?.length ==2 ?"未绑定追溯码":scope.row.traceabilityCode}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
<div class="service-detail">
|
|
||||||
<div class="title">服务详情</div>
|
|
||||||
<el-table border :header-cell-style="{ backgroundColor: '#f5f7fa' }" :data="orderInfo.serviceDetail" style="height: 100%">
|
|
||||||
<el-table-column label="商品" prop="name" width="100" show-overflow-tooltip></el-table-column>
|
|
||||||
<el-table-column label="数量" prop="number" width="100" show-overflow-tooltip></el-table-column>
|
|
||||||
<el-table-column label="单位" prop="unit" width="100" show-overflow-tooltip></el-table-column>
|
|
||||||
<el-table-column label="单价" width="100" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.preUnitPrice }}元
|
|
||||||
</template>
|
|
||||||
</el-table-column >
|
|
||||||
<el-table-column label="实价" width="100" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.unitPrice }}元
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="小计" width="100" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.subTotalPrice }}元
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="追溯码" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
-
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="right">
|
|
||||||
<div class="right_head">
|
|
||||||
<div class="title">支付信息</div>
|
|
||||||
<div class="info">
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">开单时间</div>
|
|
||||||
<div class="value">{{formatDate(orderInfo.createDatetime)}}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">完成时间</div>
|
|
||||||
<div class="value">{{ formatDate(orderInfo.payTime)}}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">收费员</div>
|
|
||||||
<div class="value">{{ orderInfo.salePersonName }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">药师</div>
|
|
||||||
<div class="value">{{ orderInfo.dockerName}}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">销售人</div>
|
|
||||||
<div class="value">{{ orderInfo.salePersonName }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">原价</div>
|
|
||||||
<div class="value">¥{{ orderInfo.preTotalPrice }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">优惠</div>
|
|
||||||
<div class="value">¥{{ (orderInfo.preTotalPrice-orderInfo.totalPrice).toFixed(2)}}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">应收</div>
|
|
||||||
<div class="value">¥{{ orderInfo.totalPrice }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">实收</div>
|
|
||||||
<div class="value">¥{{ orderInfo.totalPrice }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">支付方式</div>
|
|
||||||
<div class="value">{{ orderInfo.orderId }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="label">零售备注</div>
|
|
||||||
<div class="value">{{ orderInfo.orderId }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="right_body">
|
|
||||||
<div class="label">发票状态</div>
|
|
||||||
<div class="value">未开票</div>
|
|
||||||
</div>
|
|
||||||
<div class="right_foot">
|
|
||||||
<div class="label">
|
|
||||||
<div class="pay">收-{{ orderInfo.payType ? getPayTypeStr(orderInfo.payType) : "" }}</div>
|
|
||||||
<div class="name">{{ orderInfo.salePersonName }}</div>
|
|
||||||
<div>备注:-</div>
|
|
||||||
</div>
|
|
||||||
<div class="value">¥{{orderInfo.totalPrice}}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer">
|
|
||||||
<!-- <el-button type="primary" plain>追溯码</el-button>-->
|
|
||||||
<div>
|
|
||||||
<!-- <el-button type="danger" plain @click="cancel" v-if="orderInfo.status == 0">取消</el-button>-->
|
|
||||||
<!-- <el-button type="danger" plain @click="refund" v-if="orderInfo.status == 1">退款</el-button>-->
|
|
||||||
<!-- <el-button type="primary" @click="print" v-if="orderInfo.status == 1">-->
|
|
||||||
<!-- 打印<el-icon class="el-icon--right"><Upload /></el-icon>-->
|
|
||||||
<!-- </el-button>-->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Mask>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import {onMounted, onUnmounted, ref} from "vue";
|
|
||||||
import Mask from "@/components/common/Mask.vue";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
import {Upload} from "@element-plus/icons-vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import {useWsStore} from "@/stores/wsStore.ts";
|
|
||||||
import type {Request, Response} from "@/utils/ws.ts";
|
|
||||||
import {ElMessage} from "element-plus";
|
|
||||||
import {medTypeJson} from "@/assets/config/constants.ts";
|
|
||||||
|
|
||||||
const show = ref<boolean>(false);
|
|
||||||
const orderInfo = ref<any>({});
|
|
||||||
|
|
||||||
const init = (code: any) => {
|
|
||||||
show.value = true;
|
|
||||||
post("charge/getByCode", {code: code}).then((res: any)=>{
|
|
||||||
orderInfo.value = res;
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
//修改时间格式化
|
|
||||||
const formatDate = (isoStr: any) => {
|
|
||||||
if (!isoStr) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
const date = new Date(isoStr);
|
|
||||||
const year = date.getFullYear();
|
|
||||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
||||||
const day = String(date.getDate()).padStart(2, '0');
|
|
||||||
const hours = String(date.getHours()).padStart(2, '0');
|
|
||||||
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
||||||
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
||||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
||||||
}
|
|
||||||
const payTypeObj = {
|
|
||||||
0: "微信",
|
|
||||||
1: "支付宝",
|
|
||||||
2: "现金",
|
|
||||||
3: "医保"
|
|
||||||
}
|
|
||||||
type PayTypeKey = 0 | 1 | 2 | 3;
|
|
||||||
const emit = defineEmits(['updateOrderList'])
|
|
||||||
|
|
||||||
const getPayTypeStr = (payType: number): string => {
|
|
||||||
if (Object.keys(payTypeObj).includes(String(payType))) {
|
|
||||||
return payTypeObj[payType as PayTypeKey] || "未知";
|
|
||||||
}
|
|
||||||
return "未知";
|
|
||||||
};
|
|
||||||
const close = () => {
|
|
||||||
show.value = false;
|
|
||||||
emit('updateOrderList')
|
|
||||||
}
|
|
||||||
defineExpose({init})
|
|
||||||
const refund = () => {
|
|
||||||
post("retail/refund",{orderId:orderInfo.value.id}).then((res:any)=>{
|
|
||||||
close()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const cancel = () => {
|
|
||||||
post("retail/cancelOrder",{orderId:orderInfo.value.id}).then((res:any)=>{
|
|
||||||
close()
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
const wsStore = useWsStore();
|
|
||||||
// 定义 medType 的合法键类型
|
|
||||||
type MedTypeKey = keyof typeof medTypeJson;
|
|
||||||
|
|
||||||
const print = () => {
|
|
||||||
if (!orderInfo.value.code){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let code = orderInfo.value.code;
|
|
||||||
|
|
||||||
const printConfig = {} as any;
|
|
||||||
post("common/config/getPrintConfig").then((res:any)=>{
|
|
||||||
printConfig.printName=res.printName
|
|
||||||
printConfig.pageType=res.pageType
|
|
||||||
if (!printConfig.printName || !printConfig.pageType){
|
|
||||||
ElMessage.error("打印机未设置,请先到设置-打印管理中设置")
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
post("retail/getDetailByCode", {code}).then((res: any) => {
|
|
||||||
res.printerName = printConfig.printName
|
|
||||||
res.pageType = printConfig.pageType
|
|
||||||
if (res.retailSocialPayLog){
|
|
||||||
res.retailSocialPayLog.medTypeStr = medTypeJson[res.retailSocialPayLog.medType as MedTypeKey];
|
|
||||||
}
|
|
||||||
wsStore.sendMessage({
|
|
||||||
type: "PrintReceipt",
|
|
||||||
config: null,
|
|
||||||
data: res
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
let request: Request = {
|
|
||||||
type: "getPrintList",
|
|
||||||
config: null,
|
|
||||||
data: null
|
|
||||||
}
|
|
||||||
wsStore.sendMessage(request);
|
|
||||||
const reciceMessage = (response: Response) => {
|
|
||||||
}
|
|
||||||
onMounted(async () => {
|
|
||||||
wsStore.setMessageCallback(reciceMessage)
|
|
||||||
})
|
|
||||||
onUnmounted(() => {
|
|
||||||
wsStore.removeAllMessageCallback()
|
|
||||||
})
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
@use "@/assets/scss/base";
|
|
||||||
:deep(.el-scrollbar__view){
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
.container {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
min-height: 0;
|
|
||||||
padding:0 24px;
|
|
||||||
|
|
||||||
.title {
|
|
||||||
height: 35px;
|
|
||||||
}
|
|
||||||
.content {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
.left {
|
|
||||||
flex: 2;
|
|
||||||
height: 100%;
|
|
||||||
margin-right: 10px;
|
|
||||||
min-height: 0;
|
|
||||||
.goods-detail{
|
|
||||||
|
|
||||||
height: 40%;
|
|
||||||
.title{
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.service-detail{
|
|
||||||
height: 40%;
|
|
||||||
margin-top: 50px;
|
|
||||||
.title{
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.right {
|
|
||||||
min-width: 100px;
|
|
||||||
height: 100%;
|
|
||||||
flex: 1;
|
|
||||||
min-height: 0;
|
|
||||||
border: solid 1px #e6e6e6;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
.right_head {
|
|
||||||
padding: 10px;
|
|
||||||
|
|
||||||
.title {
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 600;
|
|
||||||
height: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info {
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #999ca1;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
.value {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.right_body {
|
|
||||||
padding: 0 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 400;
|
|
||||||
height: 30px;
|
|
||||||
color: #999ca1;
|
|
||||||
border-top: 1px solid #e6e6e6;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.value {
|
|
||||||
color: base.$warning-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.right_foot {
|
|
||||||
flex: 1;
|
|
||||||
padding: 0 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #999ca1;
|
|
||||||
border-top: 1px solid #e6e6e6;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.label {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
height: 100%;
|
|
||||||
.pay{
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
.name{
|
|
||||||
margin: 5px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.value {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.footer {
|
|
||||||
height: 40px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-top: 15px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,140 +0,0 @@
|
||||||
<template>
|
|
||||||
<Mask :is-show="show" :width=500 :height="500">
|
|
||||||
<div class="container-wrapper">
|
|
||||||
<CloseBtn @click="show = false"></CloseBtn>
|
|
||||||
<div class="header">
|
|
||||||
个人现金部分
|
|
||||||
</div>
|
|
||||||
<div class="container">
|
|
||||||
<div>
|
|
||||||
总金额:{{socialPayInfo.setlinfo.medfee_sumamt}}<br>
|
|
||||||
基金支付金额:{{socialPayInfo.setlinfo.fund_pay_sumamt}}<br>
|
|
||||||
个人医保支付金额:{{socialPayInfo.setlinfo.acct_pay}}<br>
|
|
||||||
个人现金支付金额:{{socialPayInfo.setlinfo.psn_cash_pay}}<br>
|
|
||||||
</div>
|
|
||||||
<div class="price-type" v-if="socialPayInfo.setlinfo.psn_cash_pay>0">
|
|
||||||
<div
|
|
||||||
class="price-type-item"
|
|
||||||
:class="['btn',payType==item.type?'active':'']"
|
|
||||||
v-for="(item,index) in priceBtnListNoSocial"
|
|
||||||
@click="changePriceType(item.type)"
|
|
||||||
>
|
|
||||||
<div class="image" :style="{'background-color':item.color}">
|
|
||||||
<img style="width: 16px;height: 16px;" :src="item.img" alt=""/>
|
|
||||||
</div>
|
|
||||||
<span>{{item.name}}</span>
|
|
||||||
</div>
|
|
||||||
<el-input v-model="cash" placeholder="请输入收到现金的数量"></el-input>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" @click="completeSettlement">完成订单</el-button>
|
|
||||||
<el-button @click="cecalOrder">取消订单</el-button>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</Mask>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
|
|
||||||
import Mask from "@/components/Mask.vue";
|
|
||||||
import {ref} from "vue";
|
|
||||||
import {priceBtnListNoSocial} from "@/assets/config/constants.ts";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import {ElMessage, ElMessageBox} from "element-plus";
|
|
||||||
|
|
||||||
const socialPayInfo = ref<any>(null)
|
|
||||||
|
|
||||||
const payType = ref(null)
|
|
||||||
const changePriceType = (type: any) => {
|
|
||||||
payType.value = type;
|
|
||||||
}
|
|
||||||
const orderInfo = ref<any>(null)
|
|
||||||
const show = ref(false)
|
|
||||||
const open = (payInfo:any,order:any)=>{
|
|
||||||
show.value = true
|
|
||||||
socialPayInfo.value = payInfo;
|
|
||||||
orderInfo.value = order;
|
|
||||||
}
|
|
||||||
|
|
||||||
const cash = ref<number>(0)
|
|
||||||
const emit = defineEmits(["orderCompleted","orderCancel"])
|
|
||||||
const completeSettlement = ()=>{
|
|
||||||
if (cash.value != socialPayInfo.value.setlinfo.psn_cash_pay){
|
|
||||||
ElMessage({
|
|
||||||
message: '现金支付金额与实际收款金额不一致',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
post("retail/socialRealPay",{orderInfo:orderInfo.value,payType:payType.value}).then((res:any)=>{
|
|
||||||
show.value = false;
|
|
||||||
emit('orderCompleted')
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const cecalOrder = ()=>{
|
|
||||||
ElMessageBox.confirm(
|
|
||||||
`取消后不能恢复,是否确定取消当前订单?`,
|
|
||||||
'Warning',
|
|
||||||
{
|
|
||||||
confirmButtonText: '确认取消',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning',
|
|
||||||
}
|
|
||||||
).then(() => {
|
|
||||||
post("retail/cancelOrder",{orderId:orderInfo.value.orderId}).then((res:any)=>{
|
|
||||||
show.value = false;
|
|
||||||
emit('orderCancel')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
defineExpose({open})
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.price-type {
|
|
||||||
display: flex;
|
|
||||||
margin-top: 20px;
|
|
||||||
justify-content: space-between;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-items: center;
|
|
||||||
.btn {
|
|
||||||
height: 45px;
|
|
||||||
width: 95px;
|
|
||||||
font-size: 14px;
|
|
||||||
border-radius: 10px;
|
|
||||||
display: flex;
|
|
||||||
background: #efecec;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px;
|
|
||||||
cursor: pointer;
|
|
||||||
.image{
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
margin-right: 3px;
|
|
||||||
border-radius: 23px;
|
|
||||||
background-color: #ffffff;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
//color: #fff;
|
|
||||||
//background-color: #409EFF;
|
|
||||||
border: 1px solid #409EFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.active {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #409EFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
||||||
<template>
|
|
||||||
<el-scrollbar>
|
|
||||||
<el-table :data="list" style="width: 100%" @cell-click="openDetail">
|
|
||||||
<el-table-column prop="code" label="订单号" show-overflow-tooltip/>
|
|
||||||
<el-table-column prop="status" label="状态" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-tag :type="scope.row.status === 0 ? 'info' : scope.row.status === 1 ? 'success' : scope.row.status === 2 ? 'warning' : 'danger'">{{ getStatusStr(scope.row.status) }}</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="payType" label="类别">
|
|
||||||
<template #default="scope">
|
|
||||||
{{ getPayTypeStr(scope.row.payType) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="address" label="日期">
|
|
||||||
<template #default="{row}">
|
|
||||||
{{ formatDate(row.payTime) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</el-scrollbar>
|
|
||||||
<OrderDetail ref="orderDetailRef"></OrderDetail>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import {ref, defineProps, onMounted, watch} from 'vue'
|
|
||||||
import OrderDetail from "@/components/retail/OrderDetail.vue";
|
|
||||||
|
|
||||||
const prop = defineProps({
|
|
||||||
purchaseList: {
|
|
||||||
type: Array,
|
|
||||||
default: () => []
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const list = ref<any[]>([])
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
list.value = prop.purchaseList
|
|
||||||
})
|
|
||||||
watch(() => prop.purchaseList, (newVal) => {
|
|
||||||
list.value = newVal
|
|
||||||
})
|
|
||||||
|
|
||||||
const statusObj = {
|
|
||||||
0: "未完成",
|
|
||||||
1: "已完成",
|
|
||||||
2: "已取消",
|
|
||||||
3: "已退款"
|
|
||||||
}
|
|
||||||
const payTypeObj = {
|
|
||||||
0: "微信",
|
|
||||||
1: "支付宝",
|
|
||||||
2: "现金",
|
|
||||||
3: "医保"
|
|
||||||
}
|
|
||||||
type StatusKey = 0 | 1 | 2 | 3;
|
|
||||||
type PayTypeKey = 0 | 1 | 2 | 3;
|
|
||||||
//修改时间格式化
|
|
||||||
const formatDate = (isoStr: any) => {
|
|
||||||
const date = new Date(isoStr);
|
|
||||||
return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
|
|
||||||
}
|
|
||||||
const getStatusStr = (status: number): string => {
|
|
||||||
if (Object.keys(statusObj).includes(String(status))) {
|
|
||||||
return statusObj[status as StatusKey] || "未知";
|
|
||||||
}
|
|
||||||
return "未知";
|
|
||||||
};
|
|
||||||
const getPayTypeStr = (payType: number): string => {
|
|
||||||
if (Object.keys(payTypeObj).includes(String(payType))) {
|
|
||||||
return payTypeObj[payType as PayTypeKey] || "未知";
|
|
||||||
}
|
|
||||||
return "未知";
|
|
||||||
};
|
|
||||||
const orderDetailRef = ref<any>();
|
|
||||||
const openDetail = (row: any) => {
|
|
||||||
orderDetailRef.value.init(row)
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
||||||
<template>
|
|
||||||
<Mask :is-show="show" :width=800 :height="800" >
|
|
||||||
<div class="container-wrapper">
|
|
||||||
<CloseBtn @click="close"></CloseBtn>
|
|
||||||
<el-table :data="tableData" style="width: 100%" class="list" highlight-current-row @current-change="handleCurrentChange">
|
|
||||||
<el-table-column type="index" width="50" />
|
|
||||||
<el-table-column prop="name" label="名称"></el-table-column>
|
|
||||||
<el-table-column prop="data" label="内容" width="500">
|
|
||||||
<template #default="scope">
|
|
||||||
{{getContent(scope.row.data)}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button type="primary" @click="del(scope.row)">删除</el-button>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
</el-table>
|
|
||||||
<el-button @click="selected" type="primary">确定</el-button>
|
|
||||||
<el-button @click="close">取消</el-button>
|
|
||||||
</div>
|
|
||||||
</Mask>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import Mask from "@/components/Mask.vue";
|
|
||||||
import {onMounted, ref} from "vue";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
|
|
||||||
const show = ref(false)
|
|
||||||
const open = ()=>{
|
|
||||||
getTableData()
|
|
||||||
show.value = true
|
|
||||||
}
|
|
||||||
const tableData = ref<any>([]);
|
|
||||||
const getTableData = () => {
|
|
||||||
post("retail/associate/getList").then((res: any) => {
|
|
||||||
tableData.value = res;
|
|
||||||
tableData.value.forEach((item:any)=> {
|
|
||||||
item.data = JSON.parse(item.data)
|
|
||||||
} )
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const getContent = (data:any)=>{
|
|
||||||
let str = "";
|
|
||||||
data.forEach((item:any)=>{
|
|
||||||
str += item.name + ":" + item.retailNumber + item.selectedUnit+" "
|
|
||||||
})
|
|
||||||
return str
|
|
||||||
}
|
|
||||||
const del = (row:any)=>{
|
|
||||||
post("retail/associate/del",{id:row.id}).then((res:any)=>{
|
|
||||||
getTableData()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const close = ()=>{
|
|
||||||
show.value = false
|
|
||||||
currentRow.value = null
|
|
||||||
}
|
|
||||||
const currentRow = ref<any>(null)
|
|
||||||
const handleCurrentChange = (val:any)=>{
|
|
||||||
currentRow.value = val
|
|
||||||
}
|
|
||||||
const emit = defineEmits(['selected'])
|
|
||||||
const selected = ()=>{
|
|
||||||
emit("selected",currentRow.value)
|
|
||||||
close()
|
|
||||||
}
|
|
||||||
defineExpose({open})
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.container-wrapper{
|
|
||||||
.list{
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,193 +0,0 @@
|
||||||
<template>
|
|
||||||
<Mask :width="585" :height="438" :is-show="show">
|
|
||||||
<el-card>
|
|
||||||
<template #header>
|
|
||||||
<div class="header">
|
|
||||||
<span>收费</span>
|
|
||||||
<CloseBtn @click="show = false" style="margin-top: 12px"></CloseBtn>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<div class="panel">
|
|
||||||
<div class="price">¥{{ prop.money }}</div>
|
|
||||||
<div class="social" >
|
|
||||||
<CardPay v-model="socialCard"/>
|
|
||||||
</div>
|
|
||||||
<div class="price-type">
|
|
||||||
<div
|
|
||||||
class="price-type-item"
|
|
||||||
:class="['btn',payType==item.type?'active':'']"
|
|
||||||
v-for="(item,index) in priceBtnList"
|
|
||||||
@click="changePriceType(item.type)"
|
|
||||||
>
|
|
||||||
<div class="image" :style="{'background-color':item.color}">
|
|
||||||
<img style="width: 16px;height: 16px;" :src="item.img" alt=""/>
|
|
||||||
</div>
|
|
||||||
<span>{{item.name}}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<template #footer>
|
|
||||||
<div class="footer">
|
|
||||||
<el-checkbox v-model="printReceipt">同时打印凭证</el-checkbox>
|
|
||||||
<el-button @click="completeSettlement()" type="primary">完成收费</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-card>
|
|
||||||
</Mask>
|
|
||||||
<PersonalPayment ref="psnPaymentRef" @orderCompleted="orderCompleted" @orderCancel="orderCanceled"></PersonalPayment>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
|
|
||||||
import Mask from "@/components/Mask.vue";
|
|
||||||
import {nextTick, onMounted, onUnmounted, ref} from "vue";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import CardPay from "@/components/retail/CardPay.vue";
|
|
||||||
import {medTypeJson, priceBtnList} from "@/assets/config/constants.ts"
|
|
||||||
import PersonalPayment from "@/components/retail/PersonalPayment.vue";
|
|
||||||
import {useWsStore} from "@/stores/wsStore.ts";
|
|
||||||
const wsStore = useWsStore();
|
|
||||||
const socialCard =defineModel<any>();
|
|
||||||
const prop=defineProps({
|
|
||||||
money: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const show = ref(false)
|
|
||||||
const printReceipt = ref(false);
|
|
||||||
const payType = ref(null);
|
|
||||||
const retailOrder = ref<any>(null);
|
|
||||||
const init = (order: any) => {
|
|
||||||
retailOrder.value = order;
|
|
||||||
show.value = true;
|
|
||||||
}
|
|
||||||
defineExpose({init})
|
|
||||||
const changePriceType = (type: any) => {
|
|
||||||
payType.value = type;
|
|
||||||
}
|
|
||||||
const emit = defineEmits(['orderComplete','orderCanceled'])
|
|
||||||
const completeSettlement = ()=>{
|
|
||||||
if (!retailOrder.value){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (payType.value == null){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if(payType.value == 1){
|
|
||||||
//医保结算
|
|
||||||
socialSettlement();
|
|
||||||
}else {
|
|
||||||
//其他结算
|
|
||||||
post('retail/completeOrder',{retailId:retailOrder.value.id,payType:payType.value}).then((res:any)=>{
|
|
||||||
orderCompleted()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
const orderCompleted = ()=>{
|
|
||||||
show.value = false;
|
|
||||||
emit('orderComplete',printReceipt.value)
|
|
||||||
}
|
|
||||||
const orderCanceled = ()=>{
|
|
||||||
show.value = false;
|
|
||||||
emit('orderCanceled')
|
|
||||||
}
|
|
||||||
|
|
||||||
const getBalcByInsutype = (type:any) =>{
|
|
||||||
let balc =0;
|
|
||||||
for (const item of socialCard.value.data.insuinfo) {
|
|
||||||
if (item.insutype == type) {
|
|
||||||
balc = item.balc;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return balc
|
|
||||||
}
|
|
||||||
|
|
||||||
const socialSettlement = ()=>{
|
|
||||||
const params = {
|
|
||||||
mdtrtCertType: socialCard.value.mdtrtCertType,
|
|
||||||
mdtrtCertNo: socialCard.value.mdtrtCertNo,
|
|
||||||
psnNo: socialCard.value.data.baseinfo.psn_no,
|
|
||||||
orderId:retailOrder.value.id,
|
|
||||||
insutype: socialCard.value.payInfo.selfpay_prop_type,
|
|
||||||
payType: payType.value,
|
|
||||||
curBalc:getBalcByInsutype(socialCard.value.payInfo.selfpay_prop_type)
|
|
||||||
}
|
|
||||||
//预结算
|
|
||||||
post("retail/socialPrePay",{orderInfo:params}).then((res:any)=>{
|
|
||||||
openPsnPayment(res,params)
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
const psnPaymentRef = ref();
|
|
||||||
const openPsnPayment = (payInfo:any,orderInfo:any)=>{
|
|
||||||
nextTick(()=>{
|
|
||||||
psnPaymentRef.value.open(payInfo,orderInfo);
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.panel {
|
|
||||||
.price{
|
|
||||||
height: 50px;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 25px;
|
|
||||||
font-weight: 600;
|
|
||||||
color: rgba(237, 120, 23, 0.8);
|
|
||||||
}
|
|
||||||
.price-type {
|
|
||||||
display: flex;
|
|
||||||
margin-top: 20px;
|
|
||||||
justify-content: space-between;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-items: center;
|
|
||||||
.btn {
|
|
||||||
height: 45px;
|
|
||||||
width: 95px;
|
|
||||||
font-size: 14px;
|
|
||||||
border-radius: 10px;
|
|
||||||
display: flex;
|
|
||||||
background: #efecec;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px;
|
|
||||||
cursor: pointer;
|
|
||||||
.image{
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
margin-right: 3px;
|
|
||||||
border-radius: 23px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
//color: #fff;
|
|
||||||
//background-color: #409EFF;
|
|
||||||
border: 1px solid #409EFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.active {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #409EFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.footer{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,228 +0,0 @@
|
||||||
<template>
|
|
||||||
<el-popover
|
|
||||||
title="追溯码:"
|
|
||||||
placement="bottom-start"
|
|
||||||
trigger="click"
|
|
||||||
width="300px"
|
|
||||||
>
|
|
||||||
<template #reference>
|
|
||||||
<el-input
|
|
||||||
placeholder="追溯码"
|
|
||||||
clearable
|
|
||||||
v-model="inputTraceabilityCode"
|
|
||||||
style="width: 300px;"
|
|
||||||
@keydown.enter="addTraceabilityCode(props.item)"
|
|
||||||
></el-input>
|
|
||||||
</template>
|
|
||||||
<template #default>
|
|
||||||
<div v-for="(subItem,index) in item.traceAbilityCodeList" class="list">
|
|
||||||
<div class="code"> {{ subItem.code }}</div>
|
|
||||||
<div class="number">
|
|
||||||
<el-input
|
|
||||||
size="small"
|
|
||||||
v-model.number="changeNumber"
|
|
||||||
v-if="subItem.showNumberInput"
|
|
||||||
@keydown.enter="subItem.showNumberInput = false"
|
|
||||||
@change="handleNumberChange(subItem)"
|
|
||||||
></el-input>
|
|
||||||
<span v-else @click="openNumberInput(subItem)">x{{ subItem.number }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="remove" @click="removeTraceAbility(item)">
|
|
||||||
<el-icon>
|
|
||||||
<CloseBold/>
|
|
||||||
</el-icon>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-popover>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import {ref,watch} from "vue";
|
|
||||||
import {ElMessage, ElMessageBox} from "element-plus";
|
|
||||||
import {CloseBold} from "@element-plus/icons-vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
interface TraceAbilityCode {
|
|
||||||
code: string;
|
|
||||||
number: number;
|
|
||||||
showNumberInput?: boolean;
|
|
||||||
}
|
|
||||||
const props = defineProps({
|
|
||||||
item: {
|
|
||||||
type: Object as () => {
|
|
||||||
id?: number|undefined;
|
|
||||||
traceAbilityCodeList: TraceAbilityCode[];
|
|
||||||
retailNumber: number;
|
|
||||||
gatherNumber: number;
|
|
||||||
selectedUnit: string;
|
|
||||||
idCode: string[];
|
|
||||||
packagingUnit: string;
|
|
||||||
minPackagingUnit: string;
|
|
||||||
minPackagingNumber: number;
|
|
||||||
},
|
|
||||||
default: () => ({
|
|
||||||
traceAbilityCodeList: [],
|
|
||||||
retailNumber: 0,
|
|
||||||
gatherNumber: 0,
|
|
||||||
selectedUnit: "",
|
|
||||||
idCode:[],
|
|
||||||
packagingUnit: "",
|
|
||||||
minPackagingUnit: "",
|
|
||||||
minPackagingNumber: 0,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
const getGatherNumber = (item: any) => {
|
|
||||||
let gatherNumber = 0;
|
|
||||||
|
|
||||||
for (let subItem of item.traceAbilityCodeList) {
|
|
||||||
gatherNumber += subItem.number;
|
|
||||||
}
|
|
||||||
item.gatherNumber = gatherNumber;
|
|
||||||
}
|
|
||||||
const inputTraceabilityCode = ref("");
|
|
||||||
const addTraceabilityCode = (item: any) => {
|
|
||||||
if (!item.traceAbilityCodeList) {
|
|
||||||
item.traceAbilityCodeList = []
|
|
||||||
}
|
|
||||||
if (item.retailNumber == item.gatherNumber) {
|
|
||||||
ElMessage({
|
|
||||||
message: '采集数量已满',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let idCode = inputTraceabilityCode.value?inputTraceabilityCode.value.slice(0, 7):"";
|
|
||||||
const index = item.traceAbilityCodeList.findIndex((codeObj: any) => codeObj.code === inputTraceabilityCode.value);
|
|
||||||
if (index == -1 && item.selectedUnit == item.packagingUnit){
|
|
||||||
item.traceAbilityCodeList.push({
|
|
||||||
code: inputTraceabilityCode.value,
|
|
||||||
number: 1
|
|
||||||
})
|
|
||||||
inputTraceabilityCode.value = "";
|
|
||||||
getGatherNumber(item)
|
|
||||||
addIdCode(idCode)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (index == -1&& item.selectedUnit == item.minPackagingUnit){
|
|
||||||
|
|
||||||
let needCodeCount = item.retailNumber - item.gatherNumber;
|
|
||||||
let number = 1;
|
|
||||||
if (needCodeCount >= item.minPackagingNumber){
|
|
||||||
number = item.minPackagingNumber;
|
|
||||||
}
|
|
||||||
if (needCodeCount < item.minPackagingNumber){
|
|
||||||
number = needCodeCount;
|
|
||||||
}
|
|
||||||
item.traceAbilityCodeList.push({
|
|
||||||
code: inputTraceabilityCode.value,
|
|
||||||
number: number
|
|
||||||
})
|
|
||||||
inputTraceabilityCode.value = "";
|
|
||||||
getGatherNumber(item)
|
|
||||||
addIdCode(idCode)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(item.selectedUnit == item.packagingUnit){
|
|
||||||
//没拆零 追溯码只能用一次
|
|
||||||
ElMessage({
|
|
||||||
message: '该追溯码已达到最大使用限制',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return;
|
|
||||||
}else {
|
|
||||||
//拆零每一个追溯码最多使用minPackagingNumber次
|
|
||||||
if (item.traceAbilityCodeList[index].number == item.minPackagingNumber) {
|
|
||||||
ElMessage({
|
|
||||||
message: '该追溯码已达到最大使用限制',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
item.traceAbilityCodeList[index].number += 1;
|
|
||||||
}
|
|
||||||
inputTraceabilityCode.value = "";
|
|
||||||
getGatherNumber(item)
|
|
||||||
addIdCode(idCode)
|
|
||||||
}
|
|
||||||
const removeTraceAbility = (item: any) => {
|
|
||||||
item.traceAbilityCodeList.splice(item.traceAbilityCodeList.findIndex((codeObj: any) => codeObj.code === inputTraceabilityCode.value), 1)
|
|
||||||
getGatherNumber(item)
|
|
||||||
}
|
|
||||||
const changeNumber=ref(0);
|
|
||||||
const openNumberInput = (subItem: any) => {
|
|
||||||
subItem.showNumberInput = true;
|
|
||||||
changeNumber.value = subItem.number;
|
|
||||||
}
|
|
||||||
const handleNumberChange = (subItem:any)=>{
|
|
||||||
let limit = 1;
|
|
||||||
if (props.item.selectedUnit == props.item.minPackagingUnit){
|
|
||||||
limit = props.item.minPackagingNumber;
|
|
||||||
}
|
|
||||||
if (changeNumber.value>limit) {
|
|
||||||
ElMessage({
|
|
||||||
message: '单个追溯码采集数量超过限制',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
subItem.showNumberInput = false;
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// 可以在这里添加具体的处理逻辑
|
|
||||||
let totalNumber = 0;
|
|
||||||
for (let subItem of props.item.traceAbilityCodeList) {
|
|
||||||
totalNumber += subItem.number;
|
|
||||||
}
|
|
||||||
totalNumber = totalNumber - subItem.number + changeNumber.value;
|
|
||||||
if (totalNumber > props.item.retailNumber) {
|
|
||||||
ElMessage({
|
|
||||||
message: '采集数量超过上限',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
subItem.showNumberInput = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
subItem.number = changeNumber.value;
|
|
||||||
}
|
|
||||||
const addIdCode = (idCode:any)=>{
|
|
||||||
if (idCode==null || idCode.value ==""){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (props.item.idCode.includes(idCode)){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ElMessageBox.confirm(
|
|
||||||
`当前标识码未绑定是否确认绑定标识码?`,
|
|
||||||
'Warning',
|
|
||||||
{
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning',
|
|
||||||
}).then(() => {
|
|
||||||
post("goods/goods/addIdCode",{goodsId:props.item.id,idCode:idCode}).then((res:any)=>{
|
|
||||||
props.item.idCode.push(idCode);
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.list {
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
.code {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.number {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.remove {
|
|
||||||
font-size: 16px;
|
|
||||||
width: 50px;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,275 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import {ref,defineProps} from "vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import { ElCol, ElRow} from "element-plus";
|
|
||||||
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
purchaseNum: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
},
|
|
||||||
sum: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const state = ref([])
|
|
||||||
const options = ref<any>([])
|
|
||||||
const selectRef = ref();
|
|
||||||
const noActive = ref(false)
|
|
||||||
const querySearchAsync = (queryString: string) => {
|
|
||||||
if (!queryString) return
|
|
||||||
post("vip/vip/search", {keyword: queryString}).then((res: any) => {
|
|
||||||
options.value = res;
|
|
||||||
let list = res;
|
|
||||||
for (let i = 0; i < list.length; i++) {
|
|
||||||
list[i].value = list[i].name;
|
|
||||||
if (!list[i].levelId) return
|
|
||||||
post("vip/vipLevel/get", {levelId: list[i].levelId}).then((res: any) => {
|
|
||||||
options.value.levelName = res.name
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const listItem = ref<any>({})
|
|
||||||
const emit = defineEmits(['selectCallBack', 'closePurchaseList'])
|
|
||||||
const handleSelect = (item: any) => {
|
|
||||||
let goods = JSON.parse(JSON.stringify(item));
|
|
||||||
noActive.value = true
|
|
||||||
listItem.value = goods
|
|
||||||
post("vip/vipLevel/get", {levelId: goods.levelId}).then((res: any) => {
|
|
||||||
listItem.value.levelName = res.name
|
|
||||||
listItem.value.discountRate = res.discountRate
|
|
||||||
emit('selectCallBack', listItem.value)
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
const clear = () => {
|
|
||||||
closePurchaseList()
|
|
||||||
|
|
||||||
}
|
|
||||||
defineExpose({handleSelect,clear})
|
|
||||||
const isTrue = ref(false)
|
|
||||||
const closePurchaseList = () => {
|
|
||||||
noActive.value = false
|
|
||||||
options.value = []
|
|
||||||
emit('closePurchaseList')
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="search_box">
|
|
||||||
<el-select-v2
|
|
||||||
v-if="!noActive"
|
|
||||||
v-model="state"
|
|
||||||
style="width: 100%"
|
|
||||||
filterable
|
|
||||||
remote
|
|
||||||
ref="selectRef"
|
|
||||||
:remote-method="querySearchAsync"
|
|
||||||
:options="options"
|
|
||||||
placeholder="输入患者号"
|
|
||||||
:fit-input-width="500"
|
|
||||||
>
|
|
||||||
<template #prefix>
|
|
||||||
<div class="prefix-wrapper">
|
|
||||||
<el-icon>
|
|
||||||
<Search/>
|
|
||||||
</el-icon>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template #header>
|
|
||||||
<div class="header">
|
|
||||||
<div class="text">患者信息</div>
|
|
||||||
<div class="text">联系电话</div>
|
|
||||||
<div class="text">患者等级</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template #default="{ item }">
|
|
||||||
<div class="row" @click="handleSelect(item)">
|
|
||||||
<div class="text">{{ item.realName }}</div>
|
|
||||||
<div class="text">{{ item.phone }}</div>
|
|
||||||
<div class="text">{{ options.levelName || '无' }}</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template #footer>
|
|
||||||
</template>
|
|
||||||
</el-select-v2>
|
|
||||||
<div v-else>
|
|
||||||
<el-popover
|
|
||||||
class="box-item"
|
|
||||||
title=""
|
|
||||||
content=""
|
|
||||||
placement="bottom-start"
|
|
||||||
:width="500"
|
|
||||||
>
|
|
||||||
<template #reference>
|
|
||||||
<div class="detail" :class="isTrue?'active':''" @mouseleave="isTrue=false" @mousemove="isTrue=true">
|
|
||||||
<div class="info">
|
|
||||||
<div>{{ listItem.realName }}</div>
|
|
||||||
<div class="levelName">
|
|
||||||
<el-tag type="success">{{ listItem.levelName || '-' }}</el-tag>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>余额:{{ listItem.balance }}元 <span style="margin: 0 10px" @click="closePurchaseList()">X</span></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
<div v-if="isTrue" class="detail_box">
|
|
||||||
<div class="content">
|
|
||||||
<div class="head_box">
|
|
||||||
<el-tag type="success">{{ listItem.levelName || '-' }}</el-tag>
|
|
||||||
<div style="margin: 10px 0">消费{{ props.purchaseNum }}次,累计¥{{props.sum}}</div>
|
|
||||||
</div>
|
|
||||||
<div class="middle_box">
|
|
||||||
<div class="title">患者详情</div>
|
|
||||||
<div class="right_content">
|
|
||||||
<div class="bottom_box">
|
|
||||||
<el-row style="margin-bottom: 10px">
|
|
||||||
<el-col :span="12">
|
|
||||||
<span class="col_name">出生日期</span>
|
|
||||||
<span>{{ listItem.birthday || "2000-03-06" }}</span>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<span class="col_name">民族</span>
|
|
||||||
<span>{{ listItem.nation || "汉族" }}</span>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row style="margin-bottom: 10px">
|
|
||||||
<el-col :span="12">
|
|
||||||
<span class="col_name">创建日期</span>
|
|
||||||
<span>{{ listItem.createDatetime || "2024-03-06" }}</span>
|
|
||||||
</el-col>
|
|
||||||
<el-col class="col" :span="12">
|
|
||||||
<span class="col_name">身份证号码</span>
|
|
||||||
<span>{{ listItem.idCode || "123141424" }}</span>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row style="margin-bottom: 10px">
|
|
||||||
<el-col class="col" :span="12">
|
|
||||||
<span class="col_name">来源</span>
|
|
||||||
<span>{{ listItem.source || "皇姑" }}</span>
|
|
||||||
</el-col>
|
|
||||||
<el-col class="col" :span="12">
|
|
||||||
<span class="col_name">家庭地址</span>
|
|
||||||
<span>{{ listItem.address || "沈阳站" }}</span>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row style="margin-bottom: 10px">
|
|
||||||
<el-col :span="24">
|
|
||||||
<span class="col_name">备注</span>
|
|
||||||
<span>{{ listItem.remark || "加撒比打算大大的" }}</span>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.search_box {
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 10px;
|
|
||||||
border-radius: 10px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
padding: 10px;
|
|
||||||
font-size: 18px;
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
.text {
|
|
||||||
font-size: 16px;
|
|
||||||
width: 200px;
|
|
||||||
color: #6a6a6a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row {
|
|
||||||
display: flex;
|
|
||||||
max-height: 500px;
|
|
||||||
|
|
||||||
.text {
|
|
||||||
font-size: 12px;
|
|
||||||
width: 150px;
|
|
||||||
margin-left: 10px;
|
|
||||||
overflow: hidden; /* 隐藏超出部分 */
|
|
||||||
text-overflow: ellipsis; /* 显示省略号 */
|
|
||||||
white-space: nowrap; /* 防止换行 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-popper.is-pure {
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail {
|
|
||||||
min-width: 400px;
|
|
||||||
height: 32px;
|
|
||||||
border: 1px solid #8b8e8f;
|
|
||||||
border-radius: 10px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 0 10px;
|
|
||||||
font-family: inherit;
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
.info {
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.levelName {
|
|
||||||
margin: 0 50px 0 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.active {
|
|
||||||
border: 1px solid #00ace9;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail_box {
|
|
||||||
.title {
|
|
||||||
font-size: 15px;
|
|
||||||
font-weight: bold;
|
|
||||||
margin: 20px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
.head_box {
|
|
||||||
border-bottom: 1px solid rgba(165, 162, 162, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.middle_box {
|
|
||||||
background-color: #fff;
|
|
||||||
|
|
||||||
.right_content {
|
|
||||||
font-size: 14px;
|
|
||||||
.bottom_box {
|
|
||||||
.col_name {
|
|
||||||
display: inline-block;
|
|
||||||
width: 100px;
|
|
||||||
color: #6e6e6e;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,168 +0,0 @@
|
||||||
<template>
|
|
||||||
|
|
||||||
<Mask :width="400" :height="400" :is-show="show">
|
|
||||||
<CloseBtn @click="show = false"></CloseBtn>
|
|
||||||
<el-card style="width: 360px;height: 360px">
|
|
||||||
<template #header>
|
|
||||||
整单议价
|
|
||||||
</template>
|
|
||||||
<div class="negotiation-panel">
|
|
||||||
<el-input v-model="finalPrice" readonly class="price-input" size="large">
|
|
||||||
<template #prefix>
|
|
||||||
¥
|
|
||||||
</template>
|
|
||||||
<template #suffix>
|
|
||||||
<span :class="[finalPrice == originalPrice?'disable':'link-btn']" @click="restore">恢复</span>
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
<div class="negotiation-type">
|
|
||||||
<div :class="['btn',type==3?'active':'']">折比例</div>
|
|
||||||
</div>
|
|
||||||
<div class="bottom-input">
|
|
||||||
<div class="reduce-ratio" v-if="type==3">
|
|
||||||
<el-input placeholder="9折,输入90" size="large" v-model.number="reduceRation" @change="reduceRationChangeHandler" >
|
|
||||||
<template #suffix>
|
|
||||||
%
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<template #footer>
|
|
||||||
<el-button type="primary" @click="saveNegotiation">确定</el-button>
|
|
||||||
<el-button @click="show = false" plain>关闭</el-button>
|
|
||||||
</template>
|
|
||||||
</el-card>
|
|
||||||
|
|
||||||
|
|
||||||
</Mask>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import Mask from "@/components/Mask.vue";
|
|
||||||
import {computed, ref} from "vue";
|
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
|
||||||
|
|
||||||
const finalPrice = ref(0.0);
|
|
||||||
const originalPrice = ref(0.0);
|
|
||||||
const show = ref(false);
|
|
||||||
const init = (orgPrice: number,newFinalPrice: number,ration: number) => {
|
|
||||||
finalPrice.value = newFinalPrice;
|
|
||||||
originalPrice.value = orgPrice;
|
|
||||||
reduceRation.value = ration;
|
|
||||||
show.value = true;
|
|
||||||
}
|
|
||||||
defineExpose({init})
|
|
||||||
|
|
||||||
|
|
||||||
const restore = () => {
|
|
||||||
finalPrice.value = originalPrice.value;
|
|
||||||
reduceRation.value = 100;
|
|
||||||
}
|
|
||||||
const type = ref(3);
|
|
||||||
const emit = defineEmits(['saveNegotiation'])
|
|
||||||
const saveNegotiation = () => {
|
|
||||||
show.value = false;
|
|
||||||
emit('saveNegotiation', reduceRation.value)
|
|
||||||
}
|
|
||||||
const reduceRation =ref(0);
|
|
||||||
|
|
||||||
const reduceRationChangeHandler = (value: number) => {
|
|
||||||
if (!value){
|
|
||||||
reduceRation.value = 0;
|
|
||||||
finalPrice.value = originalPrice.value;
|
|
||||||
return
|
|
||||||
}
|
|
||||||
rationChangeHandler(reduceRation.value,false)
|
|
||||||
}
|
|
||||||
const rationChangeHandler = (ration:number,type:boolean) => {
|
|
||||||
let proportion = parseInt(ration.toString());
|
|
||||||
if (type){
|
|
||||||
proportion =100+proportion;
|
|
||||||
}
|
|
||||||
finalPrice.value = originalPrice.value * 100 * proportion/10000;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.negotiation-panel {
|
|
||||||
font-size: 16px;
|
|
||||||
height: 200px;
|
|
||||||
|
|
||||||
.price-input{
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.link-btn {
|
|
||||||
color: #409EFF;
|
|
||||||
margin-left: 10px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.disable {
|
|
||||||
color: #999;
|
|
||||||
margin-left: 10px;
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
|
|
||||||
.negotiation-type {
|
|
||||||
display: flex;
|
|
||||||
margin-top: 20px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
.btn {
|
|
||||||
font-size: 14px;
|
|
||||||
padding: 10px;
|
|
||||||
margin-left: 10px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
border: 1px solid #409EFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.active{
|
|
||||||
border: 1px solid #409EFF;
|
|
||||||
color: #409EFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
.bottom-input {
|
|
||||||
margin-top: 20px;
|
|
||||||
.add-price{
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
.btn{
|
|
||||||
font-size: 14px;
|
|
||||||
width: 100px;
|
|
||||||
padding: 10px;
|
|
||||||
text-align: center;
|
|
||||||
margin-left: 10px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
&:hover {
|
|
||||||
border: 1px solid #409EFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.reduce-price{
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
.btn{
|
|
||||||
font-size: 14px;
|
|
||||||
padding: 10px;
|
|
||||||
width: 100px;
|
|
||||||
margin-left: 10px;
|
|
||||||
text-align: center;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
&:hover {
|
|
||||||
border: 1px solid #409EFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -136,6 +136,7 @@ import UpLoad from "@/components/UpLoad.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 {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const ganderOptions = [
|
const ganderOptions = [
|
||||||
{
|
{
|
||||||
|
|
@ -256,7 +257,7 @@ const save = () => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
ruleFormRef.value.validate((valid: any) => {
|
ruleFormRef.value.validate((valid: any) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
post(apiConfig.OrganizationMemberSave, {data: form}).then(() => {
|
post(API.Organization.Member.Save, {data: form}).then(() => {
|
||||||
if(memberInfo.value.id){
|
if(memberInfo.value.id){
|
||||||
ElMessage.success('修改成功')
|
ElMessage.success('修改成功')
|
||||||
}else{
|
}else{
|
||||||
|
|
@ -278,7 +279,7 @@ const uploadRef = ref<any>('')
|
||||||
const getById = (id: any) => {
|
const getById = (id: any) => {
|
||||||
memberInfo.value = {}
|
memberInfo.value = {}
|
||||||
userInfo.value = {}
|
userInfo.value = {}
|
||||||
post("organization/member/getById", {id: id}).then((res: any) => {
|
post(API.Organization.Member.Get, {id: id}).then((res: any) => {
|
||||||
memberInfo.value = res.memberInfo
|
memberInfo.value = res.memberInfo
|
||||||
if (res.userInfo) {
|
if (res.userInfo) {
|
||||||
userInfo.value = res.userInfo
|
userInfo.value = res.userInfo
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import {ElMessage, ElNotification} from 'element-plus'
|
import {ElMessage, ElNotification} from 'element-plus'
|
||||||
import {loadConfig} from './config.ts'
|
import {loadConfig} from './config.ts'
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
let globalConfig: any = null
|
let globalConfig: any = null
|
||||||
let router;
|
let router;
|
||||||
// 添加初始化方法(在应用启动时调用)
|
// 添加初始化方法(在应用启动时调用)
|
||||||
|
|
@ -35,7 +36,7 @@ function post(path: string, data: any = {}, options: any = {}) {
|
||||||
resolve(data.data);
|
resolve(data.data);
|
||||||
}
|
}
|
||||||
else if (data.code == 301) {
|
else if (data.code == 301) {
|
||||||
router.push('/manager/login')
|
router.push(API.Common.ManagerUser.Login)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ const loginCore=async ()=>{
|
||||||
let token:any=await post(API.Common.ManagerUser.Login, {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)
|
localStorage.setItem('token', token)
|
||||||
try{
|
try{
|
||||||
await post(apiConfig.signIn, {mac: netWork.value.mac, ip: netWork.value.ip}, {catch_error: true})
|
await post(API.Common.Sign.SignIn, {mac: netWork.value.mac, ip: netWork.value.ip}, {catch_error: true})
|
||||||
}catch (e){
|
}catch (e){
|
||||||
ElMessage.warning("签到失败,将以非签到状态访问本系统")
|
ElMessage.warning("签到失败,将以非签到状态访问本系统")
|
||||||
}finally {
|
}finally {
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@ import {ElMessage} from "element-plus";
|
||||||
import {medTypeJson} from "@/assets/config/constants.ts";
|
import {medTypeJson} from "@/assets/config/constants.ts";
|
||||||
import {useWsStore} from "@/stores/wsStore.ts";
|
import {useWsStore} from "@/stores/wsStore.ts";
|
||||||
import type {Request, Response} from "@/utils/ws.ts";
|
import type {Request, Response} from "@/utils/ws.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const formData = ref<any>({
|
const formData = ref<any>({
|
||||||
patientInfo: {},
|
patientInfo: {},
|
||||||
|
|
@ -183,7 +184,7 @@ const saveAndCharge = () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const diagnosisSearchRef = ref()
|
const diagnosisSearchRef = ref()
|
||||||
const diagnosisSearchApi = "social/diagnose/search"
|
const diagnosisSearchApi = API.Social.Diagnose.Search
|
||||||
const diagnosisShowConfig = [
|
const diagnosisShowConfig = [
|
||||||
{
|
{
|
||||||
label: "诊断名称",
|
label: "诊断名称",
|
||||||
|
|
@ -332,7 +333,7 @@ const cardTypeList = ref<any>(Object.entries(psnCertTypes).map(([id, name]) => (
|
||||||
const doctorList = ref<any>([])
|
const doctorList = ref<any>([])
|
||||||
const sectionDoctorOption = ref<any>('')
|
const sectionDoctorOption = ref<any>('')
|
||||||
const list = () => {
|
const list = () => {
|
||||||
post(apiConfig.OrganizationMemberSearch, {query: {role: 1}}).then((res: any) => {
|
post(API.Charge.Order.List, {query: {role: 1}}).then((res: any) => {
|
||||||
doctorList.value = res
|
doctorList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,11 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
|
|
||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
post("organization/section/list", {page: 1, size: 10}).then((res:any)=>{
|
post(API.Organization.Section.List, {page: 1, size: 10}).then((res:any)=>{
|
||||||
tableData.value = res.list
|
tableData.value = res.list
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import PatientCard from "@/components/charge/PatientCard.vue";
|
import PatientCard from "@/components/charge/PatientCard.vue";
|
||||||
import ServiceDetail from "@/components/common/service/ServiceDetail.vue";
|
import ServiceDetail from "@/components/common/service/ServiceDetail.vue";
|
||||||
import GoodsDetail from "@/components/common/goods/GoodsDetail.vue";
|
import GoodsDetail from "@/components/common/goods/GoodsDetail.vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const curRegister = ref<any>()
|
const curRegister = ref<any>()
|
||||||
const registerId = ref()
|
const registerId = ref()
|
||||||
|
|
@ -100,7 +101,7 @@ const save = () => {
|
||||||
if (!formData.value.diagnosisDetail || JSON.parse(formData.value.diagnosisDetail).length == 0) {
|
if (!formData.value.diagnosisDetail || JSON.parse(formData.value.diagnosisDetail).length == 0) {
|
||||||
ElMessage.error("请填写诊断信息")
|
ElMessage.error("请填写诊断信息")
|
||||||
} else {
|
} else {
|
||||||
post(apiConfig.MedicalRecordSave, {data: data}).then((res: any) => {
|
post(API.Diagnosis.Base.Save, {data: data}).then((res: any) => {
|
||||||
ElMessage.success("接诊完毕,请到收费页面收费")
|
ElMessage.success("接诊完毕,请到收费页面收费")
|
||||||
debugger
|
debugger
|
||||||
medicalQueueRef.value?.changeCurItemOrStatus(res, 3);
|
medicalQueueRef.value?.changeCurItemOrStatus(res, 3);
|
||||||
|
|
@ -124,7 +125,7 @@ const clickItem = (item: any) => {
|
||||||
initFormData()
|
initFormData()
|
||||||
}
|
}
|
||||||
if (item.status == 3) {
|
if (item.status == 3) {
|
||||||
post(apiConfig.MedicalDetailByRegisId, {
|
post(API.Diagnosis.Base.GetByRegisId, {
|
||||||
regisId: item.id
|
regisId: item.id
|
||||||
}).then((res: any) => {
|
}).then((res: any) => {
|
||||||
formData.value = res.diagnosisMedicalRecord
|
formData.value = res.diagnosisMedicalRecord
|
||||||
|
|
@ -147,7 +148,7 @@ const clickItem = (item: any) => {
|
||||||
}
|
}
|
||||||
const medicalQueueRef = ref();
|
const medicalQueueRef = ref();
|
||||||
const cancelReception = () => {
|
const cancelReception = () => {
|
||||||
post(apiConfig.RegistrationChangeStatus, {id: registerId.value, status: 1}).then((res: any) => {
|
post(API.Patient.Registration.ChangeStatus, {id: registerId.value, status: 1}).then((res: any) => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
medicalQueueRef.value?.changeCurItemOrStatus(res, 1);
|
medicalQueueRef.value?.changeCurItemOrStatus(res, 1);
|
||||||
initFormData()
|
initFormData()
|
||||||
|
|
@ -170,7 +171,7 @@ const changeTab = (e: any) => {
|
||||||
}
|
}
|
||||||
const itemId = ref<any>('')
|
const itemId = ref<any>('')
|
||||||
const edit = () => {
|
const edit = () => {
|
||||||
post('registration/changeStatus', {id: registerId.value, status: 2}).then((res: any) => {
|
post(API.Patient.Registration.ChangeStatus, {id: registerId.value, status: 2}).then((res: any) => {
|
||||||
medicalQueueRef.value?.changeCurItemOrStatus(res, 2);
|
medicalQueueRef.value?.changeCurItemOrStatus(res, 2);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -206,7 +207,7 @@ const copyGoodsList = (item: any) => {
|
||||||
const seeDockerInfo = ref<any>()
|
const seeDockerInfo = ref<any>()
|
||||||
const getSeeDockerInfo = (newValue: any) => {
|
const getSeeDockerInfo = (newValue: any) => {
|
||||||
if (!registerId.value) return;
|
if (!registerId.value) return;
|
||||||
post('medical/record/getSeeDockerInfo', {regisId: newValue}).then((res: any) => {
|
post(API.Diagnosis.Base.GetRegistrationDetail, {regisId: newValue}).then((res: any) => {
|
||||||
seeDockerInfo.value = res
|
seeDockerInfo.value = res
|
||||||
formData.value.allergyHistory = res.patientInfo.allergyHistory;
|
formData.value.allergyHistory = res.patientInfo.allergyHistory;
|
||||||
formData.value.beforeMedicalHistory = res.patientInfo.beforeMedicalHistory;
|
formData.value.beforeMedicalHistory = res.patientInfo.beforeMedicalHistory;
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ import Calendar from "@/components/common/Calendar.vue";
|
||||||
import Panel from "@/components/common/Panel.vue";
|
import Panel from "@/components/common/Panel.vue";
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import {Search} from "@element-plus/icons-vue";
|
import {Search} from "@element-plus/icons-vue";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const dateName = ref<any>('挂号')
|
const dateName = ref<any>('挂号')
|
||||||
const selectDate = (date: any) => {
|
const selectDate = (date: any) => {
|
||||||
|
|
@ -140,7 +141,7 @@ const initDoctor = () => {
|
||||||
keyword: keyword.value,
|
keyword: keyword.value,
|
||||||
role: 1
|
role: 1
|
||||||
}
|
}
|
||||||
post(apiConfig.OrganizationMemberSearch, {query: query}).then((res: any) => {
|
post(API.Patient.Registration.List, {query: query}).then((res: any) => {
|
||||||
roleList.value = res
|
roleList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -158,7 +159,7 @@ const getPatientList = async () => {
|
||||||
listLoading.value = true
|
listLoading.value = true
|
||||||
id.value = null
|
id.value = null
|
||||||
try {
|
try {
|
||||||
const data: any = await post(apiConfig.RegistrationList, {
|
const data: any = await post(API.Patient.Registration.List, {
|
||||||
page: page.value,
|
page: page.value,
|
||||||
size: size.value,
|
size: size.value,
|
||||||
startDate: selectedDate.value[0],
|
startDate: selectedDate.value[0],
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,7 @@ import MemberEdit from "@/components/settings/MemberEdit.vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {formatDate} from "@/utils/dateUtils.ts";
|
import {formatDate} from "@/utils/dateUtils.ts";
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const isShow = ref(false)
|
const isShow = ref(false)
|
||||||
const tableData = ref<any>([]);
|
const tableData = ref<any>([]);
|
||||||
|
|
@ -145,7 +146,7 @@ const init = (() => {
|
||||||
})
|
})
|
||||||
const sectionList = ref<any>([]);
|
const sectionList = ref<any>([]);
|
||||||
const list = () => {
|
const list = () => {
|
||||||
post(apiConfig.OrganizationSectionAllList).then((res: any) => {
|
post(API.Organization.Section.AllList).then((res: any) => {
|
||||||
sectionList.value = res
|
sectionList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ import {post} from "@/utils/request.ts";
|
||||||
import {getToday, formatDateArray, getThisMonth} from "@/utils/dateUtils.ts";
|
import {getToday, formatDateArray, getThisMonth} from "@/utils/dateUtils.ts";
|
||||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||||
import {reconciliationResult} from "@/assets/config/constants.ts";
|
import {reconciliationResult} from "@/assets/config/constants.ts";
|
||||||
|
import {API} from "@/assets/config/API.ts";
|
||||||
|
|
||||||
const payTypeMapping = {
|
const payTypeMapping = {
|
||||||
1: "医保",
|
1: "医保",
|
||||||
|
|
@ -67,7 +68,7 @@ const dateChangeHandler = () => {
|
||||||
|
|
||||||
|
|
||||||
const getTableData = () => {
|
const getTableData = () => {
|
||||||
post(apiConfig.ChargeListChargeLog, {beginTime: date.value[0], endTime: date.value[1]}).then((res: any) => {
|
post(API.Charge.Log.List, {beginTime: date.value[0], endTime: date.value[1]}).then((res: any) => {
|
||||||
tableData.value = res
|
tableData.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue