Эх сурвалжийг харах

修改入库及商品档案新增,修改部分样式

sakura 1 жил өмнө
parent
commit
1d38f5722c

+ 0 - 62
README.md

@@ -1,24 +1,3 @@
-# MagicErp
-
-## ERP简介
-
-MagicErp是使用java语言开发,基于SpringBoot2.X架构体系构建的一套erp系统,主要包含采购管理、仓库管理、销售管理、商品管理、库存报表、基础配置和系统配置等功能,细节上包含采购入库、订单销售、出库发货、库存盘点、库存报损、商品调拨、库存预警等基础进销存功能,同时可以根据不同的用户角色展示不同的数据以及按钮权限。致力于为广大企业提供高效便捷的ERP库存管理系统。
-
-## api仓库地址
-
-https://gitee.com/javastore/magic-erp.git
-
-## 演示
-
-### 演示地址
-
-http://erp.javastore.cn 
-
-账号:superadmin
-
-密码:111111
-
-
 ## 技术栈
 
 ### 服务端
@@ -52,44 +31,3 @@ http://erp.javastore.cn
 | 百度 UEditor      | 富文本编辑器 |        |
 | 百度 Web Uploader | 图片上传插件 |        |
 
-## 功能介绍
-| 功能   | 描述                                                                                           |
-|------|----------------------------------------------------------------------------------------------|
-| 采购管理 | 包括采购计划、合同管理、采购入库、供应商退货、供应商结算等采购相关模块,管理员可根据采购计划以及和三方签订的采购合同进行采购入库,和供应商根据采购入库单进行结算。            | 
-| 仓库管理 | 包括商品调拨、商品借出、商品换货、库存盘点、库存报损、库存预警等库存相关模块,管理员可以将商品在不同的仓库之间进行调拨,对单个仓库商品进行盘点,对需要商品进行报损和查看库存预警的商品。 |
-| 库存报表 | 包括库存统计、库存成本统计、总入库统计、供应商退货统计、出库统计、订单退货统计、调拨统计、库存调整统计、商品换货统计等库存变动报表。                           |
-| 销售管理 | 包括订单列表、出库管理、订单退货模块,管理员可以创建销售订单,对订单进行发货、付款处理,也可对订单进行退货处理。                                     |
-| 商品管理 | 包括商品档案、规格管理、品牌管理模块,管理员新增/编辑商品基础信息,维护库存预警数量,管理商品分类、规格参数、品牌等信息。                                |
-| 基础设置 | 包括供应商管理、营销经理管理、仓库管理、编号规则设置、会员管理、支付方式管理、地区管理、物流公司管理、门店管理、运费模板模块。                              |
-| 系统管理 | 包括系统设置、存储方案、数据字典、日志管理、openapi秘钥配置、人员管理、权限管理、菜单维护、部门管理、岗位管理模块。                                |
-
-## 效果图
-![首页](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E9%A6%96%E9%A1%B5.png)
-![采购入库](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E9%87%87%E8%B4%AD%E5%85%A5%E5%BA%93.png)
-![订单退货](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E8%AE%A2%E5%8D%95%E9%80%80%E8%B4%A7.png)
-![订单列表](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E8%AE%A2%E5%8D%95%E5%88%97%E8%A1%A8.png)
-![新增商品](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E6%96%B0%E5%A2%9E%E5%95%86%E5%93%81.png)
-![库存盘点](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E5%BA%93%E5%AD%98%E7%9B%98%E7%82%B9.png)
-![商品调拨](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E5%95%86%E5%93%81%E8%B0%83%E6%8B%A8.png)
-![商品列表](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E5%95%86%E5%93%81%E5%88%97%E8%A1%A8.png)
-![创建订单](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E5%88%9B%E5%BB%BA%E8%AE%A2%E5%8D%95.png)
-![仓库管理](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E4%BB%93%E5%BA%93%E7%AE%A1%E7%90%86.png)
-![供应商管理](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E4%BE%9B%E5%BA%94%E5%95%86%E7%AE%A1%E7%90%86.png)
-![供应商结算](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E4%BE%9B%E5%BA%94%E5%95%86%E7%BB%93%E7%AE%97.png)
-![供应商退货](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E4%BE%9B%E5%BA%94%E5%95%86%E9%80%80%E8%B4%A7.png)
-![入库统计](https://hys-project.oss-cn-beijing.aliyuncs.com/erp/%E5%85%A5%E5%BA%93%E5%95%86%E5%93%81%E7%BB%9F%E8%AE%A1.png)
-
-## 使用须知
-
-1. 允许个人学习使用。
-2. 允许用于学习、毕业设计等。
-3. 禁止将本开源的代码和资源进行任何形式任何名义的出售。
-4. 限制商业使用,如需联系QQ:2025555598 或微信扫一扫加我微信。
-
-   ![](https://shoptnt-bbc.oss-cn-beijing.aliyuncs.com/tnt/12261709021247_.pic.jpg?x-oss-process=style/300x300)
-
-## 交流、反馈
-
-### 推荐
-官方QQ群:
-<a target="_blank" href="https://qm.qq.com/q/JLXlUb0GMa"><img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="magicErp开源交流群" title="magicErp开源交流群"></a> 827733509

+ 1 - 1
manager-admin/index.html

@@ -11,7 +11,7 @@
   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
   <meta name="renderer" content="webkit">
   <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-  <title>magic-erp</title>
+  <title>erp</title>
 </head>
 <body>
 <div id="app">

+ 9 - 9
manager-admin/src/components/SkuEditor/src/helper.js

@@ -31,15 +31,15 @@ export const defaultParams = [
   //   reg: RegExp.money,
   //   batch: true
   // },
-  {
-    key: 'sn_code',
-    name: '序列号',
-    // value: 0,
-    type: 'string',
-    required: true,
-    reg: RegExp.money,
-    batch: true
-  },
+  // {
+  //   key: 'sn_code',
+  //   name: '序列号',
+  //   // value: 0,
+  //   type: 'string',
+  //   required: false,
+  //   reg: RegExp.money,
+  //   batch: true
+  // },
   {
     key: 'price',
     name: '价格',

+ 17 - 3
manager-admin/src/components/SkuEditor/src/main.vue

@@ -93,6 +93,16 @@
             <span>{{ formatterSpecText(row) }}</span>
           </template>
         </el-table-column>
+        <el-table-column label="序列号" align="center" v-if="haveSn">
+          <template v-slot="{ row }">
+            <el-input-number
+              v-model="row.sn_code"
+              :controls="false"
+              :max="99999999"
+              style="width: 95%"
+              />
+          </template>
+        </el-table-column>
         <el-table-column v-for="item in tableColumns" :key="item.key" align="center">
           <template v-slot:header="{ row }">
             <div>
@@ -236,6 +246,10 @@ export default {
     haveSpec: {
       type: Boolean,
       default: false
+    },
+    haveSn: {
+      type: Boolean,
+      default: false
     }
   },
   data() {
@@ -322,7 +336,7 @@ export default {
     },
     // 获取商品sku信息
     async getSkuList() {
-      const skuList = await Helper.getGoodsSkus(this.goodsId)
+      // const skuList = await Helper.getGoodsSkus(this.goodsId)
       this.skuForm.skuList = Helper.cloneJson(skuList)
       this.rawSkuList = Helper.cloneJson(skuList)
     },
@@ -331,9 +345,9 @@ export default {
       const specs = Helper.getSelectedSpecsFormSpecList(this.skuForm.selectedSpecs, this.specList)
       const table = Helper.makeTableForm(specs, this.params, this.skuForm.skuList, this.haveSpec)
       this.tableColumns = table.columns
-      console.log(this.tableColumns);
+      // console.log(this.tableColumns);
       this.skuForm.skuList = table.data
-      // // 如果是单规格,不用选择规格,默认给一个sku
+      //如果是单规格,不用选择规格,默认给一个sku
       if(!this.haveSpec) {
         this.skuForm.skuList = [{}]
       }

+ 2 - 1
manager-admin/src/styles/sidebar.scss

@@ -41,13 +41,14 @@
       margin-right: 16px;
     }
     .logo-container {
-      height: 60px;
+      height: 61px;
       background-color: $menu_logo_bg!important;
       display: flex;
       flex-direction: column;
       align-items: center;
       justify-content: center;
       padding: 10px 0;
+      border-bottom: 1px solid #e9eef3;
       .logo-img {
         width: 100px;
         margin-top: 26px;

+ 4 - 1
manager-admin/src/views/basicSetting/brand.vue

@@ -107,7 +107,9 @@ export default {
       dialogBrandVisible: false,
 
       /** 添加、修改品牌 表单 */
-      brandForm: {},
+      brandForm: {
+        logo:".."
+      },
       /** 存储上传的图片*/
       fileList: [],
       /** 添加、修改品牌 表单规则 */
@@ -185,6 +187,7 @@ export default {
     submitBrandForm(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
+          this.brandForm.logo="11"
           const { brand_id } = this.brandForm
           if (!brand_id) {
             API_brand.addBrand(this.brandForm).then(() => {

+ 17 - 7
manager-admin/src/views/basicSetting/goods/editForm/BasicInfo.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-form :model="formData" :rules="formRules" ref="formRef" label-width="120px">
+    <el-form :model="formData" :rules="formRules" ref="formRef" label-width="130px">
       <el-form-item prop="name" label="商品名称" :rules="formRules.name">
         <el-input
           class="form-item-width"
@@ -11,7 +11,7 @@
           placeholder="请输入商品名称"
         ></el-input>
       </el-form-item>
-      <el-form-item prop="en_name" label="商品英文名称" :rules="formRules.name">
+      <el-form-item prop="en_name" label="商品英文名称" :rules="formRules.en_name">
         <el-input
           class="form-item-width"
           v-model="formData.en_name"
@@ -35,6 +35,7 @@
         <el-cascader
           class="form-item-width"
           v-model="formData.category_id"
+          clearable
           :options="categoryList"
           :props="{
             label: 'name',
@@ -45,7 +46,7 @@
         />
       </el-form-item>
       <el-form-item prop="brand_id" label="品牌">
-        <el-select class="form-item-width" v-model="formData.brand_id">
+        <el-select class="form-item-width" v-model="formData.brand_id" clearable>
           <el-option
             v-for="item in brandList"
             :key="item.name"
@@ -61,10 +62,17 @@
         </el-radio-group>
       </el-form-item>
       <el-form-item prop="allow_sn" label="是否启用序列号" :rules="formRules.allow_sn">
-        <el-radio-group v-model="formData.allow_sn">
+        <!-- <el-radio-group v-model="formData.allow_sn">
           <el-radio :label=1>是</el-radio>
           <el-radio :label=2>否</el-radio>
-        </el-radio-group>
+        </el-radio-group> -->
+        <el-switch
+          v-model="formData.allow_sn"
+          :active-value="1"
+          :inactive-value="2"
+          active-color="#13ce66"
+          inactive-color="#ff4949">
+        </el-switch>
       </el-form-item>
       <el-form-item label="商品图片" prop="image_list" :rules="formRules.image_list">
         <upload-sortable :goodsGalleryList="formData.image_list" @change="handlePictureChange"/>
@@ -169,14 +177,16 @@ export default {
       formData: {
         image_list: [],
         video: '',
-        market_enable: true
+        market_enable: true,
+        allow_sn:2
       },
       formRules: {
         name: [this.MixinRequired('请输入商品名称', 'change')],
         sn: [this.MixinRequired('请输入商品编号', 'change')],
         category_id: [this.MixinRequired('请选择商品类别', 'change')],
         image_list: [this.MixinRequired('请添加商品图片', 'change')],
-        market_enable: [this.MixinRequired('请选择是否上架', 'change')]
+        market_enable: [this.MixinRequired('请选择是否上架', 'change')],
+        allow_sn:[this.MixinRequired('请选择是否启用序列号', 'change')]
       },
       // 分类列表
       categoryList: [],

+ 9 - 1
manager-admin/src/views/basicSetting/goods/editForm/Sku.vue

@@ -7,6 +7,12 @@
           <el-radio :label="true">有规格</el-radio>
         </el-radio-group>
       </el-form-item>
+      <el-form-item label="序列号" >
+        <el-radio-group v-model="formData.haveSn">
+          <el-radio :label="false">无</el-radio>
+          <el-radio :label="true">有</el-radio>
+        </el-radio-group>
+      </el-form-item>
       <el-form-item label="SKU信息" prop="product_list">
         <template slot="label">
           <span style="color: #F56C6C;margin-right: 1px">*</span>SKU信息
@@ -17,6 +23,7 @@
           :goodsInfo="formData"
           :categoryId="category_id"
           :have-spec="formData.haveSpec"
+          :have-sn="formData.haveSn"
         />
       </el-form-item>
     </el-form>
@@ -42,7 +49,8 @@ export default {
     return {
       // 表单数据
       formData: {
-        haveSpec:false
+        haveSpec:false,
+        haveSn:false
       },
       formRules: {
         haveSpec: [this.MixinRequired('请选择规格类型', 'change')]

+ 9 - 13
manager-admin/src/views/basicSetting/goods/index.vue

@@ -61,14 +61,14 @@
                 @click.stop="handleEditSpecs(data)"
                 >规格</el-button
               >
-              <el-button
+            <!--   <el-button
                 type="text"
                 size="mini"
                 icon="el-icon-setting"
                 v-if="checkPermission(['category:params'])"
                 @click.stop="handleEditParams(data)"
                 >参数</el-button
-              >
+              > -->
             </span>
           </span>
         </el-tree>
@@ -79,7 +79,7 @@
           class="draggable-table"
 		      :row-key="getRowKeys"
           :loading="loading"
-          style="padding: 10px 10px 0 10px"
+          style="margin: 10px 10px 0 10px"
         >
           <div slot="toolbar" class="inner-toolbar">
             <div class="toolbar-btns">
@@ -155,7 +155,7 @@
             @size-change="handlePageSizeChange"
             @current-change="handlePageCurrentChange"
             :current-page="tableData.page_no"
-            :page-sizes="[10, 20, 50, 100]"
+            :page-sizes="[50, 70, 90, 100]"
             :page-size="tableData.page_size"
             layout="total, sizes, prev, pager, next, jumper"
             :total="tableData.data_total"
@@ -256,7 +256,7 @@ export default {
       // 列表参数
       params: {
         page_no: 1,
-        page_size: 10,
+        page_size: 50,
         category_id: "",
       },
       // 列表数据
@@ -311,11 +311,8 @@ export default {
         });
       });
     }, */
-    updateList() {
-      let ids = this.tableData.map((item) => item.id);
-      console.log(ids);
-      // 调用排序接口
-      API_Goods.updateSort({ ids: ids }).then((res) => {
+    updateList(id,sort) {
+      API_Goods.updateSort({ goods_id: id,sort:sort }).then((res) => {
         if (res.errno != 0) {
           this.getList();
         }
@@ -332,9 +329,8 @@ export default {
         onEnd({ newIndex, oldIndex }) {
           const currRow = _this.tableData.data.splice(oldIndex, 1)[0];
           _this.tableData.data.splice(newIndex, 0, currRow);
-          let ids = _this.tableData.data.map((item) => item.id);
-          console.log(ids);
-          // _this.updateList();
+          console.log(currRow);
+          _this.updateList(currRow.id,currRow.sort);
         },
       });
     },

+ 2 - 2
manager-admin/src/views/setting/serialList.vue

@@ -360,10 +360,10 @@ export default {
       this.GET_WarehouseList();
     },
 
-    /** 获取仓库列表 */
+    /** 获取序列号列表 */
     GET_WarehouseList() {
       this.loading = true;
-      API_Setting.getDictCount(this.params)
+      API_Setting.getDictSn(this.params)
         .then((response) => {
           this.loading = false;
           this.tableData = response;

+ 32 - 8
manager-admin/src/views/stock/goodsExchange/addInventory.vue

@@ -105,7 +105,7 @@
             </el-table-column>
             <el-table-column label="条码">
               <template slot-scope="scope">
-                {{ scope.row.product_barcode }}
+                {{ scope.row.bar_code }}
               </template>
             </el-table-column>
             <el-table-column label="序列号">
@@ -115,15 +115,17 @@
             </el-table-column>
             <el-table-column label="规格型号">
               <template slot-scope="scope">
-                {{ scope.row.specification }}
+                {{ scope.row.goods_style }}
               </template>
             </el-table-column>
             <el-table-column label="单位">
               <template slot-scope="scope">
-                {{ scope.row.unit }}
+                {{ scope.row.goods_unit }}
               </template>
             </el-table-column>
-            <el-table-column label="订单数量"> </el-table-column>
+            <el-table-column label="订单数量">
+
+            </el-table-column>
             <el-table-column label="入库数量">
               <template slot-scope="scope">
                 <el-input
@@ -219,6 +221,7 @@
             v-model="scanGoodsForm.bar_code"
             ref="input"
             @keyup.enter.native="toSearch()"
+            @blur="blurCode()"
             :minlength="0"
             :maxlength="100"
           ></el-input>
@@ -275,6 +278,7 @@ import * as API_BasicSetting from "@/api/basicSetting";
 import * as API_Erp from "@/api/erp";
 import * as API_Auth from "@/api/auth";
 import * as API_order from "@/api/order";
+import * as API_Goods from "@/api/goods";
 export default {
   name: "goodsExchangeAdd",
   data() {
@@ -450,13 +454,33 @@ export default {
     ...mapGetters(["user"]),
   },
   methods: {
+    // 根据条码 序列号查询商品
+    blurCode(){
+      if(this.scanGoodsForm.bar_code!==undefined || this.scanGoodsForm.sn_code!==undefined){
+        // 通过列表查询商品详细信息
+        API_Goods.getGoodsList({barcode:this.scanGoodsForm.bar_code,sncode:this.scanGoodsForm.sn_code}).then(res=>{
+          console.log(res);
+          this.goodsExchangeAddForm.contract_product_list=res.data
+          this.scanDialogVisible=false
+        })
+      }
+    },
     // 查询订单编号
     blurUsername(){
-     /*  API_order.getOrderList({sn:this.goodsExchangeAddForm.sn}).then(res=>{
-        console.log(res.data);
-        this.goodsExchangeAddForm.order_id= Number(res.data[0].id)
-      }) */
+      if(this.goodsExchangeAddForm.sn!==undefined){
+        API_order.getOrderList({sn:this.goodsExchangeAddForm.sn}).then(res=>{
+          console.log(res.data);
+          this.goodsExchangeAddForm.order_id= Number(res.data[0].id)
+          this.goodsExchangeAddForm.contract_product_list=res.data
+        })
+      }/* else{
+        this.$message.error("请填写订单编号")
+      } */
     },
+    /* 通过id查询商品信息
+    orderInfo(id){
+      API_
+    },*/
     handleSelectionChange(val) {
       this.goodsList = val.map((el) => {
         el.product_id = el.id;

+ 4 - 0
manager-admin/src/views/stock/goodsExchange/goodsExchange.vue

@@ -337,7 +337,11 @@ export default {
   watch: {
     $route: function ({ query }) {
       this.params.page_no = 1;
+      if(this.activeName=='first'){
       this.GET_GoodsExchangeList();
+      }else{
+        this.GET_WarehouseEntry()
+      }
     },
   },
   methods: {

+ 2 - 2
manager-admin/src/views/stock/order.vue

@@ -424,9 +424,9 @@ export default {
     margin-left: 20px;
   }
 }
-.container {
+/* .container {
   padding: 10px 10px 0 10px;
-}
+} */
 
 /deep/ .el-table {
   min-height: auto !important;