Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
853f552ae4
|
|
@ -151,7 +151,7 @@ let logout = function () {
|
|||
localStorage.removeItem('token')
|
||||
useRouter().push("/manager/login")
|
||||
ElMessage({
|
||||
message: "退出成功,即将为您跳转到登陆页面",
|
||||
message: "退出成功,即将为您跳转到登录页面",
|
||||
type: 'success',
|
||||
duration: 1000,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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,7 +25,7 @@
|
|||
</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>
|
||||
|
||||
|
|
@ -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>
|
||||
|
|
@ -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()
|
||||
})
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div class="container-wrapper">
|
||||
<div class="container-wrapper">
|
||||
<div class="top">
|
||||
<el-dropdown>
|
||||
<el-button type="primary" :icon="Plus" @click="open_add(null)">新增采购</el-button>
|
||||
|
|
@ -46,11 +46,12 @@
|
|||
/>
|
||||
</div>
|
||||
</div>
|
||||
<Mask :width="1200" :height="700" :top="100" :is-show="is_add" @close="is_add=false" :title="open_code?'编辑':'新增'">
|
||||
<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>
|
||||
</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;
|
||||
|
|
|
|||
|
|
@ -338,6 +338,8 @@ const openLevelEdit = (vip: any) => {
|
|||
|
||||
.container-wrapper {
|
||||
display: flex;
|
||||
background: none;
|
||||
padding: 0 24px;
|
||||
|
||||
.left {
|
||||
height: 100%;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
</div>
|
||||
<div class="right">
|
||||
<div class="middle">
|
||||
<div class="date">
|
||||
<el-date-picker
|
||||
v-model="selectedDate"
|
||||
type="daterange"
|
||||
|
|
@ -27,8 +28,11 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue