YangJian0701 1 year ago
parent
commit
b6829d02c5

+ 3 - 0
src/api/module/home.ts

@@ -7,3 +7,6 @@ import $http from '@/utils/index'
  * @returns 
  */
 export const homeList = (params: any) => $http.post('/stock/stat', params)
+
+export const stockHomeList = (params: any) => $http.post('/stock/home-stat', params)
+

+ 6 - 0
src/api/module/storageFrom.ts

@@ -24,4 +24,10 @@ export const stockTemplateOut = (params: any) => $http.post('/stock-template/out
 export const stockTemplateBatchOut = (params: any) => $http.post('/stock-template/batch-out', params)
 
 
+export const stockoutedit = (params: any) => $http.post('/stock-template/out/edit', params)
+
+export const stockoutdel = (params: any) => $http.post('/stock-template/out/delete', params)
+
+
+
 export const medicListStockOut = (params: any) => $http.post('/medicine-template/list-for-stock-out', params)

+ 9 - 0
src/api/module/storagePut.ts

@@ -26,6 +26,15 @@ export const stockTemplateIn = (params: any) => $http.post('/stock-template/in',
 export const stockTemplateBatchIn = (params: any) => $http.post('/stock-template/batch-in', params)
 
 
+export const stockedit = (params: any) => $http.post('/stock-template/in/edit', params)
+
+export const stockdel = (params: any) => $http.post('/stock-template/in/delete', params)
+
+
+
+
+
+
 
 export const medicListStock = (params: any) => $http.post('/medicine-template/list-for-stock', params)
 

+ 1 - 0
src/assets/img/new.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702259790617" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10751" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M245.76 286.72h552.96c124.928 0 225.28 100.352 225.28 225.28s-100.352 225.28-225.28 225.28H0V532.48c0-135.168 110.592-245.76 245.76-245.76z m133.12 348.16V401.408H348.16v178.176l-112.64-178.176H204.8V634.88h30.72v-178.176L348.16 634.88h30.72z m182.272-108.544v-24.576h-96.256v-75.776h110.592v-24.576h-141.312V634.88h143.36v-24.576h-112.64v-83.968h96.256z m100.352 28.672l-34.816-151.552h-34.816l55.296 233.472H675.84l47.104-161.792 4.096-20.48 4.096 20.48 47.104 161.792h28.672l57.344-233.472h-34.816l-32.768 151.552-4.096 30.72-6.144-30.72-40.96-151.552h-30.72l-40.96 151.552-6.144 30.72-6.144-30.72z" fill="#EE502F" p-id="10752"></path></svg>

+ 6 - 0
src/components/breadcrumb.vue

@@ -24,6 +24,11 @@ const data = reactive({
     isRouter: '',
     iscollapse:true
 })
+
+watch(() => store.state.switchValue, (toPath: any) => {
+  data.iscollapse = store.state.switchValue
+}, { immediate: true, deep: true })
+
 watch(() => router, (toPath: any) => {
     data.isRouter = toPath.currentRoute._value.meta.title
 }, { immediate: true, deep: true })
@@ -32,6 +37,7 @@ watch(() => router, (toPath: any) => {
 const collapseFun = async ()=>{
     data.iscollapse = !data.iscollapse
     Bus.emit('on-click',data.iscollapse);
+    store.commit('setswitchValue', data.iscollapse) //存储导航状态
 }
 </script>
 <style lang="scss">

+ 1 - 1
src/components/echart/echart-bar-LR.vue

@@ -166,7 +166,7 @@ const initEcharts = () => {
                                 color: 'rgba(206, 51, 181, 0.4)' // 100% 处的颜色
                             }
                         ],
-                        barBorderRadius: [30, 30, 0, 0], //圓角
+                        borderRadius: [30, 30, 0, 0], //圓角
                         globalCoord: false // 缺省为 false
                     }
                 },

+ 1 - 1
src/components/echart/echart-bar-row.vue

@@ -85,7 +85,7 @@ const initEcharts = () => {
                         ],
                         globalCoord: false // 缺省为 false
                     },
-                    barBorderRadius: [0,20,20,0] //圓角
+                    borderRadius: [0,20,20,0] //圓角
                 },
             },
         ]

+ 9 - 18
src/components/echart/echart-bar.vue

@@ -15,10 +15,6 @@ const props = defineProps({
         type: Object,
         default: () => { },
     },
-    switchData: {
-        type: Boolean,
-        default: () => true,
-    }
 });
 
 let echart: any = null
@@ -30,14 +26,9 @@ let echartData: any = reactive({
     seriesDiscount: [], //合同总金额
     seriesRecoveries: [] //合同已回款金额
 })
-watch(() => props.switchData, () => {
-    // echartData = findDataFun('line', props.lineData, props.switchData)
-    myChart.clear();
-    myChart.setOption(initEcharts());
-})
 
 watch(() => props.lineData, async () => {
-    // echartData = findDataFun('line', props.lineData, props.switchData)
+    // echartData = findDataFun(props.lineData)
     myChart.clear();
     myChart.setOption(initEcharts());
 })
@@ -91,7 +82,7 @@ const initEcharts = () => {
                 barMaxWidth: '15%',//宽度
                 data: [
                     {
-                        value: Math.random() * 1000,
+                        value: props.lineData.totalOut,
                         itemStyle: { //面积图颜色设置
                             color: {
                                 type: 'linear',
@@ -106,11 +97,11 @@ const initEcharts = () => {
                                 ],
                                 globalCoord: false // 缺省为 false
                             },
-                            barBorderRadius: [20] //圓角
+                            borderRadius: [20] //圓角
                         },
                     },
                     {
-                        value: Math.random() * 1000,
+                        value:  props.lineData.totalIn,
                         itemStyle: { //面积图颜色设置
                             color: {
                                 type: 'linear',
@@ -125,10 +116,10 @@ const initEcharts = () => {
                                 ],
                                 globalCoord: false // 缺省为 false
                             },
-                            barBorderRadius: [20] //圓角
+                            borderRadius: [20] //圓角
                         },
                     }, {
-                        value: Math.random() * 1000,
+                        value: props.lineData.totalOutSale,
                         itemStyle: { //面积图颜色设置
                             color: {
                                 type: 'linear',
@@ -143,10 +134,10 @@ const initEcharts = () => {
                                 ],
                                 globalCoord: false // 缺省为 false
                             },
-                            barBorderRadius: [20] //圓角
+                            borderRadius: [20] //圓角
                         },
                     }, {
-                        value: Math.random() * 1000,
+                        value: props.lineData.totalInPurchase,
                         itemStyle: { //面积图颜色设置
                             color: {
                                 type: 'linear',
@@ -161,7 +152,7 @@ const initEcharts = () => {
                                 ],
                                 globalCoord: false // 缺省为 false
                             },
-                            barBorderRadius: [20] //圓角
+                            borderRadius: [20] //圓角
                         },
                     },
                 ]

+ 4 - 4
src/plugins/rulesData.ts

@@ -19,9 +19,9 @@ export const syrulesData = {
 //入库
 export let columnsTable = [
     { prop: 'quantity', label: '数量', width: 0 },
-    { prop: 'unitPrice', label: '购进单价', width: 0 },
+    { prop: 'unit_price', label: '购进单价', width: 0 },
     { prop: 'operator', label: '经办人', width: 0 },
-    { prop: 'forwardingUnit', label: '发货单位', width: 0 },
+    { prop: 'forwarding_unit', label: '发货单位', width: 0 },
     { prop: 'date', label: '入库日期', width: 0 },
     { prop: 'operation', label: '操作', fixed: 'right',"min-width":200}
 ]
@@ -29,9 +29,9 @@ export let columnsTable = [
 //出库
 export let columnsTableOut = [
     { label: '数量', prop: 'quantity', width: 0 },
-    { label: '销售单价', prop: 'unitPrice', width: 0 },
+    { label: '销售单价', prop: 'unit_price', width: 0 },
     { label: '经办人', prop: 'operator', width: 0 },
-    { label: '收货单位', prop: 'receivingUnit', width: 0 },
+    { label: '收货单位', prop: 'receiving_unit', width: 0 },
     { label: '出库日期', prop: 'date', width: 0 },
     { prop: 'operation', label: '操作', fixed: 'right',"min-width":200}
 ]

+ 1 - 1
src/router/index.ts

@@ -24,8 +24,8 @@ router.afterEach((to, from) => {
 
 router.beforeEach((to, from, next) => {
 	const token = sessionStorage.getItem('token')
-	// console.log('拦截',to)
 	const store = useStore()
+	if(to.path=='/')store.commit('setCompany','')
 	if(to.path!='/'){
 		store.commit('addTab', {
 			title: to.meta.title,

+ 11 - 1
src/store/index.ts

@@ -5,7 +5,7 @@ export default createStore({
   plugins: [
     createPersistedState({
       key: 'stort',
-      paths: ['routerTag','userInfo','isuserInfo'] //, 'Tags'
+      paths: ['routerTag','userInfo','isuserInfo','company','switchValue'] //, 'Tags'
     })
   ],
   state: {
@@ -17,11 +17,21 @@ export default createStore({
     userInfo:null,
     isfirm:'',//当前公司
     isuserInfo:null,//api获取的个人信息
+    company:'',
+    switchValue:null,
   },
   getters: {
     routerTag:state=>state.routerTag,
   },
   mutations: {
+    //设置扫行展开收缩
+    setswitchValue: (state, data:any) => {
+			state.switchValue = data
+		},
+    //设置当前在哪个公司
+    setCompany: (state, data:any) => {
+			state.company = data
+		},
     //api获取的个人信息
     setIsUserInfo: (state, data:any) => {
 			state.isuserInfo = data

+ 1 - 0
src/utils/index.ts

@@ -81,6 +81,7 @@ class RequestHttp {
 			}
 		)
 		function showStatus(params: any) {
+			if(!params.code){setTimeout(() => {closeFun()}, 500);return;}
 			switch (params.code) {
 				case 200:
 					// ElMessage({

+ 17 - 5
src/views/home/index.vue

@@ -3,10 +3,10 @@
   <div class="home">
     <div class="home-main">
       <bgPure #bg>
-        <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="库存总额" subhea="87546"></statistics>
+        <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="库存总额" :subhea="String(data.echartsData.inventoryAmount)"></statistics>
       </bgPure>
       <bgPure #bg>
-        <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="库存总量" subhea="931"></statistics>
+        <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="库存总量" :subhea="String(data.echartsData.inventoryQuantity)"></statistics>
       </bgPure>
     </div>
     <div class="home-echarts">
@@ -42,7 +42,7 @@
         </template>
         <!-- <template #card-subhead>行政区划选择</template> -->
         <template #card-content>
-          <echartbar id="bar0"></echartbar>
+          <echartbar id="bar0" :lineData="data.echartsData"></echartbar>
         </template>
       </cards>
     </div>
@@ -66,7 +66,7 @@
 </template>
 
 <script setup lang="ts">
-import { homeList,productList } from "@/api";
+import { homeList,productList,stockHomeList } from "@/api";
 import { provide, onMounted, reactive,ref } from "vue";
 import echartbar from '@/components/echart/echart-bar.vue'
 import echartBarRow from '@/components/echart/echart-bar-row.vue'
@@ -85,6 +85,7 @@ const getuserInfoApi = async () => {
   const result: any = await userInfo({})
   if (result.code == 200) store.commit('setIsUserInfo', result.data) //存储用户个人信息
 }
+
 // 渲染表格
 const columns: any = [
   { type: 'index', label: '编号', width: 80, },
@@ -120,7 +121,8 @@ const data: any = reactive({
     specId: 0,
     productId: null
   },
-  lineData:[]
+  lineData:[],
+  echartsData:{}
 })
 //函数
 const changeFun = async ()=>{
@@ -136,7 +138,17 @@ onMounted(async () => {
 })
 onMounted(() => {
   getuserInfoApi()
+  stockHomeListApi()
 })
+
+//函数
+const stockHomeListApi = async ()=>{
+  const reslut:any = await stockHomeList({})
+  if(reslut.code==200 && reslut.msg=="查询成功"){
+    data.echartsData = reslut.data?.list || {}
+  }
+}
+
 //函数
 const homeListApi = async ()=>{
   const result:any = await homeList({

+ 56 - 8
src/views/layout/popover.vue

@@ -2,8 +2,41 @@
 <template>
     <div class="demo-ico__desc">
         <div class="demo-ico__desc_item" @click="exitFun(1)">
-            <img src="@/assets/img/userInfo.gif" style="width: 30px;height: 30px;border-radius: 50%;cursor: pointer">
-                    <p class="demo-ico__desc_item_p">{{data.username}},你好</p>
+            <el-popover :width="300"
+                popper-style="box-shadow: rgb(14 18 22 / 35%) 0px 10px 38px -10px, rgb(14 18 22 / 20%) 0px 10px 20px -15px; padding: 20px;">
+                <template #reference>
+                    <el-avatar :size="30" :src="require('@/assets/img/userInfo.gif')" />
+                </template>
+                <template #default>
+                    <div class="demo-rich-conent" style="display: flex; gap: 16px; flex-direction: column">
+                        <el-avatar :size="50" :src="require('@/assets/img/userInfo.gif')" style="margin-bottom: 8px" />
+                        <div>
+                            <p class="demo-rich-content__name" style="margin: 0; font-weight: 500">
+                                账号:{{ data.username }}
+                            </p>
+                            <p class="demo-rich-content__name" style="margin: 0; font-size: 14px;">
+                                公司:{{ data.company }}
+                            </p>
+                        </div>
+                        <p class="demo-rich-content__desc" style="margin: 0">
+                            <el-collapse v-model="data.activeNames" accordion>
+                                <el-collapse-item title="重置密码" name="1">
+                                   <div style="display: flex;">
+                                        <el-input v-model="data.input" type="password" placeholder="请输入新密码" style="flex: 1;" show-password />
+                                        <el-button type="primary" style="margin-left: 20px;">修改</el-button>
+                                   </div>
+                                </el-collapse-item>
+                                <el-collapse-item title="设置展开/关闭" name="2">
+                                    <el-switch v-model="data.switchValue" @change="changeSwiper" :inactive-value="true"
+                                        :active-value="false" width="60" inline-prompt active-text="展开"
+                                        inactive-text="收起" />
+                                </el-collapse-item>
+                            </el-collapse>
+                        </p>
+                    </div>
+                </template>
+            </el-popover>
+            <p class="demo-ico__desc_item_p" style="margin-left: 5px;">{{ data.username }},你好</p>
         </div>
 
         <el-divider direction="vertical" />
@@ -31,14 +64,27 @@
 </template>
 <script lang="ts" setup>
 import { exitFun } from "@/plugins/setFun";
-import { reactive } from "vue";
+import { reactive, watch } from "vue";
 import { useStore } from "vuex";
 const store = useStore()
 const data = reactive({
-    username:''
+    username: '',
+    company: '',
+    activeNames: '',
+    switchValue: null,
+    input:''
 })
-data.username = !store.state.userInfo.form.username?'游客':store.state.userInfo.form.username
-console.log()
+watch(() => store.state.switchValue, (toPath: any) => {
+    data.switchValue = store.state.switchValue
+}, { immediate: true, deep: true })
+//函数
+const changeSwiper = async () => {
+    store.commit('setswitchValue', data.switchValue) //存储导航状态
+}
+data.username = !store.state.userInfo.form.username ? '游客' : store.state.userInfo.form.username
+watch(() => store.state.company, () => {
+    data.company = store.state.company == '' ? '未进入其他公司' : store.state.company
+}, { deep: true, immediate: true })
 </script>
 <style lang="scss">
 .demo-ico__desc {
@@ -60,7 +106,9 @@ console.log()
     }
 
     &_hover:hover {
-        color: var(--el-color-primary);;
+        color: var(--el-color-primary);
+        ;
     }
 
-}</style>
+}
+</style>

+ 4 - 1
src/views/layout/routerMenu.vue

@@ -34,12 +34,15 @@ let router = useRouter()
 //当前路由
 const data = reactive({
   isRouter: router.options.history.location,
-  iscollapse:true
+  iscollapse:store.state.switchValue
 })
 Bus.on('on-click',(flag:boolean)=>{
   data.iscollapse = flag
 })
 
+watch(() => store.state.switchValue, (toPath: any) => {
+  data.iscollapse = store.state.switchValue
+}, { immediate: true, deep: true })
 
 watch(() => router, (toPath: any) => {
   data.isRouter = toPath.options.history.location

+ 212 - 0
src/views/stockcontrol/storageFrom/Editinventory.vue

@@ -0,0 +1,212 @@
+<!-- 扫码 -->
+<template>
+    <div class="">
+        <el-button type="primary" @click="editFun(props.row)">编辑</el-button>
+        <el-button type="danger" @click="delClick(props.row)">删除</el-button>
+        <el-dialog v-model="dialogFormVisible" title="编辑" :append-to-body="true" draggable width="60%">
+            <el-form ref="ruleFormRef" :rules="rules" :model="initParam" :inline="true">
+                <el-divider content-position="center">药品信息</el-divider>
+                <el-form-item :label="item.name" :label-width="formLabelWidth" v-for="(item,index) in data.showDiaData" :key="index" :prop="'medicineInfo.'+item.field_name">
+                    <el-select v-model="initParam.medicineInfo[item.field_name]" :placeholder="'请选择'+item.name" class="inputWidth" v-if="[1,2,3,4,5].includes(item.type)">
+                        <el-option :label="itemIt.name" :value="itemIt.id" v-for="itemIt,i in item.list" :key="i"/>
+                    </el-select>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==6"/>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==7"/>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==8"/>
+                    <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="date" value-format="YYYY-MM-DD" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==9"/>
+                    <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==10"/>
+                </el-form-item>
+                <el-divider content-position="center">入库信息</el-divider>
+                <el-form-item class="el-form-item-main" label="数量" :label-width="formLabelWidth" prop="quantity">
+                    <el-input v-model.number="initParam.quantity" autocomplete="off" class="inputWidth" />
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="购进单价" :label-width="formLabelWidth">
+                    <el-input v-model="initParam.unit_price" autocomplete="off" class="inputWidth"/>
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="入库日期" :label-width="formLabelWidth" prop="date">
+                    <el-date-picker v-model="initParam.date" type="date" placeholder="疫苗效期" value-format="YYYY-MM-DD" clearable style="width: 200px;" />
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="发货单位" :label-width="formLabelWidth">
+                    <el-select v-model="initParam.forwarding_unit" placeholder="请选择发货单位" class="inputWidth">
+                        <el-option :value="it" v-for="it,j in data.itemPir" :key="j" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="经办人" :label-width="formLabelWidth" prop="operator">
+                    <el-select v-model="initParam.operator" placeholder="请选择经办人" class="inputWidth">
+                        <el-option :label="it" :value="it" v-for="(it,j) in data.itemOpen" :key="j+Math.random()" />
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="dialogFormVisible = false">取消</el-button>
+                    <el-button type="primary" @click="submitForm(ruleFormRef)">提交</el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from 'vue'
+import type { FormInstance} from 'element-plus'
+import { syrulesData } from "@/plugins/rulesData";
+const dialogFormVisible = ref(false)
+const ruleFormRef = ref<FormInstance>()
+let rules:any = reactive({})
+
+
+const props = defineProps({
+    row: {
+        type: Object,
+        default: () => { },
+    },
+})
+
+import { 
+    medicListStock,
+    stockunit,//发货单位
+    operatorList,//经办人
+    stockoutedit,//编辑
+    stockoutdel,//删除
+} from "@/api";
+import { ElMessage, ElMessageBox } from 'element-plus'
+const formLabelWidth = '110px'
+
+//提交参数
+let initParam:any = reactive({
+    "id":"",
+    "date": "",
+    "forwarding_unit": "",
+    "medicineInfo": {},
+    "operator":'',
+    "quantity": null,
+    "unit_price":Number(null)
+})
+let data:any = reactive({
+    tableData:[],
+    showDiaData:[],
+    itemPir:[],
+    itemOpen:[],
+    rules1:{},
+    columns:[],// 渲染表格
+    selectType:[],//表格的下拉对应
+    editStrot:false,
+    editIndex:null
+}) 
+
+//显示编辑
+const editFun = async (row:any)=>{
+    console.log('编辑',row)
+    dialogFormVisible.value = true
+    await medicListStockFun()//获取入库表单
+    await itemPirFun()//发货单位
+    await operatorListApi()//经办人
+
+}
+const emit:any = defineEmits(['scanCode','editinvent'])
+
+//重置
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.resetFields()
+}
+
+//提交
+const submitForm = async (formEl: FormInstance | undefined) => {
+    console.log('tijiao',initParam)
+  if (!formEl) return
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+        stockouteditApi()
+    } else {
+        ElMessage.error('请完善必填项')
+    }
+  })
+}
+//提交编辑
+const stockouteditApi = async ()=>{
+    let param = {...initParam}
+    param.unit_price = Number(param.unit_price)
+    const reslut:any = await stockoutedit(param)
+    if(reslut.code==200 && reslut.msg=='修改出库信息成功'){
+        emit('editinvent', '');
+        dialogFormVisible.value = false;
+        ElMessage.success(reslut.msg)
+    }
+}
+//收发货单位Api
+const itemPirFun = async()=>{
+    const reslut:any = await stockunit({ type: 3 })
+    data.itemPir = reslut.data.list
+}
+//经办人Api
+const operatorListApi = async()=>{
+    const reslut:any = await operatorList({})
+    data.itemOpen = reslut.data.list
+}
+
+//获取入库表单Api
+const medicListStockFun = async ()=>{
+    data.columns = []
+    const reslut:any = await medicListStock({})
+    if(reslut.code==200 && reslut.msg=='查询成功'){
+        data.showDiaData = reslut.data.list
+        data.rules1 = {}
+        data.columns = []
+        data.selectType = []
+        reslut.data.list.forEach((value:any) => { //value设置成key
+            data.selectType.push({type:value.type,list:value.list})
+            data.columns.push({ prop: value.field_name, label: value.name, list:value.list})
+            initParam.medicineInfo[value.field_name] = ''; // 这里可以根据需要设置其他值作为键的内容
+            if(['product_id','enterprise_id','spec_id','batch_number','expiry_date','approval_number'].includes(value.field_name)){
+                if(value.type==6){
+                    data.rules1['medicineInfo.'+value.field_name] =  [{required: true,message: '必填项',trigger: 'change'},{ pattern: /^([1-9]\d*|0)(\.\d{1,2})?$/, message: '请输入>=0,(最多两位小数)', trigger: "blur" },]
+                }else if(value.type==7){
+                    data.rules1['medicineInfo.'+value.field_name] =  [{required: true,message: '必填项',trigger: 'change'},{ pattern: /^(?:[1-9]\d*)$/, message: '请输入正整数', trigger: "blur" },]
+                }else{
+                    data.rules1['medicineInfo.'+value.field_name] = [{required: true,message: '必填项',trigger: 'change',}]
+                }
+            }
+        });
+        Object.assign(rules,{...data.rules1,...syrulesData})
+        let obj = {...props.row}
+        Object.keys(initParam).forEach(key => {
+            if(key!='medicineInfo'){
+                initParam[key] = obj[key]
+            }else{
+                Object.keys(initParam.medicineInfo).forEach(key => {
+                    initParam.medicineInfo[key] = obj[key]
+                })
+            }
+        })
+        console.log('rules',initParam,obj)
+        dialogFormVisible.value = true
+    }
+}
+
+/**
+ * 删除
+ * @param row 
+ */
+const delClick = (row:any) => {
+    ElMessageBox.confirm('删除一条信息,是否继续?','删除',{
+      confirmButtonText: '确认删除',
+      cancelButtonText: 'Cancel',
+      type: 'warning',
+      center: true,
+    }).then(async() => {
+        const reslut:any = await stockoutdel({id:row.id})
+        console.log('删除成功',reslut)
+        if(reslut.code==200 && reslut.msg=='删除出库信息成功'){ emit('editinvent', '');ElMessage.success(reslut.msg)}
+    }).catch(() => {
+      ElMessage.info('已取消删除')
+    })
+}
+
+</script>
+<style lang="scss">
+.inputWidth {
+    width: 200px;
+}
+</style>

+ 6 - 3
src/views/stockcontrol/storageFrom/index.vue

@@ -41,8 +41,7 @@
             <template #bg>
                 <tables ref="TableRef" :requestApi="stockOutList" :columns="columns" :initParam="initParam">
                     <template #right="{ row }">
-                        <el-button type="primary">编辑</el-button>
-                        <el-button type="danger">删除</el-button>
+                        <Editinventory :row="row" @editinvent="editinventFun"></Editinventory>
                     </template>
                 </tables>
             </template>
@@ -58,6 +57,7 @@ import {
     stockunit,//收发货单位
     medicineColumns,//表头
 } from "@/api";
+import Editinventory from './Editinventory.vue'
 import { reactive, ref,onMounted } from "vue";
 import tables from "@/components/table.vue";
 import searchAdd from "@/components/searchAdd.vue";
@@ -70,7 +70,10 @@ const scanCodeFun = async ()=>{
     console.log('添加完成')
     TableRef.value?.getTableList()
 }
-
+//函数
+const editinventFun = async ()=>{
+    TableRef.value?.getTableList()
+}
 const columns:any = []
 //提交参数
 const initParam = reactive({

+ 2 - 2
src/views/stockcontrol/storageFrom/scanCode.vue

@@ -9,7 +9,7 @@
                     <el-select v-model="initParam.medicineInfo[item.field_name]" :placeholder="'请选择'+item.name" class="inputWidth" v-if="[1,2,3,4,5].includes(item.type)">
                         <el-option :label="itemIt.name" :value="itemIt.id" v-for="itemIt,i in item.list" :key="i"/>
                     </el-select>
-                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" @blur="initParam.medicineInfo[item.field_name] = Number(initParam.medicineInfo[item.field_name]).toFixed(2)" class="inputWidth" v-if="item.type==6"/>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==6"/>
                     <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==7"/>
                     <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==8"/>
                     <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="date" value-format="YYYY-MM-DD" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==9"/>
@@ -20,7 +20,7 @@
                     <el-input v-model.number="initParam.quantity" autocomplete="off" class="inputWidth" />
                 </el-form-item>
                 <el-form-item class="el-form-item-main" label="购进单价" :label-width="formLabelWidth">
-                    <el-input v-model="initParam.unitPrice" autocomplete="off" class="inputWidth" />
+                    <el-input v-model="initParam.unitPrice" autocomplete="off" class="inputWidth"/>
                 </el-form-item>
                 <el-form-item class="el-form-item-main" label="出库日期" :label-width="formLabelWidth" prop="date">
                     <el-date-picker v-model="initParam.date" type="date" placeholder="疫苗效期" value-format="YYYY-MM-DD" clearable style="width: 200px;" />

+ 212 - 0
src/views/stockcontrol/storagePut/Editinventory.vue

@@ -0,0 +1,212 @@
+<!-- 扫码 -->
+<template>
+    <div class="">
+        <el-button type="primary" @click="editFun(props.row)">编辑</el-button>
+        <el-button type="danger" @click="delClick(props.row)">删除</el-button>
+        <el-dialog v-model="dialogFormVisible" title="编辑" :append-to-body="true" draggable width="60%">
+            <el-form ref="ruleFormRef" :rules="rules" :model="initParam" :inline="true">
+                <el-divider content-position="center">药品信息</el-divider>
+                <el-form-item :label="item.name" :label-width="formLabelWidth" v-for="(item,index) in data.showDiaData" :key="index" :prop="'medicineInfo.'+item.field_name">
+                    <el-select v-model="initParam.medicineInfo[item.field_name]" :placeholder="'请选择'+item.name" class="inputWidth" v-if="[1,2,3,4,5].includes(item.type)">
+                        <el-option :label="itemIt.name" :value="itemIt.id" v-for="itemIt,i in item.list" :key="i"/>
+                    </el-select>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==6"/>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==7"/>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==8"/>
+                    <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="date" value-format="YYYY-MM-DD" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==9"/>
+                    <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==10"/>
+                </el-form-item>
+                <el-divider content-position="center">入库信息</el-divider>
+                <el-form-item class="el-form-item-main" label="数量" :label-width="formLabelWidth" prop="quantity">
+                    <el-input v-model.number="initParam.quantity" autocomplete="off" class="inputWidth" />
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="购进单价" :label-width="formLabelWidth">
+                    <el-input v-model="initParam.unit_price" autocomplete="off" class="inputWidth"/>
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="入库日期" :label-width="formLabelWidth" prop="date">
+                    <el-date-picker v-model="initParam.date" type="date" placeholder="疫苗效期" value-format="YYYY-MM-DD" clearable style="width: 200px;" />
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="发货单位" :label-width="formLabelWidth">
+                    <el-select v-model="initParam.forwarding_unit" placeholder="请选择发货单位" class="inputWidth">
+                        <el-option :value="it" v-for="it,j in data.itemPir" :key="j" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="经办人" :label-width="formLabelWidth" prop="operator">
+                    <el-select v-model="initParam.operator" placeholder="请选择经办人" class="inputWidth">
+                        <el-option :label="it" :value="it" v-for="(it,j) in data.itemOpen" :key="j+Math.random()" />
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="dialogFormVisible = false">取消</el-button>
+                    <el-button type="primary" @click="submitForm(ruleFormRef)">提交</el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from 'vue'
+import type { FormInstance} from 'element-plus'
+import { syrulesData } from "@/plugins/rulesData";
+const dialogFormVisible = ref(false)
+const ruleFormRef = ref<FormInstance>()
+let rules:any = reactive({})
+
+
+const props = defineProps({
+    row: {
+        type: Object,
+        default: () => { },
+    },
+})
+
+import { 
+    medicListStock,
+    stockunit,//发货单位
+    operatorList,//经办人
+    stockedit,//编辑
+    stockdel,//删除
+} from "@/api";
+import { ElMessage, ElMessageBox } from 'element-plus'
+const formLabelWidth = '110px'
+
+//提交参数
+let initParam:any = reactive({
+    "id":"",
+    "date": "",
+    "forwarding_unit": "",
+    "medicineInfo": {},
+    "operator":'',
+    "quantity": null,
+    "unit_price":Number(null)
+})
+let data:any = reactive({
+    tableData:[],
+    showDiaData:[],
+    itemPir:[],
+    itemOpen:[],
+    rules1:{},
+    columns:[],// 渲染表格
+    selectType:[],//表格的下拉对应
+    editStrot:false,
+    editIndex:null
+}) 
+
+//显示编辑
+const editFun = async (row:any)=>{
+    console.log('编辑',row)
+    dialogFormVisible.value = true
+    await medicListStockFun()//获取入库表单
+    await itemPirFun()//发货单位
+    await operatorListApi()//经办人
+
+}
+const emit:any = defineEmits(['scanCode','editinvent'])
+
+//重置
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.resetFields()
+}
+
+//提交
+const submitForm = async (formEl: FormInstance | undefined) => {
+    console.log('tijiao',initParam)
+  if (!formEl) return
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+        stockeditApi()
+    } else {
+        ElMessage.error('请完善必填项')
+    }
+  })
+}
+//提交编辑
+const stockeditApi = async ()=>{
+    let param = {...initParam}
+    param.unit_price = Number(param.unit_price)
+    const reslut:any = await stockedit(param)
+    if(reslut.code==200 && reslut.msg=='修改入库信息成功'){
+        emit('editinvent', '');
+        dialogFormVisible.value = false;
+        ElMessage.success(reslut.msg)
+    }
+}
+//收发货单位Api
+const itemPirFun = async()=>{
+    const reslut:any = await stockunit({ type: 3 })
+    data.itemPir = reslut.data.list
+}
+//经办人Api
+const operatorListApi = async()=>{
+    const reslut:any = await operatorList({})
+    data.itemOpen = reslut.data.list
+}
+
+//获取入库表单Api
+const medicListStockFun = async ()=>{
+    data.columns = []
+    const reslut:any = await medicListStock({})
+    if(reslut.code==200 && reslut.msg=='查询成功'){
+        data.showDiaData = reslut.data.list
+        data.rules1 = {}
+        data.columns = []
+        data.selectType = []
+        reslut.data.list.forEach((value:any) => { //value设置成key
+            data.selectType.push({type:value.type,list:value.list})
+            data.columns.push({ prop: value.field_name, label: value.name, list:value.list})
+            initParam.medicineInfo[value.field_name] = ''; // 这里可以根据需要设置其他值作为键的内容
+            if(['product_id','enterprise_id','spec_id','batch_number','expiry_date','approval_number'].includes(value.field_name)){
+                if(value.type==6){
+                    data.rules1['medicineInfo.'+value.field_name] =  [{required: true,message: '必填项',trigger: 'change'},{ pattern: /^([1-9]\d*|0)(\.\d{1,2})?$/, message: '请输入>=0,(最多两位小数)', trigger: "blur" },]
+                }else if(value.type==7){
+                    data.rules1['medicineInfo.'+value.field_name] =  [{required: true,message: '必填项',trigger: 'change'},{ pattern: /^(?:[1-9]\d*)$/, message: '请输入正整数', trigger: "blur" },]
+                }else{
+                    data.rules1['medicineInfo.'+value.field_name] = [{required: true,message: '必填项',trigger: 'change',}]
+                }
+            }
+        });
+        Object.assign(rules,{...data.rules1,...syrulesData})
+        let obj = {...props.row}
+        Object.keys(initParam).forEach(key => {
+            if(key!='medicineInfo'){
+                initParam[key] = obj[key]
+            }else{
+                Object.keys(initParam.medicineInfo).forEach(key => {
+                    initParam.medicineInfo[key] = obj[key]
+                })
+            }
+        })
+        console.log('rules',initParam,obj)
+        dialogFormVisible.value = true
+    }
+}
+
+/**
+ * 删除
+ * @param row 
+ */
+const delClick = (row:any) => {
+    ElMessageBox.confirm('删除一条信息,是否继续?','删除',{
+      confirmButtonText: '确认删除',
+      cancelButtonText: 'Cancel',
+      type: 'warning',
+      center: true,
+    }).then(async() => {
+        const reslut:any = await stockdel({id:row.id})
+        console.log('删除成功',reslut)
+        if(reslut.code==200 && reslut.msg=='删除入库信息成功'){ emit('editinvent', '');ElMessage.success(reslut.msg)}
+    }).catch(() => {
+      ElMessage.info('已取消删除')
+    })
+}
+
+</script>
+<style lang="scss">
+.inputWidth {
+    width: 200px;
+}
+</style>

+ 8 - 7
src/views/stockcontrol/storagePut/index.vue

@@ -41,8 +41,7 @@
             <template #bg>
                 <tables ref="TableRef" :requestApi="stockInList" :columns="columns" :initParam="initParam">
                     <template #right="{ row }">
-                        <el-button type="primary" @click="editFun(row)">编辑</el-button>
-                        <el-button type="danger">删除</el-button>
+                        <Editinventory :row="row" @editinvent="editinventFun"></Editinventory>
                     </template>
                 </tables>
             </template>
@@ -63,13 +62,11 @@ import tables from "@/components/table.vue";
 import searchAdd from "@/components/searchAdd.vue";
 import bg from '@/components/bg.vue'
 import scanCode from './scanCode.vue'
+import Editinventory from './Editinventory.vue'
+
 const TableRef = ref()
-import { syrulesData,columnsTable } from "@/plugins/rulesData";
+import {columnsTable } from "@/plugins/rulesData";
 
-//函数
-const editFun = async (row:any)=>{
-    console.log('编辑',row)
-}
 
 const scanCodeFun = async ()=>{
     console.log('添加完成')
@@ -105,6 +102,10 @@ const click1 = async () => { options1.value = list1.value }
 const click2 = async () => { options2.value = list2.value }
 const click3 = async ()=>{options3.value = list3.value}
 
+//函数
+const editinventFun = async ()=>{
+    TableRef.value?.getTableList()
+}
 // 渲染表格
 onMounted(async () => {
      const r:any = await medicineColumns({})

+ 2 - 2
src/views/stockcontrol/storagePut/scanCode.vue

@@ -9,7 +9,7 @@
                     <el-select v-model="initParam.medicineInfo[item.field_name]" :placeholder="'请选择'+item.name" class="inputWidth" v-if="[1,2,3,4,5].includes(item.type)">
                         <el-option :label="itemIt.name" :value="itemIt.id" v-for="itemIt,i in item.list" :key="i"/>
                     </el-select>
-                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" @blur="initParam.medicineInfo[item.field_name] = Number(initParam.medicineInfo[item.field_name]).toFixed(2)" class="inputWidth" v-if="item.type==6"/>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==6"/>
                     <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==7"/>
                     <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==8"/>
                     <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="date" value-format="YYYY-MM-DD" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==9"/>
@@ -20,7 +20,7 @@
                     <el-input v-model.number="initParam.quantity" autocomplete="off" class="inputWidth" />
                 </el-form-item>
                 <el-form-item class="el-form-item-main" label="购进单价" :label-width="formLabelWidth">
-                    <el-input v-model="initParam.unitPrice" autocomplete="off" class="inputWidth" />
+                    <el-input v-model="initParam.unitPrice" autocomplete="off" class="inputWidth"/>
                 </el-form-item>
                 <el-form-item class="el-form-item-main" label="入库日期" :label-width="formLabelWidth" prop="date">
                     <el-date-picker v-model="initParam.date" type="date" placeholder="疫苗效期" value-format="YYYY-MM-DD" clearable style="width: 200px;" />

+ 1 - 0
src/views/usermanagement/company/index.vue

@@ -163,6 +163,7 @@ const delFun = (node: any, data: any) => {
  * @param data 当前行数据
  */
 const EnterFun = (node: any, data: any) => {
+    store.commit('setCompany', data.deptName) //存储公司
     postEnter({id:data.id})
     router.push('/home')
 }