Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions 123.sql
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,7 @@ CREATE TABLE `yaopinxinxi` (
`youxiaoqi` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '有效期',
`danjia` double NULL DEFAULT NULL COMMENT '单价',
`kucun` int(11) NOT NULL COMMENT '库存',
`zuidikucun` int(11) NULL DEFAULT 10 COMMENT '最低库存阈值',
`xinzengshijian` datetime(0) NULL DEFAULT NULL COMMENT '新增时间',
`beizhu` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
Expand Down
55 changes: 37 additions & 18 deletions manage_code/src/views/yaopinxinxi/formModel.vue
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,23 @@
</el-col>

<el-col :span="24">
<el-form-item label="库存" prop="kucun">
<el-input class="list_inp" v-model.number="form.kucun" placeholder="库存"
type="text"
:readonly="!isAdd||disabledForm.kucun?true:false" />
</el-form-item>
</el-col>
<el-form-item label="库存" prop="kucun">
<el-input class="list_inp" v-model.number="form.kucun" placeholder="库存"
type="text"
:readonly="!isAdd||disabledForm.kucun?true:false" />
</el-form-item>
</el-col>

<el-col :span="24">
<el-form-item label="新增时间" prop="xinzengshijian">
<el-col :span="24">
<el-form-item label="最低库存阈值" prop="zuidikucun">
<el-input class="list_inp" v-model.number="form.zuidikucun" placeholder="最低库存阈值"
type="number"
:readonly="!isAdd||disabledForm.zuidikucun?true:false" />
</el-form-item>
</el-col>

<el-col :span="24">
<el-form-item label="新增时间" prop="xinzengshijian">
<el-date-picker
class="list_date"
v-model="form.xinzengshijian"
Expand Down Expand Up @@ -118,6 +126,7 @@
youxiaoqi : false,
danjia : false,
kucun : false,
zuidikucun : false,
xinzengshijian : false,
beizhu : false,
})
Expand All @@ -140,11 +149,15 @@
{ validator: context.$toolUtil.validator.number, trigger: 'blur' },
],
kucun: [
{required: true,message: '请输入',trigger: 'blur'},
{ validator: context.$toolUtil.validator.intNumber, trigger: 'blur' },
],
xinzengshijian: [
],
{required: true,message: '请输入',trigger: 'blur'},
{ validator: context.$toolUtil.validator.intNumber, trigger: 'blur' },
],
zuidikucun: [
{required: true,message: '请输入',trigger: 'blur'},
{ validator: context.$toolUtil.validator.intNumber, trigger: 'blur' },
],
xinzengshijian: [
],
beizhu: [
],
})
Expand All @@ -167,6 +180,7 @@
youxiaoqi: '',
danjia: '',
kucun: '',
zuidikucun: '',
xinzengshijian: '',
beizhu: '',
}
Expand Down Expand Up @@ -239,11 +253,16 @@
continue;
}
if(x=='kucun'){
form.value.kucun = row[x];
disabledForm.value.kucun = true;
continue;
}
if(x=='xinzengshijian'){
form.value.kucun = row[x];
disabledForm.value.kucun = true;
continue;
}
if(x=='zuidikucun'){
form.value.zuidikucun = row[x];
disabledForm.value.zuidikucun = true;
continue;
}
if(x=='xinzengshijian'){
form.value.xinzengshijian = row[x];
disabledForm.value.xinzengshijian = true;
continue;
Expand Down
163 changes: 105 additions & 58 deletions manage_code/src/views/yaopinxinxi/list.vue
Original file line number Diff line number Diff line change
Expand Up @@ -101,23 +101,36 @@
</template>
</el-table-column>
<el-table-column min-width="140"
:resizable='true'
:sortable='true'
align="left"
header-align="left"
prop="kucun"
label="库存">
<template #default="scope">
{{scope.row.kucun}}
</template>
</el-table-column>
<el-table-column min-width="140"
:resizable='true'
:sortable='true'
align="left"
header-align="left"
prop="xinzengshijian"
label="新增时间">
:resizable='true'
:sortable='true'
align="left"
header-align="left"
prop="kucun"
label="库存">
<template #default="scope">
<span :class="{ 'warning-text': scope.row.kucun <= scope.row.zuidikucun }">
{{scope.row.kucun}}
</span>
</template>
</el-table-column>
<el-table-column min-width="140"
:resizable='true'
:sortable='true'
align="left"
header-align="left"
prop="zuidikucun"
label="最低库存阈值">
<template #default="scope">
{{scope.row.zuidikucun}}
</template>
</el-table-column>
<el-table-column min-width="140"
:resizable='true'
:sortable='true'
align="left"
header-align="left"
prop="xinzengshijian"
label="新增时间">
<template #default="scope">
{{scope.row.xinzengshijian}}
</template>
Expand Down Expand Up @@ -150,25 +163,29 @@
入库
</el-button>
<el-button class="cross_btn" v-if="btnAuth('yaopinxinxi','出库')" type="success" @click="chukujiluCrossAddOrUpdateHandler(scope.row,'cross','','','','')">
<i class="iconfont icon-dingdan3"></i>
出库
</el-button>
<i class="iconfont icon-dingdan3"></i>
出库
</el-button>
<el-button class="warn_btn" v-if="btnAuth('yaopinxinxi','采购建议')" type="warning" @click="showPurchaseSuggestion">
<i class="iconfont icon-dingdan3"></i>
采购建议
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
background
:layout="layouts.join(',')"
:total="total"
:page-size="listQuery.limit"
v-model:current-page="listQuery.page"
prev-text="上一页"
next-text="下一页"
:hide-on-single-page="false"
:style='{}'
:page-sizes="[10, 20, 30, 40, 50, 100]"
@size-change="sizeChange"
@current-change="currentChange" />
background
:layout="layouts.join(',')"
:total="total"
:page-size="listQuery.limit"
v-model:current-page="listQuery.page"
prev-text="上一页"
next-text="下一页"
:hide-on-single-page="false"
:style='{}'
:page-sizes="[10, 20, 30, 40, 50, 100]"
@size-change="sizeChange"
@current-change="currentChange" />
</div>
<formModel ref="formRef" @formModelChange="formModelChange"></formModel>
<!-- 统计图弹窗 -->
Expand All @@ -181,10 +198,22 @@
</template>
</el-dialog>
<rukujiluFormModel ref="rukujiluFormModelRef" @formModelChange="formModelChange"></rukujiluFormModel>
<chukujiluFormModel ref="chukujiluFormModelRef" @formModelChange="formModelChange"></chukujiluFormModel>
</div>
</template>
<script setup>
<chukujiluFormModel ref="chukujiluFormModelRef" @formModelChange="formModelChange"></chukujiluFormModel>
<!-- 采购建议弹窗 -->
<el-dialog v-model="purchaseVisible" title="药品采购建议清单" width="70%">
<el-table :data="purchaseList" border stripe>
<el-table-column prop="yaopinmingcheng" label="药品名称" />
<el-table-column prop="guige" label="规格" />
<el-table-column prop="currentStock" label="当前库存" />
<el-table-column prop="minStock" label="最低库存阈值" />
<el-table-column prop="suggestPurchase" label="建议采购量" />
<el-table-column prop="danjia" label="单价" />
<el-table-column prop="totalPrice" label="总价" />
</el-table>
</el-dialog>
</div>
</template>
<script setup>
import axios from 'axios'
import moment from "moment"
import {
Expand Down Expand Up @@ -456,8 +485,8 @@
})
}
import chukujiluFormModel from '@/views/chukujilu/formModel'
const chukujiluFormModelRef = ref(null)
const chukujiluCrossAddOrUpdateHandler = (row,type,crossOptAudit,crossOptPay,statusColumnName,tips,statusColumnValue) => {
const chukujiluFormModelRef = ref(null)
const chukujiluCrossAddOrUpdateHandler = (row,type,crossOptAudit,crossOptPay,statusColumnName,tips,statusColumnValue) => {
if(statusColumnName!=''&&!statusColumnName.startsWith("[")) {
var obj = row
for (var o in obj){
Expand All @@ -472,20 +501,33 @@
})
}
//初始化
const init = () => {
let urlkucun = 'yaopinxinxi/remind/kucun/1'
urlkucun+=`?remindend=5`
urlkucun+=`&remindstart=0`
context.$http({
url: urlkucun,
method: 'get'
}).then(res=>{
if(res.data.count>0) {
context?.$alert(`库存有${res.data.count}条记录达到预警`)
}
})
getList()
}
const purchaseVisible = ref(false)
const purchaseList = ref([])
const showPurchaseSuggestion = () => {
context.$http({
url: `${tableName}/purchaseSuggestion`,
method: 'get'
}).then(res=>{
purchaseList.value = res.data.data
purchaseVisible.value = true
})
}
const init = () => {
context.$http({
url: `${tableName}/lowStock`,
method: 'get'
}).then(res=>{
if(res.data.data.length>0) {
context?.$alert(`库存有${res.data.data.length}条记录低于阈值,请及时处理!`, '库存预警', {
confirmButtonText: '查看采购建议',
callback: () => {
showPurchaseSuggestion()
}
})
}
})
getList()
}
init()
</script>
<style lang="scss" scoped>
Expand Down Expand Up @@ -586,12 +628,17 @@
.el-button--success:hover {
}
// 操作
.el-button--warning {
}
// 操作-悬浮
.el-button--warning:hover {
}
}
.el-button--warning {
}
// 操作-悬浮
.el-button--warning:hover {
}
// 预警文字
.warning-text {
color: #f56c6c;
font-weight: bold;
}
}
}
}
tr:hover {
Expand Down
1 change: 1 addition & 0 deletions server_code/sql/cl515882190.sql
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,7 @@ CREATE TABLE `yaopinxinxi` (
`youxiaoqi` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '有效期',
`danjia` double DEFAULT NULL COMMENT '单价',
`kucun` int(11) NOT NULL COMMENT '库存',
`zuidikucun` int(11) NULL DEFAULT 10 COMMENT '最低库存阈值',
`xinzengshijian` datetime DEFAULT NULL COMMENT '新增时间',
`beizhu` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.*;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

Expand Down Expand Up @@ -381,6 +382,24 @@ public R count(@RequestParam Map<String, Object> params,YaopinxinxiEntity yaopin
return R.ok().put("data", count);
}

/**
* 获取库存低于阈值的药品列表
*/
@RequestMapping("/lowStock")
public R getLowStockMedicines() {
List<YaopinxinxiEntity> lowStockMedicines = yaopinxinxiService.getLowStockMedicines();
return R.ok().put("data", lowStockMedicines);
}

/**
* 生成采购建议清单
*/
@RequestMapping("/purchaseSuggestion")
public R generatePurchaseSuggestion() {
List<Map<String, Object>> suggestions = yaopinxinxiService.generatePurchaseSuggestion();
return R.ok().put("data", suggestions);
}



}
18 changes: 18 additions & 0 deletions server_code/src/main/java/com/cl/entity/YaopinxinxiEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,12 @@ public YaopinxinxiEntity(T t) {

private Integer kucun;

/**
* 最低库存阈值
*/

private Integer zuidikucun;

/**
* 新增时间
*/
Expand Down Expand Up @@ -193,6 +199,18 @@ public void setKucun(Integer kucun) {
public Integer getKucun() {
return kucun;
}
/**
* 设置:最低库存阈值
*/
public void setZuidikucun(Integer zuidikucun) {
this.zuidikucun = zuidikucun;
}
/**
* 获取:最低库存阈值
*/
public Integer getZuidikucun() {
return zuidikucun;
}
/**
* 设置:新增时间
*/
Expand Down
Loading