Merge remote-tracking branch 'origin/main'

This commit is contained in:
LiJianZhao 2025-04-25 16:55:07 +08:00
commit 853f552ae4
9 changed files with 164 additions and 144 deletions

View File

@ -151,7 +151,7 @@ let logout = function () {
localStorage.removeItem('token')
useRouter().push("/manager/login")
ElMessage({
message: "退出成功,即将为您跳转到登页面",
message: "退出成功,即将为您跳转到登页面",
type: 'success',
duration: 1000,
})

View File

@ -1,6 +1,5 @@
<template>
<div class="edit-panel" v-loading="isLoading" element-loading-text="正在保存......">
<div class="top">
<el-form :model="inventory_order_data" :rules="formRules" ref="orderForm">
<el-descriptions title="采购订单" border>
@ -26,28 +25,28 @@
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="发票号">
<el-form-item prop="invoiceCode" >
<el-form-item prop="invoiceCode">
<el-input v-model="inventory_order_data.invoiceCode"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="供应商">
<el-form-item prop="supplierId" :label="''" :rules="formRules.supplierId">
<el-select v-model="inventory_order_data.supplierId" placeholder="请选择供应商" style="width:300px">
<el-option
v-for="item in supplier_list"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<el-select v-model="inventory_order_data.supplierId" placeholder="请选择供应商" style="width:300px">
<el-option
v-for="item in supplier_list"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="备注">
<el-input v-model="inventory_order_data.remark"/>
</el-descriptions-item>
</el-descriptions>
</el-form>
</el-form>
</div>
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch>
<div class="table_content">
@ -84,37 +83,37 @@
</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"/>
<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;"/>
<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;"/>
<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">
@ -135,9 +134,9 @@
</div>
</div>
<Mask :is-show="is_add" :top="100">
<Edit ref="editRef" @close="is_add = false;"/>
</Mask>
<Mask :is-show="is_add" :top="100">
<Edit ref="editRef" @close="is_add = false;"/>
</Mask>
</template>
@ -149,6 +148,7 @@ import Mask from "@/components/common/Mask.vue";
import {ElMessage} from "element-plus";
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
import CloseBtn from "@/components/CloseBtn.vue";
const orderForm = ref()
const formRules = ref({
shippingCode: [{required: true, message: '请输入货单号', trigger: 'blur'}],
@ -171,20 +171,22 @@ let inventory_order_data = ref({
const checkProductionDate = (row: any) => {
if (!row.productionDate) {
ElMessage.error('生产日期不能为空');
return;
return false;
}
const productionDate = new Date(row.productionDate);
const currentDate = new Date();
if (productionDate > currentDate) {
ElMessage.error('生产日期不能晚于当前日期');
row.productionDate = null; //
return false;
}
return true;
};
const checkExpiryDate = (row: any) => {
if (!row.expiryDate) {
ElMessage.error('有效期不能为空');
return;
return false;
}
const productionDate = new Date(row.productionDate);
const expiryDate = new Date(row.expiryDate);
@ -193,10 +195,13 @@ const checkExpiryDate = (row: any) => {
if (expiryDate <= currentDate) {
ElMessage.error('有效期不能早于当前日期');
row.expiryDate = null; //
return false;
} else if (expiryDate <= productionDate) {
ElMessage.error('有效期必须晚于生产日期');
row.expiryDate = null; //
return false;
}
return true;
};
const isLoading = ref(false)
@ -239,19 +244,22 @@ let confirm = async () => {
}
//
table_list.value.forEach((item: any) => {
checkProductionDate(item)
checkExpiryDate(item);
});
for (let i = 0; i < table_list.value.length; i++) {
if (!checkProductionDate(table_list.value[i])) {
return
}
if (!checkExpiryDate(table_list.value[i])) {
return
}
}
let data = {
inventoryOrder: JSON.parse(JSON.stringify(inventory_order_data.value)),
inventoryOrderGoodsList: JSON.parse(JSON.stringify(table_list.value))
}
isLoading.value = true
post("inventory/order/create", data).then((res: any) => {
exit()
isLoading.value = true
})
} catch (error) {
@ -287,7 +295,7 @@ const getSupplierList = () => {
const query = {
turn: 1
}
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
})
@ -375,7 +383,8 @@ onMounted(() => {
right: 10px;
bottom: 10px;
}
.error{
.error {
background-color: #F00;
}
</style>

View File

@ -9,69 +9,56 @@
show-word-limit
:autosize="{ minRows: 8, maxRows: 20 }"
type="textarea"
@input="parsing"
/>
<div class="btn">
<el-button type="primary" @click="save">保存</el-button>
</div>
</el-form>
<el-descriptions title="解析后的数据" size="small" :column="2" border v-if="flag">
<el-descriptions-item
align="center"
label="定点机构编码"
:span="2"
>
{{ decryptedText.fixmedinsCode }}
</el-descriptions-item>
<el-descriptions title="解析后的数据" size="small" :column="2" border>
<!-- <el-descriptions-item-->
<!-- align="center"-->
<!-- label="定点机构编码"-->
<!-- :span="2"-->
<!-- >-->
<!-- {{ decryptedText.fixmedinsCode }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item
align="center"
label="证书创建时间"
>
{{ decryptedText.createDate }}
{{ formatDate(decryptedText.createDate) }}
</el-descriptions-item>
<el-descriptions-item
align="center"
label="证书过期时间"
>
{{ decryptedText.expiryDate }}
{{ formatDate(decryptedText.expiryDate) }}
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script setup lang="ts">
import {post} from "@/utils/request.ts";
import {onMounted, onUnmounted, ref} from "vue";
import {onMounted, ref} from "vue";
import {ElMessage} from "element-plus";
import {formatDate} from "@/utils/dateUtils.ts";
const decryptedText = ref<any>({})
const ciphertext = ref<string>('')
const flag = ref<any>(false)
const parsing = () => {
if (ciphertext.value) {
post("common/config/parsing", {ciphertext: ciphertext.value}).then((res: any) => {
decryptedText.value = res;
flag.value = true;
})
} else {
flag.value = false;
}
}
const ciphertext = ref<any>('')
const save = () => {
if (ciphertext.value) {
post("common/config/setcert", {encryptedText: ciphertext.value}).then((res: any) => {
post("common/auth/set", {ciphertext: ciphertext.value}).then(() => {
ElMessage.success("保存成功")
init()
})
}
}
const get = () => {
const init = async () => {
ciphertext.value=await post("common/auth/get");
decryptedText.value=await post("common/auth/check");
}
onMounted(async () => {
post("common/config/get", {key: 'common_cert'}).then((res: any) => {
ciphertext.value = res.val;
parsing()
})
await init()
})

View File

@ -15,7 +15,7 @@ const handleLogin = () => {
post("manager/user/login", {username: username.value, password: password.value}).then((token: any) => {
localStorage.setItem('token', token)
ElMessage({
message: "登成功,即将为您跳转到首页",
message: "登成功,即将为您跳转到首页",
type: 'success',
duration: 1000,
onClose: () => {
@ -67,7 +67,7 @@ const showAuth = () => {
</div>
</div>
</div>
<Mask :is-show="isShowAuth" @close="isShowAuth=false" :width="600" :height="600" title="授权">
<Mask :is-show="isShowAuth" @close="isShowAuth=false" :width="600" :height="450" title="授权">
<Auth></Auth>
</Mask>
</template>

View File

@ -32,10 +32,10 @@
</div>
</div>
<Mask :width="1200" :height="500" :is-show="showAdd" :top="100" @close="showAdd = false">
<Add @close="showAdd = false"/>
<Add @close="showAdd = false;getCheck()"/>
</Mask>
<Mask :width="1200" :height="500" :is-show="showDetail" :top="100" @close="showDetail = false">
<Detail :id="id" @close="showDetail = false"/>
<Detail :id="id" @close="showDetail = false;getCheck()"/>
</Mask>
</template>
<script setup lang="ts">

View File

@ -1,10 +1,10 @@
<template>
<div class="container-wrapper">
<div class="top">
<el-dropdown>
<el-button type="primary" :icon="Plus" @click="open_add(null)">新增采购</el-button>
</el-dropdown>
</div>
<div class="container-wrapper">
<div class="top">
<el-dropdown>
<el-button type="primary" :icon="Plus" @click="open_add(null)">新增采购</el-button>
</el-dropdown>
</div>
<div class="content_list">
<el-table :data="tableData" style="width: 100%" @row-click="open_add">
<el-table-column fixed label="进货单号" width="250" show-overflow-tooltip>
@ -33,24 +33,25 @@
</template>
</el-table-column>
</el-table>
</div>
<div class="bottom">
<div class="page_btn_list">
<el-pagination
background
layout="prev, pager, next"
:page-size="pageSize"
:current-page="page"
:total="total"
@current-change="changePage"
/>
</div>
<div class="bottom">
<div class="page_btn_list">
<el-pagination
background
layout="prev, pager, next"
:page-size="pageSize"
:current-page="page"
:total="total"
@current-change="changePage"
/>
</div>
</div>
<Mask :width="1200" :top="100" :is-show="is_add" @close="is_add=false"
:title="open_code?'编辑':'新增'">
<AddOrder v-if="!open_code" @close="closeAddOrder"/>
<EditOrder v-else :code="open_code" @close="is_add=false" @updateOrderDetail="init"/>
</Mask>
</div>
<Mask :width="1200" :height="700" :top="100" :is-show="is_add" @close="is_add=false" :title="open_code?'编辑':'新增'">
<AddOrder v-if="!open_code" @close="closeAddOrder"/>
<EditOrder v-else :code="open_code" @close="is_add=false" @updateOrderDetail="init"/>
</Mask>
</div>
</template>
<script lang="ts" setup>
@ -70,8 +71,12 @@ onMounted(() => {
init()
})
let open_add = (row: any) => {
open_code.value = row.code
is_add.value = true
if (row!=null) {
open_code.value = row.code
}else{
open_code.value = null
}
}
@ -112,6 +117,7 @@ const formatDate = (isoStr: any) => {
</script>
<style scoped lang="scss">
@use "@/assets/scss/base.scss";
.container-wrapper {
box-sizing: border-box;
padding: 24px;
@ -119,12 +125,14 @@ const formatDate = (isoStr: any) => {
display: flex;
flex-direction: column;
height: 100%;
.content_list {
width: 100%;
flex: 1;
overflow: hidden;
margin-top: base.$margin-base;
}
.bottom {
width: 100%;
height: 60px;
@ -138,6 +146,7 @@ const formatDate = (isoStr: any) => {
align-items: center;
}
}
.full_screen {
position: fixed;
left: 0;

View File

@ -338,6 +338,8 @@ const openLevelEdit = (vip: any) => {
.container-wrapper {
display: flex;
background: none;
padding: 0 24px;
.left {
height: 100%;

View File

@ -18,17 +18,21 @@
</div>
</div>
<div class="right">
<div class="middle">
<el-date-picker
v-model="selectedDate"
type="daterange"
range-separator="-"
@change="handleDateChange"
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
<List :patientList="patientList" @rowClick="rowClick"></List>
</div>
<div class="middle">
<div class="date">
<el-date-picker
v-model="selectedDate"
type="daterange"
range-separator="-"
@change="handleDateChange"
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
</div>
<div class="list">
<List :patientList="patientList" @rowClick="rowClick"></List>
</div>
</div>
<div class="bottom">
<div class="page_btn_list">
<el-pagination
@ -55,7 +59,7 @@ import Mask from "@/components/common/Mask.vue";
import Edit from "@/components/registration/Edit.vue";
import List from "@/components/registration/List.vue";
import {post} from "@/utils/request";
import {formatDate,getToday,formatDateArray} from "@/utils/dateUtils.ts";
import {formatDate, getToday, formatDateArray} from "@/utils/dateUtils.ts";
const isShowNum = ref(0)
const roleList = ref<any>([])
@ -72,13 +76,18 @@ const initDoctor = () => {
})
}
const patientList = ref<any>([])
const selectedDate = ref<any>([getToday().start,getToday().end])
const selectedDate = ref<any>([getToday().start, getToday().end])
const handleDateChange = (date: any[]) => {
selectedDate.value = formatDateArray(date)
getPatientList()
}
const getPatientList = () => {
post('registration/list', {page: page.value, size: size.value,startDate:selectedDate.value[0],endDate:selectedDate.value[1]}).then((res: any) => {
post('registration/list', {
page: page.value,
size: size.value,
startDate: selectedDate.value[0],
endDate: selectedDate.value[1]
}).then((res: any) => {
patientList.value = res.list
})
isShow.value = false
@ -98,7 +107,9 @@ const rowClick = (row: any) => {
</script>
<style scoped lang="scss">
.container-wrapper {
padding-top: 0;
background: none;
height: 100%;
padding: 0 24px;
}
.content {
@ -108,6 +119,7 @@ const rowClick = (row: any) => {
.left {
height: 100%;
width: 319px;
background: #fff;
li {
height: 50px;
@ -152,10 +164,24 @@ const rowClick = (row: any) => {
padding-left: 20px;
display: flex;
flex-direction: column;
.middle{
.middle {
flex: 1;
min-height: 0;
background: #fff;
display: flex;
flex-direction: column;
.date {
margin: 30px auto 0;
height: 60px;
}
.list {
flex: 1;
}
}
.bottom {
width: 100%;
height: 60px;
@ -163,13 +189,10 @@ const rowClick = (row: any) => {
box-sizing: border-box;
padding: 10px;
position: relative;
border-bottom: 1px solid #EEE;
.page_btn_list {
position: absolute;
left: 0;
top: 10px;
}
border-top: 1px solid #EEE;
display: flex;
justify-content: flex-end;
align-items: center;
}
}
}

View File

@ -33,7 +33,8 @@
<Mask :is-show="loading" :width="300" :height="300" title="更新版本" :close="false">
{{ tip_message }}
<div class="demo-progress" style="margin-top: 20px">
<el-progress :percentage="percentage" :format="format"/>
<el-progress :percentage="100" :stroke-width="15" striped
striped-flow :show-text="false"/>
</div>
</Mask>
</div>
@ -129,12 +130,10 @@ let percentage = ref(0)
const tip_message = ref("正在更新目录,请稍后...")
const start_type = () => {
loading.value = true
percentage.value = 0;
post("social/directory_version/get_current", {type: current_tab.value}, {catch_error: true}).then((res: any) => {
tip_message.value = "正在更新目录,上一个版本:" + res.currentVersionName + ",请不要强制关闭程序,否则数据不完整";
download(res.currentVersionName, current_tab.value);
}).catch((err: any) => {
percentage.value = 100
loading.value = false;
ElNotification({
title: '提示',
@ -145,11 +144,6 @@ const start_type = () => {
}
let download = (ver: any, type: any) => {
post("social/directory/download", {ver: ver, type: type}).then((res: any) => {
percentage.value = setInterval(() => {
if (percentage.value < 100) {
percentage.value += 1;
}
}, 100);
if (res == null) {
loading.value = false;
ElNotification({
@ -161,7 +155,6 @@ let download = (ver: any, type: any) => {
}
start_type()
}).catch((err: any) => {
percentage.value = 100
loading.value = false;
ElNotification({
title: '提示',
@ -209,13 +202,10 @@ let download = (ver: any, type: any) => {
box-sizing: border-box;
padding: 10px;
position: relative;
border-bottom: 1px solid #EEE;
.page_btn_list {
position: absolute;
left: 0;
top: 10px;
}
border-top: 1px solid #EEE;
display: flex;
justify-content: flex-end;
align-items: center;
.download_btn {
position: absolute;