dev
This commit is contained in:
parent
9d584330dc
commit
bd07d4af27
|
|
@ -6,6 +6,7 @@ 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";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const wsStore = useWsStore();
|
||||
const isReading = ref(false)
|
||||
|
|
@ -13,7 +14,7 @@ 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_db: any = await post(API.Common.Config.GetAll);
|
||||
let config: any = {}
|
||||
config.ACCESS_KEY = config_db.social_ACCESS_KEY;
|
||||
config.SECRETKEY = config_db.social_SECRETKEY;
|
||||
|
|
@ -63,7 +64,7 @@ const reciceMessage = (response: Response) => {
|
|||
getInfoFor1101(params)
|
||||
}
|
||||
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.mdtrtCertType = res.mdtrtCertType;
|
||||
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 {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||
import Edit from "@/components/registration/Edit.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const curItem = ref<any>({});
|
||||
const emit = defineEmits(['clickItem', 'getStatus'])
|
||||
|
|
@ -119,7 +120,7 @@ const init = async () => {
|
|||
query.value.endTime = getEndOfDay(selectedDate.value[1])
|
||||
loading.value = true
|
||||
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
|
||||
} catch {
|
||||
ChargeQueueList.value = []
|
||||
|
|
@ -162,7 +163,7 @@ const tab = (item: any) => {
|
|||
init()
|
||||
}
|
||||
const getTipCount = () => {
|
||||
post('statistics/getTipCount', {
|
||||
post(API.Statistics.GetQueueCount, {
|
||||
beginTime: query.value.beginTime,
|
||||
endTime: query.value.endTime
|
||||
}).then((res: any) => {
|
||||
|
|
|
|||
|
|
@ -30,19 +30,20 @@ import {apiConfig} from "@/assets/config/apiConfig.ts";
|
|||
import {getEndOfDay} from "@/utils/dateUtils.ts";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {ElMessage} from "element-plus";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const is_show = ref(false);
|
||||
const init = async () => {
|
||||
is_show.value = true
|
||||
try {
|
||||
let data: any = await post(apiConfig.RegistrationList, {
|
||||
let data: any = await post(API.Patient.Registration.List, {
|
||||
query: {
|
||||
status: 1,
|
||||
beginTime: new Date(),
|
||||
endTime: getEndOfDay(new Date())
|
||||
}
|
||||
}, {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
|
||||
patientId.value = res.patientInfoId
|
||||
})
|
||||
|
|
@ -50,7 +51,7 @@ const init = async () => {
|
|||
is_show.value = false
|
||||
}
|
||||
}
|
||||
const diagnosisSearchApi = "social/diagnose/search"
|
||||
const diagnosisSearchApi = API.Social.Diagnose.Search
|
||||
|
||||
interface ShowConfig {
|
||||
label: string;
|
||||
|
|
@ -84,7 +85,7 @@ const save = () => {
|
|||
itemList: [],
|
||||
goodsList: [],
|
||||
}
|
||||
post('medical/record/save', {data: data}).then((res: any) => {
|
||||
post(API.Diagnosis.Base.Save, {data: data}).then((res: any) => {
|
||||
ElMessage.success("快速接诊成功")
|
||||
is_show.value = false
|
||||
emit('close')
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ import {medTypeJson, priceBtnList} from "@/assets/config/constants.ts"
|
|||
import {useWsStore} from "@/stores/wsStore.ts";
|
||||
import PersonalPayment from "@/components/charge/PersonalPayment.vue";
|
||||
import {ElMessage} from "element-plus";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const wsStore = useWsStore();
|
||||
const socialCard = ref<any>({
|
||||
|
|
@ -91,9 +92,9 @@ const init = async (code: any, psnNo: any) => {
|
|||
selectedIndex.value = 0
|
||||
payType.value = 1
|
||||
}
|
||||
retailOrder.value = await post("charge/getByCode", {code: code});
|
||||
retailOrder.value = await post(API.Charge.Order.GetByCode, {code: code});
|
||||
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) {
|
||||
socialCard.value.data = result;
|
||||
socialCard.value.mdtrtCertType = result.mdtrtCertType;
|
||||
|
|
@ -126,7 +127,7 @@ const completeSettlement = () => {
|
|||
} else {
|
||||
//其他结算
|
||||
loading.value = true;
|
||||
post('charge/completeOrder', {
|
||||
post(API.Charge.Order.Complete, {
|
||||
id: retailOrder.value.id,
|
||||
payType: payType.value
|
||||
}, {catch_error: true}).then((res: any) => {
|
||||
|
|
@ -175,9 +176,9 @@ const socialSettlement = () => {
|
|||
insutype: socialCard.value.payInfo.selfpay_prop_type,
|
||||
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)
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -197,6 +197,7 @@ import {apiConfig} from "@/assets/config/apiConfig.ts";
|
|||
import {post} from "@/utils/request";
|
||||
import {Right} from "@element-plus/icons-vue";
|
||||
import {onMounted, ref} from "vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
|
||||
let logout = function () {
|
||||
|
|
@ -211,7 +212,7 @@ let logout = function () {
|
|||
)
|
||||
.then(() => {
|
||||
localStorage.removeItem('token')
|
||||
post(apiConfig.signOut).then((res: any) => {
|
||||
post(API.Common.Sign.SignOut).then((res: any) => {
|
||||
useRouter().push("/manager/login")
|
||||
})
|
||||
ElMessage({
|
||||
|
|
@ -228,7 +229,7 @@ onMounted(() => {
|
|||
})
|
||||
const username = ref<any>('')
|
||||
const getInfo = () => {
|
||||
post(apiConfig.managerUserVerify).then((res: any) => {
|
||||
post(API.Common.ManagerUser.Verify).then((res: any) => {
|
||||
username.value = res.username
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,16 +45,16 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="使用方法" width="200">
|
||||
<template #default="scope">
|
||||
<el-input v-model="usage" placeholder="请输入使用方法" style="width: 100px"></el-input>
|
||||
<el-popover
|
||||
placement="bottom"
|
||||
title="Title"
|
||||
title=""
|
||||
:width="200"
|
||||
trigger="click"
|
||||
>
|
||||
<template #default>
|
||||
<Usage></Usage>
|
||||
<template #reference>
|
||||
<el-input v-model="usage" placeholder="使用方法" style="width: 100px"></el-input>
|
||||
</template>
|
||||
<Usage :usageObj="usageObj"></Usage>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -132,7 +132,8 @@ import {post} from "@/utils/request.ts";
|
|||
import {ElMessage} from "element-plus";
|
||||
import {Delete} from "@element-plus/icons-vue";
|
||||
import Usage from "./goodsDetail/Usage.vue"
|
||||
import usageList from "@/assets/config/directory/drugMedcWayCode.json"
|
||||
import usageObj from "@/assets/config/directory/drugMedcWayCode.json"
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const props = defineProps({
|
||||
status: {
|
||||
|
|
@ -244,7 +245,7 @@ const focus = (e: any) => {
|
|||
const hilistInfo = ref<any>({})
|
||||
const getHilistInfo = (item: any) => {
|
||||
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) {
|
||||
hilistInfo.value = {}
|
||||
return
|
||||
|
|
|
|||
|
|
@ -1,9 +1,20 @@
|
|||
<script setup lang="ts">
|
||||
import {defineProps, onMounted} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
usageObj: {
|
||||
type: Object,
|
||||
default: () => []
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<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>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ import {post} from "@/utils/request.ts";
|
|||
import chrgitm_lv from "@/assets/config/directory/chrgitmLv.json"
|
||||
import {ElMessage} from "element-plus"
|
||||
import {Delete} from "@element-plus/icons-vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const props = defineProps({
|
||||
status: {
|
||||
|
|
@ -159,7 +160,7 @@ const popoverRef = ref<any>(null);
|
|||
const itemInfo = ref<any>({});
|
||||
const show = (item: any) => {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import {onMounted, onUnmounted, ref} from "vue";
|
|||
import * as echarts from "echarts";
|
||||
import {getThisWeek} from "@/utils/dateUtils.ts";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
const echart = ref<HTMLElement | null>(null)
|
||||
let myChart: echarts.ECharts | null = null;
|
||||
onMounted(()=>{
|
||||
|
|
@ -22,7 +23,7 @@ const handleResize = () => {
|
|||
};
|
||||
const getPersonPayOverview = () => {
|
||||
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
|
||||
commonData.value = res.commonPrice
|
||||
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 {nextTick, onMounted, ref} from "vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
onMounted(() => {
|
||||
getInventoryWarning()
|
||||
|
|
@ -16,7 +17,7 @@ const openInventoryWarnDetail = () => {
|
|||
|
||||
}
|
||||
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)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import Panel from "@/components/common/Panel.vue";
|
|||
import {onMounted, ref} from "vue";
|
||||
import {formatDateArray, getEndOfDay, getThisMonth, getThisWeek, getToday, getYesterday} from "@/utils/dateUtils.ts";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
onMounted(() => {
|
||||
getRevenueOverview()
|
||||
|
|
@ -55,7 +56,7 @@ const getDateRange = () => {
|
|||
}
|
||||
const getRevenueOverview = () => {
|
||||
let date=getDateRange()
|
||||
post("statistics/getRevenueOverview", {
|
||||
post(API.Statistics.GetRevenueOverview, {
|
||||
beginTime: date.begin,
|
||||
endTime: date.end}).then((res: any) => {
|
||||
if (res.payTypeRevenue.length === 0) return
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import Panel from "@/components/common/Panel.vue";
|
|||
import {nextTick, onMounted, ref} from "vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import ExpireWarnDetail from "@/components/home/index/Dialog/ExpireWarnDetail.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const expireWarnDetailRef = ref()
|
||||
const openExpireWarnDetail = () => {
|
||||
|
|
@ -18,7 +19,7 @@ const expireDateWarningListSrc = ref<any>([]);
|
|||
const expireDateWarningList = ref<any>([]);
|
||||
|
||||
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)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
<script setup lang="ts">
|
||||
import {ref} from "vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const state = ref([])
|
||||
const options = ref([])
|
||||
const selectRef = ref();
|
||||
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;
|
||||
let list = res;
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
|
|
|
|||
|
|
@ -139,11 +139,11 @@
|
|||
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import {onMounted, ref, unref} from "vue";
|
||||
import {ref} from "vue";
|
||||
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import CloseBtn from "@/components/CloseBtn.vue";
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const isShow = ref<any>(false)
|
||||
const emit = defineEmits(['close'])
|
||||
|
|
@ -192,7 +192,7 @@ const findIndexForTableList = (goodId: any) => {
|
|||
}
|
||||
const goodsSelectCallBack = (inventory: any) => {
|
||||
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.minPackagingUnit = res.minPackagingUnit
|
||||
inventory.trdnFlag = res.trdnFlag
|
||||
|
|
@ -271,7 +271,7 @@ const changeOutNumber = (row: any) => {
|
|||
row.totalFragmentNumber = totalOutFragmentNumber;
|
||||
}
|
||||
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()
|
||||
})
|
||||
|
||||
|
|
@ -283,13 +283,13 @@ const init = () => {
|
|||
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;
|
||||
})
|
||||
}
|
||||
const managerUserList: any = ref([])
|
||||
const getManagerUserList = () => {
|
||||
post("manager/user/list", {}).then((res: any) => {
|
||||
post(API.Common.ManagerUser.List, {}).then((res: any) => {
|
||||
managerUserList.value = res
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ import {onMounted, ref, defineProps} from "vue";
|
|||
import {post} from "@/utils/request.ts";
|
||||
import CloseBtn from "@/components/CloseBtn.vue";
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const props = defineProps({
|
||||
id: {
|
||||
|
|
@ -207,7 +208,7 @@ const addLine = (row: any) => {
|
|||
})
|
||||
}
|
||||
const getUserInfo = () => {
|
||||
post("manager/user/verify").then((res: any) => {
|
||||
post(API.Common.ManagerUser.Verify).then((res: any) => {
|
||||
formData.value.useUserId = res.id;
|
||||
formData.value.name = res.name;
|
||||
formData.value.username = res.username;
|
||||
|
|
@ -215,7 +216,7 @@ const getUserInfo = () => {
|
|||
}
|
||||
const detail = (id: any) => {
|
||||
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);
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@ import {ref} from "vue";
|
|||
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {ElMessage} from "element-plus";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const form = ref<any>({
|
||||
remark: ""
|
||||
|
|
@ -237,7 +238,7 @@ let setChange = function (row: any) {
|
|||
row.change.fragmentNumber = diff % row.minPackagingNumber
|
||||
}
|
||||
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 = [];
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
let inventoryGoods = list[i];
|
||||
|
|
@ -271,7 +272,7 @@ let addLine = (row: any) => {
|
|||
})
|
||||
}
|
||||
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 = {
|
||||
goodsId: res.id,
|
||||
name: res.name,
|
||||
|
|
@ -315,7 +316,7 @@ let addRow = (goodsId: number) => {
|
|||
})
|
||||
}
|
||||
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('保存成功')
|
||||
exit()
|
||||
})
|
||||
|
|
@ -339,12 +340,12 @@ defineExpose({init})
|
|||
|
||||
const managerUserList: any = ref([])
|
||||
const getManagerUserList = () => {
|
||||
post("manager/user/list", {}).then((res: any) => {
|
||||
post(API.Common.ManagerUser.List, {}).then((res: any) => {
|
||||
managerUserList.value = res
|
||||
})
|
||||
}
|
||||
const getUserInfo = () => {
|
||||
post("manager/user/verify", null).then((res: any) => {
|
||||
post(API.Common.ManagerUser.Verify, null).then((res: any) => {
|
||||
form.value.useUserId = res.id;
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ import {onMounted,defineProps} from "vue";
|
|||
import {post} from "@/utils/request.ts";
|
||||
import {ref} from "vue";
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
const props = defineProps({
|
||||
id: {
|
||||
type: String,
|
||||
|
|
@ -205,7 +206,7 @@ let exit = () => {
|
|||
}
|
||||
const detail = (id: any) => {
|
||||
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);
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ import {post} from "@/utils/request.ts";
|
|||
import {ElMessageBox} from "element-plus";
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {ArrowUpBold, ArrowDownBold, Delete, Edit} from "@element-plus/icons-vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const props = defineProps({
|
||||
type: {
|
||||
|
|
@ -61,7 +62,7 @@ interface CateItem {
|
|||
|
||||
const cateList = ref<CateItem[]>([]);
|
||||
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
|
||||
})
|
||||
}
|
||||
|
|
@ -88,7 +89,7 @@ const close = () => {
|
|||
const isShow = ref<any>(false)
|
||||
const getCountByCateId = (cateId: any) => {
|
||||
let count = 0;
|
||||
post("goods/goods/getByCateId", {cateId: cateId}).then((res: any) => {
|
||||
post(API.Goods.Base.GetByCateId, {cateId: cateId}).then((res: any) => {
|
||||
count = res
|
||||
ElMessageBox.confirm(
|
||||
`有${count}个西药属于该二级分类,删除后将一同清空西药的分类。是否确定删除?`,
|
||||
|
|
@ -106,7 +107,7 @@ const getCountByCateId = (cateId: any) => {
|
|||
|
||||
}
|
||||
const del = async (id: any) => {
|
||||
await post("goods/cate/del", {id})
|
||||
await post(API.Goods.Cate.Del, {id})
|
||||
getCateList()
|
||||
}
|
||||
const saveDo = async () => {
|
||||
|
|
@ -118,7 +119,7 @@ const saveDo = async () => {
|
|||
|
||||
})
|
||||
if (cateList.value.length === 0) return
|
||||
await post("goods/cate/save", {cateList: cateList.value})
|
||||
await post(API.Goods.Cate.Save, {cateList: cateList.value})
|
||||
getCateList()
|
||||
}
|
||||
const init = () => {
|
||||
|
|
@ -135,10 +136,6 @@ const removeItemByIndex = (index: number) => {
|
|||
cateList.value.splice(index, 1);
|
||||
}
|
||||
}
|
||||
// const save = async ()=>{
|
||||
// await post("goods/cate/save",cateList.value)
|
||||
// getCateList()
|
||||
// }
|
||||
|
||||
const add = () => {
|
||||
const newCate: CateItem = {
|
||||
|
|
|
|||
|
|
@ -454,6 +454,7 @@ import Divider from "@/components/Divider.vue";
|
|||
import UnitSelector from "@/components/UnitSelector.vue";
|
||||
import SocialInfo from "@/components/inventory/goods/SocialInfo.vue";
|
||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
|
||||
let _type = ref(0);
|
||||
|
|
@ -624,7 +625,7 @@ const init = (type: number, id: number) => {
|
|||
isShow.value = true
|
||||
_type.value = type;
|
||||
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.tags = edit_data.value.tags ? edit_data.value.tags.split(",") : null;
|
||||
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.idCode = idCodeList.value.join(",");
|
||||
data.type = _type.value;
|
||||
post("goods/goods/save", data).then((res: any) => {
|
||||
post(API.Goods.Base.Save, data).then((res: any) => {
|
||||
ElMessage.success('保存成功')
|
||||
if (isClose) {
|
||||
//关闭该页面
|
||||
|
|
@ -721,7 +722,7 @@ let save = async (isClose: Boolean) => {
|
|||
//获取分类列表
|
||||
const cate_list: any = ref([]);
|
||||
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
|
||||
})
|
||||
}
|
||||
|
|
@ -758,7 +759,7 @@ const returnInit = () => {
|
|||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).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 getHilistInfo = () => {
|
||||
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
|
||||
type.value = res.type
|
||||
})
|
||||
|
|
@ -824,7 +825,7 @@ const disableSale = () => {
|
|||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).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("下架成功")
|
||||
exit()
|
||||
})
|
||||
|
|
@ -839,7 +840,7 @@ const enableSale = () => {
|
|||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).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("启用成功")
|
||||
exit()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -30,12 +30,13 @@
|
|||
<script setup lang="ts">
|
||||
import {ref} from "vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
const packagingUnit = ref();
|
||||
const minPackagingUnit = ref();
|
||||
const show = ref(false)
|
||||
const list = ref()
|
||||
const init = (goodId: any) => {
|
||||
post("inventory/goods/getListByGoodsId", {goodsId: goodId}).then((res) => {
|
||||
post(API.Inventory.Goods.ListByGoodsId, {goodsId: goodId}).then((res) => {
|
||||
list.value = res
|
||||
if (list.value.length == 0) return
|
||||
packagingUnit.value = list.value[0].packagingUnit
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@
|
|||
import {post} from "@/utils/request.ts";
|
||||
import {onMounted, ref, defineProps} from "vue";
|
||||
import {Minus, Plus, Setting} from "@element-plus/icons-vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const props = defineProps({
|
||||
id: {
|
||||
|
|
@ -126,7 +127,7 @@ onMounted(() => {
|
|||
})
|
||||
const init = () => {
|
||||
if (!props.id) return
|
||||
post("inventory/goods/getInventoryStatistics", {
|
||||
post(API.Inventory.Goods.Statistics, {
|
||||
goodsId: props.id,
|
||||
startDate: formatDate(dateList.value[0]),
|
||||
endDate: formatDate(dateList.value[1])
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@
|
|||
import {onMounted, ref, defineProps} from "vue";
|
||||
import {post} from '@/utils/request.ts'
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
let current_search_data: any = null;
|
||||
let keyword = ref('');
|
||||
|
|
@ -146,7 +147,7 @@ let confirm = () => {
|
|||
let isloading = ref(false);
|
||||
let search_social = () => {
|
||||
isloading.value = true;
|
||||
post("social/directory/search", {
|
||||
post(API.Social.Directory.Search, {
|
||||
keyword: keyword.value,
|
||||
produce: produce.value,
|
||||
page: current_page.value,
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@
|
|||
<script setup lang="ts">
|
||||
import {onMounted, ref, watch} from "vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
interface HilistInfo {
|
||||
type?: number;
|
||||
|
|
@ -61,7 +62,7 @@ const hilistCode = defineModel<string>();
|
|||
const hilistInfo = ref<HilistInfo>({});
|
||||
const getHilistInfo = () => {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -220,6 +220,7 @@ import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
|||
import CheckoutDetail from "@/components/inventory/CheckoutDetail.vue";
|
||||
import TraceabilityCodeInput from "@/components/inventory/purchase/TraceabilityCodeInput.vue";
|
||||
import {Plus, Delete} from "@element-plus/icons-vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const orderForm = ref()
|
||||
const checkoutDetailRef = ref<any>(false);
|
||||
|
|
@ -355,7 +356,7 @@ let confirm = async () => {
|
|||
inventoryOrderGoodsList: JSON.parse(JSON.stringify(table_list.value))
|
||||
}
|
||||
isLoading.value = true
|
||||
post("inventory/order/create", data).then((res: any) => {
|
||||
post(API.Inventory.Order.Create, data).then((res: any) => {
|
||||
isLoading.value = false
|
||||
exit()
|
||||
})
|
||||
|
|
@ -393,13 +394,13 @@ const getSupplierList = () => {
|
|||
const query = {
|
||||
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
|
||||
})
|
||||
}
|
||||
const userInfo = ref<any>({})
|
||||
const getUserInfo = () => {
|
||||
post("manager/user/verify", null).then((res: any) => {
|
||||
post(API.Common.ManagerUser.Verify, null).then((res: any) => {
|
||||
userInfo.value = res
|
||||
inventory_order_data.value.managerUserId = res.id
|
||||
})
|
||||
|
|
@ -428,7 +429,7 @@ const init = (orderInfo: any,goodList: any) => {
|
|||
}
|
||||
const managerUserList: any = ref([])
|
||||
const getManagerUserList = () => {
|
||||
post("manager/user/list", {}).then((res: any) => {
|
||||
post(API.Common.ManagerUser.List, {}).then((res: any) => {
|
||||
managerUserList.value = res
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -233,6 +233,7 @@ import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
|||
import CloseBtn from "@/components/CloseBtn.vue";
|
||||
import AddSupplier from "@/components/inventory/supplier/AddSupplier.vue";
|
||||
import {Plus} from "@element-plus/icons-vue"
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const props = defineProps({
|
||||
code: {
|
||||
|
|
@ -265,7 +266,7 @@ const saveGoodEdit = (row: any) => {
|
|||
const list = [];
|
||||
list.push(row);
|
||||
isLoading.value = true
|
||||
post("inventory/goods/update", {list: list})
|
||||
post(API.Inventory.Goods.Update, {list: list})
|
||||
.then((res) => {
|
||||
row.isEdit = false
|
||||
getOrderDetail()
|
||||
|
|
@ -307,7 +308,7 @@ const returnableAll = () => {
|
|||
}
|
||||
const returnableDo = (idList: any) => {
|
||||
isLoading.value = true
|
||||
post("inventory/order/returnable", {idList: idList}).then((res) => {
|
||||
post(API.Inventory.Order.Refund, {idList: idList}).then((res) => {
|
||||
getOrderDetail()
|
||||
emit('updateOrderDetail')
|
||||
isLoading.value = false
|
||||
|
|
@ -315,7 +316,7 @@ const returnableDo = (idList: any) => {
|
|||
}
|
||||
const saveOrderEdit = () => {
|
||||
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
|
||||
getOrderDetail()
|
||||
emit('updateOrderDetail')
|
||||
|
|
@ -365,12 +366,12 @@ const getSupplierList = () => {
|
|||
const query = {
|
||||
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
|
||||
})
|
||||
}
|
||||
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
|
||||
table_list.value = res.inventoryOrderGoodsList
|
||||
})
|
||||
|
|
@ -382,7 +383,7 @@ const addOneGoods = (row: any) => {
|
|||
return
|
||||
}
|
||||
isLoading.value = true
|
||||
post("inventory/order/addOneGoods", {data: data}).then(
|
||||
post(API.Inventory.Order.AddGoods, {data: data}).then(
|
||||
(res: any) => {
|
||||
getOrderDetail()
|
||||
emit('updateOrderDetail')
|
||||
|
|
@ -392,7 +393,7 @@ const addOneGoods = (row: any) => {
|
|||
}
|
||||
const managerUserList: any = ref([])
|
||||
const getManagerUserList = () => {
|
||||
post("manager/user/list", {}).then((res: any) => {
|
||||
post(API.Common.ManagerUser.List, {}).then((res: any) => {
|
||||
managerUserList.value = res
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import {ref} from "vue";
|
|||
import {post} from "@/utils/request.ts";
|
||||
import CloseBtn from "@/components/CloseBtn.vue";
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const formData = ref({
|
||||
name: null,
|
||||
|
|
@ -78,7 +79,7 @@ const save = () => {
|
|||
errorMsg.value = '供货商名称不能为空'
|
||||
return
|
||||
}
|
||||
post("inventory/supplier/save", {inventorySupplier: formData.value}).then((res: any) => {
|
||||
post(API.Inventory.Supplier.Save, {inventorySupplier: formData.value}).then((res: any) => {
|
||||
close()
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import {ref, defineEmits, defineProps} from 'vue'
|
|||
import {ElFormItem} from "element-plus";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const isExchange = defineModel()
|
||||
const emit = defineEmits(['close'])
|
||||
|
|
@ -95,7 +96,7 @@ const reduceIntegral = () => {
|
|||
// 如果验证通过,发送请求
|
||||
data.value.integral = data.value.integral * -1
|
||||
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();
|
||||
close()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@
|
|||
import {ref, defineEmits, defineProps, onMounted} from 'vue'
|
||||
import {post} from "@/utils/request.ts";
|
||||
import Mask from "@/components/common/Mask.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const isFlowingWater = defineModel()
|
||||
const props = defineProps({
|
||||
|
|
@ -80,7 +81,7 @@ const changePage = (page: any) => {
|
|||
pageSize: 20,
|
||||
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)
|
||||
})
|
||||
}
|
||||
|
|
@ -92,7 +93,7 @@ const init = (id: any) => {
|
|||
pageSize: 10,
|
||||
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)
|
||||
total.value = res.total_count
|
||||
})
|
||||
|
|
|
|||
|
|
@ -215,6 +215,7 @@ import {formatDate} from "@/utils/dateUtils.ts";
|
|||
import CardDefault from "@/components/registration/CardDefault.vue";
|
||||
import {getKey} from "@/utils/discrotyUtil.ts";
|
||||
import insutypes from "@/assets/config/directory/insutypes.json";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
|
||||
const ruleFormRef = ref<FormInstance>()
|
||||
|
|
@ -354,11 +355,11 @@ const submitForm = async () => {
|
|||
if (valid) {
|
||||
ruleForm.value.birthday = formatDate(ruleForm.value.birthday)
|
||||
if (ruleForm.value.id) {
|
||||
post("vip/vip/update", {vipInfo: ruleForm.value}).then(() => {
|
||||
post(API.Patient.Base.Update, {vipInfo: ruleForm.value}).then(() => {
|
||||
close()
|
||||
})
|
||||
} else {
|
||||
post("vip/vip/create", {vipInfo: ruleForm.value}).then(() => {
|
||||
post(API.Patient.Base.Create, {vipInfo: ruleForm.value}).then(() => {
|
||||
close()
|
||||
})
|
||||
}
|
||||
|
|
@ -399,14 +400,14 @@ const init = (_id: any) => {
|
|||
ruleForm.value = {}
|
||||
return
|
||||
} 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.area = JSON.parse(ruleForm.value.area)
|
||||
ruleForm.value.levelId = ruleForm.value.levelId == 0 ? null : ruleForm.value.levelId
|
||||
ruleForm.value.certType=Number(ruleForm.value.certType)
|
||||
ruleForm.value.nation=Number(ruleForm.value.nation)||''
|
||||
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
|
||||
})
|
||||
})
|
||||
|
|
@ -416,7 +417,7 @@ const init = (_id: any) => {
|
|||
}
|
||||
const levelList = ref<any>([])
|
||||
const getLevelConfig = () => {
|
||||
post("vip/vipLevel/list").then((res: any) => {
|
||||
post(API.Patient.LevelConfig.List).then((res: any) => {
|
||||
levelList.value = res
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,18 +18,19 @@
|
|||
import Mask from "@/components/common/Mask.vue";
|
||||
import {onMounted, ref} from "vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
const show = ref(false);
|
||||
const options = ref<any>([])
|
||||
const levelId = ref(0);
|
||||
const curVip =ref<any>({})
|
||||
const getLevelConfig = () => {
|
||||
post("vip/vipLevel/list").then((res: any) => {
|
||||
post(API.Patient.LevelConfig.List).then((res: any) => {
|
||||
options.value = res
|
||||
})
|
||||
}
|
||||
const emit = defineEmits(['close'])
|
||||
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()
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ interface ShowConfig {
|
|||
prop: string;
|
||||
}
|
||||
|
||||
const diagnosisSearchApi = apiConfig.SocialDiagnoseSearch
|
||||
const diagnosisSearchApi = API.Social.Diagnose.Search
|
||||
const diagnosisShowConfig: ShowConfig[] = [
|
||||
{
|
||||
label: "诊断名称",
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import DiseaseDetails from './DiseaseDetails.vue';
|
|||
import {post} from "@/utils/request.ts";
|
||||
import {ref} from "vue";
|
||||
import {formatListTime} from "@/utils/dateUtils.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const props = defineProps({
|
||||
status: {
|
||||
|
|
@ -36,7 +37,7 @@ const props = defineProps({
|
|||
})
|
||||
const list = ref<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
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ import {formatListTime, getToday, getThisMonth, getCurrentDate, getEndOfDay} fro
|
|||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||
import {ElMessageBox} from "element-plus";
|
||||
import {Calendar} from '@element-plus/icons-vue'
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const curStatus = ref(1)
|
||||
const search = ref('')
|
||||
|
|
@ -117,7 +118,7 @@ onUnmounted(() => {
|
|||
const initList = async () => {
|
||||
selectedDateStr.value = setDateTip()
|
||||
try {
|
||||
let data: any = await post(apiConfig.RegistrationList, {
|
||||
let data: any = await post(API.Patient.Registration.AllList, {
|
||||
query: {
|
||||
status: curStatus.value,
|
||||
beginTime: selectedDate.value,
|
||||
|
|
@ -144,7 +145,7 @@ const init = async () => {
|
|||
clickLi(null)
|
||||
loading.value = true
|
||||
try {
|
||||
let data: any = await post(apiConfig.RegistrationListByType, {
|
||||
let data: any = await post(API.Patient.Registration.ListByType, {
|
||||
query: {
|
||||
status: curStatus.value,
|
||||
beginTime: selectedDate.value,
|
||||
|
|
@ -168,7 +169,7 @@ const init = async () => {
|
|||
initStatusList()
|
||||
}
|
||||
const initStatusList = () => {
|
||||
post(apiConfig.StatisticsGetTipCount, {
|
||||
post(API.Patient.Registration.ChangeStatus, {
|
||||
beginTime: selectedDate.value,
|
||||
endTime: getEndOfDay(new Date(selectedDate.value))
|
||||
}).then((res: any) => {
|
||||
|
|
@ -192,7 +193,7 @@ const clickLi = (item: any, showBox: any = true) => {
|
|||
return
|
||||
}
|
||||
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
|
||||
curItem.value = res
|
||||
initStatusList()
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ 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";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const wsStore = useWsStore();
|
||||
const isReading = ref(false)
|
||||
|
|
@ -76,7 +77,7 @@ const getInfoFor1101 = (params: any) => {
|
|||
duration: 500,
|
||||
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)
|
||||
socialCard.value.data = res;
|
||||
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 Quick from "@/components/charge/RecordsLog/Quick.vue";
|
||||
import {getCurrentTime, getToday} from "@/utils/dateUtils.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const height = ref(570)
|
||||
const certTypeList = ref<any>([])
|
||||
|
|
@ -311,7 +312,7 @@ const save = () => {
|
|||
|
||||
}
|
||||
if (edit_data.value.id) {
|
||||
post(apiConfig.RegistrationEdit, {
|
||||
post(API.Patient.Base.Update, {
|
||||
data: data, mdtrtCertNo: socialCard.value?.mdtrtCertNo,
|
||||
mdtrtCertType: socialCard.value?.mdtrtCertType
|
||||
}).then(() => {
|
||||
|
|
@ -319,7 +320,7 @@ const save = () => {
|
|||
close()
|
||||
})
|
||||
} else {
|
||||
post(apiConfig.RegistrationAdd, {
|
||||
post(API.Patient.Base.Create, {
|
||||
data: data,
|
||||
mdtrtCertNo: socialCard.value?.mdtrtCertNo,
|
||||
mdtrtCertType: socialCard.value?.mdtrtCertType
|
||||
|
|
@ -341,7 +342,7 @@ const save = () => {
|
|||
}
|
||||
//退出挂号
|
||||
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('退号成功')
|
||||
close()
|
||||
})
|
||||
|
|
@ -441,7 +442,7 @@ const hide = () => {
|
|||
const sectionList = ref<any>([])
|
||||
const getSectionList = () => {
|
||||
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
|
||||
if (res.length > 0) {
|
||||
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 Mask from "@/components/common/Mask.vue";
|
||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const ganderOptions = [
|
||||
{
|
||||
|
|
@ -256,7 +257,7 @@ const save = () => {
|
|||
if (valid) {
|
||||
ruleFormRef.value.validate((valid: any) => {
|
||||
if (valid) {
|
||||
post(apiConfig.OrganizationMemberSave, {data: form}).then(() => {
|
||||
post(API.Organization.Member.Save, {data: form}).then(() => {
|
||||
if(memberInfo.value.id){
|
||||
ElMessage.success('修改成功')
|
||||
}else{
|
||||
|
|
@ -278,7 +279,7 @@ const uploadRef = ref<any>('')
|
|||
const getById = (id: any) => {
|
||||
memberInfo.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
|
||||
if (res.userInfo) {
|
||||
userInfo.value = res.userInfo
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import axios from "axios";
|
||||
import {ElMessage, ElNotification} from 'element-plus'
|
||||
import {loadConfig} from './config.ts'
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
let globalConfig: any = null
|
||||
let router;
|
||||
// 添加初始化方法(在应用启动时调用)
|
||||
|
|
@ -35,7 +36,7 @@ function post(path: string, data: any = {}, options: any = {}) {
|
|||
resolve(data.data);
|
||||
}
|
||||
else if (data.code == 301) {
|
||||
router.push('/manager/login')
|
||||
router.push(API.Common.ManagerUser.Login)
|
||||
return;
|
||||
}
|
||||
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})
|
||||
localStorage.setItem('token', token)
|
||||
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){
|
||||
ElMessage.warning("签到失败,将以非签到状态访问本系统")
|
||||
}finally {
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ import {ElMessage} from "element-plus";
|
|||
import {medTypeJson} from "@/assets/config/constants.ts";
|
||||
import {useWsStore} from "@/stores/wsStore.ts";
|
||||
import type {Request, Response} from "@/utils/ws.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const formData = ref<any>({
|
||||
patientInfo: {},
|
||||
|
|
@ -183,7 +184,7 @@ const saveAndCharge = () => {
|
|||
})
|
||||
}
|
||||
const diagnosisSearchRef = ref()
|
||||
const diagnosisSearchApi = "social/diagnose/search"
|
||||
const diagnosisSearchApi = API.Social.Diagnose.Search
|
||||
const diagnosisShowConfig = [
|
||||
{
|
||||
label: "诊断名称",
|
||||
|
|
@ -332,7 +333,7 @@ const cardTypeList = ref<any>(Object.entries(psnCertTypes).map(([id, name]) => (
|
|||
const doctorList = ref<any>([])
|
||||
const sectionDoctorOption = ref<any>('')
|
||||
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
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,10 +32,11 @@
|
|||
<script lang="ts" setup>
|
||||
import {ref} from "vue";
|
||||
import {post} from "@/utils/request.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
|
||||
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
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ import {apiConfig} from "@/assets/config/apiConfig.ts";
|
|||
import PatientCard from "@/components/charge/PatientCard.vue";
|
||||
import ServiceDetail from "@/components/common/service/ServiceDetail.vue";
|
||||
import GoodsDetail from "@/components/common/goods/GoodsDetail.vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const curRegister = ref<any>()
|
||||
const registerId = ref()
|
||||
|
|
@ -100,7 +101,7 @@ const save = () => {
|
|||
if (!formData.value.diagnosisDetail || JSON.parse(formData.value.diagnosisDetail).length == 0) {
|
||||
ElMessage.error("请填写诊断信息")
|
||||
} else {
|
||||
post(apiConfig.MedicalRecordSave, {data: data}).then((res: any) => {
|
||||
post(API.Diagnosis.Base.Save, {data: data}).then((res: any) => {
|
||||
ElMessage.success("接诊完毕,请到收费页面收费")
|
||||
debugger
|
||||
medicalQueueRef.value?.changeCurItemOrStatus(res, 3);
|
||||
|
|
@ -124,7 +125,7 @@ const clickItem = (item: any) => {
|
|||
initFormData()
|
||||
}
|
||||
if (item.status == 3) {
|
||||
post(apiConfig.MedicalDetailByRegisId, {
|
||||
post(API.Diagnosis.Base.GetByRegisId, {
|
||||
regisId: item.id
|
||||
}).then((res: any) => {
|
||||
formData.value = res.diagnosisMedicalRecord
|
||||
|
|
@ -147,7 +148,7 @@ const clickItem = (item: any) => {
|
|||
}
|
||||
const medicalQueueRef = ref();
|
||||
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(() => {
|
||||
medicalQueueRef.value?.changeCurItemOrStatus(res, 1);
|
||||
initFormData()
|
||||
|
|
@ -170,7 +171,7 @@ const changeTab = (e: any) => {
|
|||
}
|
||||
const itemId = ref<any>('')
|
||||
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);
|
||||
})
|
||||
}
|
||||
|
|
@ -206,7 +207,7 @@ const copyGoodsList = (item: any) => {
|
|||
const seeDockerInfo = ref<any>()
|
||||
const getSeeDockerInfo = (newValue: any) => {
|
||||
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
|
||||
formData.value.allergyHistory = res.patientInfo.allergyHistory;
|
||||
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 {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||
import {Search} from "@element-plus/icons-vue";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const dateName = ref<any>('挂号')
|
||||
const selectDate = (date: any) => {
|
||||
|
|
@ -140,7 +141,7 @@ const initDoctor = () => {
|
|||
keyword: keyword.value,
|
||||
role: 1
|
||||
}
|
||||
post(apiConfig.OrganizationMemberSearch, {query: query}).then((res: any) => {
|
||||
post(API.Patient.Registration.List, {query: query}).then((res: any) => {
|
||||
roleList.value = res
|
||||
})
|
||||
}
|
||||
|
|
@ -158,7 +159,7 @@ const getPatientList = async () => {
|
|||
listLoading.value = true
|
||||
id.value = null
|
||||
try {
|
||||
const data: any = await post(apiConfig.RegistrationList, {
|
||||
const data: any = await post(API.Patient.Registration.List, {
|
||||
page: page.value,
|
||||
size: size.value,
|
||||
startDate: selectedDate.value[0],
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ import MemberEdit from "@/components/settings/MemberEdit.vue";
|
|||
import {post} from "@/utils/request.ts";
|
||||
import {formatDate} from "@/utils/dateUtils.ts";
|
||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const isShow = ref(false)
|
||||
const tableData = ref<any>([]);
|
||||
|
|
@ -145,7 +146,7 @@ const init = (() => {
|
|||
})
|
||||
const sectionList = ref<any>([]);
|
||||
const list = () => {
|
||||
post(apiConfig.OrganizationSectionAllList).then((res: any) => {
|
||||
post(API.Organization.Section.AllList).then((res: any) => {
|
||||
sectionList.value = res
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ import {post} from "@/utils/request.ts";
|
|||
import {getToday, formatDateArray, getThisMonth} from "@/utils/dateUtils.ts";
|
||||
import {apiConfig} from "@/assets/config/apiConfig.ts";
|
||||
import {reconciliationResult} from "@/assets/config/constants.ts";
|
||||
import {API} from "@/assets/config/API.ts";
|
||||
|
||||
const payTypeMapping = {
|
||||
1: "医保",
|
||||
|
|
@ -67,7 +68,7 @@ const dateChangeHandler = () => {
|
|||
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue