Переглянути джерело

bug修改,申请单字段新增

黄梓星 2 роки тому
батько
коміт
c92ebd8203

+ 9 - 1
src/api/requisition/basic.js

@@ -96,11 +96,19 @@ export function getOrgs(data) {
     params: data
   })
 }
-// 参照-药品类别(子表)
+// 参照-药品类别(子表)-树形
 export function getDrug(data) {
   return request({
     url: `/system/archival/queryMedcineItemDrug`,
     method: 'post',
     data: data
   })
+}
+// 参照-中包装单位
+export function getMidPack(data) {
+  return request({
+    url: `/system/archival/queryMediumPackage?pageSize=${data.pageSize}&pageNum=${data.pageNo}`,
+    method: 'post',
+    data: data
+  })
 }

+ 236 - 0
src/components/PopDialog/midPack.vue

@@ -0,0 +1,236 @@
+<template>
+  <div>
+    <el-dialog
+      title="中包装单位选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      v-dialogDrag
+      class="userDialog"
+      :visible.sync="visible"
+    >
+      <el-container style="height: 500px">
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px; height: 30px">
+            <el-form
+              size="small"
+              :inline="true"
+              ref="searchForm"
+              :model="searchForm"
+              @keyup.enter.native="refreshList()"
+              @submit.native.prevent
+            >
+            <el-form-item prop="param" label="名称/编号" >
+                <el-input
+                  size="small"
+                  v-model="searchForm.param"
+                  placeholder="输入名称/编号查询"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  @click="refreshList()"
+                  size="small"
+                  icon="el-icon-search"
+                  >查询</el-button
+                >
+                <el-button
+                  @click="resetSearch()"
+                  size="small"
+                  icon="el-icon-refresh-right"
+                >重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="contractTable"
+              @select="handleSelectionChange"
+              @row-click="rowSelect"
+              height="calc(100% - 40px)"
+              style="width: 100%"
+            >
+              <el-table-column
+                type="selection"
+                header-align="center"
+                align="center"
+                width="50"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="code"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="90"
+                label="code"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="90"
+                label="名称"
+              >
+              </el-table-column>
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="searchForm.pageNo"
+              :page-sizes="[5, 10, 15, 20]"
+              :page-size="searchForm.pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper"
+            >
+            </el-pagination>
+          </el-main>
+        </el-container>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button
+          size="small"
+          @click="visible = false"
+          icon="el-icon-circle-close"
+          >关闭</el-button
+        >
+        <el-button
+          size="small"
+          type="primary"
+          icon="el-icon-circle-check"
+          @click="doSubmit()"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getMidPack } from '@/api/requisition/basic'
+export default {
+  data() {
+    return {
+      searchForm: {
+        param: '',
+        pageNo: 1,
+        pageSize: 10,
+      },
+      dataListAllSelections: [], // 所有选中的数据包含跨页数据
+      idKey: "id", // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false,
+    };
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    // 是否启用单选
+    single: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    init() {
+      this.visible = true;
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData));
+        this.resetSearch();
+      });
+    },
+    // 获取数据列表
+    refreshList() {
+      this.loading = true;
+      getMidPack(this.searchForm).then(({ data }) => {
+        console.log('data',data)
+        this.dataList = data.tableBody;
+        this.total = data.total
+        this.loading = false;
+        this.$nextTick(() => {
+          this.setSelectRow();
+        });
+      });
+    },
+    // 每页数
+    sizeChangeHandle(val) {
+      this.searchForm.pageSize = val;
+      this.refreshList();
+    },
+    // 当前页
+    currentChangeHandle(val) {
+      this.searchForm.pageNo = val;
+      this.refreshList();
+    },
+    // 排序
+    resetSearch() {
+      this.$refs['searchForm'].resetFields();
+      this.searchForm.pageNo = 1;
+      this.refreshList();
+    },
+    // 表格选中数据
+    rowSelect(row, column, event) {
+      this.$refs.contractTable.clearSelection();
+      this.$refs.contractTable.toggleRowSelection(row);
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 选中数据
+    handleSelectionChange(selection, row) {
+      if (this.single && selection.length > 1) {
+        this.$refs.contractTable.clearSelection();
+        this.$refs.contractTable.toggleRowSelection(row);
+      }
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 设置选中的方法
+    setSelectRow() {
+      this.$refs.contractTable.clearSelection();
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        return;
+      }
+      for (let i = 0; i < this.dataList.length; i++) {
+        if (this.dataListAllSelections.some(item => item[this.idKey] == this.dataList[i][this.idKey])) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.contractTable.toggleRowSelection(this.dataList[i], true);
+        }
+      }
+    },
+    doSubmit() {
+      this.visible = false;
+      console.log('选择的数据?',this.dataListAllSelections)
+      this.$emit("doSubmit", this.dataListAllSelections);
+    },
+  },
+};
+</script>
+<style lang="scss">
+.userDialog {
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination {
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 207 - 83
src/views/material/requisition/add.vue

@@ -159,6 +159,36 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
+              <el-form-item label="厂家物料编码" prop="manufacturersMaterialCode">
+                <el-input type="number" min="0" :disabled="disable" v-model="basicForm.manufacturersMaterialCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="ABC分类" prop="classifyAbc">
+                <el-select
+                    v-model="basicForm.classifyAbc"
+                    placeholder="ABC分类"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in dict.type.abc_type"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.classifyAbc"></el-input> -->
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="安全库存" prop="safeStock">
+                <el-input type="number" min="0" :disabled="disable" v-model="basicForm.safeStock"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
               <el-form-item label="B2C物料" prop="isB2c">
                 <el-select
                     v-model="basicForm.isB2c"
@@ -198,6 +228,7 @@
                     v-model="basicForm.isInventoryStatus"
                     placeholder="批号及库存状态管理"
                     clearable
+                    @change="stockControl"
                     :disabled="disable"
                   >
                     <el-option
@@ -217,7 +248,8 @@
                     v-model="basicForm.expiryDateManagerment"
                     placeholder="效期管理"
                     clearable
-                    :disabled="disable"
+                    @change="expCt"
+                    :disabled="disable || isStock"
                   >
                     <el-option
                       v-for="item in options"
@@ -246,19 +278,19 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="有效期" prop="usefulLife">
-                <el-input type="number" min="0" :disabled="disable" v-model="basicForm.usefulLife"></el-input>
+              <el-form-item label="有效期" prop="usefulLife" :rules="{required: !isExp, message: '请填写有效期', trigger: 'blur'}">
+                <el-input type="number" min="0" :disabled="disable || isExp" v-model="basicForm.usefulLife"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
-              <el-form-item label="效期单位" prop="expiryUnitId">
+              <el-form-item label="效期单位" prop="expiryUnitId" :rules="{required: !isExp, message: '请选择效期单位', trigger: 'change'}">
                 <el-select
                     v-model="basicForm.expiryUnitId"
-                    placeholder="效期单位"
+                    placeholder="请选择"
                     clearable
-                    :disabled="disable"
+                    :disabled="disable || isExp"
                   >
                     <el-option
                       v-for="item in dict.type.period_unit"
@@ -270,12 +302,12 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="有效期至单位" prop="usefulLifeUnitId">
+              <el-form-item label="有效期至单位" prop="usefulLifeUnitId" :rules="{required: !isExp, message: '请选择有效期至单位', trigger: 'change'}">
                 <el-select
                     v-model="basicForm.usefulLifeUnitId"
-                    placeholder="有效期至单位"
+                    placeholder="请选择"
                     clearable
-                    :disabled="disable"
+                    :disabled="disable || isExp"
                   >
                     <el-option
                       v-for="item in dict.type.expiry_date"
@@ -287,8 +319,8 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="近效期预警天数" prop="recentWarningPeriod">
-                <el-input type="number" min="0" :disabled="disable" v-model="basicForm.recentWarningPeriod"></el-input>
+              <el-form-item label="近效期预警天数" prop="recentWarningPeriod" :rules="{required: !isExp, message: '请填写近效期预警天数', trigger: 'blur'}">
+                <el-input type="number" min="0" :disabled="disable || isExp" v-model="basicForm.recentWarningPeriod"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -543,47 +575,36 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
+              <el-form-item label="税类编码" prop="rateCode">
+                <el-input :disabled="disable" v-model="basicForm.rateCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="中包装单位" prop="mediumPackageUnitId">
+                <el-select
+                    ref="midpacks"
+                    v-model="basicForm.mediumPackageUnitId"
+                    placeholder="请选择"
+                    clearable
+                    :disabled="disable"
+                    @focus="chooseMidpack"
+                  >
+                    <el-option
+                      v-for="item in midPackOptions"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.mediumPackageUnitId"></el-input> -->
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
               <el-form-item label="备注" prop="remark">
                 <el-input disabled v-model="basicForm.remark"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
-          <el-row style="margin-bottom: 12px;">
-          <span>物料类别</span>
-          </el-row>
-          <el-row style="margin-bottom: 12px;">
-            <el-button :disabled="disable" type="primary" size="small" plain @click="addLine">新增</el-button>
-            <el-button :disabled="disable" type="primary" size="small" plain @click="handleDelete">删除</el-button>
-            <!-- <el-button :disabled="disable || isControl" type="primary" size="small" plain @click="testsave">暂存</el-button> -->
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-table 
-              :data="sysMaterialMedcineItemApply"
-              class="request-table"
-              @selection-change="handleSelectionChange"
-              >
-                <el-table-column type="selection" width="55" />
-                <el-table-column label="物料类别ID" align="center" prop="sort">
-                  <template slot-scope="scope">
-                    <el-input readonly v-model="scope.row.drugId">
-                      <!-- <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="chooseDrug"></el-button> -->
-                    </el-input>
-                  </template>
-                </el-table-column>
-                <el-table-column label="物料类别code" align="center" prop="medicineCode">
-                  <template slot-scope="scope">
-                    <el-input readonly v-model="scope.row.drugCode"></el-input>
-                  </template>
-                </el-table-column>
-                <el-table-column label="物料类别名称" align="center" prop="medicineName">
-                  <template slot-scope="scope">
-                    <el-input readonly v-model="scope.row.drugName"></el-input>
-                  </template>
-                </el-table-column>
-              </el-table>
-            </el-col>
-          </el-row>
         </el-form>
         </div>
       </el-tab-pane>
@@ -690,6 +711,45 @@
 
       </el-tab-pane>
 
+      <el-tab-pane label="维护物料类别" name="third">
+        <!-- <el-row style="margin-bottom: 12px;">
+        <span>物料类别</span>
+        </el-row> -->
+        <el-row style="margin-bottom: 12px;">
+          <el-button :disabled="disable" type="primary" size="small" plain @click="addLine">新增</el-button>
+          <el-button :disabled="disable" type="primary" size="small" plain @click="handleDelete">删除</el-button>
+          <!-- <el-button :disabled="disable || isControl" type="primary" size="small" plain @click="testsave">暂存</el-button> -->
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-table 
+            :data="sysMaterialMedcineItemApply"
+            class="request-table"
+            @selection-change="handleSelectionChange"
+            >
+              <el-table-column type="selection" width="55" />
+              <el-table-column label="物料类别ID" align="center" prop="sort">
+                <template slot-scope="scope">
+                  <el-input readonly v-model="scope.row.drugId">
+                    <!-- <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="chooseDrug"></el-button> -->
+                  </el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="物料类别code" align="center" prop="medicineCode">
+                <template slot-scope="scope">
+                  <el-input readonly v-model="scope.row.drugCode"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="物料类别名称" align="center" prop="medicineName">
+                <template slot-scope="scope">
+                  <el-input readonly v-model="scope.row.drugName"></el-input>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-col>
+        </el-row>
+      </el-tab-pane>
+
       <el-tab-pane label="单据信息" name="fourth">
         <el-form :model="basicForm" ref="info" label-width="160px">
           <el-row :gutter="20">
@@ -848,6 +908,12 @@
       :single="true"
     />
 
+    <midpack
+      ref="midpack"
+      @doSubmit="acceptMidpack"
+      :selectData="selectData13"
+      :single="true"
+    />
   </div>
 </template>
 
@@ -866,17 +932,19 @@ import depart from '@/components/PopDialog/organization.vue'
 // 药品类别子别
 import drug from '@/components/PopDialog/drug.vue'
 
+import midpack from '@/components/PopDialog/midPack.vue'
+
 import { addReq, getReqDetail, editReq } from '@/api/requisition/basic'
 // 调用物料分类详情接口用于数据回显
 import { getDetail } from '@/api/classify/basic';
 // 生产厂商/代理人调用用于回显
 import { getProductFactory } from '@/api/changeApply/basic'
 // 计量单位,产地调用用于回显
-import { getUnit, getPlace, getTax, getStaff, getLine, getDose, getOrgs} from '@/api/requisition/basic'
+import { getUnit, getPlace, getTax, getStaff, getLine, getDose, getOrgs, getMidPack} from '@/api/requisition/basic'
 
 export default {
   name: 'requisition_add',
-  dicts: ['sys_storage_condition', 'sys_conditions_carriage', 'sys_medicine', 'medical_instruments', 'curing_type', 'period_unit', 'expiry_date'],
+  dicts: ['sys_storage_condition', 'sys_conditions_carriage', 'sys_medicine', 'medical_instruments', 'curing_type', 'period_unit', 'expiry_date', 'abc_type'],
   components: {
     factory,
     fourClass,
@@ -888,7 +956,8 @@ export default {
     dose,
     orgs,
     depart,
-    drug
+    drug,
+    midpack
   },
   props: ['pageStu', 'row', 'disable'],
   model: {
@@ -907,9 +976,12 @@ export default {
       doseOptions: [],
       organizationsOptions: [],
       departOptions: [],
+      midPackOptions: [],
       tabValue: 'first',
       isControl: true,
       orgControl: true,
+      isStock: false,
+      isExp: false,
       basicForm: {
         billCode: '',
         orgId: '',
@@ -931,6 +1003,9 @@ export default {
         registrant: '',
         originPlace: '',
         manufacturersMaterialName: '',
+        manufacturersMaterialCode: '',
+        classifyAbc: '',
+        rateCode: '',
         isB2c: '2',
         assembly: '2',
         isInventoryStatus: '0',
@@ -969,6 +1044,8 @@ export default {
         // 新增业务部门
         businessDepartment: '',
         isEnable: '',
+        safeStock: '',
+        mediumPackageUnitId: '',
         remark: '',
         // 物料申请单-单据信息
         applyBillInfo: {
@@ -1048,7 +1125,8 @@ export default {
       selectData9: [],
       selectData10: [],
       selectData11: [],
-      selectData12: []
+      selectData12: [],
+      selectData13: []
     }
   },
   // watch: {
@@ -1108,11 +1186,21 @@ export default {
       if (this.row.businessLine) {
         this.getLineDetails(this.row.businessLine)
       }
+      // 中包装单位回显
+      if (this.row.mediumPackageUnitId) {
+        this.getMidPackDetails(this.row.mediumPackageUnitId)
+      }
     } else if (this.pageStu == 'edit') {
       // alert('修改页面')
       console.log('页面状态',this.pageStu)
       console.log('数据', this.row)
       this.getDetails(this.row)
+      // 控制效期单位后面的是否可填写
+      if (this.row.expiryDateManagerment == '0') {
+        this.isExp = false
+      } else {
+        this.isExp = true
+      }
       // 控制业务部门是否能够填写
       if (this.row.purchasingOrganization) {
         this.orgControl = false
@@ -1149,6 +1237,10 @@ export default {
       if (this.row.businessLine) {
         this.getLineDetails(this.row.businessLine)
       }
+      // 中包装单位回显
+      if (this.row.mediumPackageUnitId) {
+        this.getMidPackDetails(this.row.mediumPackageUnitId)
+      }
     } else if(this.pageStu == 'add') {
       // alert('新增页面')
       console.log('页面状态',this.pageStu)
@@ -1159,6 +1251,30 @@ export default {
       console.log(tab, event);
       console.log('页面状态',this.pageStu)
     },
+    // 批号及库存状态管理控制效期管理
+    stockControl(val) {
+      if (val == 0) {
+        this.isStock = false
+      } else {
+        // 联动效期管理
+        this.basicForm.expiryDateManagerment = '2'
+        this.expCt(val)
+        this.isStock = true
+      }
+    },
+    // 选择效期管理控制后面字段是否可填写
+    expCt(val) {
+      console.log('效期管理值:', val)
+      if (val == 0) {
+        this.isExp = false
+      } else {
+        this.basicForm.usefulLife = ''
+        this.basicForm.expiryUnitId = ''
+        this.basicForm.usefulLifeUnitId = ''
+        this.basicForm.recentWarningPeriod = ''
+        this.isExp = true
+      }
+    },
     // 选择采购组织时控制业务部门
     controlOrg(val) {
       this.basicForm.businessDepartment = ''
@@ -1271,6 +1387,14 @@ export default {
         }
       })
     },
+    // 中包装单位回显
+    getMidPackDetails(id) {
+      getMidPack({id: id}).then(res => {
+        if (res.code === 200) {
+          this.midPackOptions = res.data.tableBody
+        }
+      })
+    },
     // 如果是详情进入,则调用详情接口
     getDetails(row) {
       getReqDetail(row.id).then(res => {
@@ -1317,22 +1441,15 @@ export default {
         console.log('提交参数', sparams)
         this.$refs['basic'].validate((valid) => {
           if (valid) {
-            if (this.sysMaterialMedcineItemApply.length !== 0) {
-              editReq(sparams).then(res => {
-                if(res.code === 200) {
-                  this.$message({
-                    message: res.msg,
-                    type: 'success'
-                  });
-                  this.back()
-                }
-              })
-            } else {
-              this.$message({
-                message: '请维护物料类别后再提交',
-                type: 'warning'
-              });
-            }
+            editReq(sparams).then(res => {
+              if(res.code === 200) {
+                this.$message({
+                  message: res.msg,
+                  type: 'success'
+                });
+                this.back()
+              }
+            })
           }
         })
       } else {
@@ -1345,22 +1462,15 @@ export default {
         console.log('保存参数', sparams)
         this.$refs['basic'].validate((valid) => {
           if(valid) {
-            if (this.sysMaterialMedcineItemApply.length !== 0) {
-              addReq(sparams).then(res => {
-                if(res.code === 200) {
-                  this.$message({
-                    message: res.msg,
-                    type: 'success'
-                  });
-                  this.back()
-                }
-              })
-            } else {
-              this.$message({
-                message: '请维护物料类别后再提交',
-                type: 'warning'
-              });
-            }
+            addReq(sparams).then(res => {
+              if(res.code === 200) {
+                this.$message({
+                  message: res.msg,
+                  type: 'success'
+                });
+                this.back()
+              }
+            })
           }
         })
       }
@@ -1375,6 +1485,7 @@ export default {
       console.log('提交参数', sparams)
       this.$refs['basic'].validate((valid) => {
         if(valid) {
+          // 提交时候要维护物料类别
           if (this.sysMaterialMedcineItemApply.length !== 0) {
             editReq(sparams).then(res => {
               if(res.code === 200) {
@@ -1570,6 +1681,19 @@ export default {
     chooseDrug () {
       this.$refs.drug.init()
     },
+    // 选择中包装单位
+    acceptMidpack (selections) {
+      console.log('接收到的中包装单位', selections)
+      this.midPackOptions = selections
+      console.log('绑定的数组',this.midPackOptions)
+      this.basicForm.mediumPackageUnitId = selections[0].id
+      this.getMidPackDetails(selections[0].id)
+    },
+    // 中包装单位显示列表
+    chooseMidpack () {
+      this.$refs.midpacks.blur()
+      this.$refs.midpack.init()
+    }
   }
 }
 </script>

+ 2 - 2
vue.config.js

@@ -37,8 +37,8 @@ module.exports = {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         // target: `http://172.16.100.107:8080/drp-admin`, //测试
-        // target: `http://test-sy.derom.com/drp-admin`, //测试
-        target: `http://sy.derom.com/drp-admin`, //生产
+        target: `http://test-sy.derom.com/drp-admin`, //测试
+        // target: `http://sy.derom.com/drp-admin`, //生产
         // target: `http://172.16.63.202:8000/drp-admin`, // D本地
         // target: `http://172.16.62.241:8000/drp-admin`, //笑寒本地
         // target: `http://172.16.13.152:8000/drp-admin`, //豪哥本地