廖井涛
2024-04-23 becb12053fa550c8df8585d5772c29a71820259a
添加库存管理基础数据功能
7个文件已修改
3个文件已添加
505 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/router/index.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/basicData/WarehouseBasicData.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/basicData/WarehouseCreateBasicData.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/basicData/WarehouseSearchBasicData.vue 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/mm/BasicWarehouseTypeController.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/mm/BasicWarehouseType.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/mm/BasicWarehouseTypeMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/mm/BasicWarehouseTypeService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/BasicWarehouseType.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/mm/BasicWarehouseType.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/router/index.js
@@ -900,6 +900,28 @@
          ]
        },
        {
          /*----------- 基础数据 ----------------*/
          path: 'warehouseBasicData',
          name: 'warehouseBasicData',
          component: () => import('../views/mm/basicData/WarehouseBasicData.vue'),
          children: [
            {
              path: 'warehouseSearchBasicData',
              name: 'warehouseSearchBasicData',
              component: () => import('../views/mm/basicData/WarehouseSearchBasicData.vue'),
            },
            {
              path: 'warehouseCreateBasicData',
              name: 'warehouseCreateBasicData',
              component: () => import('../views/mm/basicData/WarehouseCreateBasicData.vue'),
            },
            {
              path: '',
              redirect: '/main/warehouseBasicData/warehouseSearchBasicData'
            }
          ]
        },
        {
          path: '',
          redirect:'/main/order'
        }
north-glass-erp/northglass-erp/src/views/mm/basicData/WarehouseBasicData.vue
New file
@@ -0,0 +1,61 @@
<script setup>
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router"
import {useI18n} from "vue-i18n"
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
let indexFlag=$ref(1)
function changeRouter(index){
  indexFlag=index
}
</script>
<template>
  <div id="main-div">
    <div id="div-title">
      <el-breadcrumb :separator-icon="ArrowRight">
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/warehouseBasicData/warehouseSearchBasicData' }">基础数据</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <div id="main-body">
      <router-view :key="route.fullPath" />
    </div>
  </div>
