This commit is contained in:
ChenQiuYu 2025-04-28 10:47:56 +08:00
parent 38d8aa9090
commit 2a6e0dcdcd
6 changed files with 292 additions and 219 deletions

View File

@ -6,9 +6,18 @@ let _width = ref(0);
let _height = ref(0); let _height = ref(0);
let _isShow = ref(false); let _isShow = ref(false);
let _close = ref(true); let _close = ref(true);
const {width, height, isShow, title, close} = defineProps(['width', 'height', 'isShow', 'title', 'close']); let _showFooter = ref(false);
const {
width,
height,
isShow,
title,
close,
showFooter
} = defineProps(['width', 'height', 'isShow', 'title', 'close', 'showFooter']);
_isShow.value = isShow == null ? false : isShow; _isShow.value = isShow == null ? false : isShow;
_showFooter.value = showFooter == null ? false : showFooter;
_width.value = width == null ? 1200 : width; _width.value = width == null ? 1200 : width;
_height.value = height == null ? 800 : height; _height.value = height == null ? 800 : height;
_close.value = close == null ? true : close; _close.value = close == null ? true : close;
@ -29,17 +38,22 @@ const closeBtn = () => {
<transition name="el-fade-in"> <transition name="el-fade-in">
<div class="mask" v-if="_isShow"> <div class="mask" v-if="_isShow">
<div class="mask-wrapper" :style="{ width: _width + 'px', height: _height + 'px' }" v-if="_isShow"> <div class="mask-wrapper" :style="{ width: _width + 'px', height: _height + 'px' }" v-if="_isShow">
<el-scrollbar height="100%"> <div class="header">
<div class="header"> <div class="title">{{ title }}</div>
<div class="title">{{ title }}</div> <div class="close" @click="closeBtn" v-if="_close">
<div class="close" @click="closeBtn" v-if="_close"> <el-icon class="close-icon">
<el-icon> <CloseBold/>
<CloseBold/> </el-icon>
</el-icon>
</div>
</div> </div>
<slot></slot> </div>
</el-scrollbar> <div class="content" >
<el-scrollbar style="height:100%;margin-top: 0">
<slot></slot>
</el-scrollbar>
</div>
<div class="footer" v-if="_showFooter">
<slot name="footer"></slot>
</div>
</div> </div>
</div> </div>
</transition> </transition>
@ -61,44 +75,59 @@ const closeBtn = () => {
align-items: center; align-items: center;
.mask-wrapper { .mask-wrapper {
position: relative;
background-color: #FFF; background-color: #FFF;
border-radius: 6px; border-radius: 6px;
padding: 0 20px 20px 20px;
overflow: hidden; overflow: hidden;
max-height: 90vh; max-height: 90vh;
z-index: 1999; z-index: 1999;
display: flex;
flex-direction: column;
.header { .header {
position: relative;
height: 72px; height: 72px;
padding: 0 4px; display: flex;
justify-content: space-between;
padding: 0 24px;
border-bottom: 1px solid #EAEAEC; border-bottom: 1px solid #EAEAEC;
align-items: center;
.title { .title {
position: absolute;
top: 50%;
left: 0;
font-weight: 800; font-weight: 800;
font-size: 20px; font-size: 20px;
color: #333333; color: #333333;
font-style: normal; font-style: normal;
transform: translateY(-50%);
} }
.close { .close {
position: absolute; width: 32px;
top: 50%; height: 32px;
right: 0; background: #EBECED;
color: #6e6e6e; border-radius: 16px;
font-size: 32px; line-height: 32px;
transform: translateY(-50%); text-align: center;
.close-icon {
color: #6e6e6e;
font-size: 12px;
}
&:hover { &:hover {
color: #409eff; color: #409eff;
} }
} }
} }
.content {
flex: 1;
min-height: 0;
}
.footer {
height: 86px;
background: #FFFFFF;
border-top: 1px solid #EAEAEC;
border-radius: 0 0 8px 8px;
}
} }
} }
</style> </style>

View File