</template>
<style scoped>
#main-div{
  width: 99%;
  height: 100%;
}
#div-title{
  height: 2%;
  width: 100%;
}
#searchButton{
  margin-top: -5px;
  margin-left: 1rem;
}
#searchButton1{
//margin-left: 10rem;
}
/*main-body样式*/
#main-body{
  width: 100%;
  height: 95%;
  margin-top: 1%;
}
#select{
  margin-left:0.5rem;
}
:deep(.indexTag .el-breadcrumb__inner){
  color: #5CADFE !important;
}
</style>
north-glass-erp/northglass-erp/src/views/mm/basicData/WarehouseCreateBasicData.vue
New file
@@ -0,0 +1,136 @@
<script setup>
import request from "@/utils/request"
import {onMounted, ref, watch} from "vue";
import {useI18n} from "vue-i18n"
import {ElMessage} from "element-plus"
import {useRouter,useRoute} from "vue-router"
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
let basic = ref({
  operateType:'',
  type : '',
  input:''
})
let options=ref([
  { label: "库存组织",
    value: "inventoryOrganization",
  },
  { label: "领出",
    value: "takeOut",
  },
  { label: "材料出库类型",
    value: "outboundType",
  },
  { label: "材料返库类型",
    value: "returningType",
  },
])
let props = defineProps({
  rowIndex:{
    Object,
    default: null
  }
})
onMounted(() =>{
  if(props.rowIndex){
    basic.value.operateType =  props.rowIndex.operateType
    basic.value.type =  props.rowIndex.type
    basic.value.input =  props.rowIndex.operateTypeName
  }
})
const emit =  defineEmits(['gaveParent'])
const saveBasicData =  () =>{
  if (basic.value.operateType[0]==='inventoryOrganization'){
    basic.value.type='库存组织'
  }
  else if(basic.value.operateType[0]==='takeOut'){
    basic.value.type='领出'
  }
  else if(basic.value.operateType[0]==='outboundType'){
    basic.value.type='材料出库类型'
  }
  else if(basic.value.operateType[0]==='returningType'){
    basic.value.type='材料返库类型'
  }
  if(basic.value.operateType[0]==='' || basic.value.input===''){
    return
  }
  request.post(`/BasicWarehouse/addBasicWarehouse`, basic.value).then(res => {
    if (res.data) {
      ElMessage.success('保存成功')
      emit('gaveParent', true)
    }
  })
}
const updateBasicData =  () =>{
  let submitArr  = props.rowIndex
  submitArr.operateType = basic.value.operateType
  submitArr.type = basic.value.type
  submitArr.operateTypeName = basic.value.input
  if(basic.value.input===''){
    ElMessage.warning('请输入数据')
  }else{
    request.post(`/BasicWarehouse/updateBasicWarehouse`, submitArr).then(res => {
      if (res.data) {
        ElMessage.success('修改成功')
        emit('gaveParent', true)
      }
    })
  }
}
const handleChange = (value) => {
  const filterArr = options.value.filter((item) =>item.value === value[0]
  ).map((item) =>item.children.filter((item) =>item.value === value[1]))
}
</script>
<template>
  <div>
    <el-row>
      <el-col :span="4">基础类型:</el-col>
      <el-col :span="12">
        <el-cascader
            v-model="basic.operateType"
            :options="options"
            clearable
            placeholder=""
            :disabled="props.rowIndex"
        />
      </el-col>
    </el-row>
    <el-row>
      <el-col :span="4">名称:</el-col>
      <el-col :span="12">
        <el-input v-model="basic.input"/>
      </el-col>
    </el-row>
    <el-row>
      <el-col :span="4"></el-col>
      <el-col :span="12">
        <el-button v-show="!props.rowIndex" @click="saveBasicData" type="primary">新增</el-button>
        <el-button v-show="props.rowIndex" @click="updateBasicData" type="primary">修改</el-button>
      </el-col>
    </el-row>
  </div>
</template>
<style scoped>
div{
  text-align: center;
}
.el-row{
  margin-top: 10px;
}
</style>
north-glass-erp/northglass-erp/src/views/mm/basicData/WarehouseSearchBasicData.vue
New file
@@ -0,0 +1,185 @@
<script setup>
import {reactive, ref} from "vue";
import {VXETable} from "vxe-table";
import {ElMessage} from "element-plus";
import request from "@/utils/request"
import CreateBasicData from "@/views/sd/basicData/CreateBasicData.vue"
import {useRouter,useRoute} from "vue-router"
import {useI18n} from "vue-i18n"
import WarehouseCreateBasicData from "@/views/mm/basicData/WarehouseCreateBasicData.vue";
const { t } = useI18n()
let dialogTableVisible = ref(false)
const router = useRouter()
const xGrid = ref()
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  //表头参数
  columns:[
    {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",},
    {type: 'seq', title: '序号', width: 80 ,fixed:"left",},
    {field:'operateTypeName',title: '名称'},
    {field:'operateType',title: '别称'},
    {field:'type',title: '类型'},
    {field:'createTime',title: '创建日期'},
  ],
  //表头按钮
  toolbarConfig: {
    buttons: [
      {'code': 'add', 'name': '新增',status: 'primary'},
    ],
    // import: false,
    // export: true,
    // print: true,
    zoom: true,
    custom: true
  },
  footerMethod ({ columns, data }) {//页脚函数
    return[
      columns.map((column, columnIndex) => {
        // if (columnIndex === 0) {
        //   return t('basicData.total')
        // }
        // if (props.tableProp.footList.includes(column.field)) {
        //   return sumNum(data, column.field)
        // }
        return ''
      })
    ]
  }
})
const gridEvents = {
  toolbarButtonClick ({ code }) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'add': {
          rowIndex.value = null
          dialogTableVisible.value = true
          break
        }
      }
    }
  },
  menuClick ({ menu, row, column }) {
    const $grid = xGrid.value
    if ($grid) {
      switch (menu.code) {
      }
    }
  }
}
request.get('/BasicWarehouse/getBasicWarehouse').then(res => {
  if(res.code==='200'){
    xGrid.value.reloadData(res.data)
  }
})
const getChildrenFunction = (flag) => {
  if(flag){
    router.push({
      path:'/main/warehouseBasicData/warehouseSearchBasicData',
      query:{random:Math.random()
      }
    })
  }
}
let rowIndex = ref(null)
const getTableRow =  (row,type) => {
  switch (type) {
    case 'edit': {
      rowIndex.value = row
      dialogTableVisible.value = true
      break
    }
    case 'delete': {
      request.post(`/BasicWarehouse/deleteBasicWarehouse`,row).then((res) => {
        if(res.code==200){
          ElMessage.success(t('searchOrder.msgDeleteSuccess'))
          router.push({
            path:'/main/warehouseBasicData/warehouseSearchBasicData',
            query:{random:Math.random()
            }
          })
        }else{
          ElMessage.warning(t('searchOrder.msgDeleteFail'))
        }
      })
      break
    }
  }
}
</script>
<template>
  <div>
    <vxe-grid
        style="width: 40vw;"
        class="mytable-scrollbar"
        max-height="500px"
        ref="xGrid"
        v-bind="gridOptions"
        v-on="gridEvents"
    >
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{ $t('basicData.edit') }}</el-button>
        <el-popconfirm @confirm="getTableRow(row,'delete')" title="确定删除数据?">
          <template #reference>
            <el-button  link type="primary" size="small">{{ $t('basicData.delete') }}</el-button>
          </template>
        </el-popconfirm>
      </template>
    </vxe-grid>
    <el-dialog
        v-model="dialogTableVisible"
        destroy-on-close
        style="width: 30%;height:30% ">
      <WarehouseCreateBasicData :rowIndex="rowIndex" @gaveParent='getChildrenFunction'/>
    </el-dialog>
  </div>
</template>
<style scoped>
</style>
north-glass-erp/src/main/java/com/example/erp/controller/mm/BasicWarehouseTypeController.java
@@ -1,13 +1,14 @@
package com.example.erp.controller.mm;
import com.example.erp.common.Result;
import com.example.erp.entity.mm.BasicWarehouseType;
import com.example.erp.entity.sd.BasicData;
import com.example.erp.service.mm.BasicWarehouseTypeService;
import com.example.erp.service.sd.BasicDateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/BasicWarehouse")
@@ -24,4 +25,24 @@
        return Result.seccess(basicWarehouseTypeService.getBasicWarehouseTypes(type));
    }
    @GetMapping("/getBasicWarehouse")
    public Result getBasicWarehouse(){
        return Result.seccess(basicWarehouseTypeService.getBasicWarehouse());
    }
    @PostMapping("addBasicWarehouse")
    public Result addBasicWarehouse(@RequestBody Map<String,Object> map){
        return  Result.seccess(basicWarehouseTypeService.addBasicWarehouse(map));
    }
    @PostMapping("updateBasicWarehouse")
    public Result updateBasicWarehouse(@RequestBody BasicWarehouseType basicWarehouseType){
        return  Result.seccess(basicWarehouseTypeService.updateBasicWarehouse(basicWarehouseType));
    }
    @PostMapping("deleteBasicWarehouse")
    public Result deleteBasicWarehouse(@RequestBody BasicWarehouseType basicWarehouseType){
        return  Result.seccess(basicWarehouseTypeService.deleteBasicWarehouse(basicWarehouseType));
    }
}
north-glass-erp/src/main/java/com/example/erp/entity/mm/BasicWarehouseType.java
@@ -11,7 +11,6 @@
    @TableId(type = IdType.AUTO)
    private Long id;
    private Integer operateTypeId;
    private String operateTypeName;
    private String operateType;
    private String type;