@ -1,158 +1,162 @@
<template> <template>
<div class="edit-panel" v-loading="isLoading" element-loading-text="正在保存......"> <Mask :width="1200" :top="100" :is-show="isShow" @close="exit"
<div class="top"> title="新增" :height="760" :show-footer="true">
<el-form :model="inventory_order_data" label-position="top" :rules="formRules" ref="orderForm"> <div class="add-panel" v-loading="isLoading" element-loading-text="正在保存......">
<el-row> <div class="top">
<el-col :span="6"> <el-form :model="inventory_order_data" label-position="top" :rules="formRules" ref="orderForm">
<el-form-item label="订单编号"> <el-row>
<div style="width: 234px;"> <el-col :span="6">
{{ inventory_order_data.code != null ? inventory_order_data.code : "创建后自动生成" }} <el-form-item label="订单编号">
</div> <div style="width: 234px;">
</el-form-item> {{ inventory_order_data.code != null ? inventory_order_data.code : "创建后自动生成" }}
</el-col> </div>
<el-col :span="6"> </el-form-item>
<el-form-item label="采购人"> </el-col>
<el-input style="width: 234px;" disabled v-model="userInfo.name"></el-input> <el-col :span="6">
</el-form-item> <el-form-item label="采购人">
</el-col> <el-input style="width: 234px;" disabled v-model="userInfo.name"></el-input>
<el-col :span="6"> </el-form-item>
<el-form-item prop="purchaseDate" label="采购日期" :rules="formRules.purchaseDate"> </el-col>
<el-date-picker <el-col :span="6">
v-model="inventory_order_data.purchaseDate" <el-form-item prop="purchaseDate" label="采购日期" :rules="formRules.purchaseDate">
type="date" <el-date-picker
placeholder="选择一个创建日期" v-model="inventory_order_data.purchaseDate"
size="default" type="date"
style="width: 234px;" placeholder="选择一个创建日期"
/> size="default"
</el-form-item> style="width: 234px;"
</el-col>
<el-col :span="6">
<el-form-item prop="shippingCode" label="货单号" :rules="formRules.shippingCode">
<el-input v-model="inventory_order_data.shippingCode"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item prop="invoiceCode" label="发票号">
<el-input style="width: 234px;" v-model="inventory_order_data.invoiceCode"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="supplierId" label="供应商" :rules="formRules.supplierId">
<el-select style="width: 234px;" v-model="inventory_order_data.supplierId" placeholder="请选择供应商">
<el-option
v-for="item in supplier_list"
:key="item.id"
:label="item.name"
:value="item.id"
/> />
</el-select> </el-form-item>
</el-form-item> </el-col>
</el-col> <el-col :span="6">
<el-col :span="12"> <el-form-item prop="shippingCode" label="货单号" :rules="formRules.shippingCode">
<el-form-item label="备注" :rules="formRules.purchaseDate"> <el-input v-model="inventory_order_data.shippingCode"></el-input>
<el-input v-model="inventory_order_data.remark"/> </el-form-item>
</el-form-item> </el-col>
</el-col> </el-row>
</el-row> <el-row>
</el-form> <el-col :span="6">
<el-form-item prop="invoiceCode" label="发票号">
<el-input style="width: 234px;" v-model="inventory_order_data.invoiceCode"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="supplierId" label="供应商" :rules="formRules.supplierId">
<el-select style="width: 234px;" v-model="inventory_order_data.supplierId" placeholder="请选择供应商">
<el-option
v-for="item in supplier_list"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" :rules="formRules.purchaseDate">
<el-input v-model="inventory_order_data.remark"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="table_content">
<div class="add_goods">
<span>添加商品</span>
<div class="search">
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch>
</div>
</div>
<el-table :data="table_list" style="width: 100%;flex: 1">
<el-table-column prop="name" label="药品名称" width="180" show-overflow-tooltip/>
<el-table-column label="售价" prop="unitPrice" width="80">
</el-table-column>
<el-table-column label="单位" prop="packagingUnit" width="80">
</el-table-column>
<el-table-column label="数量" width="110">
<template #default="scope">
<el-input-number
v-model="scope.row.wholeNumber"
:min="1"
size="small"
controls-position="right"
style="width: 80px"
@change="getTotalPrice"
/>
</template>
</el-table-column>
<el-table-column label="进价" width="110">
<template #default="scope">
<el-input-number
v-model="scope.row.purchaseUnitPrice"
:min="1"
size="small"
controls-position="right"
style="width: 80px"
@change="getTotalPrice"
/>
</template>
</el-table-column>
<el-table-column label="生产批号" width="150">
<template #default="scope">
<el-input
v-model="scope.row.productionBatchCode"
placeholder="生产批号"
style="width: 100px"
size="small"/>
</template>
</el-table-column>
<el-table-column label="生产日期" width="140">
<template #default="scope">
<el-date-picker
:editable="false"
v-model="scope.row.productionDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="生产日期"
size="small"
@change="checkProductionDate(scope.row)"
style="width: 100px;"/>
</template>
</el-table-column>
<el-table-column label="有效日期" width="140">
<template #default="scope">
<el-date-picker
:editable="false"
v-model="scope.row.expiryDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="有效日期"
size="small" style="width: 100px;"/>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template #default="scope">
<el-button size="small" @click="removeTableRow(scope.row)" type="danger" plain>移除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div> </div>
<div class="table_content"> <template #footer>
<div class="add_goods"> <div class="bottom">
<span>添加商品</span> <div class="totalPrice">
<div class="search"> 订单总金额<span style="color: #FF282E;font-size: 12px"></span><span
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch> style="color: #FF282E">{{ inventory_order_data.totalPrice.toFixed(2) }}</span>
</div>
<div class="btn">
<el-button type="primary" @click="confirm">确认</el-button>
<el-button type="primary" @click="exit">关闭</el-button>
</div> </div>
</div> </div>
<el-table :data="table_list" style="width: 100%" height="300" max-height="550"> </template>
<el-table-column prop="name" label="药品名称" width="180" show-overflow-tooltip/>
<el-table-column label="售价" prop="unitPrice" width="80">
</el-table-column>
<el-table-column label="单位" prop="packagingUnit" width="80">
</el-table-column>
<el-table-column label="数量" width="110">
<template #default="scope">
<el-input-number
v-model="scope.row.wholeNumber"
:min="1"
size="small"
controls-position="right"
style="width: 80px"
@change="getTotalPrice"
/>
</template>
</el-table-column>
<el-table-column label="进价" width="110">
<template #default="scope">
<el-input-number
v-model="scope.row.purchaseUnitPrice"
:min="1"
size="small"
controls-position="right"
style="width: 80px"
@change="getTotalPrice"
/>
</template>
</el-table-column>
<el-table-column label="生产批号" width="150">
<template #default="scope">
<el-input
v-model="scope.row.productionBatchCode"
placeholder="生产批号"
style="width: 100px"
size="small"/>
</template>
</el-table-column>
<el-table-column label="生产日期" width="140">
<template #default="scope">
<el-date-picker
:editable="false"
v-model="scope.row.productionDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="生产日期"
size="small"
@change="checkProductionDate(scope.row)"
style="width: 100px;"/>
</template>
</el-table-column>
<el-table-column label="有效日期" width="140">
<template #default="scope">
<el-date-picker
:editable="false"
v-model="scope.row.expiryDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="有效日期"
size="small" style="width: 100px;"/>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template #default="scope">
<el-button size="small" @click="removeTableRow(scope.row)" type="danger" plain>移除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="bottom">
<div class="totalPrice">
订单总金额<span style="color: #FF282E;font-size: 12px"></span><span style="color: #FF282E">{{ inventory_order_data.totalPrice.toFixed(2) }}</span>
</div>
<div class="btn">
<el-button type="primary" @click="confirm">确认</el-button>
<el-button type="primary" @click="exit">关闭</el-button>
</div>
</div>
</div>
<Mask :is-show="is_add" :top="100">
<Edit ref="editRef" @close="is_add = false;"/>
</Mask> </Mask>
<!-- <Mask :is-show="is_add" :top="100">-->
<!-- <Edit ref="editRef" @close="is_add = false;"/>-->
<!-- </Mask>-->
</template> </template>
@ -230,6 +234,21 @@ const getTotalPrice = () => {
} }
const emit = defineEmits(['close']) const emit = defineEmits(['close'])
let exit = () => { let exit = () => {
isShow.value = false
inventory_order_data.value = {
code: null,
purchaseDate: getFormattedDate(),
userId: null,
supplierId: null,
remark: null,
managerUserId: null,
kindConut: 0,
totalPrice: 0,
shippingCode: null,
invoiceCode: null,
inventoryOrderGoodsList: []
}
table_list.value = []
emit('close') emit('close')
} }
const table_list: any = ref([]) const table_list: any = ref([])
@ -272,10 +291,10 @@ let confirm = async () => {
inventoryOrder: JSON.parse(JSON.stringify(inventory_order_data.value)), inventoryOrder: JSON.parse(JSON.stringify(inventory_order_data.value)),
inventoryOrderGoodsList: JSON.parse(JSON.stringify(table_list.value)) inventoryOrderGoodsList: JSON.parse(JSON.stringify(table_list.value))
} }
isLoading.value = true
post("inventory/order/create", data).then((res: any) => { post("inventory/order/create", data).then((res: any) => {
isLoading.value = false
exit() exit()
isLoading.value = true
}) })
} catch (error) { } catch (error) {
@ -304,7 +323,7 @@ const removeItem = (row: any) => {
} }
} }
const is_add = ref(false) const isShow = ref(false)
const editRef = ref<InstanceType<typeof Edit>>(); const editRef = ref<InstanceType<typeof Edit>>();
const supplier_list: any = ref([]) const supplier_list: any = ref([])
const getSupplierList = () => { const getSupplierList = () => {
@ -313,14 +332,9 @@ const getSupplierList = () => {
} }
post("inventory/supplier/list", {query: query}).then((res: any) => { post("inventory/supplier/list", {query: query}).then((res: any) => {
supplier_list.value = res.list supplier_list.value = res.list
supplier_list.value = res.list
}) })
} }
const userInfo = ref({ const userInfo = ref<any>({})
id: null,
name: null,
username: null,
})
const getUserInfo = () => { const getUserInfo = () => {
post("manager/user/verify", null).then((res: any) => { post("manager/user/verify", null).then((res: any) => {
userInfo.value = res userInfo.value = res
@ -333,10 +347,12 @@ const removeTableRow = (row: any) => {
table_list.value.splice(index, 1); table_list.value.splice(index, 1);
} }
} }
onMounted(() => { const init = () => {
isShow.value = true
getSupplierList() getSupplierList()
getUserInfo() getUserInfo()
}) }
defineExpose({init})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.link { .link {
@ -378,8 +394,42 @@ onMounted(() => {
background-color: red; background-color: red;
} }
.add-panel {
height: 602px;
padding: 24px 24px 0;
display: flex;
flex-direction: column;
.top {
height: 180px;
}
.table_content {
flex: 1;
margin-top: 24px;
display: flex;
flex-direction: column;
.add_goods {
height: 90px;
display: flex;
justify-content: space-between;
align-items: center;
font-weight: 800;
font-size: 18px;
color: #333333;
font-style: normal;
.search {
width: 50%;
}
}
}
}
.bottom { .bottom {
height: 86px; padding: 0 24px;
height: 100%;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@ -387,30 +437,10 @@ onMounted(() => {
font-size: 22px; font-size: 22px;
color: #333333; color: #333333;
font-style: normal; font-style: normal;
background: #fff;
box-shadow: 0px -2 4px 0px rgba(0,0,0,0.1);
border-radius: 0 0 8px 8px;
} }
.error { .error {
background-color: #F00; background-color: #F00;
} }
.edit-panel{
margin-top: 24px;
}
.table_content{
margin-top: 24px;
.add_goods{
display: flex;
justify-content: space-between;
align-items: center;
font-weight: 800;
font-size: 18px;
color: #333333;
font-style: normal;
.search{
width: 50%;
}
}
}
</style> </style>

View File

@ -205,7 +205,7 @@ import CloseBtn from "@/components/CloseBtn.vue";
let props = defineProps({ let props = defineProps({
code: { code: {
type: String, type: String,
default: null default: ""
} }
}) })
const isLoading = ref(false) const isLoading = ref(false)

View File

@ -34,6 +34,18 @@
> >
{{ formatDate(decryptedText.expiryDate) }} {{ formatDate(decryptedText.expiryDate) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item
align="center"
label="权限"
>
{{ decryptedText.rule == 1 ? "禁用医保" : decryptedText.rule == 2 ? "全部开放" : "" }}
</el-descriptions-item>
<el-descriptions-item
align="center"
label="定点机构编码"
>
{{ decryptedText.fixmedinsCode}}
</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</template> </template>
@ -65,7 +77,8 @@ onMounted(async () => {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.auth { .auth {
margin: 0 auto; margin: 24px auto;
padding: 0 24px;
.btn { .btn {
margin: 24px 0; margin: 24px 0;

View File

@ -132,7 +132,7 @@ const showAuth = () => {
</div> </div>
</div> </div>
</div> </div>
<Mask :is-show="isShowAuth" @close="isShowAuth=false" :width="600" :height="450" title="授权"> <Mask :is-show="isShowAuth" @close="isShowAuth=false" :width="600" :height="500" title="授权">
<Auth></Auth> <Auth></Auth>
</Mask> </Mask>
</template> </template>

View File

@ -2,7 +2,7 @@
<div class="container-wrapper"> <div class="container-wrapper">
<div class="top"> <div class="top">
<el-dropdown> <el-dropdown>
<el-button type="primary" :icon="Plus" @click="is_add = true">新增采购</el-button> <el-button type="primary" :icon="Plus" @click="openAdd">新增采购</el-button>
</el-dropdown> </el-dropdown>
</div> </div>
<div class="content_list"> <div class="content_list">
@ -46,11 +46,8 @@
/> />
</div> </div>
</div> </div>
<Mask v-if="!open_code" :width="1200" :top="100" :is-show="is_add" @close="closeAddOrder" <AddOrder ref="addOrderRef" @close="closeAddOrder"/>
title="新增" :height="760"> <Mask :width="1200" :top="100" :is-show="is_edit" @close="closeEditOrder"
<AddOrder @close="closeAddOrder"/>
</Mask>
<Mask v-else :width="1200" :top="100" :is-show="is_edit" @close="closeEditOrder"
title="编辑" :height="720"> title="编辑" :height="720">
<EditOrder :code="open_code" @close="closeEditOrder" @updateOrderDetail="init"/> <EditOrder :code="open_code" @close="closeEditOrder" @updateOrderDetail="init"/>
</Mask> </Mask>
@ -58,7 +55,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {onMounted, ref, watch} from "vue"; import {nextTick, onMounted, ref, watch} from "vue";
import {post} from "@/utils/request.ts"; import {post} from "@/utils/request.ts";
import {useRoute} from "vue-router"; import {useRoute} from "vue-router";
import AddOrder from "@/components/inventory/purchase/AddOrder.vue"; import AddOrder from "@/components/inventory/purchase/AddOrder.vue";
@ -67,13 +64,18 @@ import EditOrder from "@/components/inventory/purchase/EditOrder.vue";
import {Plus} from "@element-plus/icons-vue"; import {Plus} from "@element-plus/icons-vue";
let tableData = ref([]) let tableData = ref([])
let is_add = ref(false)
let is_edit = ref(false) let is_edit = ref(false)
const route = useRoute() const route = useRoute()
let open_code = ref(null) let open_code = ref(null)
onMounted(() => { onMounted(() => {
init() init()
}) })
const addOrderRef = ref<any>('')
const openAdd = () => {
nextTick(() => {
addOrderRef.value.init()
})
}
let open_edit = (row: any) => { let open_edit = (row: any) => {
is_edit.value = true is_edit.value = true
open_code.value = row.code open_code.value = row.code
@ -91,7 +93,6 @@ let init = () => {
} }
const closeAddOrder = () => { const closeAddOrder = () => {
is_add.value = false
init() init()
} }
const closeEditOrder = () => { const closeEditOrder = () => {