north-glass-erp/src/main/java/com/example/erp/mapper/mm/BasicWarehouseTypeMapper.java
@@ -2,6 +2,7 @@
import com.example.erp.entity.mm.BasicWarehouseType;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.sd.BasicData;
import com.example.erp.entity.sd.OrderDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -19,5 +20,15 @@
    List<String> getBasicWarehouse(String type);
    List<BasicWarehouseType> getBasicWarehouseTypeAll();
    Boolean insertBasicWarehouse(@Param("operateTypeName") String operateTypeName,
                                 @Param("operateType") String operateType,
                                 @Param("type") String type);
    Boolean deleteBasicWarehouse(@Param("id") Long id);
    Boolean updateBasicWarehouse(@Param("id") Long id,@Param("operateTypeName") String operateTypeName);
}
north-glass-erp/src/main/java/com/example/erp/service/mm/BasicWarehouseTypeService.java
@@ -28,7 +28,6 @@
        for (BasicWarehouseType item : basicWarehouseType){
            Map<String, Object> map = new HashMap<>();
            map.put("id",item.getId());
            map.put("OperateTypeId",item.getOperateTypeId());
            map.put("OperateTypeName",item.getOperateTypeName());
            map.put("OperateType",item.getOperateType());
            map.put("Type","");
@@ -65,5 +64,24 @@
        return BasicDataMap;
    }
    public List<BasicWarehouseType> getBasicWarehouse() {
        return basicWarehouseTypeMapper.getBasicWarehouseTypeAll();
    }
    public boolean addBasicWarehouse(Map<String, Object> map) {
        List<String>  basicTypeList = (List<String>) map.get("operateType");
        basicWarehouseTypeMapper.insertBasicWarehouse(map.get("input").toString(),basicTypeList.get(0),map.get("type").toString());
        return true;
    }
    public boolean deleteBasicWarehouse(BasicWarehouseType basicWarehouseType) {
        return  basicWarehouseTypeMapper.deleteBasicWarehouse(basicWarehouseType.getId());
    }
    public boolean updateBasicWarehouse(BasicWarehouseType basicWarehouseType) {
        return  basicWarehouseTypeMapper.updateBasicWarehouse(basicWarehouseType.getId(),basicWarehouseType.getOperateTypeName());
    }
}
north-glass-erp/src/main/resources/mapper/mm/BasicWarehouseType.xml
@@ -20,6 +20,26 @@
        select operate_type from mm.basic_warehouse_type where type regexp #{type};
    </select>
    <select id="getBasicWarehouseTypeAll" >
        select * from mm.basic_warehouse_type where type!='原片' and type!='辅料'  order by id desc;
    </select>
    <insert id="insertBasicWarehouse"  useGeneratedKeys="true"  >
        insert into mm.basic_warehouse_type (operate_type_name, operate_type, type, create_time
        )
        values (
                   #{operateTypeName} ,#{operateType},#{type},now()
               )
    </insert>
    <delete id="deleteBasicWarehouse"  >
        delete from mm.basic_warehouse_type where id=#{id}
    </delete>
    <update id="updateBasicWarehouse"  >
        update mm.basic_warehouse_type set operate_type_name=#{operateTypeName},create_time=now() where id=#{id}
    </update>
north-glass-erp/target/classes/mapper/mm/BasicWarehouseType.xml
@@ -20,6 +20,26 @@
        select operate_type from mm.basic_warehouse_type where type regexp #{type};
    </select>
    <select id="getBasicWarehouseTypeAll" >
        select * from mm.basic_warehouse_type where type!='原片' and type!='辅料'  order by id desc;
    </select>
    <insert id="insertBasicWarehouse"  useGeneratedKeys="true"  >
        insert into mm.basic_warehouse_type (operate_type_name, operate_type, type, create_time
        )
        values (
                   #{operateTypeName} ,#{operateType},#{type},now()
               )
    </insert>
    <delete id="deleteBasicWarehouse"  >
        delete from mm.basic_warehouse_type where id=#{id}
    </delete>
    <update id="updateBasicWarehouse"  >
        update mm.basic_warehouse_type set operate_type_name=#{operateTypeName},create_time=now() where id=#{id}
    </update>